Project import generated by Copybara.

GitOrigin-RevId: 63746295f1a5ab5a619056791995793d65529e62
diff --git a/node_modules/mdl-ext/LICENSE b/node_modules/mdl-ext/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/node_modules/mdl-ext/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   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.
diff --git a/node_modules/mdl-ext/README.md b/node_modules/mdl-ext/README.md
new file mode 100644
index 0000000..8dcc4e5
--- /dev/null
+++ b/node_modules/mdl-ext/README.md
@@ -0,0 +1,376 @@
+# mdl-ext
+
+[![travis build](https://img.shields.io/travis/leifoolsen/mdl-ext.svg?style=flat-square)](https://travis-ci.org/leifoolsen/mdl-ext)
+[![codecov coverage](https://img.shields.io/codecov/c/github/leifoolsen/mdl-ext.svg?style=flat-square)](https://codecov.io/github/leifoolsen/mdl-ext)
+[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)](https://github.com/semantic-release/semantic-release)
+[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=flat-square)](http://commitizen.github.io/cz-cli/)
+[![version](https://img.shields.io/npm/v/mdl-ext.svg?style=flat-square)](http://npm.im/mdl-ext)
+
+
+Material Design Lite Ext (MDLEXT).
+Components built with the [Google Material Design Lite](https://github.com/google/material-design-lite) framework. MDLEXT provides the following components.
+
+* **Accordion**<br/>A WAI-ARIA friendly accordion component with vertcial or horizontal layout.<br/>**Note:** The accordion has been refactored and is not compatible with accordion prior to version 0.9.13
+* **Bordered fields**<br/>The Material Design Lite Ext (MDLEXT) bordered fields component demonstrates how you can create your own theme of MDL text fields.
+* **Carousel**<br/>A responsive image carousel.
+* **Collapsible**<br/>Accessible collapsible content regions.
+* **Color themes**<br/>Material design color themes.
+* **Formatfield**<br/>Language sensitive numberformatting.
+* **Grid**<br/>A responsive grid based on element queries in favour of media queries.
+* **Lightboard**<br/>A lightboard is a translucent surface illuminated from behind, used for situations where a shape laid upon the surface needs to be seen with high contrast. In the "old days" of photography photograpers used a lightboard to get a quick view of, sorting and organizing their slides.
+* **Lightbox**<br/>A lightbox displays an image filling the screen, and dimming out the rest of the web page. It acts as a modal dialog using the `<dialog>` element as a container for the lightbox.
+* **Menu Button**<br/>A WAI-ARIA friendly menu button.
+* **Selectfield**<br/>The Material Design Lite Ext (MDLEXT) select field component is an enhanced version of the standard HTML `<select>` element.
+* **Sticky Header**<br/>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.
+
+#### Live demo
+A Live demo of MDLEXT is available [here](http://leifoolsen.github.io/mdl-ext/index.html)
+>Works with modern browsers.
+>Tested on Edgde, IE11. Firefox: OSX, Ubuntu. Opera: OSX. Safari: OSX, IOS. Chrome: Win, Ubuntu, OSX, IOS, Android. 
+
+## Introduction
+The MDLEXT component library is built with responsiveness in mind. The pre built CSS provided in the lib directory therefore comes
+in two versions; one based on media queries and one based on **element queries**, using [eq.js](https://github.com/Snugug/eq.js).
+If you build the CSS from SASS, just import the correct sass file, `mdl-ext.scss` or `mdl-ext-eqjs.scss`.
+
+### Responsive breakpoints
+A common metod in responsive design is to use media queries to apply styles based on device
+characteristics. The problem with media queries is that they relates to the viewport - so every time you
+write a media query for `max-width` or `min-width`, you’re connecting the appearance of your module to the
+width of the entire canvas, not the part of the canvas the component occupies.
+
+#### Media queries are a hack
+Some developers claim that [media queries are a hack](http://ianstormtaylor.com/media-queries-are-a-hack/),
+and I totally agree! Imagine a design with a sidebar and a content area. In a responsive,
+fluent design both the sidebar and the content has "unknown" widths. Trying to add e.g. a responsive grid into the content
+area which relies on media queries, where you have no knowledge of how much space your content occupies, is
+in my opinion almost an impossible task.
+
+#### Element queries to the rescue
+An element query is similar to a media query in that, if a condition is met, some CSS will be applied.
+Element query conditions (such as `min-width`, `max-width`, `min-height` and `max-height`) are based on elements,
+instead of the browser viewport. Unfortunately, CSS doesn’t yet support element queries, but there are a
+couple of JavaScript-based polyfrills involving various syntaxes. **They are not standard - but that
+should not stop us from using them.** Element-first design is the spirit of the Atomic design principle, but
+looks very different in practice than how most people implement Atomic design using their mobile-first mindset.
+Instead of writing styles on advance for every conceivable situation a widget may find itself in, we are able
+to allow individual parts of the layout to adapt responsively when those elements require it.
+
+Some of the polyfrills available are:
+* [eq.js](https://github.com/Snugug/eq.js)
+* [EQCSS](https://github.com/eqcss/eqcss)
+* [CSS Element Queries](https://github.com/marcj/css-element-queries)
+* [BoomQueries](https://github.com/BoomTownROI/boomqueries)
+
+These are all good libraries, and they serve the purpose. After some evaluation I decided to go for
+[**eq.js**](https://github.com/Snugug/eq.js). It is a small library with support for width based breakpoints.
+It works without requiring a server to run (no Ajax stuff). It does not break the existing CSS standard.
+I can use SASS for styling, and it works well in a Webpack workflow.
+
+## Install
+If you haven't done so already, install [Material Design Lite](https://github.com/google/material-design-lite).
+
+```sh
+$ npm install --save material-design-lite
+```
+
+Install **mdl-ext**
+```sh
+$ npm install --save mdl-ext
+```
+
+Install **eq.js** if you choose to use the element query CSS/SASS version.
+```sh
+$ npm install --save eq.js
+```
+
+## Getting started
+
+### Use it in your (static) page
+```html
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Material Design Lite Extensions</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en">
+  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+  <link rel="stylesheet" href="node_modules/material-design-lite/material.css" />
+  <link rel="stylesheet" href="node_modules/mdl-ext/lib/mdl-ext.min.css" />
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer">
+  <main class="mdl-layout__content">
+  </main>
+</div>
+<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
+<script type="text/javascript" src="node_modules/material-design-lite/material.min.js" charset="utf-8"></script>
+<script type="text/javascript" src="node_modules/mdl-ext/lib/mdl-ext.min.js" charset="utf-8"></script>
+</body>
+</html>
+```
+
+>**Note:** You'll probably need several polyfills. If you don't want to waist time writing your own polyfills, the [polyfill.io](https://polyfill.io/v2/docs/) hosted service is a good choice. 
+```html
+<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
+```
+
+### Use it with element queries in your (static) page
+```html
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Material Design Lite Extensions</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en">
+  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+  <link rel="stylesheet" href="node_modules/material-design-lite/material.css" />
+  <link rel="stylesheet" href="node_modules/mdl-ext/lib/mdl-ext-eqjs.min.css" />
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer">
+  <main class="mdl-layout__content">
+  </main>
+</div>
+<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
+<script type="text/javascript" src="node_modules/material-design-lite/material.min.js" charset="utf-8"></script>
+<script type="text/javascript" src="node_modules/mdl-ext/lib/mdl-ext.min.js" charset="utf-8"></script>
+<script type="text/javascript" src="node_modules/eq.js/dist/eq.min.js" charset="utf-8"></script>
+</body>
+</html>
+```
+
+>**Note:** Always import `mdl-ext` css **after** `material` css. Adjust path to `node_modules` (libraries) according to where your HTML file is located.
+
+### Use it in your (webpack) build
+
+**Import SASS files into your main SCSS file, e.g. `./src/styles.scss`**
+
+```scss
+@charset "UTF-8";
+
+// 1.  Configuration and helpers
+
+// MDL image path
+$image_path: '~material-design-lite/src/images';
+
+// 2. Vendors
+
+// Import MDL
+@import '~material-design-icons/iconfont/material-icons.css';
+@import '~roboto-fontface/css/roboto-fontface.css';
+@import '~material-design-lite/src/material-design-lite';
+
+// Import MDLEXT
+@import '~mdl-ext/src/mdl-ext';
+
+// ... or import mdl-ext-eqjs
+//@import '~mdl-ext/src/mdl-ext-eqjs';
+
+// 3. Your stuff
+@import 'stylesheets/variables';
+@import 'stylesheets/app/whatever';
+```
+
+**Import material-design-lite, mdl-ext and styles.scss into your main JavaScript file, e.g. `./scr/index.js`**
+```javascript
+import 'material-design-lite/material';
+import 'mdl-ext';
+import './styles.scss';
+```
+
+**If you choose to use element queries, import `eq.js`**  
+```javascript
+import eqjs from 'eq.js';
+window.eqjs = eqjs; // Put in global scope - for use with script in page
+```
+
+### Use of specific components in your (webpack) build
+
+It is possible to use a selection of the provided MDLEXT components. Just import the specific MDLEXT SASS 
+module and the corresponding ES2015 JavaScript component. The following example demonstrates a setup that uses only two 
+of the MDLEXT components; menu-button and selectfield.
+
+**Import SASS files into your main SCSS file, e.g. `./src/styles.scss`**
+
+```scss
+@charset "UTF-8";
+
+// 1.  Configuration and helpers
+
+// MDL image path
+$image_path: '~material-design-lite/src/images';
+
+// Material Design Lite
+@import '~material-design-lite/src/variables';
+@import '~material-design-lite/src/mixins';
+
+// mdl-ext
+@import '~mdl-ext/src/variables';
+@import '~mdl-ext/src/mixins';
+@import '~mdl-ext/src/functions';
+
+// 2.  Vendors
+
+// Import MDL
+@import '~material-design-icons/iconfont/material-icons';
+@import '~roboto-fontface/css/roboto/sass/roboto-fontface-light';
+@import '~material-design-lite/src/material-design-lite';
+
+// Import required MDLEXT SASS modules
+@import '~mdl-ext/src/aria-expanded-toggle/aria-expanded-toggle';
+@import '~mdl-ext/src/menu-button/menu-button';
+@import '~mdl-ext/src/selectfield/selectfield';
+
+// 3. Your stuff
+@import 'stylesheets/variables';
+@import 'stylesheets/app/whatever';
+```
+
+**Import material-design-lite, mdl-ext components and styles.scss into your main JavaScript file, e.g. `./scr/index.js`**
+```javascript
+import 'material-design-lite/material';
+
+// Import MDLEXT components from the es folder
+import 'mdl-ext/es/menu-button/menu-button';
+import 'mdl-ext/es/selectfield/selectfield';
+
+import './styles.scss';
+```
+
+You can find a webpack project with this setup in the [example-webpack](./example-webpack) folder. Clone this repo, cd 
+into the `example-webpack` folder. Run `npm install`, then run `npm start` and open a browser @ http://localhost:8080/
+
+>**Note:** The `example-webpack` project is a stripped down version of the
+[webpack2-boilerplate](https://github.com/leifoolsen/webpack2-boilerplate) project. If you need a complete project
+setup, start with the webpack2 boilerplate or a similar boilerplate project. 
+
+ 
+## Components
+
+### Accordion
+![Accordion](./etc/flexbox-accordion.png)
+
+A [WAI-ARIA](https://www.w3.org/TR/wai-aria-practices-1.1/#accordion) friendly [**accordion**](./src/accordion/) 
+component with vertcial or horizontal layout.
+
+### Bordered fields
+![Bordered fields](./etc/bordered-fields-theme.png)
+
+The Material Design Lite Ext (MDLEXT) [**bordered fields**](./src/bordered-fields/) component demonstrates how you 
+can create your own theme of MDL text fields.
+
+### Carousel
+![Lightbox](./etc/carousel.png)
+
+A responsive image [**carousel**](./src/carousel/).
+
+### Collapsible - Collapse All the Things
+**Collapsed**
+
+![Collapsible collapsed](./etc/collapsible-collapsed.jpg)
+
+**Expanded**
+
+![Collapsible expanded](./etc/collapsible-expanded.jpg)
+
+Accessible [**collapsible**](./src/collapsible/) content regions.
+
+### Color themes
+![Palette](./etc/palette.png)
+
+The [**color-themes**](./src/color-themes/) component demonstrates how you can create your own themes of 
+[material design colors](https://www.google.com/design/spec/style/color.html).
+
+###Formatfield
+![Formatfield](./etc/formatfield.png)
+
+The [formatfield](./src/formatfield/) component formats an input field 
+using language sensitive number formatting.
+
+### Grid
+![Grid](./etc/grid.png)
+
+A responsive [**grid**](./src/grid) based on **element queries** in favour of media queries.
+
+### Lightboard
+![Lightboard](./etc/lightboard.png)
+
+A [**lightboard**](./src/lightboard/) is a translucent surface illuminated from behind, used for
+situations where a shape laid upon the surface needs to be seen with high contrast. In the "old days"
+of photography photograpers used a lightboard to get a quick view of, sorting and organizing their slides.
+
+### Lightbox
+![Lightbox](./etc/lightbox.png)
+
+A [**lightbox**](./src/lightbox/) displays an image filling the screen, and dimming out the rest of the web page. 
+It acts as a modal dialog using the `<dialog>` element as a container for the lightbox.
+
+### Menu Button
+![Menu button](./etc/menu-button.png)&nbsp;&nbsp;&nbsp;&nbsp; ![Menu button](./etc/menu-button-2.png)
+
+
+A [**menu button**](./src/menu-button/) is a button that opens a menu. It has roles, attributes and behaviour as outlined in 
+WAI-ARIA Authoring Practices, [2.20 Menu Button](https://www.w3.org/TR/wai-aria-practices/#menubutton).
+
+### Selectfield
+![Selectfield](./etc/select-element.png)
+
+The Material Design Lite Ext (MDLEXT) [**select field**](./src/selectfield/) component is an enhanced version
+of the standard [HTML `<select>`] (https://developer.mozilla.org/en/docs/Web/HTML/Element/select) element.
+
+### Sticky Header
+![StickyHeader](./etc/sticky-header.png)
+
+A [**sticky header**](./src/sticky-header/) makes site navigation easily accessible anywhere on the page and saves content space at the same.
+
+The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and 
+bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.
+
+## Notes
+>A Live demo of MDLEXT is available [here](http://leifoolsen.github.io/mdl-ext/index.html).<br/>
+>You can also download or clone a demo project from here: https://github.com/leifoolsen/mdl-webpack. The demo project demonstrates
+how you can set up MDL with Babel(6) and Webpack, and how to self host Font Roboto and Material Icons in your web application.
+
+>Polyfills you might need:
+>* [dialog-polyfill](https://github.com/GoogleChrome/dialog-polyfill)
+>* [eqjs](https://github.com/Snugug/eq.js)
+>* [custom-event polyfill](https://github.com/webmodules/custom-event) or [similar](https://github.com/leifoolsen/mdl-ext/blob/master/src/utils/custom-event-polyfill.js)
+>* [mutation-observer polyfill](https://github.com/webmodules/mutation-observer)
+>* [polyfill.io](https://polyfill.io/v2/docs/) 
+
+### Using Material Design Lite in a Single Page Application (SPA)
+If you use Material Design Lite in a dynamic page, e.g. a single page application, you must call 
+`componentHandler.upgradeElement` and `componentHandler.downgradeElements` accordingly to properly initialize an clean up 
+component resources when sections of the page is updated. In a static web application there should be no need to call 
+`componentHandler.downgradeElements`.
+
+The following code snippet demonstrates how to properly clean up MDL components before removing them from DOM.
+
+```javascript
+// Call 'componentHandler.downgradeElements' to clean up
+const content = document.querySelector('#content');
+const components = content.querySelectorAll('.is-upgraded');
+componentHandler.downgradeElements([...components]);
+
+// Remove elements from DOM.
+// See: http://jsperf.com/empty-an-element/16
+const removeChildElements = (element, forceReflow = true) => {
+  while (element.lastChild) {
+    element.removeChild(element.lastChild);
+  }
+  if(forceReflow) {
+    // See: http://jsperf.com/force-reflow
+    const d = element.style.display;
+    element.style.display = 'none';
+    element.style.display = d;
+  }
+}
+
+removeChildElements(content); 
+```
+
+
+## Licence
+© Leif Olsen, 2016. Licensed under an [Apache-2](https://github.com/leifoolsen/mdl-ext/blob/master/LICENSE) license.
+
+This software is built with the [Google Material Design Lite](https://github.com/google/material-design-lite) framework,
+which is licenced under an Apache-2 licence.
diff --git a/node_modules/mdl-ext/blacklisted-versions.md b/node_modules/mdl-ext/blacklisted-versions.md
new file mode 100644
index 0000000..a6017ba
--- /dev/null
+++ b/node_modules/mdl-ext/blacklisted-versions.md
@@ -0,0 +1,4 @@
+* extract-text-webpack-plugin-2.0.0, use 1.0.1 
+* jsdomify-3.1.0, use 2.1.0
+* sass-loader-6.x, use 4.1.1
+* webpack-2.x, use 0.14.0
diff --git a/node_modules/mdl-ext/es/accordion/accordion.js b/node_modules/mdl-ext/es/accordion/accordion.js
new file mode 100644
index 0000000..2d518ca
--- /dev/null
+++ b/node_modules/mdl-ext/es/accordion/accordion.js
@@ -0,0 +1,546 @@
+'use strict';
+
+var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
+
+var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+
+var _constants = require('../utils/constants');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+(function () {
+  'use strict';
+
+  var ACCORDION = 'mdlext-accordion';
+  var ACCORDION_VERTICAL = 'mdlext-accordion--vertical';
+  var ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';
+  var PANEL = 'mdlext-accordion__panel';
+  var PANEL_ROLE = 'presentation';
+  var TAB = 'mdlext-accordion__tab';
+  var TAB_CAPTION = 'mdlext-accordion__tab__caption';
+  var TAB_ROLE = 'tab';
+  var TABPANEL = 'mdlext-accordion__tabpanel';
+  var TABPANEL_ROLE = 'tabpanel';
+  var RIPPLE_EFFECT = 'mdlext-js-ripple-effect';
+  var RIPPLE = 'mdlext-accordion__tab--ripple';
+  var ANIMATION_EFFECT = 'mdlext-js-animation-effect';
+  var ANIMATION = 'mdlext-accordion__tabpanel--animation';
+
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  var MaterialExtAccordion = function MaterialExtAccordion(element) {
+
+    // Stores the Accordion HTML element.
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtAccordion'] = MaterialExtAccordion;
+
+  // Helpers
+  var accordionPanelElements = function accordionPanelElements(element) {
+    if (!element) {
+      return {
+        panel: null,
+        tab: null,
+        tabpanel: null
+      };
+    } else if (element.classList.contains(PANEL)) {
+      return {
+        panel: element,
+        tab: element.querySelector('.' + TAB),
+        tabpanel: element.querySelector('.' + TABPANEL)
+      };
+    } else {
+      return {
+        panel: element.parentNode,
+        tab: element.parentNode.querySelector('.' + TAB),
+        tabpanel: element.parentNode.querySelector('.' + TABPANEL)
+      };
+    }
+  };
+
+  // Private methods.
+
+  /**
+   * Handles custom command event, 'open', 'close', 'toggle' or upgrade
+   * @param event. A custom event
+   * @private
+   */
+  MaterialExtAccordion.prototype.commandHandler_ = function (event) {
+    event.preventDefault();
+    event.stopPropagation();
+
+    if (event && event.detail) {
+      this.command(event.detail);
+    }
+  };
+
+  /**
+   * Dispatch toggle event
+   * @param {string} state
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function (state, tab, tabpanel) {
+    var ce = new CustomEvent('toggle', {
+      bubbles: true,
+      cancelable: true,
+      detail: { state: state, tab: tab, tabpanel: tabpanel }
+    });
+    this.element_.dispatchEvent(ce);
+  };
+
+  /**
+   * Open tab
+   * @param {Element} panel
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.openTab_ = function (panel, tab, tabpanel) {
+    panel.classList.add(_constants.IS_EXPANDED);
+    tab.setAttribute(_constants.ARIA_EXPANDED, 'true');
+    tabpanel.removeAttribute('hidden');
+    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');
+    this.dispatchToggleEvent_('open', tab, tabpanel);
+  };
+
+  /**
+   * Close tab
+   * @param {Element} panel
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.closeTab_ = function (panel, tab, tabpanel) {
+    panel.classList.remove(_constants.IS_EXPANDED);
+    tab.setAttribute(_constants.ARIA_EXPANDED, 'false');
+    tabpanel.setAttribute('hidden', '');
+    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');
+    this.dispatchToggleEvent_('close', tab, tabpanel);
+  };
+
+  /**
+   * Toggle tab
+   * @param {Element} panel
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.toggleTab_ = function (panel, tab, tabpanel) {
+    if (!(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled'))) {
+      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {
+        this.closeTab_(panel, tab, tabpanel);
+      } else {
+        if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {
+          this.closeTabs_();
+        }
+        this.openTab_(panel, tab, tabpanel);
+      }
+    }
+  };
+
+  /**
+   * Open tabs
+   * @private
+   */
+  MaterialExtAccordion.prototype.openTabs_ = function () {
+    var _this = this;
+
+    if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() === 'true') {
+      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).filter(function (panel) {
+        return !panel.classList.contains(_constants.IS_EXPANDED);
+      }).forEach(function (closedItem) {
+        var tab = closedItem.querySelector('.' + TAB);
+        if (!tab.hasAttribute('disabled')) {
+          _this.openTab_(closedItem, tab, closedItem.querySelector('.' + TABPANEL));
+        }
+      });
+    }
+  };
+
+  /**
+   * Close tabs
+   * @private
+   */
+  MaterialExtAccordion.prototype.closeTabs_ = function () {
+    var _this2 = this;
+
+    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL + '.' + _constants.IS_EXPANDED))).forEach(function (panel) {
+      var tab = panel.querySelector('.' + TAB);
+      if (!tab.hasAttribute('disabled')) {
+        _this2.closeTab_(panel, tab, panel.querySelector('.' + TABPANEL));
+      }
+    });
+  };
+
+  // Public methods.
+
+  /**
+   * Upgrade an individual accordion tab
+   * @public
+   * @param {Element} tabElement The HTML element for the accordion panel.
+   */
+  MaterialExtAccordion.prototype.upgradeTab = function (tabElement) {
+    var _this3 = this;
+
+    var _accordionPanelElemen = accordionPanelElements(tabElement),
+        panel = _accordionPanelElemen.panel,
+        tab = _accordionPanelElemen.tab,
+        tabpanel = _accordionPanelElemen.tabpanel;
+
+    var disableTab = function disableTab() {
+      panel.classList.remove(_constants.IS_EXPANDED);
+      tab.setAttribute('tabindex', '-1');
+      tab.setAttribute(_constants.ARIA_EXPANDED, 'false');
+      tabpanel.setAttribute('hidden', '');
+      tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');
+    };
+
+    var enableTab = function enableTab() {
+      if (!tab.hasAttribute(_constants.ARIA_EXPANDED)) {
+        tab.setAttribute(_constants.ARIA_EXPANDED, 'false');
+      }
+
+      tab.setAttribute('tabindex', '0');
+
+      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {
+        panel.classList.add(_constants.IS_EXPANDED);
+        tabpanel.removeAttribute('hidden');
+        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');
+      } else {
+        panel.classList.remove(_constants.IS_EXPANDED);
+        tabpanel.setAttribute('hidden', '');
+        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');
+      }
+    };
+
+    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.
+    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.
+    /* istanbul ignore next */
+    var calcMaxTabCaptionWidth = function calcMaxTabCaptionWidth() {
+
+      var tabCaption = tab.querySelector('.' + TAB_CAPTION);
+      if (tabCaption !== null) {
+        var w = [].concat((0, _toConsumableArray3.default)(tab.children)).filter(function (el) {
+          return el.classList && !el.classList.contains(TAB_CAPTION);
+        }).reduce(function (v, el) {
+          return v + el.offsetWidth;
+        }, 0);
+
+        var maxWidth = tab.clientHeight - w;
+        if (maxWidth > 0) {
+          tabCaption.style['max-width'] = maxWidth + 'px';
+        }
+      }
+    };
+
+    var selectTab = function selectTab() {
+      if (!tab.hasAttribute(_constants.ARIA_SELECTED)) {
+        [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected="true"]'))).forEach(function (selectedTab) {
+          return selectedTab.removeAttribute(_constants.ARIA_SELECTED);
+        });
+        tab.setAttribute(_constants.ARIA_SELECTED, 'true');
+      }
+    };
+
+    var tabClickHandler = function tabClickHandler() {
+      _this3.toggleTab_(panel, tab, tabpanel);
+      selectTab();
+    };
+
+    var tabFocusHandler = function tabFocusHandler() {
+      selectTab();
+    };
+
+    var tabpanelClickHandler = function tabpanelClickHandler() {
+      selectTab();
+    };
+
+    var tabpanelFocusHandler = function tabpanelFocusHandler() {
+      selectTab();
+    };
+
+    var tabKeydownHandler = function tabKeydownHandler(e) {
+
+      if (_this3.element_.hasAttribute('disabled')) {
+        return;
+      }
+
+      if (e.keyCode === _constants.VK_END || e.keyCode === _constants.VK_HOME || e.keyCode === _constants.VK_ARROW_UP || e.keyCode === _constants.VK_ARROW_LEFT || e.keyCode === _constants.VK_ARROW_DOWN || e.keyCode === _constants.VK_ARROW_RIGHT) {
+
+        var nextTab = null;
+        var keyCode = e.keyCode;
+
+        if (keyCode === _constants.VK_HOME) {
+          nextTab = _this3.element_.querySelector('.' + PANEL + ':first-child > .' + TAB);
+          if (nextTab && nextTab.hasAttribute('disabled')) {
+            nextTab = null;
+            keyCode = _constants.VK_ARROW_DOWN;
+          }
+        } else if (keyCode === _constants.VK_END) {
+          nextTab = _this3.element_.querySelector('.' + PANEL + ':last-child > .' + TAB);
+          if (nextTab && nextTab.hasAttribute('disabled')) {
+            nextTab = null;
+            keyCode = _constants.VK_ARROW_UP;
+          }
+        }
+
+        if (!nextTab) {
+          var nextPanel = panel;
+
+          do {
+            if (keyCode === _constants.VK_ARROW_UP || keyCode === _constants.VK_ARROW_LEFT) {
+              nextPanel = nextPanel.previousElementSibling;
+              if (!nextPanel) {
+                nextPanel = _this3.element_.querySelector('.' + PANEL + ':last-child');
+              }
+              if (nextPanel) {
+                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);
+              }
+            } else if (keyCode === _constants.VK_ARROW_DOWN || keyCode === _constants.VK_ARROW_RIGHT) {
+              nextPanel = nextPanel.nextElementSibling;
+              if (!nextPanel) {
+                nextPanel = _this3.element_.querySelector('.' + PANEL + ':first-child');
+              }
+              if (nextPanel) {
+                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);
+              }
+            }
+
+            if (nextTab && nextTab.hasAttribute('disabled')) {
+              nextTab = null;
+            } else {
+              break;
+            }
+          } while (nextPanel !== panel);
+        }
+
+        if (nextTab) {
+          e.preventDefault();
+          e.stopPropagation();
+          nextTab.focus();
+
+          // Workaround for JSDom testing:
+          // In JsDom 'element.focus()' does not trigger any focus event
+          if (!nextTab.hasAttribute(_constants.ARIA_SELECTED)) {
+
+            [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected="true"]'))).forEach(function (selectedTab) {
+              return selectedTab.removeAttribute(_constants.ARIA_SELECTED);
+            });
+
+            nextTab.setAttribute(_constants.ARIA_SELECTED, 'true');
+          }
+        }
+      } else if (e.keyCode === _constants.VK_ENTER || e.keyCode === _constants.VK_SPACE) {
+        e.preventDefault();
+        e.stopPropagation();
+        _this3.toggleTab_(panel, tab, tabpanel);
+      }
+    };
+
+    if (tab === null) {
+      throw new Error('There must be a tab element for each accordion panel.');
+    }
+
+    if (tabpanel === null) {
+      throw new Error('There must be a tabpanel element for each accordion panel.');
+    }
+
+    panel.setAttribute('role', PANEL_ROLE);
+    tab.setAttribute('role', TAB_ROLE);
+    tabpanel.setAttribute('role', TABPANEL_ROLE);
+
+    if (tab.hasAttribute('disabled')) {
+      disableTab();
+    } else {
+      enableTab();
+    }
+
+    if (this.element_.classList.contains(ACCORDION_HORIZONTAL)) {
+      calcMaxTabCaptionWidth();
+    }
+
+    if (this.element_.classList.contains(RIPPLE_EFFECT)) {
+      tab.classList.add(RIPPLE);
+    }
+
+    if (this.element_.classList.contains(ANIMATION_EFFECT)) {
+      tabpanel.classList.add(ANIMATION);
+    }
+
+    // Remove listeners, just in case ...
+    tab.removeEventListener('click', tabClickHandler);
+    tab.removeEventListener('focus', tabFocusHandler);
+    tab.removeEventListener('keydown', tabKeydownHandler);
+    tabpanel.removeEventListener('click', tabpanelClickHandler);
+    tabpanel.removeEventListener('focus', tabpanelFocusHandler);
+
+    tab.addEventListener('click', tabClickHandler);
+    tab.addEventListener('focus', tabFocusHandler);
+    tab.addEventListener('keydown', tabKeydownHandler);
+    tabpanel.addEventListener('click', tabpanelClickHandler, true);
+    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);
+  };
+  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;
+
+  /**
+   * Execute command
+   * @param detail
+   */
+  MaterialExtAccordion.prototype.command = function (detail) {
+    var _this4 = this;
+
+    var openTab = function openTab(tabElement) {
+
+      if (tabElement === undefined) {
+        _this4.openTabs_();
+      } else if (tabElement !== null) {
+        var _accordionPanelElemen2 = accordionPanelElements(tabElement),
+            panel = _accordionPanelElemen2.panel,
+            tab = _accordionPanelElemen2.tab,
+            tabpanel = _accordionPanelElemen2.tabpanel;
+
+        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() !== 'true') {
+          _this4.toggleTab_(panel, tab, tabpanel);
+        }
+      }
+    };
+
+    var closeTab = function closeTab(tabElement) {
+      if (tabElement === undefined) {
+        _this4.closeTabs_();
+      } else if (tabElement !== null) {
+        var _accordionPanelElemen3 = accordionPanelElements(tabElement),
+            panel = _accordionPanelElemen3.panel,
+            tab = _accordionPanelElemen3.tab,
+            tabpanel = _accordionPanelElemen3.tabpanel;
+
+        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {
+          _this4.toggleTab_(panel, tab, tabpanel);
+        }
+      }
+    };
+
+    var toggleTab = function toggleTab(tabElement) {
+      if (tabElement) {
+        var _accordionPanelElemen4 = accordionPanelElements(tabElement),
+            panel = _accordionPanelElemen4.panel,
+            tab = _accordionPanelElemen4.tab,
+            tabpanel = _accordionPanelElemen4.tabpanel;
+
+        _this4.toggleTab_(panel, tab, tabpanel);
+      }
+    };
+
+    if (detail && detail.action) {
+      var action = detail.action,
+          target = detail.target;
+
+
+      switch (action.toLowerCase()) {
+        case 'open':
+          openTab(target);
+          break;
+        case 'close':
+          closeTab(target);
+          break;
+        case 'toggle':
+          toggleTab(target);
+          break;
+        case 'upgrade':
+          if (target) {
+            this.upgradeTab(target);
+          }
+          break;
+        default:
+          throw new Error('Unknown action "' + action + '". Action must be one of "open", "close", "toggle" or "upgrade"');
+      }
+    }
+  };
+  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtAccordion.prototype.init = function () {
+    var _this5 = this;
+
+    if (this.element_) {
+      // Do the init required for this component to work
+      if (!(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {
+        throw new Error('Accordion must have one of the classes "' + ACCORDION_HORIZONTAL + '" or "' + ACCORDION_VERTICAL + '"');
+      }
+
+      this.element_.setAttribute('role', 'tablist');
+
+      if (!this.element_.hasAttribute(_constants.ARIA_MULTISELECTABLE)) {
+        this.element_.setAttribute(_constants.ARIA_MULTISELECTABLE, 'false');
+      }
+
+      this.element_.removeEventListener('command', this.commandHandler_);
+      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+
+      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).forEach(function (panel) {
+        return _this5.upgradeTab(panel);
+      });
+
+      // Set upgraded flag
+      this.element_.classList.add(_constants.IS_UPGRADED);
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to downgrade
+   *
+   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {
+     'use strict';
+     console.log('***** MaterialExtAccordion.mdlDowngrade');
+   };
+   */
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtAccordion,
+    classAsString: 'MaterialExtAccordion',
+    cssClass: 'mdlext-js-accordion',
+    widget: true
+  });
+})(); /**
+       * @license
+       * Copyright 2016 Leif Olsen. 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.
+       *
+       * This code is built with Google Material Design Lite,
+       * which is Licensed under the Apache License, Version 2.0
+       */
+
+/**
+ * A WAI-ARIA friendly accordion component.
+ * An accordion is a collection of expandable panels associated with a common outer container. Panels consist
+ * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections
+ * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.
+ * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates
+ * and makes the contents of each panel visible (or not) by interacting with the Accordion Header
+ */
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/carousel/carousel.js b/node_modules/mdl-ext/es/carousel/carousel.js
new file mode 100644
index 0000000..51b9451
--- /dev/null
+++ b/node_modules/mdl-ext/es/carousel/carousel.js
@@ -0,0 +1,718 @@
+'use strict';
+
+var _isInteger = require('babel-runtime/core-js/number/is-integer');
+
+var _isInteger2 = _interopRequireDefault(_isInteger);
+
+var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
+
+var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+
+var _assign = require('babel-runtime/core-js/object/assign');
+
+var _assign2 = _interopRequireDefault(_assign);
+
+var _intervalFunction = require('../utils/interval-function');
+
+var _intervalFunction2 = _interopRequireDefault(_intervalFunction);
+
+var _easing = require('../utils/easing');
+
+var _jsonUtils = require('../utils/json-utils');
+
+var _constants = require('../utils/constants');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/**
+ * Image carousel
+ */
+
+var MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';
+
+(function () {
+  'use strict';
+
+  //const CAROUSEL = 'mdlext-carousel';
+
+  var SLIDE = 'mdlext-carousel__slide';
+  var ROLE = 'list';
+  var SLIDE_ROLE = 'listitem';
+
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  var MaterialExtCarousel = function MaterialExtCarousel(element) {
+    // Stores the element.
+    this.element_ = element;
+
+    // Default config
+    this.config_ = {
+      interactive: true,
+      autostart: false,
+      type: 'slide',
+      interval: 1000,
+      animationLoop: (0, _intervalFunction2.default)(1000)
+    };
+
+    this.scrollAnimation_ = (0, _intervalFunction2.default)(33);
+
+    // Initialize instance.
+    this.init();
+  };
+
+  window['MaterialExtCarousel'] = MaterialExtCarousel;
+
+  /**
+   * Start slideshow animation
+   * @private
+   */
+  MaterialExtCarousel.prototype.startSlideShow_ = function () {
+    var _this = this;
+
+    var nextSlide = function nextSlide() {
+      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected]');
+      if (slide) {
+        slide.removeAttribute('aria-selected');
+        slide = slide.nextElementSibling;
+      }
+      if (!slide) {
+        slide = _this.element_.querySelector('.' + SLIDE + ':first-child');
+        _this.animateScroll_(0);
+      }
+      if (slide) {
+        _this.moveSlideIntoViewport_(slide);
+        slide.setAttribute('aria-selected', '');
+        _this.emitSelectEvent_('next', null, slide);
+        return true;
+      }
+      return false;
+    };
+
+    var nextScroll = function nextScroll(direction) {
+      var nextDirection = direction;
+
+      if ('next' === direction && _this.element_.scrollLeft === _this.element_.scrollWidth - _this.element_.clientWidth) {
+        nextDirection = 'prev';
+      } else if (_this.element_.scrollLeft === 0) {
+        nextDirection = 'next';
+      }
+      var x = 'next' === nextDirection ? Math.min(_this.element_.scrollLeft + _this.element_.clientWidth, _this.element_.scrollWidth - _this.element_.clientWidth) : Math.max(_this.element_.scrollLeft - _this.element_.clientWidth, 0);
+
+      _this.animateScroll_(x, 1000);
+      return nextDirection;
+    };
+
+    if (!this.config_.animationLoop.started) {
+      (function () {
+        _this.config_.animationLoop.interval = _this.config_.interval;
+        var direction = 'next';
+
+        if ('scroll' === _this.config_.type) {
+          _this.config_.animationLoop.start(function () {
+            direction = nextScroll(direction);
+            return true; // It runs until cancelSlideShow_ is triggered
+          });
+        } else {
+          nextSlide();
+          _this.config_.animationLoop.start(function () {
+            return nextSlide(); // It runs until cancelSlideShow_ is triggered
+          });
+        }
+      })();
+    }
+
+    // TODO: Pause animation when carousel is not in browser viewport or user changes tab
+  };
+
+  /**
+   * Cancel slideshow if running. Emmits a 'pause' event
+   * @private
+   */
+  MaterialExtCarousel.prototype.cancelSlideShow_ = function () {
+    if (this.config_.animationLoop.started) {
+      this.config_.animationLoop.stop();
+      this.emitSelectEvent_('pause', _constants.VK_ESC, this.element_.querySelector('.' + SLIDE + '[aria-selected]'));
+    }
+  };
+
+  /**
+   * Animate scroll
+   * @param newPosition
+   * @param newDuration
+   * @param completedCallback
+   * @private
+   */
+  MaterialExtCarousel.prototype.animateScroll_ = function (newPosition, newDuration, completedCallback) {
+    var _this2 = this;
+
+    var start = this.element_.scrollLeft;
+    var distance = newPosition - start;
+
+    if (distance !== 0) {
+      (function () {
+        var duration = Math.max(Math.min(Math.abs(distance), newDuration || 400), 100); // duration is between 100 and newDuration||400ms||distance
+        var t = 0;
+        _this2.scrollAnimation_.stop();
+        _this2.scrollAnimation_.start(function (timeElapsed) {
+          t += timeElapsed;
+          if (t < duration) {
+            _this2.element_.scrollLeft = (0, _easing.inOutQuintic)(t, start, distance, duration);
+            return true;
+          } else {
+            _this2.element_.scrollLeft = newPosition;
+            if (completedCallback) {
+              completedCallback();
+            }
+            return false;
+          }
+        });
+      })();
+    } else {
+      if (completedCallback) {
+        completedCallback();
+      }
+    }
+  };
+
+  /**
+   * Execute commend
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.command_ = function (event) {
+    var _this3 = this;
+
+    var x = 0;
+    var slide = null;
+    var a = event.detail.action.toLowerCase();
+
+    // Cancel slideshow if running
+    this.cancelSlideShow_();
+
+    switch (a) {
+      case 'first':
+        slide = this.element_.querySelector('.' + SLIDE + ':first-child');
+        break;
+
+      case 'last':
+        x = this.element_.scrollWidth - this.element_.clientWidth;
+        slide = this.element_.querySelector('.' + SLIDE + ':last-child');
+        break;
+
+      case 'scroll-prev':
+        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);
+        break;
+
+      case 'scroll-next':
+        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);
+        break;
+
+      case 'next':
+      case 'prev':
+        slide = this.element_.querySelector('.' + SLIDE + '[aria-selected]');
+        if (slide) {
+          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;
+          this.setAriaSelected_(slide);
+          this.emitSelectEvent_(a, null, slide);
+        }
+        return;
+
+      case 'play':
+        (0, _assign2.default)(this.config_, event.detail);
+        this.startSlideShow_();
+        return;
+
+      case 'pause':
+        return;
+
+      default:
+        return;
+    }
+
+    this.animateScroll_(x, undefined, function () {
+      if ('scroll-next' === a || 'scroll-prev' === a) {
+        var slides = _this3.getSlidesInViewport_();
+        if (slides.length > 0) {
+          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];
+        }
+      }
+      _this3.setAriaSelected_(slide);
+      _this3.emitSelectEvent_(a, null, slide);
+    });
+  };
+
+  /**
+   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause
+   * @param event. A custom event
+   * @private
+   */
+  MaterialExtCarousel.prototype.commandHandler_ = function (event) {
+    event.preventDefault();
+    event.stopPropagation();
+    if (event.detail && event.detail.action) {
+      this.command_(event);
+    }
+  };
+
+  /**
+   * Handle keypress
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.keyDownHandler_ = function (event) {
+
+    if (event && event.target && event.target !== this.element_) {
+
+      var action = 'first';
+
+      if (event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_PAGE_UP || event.keyCode === _constants.VK_PAGE_DOWN) {
+
+        event.preventDefault();
+        if (event.keyCode === _constants.VK_END) {
+          action = 'last';
+        } else if (event.keyCode === _constants.VK_PAGE_UP) {
+          action = 'scroll-prev';
+        } else if (event.keyCode === _constants.VK_PAGE_DOWN) {
+          action = 'scroll-next';
+        }
+
+        var cmd = new CustomEvent('select', {
+          detail: {
+            action: action
+          }
+        });
+        this.command_(cmd);
+      } else if (event.keyCode === _constants.VK_TAB || event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {
+
+        var slide = getSlide_(event.target);
+
+        if (!slide) {
+          return;
+        }
+
+        // Cancel slideshow if running
+        this.cancelSlideShow_();
+
+        switch (event.keyCode) {
+          case _constants.VK_ARROW_UP:
+          case _constants.VK_ARROW_LEFT:
+            action = 'prev';
+            slide = slide.previousElementSibling;
+            break;
+
+          case _constants.VK_ARROW_DOWN:
+          case _constants.VK_ARROW_RIGHT:
+            action = 'next';
+            slide = slide.nextElementSibling;
+            break;
+
+          case _constants.VK_TAB:
+            if (event.shiftKey) {
+              action = 'prev';
+              slide = slide.previousElementSibling;
+            } else {
+              action = 'next';
+              slide = slide.nextElementSibling;
+            }
+            break;
+
+          case _constants.VK_SPACE:
+          case _constants.VK_ENTER:
+            action = 'select';
+            break;
+        }
+
+        if (slide) {
+          event.preventDefault();
+          setFocus_(slide);
+          this.emitSelectEvent_(action, event.keyCode, slide);
+        }
+      }
+    }
+  };
+
+  /**
+   * Handle dragging
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.dragHandler_ = function (event) {
+    var _this4 = this;
+
+    event.preventDefault();
+
+    // Cancel slideshow if running
+    this.cancelSlideShow_();
+
+    var updating = false;
+    var rAFDragId = 0;
+
+    var startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);
+    var prevX = startX;
+    var targetElement = event.target;
+
+    var update = function update(e) {
+      var currentX = e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0);
+      var dx = prevX - currentX;
+
+      if (dx < 0) {
+        _this4.element_.scrollLeft = Math.max(_this4.element_.scrollLeft + dx, 0);
+      } else if (dx > 0) {
+        _this4.element_.scrollLeft = Math.min(_this4.element_.scrollLeft + dx, _this4.element_.scrollWidth - _this4.element_.clientWidth);
+      }
+
+      prevX = currentX;
+      updating = false;
+    };
+
+    // drag handler
+    var drag = function drag(e) {
+      e.preventDefault();
+
+      if (!updating) {
+        rAFDragId = window.requestAnimationFrame(function () {
+          return update(e);
+        });
+        updating = true;
+      }
+    };
+
+    // end drag handler
+    var endDrag = function endDrag(e) {
+      e.preventDefault();
+
+      _this4.element_.removeEventListener('mousemove', drag);
+      _this4.element_.removeEventListener('touchmove', drag);
+      window.removeEventListener('mouseup', endDrag);
+      window.removeEventListener('touchend', endDrag);
+
+      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/
+      window.cancelAnimationFrame(rAFDragId);
+
+      var slide = getSlide_(targetElement);
+      setFocus_(slide);
+      _this4.emitSelectEvent_('click', null, slide);
+    };
+
+    this.element_.addEventListener('mousemove', drag);
+    this.element_.addEventListener('touchmove', drag);
+    window.addEventListener('mouseup', endDrag);
+    window.addEventListener('touchend', endDrag);
+  };
+
+  /**
+   * Handle click
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.clickHandler_ = function (event) {
+    // Click is handled by drag
+    event.preventDefault();
+  };
+
+  /**
+   * Handle focus
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.focusHandler_ = function (event) {
+    var slide = getSlide_(event.target);
+    if (slide) {
+      // The last focused/selected slide has 'aria-selected', even if focus is lost
+      this.setAriaSelected_(slide);
+      slide.classList.add(_constants.IS_FOCUSED);
+    }
+  };
+
+  /**
+   * Handle blur
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.blurHandler_ = function (event) {
+    var slide = getSlide_(event.target);
+    if (slide) {
+      slide.classList.remove(_constants.IS_FOCUSED);
+    }
+  };
+
+  /**
+   * Emits a custeom 'select' event
+   * @param command
+   * @param keyCode
+   * @param slide
+   * @private
+   */
+  MaterialExtCarousel.prototype.emitSelectEvent_ = function (command, keyCode, slide) {
+
+    if (slide) {
+      this.moveSlideIntoViewport_(slide);
+
+      var evt = new CustomEvent('select', {
+        bubbles: true,
+        cancelable: true,
+        detail: {
+          command: command,
+          keyCode: keyCode,
+          source: slide
+        }
+      });
+      this.element_.dispatchEvent(evt);
+    }
+  };
+
+  /**
+   * Get the first visible slide in component viewport
+   * @private
+   */
+  MaterialExtCarousel.prototype.getSlidesInViewport_ = function () {
+    var carouselRect = this.element_.getBoundingClientRect();
+
+    var slidesInViewport = [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).filter(function (slide) {
+      var slideRect = slide.getBoundingClientRect();
+      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;
+    });
+    return slidesInViewport;
+  };
+
+  /**
+   * Move slide into component viewport - if needed
+   * @param slide
+   * @private
+   */
+  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function (slide) {
+    var carouselRect = this.element_.getBoundingClientRect();
+    var slideRect = slide.getBoundingClientRect();
+
+    if (slideRect.left < carouselRect.left) {
+      var x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);
+      this.animateScroll_(x);
+    } else if (slideRect.right > carouselRect.right) {
+      var _x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);
+      this.animateScroll_(_x);
+    }
+  };
+
+  /**
+   * Removes 'aria-selected' from all slides in carousel
+   * @private
+   */
+  MaterialExtCarousel.prototype.setAriaSelected_ = function (slide) {
+    if (slide) {
+      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected]'))).forEach(function (slide) {
+        return slide.removeAttribute('aria-selected');
+      });
+      slide.setAttribute('aria-selected', '');
+    }
+  };
+
+  /**
+   * Removes event listeners
+   * @private
+   */
+  MaterialExtCarousel.prototype.removeListeners_ = function () {
+    this.element_.removeEventListener('focus', this.focusHandler_);
+    this.element_.removeEventListener('blur', this.blurHandler_);
+    this.element_.removeEventListener('keydown', this.keyDownHandler_);
+    this.element_.removeEventListener('mousedown', this.dragHandler_);
+    this.element_.removeEventListener('touchstart', this.dragHandler_);
+    this.element_.removeEventListener('click', this.clickHandler_, false);
+    this.element_.removeEventListener('command', this.commandHandler_);
+    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);
+  };
+
+  // Helpers
+  var getSlide_ = function getSlide_(element) {
+    return element.closest('.' + SLIDE);
+  };
+
+  var setFocus_ = function setFocus_(slide) {
+    if (slide) {
+      slide.focus();
+    }
+  };
+
+  var addRipple_ = function addRipple_(slide) {
+    if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {
+      var rippleContainer = document.createElement('span');
+      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);
+      rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);
+      var ripple = document.createElement('span');
+      ripple.classList.add(_constants.MDL_RIPPLE);
+      rippleContainer.appendChild(ripple);
+
+      var img = slide.querySelector('img');
+      if (img) {
+        // rippleContainer blocks image title
+        rippleContainer.title = img.title;
+      }
+      slide.appendChild(rippleContainer);
+      componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);
+    }
+  };
+  // End helpers
+
+
+  // Public methods.
+
+  /**
+   * Cancel animation - if running.
+   *
+   * @public
+   */
+  MaterialExtCarousel.prototype.stopAnimation = function () {
+    this.config_.animationLoop.stop();
+  };
+  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;
+
+  /**
+   * Upgrade slides
+   * Use if more list elements are added later (dynamically)
+   *
+   * @public
+   */
+  MaterialExtCarousel.prototype.upgradeSlides = function () {
+    var _this5 = this;
+
+    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);
+
+    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {
+
+      slide.setAttribute('role', SLIDE_ROLE);
+
+      if (_this5.config_.interactive) {
+        if (!slide.getAttribute('tabindex')) {
+          slide.setAttribute('tabindex', '0');
+        }
+        if (hasRippleEffect) {
+          addRipple_(slide);
+        }
+      } else {
+        slide.setAttribute('tabindex', '-1');
+      }
+    });
+  };
+  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;
+
+  /**
+   * Get config object
+   *
+   * @public
+   */
+  MaterialExtCarousel.prototype.getConfig = function () {
+    return this.config_;
+  };
+  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtCarousel.prototype.init = function () {
+
+    if (this.element_) {
+      // Config
+      if (this.element_.hasAttribute('data-config')) {
+        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.element_.getAttribute('data-config'), this.config_);
+      }
+
+      // Wai-Aria
+      this.element_.setAttribute('role', ROLE);
+
+      // Prefer tabindex -1
+      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {
+        this.element_.setAttribute('tabindex', -1);
+      }
+
+      // Remove listeners, just in case ...
+      this.removeListeners_();
+
+      if (this.config_.interactive) {
+
+        // Ripple
+        var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);
+        if (hasRippleEffect) {
+          this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);
+        }
+
+        // Listen to focus/blur events
+        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);
+        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);
+
+        // Listen to keyboard events
+        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);
+
+        // Listen to drag events
+        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);
+        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);
+
+        // Listen to click events
+        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);
+      }
+
+      // Listen to custom 'command' event
+      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+
+      // Listen to 'mdl-componentdowngraded' event
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+
+      // Slides collection
+      this.upgradeSlides();
+
+      // Set upgraded flag
+      this.element_.classList.add(_constants.IS_UPGRADED);
+
+      if (this.config_.autostart) {
+        // Start slideshow
+        this.startSlideShow_();
+      }
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtCarousel.prototype.mdlDowngrade_ = function () {
+    'use strict';
+    //console.log('***** MaterialExtCarousel.mdlDowngrade_');
+
+    // Stop animation - if any
+
+    this.stopAnimation();
+
+    // Remove listeners
+    this.removeListeners_();
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtCarousel,
+    classAsString: 'MaterialExtCarousel',
+    cssClass: 'mdlext-js-carousel',
+    widget: true
+  });
+})();
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/collapsible/collapsible.js b/node_modules/mdl-ext/es/collapsible/collapsible.js
new file mode 100644
index 0000000..80c2db0
--- /dev/null
+++ b/node_modules/mdl-ext/es/collapsible/collapsible.js
@@ -0,0 +1,481 @@
+'use strict';
+
+var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = require('babel-runtime/helpers/createClass');
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _constants = require('../utils/constants');
+
+var _stringUtils = require('../utils/string-utils');
+
+var _domUtils = require('../utils/dom-utils');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var JS_COLLAPSIBLE = 'mdlext-js-collapsible'; /**
+                                               * @license
+                                               * Copyright 2016-2017 Leif Olsen. 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.
+                                               *
+                                               * This code is built with Google Material Design Lite,
+                                               * which is Licensed under the Apache License, Version 2.0
+                                               */
+
+/**
+ * A collapsible is a component to mark expandable and collapsible regions.
+ * The component use the aria-expanded state to indicate whether regions of
+ * the content are collapsible, and to expose whether a region is currently
+ * expanded or collapsed.
+ * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions
+ */
+
+var COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';
+var COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';
+var COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';
+
+/**
+ * The collapsible component
+ */
+
+var Collapsible = function () {
+
+  /**
+   * @constructor
+   * @param {HTMLElement} element The element that this component is connected to.
+   */
+  function Collapsible(element) {
+    var _this = this;
+
+    (0, _classCallCheck3.default)(this, Collapsible);
+    this.element_ = null;
+    this.controlElement_ = null;
+
+    this.keyDownHandler = function (event) {
+      if (event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE) {
+        event.preventDefault();
+
+        // Trigger click
+        (event.target || _this.controlElement).dispatchEvent(new MouseEvent('click', {
+          bubbles: true,
+          cancelable: true,
+          view: window
+        }));
+      }
+    };
+
+    this.clickHandler = function (event) {
+      if (!_this.isDisabled) {
+        if (event.target !== _this.controlElement) {
+          // Do not toggle if a focusable element inside the control element triggered the event
+          var p = (0, _domUtils.getParentElements)(event.target, _this.controlElement);
+          p.push(event.target);
+          if (p.find(function (el) {
+            return (0, _domUtils.isFocusable)(el);
+          })) {
+            return;
+          }
+        }
+        _this.toggle();
+      }
+    };
+
+    this.element_ = element;
+    this.init();
+  }
+
+  (0, _createClass3.default)(Collapsible, [{
+    key: 'collapse',
+    value: function collapse() {
+      if (!this.isDisabled && this.isExpanded) {
+        if (this.dispatchToggleEvent('collapse')) {
+          this.controlElement.setAttribute('aria-expanded', 'false');
+          var regions = this.regionElements.slice(0);
+          for (var i = regions.length - 1; i >= 0; --i) {
+            regions[i].setAttribute('hidden', '');
+          }
+        }
+      }
+    }
+  }, {
+    key: 'expand',
+    value: function expand() {
+      if (!this.isDisabled && !this.isExpanded) {
+        if (this.dispatchToggleEvent('expand')) {
+          this.controlElement.setAttribute('aria-expanded', 'true');
+          this.regionElements.forEach(function (region) {
+            return region.removeAttribute('hidden');
+          });
+        }
+      }
+    }
+  }, {
+    key: 'toggle',
+    value: function toggle() {
+      if (this.isExpanded) {
+        this.collapse();
+      } else {
+        this.expand();
+      }
+    }
+  }, {
+    key: 'dispatchToggleEvent',
+    value: function dispatchToggleEvent(action) {
+      return this.element.dispatchEvent(new CustomEvent('toggle', {
+        bubbles: true,
+        cancelable: true,
+        detail: {
+          action: action
+        }
+      }));
+    }
+  }, {
+    key: 'disableToggle',
+    value: function disableToggle() {
+      this.controlElement.setAttribute('aria-disabled', true);
+    }
+  }, {
+    key: 'enableToggle',
+    value: function enableToggle() {
+      this.controlElement.removeAttribute('aria-disabled');
+    }
+  }, {
+    key: 'addRegionId',
+    value: function addRegionId(regionId) {
+      var ids = this.regionIds;
+      if (!ids.find(function (id) {
+        return regionId === id;
+      })) {
+        ids.push(regionId);
+        this.controlElement.setAttribute('aria-controls', ids.join(' '));
+      }
+    }
+  }, {
+    key: 'addRegionElement',
+    value: function addRegionElement(region) {
+      if (!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) || region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {
+        region.classList.add(COLLAPSIBLE_GROUP_CLASS);
+      }
+
+      if (!region.hasAttribute('role')) {
+        var role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';
+        region.setAttribute('role', role);
+      }
+
+      if (!region.hasAttribute('id')) {
+        region.id = region.getAttribute('role') + '-' + (0, _stringUtils.randomString)();
+      }
+
+      if (this.isExpanded) {
+        region.removeAttribute('hidden');
+      } else {
+        region.setAttribute('hidden', '');
+      }
+      this.addRegionId(region.id);
+    }
+  }, {
+    key: 'removeRegionElement',
+    value: function removeRegionElement(region) {
+      if (region && region.id) {
+        var ids = this.regionIds.filter(function (id) {
+          return id === region.id;
+        });
+        this.controlElement.setAttribute('aria-controls', ids.join(' '));
+      }
+    }
+  }, {
+    key: 'removeListeners',
+    value: function removeListeners() {
+      this.controlElement.removeEventListener('keydown', this.keyDownHandler);
+      this.controlElement.removeEventListener('click', this.clickHandler);
+    }
+  }, {
+    key: 'init',
+    value: function init() {
+      var _this2 = this;
+
+      var initControl = function initControl() {
+        // Find the button element
+        _this2.controlElement_ = _this2.element.querySelector('.' + COLLAPSIBLE_CONTROL_CLASS) || _this2.element;
+
+        // Add "aria-expanded" attribute if not present
+        if (!_this2.controlElement.hasAttribute('aria-expanded')) {
+          _this2.controlElement.setAttribute('aria-expanded', 'false');
+        }
+
+        // Add role=button if control != <button>
+        if (_this2.controlElement.nodeName.toLowerCase() !== 'button') {
+          _this2.controlElement.setAttribute('role', 'button');
+        }
+
+        // Add tabindex
+        if (!(0, _domUtils.isFocusable)(_this2.controlElement) && !_this2.controlElement.hasAttribute('tabindex')) {
+          _this2.controlElement.setAttribute('tabindex', '0');
+        }
+      };
+
+      var initRegions = function initRegions() {
+        var regions = [];
+        if (!_this2.controlElement.hasAttribute('aria-controls')) {
+          // Add siblings as collapsible region(s)
+          var r = _this2.element.nextElementSibling;
+          while (r) {
+            if (r.classList.contains(COLLAPSIBLE_GROUP_CLASS) || r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {
+              regions.push(r);
+            } else if (r.classList.contains(JS_COLLAPSIBLE)) {
+              // A new collapsible component
+              break;
+            }
+            r = r.nextElementSibling;
+          }
+        } else {
+          regions = _this2.regionElements;
+        }
+        regions.forEach(function (region) {
+          return _this2.addRegionElement(region);
+        });
+      };
+
+      var addListeners = function addListeners() {
+        _this2.controlElement.addEventListener('keydown', _this2.keyDownHandler);
+        _this2.controlElement.addEventListener('click', _this2.clickHandler);
+      };
+
+      initControl();
+      initRegions();
+      this.removeListeners();
+      addListeners();
+    }
+  }, {
+    key: 'downgrade',
+    value: function downgrade() {
+      this.removeListeners();
+    }
+  }, {
+    key: 'element',
+    get: function get() {
+      return this.element_;
+    }
+  }, {
+    key: 'controlElement',
+    get: function get() {
+      return this.controlElement_;
+    }
+  }, {
+    key: 'isDisabled',
+    get: function get() {
+      return this.controlElement.hasAttribute('disabled') && this.controlElement.getAttribute('disabled').toLowerCase() !== 'false' || this.controlElement.hasAttribute('aria-disabled') && this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false';
+    }
+  }, {
+    key: 'isExpanded',
+    get: function get() {
+      return this.controlElement.hasAttribute('aria-expanded') && this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';
+    }
+  }, {
+    key: 'regionIds',
+    get: function get() {
+      return this.controlElement.hasAttribute('aria-controls') ? this.controlElement.getAttribute('aria-controls').split(' ') : [];
+    }
+  }, {
+    key: 'regionElements',
+    get: function get() {
+      return this.regionIds.map(function (id) {
+        return document.querySelector('#' + id);
+      }).filter(function (el) {
+        return el != null;
+      });
+    }
+  }]);
+  return Collapsible;
+}();
+
+(function () {
+  'use strict';
+
+  /**
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+
+  var MaterialExtCollapsible = function MaterialExtCollapsible(element) {
+    this.element_ = element;
+    this.collapsible = null;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtCollapsible'] = MaterialExtCollapsible;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtCollapsible.prototype.init = function () {
+    if (this.element_) {
+      this.collapsible = new Collapsible(this.element_);
+      this.element_.classList.add(_constants.IS_UPGRADED);
+
+      // Listen to 'mdl-componentdowngraded' event
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtCollapsible.prototype.mdlDowngrade_ = function () {
+    this.collapsible.downgrade();
+  };
+
+  // Public methods.
+
+  /**
+   * Get control element.
+   * @return {HTMLElement} element The element that controls the collapsible region.
+   * @public
+   */
+  MaterialExtCollapsible.prototype.getControlElement = function () {
+    return this.collapsible.controlElement;
+  };
+  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;
+
+  /**
+   * Get region elements controlled by this collapsible
+   * @returns {Array<HTMLElement>} the collapsible region elements
+   * @public
+   */
+  MaterialExtCollapsible.prototype.getRegionElements = function () {
+    return this.collapsible.regionElements;
+  };
+  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;
+
+  /**
+   * Add region elements.
+   * @param {Array<HTMLElement>} elements The element that will be upgraded.
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.addRegionElements = function () {
+    var _this3 = this;
+
+    for (var _len = arguments.length, elements = Array(_len), _key = 0; _key < _len; _key++) {
+      elements[_key] = arguments[_key];
+    }
+
+    elements.forEach(function (element) {
+      return _this3.collapsible.addRegionElement(element);
+    });
+  };
+  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;
+
+  /**
+   * Remove collapsible region(s) from component.
+   * Note: This operation does not delete the element from the DOM tree.
+   * @param {Array<HTMLElement>} elements The element that will be upgraded.
+   * @public
+   */
+  MaterialExtCollapsible.prototype.removeRegionElements = function () {
+    var _this4 = this;
+
+    for (var _len2 = arguments.length, elements = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      elements[_key2] = arguments[_key2];
+    }
+
+    elements.forEach(function (element) {
+      return _this4.collapsible.removeRegionElement(element);
+    });
+  };
+  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;
+
+  /**
+   * Expand collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.expand = function () {
+    this.collapsible.expand();
+  };
+  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;
+
+  /**
+   * Collapse collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.collapse = function () {
+    this.collapsible.collapse();
+  };
+  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;
+
+  /**
+   * Toggle collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.toggle = function () {
+    this.collapsible.toggle();
+  };
+  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;
+
+  /**
+   * Check whether component has aria-expanded state true
+   * @return {Boolean} true if aria-expanded="true", otherwise false
+   */
+  MaterialExtCollapsible.prototype.isExpanded = function () {
+    return this.collapsible.isExpanded;
+  };
+  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;
+
+  /**
+   * Check whether component has aria-disabled state set to true
+   * @return {Boolean} true if aria-disabled="true", otherwise false
+   */
+  MaterialExtCollapsible.prototype.isDisabled = function () {
+    return this.collapsible.isDisabled;
+  };
+  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;
+
+  /**
+   * Disables toggling of collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.disableToggle = function () {
+    this.collapsible.disableToggle();
+  };
+  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;
+
+  /**
+   * Enables toggling of collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.enableToggle = function () {
+    this.collapsible.enableToggle();
+  };
+  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtCollapsible,
+    classAsString: 'MaterialExtCollapsible',
+    cssClass: JS_COLLAPSIBLE,
+    widget: true
+  });
+})();
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/formatfield/formatfield.js b/node_modules/mdl-ext/es/formatfield/formatfield.js
new file mode 100644
index 0000000..271da23
--- /dev/null
+++ b/node_modules/mdl-ext/es/formatfield/formatfield.js
@@ -0,0 +1,306 @@
+'use strict';
+
+var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = require('babel-runtime/helpers/createClass');
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _jsonUtils = require('../utils/json-utils');
+
+var _constants = require('../utils/constants');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+var JS_FORMAT_FIELD = 'mdlext-js-formatfield';
+var FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';
+
+/**
+ * Detect browser locale
+ * @returns {string} the locale
+ * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference
+ */
+var browserLanguage = function browserLanguage() {
+  return navigator.languages ? navigator.languages[0] : navigator.language || navigator.userLanguage;
+};
+
+/**
+ * The formatfield  formats an input field  using language sensitive number formatting.
+ */
+
+var FormatField = function () {
+  function FormatField(element) {
+    var _this = this;
+
+    (0, _classCallCheck3.default)(this, FormatField);
+    this.options_ = {};
+
+    this.clickHandler = function () {
+      clearTimeout(FormatField.timer);
+    };
+
+    this.focusInHandler = function () {
+      if (!(_this.input.readOnly || _this.input.disabled)) {
+        _this.input.value = _this.unformatInput();
+        //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);
+        FormatField.timer = setTimeout(function () {
+          return _this.input.select();
+        }, 200);
+      }
+    };
+
+    this.focusOutHandler = function () {
+      clearTimeout(FormatField.timer);
+
+      if (!(_this.input.readOnly || _this.input.disabled)) {
+        _this.formatValue();
+      }
+    };
+
+    this.element_ = element;
+    this.init();
+  }
+
+  (0, _createClass3.default)(FormatField, [{
+    key: 'stripSeparatorsFromValue',
+    value: function stripSeparatorsFromValue() {
+      var _this2 = this;
+
+      var doReplace = function doReplace() {
+        return _this2.input.value.replace(/\s/g, '').replace(new RegExp(_this2.options.groupSeparator, 'g'), '').replace(_this2.options.decimalSeparator, '.');
+      };
+      //.replace(this.intlGroupSeparator_, ''),
+      //.replace(this.intlDecimalSeparator_, '.');
+
+      return this.input.value ? doReplace() : this.input.value;
+    }
+  }, {
+    key: 'fixSeparators',
+    value: function fixSeparators(value) {
+      var _this3 = this;
+
+      var doReplace = function doReplace() {
+        return value.replace(new RegExp(_this3.intlGroupSeparator_, 'g'), _this3.options.groupSeparator).replace(_this3.intlDecimalSeparator_, _this3.options.decimalSeparator);
+      };
+
+      return value ? doReplace() : value;
+    }
+  }, {
+    key: 'formatValue',
+    value: function formatValue() {
+      if (this.input.value) {
+        var v = new Intl.NumberFormat(this.options.locales, this.options).format(this.stripSeparatorsFromValue());
+
+        if ('NaN' !== v) {
+          this.input.value = this.fixSeparators(v);
+        }
+      }
+    }
+  }, {
+    key: 'unformat',
+    value: function unformat() {
+      var _this4 = this;
+
+      var doReplace = function doReplace() {
+        return _this4.input.value.replace(/\s/g, '').replace(new RegExp(_this4.options.groupSeparator, 'g'), '').replace(_this4.options.decimalSeparator, '.');
+      };
+
+      return this.input.value ? doReplace() : this.input.value;
+    }
+  }, {
+    key: 'unformatInput',
+    value: function unformatInput() {
+      var _this5 = this;
+
+      var doReplace = function doReplace() {
+        return _this5.input.value.replace(/\s/g, '').replace(new RegExp(_this5.options.groupSeparator, 'g'), '');
+      };
+
+      return this.input.value ? doReplace() : this.input.value;
+    }
+  }, {
+    key: 'removeListeners',
+    value: function removeListeners() {
+      this.input.removeEventListener('click', this.clickHandler);
+      this.input.removeEventListener('focusin', this.focusInHandler);
+      this.input.removeEventListener('focusout', this.focusOutHandler);
+    }
+  }, {
+    key: 'init',
+    value: function init() {
+      var _this6 = this;
+
+      var addListeners = function addListeners() {
+        _this6.input.addEventListener('click', _this6.clickHandler);
+        _this6.input.addEventListener('focusin', _this6.focusInHandler);
+        _this6.input.addEventListener('focusout', _this6.focusOutHandler);
+      };
+
+      var addOptions = function addOptions() {
+        var opts = _this6.element.getAttribute('data-formatfield-options') || _this6.input.getAttribute('data-formatfield-options');
+        if (opts) {
+          _this6.options_ = (0, _jsonUtils.jsonStringToObject)(opts, _this6.options);
+        }
+      };
+
+      var addLocale = function addLocale() {
+        if (!_this6.options.locales) {
+          _this6.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',
+        }
+      };
+
+      var addGrouping = function addGrouping() {
+        var s = 1234.5.toLocaleString(_this6.options.locales, {
+          style: 'decimal',
+          useGrouping: true,
+          minimumFractionDigits: 1,
+          maximumFractionDigits: 1
+        });
+
+        _this6.intlGroupSeparator_ = s.charAt(1);
+        _this6.intlDecimalSeparator_ = s.charAt(s.length - 2);
+        _this6.options.groupSeparator = _this6.options.groupSeparator || _this6.intlGroupSeparator_;
+        _this6.options.decimalSeparator = _this6.options.decimalSeparator || _this6.intlDecimalSeparator_;
+
+        if (_this6.options.groupSeparator === _this6.options.decimalSeparator) {
+          var e = 'Error! options.groupSeparator, "' + _this6.options.groupSeparator + '" ' + 'and options.decimalSeparator, ' + ('"' + _this6.options.decimalSeparator + '" should not be equal');
+          throw new Error(e);
+        }
+      };
+
+      this.input_ = this.element.querySelector('input') || this.element;
+
+      addOptions();
+      addLocale();
+      addGrouping();
+      this.formatValue();
+      addListeners();
+    }
+  }, {
+    key: 'downgrade',
+    value: function downgrade() {
+      this.removeListeners();
+    }
+  }, {
+    key: 'element',
+    get: function get() {
+      return this.element_;
+    }
+  }, {
+    key: 'input',
+    get: function get() {
+      return this.input_;
+    }
+  }, {
+    key: 'options',
+    get: function get() {
+      return this.options_;
+    }
+  }]);
+  return FormatField;
+}();
+
+FormatField.timer = null;
+
+
+(function () {
+  'use strict';
+
+  /**
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+
+  var MaterialExtFormatfield = function MaterialExtFormatfield(element) {
+    this.element_ = element;
+    this.formatField_ = null;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtFormatfield'] = MaterialExtFormatfield;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtFormatfield.prototype.init = function () {
+    if (this.element_) {
+      this.element_.classList.add(_constants.IS_UPGRADED);
+      this.formatField_ = new FormatField(this.element_);
+
+      // Listen to 'mdl-componentdowngraded' event
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+    }
+  };
+
+  /**
+   * Get options object
+   *
+   * @public
+   *
+   * @returns {Object} the options object
+   */
+  MaterialExtFormatfield.prototype.getOptions = function () {
+    return this.formatField_.options;
+  };
+  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;
+
+  /**
+   * A unformatted value is a string value where the locale specific decimal separator
+   * is replaced with a '.' separator and group separators are stripped.
+   * The returned value is suitable for parsing to a JavaScript numerical value.
+   *
+   * @example
+   * input.value = '1 234,5';
+   * inputElement.MaterialExtFormatfield.getUnformattedValue();
+   * // Returns '1234.5'
+   *
+   * @public
+   *
+   * @returns {String} the unformatted value
+   */
+  MaterialExtFormatfield.prototype.getUnformattedValue = function () {
+    return this.formatField_.unformat();
+  };
+  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtFormatfield.prototype.mdlDowngrade_ = function () {
+    this.formatField_.downgrade();
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtFormatfield,
+    classAsString: FORMAT_FIELD_COMPONENT,
+    cssClass: JS_FORMAT_FIELD,
+    widget: true
+  });
+})();
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/index.js b/node_modules/mdl-ext/es/index.js
new file mode 100644
index 0000000..4407b52
--- /dev/null
+++ b/node_modules/mdl-ext/es/index.js
@@ -0,0 +1,21 @@
+'use strict';
+
+require('./utils');
+
+require('./accordion/accordion');
+
+require('./collapsible/collapsible');
+
+require('./carousel/carousel');
+
+require('./lightboard/lightboard');
+
+require('./lightbox/lightbox');
+
+require('./menu-button/menu-button');
+
+require('./selectfield/selectfield');
+
+require('./formatfield/formatfield');
+
+require('./sticky-header/sticky-header');
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/lightboard/lightboard.js b/node_modules/mdl-ext/es/lightboard/lightboard.js
new file mode 100644
index 0000000..03ceed8
--- /dev/null
+++ b/node_modules/mdl-ext/es/lightboard/lightboard.js
@@ -0,0 +1,316 @@
+'use strict';
+
+var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
+
+var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+
+var _constants = require('../utils/constants');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container'; /**
+                                                                          * @license
+                                                                          * Copyright 2016 Leif Olsen. 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.
+                                                                          *
+                                                                          * This code is built with Google Material Design Lite,
+                                                                          * which is Licensed under the Apache License, Version 2.0
+                                                                          */
+
+/**
+ * A lightboard is a translucent surface illuminated from behind, used for situations
+ * where a shape laid upon the surface needs to be seen with high contrast. In the "old days" of photography
+ * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox
+ * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.
+ */
+
+(function () {
+  'use strict';
+
+  //const LIGHTBOARD = 'mdlext-lightboard';
+
+  var LIGHTBOARD_ROLE = 'grid';
+  var SLIDE = 'mdlext-lightboard__slide';
+  var SLIDE_ROLE = 'gridcell';
+  var SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  var MaterialExtLightboard = function MaterialExtLightboard(element) {
+    // Stores the element.
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtLightboard'] = MaterialExtLightboard;
+
+  // Helpers
+  var getSlide = function getSlide(element) {
+    return element ? element.closest('.' + SLIDE) : null;
+  };
+
+  // Private methods.
+
+  /**
+   * Select a slide, i.e. set aria-selected="true"
+   * @param element
+   * @private
+   */
+  MaterialExtLightboard.prototype.selectSlide_ = function (element) {
+    var slide = getSlide(element);
+    if (slide && !slide.hasAttribute('aria-selected')) {
+      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected="true"]'))).forEach(function (selectedSlide) {
+        return selectedSlide.removeAttribute('aria-selected');
+      });
+
+      slide.setAttribute('aria-selected', 'true');
+    }
+  };
+
+  /**
+   * Dispatch select event
+   * @param {Element} slide The slide that caused the event
+   * @private
+   */
+  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function (slide) {
+    this.element_.dispatchEvent(new CustomEvent('select', {
+      bubbles: true,
+      cancelable: true,
+      detail: { source: slide }
+    }));
+  };
+
+  /**
+   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade
+   * @param event. A custom event
+   * @private
+   */
+  MaterialExtLightboard.prototype.commandHandler_ = function (event) {
+    event.preventDefault();
+    event.stopPropagation();
+
+    if (event && event.detail) {
+      this.command(event.detail);
+    }
+  };
+
+  // Public methods
+
+  /**
+   * Initialize lightboard slides
+   * @public
+   */
+  MaterialExtLightboard.prototype.upgradeSlides = function () {
+
+    var addRipple = function addRipple(slide) {
+      // Use slide frame as ripple container
+      if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {
+        var a = slide.querySelector('.' + SLIDE_TABSTOP);
+        if (a) {
+          var rippleContainer = a;
+          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);
+          rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);
+          var ripple = document.createElement('span');
+          ripple.classList.add(_constants.MDL_RIPPLE);
+          rippleContainer.appendChild(ripple);
+          componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);
+        }
+      }
+    };
+
+    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);
+
+    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {
+
+      slide.setAttribute('role', SLIDE_ROLE);
+
+      if (!slide.querySelector('a')) {
+        slide.setAttribute('tabindex', '0');
+      }
+      if (hasRippleEffect) {
+        addRipple(slide);
+      }
+    });
+  };
+  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;
+
+  /**
+   * Execute command
+   * @param detail
+   * @public
+   */
+  MaterialExtLightboard.prototype.command = function (detail) {
+    var _this = this;
+
+    var firstSlide = function firstSlide() {
+      return _this.element_.querySelector('.' + SLIDE + ':first-child');
+    };
+
+    var lastSlide = function lastSlide() {
+      return _this.element_.querySelector('.' + SLIDE + ':last-child');
+    };
+
+    var nextSlide = function nextSlide() {
+      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected="true"]').nextElementSibling;
+      return slide ? slide : firstSlide();
+    };
+
+    var prevSlide = function prevSlide() {
+      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected="true"]').previousElementSibling;
+      return slide ? slide : lastSlide();
+    };
+
+    if (detail && detail.action) {
+      var action = detail.action,
+          target = detail.target;
+
+
+      var slide = void 0;
+      switch (action.toLowerCase()) {
+        case 'select':
+          slide = getSlide(target);
+          this.dispatchSelectEvent_(slide);
+          break;
+        case 'first':
+          slide = firstSlide();
+          break;
+        case 'next':
+          slide = nextSlide();
+          break;
+        case 'prev':
+          slide = prevSlide();
+          break;
+        case 'last':
+          slide = lastSlide();
+          break;
+        case 'upgrade':
+          this.upgradeSlides();
+          break;
+        default:
+          throw new Error('Unknown action "' + action + '". Action must be one of "first", "next", "prev", "last", "select" or "upgrade"');
+      }
+
+      if (slide) {
+        var a = slide.querySelector('a');
+        if (a) {
+          a.focus();
+        } else {
+          slide.focus();
+        }
+
+        // Workaround for JSDom testing:
+        // In JsDom 'element.focus()' does not trigger any focus event
+        if (!slide.hasAttribute('aria-selected')) {
+          this.selectSlide_(slide);
+        }
+      }
+    }
+  };
+  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtLightboard.prototype.init = function () {
+    var _this2 = this;
+
+    var keydownHandler = function keydownHandler(event) {
+
+      if (event.target !== _this2.element_) {
+        var action = void 0;
+        var target = void 0;
+        switch (event.keyCode) {
+          case _constants.VK_HOME:
+            action = 'first';
+            break;
+          case _constants.VK_END:
+            action = 'last';
+            break;
+          case _constants.VK_ARROW_UP:
+          case _constants.VK_ARROW_LEFT:
+            action = 'prev';
+            break;
+          case _constants.VK_ARROW_DOWN:
+          case _constants.VK_ARROW_RIGHT:
+            action = 'next';
+            break;
+          case _constants.VK_ENTER:
+          case _constants.VK_SPACE:
+            action = 'select';
+            target = event.target;
+            break;
+        }
+        if (action) {
+          event.preventDefault();
+          event.stopPropagation();
+          _this2.command({ action: action, target: target });
+        }
+      }
+    };
+
+    var clickHandler = function clickHandler(event) {
+      event.preventDefault();
+      event.stopPropagation();
+
+      if (event.target !== _this2.element_) {
+        _this2.command({ action: 'select', target: event.target });
+      }
+    };
+
+    var focusHandler = function focusHandler(event) {
+      event.preventDefault();
+      event.stopPropagation();
+
+      if (event.target !== _this2.element_) {
+        _this2.selectSlide_(event.target);
+      }
+    };
+
+    if (this.element_) {
+      this.element_.setAttribute('role', LIGHTBOARD_ROLE);
+
+      if (this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT)) {
+        this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);
+      }
+
+      // Remove listeners, just in case ...
+      this.element_.removeEventListener('command', this.commandHandler_);
+      this.element_.removeEventListener('keydown', keydownHandler);
+      this.element_.removeEventListener('click', clickHandler);
+      this.element_.removeEventListener('focus', focusHandler);
+
+      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+      this.element_.addEventListener('keydown', keydownHandler, true);
+      this.element_.addEventListener('click', clickHandler, true);
+      this.element_.addEventListener('focus', focusHandler, true);
+
+      this.upgradeSlides();
+
+      this.element_.classList.add(_constants.IS_UPGRADED);
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  /* jshint undef:false */
+  componentHandler.register({
+    constructor: MaterialExtLightboard,
+    classAsString: 'MaterialExtLightboard',
+    cssClass: 'mdlext-js-lightboard',
+    widget: true
+  });
+})();
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/lightbox/lightbox.js b/node_modules/mdl-ext/es/lightbox/lightbox.js
new file mode 100644
index 0000000..bc23129
--- /dev/null
+++ b/node_modules/mdl-ext/es/lightbox/lightbox.js
@@ -0,0 +1,396 @@
+'use strict';
+
+var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
+
+var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+
+var _isInteger = require('babel-runtime/core-js/number/is-integer');
+
+var _isInteger2 = _interopRequireDefault(_isInteger);
+
+var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
+
+var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+
+var _entries = require('babel-runtime/core-js/object/entries');
+
+var _entries2 = _interopRequireDefault(_entries);
+
+var _getIterator2 = require('babel-runtime/core-js/get-iterator');
+
+var _getIterator3 = _interopRequireDefault(_getIterator2);
+
+var _fullThrottle = require('../utils/full-throttle');
+
+var _fullThrottle2 = _interopRequireDefault(_fullThrottle);
+
+var _constants = require('../utils/constants');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/**
+ * Responsive Lightbox
+ */
+
+(function () {
+  'use strict';
+
+  var LIGHTBOX = 'mdlext-lightbox';
+  var LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';
+  var LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';
+  var STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';
+  var BUTTON = 'mdl-button';
+
+  /**
+   * https://github.com/google/material-design-lite/issues/4205
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  var MaterialExtLightbox = function MaterialExtLightbox(element) {
+    // Stores the element.
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtLightbox'] = MaterialExtLightbox;
+
+  /**
+   * Handle keypress
+   * @param event
+   * @private
+   */
+  MaterialExtLightbox.prototype.keyDownHandler_ = function (event) {
+
+    if (event) {
+      if (event.keyCode === _constants.VK_ESC || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {
+
+        if (event.keyCode !== _constants.VK_ESC) {
+          event.preventDefault();
+          event.stopPropagation();
+        }
+
+        var action = 'first';
+        if (event.keyCode === _constants.VK_END) {
+          action = 'last';
+        } else if (event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT) {
+          action = 'prev';
+        } else if (event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {
+          action = 'next';
+        } else if (event.keyCode === _constants.VK_SPACE) {
+          action = 'select';
+        } else if (event.keyCode === _constants.VK_ESC) {
+          action = 'cancel';
+        }
+
+        dispatchAction_(action, this);
+      }
+    }
+  };
+
+  /**
+   * Handle button clicks
+   * @param event
+   * @private
+   */
+  MaterialExtLightbox.prototype.buttonClickHandler_ = function (event) {
+
+    if (event) {
+      event.preventDefault();
+      event.stopPropagation();
+
+      dispatchAction_(this.getAttribute('data-action') || '', this);
+
+      var n = this.closest('.' + LIGHTBOX);
+      if (n) {
+        n.focus();
+      }
+    }
+  };
+
+  /**
+   * Dispatches an action custom event
+   * @param action
+   * @param source
+   * @param target
+   * @private
+   */
+  var dispatchAction_ = function dispatchAction_(action, source) {
+    var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source;
+
+
+    target.dispatchEvent(new CustomEvent('action', {
+      bubbles: true,
+      cancelable: true,
+      detail: {
+        action: action || '',
+        source: source
+      }
+    }));
+  };
+
+  /**
+   * Reposition dialog if component parent element is "DIALOG"
+   * @param lightboxElement
+   * @private
+   */
+  var repositionDialog_ = function repositionDialog_(lightboxElement) {
+    var footerHeight = function footerHeight(footer, isSticky) {
+      return isSticky && footer ? footer.offsetHeight : 0;
+    };
+
+    var reposition = function reposition(dialog, fh) {
+      if (window.getComputedStyle(dialog).position === 'absolute') {
+        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+        var topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;
+        dialog.style.top = Math.max(scrollTop, topValue) + 'px';
+      }
+    };
+
+    var p = lightboxElement.parentNode;
+    var dialog = p && p.nodeName === 'DIALOG' ? p : null;
+
+    if (dialog && dialog.hasAttribute('open')) {
+      lightboxElement.style.width = 'auto';
+      lightboxElement.style.maxWidth = '100%';
+      var img = lightboxElement.querySelector('img');
+      if (img) {
+        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? img.naturalWidth + 'px' : img.width + 'px' || '100%';
+      }
+
+      var fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));
+      var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;
+      if (dialog.offsetHeight > vh) {
+        var n = 0;
+        while (dialog.offsetHeight > vh && ++n < 4) {
+          lightboxElement.style.width = lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight + 'px';
+        }
+      }
+      reposition(dialog, fh);
+    }
+  };
+
+  /**
+   * Handle image load
+   * @param event
+   * @private
+   */
+
+  MaterialExtLightbox.prototype.imgLoadHandler_ = function () /*event*/{
+    repositionDialog_(this);
+  };
+
+  /**
+   * Handle image drag
+   * @param event
+   * @private
+     */
+  MaterialExtLightbox.prototype.imgDragHandler_ = function (event) {
+
+    var setStyles = function setStyles(element, properties) {
+      //noinspection JSAnnotator
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = (0, _getIterator3.default)((0, _entries2.default)(properties)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var _step$value = (0, _slicedToArray3.default)(_step.value, 2),
+              key = _step$value[0],
+              value = _step$value[1];
+
+          element.style[key] = value;
+        }
+        // ... or:
+        //for (const key in properties) {
+        //  element.style[key] = properties[key];
+        //}
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator.return) {
+            _iterator.return();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    };
+
+    event.preventDefault();
+    //event.stopPropagation();
+
+    var x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);
+
+    var img = this;
+    img.style.opacity = '0.2';
+
+    var slider = document.createElement('div');
+    slider.classList.add(LIGHTBOX_SLIDER);
+    setStyles(slider, { 'width': img.offsetWidth + 'px', 'height': img.offsetHeight + 'px' });
+
+    var slide = document.createElement('div');
+    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+    slide.textContent = '>';
+    setStyles(slide, {
+      'width': img.offsetWidth + 'px',
+      'height': img.offsetHeight + 'px',
+      'line-height': img.offsetHeight + 'px',
+      'font-size': img.offsetHeight / 4 + 'px',
+      'text-align': 'right',
+      'background-image': 'url("' + (img.getAttribute('data-img-url-prev') || '') + '")'
+    });
+    slider.appendChild(slide);
+
+    slide = document.createElement('div');
+    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+    setStyles(slide, {
+      'width': img.offsetWidth + 'px',
+      'height': img.offsetHeight + 'px',
+      'background-image': 'url("' + img.src + '")'
+    });
+    slider.appendChild(slide);
+
+    slide = document.createElement('div');
+    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+    slide.textContent = '<';
+    setStyles(slide, {
+      'width': img.offsetWidth + 'px',
+      'height': img.offsetHeight + 'px',
+      'line-height': img.offsetHeight + 'px',
+      'font-size': img.offsetHeight / 4 + 'px',
+      'text-align': 'left',
+      'background-image': 'url("' + (img.getAttribute('data-img-url-next') || '') + '")'
+    });
+    slider.appendChild(slide);
+
+    img.parentNode.appendChild(slider);
+
+    // drag handler
+    var drag = function drag(e) {
+      e.preventDefault();
+      var dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance
+
+      if (slider.offsetWidth - Math.abs(dx) > 19) {
+        slider.style.left = dx + 'px';
+      }
+    };
+
+    // end drag handler
+    var endDrag = function endDrag(e) {
+      e.preventDefault();
+      //e.stopPropagation();
+
+      window.removeEventListener('mousemove', drag);
+      window.removeEventListener('touchmove', drag);
+      window.removeEventListener('mouseup', endDrag);
+      window.removeEventListener('touchend', endDrag);
+
+      var dx = slider.offsetLeft;
+      img.parentNode.removeChild(slider);
+      img.style.opacity = '1.0';
+
+      if (Math.abs(dx) > 19) {
+        dispatchAction_(dx > 0 ? 'prev' : 'next', img);
+      }
+    };
+
+    window.addEventListener('mousemove', drag);
+    window.addEventListener('touchmove', drag);
+    window.addEventListener('mouseup', endDrag);
+    window.addEventListener('touchend', endDrag);
+  };
+
+  /**
+   * Initialize component
+   */
+  MaterialExtLightbox.prototype.init = function () {
+    var _this = this;
+
+    if (this.element_) {
+      // Do the init required for this component to work
+      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);
+
+      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {
+        this.element_.setAttribute('tabindex', 1);
+      }
+
+      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + BUTTON))).forEach(function (button) {
+        return button.addEventListener('click', _this.buttonClickHandler_.bind(button), false);
+      });
+
+      var figcaption = this.element_.querySelector('figcaption');
+      if (figcaption) {
+        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);
+      }
+
+      var footer = this.element_.querySelector('footer');
+      if (footer) {
+        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);
+      }
+
+      var img = this.element_.querySelector('img');
+      if (img) {
+        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);
+        img.addEventListener('click', function (e) {
+          return e.preventDefault();
+        }, true);
+        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);
+        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);
+      }
+      window.addEventListener('resize', (0, _fullThrottle2.default)(function () {
+        return repositionDialog_(_this.element_);
+      }));
+      window.addEventListener('orientationchange', function () {
+        return repositionDialog_(_this.element_);
+      });
+
+      // Set upgraded flag
+      this.element_.classList.add(_constants.IS_UPGRADED);
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to downgrade
+   *
+  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {
+  };
+  */
+
+  /**
+   * The component registers itself. It can assume componentHandler is available in the global scope.
+   */
+  /* jshint undef:false */
+  componentHandler.register({
+    constructor: MaterialExtLightbox,
+    classAsString: 'MaterialExtLightbox',
+    cssClass: 'mdlext-js-lightbox'
+  });
+})();
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/menu-button/menu-button.js b/node_modules/mdl-ext/es/menu-button/menu-button.js
new file mode 100644
index 0000000..9f7ed17
--- /dev/null
+++ b/node_modules/mdl-ext/es/menu-button/menu-button.js
@@ -0,0 +1,790 @@
+'use strict';
+
+var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = require('babel-runtime/helpers/createClass');
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
+
+var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+
+var _stringUtils = require('../utils/string-utils');
+
+var _fullThrottle = require('../utils/full-throttle');
+
+var _fullThrottle2 = _interopRequireDefault(_fullThrottle);
+
+var _constants = require('../utils/constants');
+
+var _domUtils = require('../utils/dom-utils');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/**
+ * A menu button is a button that opens a menu. It is often styled as a
+ * typical push button with a downward pointing arrow or triangle to hint
+ * that activating the button will display a menu.
+ */
+var JS_MENU_BUTTON = 'mdlext-js-menu-button';
+var MENU_BUTTON_MENU = 'mdlext-menu';
+var MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';
+var MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';
+//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';
+
+/**
+ * Creates the menu controlled by the menu button
+ * @param element
+ * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}
+ */
+
+var menuFactory = function menuFactory(element) {
+
+  var ariaControls = null;
+  var parentNode = null;
+
+  var removeAllSelected = function removeAllSelected() {
+    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected="true"]'))).forEach(function (selectedItem) {
+      return selectedItem.removeAttribute('aria-selected');
+    });
+  };
+
+  var setSelected = function setSelected(item) {
+    var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+    if (force || item && !item.hasAttribute('aria-selected')) {
+      removeAllSelected();
+      if (item) {
+        item.setAttribute('aria-selected', 'true');
+      }
+    }
+  };
+
+  var getSelected = function getSelected() {
+    return element.querySelector('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected="true"]');
+  };
+
+  var isDisabled = function isDisabled(item) {
+    return item && item.hasAttribute('disabled');
+  };
+
+  var isSeparator = function isSeparator(item) {
+    return item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);
+  };
+
+  var focus = function focus(item) {
+    if (item) {
+      item = item.closest('.' + MENU_BUTTON_MENU_ITEM);
+    }
+    if (item) {
+      item.focus();
+    }
+  };
+
+  var nextItem = function nextItem(current) {
+    var n = current.nextElementSibling;
+    if (!n) {
+      n = element.firstElementChild;
+    }
+    if (!isDisabled(n) && !isSeparator(n)) {
+      focus(n);
+    } else {
+      var i = element.children.length;
+      while (n && i-- > 0) {
+        if (isDisabled(n) || isSeparator(n)) {
+          n = n.nextElementSibling;
+          if (!n) {
+            n = element.firstElementChild;
+          }
+        } else {
+          focus(n);
+          break;
+        }
+      }
+    }
+  };
+
+  var previousItem = function previousItem(current) {
+    var p = current.previousElementSibling;
+    if (!p) {
+      p = element.lastElementChild;
+    }
+    if (!isDisabled(p) && !isSeparator(p)) {
+      focus(p);
+    } else {
+      var i = element.children.length;
+      while (p && i-- > 0) {
+        if (isDisabled(p) || isSeparator(p)) {
+          p = p.previousElementSibling;
+          if (!p) {
+            p = element.lastElementChild;
+          }
+        } else {
+          focus(p);
+          break;
+        }
+      }
+    }
+  };
+
+  var firstItem = function firstItem() {
+    var item = element.firstElementChild;
+    if (isDisabled(item) || isSeparator(item)) {
+      nextItem(item);
+    } else {
+      focus(item);
+    }
+  };
+
+  var lastItem = function lastItem() {
+    var item = element.lastElementChild;
+    if (isDisabled(item) || isSeparator(item)) {
+      previousItem(item);
+    } else {
+      focus(item);
+    }
+  };
+
+  var selectItem = function selectItem(item) {
+    if (item && !isDisabled(item) && !isSeparator(item)) {
+      setSelected(item);
+      close(true, item);
+    }
+  };
+
+  var keyDownHandler = function keyDownHandler(event) {
+
+    var item = event.target.closest('.' + MENU_BUTTON_MENU_ITEM);
+
+    switch (event.keyCode) {
+      case _constants.VK_ARROW_UP:
+      case _constants.VK_ARROW_LEFT:
+        if (item) {
+          previousItem(item);
+        } else {
+          firstItem();
+        }
+        break;
+
+      case _constants.VK_ARROW_DOWN:
+      case _constants.VK_ARROW_RIGHT:
+        if (item) {
+          nextItem(item);
+        } else {
+          lastItem();
+        }
+        break;
+
+      case _constants.VK_HOME:
+        firstItem();
+        break;
+
+      case _constants.VK_END:
+        lastItem();
+        break;
+
+      case _constants.VK_SPACE:
+      case _constants.VK_ENTER:
+        selectItem(item);
+        break;
+
+      case _constants.VK_ESC:
+        close(true);
+        break;
+
+      case _constants.VK_TAB:
+        // We do not have a "natural" tab order from menu, so the best we can do is to set focus back to the button
+        close(true);
+        break;
+
+      default:
+        return;
+    }
+    event.preventDefault();
+  };
+
+  var blurHandler = function blurHandler(event) {
+
+    // See: https://github.com/facebook/react/issues/2011
+    var t = event.relatedTarget || event.explicitOriginalTarget || // FF
+    document.activeElement; // IE11
+
+    //console.log('***** blur, target, relatedTarget', event.target, t);
+
+    try {
+      if (t) {
+        if (t.closest('.' + MENU_BUTTON_MENU) !== element && shouldClose(t)) {
+          close();
+        }
+      } else {
+        close();
+      }
+    } catch (err) {
+      // FF throws error: "TypeError: n.closest is not a function" if related target is a text node
+      close();
+    }
+  };
+
+  var clickHandler = function clickHandler(event) {
+    //console.log('***** click, target', event.target);
+
+    event.preventDefault();
+    var t = event.target;
+    if (t && t.closest('.' + MENU_BUTTON_MENU) === element) {
+      var item = t.closest('.' + MENU_BUTTON_MENU_ITEM);
+      if (item) {
+        selectItem(item);
+      }
+    } else {
+      if (shouldClose(t)) {
+        close();
+      }
+    }
+  };
+
+  var touchStartHandler = function touchStartHandler(event) {
+    //console.log('***** touchStart, target', event.target);
+
+    var t = event.target;
+    if (!(t && t.closest('.' + MENU_BUTTON_MENU) === element)) {
+      if (event.type === 'touchstart') {
+        event.preventDefault();
+      }
+      close();
+    }
+  };
+
+  var addListeners = function addListeners() {
+    element.addEventListener('keydown', keyDownHandler, false);
+    element.addEventListener('blur', blurHandler, true);
+    element.addEventListener('click', clickHandler, true);
+    document.documentElement.addEventListener('touchstart', touchStartHandler, true);
+  };
+
+  var _removeListeners = function _removeListeners() {
+    element.removeEventListener('keydown', keyDownHandler, false);
+    element.removeEventListener('blur', blurHandler, true);
+    element.removeEventListener('click', clickHandler, true);
+    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);
+  };
+
+  var _open = function _open(controlElement) {
+    var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';
+
+
+    ariaControls = controlElement.closest('.' + JS_MENU_BUTTON);
+
+    element.style['min-width'] = Math.max(124, controlElement.getBoundingClientRect().width) + 'px';
+    element.removeAttribute('hidden');
+    (0, _domUtils.tether)(controlElement, element);
+
+    var item = void 0;
+    switch (position.toLowerCase()) {
+      case 'first':
+        firstItem();
+        break;
+
+      case 'last':
+        lastItem();
+        break;
+
+      case 'selected':
+        item = getSelected();
+        if (item && !item.hasAttribute('disabled')) {
+          focus(item);
+        } else {
+          firstItem();
+        }
+        break;
+    }
+
+    addListeners();
+  };
+
+  var shouldClose = function shouldClose(target) {
+    //console.log('***** shouldClose');
+
+    var result = false;
+    var btn = target && target.closest('.' + JS_MENU_BUTTON) || null;
+    if (!btn) {
+      result = true;
+    } else if (btn.getAttribute('aria-controls') === element.id) {
+      if (btn !== ariaControls) {
+        result = true;
+      }
+    } else {
+      result = true;
+    }
+    return result;
+  };
+
+  var close = function close() {
+    var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+    var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+    _removeListeners();
+
+    element.dispatchEvent(new CustomEvent('_closemenu', {
+      bubbles: true,
+      cancelable: true,
+      detail: { forceFocus: forceFocus, item: item }
+    }));
+  };
+
+  var addWaiAria = function addWaiAria() {
+    if (!element.hasAttribute('id')) {
+      // Generate a random id
+      element.id = 'menu-button-' + (0, _stringUtils.randomString)();
+    }
+    element.setAttribute('tabindex', '-1');
+    element.setAttribute('role', 'menu');
+    element.setAttribute('hidden', '');
+
+    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM))).forEach(function (menuitem) {
+      menuitem.setAttribute('tabindex', '-1');
+      menuitem.setAttribute('role', 'menuitem');
+    });
+
+    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM_SEPARATOR))).forEach(function (menuitem) {
+      menuitem.setAttribute('role', 'separator');
+    });
+  };
+
+  var init = function init() {
+    addWaiAria();
+    parentNode = element.parentNode;
+    element.classList.add('is-upgraded');
+  };
+
+  var _downgrade = function _downgrade() {
+    _removeListeners();
+    if (element.parentNode !== parentNode) {
+      parentNode.appendChild(element);
+    }
+    element.classList.remove('is-upgraded');
+  };
+
+  init();
+
+  return {
+    /**
+     * Get the menu element
+     * @returns {Element} the menu element
+     */
+    get element() {
+      return element;
+    },
+
+    /**
+     * Set selected menu item
+     * @param item
+     */
+    set selected(item) {
+      setSelected(item, true);
+    },
+
+    /**
+     * Open menu
+     * @param {Element} controlElement the element where the menu should be aligned to
+     * @param {String} position menuElement item to receive focus after menu element is opened
+     */
+    open: function open(controlElement) {
+      var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';
+      return _open(controlElement, position);
+    },
+
+    /**
+     * Remove event listeners.
+     */
+    removeListeners: function removeListeners() {
+      return _removeListeners();
+    },
+
+    /**
+     * Downgrade menu
+     */
+    downgrade: function downgrade() {
+      return _downgrade();
+    }
+  };
+};
+
+/**
+ * The menubutton component
+ */
+
+var MenuButton = function () {
+  function MenuButton(element) {
+    var _this = this;
+
+    (0, _classCallCheck3.default)(this, MenuButton);
+
+    this.keyDownHandler = function (event) {
+      if (!_this.isDisabled()) {
+        switch (event.keyCode) {
+          case _constants.VK_ARROW_UP:
+            _this.openMenu('last');
+            break;
+
+          case _constants.VK_ARROW_DOWN:
+            _this.openMenu();
+            break;
+
+          case _constants.VK_SPACE:
+          case _constants.VK_ENTER:
+            _this.openMenu('selected');
+            break;
+
+          case _constants.VK_ESC:
+            _this.closeMenu();
+            break;
+
+          case _constants.VK_TAB:
+            _this.closeMenu();
+            return;
+
+          default:
+            return;
+        }
+      }
+      //event.stopPropagation();
+      event.preventDefault();
+    };
+
+    this.clickHandler = function () {
+      if (!_this.isDisabled()) {
+        if (_this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {
+          _this.closeMenu(true);
+        } else {
+          _this.openMenu('selected');
+        }
+      }
+    };
+
+    this.recalcMenuPosition = (0, _fullThrottle2.default)(function () {
+      var c = _this.focusElement.getBoundingClientRect();
+      var dx = _this.focusElementLastScrollPosition.left - c.left;
+      var dy = _this.focusElementLastScrollPosition.top - c.top;
+      var left = (parseFloat(_this.menu.element.style.left) || 0) - dx;
+      var top = (parseFloat(_this.menu.element.style.top) || 0) - dy;
+
+      _this.menu.element.style.left = left + 'px';
+      _this.menu.element.style.top = top + 'px';
+      _this.focusElementLastScrollPosition = c;
+    });
+
+    this.positionChangeHandler = function () {
+      _this.recalcMenuPosition(_this);
+    };
+
+    this.closeMenuHandler = function (event) {
+      if (event && event.detail) {
+        if (event.detail.item && event.detail.item !== _this.selectedItem) {
+          _this.selectedItem = event.detail.item;
+          _this.dispatchMenuSelect();
+        }
+        _this.closeMenu(event.detail.forceFocus);
+      }
+    };
+
+    this.element = element;
+    this.focusElement = undefined;
+    this.focusElementLastScrollPosition = undefined;
+    this.scrollElements = [];
+    this.menu = undefined;
+    this.selectedItem = null;
+    this.init();
+  }
+
+  /**
+   * Re-position menu if content is scrolled, window is resized or orientation change
+   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/
+   */
+
+
+  (0, _createClass3.default)(MenuButton, [{
+    key: 'dispatchMenuSelect',
+    value: function dispatchMenuSelect() {
+      this.element.dispatchEvent(new CustomEvent('menuselect', {
+        bubbles: true,
+        cancelable: true,
+        detail: { source: this.selectedItem }
+      }));
+    }
+  }, {
+    key: 'isDisabled',
+    value: function isDisabled() {
+      return this.element.hasAttribute('disabled');
+    }
+  }, {
+    key: 'removeListeners',
+    value: function removeListeners() {
+      this.element.removeEventListener('keydown', this.keyDownHandler);
+      this.element.removeEventListener('click', this.clickHandler);
+    }
+  }, {
+    key: 'openMenu',
+    value: function openMenu() {
+      var _this2 = this;
+
+      var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';
+
+
+      if (!this.isDisabled() && this.menu) {
+
+        // Close the menu if button position change
+        this.scrollElements = (0, _domUtils.getScrollParents)(this.element);
+        this.scrollElements.forEach(function (el) {
+          return el.addEventListener('scroll', _this2.positionChangeHandler);
+        });
+
+        window.addEventListener('resize', this.positionChangeHandler);
+        window.addEventListener('orientationchange', this.positionChangeHandler);
+        this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);
+
+        this.menu.selected = this.selectedItem;
+        this.menu.open(this.focusElement, position);
+        this.element.setAttribute('aria-expanded', 'true');
+
+        this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();
+      }
+    }
+  }, {
+    key: 'closeMenu',
+    value: function closeMenu() {
+      var _this3 = this;
+
+      var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+      if (this.menu) {
+        this.menu.removeListeners();
+        this.scrollElements.forEach(function (el) {
+          return el.removeEventListener('scroll', _this3.positionChangeHandler);
+        });
+        window.removeEventListener('resize', this.positionChangeHandler);
+        window.removeEventListener('orientationchange', this.positionChangeHandler);
+        this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);
+
+        if (forceFocus) {
+          this.focus();
+        }
+        this.element.setAttribute('aria-expanded', 'false');
+        this.menu.element.setAttribute('hidden', '');
+      }
+    }
+  }, {
+    key: 'focus',
+    value: function focus() {
+      if (!this.isDisabled()) {
+        this.focusElement.focus();
+      }
+    }
+  }, {
+    key: 'init',
+    value: function init() {
+      var _this4 = this;
+
+      var addListeners = function addListeners() {
+        _this4.element.addEventListener('keydown', _this4.keyDownHandler);
+        _this4.element.addEventListener('click', _this4.clickHandler);
+      };
+
+      var addWaiAria = function addWaiAria() {
+        _this4.element.setAttribute('role', 'button');
+        _this4.element.setAttribute('aria-expanded', 'false');
+        _this4.element.setAttribute('aria-haspopup', 'true');
+      };
+
+      var addFocusElement = function addFocusElement() {
+        _this4.focusElement = _this4.element.querySelector('input[type="text"]');
+        if (!_this4.focusElement) {
+          _this4.focusElement = _this4.element;
+
+          if (!(_this4.focusElement.tagName.toLowerCase() === 'button' || _this4.focusElement.tagName.toLowerCase() === 'input')) {
+            if (!_this4.focusElement.hasAttribute('tabindex')) {
+              _this4.focusElement.setAttribute('tabindex', '0');
+            }
+          }
+        }
+      };
+
+      var moveElementToDocumentBody = function moveElementToDocumentBody(element) {
+        // To position an element on top of all other z-indexed elements, the element should be moved to document.body
+        //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/
+
+        if (element.parentNode !== document.body) {
+          return document.body.appendChild(element);
+        }
+        return element;
+      };
+
+      var findMenuElement = function findMenuElement() {
+        var menuElement = void 0;
+        var menuElementId = _this4.element.getAttribute('aria-controls');
+        if (menuElementId !== null) {
+          menuElement = document.querySelector('#' + menuElementId);
+        } else {
+          menuElement = _this4.element.parentNode.querySelector('.' + MENU_BUTTON_MENU);
+        }
+        return menuElement;
+      };
+
+      var addMenu = function addMenu() {
+        var menuElement = findMenuElement();
+        if (menuElement) {
+          if (menuElement.componentInstance) {
+            _this4.menu = menuElement.componentInstance;
+          } else {
+            _this4.menu = menuFactory(menuElement);
+            menuElement.componentInstance = _this4.menu;
+            moveElementToDocumentBody(menuElement);
+          }
+          _this4.element.setAttribute('aria-controls', _this4.menu.element.id);
+        }
+      };
+
+      addFocusElement();
+      addWaiAria();
+      addMenu();
+      this.removeListeners();
+      addListeners();
+    }
+  }, {
+    key: 'downgrade',
+    value: function downgrade() {
+      var _this5 = this;
+
+      if (this.menu) {
+        // Do not downgrade menu if there are other buttons sharing this menu
+        var related = [].concat((0, _toConsumableArray3.default)(document.querySelectorAll('.' + JS_MENU_BUTTON + '[aria-controls="' + this.element.getAttribute('aria-controls') + '"]')));
+        if (related.filter(function (c) {
+          return c !== _this5.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0;
+        }).length === 0) {
+          this.menu.downgrade();
+        }
+      }
+      this.removeListeners();
+    }
+  }]);
+  return MenuButton;
+}();
+
+(function () {
+  'use strict';
+
+  /**
+   * https://github.com/google/material-design-lite/issues/4205
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+
+  var MaterialExtMenuButton = function MaterialExtMenuButton(element) {
+    this.element_ = element;
+    this.menuButton_ = null;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtMenuButton'] = MaterialExtMenuButton;
+
+  // Public methods.
+
+  /**
+   * Get the menu element controlled by this button, null if no menu is controlled by this button
+   * @public
+   */
+  MaterialExtMenuButton.prototype.getMenuElement = function () {
+    return this.menuButton_.menu ? this.menuButton_.menu.element : null;
+  };
+  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;
+
+  /**
+   * Open menu
+   * @public
+   * @param {String} position one of "first", "last" or "selected"
+   */
+  MaterialExtMenuButton.prototype.openMenu = function (position) {
+    this.menuButton_.openMenu(position);
+  };
+  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;
+
+  /**
+   * Close menu
+   * @public
+   */
+  MaterialExtMenuButton.prototype.closeMenu = function () {
+    this.menuButton_.closeMenu(true);
+  };
+  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;
+
+  /**
+   * Get selected menu item
+   * @public
+   * @returns {Element} The selected menu item or null if no item selected
+   */
+  MaterialExtMenuButton.prototype.getSelectedMenuItem = function () {
+    return this.menuButton_.selectedItem;
+  };
+  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;
+
+  /**
+   * Set (default) selected menu item
+   * @param {Element} item
+   */
+  MaterialExtMenuButton.prototype.setSelectedMenuItem = function (item) {
+    this.menuButton_.selectedItem = item;
+  };
+  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtMenuButton.prototype.init = function () {
+    if (this.element_) {
+      this.menuButton_ = new MenuButton(this.element_);
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+      this.element_.classList.add(_constants.IS_UPGRADED);
+    }
+  };
+
+  /**
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtMenuButton.prototype.mdlDowngrade_ = function () {
+    this.menuButton_.downgrade();
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtMenuButton,
+    classAsString: 'MaterialExtMenuButton',
+    cssClass: JS_MENU_BUTTON,
+    widget: true
+  });
+})();
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/selectfield/selectfield.js b/node_modules/mdl-ext/es/selectfield/selectfield.js
new file mode 100644
index 0000000..5274789
--- /dev/null
+++ b/node_modules/mdl-ext/es/selectfield/selectfield.js
@@ -0,0 +1,271 @@
+'use strict';
+
+var _stringUtils = require('../utils/string-utils');
+
+var _constants = require('../utils/constants');
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/*
+ * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield
+ */
+
+(function () {
+  'use strict';
+
+  var LABEL = 'mdlext-selectfield__label';
+  var INPUT = 'mdlext-selectfield__select';
+
+  /**
+   * Class constructor for Selectfield MDLEXT 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 MaterialExtSelectfield = function MaterialExtSelectfield(element) {
+    this.element_ = element;
+    this.init(); // Initialize instance.
+  };
+
+  window['MaterialExtSelectfield'] = MaterialExtSelectfield;
+
+  /**
+   * Handle focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  /*eslint no-unused-vars: 0*/
+  MaterialExtSelectfield.prototype.onFocus_ = function () /*event*/{
+    this.element_.classList.add(_constants.IS_FOCUSED);
+  };
+
+  /**
+   * Handle lost focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  /*eslint no-unused-vars: 0*/
+  MaterialExtSelectfield.prototype.onBlur_ = function () /*event*/{
+    this.element_.classList.remove(_constants.IS_FOCUSED);
+  };
+
+  /**
+   * Handle reset event from out side.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialExtSelectfield.prototype.onReset_ = function () /*event*/{
+    this.updateClasses_();
+  };
+
+  /**
+   * Handle class updates.
+   *
+   * @private
+   */
+  MaterialExtSelectfield.prototype.updateClasses_ = function () {
+    this.checkDisabled();
+    this.checkValidity();
+    this.checkDirty();
+    this.checkFocus();
+  };
+
+  // Public methods.
+
+  /**
+   * Check the disabled state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkDisabled = function () {
+    if (this.select_.disabled) {
+      this.element_.classList.add(_constants.IS_DISABLED);
+    } else {
+      this.element_.classList.remove(_constants.IS_DISABLED);
+    }
+  };
+  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;
+
+  /**
+   * Check the focus state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkFocus = function () {
+    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus
+    /*eslint no-extra-boolean-cast: 0*/
+    if (Boolean(this.element_.querySelector(':focus'))) {
+      this.element_.classList.add(_constants.IS_FOCUSED);
+    } else {
+      this.element_.classList.remove(_constants.IS_FOCUSED);
+    }
+  };
+
+  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;
+
+  /**
+   * Check the validity state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkValidity = function () {
+
+    /* Don't think it makes any sense to check validity.
+       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0
+     if (this.select_.validity) {
+      if (this.select_.validity.valid) {
+        this.element_.classList.remove(this.CssClasses_.IS_INVALID);
+      } else {
+        this.element_.classList.add(this.CssClasses_.IS_INVALID);
+      }
+    }
+    */
+  };
+
+  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;
+
+  /**
+   * Check the dirty state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkDirty = function () {
+    if (this.select_.value && this.select_.value.length > 0) {
+      this.element_.classList.add(_constants.IS_DIRTY);
+    } else {
+      this.element_.classList.remove(_constants.IS_DIRTY);
+    }
+  };
+
+  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;
+
+  /**
+   * Disable select field.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.disable = function () {
+    this.select_.disabled = true;
+    this.updateClasses_();
+  };
+
+  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;
+
+  /**
+   * Enable select field.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.enable = function () {
+    this.select_.disabled = false;
+    this.updateClasses_();
+  };
+
+  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;
+
+  /**
+   * Update select field value.
+   *
+   * @param {string} value The value to which to set the control (optional).
+   * @public
+   */
+  MaterialExtSelectfield.prototype.change = function (value) {
+    this.select_.value = value || '';
+    this.updateClasses_();
+  };
+  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;
+
+  /**
+   * Initialize element.
+   */
+  MaterialExtSelectfield.prototype.init = function () {
+    if (this.element_) {
+      this.label_ = this.element_.querySelector('.' + LABEL);
+      this.select_ = this.element_.querySelector('.' + INPUT);
+
+      if (this.select_) {
+        // Remove listeners, just in case ...
+        this.select_.removeEventListener('change', this.updateClasses_);
+        this.select_.removeEventListener('focus', this.onFocus_);
+        this.select_.removeEventListener('blur', this.onBlur_);
+        this.select_.removeEventListener('reset', this.onReset_);
+
+        this.select_.addEventListener('change', this.updateClasses_.bind(this));
+        this.select_.addEventListener('focus', this.onFocus_.bind(this));
+        this.select_.addEventListener('blur', this.onBlur_.bind(this));
+        this.select_.addEventListener('reset', this.onReset_.bind(this));
+
+        if (this.label_) {
+          var id = void 0;
+          if (!this.select_.hasAttribute('id')) {
+            id = 'select-' + (0, _stringUtils.randomString)();
+            this.select_.id = id;
+          } else {
+            id = this.select_.id;
+          }
+
+          if (!this.label_.hasAttribute('for')) {
+            this.label_.setAttribute('for', id);
+          }
+        }
+
+        var invalid = this.element_.classList.contains(_constants.IS_INVALID);
+        this.updateClasses_();
+        this.element_.classList.add(_constants.IS_UPGRADED);
+
+        if (invalid) {
+          this.element_.classList.add(_constants.IS_INVALID);
+        }
+        if (this.select_.hasAttribute('autofocus')) {
+          this.element_.focus();
+          this.checkFocus();
+        }
+      }
+    }
+  };
+
+  /**
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to downgrade
+   *
+  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {
+    'use strict';
+    console.log('***** MaterialExtSelectfield.mdlDowngrade ');
+  };
+  */
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /*eslint no-undef: 0*/
+  componentHandler.register({
+    constructor: MaterialExtSelectfield,
+    classAsString: 'MaterialExtSelectfield',
+    cssClass: 'mdlext-js-selectfield',
+    widget: true
+  });
+})();
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/sticky-header/sticky-header.js b/node_modules/mdl-ext/es/sticky-header/sticky-header.js
new file mode 100644
index 0000000..08593aa
--- /dev/null
+++ b/node_modules/mdl-ext/es/sticky-header/sticky-header.js
@@ -0,0 +1,252 @@
+'use strict';
+
+var _fullThrottle = require('../utils/full-throttle');
+
+var _fullThrottle2 = _interopRequireDefault(_fullThrottle);
+
+var _jsonUtils = require('../utils/json-utils');
+
+var _constants = require('../utils/constants');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+(function () {
+  'use strict';
+
+  var MDL_LAYOUT_CONTENT = 'mdl-layout__content';
+  var IS_SCROLL_CLASS = 'mdlext-is-scroll';
+
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  var MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {
+    // Stores the element.
+    this.header_ = element;
+
+    // Heder listens to scroll events from content
+    this.content_ = null;
+    this.lastScrollTop_ = 0;
+
+    // Default config
+    this.config_ = {
+      visibleAtScrollEnd: false
+    };
+
+    this.mutationObserver_ = null;
+
+    this.drawing_ = false;
+
+    // Initialize instance.
+    this.init();
+  };
+
+  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;
+
+  /**
+   * Update header width
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.recalcWidth_ = function () {
+    this.header_.style.width = this.content_.clientWidth + 'px';
+  };
+
+  var throttleResize = (0, _fullThrottle2.default)(function (self) {
+    return self.recalcWidth_();
+  });
+
+  /**
+   * Adjust header width when window resizes or oreientation changes
+   * @param event
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.resizeHandler_ = function () /* event */{
+    throttleResize(this);
+  };
+
+  /**
+   * Update header position
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.reposition_ = function () {
+
+    var currentContentScrollTop = this.content_.scrollTop;
+    var scrollDiff = this.lastScrollTop_ - currentContentScrollTop;
+
+    if (currentContentScrollTop <= 0) {
+      // Scrolled to the top. Header sticks to the top
+      this.header_.style.top = '0';
+      this.header_.classList.remove(IS_SCROLL_CLASS);
+    } else if (scrollDiff > 0) {
+
+      if (scrollDiff >= this.header_.offsetHeight) {
+
+        // Scrolled up. Header slides in
+        var headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;
+        if (headerTop != 0) {
+          this.header_.style.top = '0';
+          this.header_.classList.add(IS_SCROLL_CLASS);
+        }
+        this.lastScrollTop_ = currentContentScrollTop;
+      }
+      return;
+    } else if (scrollDiff < 0) {
+      // Scrolled down
+      this.header_.classList.add(IS_SCROLL_CLASS);
+      var _headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;
+
+      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {
+        // Bottom of content
+        if (_headerTop != 0) {
+          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : '-' + this.header_.offsetHeight + 'px';
+        }
+      } else {
+        _headerTop += scrollDiff;
+        var offsetHeight = this.header_.offsetHeight;
+        this.header_.style.top = (Math.abs(_headerTop) > offsetHeight ? -offsetHeight : _headerTop) + 'px';
+      }
+    }
+
+    this.lastScrollTop_ = currentContentScrollTop;
+  };
+
+  var throttleScroll = (0, _fullThrottle2.default)(function (self) {
+    return self.reposition_();
+  });
+
+  /**
+   * Scroll header when content scrolls
+   * @param event
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.scrollHandler_ = function () /* event */{
+    throttleScroll(this);
+  };
+
+  /**
+   * Init header position
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.updatePosition_ = function () /* event */{
+    this.recalcWidth_();
+    this.reposition_();
+  };
+
+  /**
+   * Add mutation observer
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.addMutationObserver_ = function () {
+    var _this = this;
+
+    // jsdom does not support MutationObserver - so this is not testable
+    /* istanbul ignore next */
+    this.mutationObserver_ = new MutationObserver(function () /*mutations*/{
+      // Adjust header width if content changes (e.g. in a SPA)
+      _this.updatePosition_();
+    });
+
+    this.mutationObserver_.observe(this.content_, {
+      attributes: false,
+      childList: true,
+      characterData: false,
+      subtree: true
+    });
+  };
+
+  /**
+  * Removes event listeners
+  * @private
+  */
+  MaterialExtStickyHeader.prototype.removeListeners_ = function () {
+
+    window.removeEventListener('resize', this.resizeHandler_);
+    window.removeEventListener('orientationchange', this.resizeHandler_);
+
+    if (this.content_) {
+      this.content_.removeEventListener('scroll', this.scrollHandler_);
+    }
+
+    if (this.mutationObserver_) {
+      this.mutationObserver_.disconnect();
+      this.mutationObserver_ = null;
+    }
+  };
+
+  /**
+   * Initialize component
+   */
+  MaterialExtStickyHeader.prototype.init = function () {
+
+    if (this.header_) {
+
+      this.removeListeners_();
+
+      if (this.header_.hasAttribute('data-config')) {
+        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.header_.getAttribute('data-config'));
+      }
+
+      this.content_ = this.header_.parentNode.querySelector('.' + MDL_LAYOUT_CONTENT) || null;
+
+      if (this.content_) {
+        this.content_.style.paddingTop = this.header_.offsetHeight + 'px'; // Make room for sticky header
+        this.lastScrollTop_ = this.content_.scrollTop;
+
+        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));
+        window.addEventListener('resize', this.resizeHandler_.bind(this));
+        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));
+
+        this.addMutationObserver_();
+        this.updatePosition_();
+
+        // Set upgraded flag
+        this.header_.classList.add(_constants.IS_UPGRADED);
+      }
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to clean
+   *
+   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {
+     'use strict';
+     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');
+   };
+   */
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtStickyHeader,
+    classAsString: 'MaterialExtStickyHeader',
+    cssClass: 'mdlext-js-sticky-header'
+  });
+})(); /**
+       * @license
+       * Copyright 2016 Leif Olsen. 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.
+       *
+       * This code is built with Google Material Design Lite,
+       * which is Licensed under the Apache License, Version 2.0
+       */
+
+/**
+ * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.
+ * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and
+ * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.
+ */
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/constants.js b/node_modules/mdl-ext/es/utils/constants.js
new file mode 100644
index 0000000..2d063e2
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/constants.js
@@ -0,0 +1,63 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var VK_TAB = 9;
+var VK_ENTER = 13;
+var VK_ESC = 27;
+var VK_SPACE = 32;
+var VK_PAGE_UP = 33;
+var VK_PAGE_DOWN = 34;
+var VK_END = 35;
+var VK_HOME = 36;
+var VK_ARROW_LEFT = 37;
+var VK_ARROW_UP = 38;
+var VK_ARROW_RIGHT = 39;
+var VK_ARROW_DOWN = 40;
+
+var ARIA_EXPANDED = 'aria-expanded';
+var ARIA_HIDDEN = 'aria-hidden';
+var ARIA_MULTISELECTABLE = 'aria-multiselectable';
+var ARIA_SELECTED = 'aria-selected';
+
+var IS_DIRTY = 'is-dirty';
+var IS_DISABLED = 'is-disabled';
+var IS_EXPANDED = 'is-expanded';
+var IS_FOCUSED = 'is-focused';
+var IS_INVALID = 'is-invalid';
+var IS_UPGRADED = 'is-upgraded';
+var DATA_UPGRADED = 'data-upgraded';
+
+var MDL_RIPPLE = 'mdl-ripple';
+var MDL_RIPPLE_COMPONENT = 'MaterialRipple';
+var MDL_RIPPLE_EFFECT = 'mdl-js-ripple-effect';
+var MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';
+
+exports.VK_TAB = VK_TAB;
+exports.VK_ENTER = VK_ENTER;
+exports.VK_ESC = VK_ESC;
+exports.VK_SPACE = VK_SPACE;
+exports.VK_PAGE_UP = VK_PAGE_UP;
+exports.VK_PAGE_DOWN = VK_PAGE_DOWN;
+exports.VK_END = VK_END;
+exports.VK_HOME = VK_HOME;
+exports.VK_ARROW_LEFT = VK_ARROW_LEFT;
+exports.VK_ARROW_UP = VK_ARROW_UP;
+exports.VK_ARROW_RIGHT = VK_ARROW_RIGHT;
+exports.VK_ARROW_DOWN = VK_ARROW_DOWN;
+exports.ARIA_EXPANDED = ARIA_EXPANDED;
+exports.ARIA_HIDDEN = ARIA_HIDDEN;
+exports.ARIA_MULTISELECTABLE = ARIA_MULTISELECTABLE;
+exports.ARIA_SELECTED = ARIA_SELECTED;
+exports.IS_DIRTY = IS_DIRTY;
+exports.IS_DISABLED = IS_DISABLED;
+exports.IS_EXPANDED = IS_EXPANDED;
+exports.IS_FOCUSED = IS_FOCUSED;
+exports.IS_INVALID = IS_INVALID;
+exports.IS_UPGRADED = IS_UPGRADED;
+exports.DATA_UPGRADED = DATA_UPGRADED;
+exports.MDL_RIPPLE = MDL_RIPPLE;
+exports.MDL_RIPPLE_COMPONENT = MDL_RIPPLE_COMPONENT;
+exports.MDL_RIPPLE_EFFECT = MDL_RIPPLE_EFFECT;
+exports.MDL_RIPPLE_EFFECT_IGNORE_EVENTS = MDL_RIPPLE_EFFECT_IGNORE_EVENTS;
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/debounce-function.js b/node_modules/mdl-ext/es/utils/debounce-function.js
new file mode 100644
index 0000000..27f977c
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/debounce-function.js
@@ -0,0 +1,89 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _apply = require("babel-runtime/core-js/reflect/apply");
+
+var _apply2 = _interopRequireDefault(_apply);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Debouncing enforces that a function not be called again until a certain
+ * amount of time has passed without it being called.
+ *
+ * @see https://css-tricks.com/the-difference-between-throttling-and-debouncing/
+ * @see https://github.com/webmodules/raf-debounce
+ * @see https://github.com/moszeed/es6-promise-debounce
+ * @see https://gist.github.com/philbirnie/893950093611d5c1dff4246a572cfbeb/
+ * @see https://github.com/SliceMeNice-ES6/event-utils/blob/master/debounce.js
+ * @see https://github.com/jeromedecoster/raf-funcs
+ * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
+ * @see http://davidwalsh.name/javascript-debounce-function
+ *
+ * @param callback the callback
+ * @param threshold optional delay, default to 250 ms, min to 1000/60ms ms
+ * @param context  optional context of this, default to global
+ * @return {Function} reference to immediate and cancel
+ */
+var MIN_THRESHOLD = 1000 / 60;
+
+var debounceFunction = function debounceFunction(callback) {
+  var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 250;
+  var context = arguments[2];
+
+
+  if (threshold < MIN_THRESHOLD) {
+    threshold = MIN_THRESHOLD;
+  }
+
+  if (!context) {
+    context = this || window;
+  }
+
+  var next = null;
+  var start = 0;
+
+  return function () {
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    var _cancel = function _cancel() {
+      if (next) {
+        window.cancelAnimationFrame(next);
+        next = null;
+      }
+    };
+
+    var execute = function execute() {
+      _cancel();
+      return (0, _apply2.default)(callback, context, args);
+    };
+
+    var later = function later() {
+      if (threshold - (Date.now() - start) <= 0) {
+        return execute();
+      }
+      next = window.requestAnimationFrame(later);
+    };
+
+    _cancel();
+    start = Date.now();
+    next = window.requestAnimationFrame(later);
+
+    return {
+      cancel: function cancel() {
+        return _cancel();
+      },
+      immediate: function immediate() {
+        return execute();
+      }
+    };
+  };
+};
+
+exports.default = debounceFunction;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/dom-utils.js b/node_modules/mdl-ext/es/utils/dom-utils.js
new file mode 100644
index 0000000..3f63f90
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/dom-utils.js
@@ -0,0 +1,424 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.tether = exports.removeChildElements = exports.moveElements = exports.isRectInsideWindowViewport = exports.isFocusable = exports.getScrollParents = exports.getParentElements = exports.getWindowViewport = undefined;
+
+var _isNan = require('babel-runtime/core-js/number/is-nan');
+
+var _isNan2 = _interopRequireDefault(_isNan);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Remove child element(s)
+ * element.innerHTNL = '' has a performance penality!
+ * @see http://jsperf.com/empty-an-element/16
+ * @see http://jsperf.com/force-reflow
+ * @param element
+ * @param forceReflow
+ */
+var removeChildElements = function removeChildElements(element) {
+  var forceReflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+
+  // See: http://jsperf.com/empty-an-element/16
+  while (element.lastChild) {
+    element.removeChild(element.lastChild);
+  }
+  if (forceReflow) {
+    // See: http://jsperf.com/force-reflow
+    var d = element.style.display;
+
+    element.style.display = 'none';
+    element.style.display = d;
+  }
+};
+
+/**
+ * Moves child elements from a DOM node to another dom node.
+ * @param source {HTMLElement}
+ * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created
+ * @return {HTMLElement} The target node
+ *
+ * @example
+ * // Moves child elements from a DOM node to another dom node.
+ * moveElements(source, destination);
+ *
+ * @example
+ * // If the second parameter is ommited, a document fragment is created:
+ * let fragment = moveElements(source);
+ *
+ * @See: https://github.com/webmodules/dom-move
+ */
+var moveElements = function moveElements(source, target) {
+  if (!target) {
+    target = source.ownerDocument.createDocumentFragment();
+  }
+  while (source.firstChild) {
+    target.appendChild(source.firstChild);
+  }
+  return target;
+};
+
+/**
+ * Get the browser viewport dimensions
+ * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript
+ * @return {{windowWidth: number, windowHeight: number}}
+ */
+var getWindowViewport = function getWindowViewport() {
+  return {
+    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),
+    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)
+  };
+};
+
+/**
+ * Check whether an element is in the window viewport
+ * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/
+ * @param top
+ * @param left
+ * @param bottom
+ * @param right
+ * @return {boolean} true if rectangle is inside window viewport, otherwise false
+ */
+var isRectInsideWindowViewport = function isRectInsideWindowViewport(_ref) {
+  var top = _ref.top,
+      left = _ref.left,
+      bottom = _ref.bottom,
+      right = _ref.right;
+
+  var _getWindowViewport = getWindowViewport(),
+      viewportWidth = _getWindowViewport.viewportWidth,
+      viewportHeight = _getWindowViewport.viewportHeight;
+
+  return top >= 0 && left >= 0 && bottom <= viewportHeight && right <= viewportWidth;
+};
+
+/**
+ * Get a list of parent elements that can possibly scroll
+ * @param el the element to get parents for
+ * @returns {Array}
+ */
+var getScrollParents = function getScrollParents(el) {
+  var elements = [];
+
+  /*
+  for (el = el.parentNode; el; el = el.parentNode) {
+    const cs = window.getComputedStyle(el);
+    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {
+      elements.unshift(el);
+    }
+    if(el === document.body) {
+      break;
+    }
+  }
+  */
+
+  var element = el.parentNode;
+  while (element) {
+    var cs = window.getComputedStyle(element);
+    if (!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {
+      elements.unshift(element);
+    }
+    if (element === document.body) {
+      break;
+    }
+    element = element.parentNode;
+  }
+
+  return elements;
+};
+
+/**
+ * Get a list of parent elements, from a given element to a given element
+ * @param {HTMLElement} from
+ * @param {HTMLElement} to
+ * @return {Array<HTMLElement>} the parent elements, not including from and to
+ */
+var getParentElements = function getParentElements(from, to) {
+  var result = [];
+  var element = from.parentNode;
+  while (element) {
+    if (element === to) {
+      break;
+    }
+    result.unshift(element);
+    element = element.parentNode;
+  }
+  return result;
+};
+
+/**
+ * Position element next to button
+ *
+ * Positioning strategy
+ *  1. element.height > viewport.height
+ *     let element.height = viewport.heigt
+ *     let element.overflow-y = auto
+ *  2. element.width > viewport.width
+ *     let element.width = viewport.width
+ *  3. position element below button, align left edge of element with button left
+ *       done if element inside viewport
+ *  4. position element below button, align right edge of element with button right
+ *       done if element inside viewport
+ *  5. positions element above button, aligns left edge of element with button left
+ *       done if element inside viewport
+ *  6. position element above the control element, aligned to its right.
+ *       done if element inside viewport
+ *  7. position element at button right hand side, aligns element top with button top
+ *       done if element inside viewport
+ *  8. position element at button left hand side, aligns element top with button top
+ *       done if element inside viewport
+ *  9. position element inside viewport
+ *     1. position element at viewport bottom
+ *     2. position element at button right hand side
+ *        done if element inside viewport
+ *     3. position element at button left hand side
+ *       done if element inside viewport
+ *     4. position element at viewport right
+ * 10. done
+ *
+ */
+var tether = function tether(controlledBy, element) {
+  var controlRect = controlledBy.getBoundingClientRect();
+
+  // 1. will element height fit inside window viewport?
+
+  var _getWindowViewport2 = getWindowViewport(),
+      viewportWidth = _getWindowViewport2.viewportWidth,
+      viewportHeight = _getWindowViewport2.viewportHeight;
+
+  element.style.height = 'auto';
+  //element.style.overflowY = 'hidden';
+  if (element.offsetHeight > viewportHeight) {
+    element.style.height = viewportHeight + 'px';
+    element.style.overflowY = 'auto';
+  }
+
+  // 2. will element width fit inside window viewport?
+  element.style.width = 'auto';
+  if (element.offsetWidth > viewportWidth) {
+    element.style.width = viewportWidth + 'px';
+  }
+
+  var elementRect = element.getBoundingClientRect();
+
+  // element to control distance
+  var dy = controlRect.top - elementRect.top;
+  var dx = controlRect.left - elementRect.left;
+
+  // element rect, window coordinates relative to top,left of control
+  var top = elementRect.top + dy;
+  var left = elementRect.left + dx;
+  var bottom = top + elementRect.height;
+  var right = left + elementRect.width;
+
+  // Position relative to control
+  var ddy = dy;
+  var ddx = dx;
+
+  if (isRectInsideWindowViewport({
+    top: top + controlRect.height,
+    left: left,
+    bottom: bottom + controlRect.height,
+    right: right
+  })) {
+    // 3 position element below the control element, aligned to its left
+    ddy = controlRect.height + dy;
+    //console.log('***** 3');
+  } else if (isRectInsideWindowViewport({
+    top: top + controlRect.height,
+    left: left + controlRect.width - elementRect.width,
+    bottom: bottom + controlRect.height,
+    right: left + controlRect.width
+  })) {
+    // 4 position element below the control element, aligned to its right
+    ddy = controlRect.height + dy;
+    ddx = dx + controlRect.width - elementRect.width;
+    //console.log('***** 4');
+  } else if (isRectInsideWindowViewport({
+    top: top - elementRect.height,
+    left: left,
+    bottom: bottom - elementRect.height,
+    right: right
+  })) {
+    // 5. position element above the control element, aligned to its left.
+    ddy = dy - elementRect.height;
+    //console.log('***** 5');
+  } else if (isRectInsideWindowViewport({
+    top: top - elementRect.height,
+    left: left + controlRect.width - elementRect.width,
+    bottom: bottom - elementRect.height,
+    right: left + controlRect.width
+  })) {
+    // 6. position element above the control element, aligned to its right.
+    ddy = dy - elementRect.height;
+    ddx = dx + controlRect.width - elementRect.width;
+    //console.log('***** 6');
+  } else if (isRectInsideWindowViewport({
+    top: top,
+    left: left + controlRect.width,
+    bottom: bottom,
+    right: right + controlRect.width
+  })) {
+    // 7. position element at button right hand side
+    ddx = controlRect.width + dx;
+    //console.log('***** 7');
+  } else if (isRectInsideWindowViewport({
+    top: top,
+    left: left - controlRect.width,
+    bottom: bottom,
+    right: right - controlRect.width
+  })) {
+    // 8. position element at button left hand side
+    ddx = dx - elementRect.width;
+    //console.log('***** 8');
+  } else {
+    // 9. position element inside viewport, near controlrect if possible
+    //console.log('***** 9');
+
+    // 9.1 position element near controlrect bottom
+    ddy = dy - bottom + viewportHeight;
+    if (top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {
+      ddy = controlRect.height + dy;
+    } else if (top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {
+      ddy = dy - elementRect.height;
+    }
+
+    if (left + elementRect.width + controlRect.width <= viewportWidth) {
+      // 9.2 Position element at button right hand side
+      ddx = controlRect.width + dx;
+      //console.log('***** 9.2');
+    } else if (left - elementRect.width >= 0) {
+      // 9.3 Position element at button left hand side
+      ddx = dx - elementRect.width;
+      //console.log('***** 9.3');
+    } else {
+      // 9.4 position element at (near) viewport right
+      var r = left + elementRect.width - viewportWidth;
+      ddx = dx - r;
+      //console.log('***** 9.4');
+    }
+  }
+
+  // 10. done
+  element.style.top = element.offsetTop + ddy + 'px';
+  element.style.left = element.offsetLeft + ddx + 'px';
+  //console.log('***** 10. done');
+};
+
+/**
+ * Check if the given element can receive focus
+ * @param {HTMLElement} element the element to check
+ * @return {boolean} true if the element is focusable, otherwise false
+ */
+var isFocusable = function isFocusable(element) {
+  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js
+  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus
+
+  if (element.hasAttribute('tabindex')) {
+    var tabindex = element.getAttribute('tabindex');
+    if (!(0, _isNan2.default)(tabindex)) {
+      return parseInt(tabindex) > -1;
+    }
+  }
+
+  if (element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') !== 'false') {
+    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable
+    return true;
+  }
+
+  // natively focusable, but only when enabled
+  var selector = /input|select|textarea|button|details/i;
+  var name = element.nodeName;
+  if (selector.test(name)) {
+    return element.type.toLowerCase() !== 'hidden' && !element.disabled;
+  }
+
+  // anchors and area must have an href
+  if (name === 'A' || name === 'AREA') {
+    return !!element.href;
+  }
+
+  if (name === 'IFRAME') {
+    // Check visible iframe
+    var cs = window.getComputedStyle(element);
+    return cs.getPropertyValue('display').toLowerCase() !== 'none';
+  }
+
+  return false;
+};
+
+/**
+ * Get a list of offset parents for given element
+ * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript
+ * @param el the element
+ * @return {Array} a list of offset parents
+ */
+/*
+const offsetParents = (el) => {
+  const elements = [];
+  for (; el; el = el.offsetParent) {
+    elements.unshift(el);
+  }
+  if(!elements.find(e => e === document.body)) {
+    elements.unshift(document.body);
+  }
+  return elements;
+};
+*/
+
+/**
+ * Finds the common offset ancestor of two DOM nodes
+ * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript
+ * @see https://gist.github.com/benpickles/4059636
+ * @param a
+ * @param b
+ * @return {Element} The common offset ancestor of a and b
+ */
+/*
+const commonOffsetAncestor = (a, b) => {
+  const parentsA = offsetParents(a);
+  const parentsB = offsetParents(b);
+
+  for (let i = 0; i < parentsA.length; i++) {
+    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];
+  }
+};
+*/
+
+/**
+ * Calculate position relative to a target element
+ * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively
+ * @param target
+ * @param el
+ * @return {{top: number, left: number}}
+ */
+/*
+const calcPositionRelativeToTarget = (target, el) => {
+  let top = 0;
+  let left = 0;
+
+  while(el) {
+    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;
+    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;
+    el = el.offsetParent;
+
+    if(el === target) {
+      break;
+    }
+  }
+  return { top: top, left: left };
+};
+*/
+
+exports.getWindowViewport = getWindowViewport;
+exports.getParentElements = getParentElements;
+exports.getScrollParents = getScrollParents;
+exports.isFocusable = isFocusable;
+exports.isRectInsideWindowViewport = isRectInsideWindowViewport;
+exports.moveElements = moveElements;
+exports.removeChildElements = removeChildElements;
+exports.tether = tether;
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/easing.js b/node_modules/mdl-ext/es/utils/easing.js
new file mode 100644
index 0000000..95da687
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/easing.js
@@ -0,0 +1,22 @@
+'use strict';
+
+// See: http://robertpenner.com/easing/
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var easeInOutQuad = function easeInOutQuad(t, b, c, d) {
+  t /= d / 2;
+  if (t < 1) return c / 2 * t * t + b;
+  t--;
+  return -c / 2 * (t * (t - 2) - 1) + b;
+};
+
+var inOutQuintic = function inOutQuintic(t, b, c, d) {
+  var ts = (t /= d) * t;
+  var tc = ts * t;
+  return b + c * (6 * tc * ts + -15 * ts * ts + 10 * tc);
+};
+
+exports.easeInOutQuad = easeInOutQuad;
+exports.inOutQuintic = inOutQuintic;
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/full-throttle.js b/node_modules/mdl-ext/es/utils/full-throttle.js
new file mode 100644
index 0000000..da32123
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/full-throttle.js
@@ -0,0 +1,52 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _apply = require("babel-runtime/core-js/reflect/apply");
+
+var _apply2 = _interopRequireDefault(_apply);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Since some events can fire at a high rate, the event handler should be limited to execute computationally
+ * expensive operations, such as DOM modifications, inside a single rendered frame.
+ * When listening to e.g. scroll and resize events, the browser tends to fire off more events per
+ * second than are actually useful. For instance, if your event listener sets some element positions, then it
+ * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of
+ * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that
+ * it runs immediately prior to the browser rendering the updated layout to the screen.
+ * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page
+ * is rendered to the screen.
+ * *
+ * @param callback the function to throttle
+ * @param context  optional context of this, default to global
+ * @return {function(...[*])}
+ */
+var fullThrottle = function fullThrottle(callback, context) {
+
+  if (!context) {
+    context = undefined || window;
+  }
+
+  var throttling = false;
+
+  return function () {
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    if (!throttling) {
+      throttling = true;
+      window.requestAnimationFrame(function () {
+        throttling = false;
+        return (0, _apply2.default)(callback, context, args);
+      });
+    }
+  };
+};
+
+exports.default = fullThrottle;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/index.js b/node_modules/mdl-ext/es/utils/index.js
new file mode 100644
index 0000000..4ef9db4
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/index.js
@@ -0,0 +1,15 @@
+'use strict';
+
+require('./constants');
+
+require('./dom-utils');
+
+require('./string-utils');
+
+require('./json-utils');
+
+require('./full-throttle');
+
+require('./easing');
+
+require('./interval-function');
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/interval-function.js b/node_modules/mdl-ext/es/utils/interval-function.js
new file mode 100644
index 0000000..abe7f9b
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/interval-function.js
@@ -0,0 +1,96 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var MIN_INERVAL = 1000 / 60;
+
+/**
+ * Trigger a callback at a given interval
+ * @param interval defaults to 1000/60 ms
+ * @return {function()} reference to start, stop, immediate and started
+ */
+
+var intervalFunction = function intervalFunction() {
+  var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : MIN_INERVAL;
+
+
+  var lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;
+  var cb = undefined;
+  var next = null;
+  var timeElapsed = 0;
+
+  var execute = function execute() {
+    var f = cb(timeElapsed);
+    if (!f) {
+      cancel();
+    }
+  };
+
+  var cancel = function cancel() {
+    if (next) {
+      window.cancelAnimationFrame(next);
+    }
+    next = null;
+    timeElapsed = 0;
+  };
+
+  var _start = function _start() {
+    var timeStart = Date.now();
+
+    var loop = function loop(now) {
+      if (next) {
+        next = window.requestAnimationFrame(function () {
+          return loop(Date.now());
+        });
+
+        timeElapsed += now - timeStart;
+
+        if (timeElapsed >= lapse) {
+          execute();
+          if ((timeElapsed -= lapse) > lapse) {
+            // time elapsed - interval_ > interval_ , indicates inactivity
+            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on
+            timeElapsed = 0;
+          }
+        }
+        timeStart = now;
+      }
+    };
+
+    next = 1; // a truthy value for first loop
+    loop(timeStart);
+  };
+
+  return {
+    get started() {
+      return next != null;
+    },
+    get interval() {
+      return lapse;
+    },
+    set interval(value) {
+      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;
+    },
+    start: function start(callback) {
+      if (typeof callback !== 'function') {
+        throw new TypeError('callback parameter must be a function');
+      }
+      cb = callback;
+      _start();
+    },
+    immediate: function immediate() {
+      if (!cb) {
+        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');
+      }
+      execute();
+    },
+
+    stop: function stop() {
+      return cancel();
+    }
+  };
+};
+
+exports.default = intervalFunction;
+module.exports = exports['default'];
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/json-utils.js b/node_modules/mdl-ext/es/utils/json-utils.js
new file mode 100644
index 0000000..50be006
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/json-utils.js
@@ -0,0 +1,31 @@
+'use strict';
+
+/**
+ * Converts a JSON string to object
+ * @param jsonString
+ * @param source
+ */
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.jsonStringToObject = undefined;
+
+var _assign = require('babel-runtime/core-js/object/assign');
+
+var _assign2 = _interopRequireDefault(_assign);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var jsonStringToObject = function jsonStringToObject(jsonString) {
+  var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+  var s = jsonString.replace(/'/g, '"');
+  try {
+    return (0, _assign2.default)(source, JSON.parse(s));
+  } catch (e) {
+    throw new Error('Failed to parse json string: ' + s + '. Error: ' + e.message);
+  }
+};
+
+exports.jsonStringToObject = jsonStringToObject;
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/resize-observer.js b/node_modules/mdl-ext/es/utils/resize-observer.js
new file mode 100644
index 0000000..37f0e0d
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/resize-observer.js
@@ -0,0 +1,377 @@
+'use strict';
+
+var _getIterator2 = require('babel-runtime/core-js/get-iterator');
+
+var _getIterator3 = _interopRequireDefault(_getIterator2);
+
+var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = require('babel-runtime/helpers/createClass');
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _intervalFunction = require('./interval-function');
+
+var _intervalFunction2 = _interopRequireDefault(_intervalFunction);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+(function (window, document) {
+  'use strict';
+
+  if (typeof window.ResizeObserver !== 'undefined') {
+    return;
+  }
+
+  document.resizeObservers = [];
+
+  /**
+   * The content rect is defined in section 2.3 ResizeObserverEntry of the spec
+   * @param target the element to calculate the content rect for
+   * @return {{top: (Number|number), left: (Number|number), width: number, height: number}}
+   *
+   * Note:
+   * Avoid using margins on the observed element. The calculation can return incorrect values when margins are involved.
+   *
+   * The following CSS will report incorrect width (Chrome OSX):
+   *
+   * <div id="outer" style="width: 300px; height:300px; background-color: green;overflow:auto;">
+   *   <div id="observed" style="width: 400px; height:400px; background-color: yellow; margin:30px; border: 20px solid red; padding:10px;">
+   *   </div>
+   * </div>
+   *
+   * The calculated width is 280. The actual (correct) width is 340 since Chrome clips the margin.
+   *
+   * Use an outer container if you really need a "margin":
+   *
+   * <div id="outer" style="width: 300px; height:300px; background-color: green;overflow:auto; padding:30px;">
+   *   <div id="observed" style="width: 400px; height:400px; background-color: yellow; margin: 0; border: 20px solid red; padding:10px;">
+   *   </div>
+   * </div>
+   *
+   * A more detailed explanation can be fund here:
+   * http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively
+   */
+  var getContentRect = function getContentRect(target) {
+    var cs = window.getComputedStyle(target);
+    var r = target.getBoundingClientRect();
+    var top = parseFloat(cs.paddingTop) || 0;
+    var left = parseFloat(cs.paddingLeft) || 0;
+    var width = r.width - ((parseFloat(cs.marginLeft) || 0) + (parseFloat(cs.marginRight) || 0) + (parseFloat(cs.borderLeftWidth) || 0) + (parseFloat(cs.borderRightWidth) || 0) + left + (parseFloat(cs.paddingRight) || 0));
+    var height = r.height - ((parseFloat(cs.marginTop) || 0) + (parseFloat(cs.marginBottom) || 0) + (parseFloat(cs.borderTopWidth) || 0) + (parseFloat(cs.borderBottomWidth) || 0) + top + (parseFloat(cs.paddingBottom) || 0));
+    return { width: width, height: height, top: top, left: left };
+  };
+
+  var dimensionHasChanged = function dimensionHasChanged(target, lastWidth, lastHeight) {
+    var _getContentRect = getContentRect(target),
+        width = _getContentRect.width,
+        height = _getContentRect.height;
+
+    return width !== lastWidth || height !== lastHeight;
+  };
+
+  /**
+   * ResizeObservation holds observation information for a single Element.
+   * @param target
+   * @return {{target: *, broadcastWidth, broadcastHeight, isOrphan: (function()), isActive: (function())}}
+   * @constructor
+   */
+  var ResizeObservation = function ResizeObservation(target) {
+    var _getContentRect2 = getContentRect(target),
+        width = _getContentRect2.width,
+        height = _getContentRect2.height;
+
+    return {
+      target: target,
+      broadcastWidth: width,
+      broadcastHeight: height,
+
+      isOrphan: function isOrphan() {
+        return !this.target || !this.target.parentNode;
+      },
+      isActive: function isActive() {
+        return dimensionHasChanged(this.target, this.broadcastWidth, this.broadcastHeight);
+      }
+    };
+  };
+
+  /**
+   * A snapshot of the observed element
+   * @param target
+   * @param rect
+   * @return {{target: *, contentRect: *}}
+   * @constructor
+   */
+  var ResizeObserverEntry = function ResizeObserverEntry(target, rect) {
+    return {
+      target: target,
+      contentRect: rect
+    };
+  };
+
+  /**
+   * The ResizeObserver is used to observe changes to Element's content rect.
+   */
+
+  var ResizeObserver = function () {
+
+    /**
+     * Constructor for instantiating new Resize observers.
+     * @param callback void (sequence<ResizeObserverEntry> entries). The function which will be called on each resize.
+     * @throws {TypeError}
+     */
+    function ResizeObserver(callback) {
+      (0, _classCallCheck3.default)(this, ResizeObserver);
+
+
+      if (typeof callback !== 'function') {
+        throw new TypeError('callback parameter must be a function');
+      }
+
+      this.callback_ = callback;
+      this.observationTargets_ = [];
+      this.activeTargets_ = [];
+
+      document.resizeObservers.push(this);
+    }
+
+    /**
+     * A list of ResizeObservations. It represents all Elements being observed.
+     *
+     * @return {Array}
+     */
+
+
+    (0, _createClass3.default)(ResizeObserver, [{
+      key: 'observe',
+
+
+      /**
+       * Adds target to the list of observed elements.
+       * @param {HTMLElement} target The target to observe
+       */
+      value: function observe(target) {
+        if (target) {
+          if (!(target instanceof HTMLElement)) {
+            throw new TypeError('target parameter must be an HTMLElement');
+          }
+          if (!this.observationTargets_.find(function (t) {
+            return t.target === target;
+          })) {
+            this.observationTargets_.push(ResizeObservation(target));
+            resizeController.start();
+          }
+        }
+      }
+
+      /**
+       * Removes target from the list of observed elements.
+       * @param target The target to remove
+       */
+
+    }, {
+      key: 'unobserve',
+      value: function unobserve(target) {
+        var i = this.observationTargets_.findIndex(function (t) {
+          return t.target === target;
+        });
+        if (i > -1) {
+          this.observationTargets_.splice(i, 1);
+        }
+      }
+
+      /**
+       * Stops the ResizeObserver instance from receiving notifications of resize changes.
+       * Until the observe() method is used again, observer's callback will not be invoked.
+       */
+
+    }, {
+      key: 'disconnect',
+      value: function disconnect() {
+        this.observationTargets_ = [];
+        this.activeTargets_ = [];
+      }
+
+      /**
+       * Removes the ResizeObserver from the list of observers
+       */
+
+    }, {
+      key: 'destroy',
+      value: function destroy() {
+        var _this = this;
+
+        this.disconnect();
+        var i = document.resizeObservers.findIndex(function (o) {
+          return o === _this;
+        });
+        if (i > -1) {
+          document.resizeObservers.splice(i, 1);
+        }
+      }
+    }, {
+      key: 'deleteOrphansAndPopulateActiveTargets_',
+      value: function deleteOrphansAndPopulateActiveTargets_() {
+
+        // Works, but two iterations
+        //this.observationTargets_ = this.observationTargets_.filter( resizeObervation => !resizeObervation.isOrphan());
+        //this.activeTargets_ = this.observationTargets_.filter( resizeObervation => resizeObervation.isActive());
+
+        // Same result as above, one iteration
+        /*
+        this.activeTargets_ = [];
+        let n = this.observationTargets_.length-1;
+        while(n >= 0) {
+          if(this.observationTargets_[n].isOrphan()) {
+            this.observationTargets_.splice(n, 1);
+          }
+          else if(this.observationTargets_[n].isActive()) {
+            this.activeTargets_.push(this.observationTargets_[n]);
+          }
+          n -= 1;
+        }
+        */
+
+        // Same result as above - but reduce is cooler :-)
+        this.activeTargets_ = this.observationTargets_.reduceRight(function (prev, resizeObservation, index, arr) {
+          if (resizeObservation.isOrphan()) {
+            arr.splice(index, 1);
+          } else if (resizeObservation.isActive()) {
+            prev.push(resizeObservation);
+          }
+          return prev;
+        }, []);
+      }
+    }, {
+      key: 'broadcast_',
+      value: function broadcast_() {
+        this.deleteOrphansAndPopulateActiveTargets_();
+        if (this.activeTargets_.length > 0) {
+          var entries = [];
+          var _iteratorNormalCompletion = true;
+          var _didIteratorError = false;
+          var _iteratorError = undefined;
+
+          try {
+            for (var _iterator = (0, _getIterator3.default)(this.activeTargets_), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+              var resizeObservation = _step.value;
+
+              var rect = getContentRect(resizeObservation.target);
+              resizeObservation.broadcastWidth = rect.width;
+              resizeObservation.broadcastHeight = rect.height;
+              entries.push(ResizeObserverEntry(resizeObservation.target, rect));
+            }
+          } catch (err) {
+            _didIteratorError = true;
+            _iteratorError = err;
+          } finally {
+            try {
+              if (!_iteratorNormalCompletion && _iterator.return) {
+                _iterator.return();
+              }
+            } finally {
+              if (_didIteratorError) {
+                throw _iteratorError;
+              }
+            }
+          }
+
+          this.callback_(entries);
+          this.activeTargets_ = [];
+        }
+      }
+    }, {
+      key: 'observationTargets',
+      get: function get() {
+        return this.observationTargets_;
+      }
+
+      /**
+       *  A list of ResizeObservations. It represents all Elements whose size has
+       *  changed since last observation broadcast that are eligible for broadcast.
+       *
+       * @return {Array}
+       */
+
+    }, {
+      key: 'activeTargets',
+      get: function get() {
+        return this.activeTargets_;
+      }
+    }]);
+    return ResizeObserver;
+  }();
+
+  //let interval = require('./interval-function');
+
+  /**
+   * Broadcasts Element.resize events
+   * @return {{start: (function()), stop: (function())}}
+   * @constructor
+   */
+
+
+  var ResizeController = function ResizeController() {
+
+    var shouldStop = function shouldStop() {
+      return document.resizeObservers.findIndex(function (resizeObserver) {
+        return resizeObserver.observationTargets.length > 0;
+      }) > -1;
+    };
+
+    var execute = function execute() {
+      //console.log('***** Execute');
+      var _iteratorNormalCompletion2 = true;
+      var _didIteratorError2 = false;
+      var _iteratorError2 = undefined;
+
+      try {
+        for (var _iterator2 = (0, _getIterator3.default)(document.resizeObservers), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+          var resizeObserver = _step2.value;
+
+          resizeObserver.broadcast_();
+        }
+      } catch (err) {
+        _didIteratorError2 = true;
+        _iteratorError2 = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion2 && _iterator2.return) {
+            _iterator2.return();
+          }
+        } finally {
+          if (_didIteratorError2) {
+            throw _iteratorError2;
+          }
+        }
+      }
+
+      return shouldStop();
+    };
+
+    var interval = (0, _intervalFunction2.default)(200);
+
+    return {
+      start: function start() {
+        if (!interval.started) {
+          //console.log('***** Start poll');
+          interval.start(execute);
+        }
+      }
+    };
+  };
+
+  window.ResizeObserver = ResizeObserver;
+
+  var resizeController = ResizeController();
+  //console.log('***** ResizeObserver ready');
+})(window, document);
+/**
+ * An API for observing changes to Element’s size.
+ *
+ * @See https://wicg.github.io/ResizeObserver/
+ * @ee https://github.com/pelotoncycle/resize-observer
+ *
+ */
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/string-utils.js b/node_modules/mdl-ext/es/utils/string-utils.js
new file mode 100644
index 0000000..ab0045a
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/string-utils.js
@@ -0,0 +1,114 @@
+'use strict';
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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 javascript utility for conditionally creating a list of strings.
+ * The function takes any number of arguments which can be a string or object.
+ * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames
+ *
+ * @param  {*} args the strings and/or objects to
+ * @return {Array} a list of strings
+ * @example
+ * // Returns ['foo', 'bar', 'baz', 'quux']
+ * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });
+ * @example see the tests for more examples
+ */
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.stringList = exports.randomString = exports.joinStrings = undefined;
+
+var _keys = require('babel-runtime/core-js/object/keys');
+
+var _keys2 = _interopRequireDefault(_keys);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var stringList = function stringList() {
+  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  var isString = function isString(str) {
+    return str != null && typeof str === 'string';
+  };
+
+  var flatten = function flatten(list) {
+    return list.reduce(function (a, b) {
+      return a.concat(Array.isArray(b) ? flatten(b) : b);
+    }, []);
+  };
+
+  var objectToStrings = function objectToStrings(arg) {
+    return (0, _keys2.default)(arg).filter(function (key) {
+      return arg[key];
+    }).map(function (key) {
+      return key;
+    });
+  };
+
+  return args.filter(function (arg) {
+    return !!arg;
+  }).map(function (arg) {
+    return isString(arg) ? arg : objectToStrings(arg);
+  }).reduce(function (result, arg) {
+    return result.concat(Array.isArray(arg) ? flatten(arg) : arg);
+  }, []);
+};
+
+/**
+ * A simple javascript utility for conditionally joining strings together.
+ * The function takes a delimiter string and any number of arguments which can be a string or object.
+ *
+ * @param delimiter delimiter to separate joined strings
+ * @param  {*} args the strings and/or objects to join
+ * @return {String} the joined strings
+ * @example
+ * // Returns 'foo, bar, baz, quux'
+ * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });
+ * @example see the tests for more examples
+ */
+var joinStrings = function joinStrings() {
+  for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+    args[_key2 - 1] = arguments[_key2];
+  }
+
+  var delimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ' ';
+  return stringList.apply(undefined, args).join(delimiter);
+};
+
+/**
+ * Generates a random string with a given length
+ * @param n {Integer} length of generated string
+ * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
+ * @return {String} the random string
+ * @example
+ * // Returns e.g. 'pd781w0y'
+ * randomString(8);
+ * @example see the tests for more examples
+ */
+var randomString = function randomString() {
+  var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12;
+  return Array(n + 1).join((Math.random().toString(36) + '00000000000000000').slice(2, 18)).slice(0, n);
+};
+
+exports.joinStrings = joinStrings;
+exports.randomString = randomString;
+exports.stringList = stringList;
\ No newline at end of file
diff --git a/node_modules/mdl-ext/es/utils/throttle-function.js b/node_modules/mdl-ext/es/utils/throttle-function.js
new file mode 100644
index 0000000..03a5cea
--- /dev/null
+++ b/node_modules/mdl-ext/es/utils/throttle-function.js
@@ -0,0 +1,84 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _apply = require("babel-runtime/core-js/reflect/apply");
+
+var _apply2 = _interopRequireDefault(_apply);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Throttling enforces a maximum number of times a function can be called over time.
+ *
+ * @param callback the function to throttle
+ * @param delay optional delay, default to 1000/60ms
+ * @param context optional context of this, default to global window
+ * @returns {Function} reference to immediate and cancel functions
+ * @see https://developer.mozilla.org/en-US/docs/Web/Events/resize#Example
+ * @see https://gist.github.com/yoavniran/d1d33f278bb7744d55c3
+ * @see https://github.com/pelotoncycle/frame-throttle
+ * @see https://github.com/jeromedecoster/raf-funcs
+ */
+var MIN_DELAY = 1000 / 60;
+
+var throttleFunction = function throttleFunction(callback) {
+  var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : MIN_DELAY;
+  var context = arguments[2];
+
+
+  if (delay < MIN_DELAY) {
+    delay = MIN_DELAY;
+  }
+
+  if (!context) {
+    context = undefined || window;
+  }
+
+  var next = null;
+  var start = 0;
+
+  return function () {
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    var _cancel = function _cancel() {
+      if (next !== null) {
+        window.cancelAnimationFrame(next);
+        next = null;
+      }
+    };
+
+    var execute = function execute() {
+      _cancel();
+      return (0, _apply2.default)(callback, context, args);
+    };
+
+    var later = function later() {
+      if (delay - (Date.now() - start) <= 0) {
+        return execute();
+      }
+      next = window.requestAnimationFrame(later);
+    };
+
+    if (next === null) {
+      start = Date.now();
+      next = window.requestAnimationFrame(later);
+    }
+
+    return {
+      cancel: function cancel() {
+        return _cancel();
+      },
+      immediate: function immediate() {
+        return execute();
+      }
+    };
+  };
+};
+
+exports.default = throttleFunction;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext-eqjs.css b/node_modules/mdl-ext/lib/mdl-ext-eqjs.css
new file mode 100644
index 0000000..5cf9d7e
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext-eqjs.css
@@ -0,0 +1,5726 @@
+/**
+ * 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.
+*/
+
+/* ==========  COLORS  ========== */
+
+/**
+*
+* Material design color palettes.
+* @see http://www.google.com/design/spec/style/color.html
+*
+**/
+
+/**
+ * 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  ========== */
+
+/* colors.scss */
+
+/**
+ * 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.
+ */
+
+/* ==========  IMAGES  ========== */
+
+/* ==========  Color & Themes  ========== */
+
+/* ==========  Typography  ========== */
+
+/* ==========  Components  ========== */
+
+/* ==========  Standard Buttons  ========== */
+
+/* ==========  Icon Toggles  ========== */
+
+/* ==========  Radio Buttons  ========== */
+
+/* ==========  Ripple effect  ========== */
+
+/* ==========  Layout  ========== */
+
+/* ==========  Content Tabs  ========== */
+
+/* ==========  Checkboxes  ========== */
+
+/* ==========  Switches  ========== */
+
+/* ==========  Spinner  ========== */
+
+/* ==========  Text fields  ========== */
+
+/* ==========  Card  ========== */
+
+/* ==========  Sliders ========== */
+
+/* ========== Progress ========== */
+
+/* ==========  List ========== */
+
+/* ==========  Item ========== */
+
+/* ==========  Dropdown menu ========== */
+
+/* ==========  Tooltips  ========== */
+
+/* ==========  Footer  ========== */
+
+/* TEXTFIELD */
+
+/* SWITCH */
+
+/* SPINNER */
+
+/* RADIO */
+
+/* MENU */
+
+/* LIST */
+
+/* LAYOUT */
+
+/* ICON TOGGLE */
+
+/* FOOTER */
+
+/*mega-footer*/
+
+/*mini-footer*/
+
+/* CHECKBOX */
+
+/* CARD */
+
+/* Card dimensions */
+
+/* Cover image */
+
+/* BUTTON */
+
+/**
+ *
+ * Dimensions
+ *
+ */
+
+/* ANIMATION */
+
+/* PROGRESS */
+
+/* BADGE */
+
+/* SHADOWS */
+
+/* GRID */
+
+/* DATA TABLE */
+
+/* DIALOG */
+
+/* SNACKBAR */
+
+/* TOOLTIP */
+
+/* CHIP */
+
+/**
+ * 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 */
+
+/* Shadows */
+
+/* Animations */
+
+/* Dialog */
+
+/**
+ * Element Queries are a new way of writing CSS styles so the rules apply to individual elements
+ * on the page, instead of to the whole page as one document like in regular CSS Media Queries.
+ * This SASS file includes the eq.js, https://github.com/Snugug/eq.js, prolyfill which is an easy to use
+ * drop-in solution to JavaScript powered element queries. It works well with SASS,
+ * and element queries work without requireing a server to run.
+ *
+ * Feel fre to write your own element query stylesheet using one of the other libraries, e.g:
+ *   [EQCSS]               - (https://github.com/eqcss/eqcss)
+ *   [CSS Element Queries] - (https://github.com/marcj/css-element-queries)
+ *   [BoomQueries]         - (https://github.com/BoomTownROI/boomqueries)
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+.mdlext-aria-expanded-plus-minus {
+  font-family: inherit;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 24px;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-expanded-plus-minus::after {
+  content: "+";
+  margin-left: 0;
+}
+
+[aria-expanded='true'] > .mdlext-aria-expanded-plus-minus::after {
+  content: "-";
+  margin-left: 0;
+}
+
+.mdlext-aria-expanded-more-less {
+  font-family: "Material Icons";
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 24px;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-expanded-more-less::after {
+  content: "expand_more";
+  margin-left: 0;
+}
+
+[aria-expanded='true'] > .mdlext-aria-expanded-more-less::after {
+  content: "expand_less";
+  margin-left: 0;
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+.mdlext-layout__sticky-header {
+  position: absolute;
+  overflow: visible;
+  background: transparent linear-gradient(to bottom, #3f51b5 0, #3f51b5 100%);
+  transition: 0.1s ease-in-out;
+}
+
+.mdlext-layout__sticky-header.mdlext-is-scroll {
+  background: transparent linear-gradient(to bottom, rgba(63, 81, 181, 0.98) 100%, rgba(63, 81, 181, 0.95) 100%);
+}
+
+*:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__drawer-button {
+  visibility: hidden;
+}
+
+*:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__header-row {
+  padding-left: 16px;
+}
+
+*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header,
+.is-small-screen.has-drawer .mdlext-layout__sticky-header {
+  display: -ms-flexbox;
+  display: flex;
+}
+
+*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button,
+.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button {
+  visibility: visible;
+}
+
+*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row,
+.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row {
+  padding-left: 64px;
+}
+
+/**
+ * Copyright 2015 Google Inc. All Rights Reserved.
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * SASS based on css from Google Chrome Dialog polyfill, https://github.com/GoogleChrome/dialog-polyfill
+ * @include 'node_modules/dialog-polyfill/dialog-polyfill.css' before using this
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+dialog.mdlext-dialog {
+  position: absolute;
+  border: 0;
+  opacity: 0;
+  padding: 0;
+  background-color: transparent;
+}
+
+dialog.mdlext-dialog[open] {
+  animation: mdlext-open-dialog 0.5s 0.2s forwards;
+}
+
+dialog.mdlext-dialog[open]::-webkit-backdrop {
+  animation: mdlext-darken-backdrop 0.2s forwards;
+}
+
+dialog.mdlext-dialog[open]::backdrop {
+  animation: mdlext-darken-backdrop 0.2s forwards;
+}
+
+dialog.mdlext-dialog[open] + .backdrop {
+  animation: mdlext-darken-backdrop 0.2s forwards;
+}
+
+@keyframes mdlext-darken-backdrop {
+  to {
+    background: rgba(0, 0, 0, 0.86);
+  }
+}
+
+@keyframes mdlext-open-dialog {
+  to {
+    opacity: 1;
+  }
+}
+
+/**
+ * This code is modified from Material Design Lite _grid.sass,
+ * which is Licensed under the Apache License, Version 2.0
+ * 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.
+ *
+ */
+
+.mdlext-grid {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-flow: row wrap;
+      flex-flow: row wrap;
+  margin: 0 auto;
+  -ms-flex-align: stretch;
+      align-items: stretch;
+}
+
+.mdlext-grid.mdlext-grid--no-spacing {
+  padding: 0;
+}
+
+.mdlext-grid > .mdlext-cell {
+  box-sizing: border-box;
+}
+
+.mdlext-grid > .mdlext-cell--top {
+  -ms-flex-item-align: start;
+      align-self: flex-start;
+}
+
+.mdlext-grid > .mdlext-cell--middle {
+  -ms-flex-item-align: center;
+      -ms-grid-row-align: center;
+      align-self: center;
+}
+
+.mdlext-grid > .mdlext-cell--bottom {
+  -ms-flex-item-align: end;
+      align-self: flex-end;
+}
+
+.mdlext-grid > .mdlext-cell--stretch {
+  -ms-flex-item-align: stretch;
+      -ms-grid-row-align: stretch;
+      align-self: stretch;
+}
+
+.mdlext-grid .mdlext-grid--no-spacing > .mdlext-cell {
+  margin: 0;
+}
+
+.mdlext-grid > .mdlext-cell--order-1 {
+  -ms-flex-order: 1;
+      order: 1;
+}
+
+.mdlext-grid > .mdlext-cell--order-2 {
+  -ms-flex-order: 2;
+      order: 2;
+}
+
+.mdlext-grid > .mdlext-cell--order-3 {
+  -ms-flex-order: 3;
+      order: 3;
+}
+
+.mdlext-grid > .mdlext-cell--order-4 {
+  -ms-flex-order: 4;
+      order: 4;
+}
+
+.mdlext-grid > .mdlext-cell--order-5 {
+  -ms-flex-order: 5;
+      order: 5;
+}
+
+.mdlext-grid > .mdlext-cell--order-6 {
+  -ms-flex-order: 6;
+      order: 6;
+}
+
+.mdlext-grid > .mdlext-cell--order-7 {
+  -ms-flex-order: 7;
+      order: 7;
+}
+
+.mdlext-grid > .mdlext-cell--order-8 {
+  -ms-flex-order: 8;
+      order: 8;
+}
+
+.mdlext-grid > .mdlext-cell--order-9 {
+  -ms-flex-order: 9;
+      order: 9;
+}
+
+.mdlext-grid > .mdlext-cell--order-10 {
+  -ms-flex-order: 10;
+      order: 10;
+}
+
+.mdlext-grid > .mdlext-cell--order-11 {
+  -ms-flex-order: 11;
+      order: 11;
+}
+
+.mdlext-grid > .mdlext-cell--order-12 {
+  -ms-flex-order: 12;
+      order: 12;
+}
+
+.mdlext-grid:before {
+  display: none;
+  content: "grid_phone: 0, grid_tablet: 480, grid_desktop: 840";
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] {
+  padding: 8px;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell {
+  margin: 8px;
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--hide-phone {
+  display: none !important;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-1-phone.mdlext-cell--order-1-phone {
+  -ms-flex-order: 1;
+      order: 1;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-2-phone.mdlext-cell--order-2-phone {
+  -ms-flex-order: 2;
+      order: 2;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-3-phone.mdlext-cell--order-3-phone {
+  -ms-flex-order: 3;
+      order: 3;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-4-phone.mdlext-cell--order-4-phone {
+  -ms-flex-order: 4;
+      order: 4;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-5-phone.mdlext-cell--order-5-phone {
+  -ms-flex-order: 5;
+      order: 5;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-6-phone.mdlext-cell--order-6-phone {
+  -ms-flex-order: 6;
+      order: 6;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-7-phone.mdlext-cell--order-7-phone {
+  -ms-flex-order: 7;
+      order: 7;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-8-phone.mdlext-cell--order-8-phone {
+  -ms-flex-order: 8;
+      order: 8;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-9-phone.mdlext-cell--order-9-phone {
+  -ms-flex-order: 9;
+      order: 9;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-10-phone.mdlext-cell--order-10-phone {
+  -ms-flex-order: 10;
+      order: 10;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-11-phone.mdlext-cell--order-11-phone {
+  -ms-flex-order: 11;
+      order: 11;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--order-12-phone.mdlext-cell--order-12-phone {
+  -ms-flex-order: 12;
+      order: 12;
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-col-phone.mdlext-cell--1-col-phone {
+  width: calc(25% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-col-phone.mdlext-cell--2-col-phone {
+  width: calc(50% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-col-phone.mdlext-cell--3-col-phone {
+  width: calc(75% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--4-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--4-col-phone.mdlext-cell--4-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--5-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--5-col-phone.mdlext-cell--5-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--6-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--6-col-phone.mdlext-cell--6-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--7-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--7-col-phone.mdlext-cell--7-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--8-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--8-col-phone.mdlext-cell--8-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--9-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--9-col-phone.mdlext-cell--9-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--10-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--10-col-phone.mdlext-cell--10-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--11-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--11-col-phone.mdlext-cell--11-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--12-col,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--12-col-phone.mdlext-cell--12-col-phone {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-offset,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone {
+  margin-left: calc(25% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-offset,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone {
+  margin-left: calc(50% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-offset,
+.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone {
+  margin-left: calc(75% + 8px);
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] {
+  padding: 0;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell {
+  margin: 0;
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-col-phone.mdlext-cell--1-col-phone {
+  width: 25%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-col-phone.mdlext-cell--2-col-phone {
+  width: 50%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-col-phone.mdlext-cell--3-col-phone {
+  width: 75%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--4-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--4-col-phone.mdlext-cell--4-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--5-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--5-col-phone.mdlext-cell--5-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--6-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--6-col-phone.mdlext-cell--6-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--7-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--7-col-phone.mdlext-cell--7-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--8-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--8-col-phone.mdlext-cell--8-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--9-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--9-col-phone.mdlext-cell--9-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--10-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--10-col-phone.mdlext-cell--10-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--11-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--11-col-phone.mdlext-cell--11-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--12-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--12-col-phone.mdlext-cell--12-col-phone {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone {
+  margin-left: 25%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone {
+  margin-left: 50%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_phone"] > .mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone {
+  margin-left: 75%;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] {
+  padding: 8px;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell {
+  margin: 8px;
+  width: calc(50% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--hide-tablet {
+  display: none !important;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-1-tablet.mdlext-cell--order-1-tablet {
+  -ms-flex-order: 1;
+      order: 1;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-2-tablet.mdlext-cell--order-2-tablet {
+  -ms-flex-order: 2;
+      order: 2;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-3-tablet.mdlext-cell--order-3-tablet {
+  -ms-flex-order: 3;
+      order: 3;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-4-tablet.mdlext-cell--order-4-tablet {
+  -ms-flex-order: 4;
+      order: 4;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-5-tablet.mdlext-cell--order-5-tablet {
+  -ms-flex-order: 5;
+      order: 5;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-6-tablet.mdlext-cell--order-6-tablet {
+  -ms-flex-order: 6;
+      order: 6;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-7-tablet.mdlext-cell--order-7-tablet {
+  -ms-flex-order: 7;
+      order: 7;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-8-tablet.mdlext-cell--order-8-tablet {
+  -ms-flex-order: 8;
+      order: 8;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-9-tablet.mdlext-cell--order-9-tablet {
+  -ms-flex-order: 9;
+      order: 9;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-10-tablet.mdlext-cell--order-10-tablet {
+  -ms-flex-order: 10;
+      order: 10;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-11-tablet.mdlext-cell--order-11-tablet {
+  -ms-flex-order: 11;
+      order: 11;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--order-12-tablet.mdlext-cell--order-12-tablet {
+  -ms-flex-order: 12;
+      order: 12;
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet {
+  width: calc(12.5% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet {
+  width: calc(25% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet {
+  width: calc(37.5% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet {
+  width: calc(50% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet {
+  width: calc(62.5% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet {
+  width: calc(75% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet {
+  width: calc(87.5% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--8-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--9-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--10-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--11-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--12-col,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-offset,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet {
+  margin-left: calc(12.5% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-offset,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet {
+  margin-left: calc(25% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-offset,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet {
+  margin-left: calc(37.5% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-offset,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet {
+  margin-left: calc(50% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-offset,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet {
+  margin-left: calc(62.5% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-offset,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet {
+  margin-left: calc(75% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-offset,
+.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet {
+  margin-left: calc(87.5% + 8px);
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] {
+  padding: 0;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell {
+  margin: 0;
+  width: 50%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet {
+  width: 12.5%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet {
+  width: 25%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet {
+  width: 37.5%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet {
+  width: 50%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet {
+  width: 62.5%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet {
+  width: 75%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet {
+  width: 87.5%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--8-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--9-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--10-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--11-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--12-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet {
+  margin-left: 12.5%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet {
+  margin-left: 25%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet {
+  margin-left: 37.5%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet {
+  margin-left: 50%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet {
+  margin-left: 62.5%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet {
+  margin-left: 75%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_tablet"] > .mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet {
+  margin-left: 87.5%;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] {
+  padding: 8px;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell {
+  margin: 8px;
+  width: calc(33.33333% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--hide-desktop {
+  display: none !important;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-1-desktop.mdlext-cell--order-1-desktop {
+  -ms-flex-order: 1;
+      order: 1;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-2-desktop.mdlext-cell--order-2-desktop {
+  -ms-flex-order: 2;
+      order: 2;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-3-desktop.mdlext-cell--order-3-desktop {
+  -ms-flex-order: 3;
+      order: 3;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-4-desktop.mdlext-cell--order-4-desktop {
+  -ms-flex-order: 4;
+      order: 4;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-5-desktop.mdlext-cell--order-5-desktop {
+  -ms-flex-order: 5;
+      order: 5;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-6-desktop.mdlext-cell--order-6-desktop {
+  -ms-flex-order: 6;
+      order: 6;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-7-desktop.mdlext-cell--order-7-desktop {
+  -ms-flex-order: 7;
+      order: 7;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-8-desktop.mdlext-cell--order-8-desktop {
+  -ms-flex-order: 8;
+      order: 8;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-9-desktop.mdlext-cell--order-9-desktop {
+  -ms-flex-order: 9;
+      order: 9;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-10-desktop.mdlext-cell--order-10-desktop {
+  -ms-flex-order: 10;
+      order: 10;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-11-desktop.mdlext-cell--order-11-desktop {
+  -ms-flex-order: 11;
+      order: 11;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--order-12-desktop.mdlext-cell--order-12-desktop {
+  -ms-flex-order: 12;
+      order: 12;
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop {
+  width: calc(8.33333% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop {
+  width: calc(16.66667% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop {
+  width: calc(25% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop {
+  width: calc(33.33333% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop {
+  width: calc(41.66667% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop {
+  width: calc(50% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop {
+  width: calc(58.33333% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop {
+  width: calc(66.66667% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop {
+  width: calc(75% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop {
+  width: calc(83.33333% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop {
+  width: calc(91.66667% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--12-col,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop {
+  width: calc(100% - 16px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop {
+  margin-left: calc(8.33333% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop {
+  margin-left: calc(16.66667% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop {
+  margin-left: calc(25% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop {
+  margin-left: calc(33.33333% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop {
+  margin-left: calc(41.66667% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop {
+  margin-left: calc(50% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop {
+  margin-left: calc(58.33333% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop {
+  margin-left: calc(66.66667% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop {
+  margin-left: calc(75% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop {
+  margin-left: calc(83.33333% + 8px);
+}
+
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-offset,
+.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop {
+  margin-left: calc(91.66667% + 8px);
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] {
+  padding: 0;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell {
+  margin: 0;
+  width: 33.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop {
+  width: 8.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop {
+  width: 16.66667%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop {
+  width: 25%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop {
+  width: 33.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop {
+  width: 41.66667%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop {
+  width: 50%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop {
+  width: 58.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop {
+  width: 66.66667%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop {
+  width: 75%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop {
+  width: 83.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop {
+  width: 91.66667%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--12-col,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop {
+  width: 100%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop {
+  margin-left: 8.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop {
+  margin-left: 16.66667%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop {
+  margin-left: 25%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop {
+  margin-left: 33.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop {
+  margin-left: 41.66667%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop {
+  margin-left: 50%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop {
+  margin-left: 58.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop {
+  margin-left: 66.66667%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop {
+  margin-left: 75%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop {
+  margin-left: 83.33333%;
+}
+
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-offset,
+.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$="grid_desktop"] > .mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop {
+  margin-left: 91.66667%;
+}
+
+html:before {
+  display: none;
+  content: ".mdlext-grid";
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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 lightboard is a translucent surface illuminated from behind, used for situations
+ * where a shape laid upon the surface needs to be seen with high contrast. In the "old days" of photography
+ * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox
+ * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+ul.mdlext-lightboard {
+  list-style: none;
+}
+
+.mdlext-lightboard {
+  box-sizing: border-box;
+  margin: 0 auto;
+  padding: 0;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-flow: row wrap;
+      flex-flow: row wrap;
+  -ms-flex-align: stretch;
+      align-items: stretch;
+}
+
+.mdlext-lightboard *,
+.mdlext-lightboard *::before,
+.mdlext-lightboard *::after,
+.mdlext-lightboard input[type="search"] {
+  box-sizing: border-box;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide {
+  background-color: #F8F8F8;
+  border: 1px solid #D8D8D8;
+  border-radius: 5px;
+  box-shadow: 2px 2px 6px -1px rgba(219, 215, 219, 0.5);
+  position: relative;
+  display: block;
+  max-width: 250px;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide::before {
+  content: '';
+  display: block;
+  padding-top: 100%;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide:hover,
+.mdlext-lightboard .mdlext-lightboard__slide:active,
+.mdlext-lightboard .mdlext-lightboard__slide:focus {
+  border-color: #B8B8B8;
+  background-color: #E8E8E8;
+  box-shadow: 2px 2px 12px -1px #dbd7db;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide:hover figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide:active figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide:focus figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide:focus {
+  outline-offset: -2px;
+  outline-color: inherit;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide[aria-selected='true'] {
+  background-color: #E8E8E8;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide[aria-selected='true'] figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container {
+  text-decoration: none;
+  display: block;
+  overflow: hidden;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame:focus,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:focus {
+  outline-offset: -2px;
+  outline-color: inherit;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame .mdl-ripple,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container .mdl-ripple {
+  background: rgb(63,81,181);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame figure,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure {
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame figure img,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure img {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  margin: auto;
+  max-width: 100%;
+  max-height: 100%;
+  border-width: 0;
+  border-radius: 3px;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame figure figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure figcaption {
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1;
+  letter-spacing: 0;
+  color: #bdbdbd;
+  position: absolute;
+  bottom: -2px;
+  white-space: nowrap;
+  overflow: hidden;
+  max-width: 100%;
+  width: 100%;
+  text-align: center;
+  text-overflow: ellipsis;
+  padding: 4px 0;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame:hover figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:hover figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-lightboard {
+  padding: calc((0 - 2px) / 2);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide {
+  margin: calc(2px / 2);
+  width: calc(1 / 2 * 100% - 2px);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+  margin: 8px;
+}
+
+.mdlext-lightboard.mdlext-lightboard--no-spacing {
+  padding: 0;
+}
+
+.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide {
+  margin: 0;
+  width: calc(1 / 2 * 100%);
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+.mdlext-lightboard:before {
+  display: none;
+  content: "lightboard_medium_small: 480, lightboard_medium: 660, lightboard_medium_large: 840, lightboard_large: 1200";
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium_small"] {
+  padding: calc((0 - 4px) / 2);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium_small"] .mdlext-lightboard__slide {
+  margin: calc(4px / 2);
+  width: calc(1 / 4 * 100% - 4px);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium_small"] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+  margin: 8px;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_medium_small"] {
+  padding: 0;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_medium_small"] .mdlext-lightboard__slide {
+  margin: 0;
+  width: calc(1 / 4 * 100%);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium"] {
+  padding: calc((0 - 4px) / 2);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium"] .mdlext-lightboard__slide {
+  margin: calc(4px / 2);
+  width: calc(1 / 5 * 100% - 4px);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium"] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+  margin: 8px;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_medium"] {
+  padding: 0;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_medium"] .mdlext-lightboard__slide {
+  margin: 0;
+  width: calc(1 / 5 * 100%);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium_large"] {
+  padding: calc((0 - 8px) / 2);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium_large"] .mdlext-lightboard__slide {
+  margin: calc(8px / 2);
+  width: calc(1 / 6 * 100% - 8px);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_medium_large"] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+  margin: 12px;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_medium_large"] {
+  padding: 0;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_medium_large"] .mdlext-lightboard__slide {
+  margin: 0;
+  width: calc(1 / 6 * 100%);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_large"] {
+  padding: calc((0 - 8px) / 2);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_large"] .mdlext-lightboard__slide {
+  margin: calc(8px / 2);
+  width: calc(1 / 7 * 100% - 8px);
+}
+
+.mdlext-lightboard[data-eq-state$="lightboard_large"] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+  margin: 12px;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_large"] {
+  padding: 0;
+}
+
+.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$="lightboard_large"] .mdlext-lightboard__slide {
+  margin: 0;
+  width: calc(1 / 7 * 100%);
+}
+
+html:before {
+  display: none;
+  content: ".mdlext-grid, .mdlext-lightboard";
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+.mdlext-lightbox {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  cursor: default;
+  position: relative;
+  width: auto;
+  max-width: 100%;
+  margin: 0 auto;
+  border: 0;
+  border-radius: 0;
+  background-color: rgb(255,255,255);
+  box-sizing: border-box;
+  outline: 0;
+  display: block;
+}
+
+.mdlext-lightbox *,
+.mdlext-lightbox *::before,
+.mdlext-lightbox *::after,
+.mdlext-lightbox input[type="search"] {
+  box-sizing: border-box;
+}
+
+.mdlext-lightbox .mdlext-lightbox__slider {
+  position: absolute;
+  top: 0;
+  left: 0;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.mdlext-lightbox .mdlext-lightbox__slider .mdlext-lightbox__slider__slide {
+  -ms-flex-negative: 0;
+      flex-shrink: 0;
+  display: block;
+  text-align: left;
+  color: #7f7f7f;
+  background-size: cover;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+
+.mdlext-lightbox figure {
+  margin: 0;
+  padding: 0;
+  position: relative;
+}
+
+.mdlext-lightbox figure img {
+  width: 100%;
+  max-width: 100%;
+  height: auto;
+  border: 0;
+  outline: 0;
+}
+
+.mdlext-lightbox figure figcaption {
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1;
+  letter-spacing: 0;
+  display: block;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  max-width: 100%;
+  height: auto;
+  max-height: 50%;
+  overflow: auto;
+  padding: 8px;
+  background-color: rgba(255, 255, 255, 0.76);
+  transform-origin: bottom;
+  transform: scaleY(0);
+  transition: 0.2s ease-in-out;
+}
+
+.mdlext-lightbox figure figcaption.mdlext-lightbox__show-figcaption {
+  transform: scaleY(1);
+}
+
+.mdlext-lightbox figure figcaption tbody th {
+  text-align: left;
+}
+
+.mdlext-lightbox figure figcaption tbody th,
+.mdlext-lightbox figure figcaption tbody td {
+  vertical-align: text-top;
+}
+
+.mdlext-lightbox .mdl-card__menu {
+  color: #ffffff;
+  z-index: 1;
+}
+
+.mdlext-lightbox footer {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-pack: justify;
+      justify-content: space-between;
+  -ms-flex-align: center;
+      align-items: center;
+  background-color: rgba(255, 255, 255, 0.86);
+}
+
+.mdlext-lightbox footer .mdl-card__supporting-text {
+  -ms-flex: 1;
+      flex: 1;
+  overflow: hidden;
+  padding: 0;
+  height: 18px;
+  width: 100%;
+}
+
+.mdlext-lightbox footer nav {
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.mdlext-lightbox.mdlext-lightbox--sticky-footer footer {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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 carousel ...
+ */
+
+ul.mdlext-carousel {
+  list-style: none;
+}
+
+.mdlext-carousel {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  overflow: hidden;
+  height: 100%;
+  width: 100%;
+  display: block;
+  white-space: nowrap;
+  font-size: 0;
+  background-color: transparent;
+}
+
+.mdlext-carousel__slide {
+  box-sizing: border-box;
+  display: inline-block;
+  position: relative;
+  outline: 0;
+  margin: 0 0;
+  padding: 0;
+  height: 100%;
+  border-top: 2px solid transparent;
+}
+
+.mdlext-carousel__slide[aria-selected] figcaption,
+.mdlext-carousel__slide[aria-selected='true'] figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.25);
+}
+
+.mdlext-carousel__slide[aria-selected]::after,
+.mdlext-carousel__slide[aria-selected='true']::after {
+  height: 2px;
+  width: 100%;
+  display: block;
+  content: ' ';
+  top: -2px;
+  left: 0;
+  position: absolute;
+  background: #ff4081;
+  animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
+  transition: all 1s cubic-bezier(0.4, 0, 1, 1);
+}
+
+.mdlext-carousel__slide a {
+  text-decoration: none;
+}
+
+.mdlext-carousel__slide figure {
+  box-sizing: border-box;
+  position: relative;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+}
+
+.mdlext-carousel__slide figure img {
+  box-sizing: border-box;
+  max-height: 100%;
+}
+
+.mdlext-carousel__slide figure figcaption {
+  box-sizing: border-box;
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1;
+  letter-spacing: 0;
+  color: #bdbdbd;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  white-space: nowrap;
+  overflow: hidden;
+  max-width: 100%;
+  width: 100%;
+  text-align: center;
+  text-overflow: ellipsis;
+  padding: 4px 0;
+}
+
+.mdlext-carousel__slide figure:hover figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.25);
+}
+
+.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container {
+  text-decoration: none;
+  display: block;
+  overflow: hidden;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  outline: 0;
+}
+
+.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container .mdl-ripple {
+  background: rgb(63,81,181);
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/*
+ * Copied/Modified/Inspired from/by:
+ *   https://github.com/google/material-design-lite/tree/master/src/textfield
+ *   http://red-team-design.com/making-html-dropdowns-not-suck/
+ *   http://codepen.io/etcpe9/pen/PqyOye,
+ *   http://codepen.io/pudgereyem/pen/PqBxQx
+ *   https://github.com/MEYVN-digital/mdl-selectfield
+ *   https://github.com/mebibou/mdl-selectfield
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+.mdlext-selectfield {
+  box-sizing: border-box;
+  position: relative;
+  font-size: 16px;
+  display: inline-block;
+  width: 300px;
+  max-width: 100%;
+  margin: 0;
+  padding: 20px 0;
+}
+
+.mdlext-selectfield .mdl-button {
+  bottom: 20px;
+  position: absolute;
+}
+
+.mdlext-selectfield::after {
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid inherit;
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: inherit;
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+  position: absolute;
+  right: 0.5em;
+  top: 50%;
+  transform: translateY(-50%);
+  pointer-events: none;
+}
+
+.mdlext-selectfield.is-disabled::after {
+  color: rgba(0,0,0, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0,0,0, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0,0,0, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-selectfield--align-right {
+  text-align: right;
+}
+
+.mdlext-selectfield--full-width {
+  width: 100%;
+}
+
+.mdlext-selectfield--expandable {
+  min-height: 32px;
+  min-width: 32px;
+  width: auto;
+}
+
+.mdlext-selectfield__select {
+  box-sizing: border-box;
+  border: 0;
+  border-radius: 0;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  -ms-appearance: none;
+  appearance: none;
+  text-indent: 0.01px;
+  text-overflow: '';
+  outline: none;
+  box-shadow: none;
+  font-size: 16px;
+  font-family: "Helvetica", "Arial", sans-serif;
+  padding: 4px calc(1.2em + 4px) 4px 0;
+  width: 100%;
+  border-bottom: 1px solid rgba(0,0,0, 0.12);
+  display: block;
+  margin: 0;
+  background: none;
+  text-align: left;
+  color: inherit;
+}
+
+.mdlext-selectfield__select:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 #000000;
+}
+
+.mdlext-selectfield__select:focus::-ms-value {
+  background-color: inherit;
+  color: inherit;
+}
+
+.mdlext-selectfield__select::-ms-expand {
+  display: none;
+}
+
+.mdlext-selectfield.is-focused .mdlext-selectfield__select {
+  outline: none;
+}
+
+.mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  border-color: rgb(213,0,0);
+  box-shadow: none;
+}
+
+fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+.mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+  border-bottom: 1px dotted rgba(0,0,0, 0.12);
+  color: rgba(0,0,0, 0.26);
+  background-color: transparent;
+}
+
+.mdlext-selectfield__select option {
+  color: rgba(0,0,0, 0.87);
+  box-sizing: border-box;
+  background-color: inherit;
+}
+
+.mdlext-selectfield__label {
+  box-sizing: border-box;
+  color: rgba(0,0,0, 0.26);
+  font-size: 16px;
+  top: 24px;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  pointer-events: none;
+  position: absolute;
+  display: block;
+  width: 100%;
+  overflow: hidden;
+  white-space: nowrap;
+  text-align: left;
+}
+
+.mdlext-selectfield.is-dirty .mdlext-selectfield__label,
+.mdlext-selectfield.has-placeholder .mdlext-selectfield__label {
+  visibility: hidden;
+}
+
+.mdlext-selectfield--floating-label .mdlext-selectfield__label {
+  transition-duration: 0.2s;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  transition: none;
+}
+
+fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+.mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0,0,0, 0.26);
+}
+
+.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: rgb(63,81,181);
+  font-size: 12px;
+  top: 4px;
+  visibility: visible;
+}
+
+.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder .mdlext-selectfield__label {
+  top: -16px;
+}
+
+.mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+  color: rgb(213,0,0);
+  font-size: 12px;
+}
+
+.mdlext-selectfield__label::after {
+  background-color: rgb(63,81,181);
+  bottom: 20px;
+  content: '';
+  height: 2px;
+  left: 45%;
+  position: absolute;
+  transition-duration: 0.2s;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  visibility: hidden;
+  width: 10px;
+}
+
+.mdlext-selectfield.is-focused .mdlext-selectfield__label::after {
+  left: 0;
+  visibility: visible;
+  width: 100%;
+}
+
+.mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+  background-color: rgb(213,0,0);
+}
+
+.mdlext-selectfield__error {
+  color: rgb(213,0,0);
+  font-size: 12px;
+  position: absolute;
+  margin-top: 3px;
+  visibility: hidden;
+  display: block;
+}
+
+.mdlext-selectfield.is-invalid .mdlext-selectfield__error {
+  visibility: visible;
+}
+
+.mdlext-selectfield__expandable-holder {
+  display: inline-block;
+  position: relative;
+  margin-left: 32px;
+  transition-duration: 0.2s;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  max-width: 0.1px;
+}
+
+.mdlext-selectfield.is-focused .mdlext-selectfield__expandable-holder,
+.mdlext-selectfield.is-dirty .mdlext-selectfield__expandable-holder {
+  max-width: 600px;
+}
+
+.mdlext-selectfield__expandable-holder .mdlext-selectfield__label::after {
+  bottom: 0;
+}
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/* Moved to aria-expanded-toggle.scss
+
+.mdlext-aria-expanded-plus-minus {
+  @include mdlext-aria-expanded-toggle($font-family: inherit);
+}
+
+.mdlext-aria-expanded-more-less {
+  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');
+}
+*/
+
+.mdlext-menu-button {
+  box-sizing: border-box;
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 14px;
+  font-weight: 500;
+  line-height: 1;
+  letter-spacing: 0;
+  text-transform: none;
+  position: relative;
+  height: 36px;
+  padding: 0 16px;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-item-align: stretch;
+      align-self: stretch;
+}
+
+.mdlext-menu-button > * {
+  margin: 0;
+  padding: 0 0 0 8px;
+}
+
+.mdlext-menu-button > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-menu-button > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {
+  margin-left: auto;
+}
+
+.mdlext-menu-button__caption {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  line-height: 1.2;
+}
+
+.mdlext-menu,
+.mdlext-menu__item {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.mdlext-menu {
+  position: absolute;
+  background: rgb(255,255,255);
+  z-index: 1000;
+  min-width: 124px;
+  border-radius: 2px;
+  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12);
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-direction: column;
+      flex-direction: column;
+  padding: 0;
+  overflow: hidden;
+  overflow-y: auto;
+}
+
+.mdlext-menu:focus {
+  outline-offset: -1px;
+  outline-width: 1px;
+}
+
+.mdlext-menu[hidden] {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+  pointer-events: none;
+}
+
+.mdlext-menu__item {
+  font-size: 14px;
+  font-weight: 400;
+  line-height: 24px;
+  letter-spacing: 0;
+  color: rgba(0,0,0, 0.87);
+  background-color: rgb(255,255,255);
+  position: relative;
+  padding: 0 16px 0 24px;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-item-align: stretch;
+      -ms-grid-row-align: stretch;
+      align-self: stretch;
+  text-decoration: none;
+  cursor: pointer;
+  white-space: nowrap;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  min-height: 40px;
+  overflow: hidden;
+}
+
+.mdlext-menu__item[aria-selected='true'] {
+  background-color: rgb(224,224,224);
+}
+
+.mdlext-menu__item[aria-selected='true']::before {
+  content: '\2713';
+  position: absolute;
+  font-size: 1.4em;
+  left: 4px;
+  top: 50%;
+  transform: translateY(-50%);
+  pointer-events: none;
+}
+
+.mdlext-menu__item:hover:not([disabled]) {
+  background-color: rgb(238,238,238);
+}
+
+.mdlext-menu__item:focus {
+  outline-offset: -2px;
+  outline-width: 1px;
+  outline-color: rgb(189,189,189);
+  background-color: rgb(238,238,238);
+}
+
+.mdlext-menu__item::-moz-focus-inner {
+  border: 0;
+}
+
+.mdlext-menu__item[disabled] {
+  color: rgb(189,189,189);
+  background-color: transparent;
+  cursor: auto;
+  pointer-events: none;
+}
+
+.mdlext-menu__item[disabled] > * {
+  color: rgb(189,189,189);
+}
+
+.mdlext-menu__item__caption {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.mdlext-menu__item > * {
+  margin: 0;
+  padding: 0 0 0 8px;
+}
+
+.mdlext-menu__item > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-menu__item > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {
+  margin-left: auto;
+}
+
+.mdlext-menu__item-separator {
+  margin: 0;
+  padding: 0;
+  border-bottom: 1px solid rgba(0,0,0, 0.12);
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/*
+ * The bordered fields are based on / inspired by this CodePen: http://codepen.io/prajwal078/pen/LVJZXz?editors=010
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+.mdlext-bordered-fields {
+  box-sizing: border-box;
+}
+
+.mdlext-bordered-fields * {
+  box-sizing: border-box;
+}
+
+.mdlext-bordered-fields .mdl-textfield,
+.mdlext-bordered-fields .mdlext-selectfield {
+  padding: 0;
+  margin: 0 0 20px 0;
+  /*
+    &.is-dirty {
+      .mdl-textfield__input,
+      .mdlext-selectfield__select {
+      }
+    }
+    */
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  height: 46px;
+  background-color: rgba(255, 255, 255, 0.2);
+  border: 1px solid rgba(0, 0, 0, 0.26);
+  border-radius: 3px;
+  padding: 20px 8px 4px 8px;
+  font-size: 16px;
+  font-weight: normal;
+  color: inherit;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled {
+  color: rgba(0, 0, 0, 0.12);
+  background-color: rgba(255, 255, 255, 0.2);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus {
+  background-color: rgba(238, 238, 238, 0.2);
+  border-color: #3f51b5;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  padding-right: calc(1em + 8px);
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  color: inherit;
+  border-color: #d50000;
+  background-color: rgba(255, 213, 213, 0.5);
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus {
+  border-color: #a20000;
+  background-color: rgba(255, 213, 213, 0.5);
+}
+
+.mdlext-bordered-fields .mdlext-selectfield::after {
+  top: auto;
+  bottom: 4px;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield::after,
+.mdlext-bordered-fields .mdlext-selectfield.is-disabled::after {
+  color: rgba(0, 0, 0, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0, 0, 0, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0, 0, 0, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+  color: rgba(0, 0, 0, 0.12);
+  background-color: rgba(255, 255, 255, 0.2);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdlext-selectfield__label {
+  visibility: hidden;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+  font-size: 16px;
+  font-weight: normal;
+  padding-left: 8px;
+  top: auto;
+  bottom: 4px;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label::after,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label::after,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label::after,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label::after {
+  background-color: transparent !important;
+  visibility: hidden !important;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #3f51b5;
+  font-size: 12px;
+  font-weight: normal;
+  top: auto;
+  bottom: 24px;
+  visibility: visible;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label {
+  color: #d50000;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > i,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > .mdl-button,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > .mdl-button {
+  position: absolute;
+  bottom: 2px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > i {
+  bottom: 6px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i:first-child,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button:first-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i:first-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button:first-child {
+  left: 4px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__select {
+  padding-left: 32px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__label {
+  left: 24px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__label {
+  left: 24px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > .mdl-textfield__input {
+  padding-right: 32px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > i:last-child,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > .mdl-button:last-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > i:last-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > .mdl-button:last-child {
+  left: auto;
+  right: 4px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-disabled i,
+.mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,
+.mdlext-bordered-fields .mdlext-selectfield.is-disabled i,
+.mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+  pointer-events: none;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i,
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+  pointer-events: none;
+}
+
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+.mdlext-collapsible {
+  box-sizing: border-box;
+  cursor: pointer;
+}
+
+.mdlext-collapsible-group,
+.mdlext-collapsible-region {
+  box-sizing: border-box;
+}
+
+.mdlext-collapsible-group[hidden],
+.mdlext-collapsible-region[hidden] {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+  pointer-events: none;
+}
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+.mdlext-aria-toggle-plus-minus {
+  font-family: inherit;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 1.4em;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-toggle-plus-minus::after {
+  content: "+";
+  margin-left: 0;
+}
+
+[aria-expanded='true'] > .mdlext-aria-toggle-plus-minus::after {
+  content: "-";
+  margin-left: 0;
+}
+
+.mdlext-aria-toggle-material-icons {
+  font-family: "Material Icons";
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 1.3em;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-toggle-material-icons::after {
+  content: "expand_more";
+  margin-left: -8px;
+}
+
+[aria-expanded='true'] > .mdlext-aria-toggle-material-icons::after {
+  content: "expand_less";
+  margin-left: -8px;
+}
+
+.mdlext-accordion {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.mdlext-accordion * {
+  box-sizing: border-box;
+}
+
+.mdlext-accordion__panel {
+  box-sizing: border-box;
+  position: relative;
+  overflow: hidden;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-wrap: nowrap;
+      flex-wrap: nowrap;
+}
+
+.mdlext-accordion__tab {
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 20px;
+  font-weight: 500;
+  line-height: 1;
+  letter-spacing: 0.02em;
+  font-weight: 400;
+  line-height: 1.1;
+  box-sizing: border-box;
+  position: relative;
+  margin: 0;
+  padding: 0;
+  min-width: 56px;
+  min-height: 56px;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-item-align: stretch;
+      align-self: stretch;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  color: #000000;
+  background-color: rgba(158, 158, 158, 0.2);
+  cursor: pointer;
+  overflow: hidden;
+}
+
+.mdlext-accordion__tab:focus {
+  outline-offset: -2px;
+  outline-color: invert;
+  outline-width: 2px;
+}
+
+.mdlext-accordion__tab[aria-expanded='true'] {
+  background-color: rgba(158, 158, 158, 0.3);
+}
+
+.mdlext-accordion__tab[aria-selected='true'] {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-accordion__tab[disabled] {
+  background-color: rgba(158, 158, 158, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+  pointer-events: none;
+}
+
+.mdlext-accordion__tab[disabled] > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-accordion__tab:hover:not([disabled]) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-accordion__tab > * {
+  margin: 0;
+  padding: 0;
+}
+
+.mdlext-accordion__tab__caption {
+  padding-left: 8px;
+  padding-right: 8px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.mdlext-accordion__tab > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  content: '';
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  background: rgba(255, 255, 255, 0.5);
+  opacity: 0;
+  border-radius: 100%;
+  transform: scale(1, 1) translate(-50%);
+  transform-origin: 50% 50%;
+}
+
+.mdlext-accordion__tab--ripple[aria-selected='true']:focus:not(:active)::before {
+  animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
+}
+
+.mdlext-accordion__tabpanel {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0 8px;
+  color: inherit;
+  background-color: transparent;
+  display: block;
+  overflow: auto;
+  -ms-flex-positive: 1;
+      flex-grow: 1;
+}
+
+.mdlext-accordion__tabpanel[hidden] {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+
+.mdlext-accordion--vertical {
+  -ms-flex-direction: column;
+      flex-direction: column;
+  -ms-flex-wrap: nowrap;
+      flex-wrap: nowrap;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__panel {
+  min-height: 56px;
+  -ms-flex-direction: column;
+      flex-direction: column;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab {
+  height: 56px;
+  border-top: 1px solid rgba(158, 158, 158, 0.5);
+  padding-left: 8px;
+  padding-right: 8px;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected='true']::after {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  height: 1px;
+  width: 100%;
+  display: block;
+  content: " ";
+  background-color: rgba(150, 150, 150, 0.5);
+  animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
+  transition: all 1s cubic-bezier(0.4, 0, 1, 1);
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab > * {
+  padding-left: 8px;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
+  margin-left: auto;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  width: 5%;
+  height: 10%;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tabpanel {
+  border-top: 1px solid rgba(158, 158, 158, 0.5);
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation {
+  transform: scaleY(1);
+  animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation[hidden] {
+  transform: scaleY(0);
+  animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;
+  animation-delay: 0.1s;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__panel {
+  min-width: 56px;
+  width: 56px;
+}
+
+.mdlext-accordion--horizontal[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {
+  width: 100%;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab {
+  -ms-flex-direction: column-reverse;
+      flex-direction: column-reverse;
+  width: 56px;
+  white-space: nowrap;
+  border-left: 1px solid rgba(158, 158, 158, 0.5);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected='true']::after {
+  position: absolute;
+  top: 0;
+  right: 0;
+  height: 100%;
+  width: 1px;
+  display: block;
+  content: " ";
+  background-color: rgba(150, 150, 150, 0.5);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab > * {
+  transform: rotate(-90deg) translateX(8px);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
+  margin-bottom: auto;
+  transform: rotate(-90deg) translateX(0);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab__caption {
+  transform: rotate(-90deg) translateX(50%);
+  padding-right: 16px;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  width: 10%;
+  height: 5%;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tabpanel {
+  border-left: 1px solid rgba(158, 158, 158, 0.5);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation {
+  transform: scaleX(1);
+  animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation[hidden] {
+  transform: scaleX(0);
+  animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;
+}
+
+.mdlext-accordion__panel:first-child > .mdlext-accordion__tab {
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+
+.mdlext-accordion[aria-multiselectable="false"] .mdlext-accordion__panel.is-expanded {
+  -ms-flex-positive: 1;
+      flex-grow: 1;
+}
+
+.mdlext-accordion[disabled] * {
+  pointer-events: none;
+}
+
+.mdlext-accordion[disabled] .mdlext-accordion__tab {
+  background-color: rgba(158, 158, 158, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-accordion[disabled] .mdlext-accordion__tab > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-accordion[disabled] .mdlext-accordion__tabpanel {
+  opacity: 0.8;
+  filter: blur(1px) grayscale(80%);
+}
+
+@keyframes mdlext-accordion-tab-ripple {
+  0% {
+    transform: scale(0, 0);
+    opacity: 1;
+  }
+
+  20% {
+    transform: scale(25, 25);
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    transform: scale(40, 40);
+  }
+}
+
+/*
+@keyframes mdlext-accordion-show-tabpanel-y {
+  0% { transform: scaleY(0.1); }
+  40% { transform: scaleY(1.03); }
+  60% { transform: scaleY(0.98); }
+  80% { transform: scaleY(1.03); }
+  100% { transform: scaleY(0.98); }
+  80% { transform: scaleY(1.01); }
+  100% { transform: scaleY(1); }
+}
+*/
+
+@keyframes mdlext-accordion-show-tabpanel-y {
+  0% {
+    transform: scaleY(0);
+  }
+
+  60% {
+    transform: scaleY(1.01);
+  }
+
+  80% {
+    transform: scaleY(0.98);
+  }
+
+  100% {
+    transform: scaleY(1);
+  }
+}
+
+@keyframes mdlext-accordion-hide-tabpanel-y {
+  0% {
+    transform: scaleY(1);
+  }
+
+  60% {
+    transform: scaleY(0.98);
+  }
+
+  80% {
+    transform: scaleY(1.01);
+  }
+
+  100% {
+    transform: scaleY(0);
+  }
+}
+
+/*
+@keyframes mdlext-accordion-show-tabpanel-x {
+  0% { transform: scaleX(0.1); }
+  40% { transform: scaleX(1.03); }
+  60% { transform: scaleX(0.98); }
+  80% { transform: scaleX(1.03); }
+  100% { transform: scaleX(0.98); }
+  80% { transform: scaleX(1.01); }
+  100% { transform: scaleX(1); }
+}
+*/
+
+@keyframes mdlext-accordion-show-tabpanel-x {
+  0% {
+    transform: scaleX(0);
+  }
+
+  60% {
+    transform: scaleX(1.01);
+  }
+
+  80% {
+    transform: scaleX(0.98);
+  }
+
+  100% {
+    transform: scaleX(1);
+  }
+}
+
+@keyframes mdlext-accordion-hide-tabpanel-x {
+  0% {
+    transform: scaleX(1);
+  }
+
+  60% {
+    transform: scaleX(0.98);
+  }
+
+  80% {
+    transform: scaleX(1.01);
+  }
+
+  100% {
+    transform: scaleX(0);
+  }
+}
+
+/* -------------------------------------------------------------
+   Palette samples. Not part of build
+----------------------------------------------------------------
+
+$mdlext-light-color-primary:          #9E9E9E !default;
+$mdlext-light-color-primary-dark:     #616161 !default;
+$mdlext-light-color-primary-light:    #9E9E9E !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #212121 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #E040FB !default;
+$mdlext-light-color-accent-light:     #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FAFAFA !default;
+
+$mdlext-light-color-primary:          #F5F5F5 !default;
+$mdlext-light-color-primary-dark:     #E0E0E0 !default;
+$mdlext-light-color-primary-light:    #8BC34A !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #000000 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FFC107 !default;
+$mdlext-light-color-accent-light:     #FFC107 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #673AB7 !default;
+$mdlext-light-color-primary-dark:     #512DA8 !default;
+$mdlext-light-color-primary-light:    #673AB7 !default;   // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #D1C4E9 !default;   // text color on primary/primary dark background
+$mdlext-light-color-accent:           #4CAF50 !default;
+$mdlext-light-color-accent-light:     #4CAF50 !default;   // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FF5252 !default;
+$mdlext-light-color-accent-light:     #FF5252 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #03A9F4 !default;
+$mdlext-light-color-accent-light:     #03A9F4 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-dark-color-primary:           #212121 !default;
+$mdlext-dark-color-primary-dark:      #000000 !default;
+$mdlext-dark-color-primary-light:     #607D8B !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-dark-color-primary-contrast:  #FFFFFF !default;  // text color on primary/primary dark background
+$mdlext-dark-color-accent:            #FF5722 !default;
+$mdlext-dark-color-accent-light:      #FF5722 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-dark-color-accent-contrast:   #FFFFFF !default;
+
+*/
+
+.mdlext-light-color-theme {
+  background-color: #FAFAFA;
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme a {
+  outline-color: inherit;
+}
+
+.mdlext-light-color-theme .mdl-color--primary {
+  background-color: #4CAF50 !important;
+}
+
+.mdlext-light-color-theme .mdl-color--primary-contrast {
+  background-color: #C8E6C9 !important;
+}
+
+.mdlext-light-color-theme .mdl-color--primary-dark {
+  background-color: #388E3C !important;
+}
+
+.mdlext-light-color-theme .mdl-color--accent {
+  background-color: #E040FB !important;
+}
+
+.mdlext-light-color-theme .mdl-color--accent-contrast {
+  background-color: #FAFAFA !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--primary {
+  color: #4CAF50 !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--primary-contrast {
+  color: #C8E6C9 !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--primary-dark {
+  color: #388E3C !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--accent {
+  color: #E040FB !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--accent-contrast {
+  color: #FAFAFA !important;
+}
+
+.mdlext-light-color-theme a {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-badge[data-badge]::after {
+  background: #E040FB;
+  color: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-badge.mdl-badge--no-background[data-badge]::after {
+  color: #E040FB;
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button {
+  background: transparent;
+  color: #000000;
+}
+
+.mdlext-light-color-theme .mdl-button:hover {
+  background-color: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-light-color-theme .mdl-button:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-button:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button.mdl-button--colored {
+  color: #4CAF50;
+}
+
+.mdlext-light-color-theme .mdl-button.mdl-button--colored:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-button--raised {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-light-color-theme .mdl-button--raised:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--raised:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored {
+  background: #4CAF50;
+  color: #C8E6C9;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:hover {
+  background-color: #3d8b40;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:active {
+  background-color: #3d8b40;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active) {
+  background-color: #3d8b40;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple {
+  background: #C8E6C9;
+}
+
+.mdlext-light-color-theme .mdl-button--fab {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-light-color-theme .mdl-button--fab:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--fab:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored {
+  background: #E040FB;
+  color: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:hover {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active) {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:active {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button--icon {
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary {
+  color: #4CAF50;
+}
+
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple {
+  background: #C8E6C9;
+}
+
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised,
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab {
+  color: #C8E6C9;
+  background-color: #4CAF50;
+}
+
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised,
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab {
+  color: #FAFAFA;
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button[disabled][disabled],
+.mdlext-light-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(0, 0, 0, 0.26);
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-button--fab[disabled][disabled],
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-button--raised[disabled][disabled],
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-button--colored[disabled][disabled],
+.mdlext-light-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded {
+  background: transparent;
+  color: #E040FB;
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** Thumbs ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** 0-value ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** Disabled ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-track {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-track {
+  background: none;
+  color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 16px, #E040FB 16px, #E040FB 0);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-upper {
+  background: linear-gradient(to left, transparent, transparent 16px, rgba(0, 0, 0, 0.26) 16px, rgba(0, 0, 0, 0.26) 0);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, #E040FB 0%, #E040FB 37.5%, rgba(224, 64, 251, 0.26) 37.5%, rgba(224, 64, 251, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-ms-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb {
+  border-color: #E040FB;
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.12);
+  background: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.12);
+  background: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(0, 0, 0, 0.26) 66.67%, rgba(0, 0, 0, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, rgba(0, 0, 0, 0.12) 0%, rgba(0, 0, 0, 0.12) 25%, rgba(0, 0, 0, 0.26) 25%, rgba(0, 0, 0, 0.26) 37.5%, rgba(0, 0, 0, 0.12) 37.5%, rgba(0, 0, 0, 0.12) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(0, 0, 0, 0.26) 77.78%, rgba(0, 0, 0, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {
+  background-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(0, 0, 0, 0.26) 50%, rgba(0, 0, 0, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 25px, rgba(0, 0, 0, 0.26) 25px, rgba(0, 0, 0, 0.26) 0);
+}
+
+.mdlext-light-color-theme .mdl-slider__background-flex {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider__background-lower {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider__background-upper {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield__input {
+  border-bottom-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__input {
+  border-color: #D32F2F;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdl-textfield.is-disabled .mdl-textfield__input {
+  background-color: transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield__label {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-textfield__label::after {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__label::after {
+  background-color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdl-textfield__error {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdl-checkbox__box-outline {
+  border-color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline {
+  border-color: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,
+.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-checkbox__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {
+  box-shadow: 0 0 0 8px rgba(224, 64, 251, 0.26);
+  background-color: rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-checkbox__tick-outline {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,
+.mdlext-light-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {
+  background-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,
+.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-checkbox__ripple-container .mdl-ripple {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,
+.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-radio__outer-circle {
+  border-color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle {
+  border-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-radio__inner-circle {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-radio__ripple-container .mdl-ripple {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle__label {
+  color: #616161;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {
+  background-color: rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: #616161;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-switch__track {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__track {
+  background: rgba(224, 64, 251, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__track {
+  background: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-switch__thumb {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__thumb {
+  background: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdl-switch__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper {
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-light-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {
+  box-shadow: 0 0 0 20px rgba(224, 64, 251, 0.26);
+  background-color: rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__label {
+  color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdl-switch__ripple-container .mdl-ripple {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-data-table {
+  border-color: rgba(0, 0, 0, 0.12);
+  background-color: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-data-table tbody tr.is-selected {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-data-table tbody tr:hover {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-data-table th {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending {
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover::before,
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover::before {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-menu__outline {
+  background: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdl-menu__item {
+  color: rgba(0, 0, 0, 0.87);
+  background-color: transparent;
+  outline-color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdl-menu__item--full-bleed-divider {
+  border-bottom-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled],
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled] {
+  color: #BDBDBD;
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled]:hover,
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:hover {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled]:focus,
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:focus {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled] .mdl-ripple,
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item:hover {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-menu__item:focus {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-menu__item:active {
+  background-color: #E0E0E0;
+}
+
+.mdlext-light-color-theme .mdl-card {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-card__media {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-card__title {
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme .mdl-card__title.mdl-card--border {
+  border-bottom-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-light-color-theme .mdl-card__title-text {
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdl-card__subtitle-text {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-card__supporting-text {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-card__actions {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-card__actions.mdl-card--border {
+  border-top-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield.is-disabled::after {
+  color: rgba(0, 0, 0, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0, 0, 0, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0, 0, 0, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__select {
+  border-bottom-color: rgba(0, 0, 0, 0.26);
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__select option {
+  background-color: #FAFAFA;
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  border-color: #D32F2F;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+.mdlext-light-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+  background-color: transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__label::after {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+  background-color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__error {
+  color: #D32F2F;
+}
+
+.mdlext-menu.mdlext-light-color-theme {
+  background: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdlext-menu {
+  background: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item {
+  color: rgba(0, 0, 0, 0.87);
+  background-color: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item:active,
+.mdlext-light-color-theme .mdlext-menu__item[aria-selected='true'] {
+  background-color: #E0E0E0;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item:hover:not([disabled]) {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item:focus {
+  outline-color: #BDBDBD;
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item[disabled] {
+  color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item[disabled] > * {
+  color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item-separator {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  background-color: rgba(250, 250, 250, 0.1);
+  border-color: rgba(0, 0, 0, 0.26);
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled {
+  color: rgba(0, 0, 0, 0.26);
+  background-color: rgba(250, 250, 250, 0.1);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus {
+  background-color: rgba(225, 225, 225, 0.1);
+  border-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  color: inherit;
+  border-color: #D32F2F;
+  background-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus {
+  border-color: #ab2424;
+  background-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield::after,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled::after {
+  color: rgba(0, 0, 0, 0.26);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0, 0, 0, 0.26);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0, 0, 0, 0.26);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+  color: rgba(0, 0, 0, 0.26);
+  background-color: rgba(250, 250, 250, 0.1);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab {
+  color: #000000;
+  background-color: rgba(117, 117, 117, 0.2);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab:focus {
+  outline-color: rgba(109, 109, 109, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[aria-expanded='true'] {
+  background-color: rgba(117, 117, 117, 0.3);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[aria-selected='true'] {
+  background-color: rgba(117, 117, 117, 0.4);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[disabled] {
+  background-color: rgba(117, 117, 117, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+  pointer-events: none;
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[disabled] > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab:hover:not([disabled]) {
+  background-color: rgba(117, 117, 117, 0.4);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  background: rgba(117, 117, 117, 0.4);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tabpanel {
+  color: inherit;
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab {
+  border-top: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: rgba(102, 102, 102, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel {
+  border-top: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab {
+  border-left: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: rgba(102, 102, 102, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel {
+  border-left: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__panel:first-child > .mdlext-light-color-theme .mdlext-accordion__tab {
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+
+.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab {
+  background-color: rgba(117, 117, 117, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel {
+  opacity: 0.8;
+  filter: blur(1px) grayscale(80%);
+}
+
+/* -------------------------------------------------------------
+   Palette samples. Not part of build
+----------------------------------------------------------------
+
+$mdlext-light-color-primary:          #9E9E9E !default;
+$mdlext-light-color-primary-dark:     #616161 !default;
+$mdlext-light-color-primary-light:    #9E9E9E !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #212121 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #E040FB !default;
+$mdlext-light-color-accent-light:     #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FAFAFA !default;
+
+$mdlext-light-color-primary:          #F5F5F5 !default;
+$mdlext-light-color-primary-dark:     #E0E0E0 !default;
+$mdlext-light-color-primary-light:    #8BC34A !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #000000 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FFC107 !default;
+$mdlext-light-color-accent-light:     #FFC107 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #673AB7 !default;
+$mdlext-light-color-primary-dark:     #512DA8 !default;
+$mdlext-light-color-primary-light:    #673AB7 !default;   // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #D1C4E9 !default;   // text color on primary/primary dark background
+$mdlext-light-color-accent:           #4CAF50 !default;
+$mdlext-light-color-accent-light:     #4CAF50 !default;   // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FF5252 !default;
+$mdlext-light-color-accent-light:     #FF5252 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #03A9F4 !default;
+$mdlext-light-color-accent-light:     #03A9F4 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-dark-color-primary:           #212121 !default;
+$mdlext-dark-color-primary-dark:      #000000 !default;
+$mdlext-dark-color-primary-light:     #607D8B !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-dark-color-primary-contrast:  #FFFFFF !default;  // text color on primary/primary dark background
+$mdlext-dark-color-accent:            #FF5722 !default;
+$mdlext-dark-color-accent-light:      #FF5722 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-dark-color-accent-contrast:   #FFFFFF !default;
+
+*/
+
+.mdlext-dark-color-theme {
+  background-color: #303030;
+  color: white;
+}
+
+.mdlext-dark-color-theme a {
+  outline-color: inherit;
+}
+
+.mdlext-dark-color-theme .mdl-color--primary {
+  background-color: #FFC107 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--primary-contrast {
+  background-color: #FFF8E1 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--primary-dark {
+  background-color: #FFA000 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--accent {
+  background-color: #536DFE !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--accent-contrast {
+  background-color: #FFFFFF !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--primary {
+  color: #FFC107 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--primary-contrast {
+  color: #FFF8E1 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--primary-dark {
+  color: #FFA000 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--accent {
+  color: #536DFE !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--accent-contrast {
+  color: #FFFFFF !important;
+}
+
+.mdlext-dark-color-theme a {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-badge[data-badge]::after {
+  background: #536DFE;
+  color: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-badge.mdl-badge--no-background[data-badge]::after {
+  color: #536DFE;
+  background: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button {
+  background: transparent;
+  color: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button:hover {
+  background-color: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-button:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-button:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button.mdl-button--colored {
+  color: #FFC107;
+}
+
+.mdlext-dark-color-theme .mdl-button.mdl-button--colored:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored {
+  background: #FFC107;
+  color: #FFF8E1;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:hover {
+  background-color: #d39e00;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:active {
+  background-color: #d39e00;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active) {
+  background-color: #d39e00;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple {
+  background: #FFF8E1;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-button--fab:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--fab:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored {
+  background: #536DFE;
+  color: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:hover {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active) {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:active {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple {
+  background: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button--icon {
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary {
+  color: #FFC107;
+}
+
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple {
+  background: #FFF8E1;
+}
+
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised,
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab {
+  color: #FFF8E1;
+  background-color: #FFC107;
+}
+
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple {
+  background: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised,
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab {
+  color: #FFFFFF;
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(255, 255, 255, 0.26);
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-button--colored[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded {
+  background: transparent;
+  color: #536DFE;
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** 0-value ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** Disabled ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-track {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-track {
+  background: none;
+  color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 16px, #536DFE 16px, #536DFE 0);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-upper {
+  background: linear-gradient(to left, transparent, transparent 16px, rgba(255, 255, 255, 0.87) 16px, rgba(255, 255, 255, 0.87) 0);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(83, 109, 254, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(83, 109, 254, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, #536DFE 0%, #536DFE 37.5%, rgba(83, 109, 254, 0.5) 37.5%, rgba(83, 109, 254, 0.5) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-ms-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb {
+  border-color: #536DFE;
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.5);
+  background: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.5);
+  background: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(255, 255, 255, 0.87) 66.67%, rgba(255, 255, 255, 0.87) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.5) 25%, rgba(255, 255, 255, 0.87) 25%, rgba(255, 255, 255, 0.87) 37.5%, rgba(255, 255, 255, 0.5) 37.5%, rgba(255, 255, 255, 0.5) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(255, 255, 255, 0.87) 77.78%, rgba(255, 255, 255, 0.87) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {
+  background-color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(255, 255, 255, 0.87) 50%, rgba(255, 255, 255, 0.87) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 25px, rgba(255, 255, 255, 0.87) 25px, rgba(255, 255, 255, 0.87) 0);
+}
+
+.mdlext-dark-color-theme .mdl-slider__background-flex {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider__background-lower {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider__background-upper {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-textfield__input {
+  border-bottom-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__input {
+  border-color: #FF1744;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdl-textfield.is-disabled .mdl-textfield__input {
+  background-color: transparent;
+  border-bottom-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-textfield__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-textfield__label::after {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__label::after {
+  background-color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdl-textfield__error {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__box-outline {
+  border-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline {
+  border-color: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,
+.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {
+  border-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {
+  box-shadow: 0 0 0 8px rgba(83, 109, 254, 0.26);
+  background-color: rgba(83, 109, 254, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__tick-outline {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,
+.mdlext-dark-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {
+  background-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,
+.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__ripple-container .mdl-ripple {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,
+.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-radio__outer-circle {
+  border-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle {
+  border-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle {
+  border-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-radio__inner-circle {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle {
+  background: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-radio__ripple-container .mdl-ripple {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle__label {
+  color: #616161;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {
+  background-color: rgba(83, 109, 254, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: #616161;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-switch__track {
+  background: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__track {
+  background: rgba(83, 109, 254, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__track {
+  background: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-switch__thumb {
+  background: #FAFAFA;
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__thumb {
+  background: #FAFAFA;
+}
+
+.mdlext-dark-color-theme .mdl-switch__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper {
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {
+  box-shadow: 0 0 0 20px rgba(83, 109, 254, 0.26);
+  background-color: rgba(83, 109, 254, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__label {
+  color: #FAFAFA;
+}
+
+.mdlext-dark-color-theme .mdl-switch__ripple-container .mdl-ripple {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-data-table {
+  border-color: rgba(255, 255, 255, 0.12);
+  background-color: #303030;
+}
+
+.mdlext-dark-color-theme .mdl-data-table tbody tr.is-selected {
+  background-color: #424242;
+}
+
+.mdlext-dark-color-theme .mdl-data-table tbody tr:hover {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdl-data-table th {
+  color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending {
+  color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover::before,
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover::before {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-menu__outline {
+  background: #000000;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item {
+  color: rgba(255, 255, 255, 0.87);
+  background-color: transparent;
+  outline-color: #616161;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item--full-bleed-divider {
+  border-bottom-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled],
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled] {
+  color: #9E9E9E;
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled]:hover,
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:hover {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled]:focus,
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:focus {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled] .mdl-ripple,
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item:hover {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item:focus {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item:active {
+  background-color: #424242;
+}
+
+.mdlext-dark-color-theme .mdl-card {
+  background: #303030;
+}
+
+.mdlext-dark-color-theme .mdl-card__media {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-card__title {
+  color: white;
+}
+
+.mdlext-dark-color-theme .mdl-card__title.mdl-card--border {
+  border-bottom-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-dark-color-theme .mdl-card__title-text {
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdl-card__subtitle-text {
+  color: rgba(0, 0, 0, 0.7);
+}
+
+.mdlext-dark-color-theme .mdl-card__supporting-text {
+  color: rgba(255, 255, 255, 0.7);
+}
+
+.mdlext-dark-color-theme .mdl-card__actions {
+  background-color: rgba(255, 255, 255, 0);
+}
+
+.mdlext-dark-color-theme .mdl-card__actions.mdl-card--border {
+  border-top-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield.is-disabled::after {
+  color: rgba(255, 255, 255, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(255, 255, 255, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(255, 255, 255, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__select {
+  border-bottom-color: rgba(255, 255, 255, 0.26);
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__select option {
+  background-color: #303030;
+  color: white;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  border-color: #FF1744;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+.mdlext-dark-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+  background-color: transparent;
+  border-bottom-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__label::after {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+  background-color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__error {
+  color: #FF1744;
+}
+
+.mdlext-menu.mdlext-dark-color-theme {
+  background: #000000;
+}
+
+.mdlext-dark-color-theme .mdlext-menu {
+  background: #000000;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item {
+  color: rgba(255, 255, 255, 0.87);
+  background-color: #000000;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item:active,
+.mdlext-dark-color-theme .mdlext-menu__item[aria-selected='true'] {
+  background-color: #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item:hover:not([disabled]) {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item:focus {
+  outline-color: #616161;
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item[disabled] {
+  color: #9E9E9E;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item[disabled] > * {
+  color: #9E9E9E;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item-separator {
+  border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  background-color: rgba(48, 48, 48, 0.1);
+  border-color: rgba(255, 255, 255, 0.26);
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled {
+  color: rgba(255, 255, 255, 0.26);
+  background-color: rgba(48, 48, 48, 0.1);
+  border-color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus {
+  background-color: rgba(23, 23, 23, 0.1);
+  border-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  color: inherit;
+  border-color: #FF1744;
+  background-color: rgba(255, 23, 68, 0.1);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus {
+  border-color: #e3002c;
+  background-color: rgba(255, 23, 68, 0.1);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield::after,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled::after {
+  color: rgba(255, 255, 255, 0.26);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(255, 255, 255, 0.26);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(255, 255, 255, 0.26);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+  color: rgba(255, 255, 255, 0.26);
+  background-color: rgba(48, 48, 48, 0.1);
+  border-color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button {
+  color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button {
+  color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab {
+  color: white;
+  background-color: black;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab:focus {
+  outline-color: #a8a8a8;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[aria-expanded='true'] {
+  background-color: rgba(0, 0, 0, 0.9);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[aria-selected='true'] {
+  background-color: rgba(0, 0, 0, 0.6);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[disabled] {
+  background-color: rgba(0, 0, 0, 0.4);
+  color: rgba(255, 255, 255, 0.5);
+  pointer-events: none;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[disabled] > * {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab:hover:not([disabled]) {
+  background-color: rgba(0, 0, 0, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  background: rgba(0, 0, 0, 0.3);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tabpanel {
+  color: inherit;
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab {
+  border-top: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: #a8a8a8;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel {
+  border-top: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab {
+  border-left: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: #a8a8a8;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel {
+  border-left: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__panel:first-child > .mdlext-dark-color-theme .mdlext-accordion__tab {
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab {
+  background-color: rgba(0, 0, 0, 0.4);
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab > * {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel {
+  opacity: 0.8;
+  filter: blur(1px) grayscale(80%);
+}
+
+
+/*# sourceMappingURL=mdl-ext-eqjs.css.map*/
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext-eqjs.css.map b/node_modules/mdl-ext/lib/mdl-ext-eqjs.css.map
new file mode 100644
index 0000000..c2c7f12
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext-eqjs.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack:///~/material-design-lite/src/_variables.scss","webpack:///webpack:///src/mdl-ext-eqjs-build.scss","webpack:///webpack:///~/material-design-lite/src/_color-definitions.scss","webpack:///webpack:///~/material-design-lite/src/_functions.scss","webpack:///webpack:///~/material-design-lite/src/_mixins.scss","webpack:///webpack:///src/mdl-ext-eqjs.scss","webpack:///webpack:///src/_variables.scss","webpack:///webpack:///src/_functions.scss","webpack:///webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss","webpack:///webpack:///src/_mixins.scss","webpack:///webpack:///src/sticky-header/_sticky-header.scss","webpack:///webpack:///src/dialog/dialog.scss","webpack:///webpack:///src/grid/_grid-eqjs.scss","webpack:///webpack:///~/eq.js/sass/_eq.scss","webpack:///webpack:///src/lightboard/_lightboard.scss","webpack:///webpack:///src/lightboard/_lightboard-eqjs.scss","webpack:///webpack:///src/lightbox/_lightbox.scss","webpack:///webpack:///src/carousel/_carousel.scss","webpack:///webpack:///src/selectfield/_selectfield.scss","webpack:///webpack:///src/menu-button/_menu-button.scss","webpack:///webpack:///src/bordered-fields/_bordered-fields.scss","webpack:///webpack:///src/collapsible/_collapsible.scss","webpack:///webpack:///src/accordion/_accordion.scss","webpack:///webpack:///src/color-themes/_color-themes.scss","webpack:///webpack:///src/color-themes/_light-color-theme.scss","webpack:///webpack:///src/color-themes/_dark-color-theme.scss"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GCcG;;ADEH;wCCCwC;;ADExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCgCG;;ADGH;;AAEA;;;;;;;;;ECQE;;ADKF;;AAEA;;;;;GCEG;;ACzEH;;;;;;;;;;;;;;GDyFG;;ACzEH;;AAikBA;;ACjlBA;;;;;;;;;;;;;;GF6GG;;AD5BH;;AAGA;;AA8BA;;AAgBA;;AAEA;;AAkCA;;AAQA;;AAMA;;AAIA;;AAqBA;;AAOA;;AAQA;;AAYA;;AASA;;AAUA;;AASA;;AAOA;;AAMA;;AAOA;;AAaA;;AAIA;;AAKA;;AASA;;AAYA;;AAYA;;AAgBA;;AAWA;;AAKA;;AAeA;;AA6BA;;AAMA;;AAEA;;AAOA;;AAMA;;AAWA;;AAEA;;AA0BA;;AAKA;;AACA;;;;GC9RG;;ADiTH;;AAQA;;AAGA;;AAUA;;AAMA;;AAqBA;;AA6BA;;AAGA;;AAOA;;AAIA;;AI3kBA;;;;;;;;;;;;;;GHmOG;;AGnNH;;AA+MA;;AA6CA;;AAsBA;;AChSA;;;;;;;;;;;GJsPG;;AKxPH;;;;;;;;;;;;;;GLwQG;;AMnMH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AC3JA;;AAqCA;;AArCA;;AAqCA;;ACxGA;;;;;;;;;;;;;;;;;;GP0TG;;AMvPH;;AAqCA;;AClFA;ECiDE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EAGA;EAGA;CRmPD;;AO9TD;EC8EI;EACA;CRoPH;;AAxFC;EQvJI;EACA;CRmPL;;AOpUD;EC6CE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EAGA;EAGA;CRmRD;;AQjRC;EACE;EACA;CRoRH;;AA7FC;EQlLI;EACA;CRmRL;;AShYD;;;;;;;;;;;;;;GTgZG;;AKhZH;;;;;;;;;;;;;;GLgaG;;AM3VH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AI3MA;EACE;EACA;EACA;EACA;CTsaD;;ASpaC;EACE;CTuaH;;ASnaD;EAEI;CTqaH;;ASvaD;EAKI;CTsaH;;ASla2C;;EAE1C;EAAA;CTqaD;;ASnaC;;EACE;CTuaH;;AS5aD;;EAQI;CTyaH;;AU1dD;;;;;;;;;;;;;;;;;;GV8eG;;AK9eH;;;;;;;;;;;;;;GL8fG;;AMzbH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AK1MA;EACE;EACA;EACA;EACA;EACA;CVmgBD;;AUjgBC;EACE;CVogBH;;AU5gBD;EAWI;CVqgBH;;AUhhBD;EAWI;CVqgBH;;AUhhBD;EAcI;CVsgBH;;AUlgBD;EACE;IAAK;GVsgBJ;CACF;;AUrgBD;EACE;IAAK;GVygBJ;CACF;;AWpjBD;;;;;;;;;;;;;;;;;GXukBG;;AW5iBH;EACE;EAAA;EACA;MAAA;EACA;EACA;MAAA;CX+iBD;;AWnjBD;EAOI;CXgjBH;;AWvjBD;EAWI;CXgjBH;;AW3jBD;EAeI;MAAA;CXgjBH;;AW/jBD;EAmBI;MAAA;MAAA;CXgjBH;;AWnkBD;EAuBI;MAAA;CXgjBH;;AWvkBD;EA2BI;MAAA;MAAA;CXgjBH;;AW3kBD;EA+BI;CXgjBH;;AW3iBO;EACF;MAAA;CX8iBL;;AW/iBO;EACF;MAAA;CXkjBL;;AWnjBO;EACF;MAAA;CXsjBL;;AWvjBO;EACF;MAAA;CX0jBL;;AW3jBO;EACF;MAAA;CX8jBL;;AW/jBO;EACF;MAAA;CXkkBL;;AWnkBO;EACF;MAAA;CXskBL;;AWvkBO;EACF;MAAA;CX0kBL;;AW3kBO;EACF;MAAA;CX8kBL;;AW/kBO;EACF;MAAA;CXklBL;;AWnlBO;EACF;MAAA;CXslBL;;AWvlBO;EACF;MAAA;CX0lBL;;AW/jBD;ECSI;EACA;CZ0jBH;;AY7nBK;EDmEF;CX8jBH;;AW5jBO;EACF;EAjCJ;CXimBD;;AW7kBD;EAkBM;CX+jBL;;AWjlBD;EAwBQ;MAAA;CX6jBP;;AWrlBD;EAwBQ;MAAA;CXikBP;;AWzlBD;EAwBQ;MAAA;CXqkBP;;AW7lBD;EAwBQ;MAAA;CXykBP;;AWjmBD;EAwBQ;MAAA;CX6kBP;;AWrmBD;EAwBQ;MAAA;CXilBP;;AWzmBD;EAwBQ;MAAA;CXqlBP;;AWtlBS;EACF;MAAA;CXylBP;;AW1lBS;EACF;MAAA;CX6lBP;;AW9lBS;EACF;MAAA;CXimBP;;AWlmBS;EACF;MAAA;CXqmBP;;AW7nBD;EAwBQ;MAAA;CXymBP;;AWjoBD;;EApBE;CX0pBD;;AWtoBD;;EApBE;CX+pBD;;AW3oBD;;EApBE;CXoqBD;;AWhpBD;;EApBE;CXyqBD;;AWrpBD;;EApBE;CX8qBD;;AWpnBS;;EA1DR;CXmrBD;;AW/pBD;;EApBE;CXwrBD;;AWpqBD;;EApBE;CX6rBD;;AWzqBD;;EApBE;CXksBD;;AW9qBD;;EApBE;CXusBD;;AWnrBD;;EApBE;CX4sBD;;AWxrBD;;EApBE;CXitBD;;AW7rBD;;EAdE;CXgtBD;;AWppBS;;EA5DR;CXqtBD;;AWzpBS;;EA5DR;CX0tBD;;AWxpBG;EACE;CX2pBL;;AWzpBS;EACF;EAlEN;CX+tBD;;AWjqBG;;EA9DF;CXouBD;;AW5pBW;;EAxEV;CXyuBD;;AW3qBG;;EA9DF;CX8uBD;;AWhrBG;;EA9DF;CXmvBD;;AWnqBW;;EAhFV;CXwvBD;;AW1rBG;;EA9DF;CX6vBD;;AW/rBG;;EA9DF;CXkwBD;;AWlrBW;;EAhFV;CXuwBD;;AWzsBG;;EA9DF;CX4wBD;;AW9sBG;;EA9DF;CXixBD;;AWjsBW;;EAhFV;CXsxBD;;AWtsBW;;EAhFV;CX2xBD;;AW7tBG;;EAxDF;CX0xBD;;AWxsBW;;EAlFV;CX+xBD;;AWvuBG;;EAxDF;CXoyBD;;AYz1BK;EDiJF;CX4sBH;;AW1sBO;EACF;EA/GJ;CX6zBD;;AWzyBD;EAgGM;CX6sBL;;AWxsBS;EACF;MAAA;CX2sBP;;AWjzBD;EAsGQ;MAAA;CX+sBP;;AWrzBD;EAsGQ;MAAA;CXmtBP;;AWzzBD;EAsGQ;MAAA;CXutBP;;AW7zBD;EAsGQ;MAAA;CX2tBP;;AWj0BD;EAsGQ;MAAA;CX+tBP;;AWr0BD;EAsGQ;MAAA;CXmuBP;;AWz0BD;EAsGQ;MAAA;CXuuBP;;AWxuBS;EACF;MAAA;CX2uBP;;AW5uBS;EACF;MAAA;CX+uBP;;AWhvBS;EACF;MAAA;CXmvBP;;AWpvBS;EACF;MAAA;CXuvBP;;AW71BD;;EApBE;CXs3BD;;AWl2BD;;EApBE;CX23BD;;AWv2BD;;EApBE;CXg4BD;;AW52BD;;EApBE;CXq4BD;;AWj3BD;;EApBE;CX04BD;;AWt3BD;;EApBE;CX+4BD;;AW33BD;;EApBE;CXo5BD;;AW5wBS;;EAxIR;CXy5BD;;AWjxBS;;EAxIR;CX85BD;;AW14BD;;EApBE;CXm6BD;;AW/4BD;;EApBE;CXw6BD;;AWp5BD;;EApBE;CX66BD;;AWz5BD;;EAdE;CX46BD;;AW95BD;;EAdE;CXi7BD;;AWvyBS;;EA1IR;CXs7BD;;AW5yBS;;EA1IR;CX27BD;;AWjzBS;;EA1IR;CXg8BD;;AWtzBS;;EA1IR;CXq8BD;;AWv7BD;;EAdE;CX08BD;;AYr/BK;ED4LA;CX6zBL;;AW3zBS;EACF;EAhJN;CX+8BD;;AWn0BG;;EA5IF;CXo9BD;;AWx0BG;;EA5IF;CXy9BD;;AWn0BW;;EAtJV;CX89BD;;AWl1BG;;EA5IF;CXm+BD;;AWv1BG;;EA5IF;CXw+BD;;AWl1BW;;EAtJV;CX6+BD;;AWj2BG;;EA5IF;CXk/BD;;AWt2BG;;EA5IF;CXu/BD;;AWz1BW;;EA9JV;CX4/BD;;AWh3BG;;EA5IF;CXigCD;;AWn2BW;;EA9JV;CXsgCD;;AWx2BW;;EA9JV;CX2gCD;;AW/3BG;;EAtIF;CX0gCD;;AWp4BG;;EAtIF;CX+gCD;;AW/2BW;;EAhKV;CXohCD;;AW94BG;;EAtIF;CXyhCD;;AWn5BG;;EAtIF;CX8hCD;;AW93BW;;EAhKV;CXmiCD;;AW75BG;;EAtIF;CXwiCD;;AY7lCK;ED+NF;CXk4BH;;AWxiCD;EAyKM;EA7LJ;CXikCD;;AWh4BO;EACF;CXm4BL;;AW93BS;EACF;MAAA;CXi4BP;;AWl4BS;EACF;MAAA;CXq4BP;;AWt4BS;EACF;MAAA;CXy4BP;;AW7jCD;EAoLQ;MAAA;CX64BP;;AWjkCD;EAoLQ;MAAA;CXi5BP;;AWrkCD;EAoLQ;MAAA;CXq5BP;;AWzkCD;EAoLQ;MAAA;CXy5BP;;AW7kCD;EAoLQ;MAAA;CX65BP;;AWjlCD;EAoLQ;MAAA;CXi6BP;;AWrlCD;EAoLQ;MAAA;CXq6BP;;AWt6BS;EACF;MAAA;CXy6BP;;AW16BS;EACF;MAAA;CX66BP;;AWv6BS;;EA9MR;CX0nCD;;AW56BS;;EA9MR;CX+nCD;;AW3mCD;;EApBE;CXooCD;;AWhnCD;;EApBE;CXyoCD;;AWrnCD;;EApBE;CX8oCD;;AWh8BS;;EA9MR;CXmpCD;;AWr8BS;;EA9MR;CXwpCD;;AW18BS;;EA9MR;CX6pCD;;AW/8BS;;EA9MR;CXkqCD;;AW9oCD;;EApBE;CXuqCD;;AWnpCD;;EApBE;CX4qCD;;AWxpCD;;EApBE;CXirCD;;AW7pCD;;EAdE;CXgrCD;;AWlqCD;;EAdE;CXqrCD;;AWvqCD;;EAdE;CX0rCD;;AW5qCD;;EAdE;CX+rCD;;AW/+BS;;EAhNR;CXosCD;;AWp/BS;;EAhNR;CXysCD;;AWz/BS;;EAhNR;CX8sCD;;AW9/BS;;EAhNR;CXmtCD;;AWrsCD;;EAdE;CXwtCD;;AW1sCD;;EAdE;CX6tCD;;AW/sCD;;EAdE;CXkuCD;;AY7wCK;EDkQA;CX+gCL;;AWhhCG;EAII;EAtNN;CXuuCD;;AW3gCW;;EA5NV;CX4uCD;;AW1hCG;;EAlNF;CXivCD;;AW/hCG;;EAlNF;CXsvCD;;AW1hCW;;EA5NV;CX2vCD;;AW/hCW;;EA5NV;CXgwCD;;AW9iCG;;EAlNF;CXqwCD;;AWziCW;;EA5NV;CX0wCD;;AWxjCG;;EAlNF;CX+wCD;;AW7jCG;;EAlNF;CXoxCD;;AWxjCW;;EA5NV;CXyxCD;;AWvkCG;;EAlNF;CX8xCD;;AW5kCG;;EAlNF;CXmyCD;;AW/jCW;;EA9NV;CXkyCD;;AWtlCG;;EA5MF;CXuyCD;;AW3lCG;;EA5MF;CX4yCD;;AW9kCW;;EA9NV;CXizCD;;AWrmCG;;EA5MF;CXszCD;;AWxlCW;;EA9NV;CX2zCD;;AW/mCG;;EA5MF;CXg0CD;;AWpnCG;;EA5MF;CXq0CD;;AWvmCW;;EA9NV;CX00CD;;AW9nCG;;EA5MF;CX+0CD;;AWnoCG;;E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;;GhB+8DG;;AgBv8DH;EACE;ChB08DD;;AgBv8DD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ChB08DD;;AgBv8DD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ChB08DD;;AgBr8DG;;EAIE;EACA;ChBs8DL;;AgBx9DD;;EAwBI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ChBq8DH;;AgBt+DD;EAsCI;ChBo8DH;;AgB1+DD;EA0CI;EACA;EACA;EACA;EACA;ChBo8DH;;AgBl/DD;EAiDM;EACA;ChBq8DL;;AgBv/DD;EAsDM;Eb7EF;EAgIF;EACA;EACA;EACA;EanDI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ChBw8DL;;AgB3gED;EA0EQ;EACA;ChBq8DP;;AgBhhED;EAiFI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ChBm8DH;;AgBj8DK;EACA;ChBo8DL;;AiB3kED;;;;;;;;;;;;;;GjB2lEG;;AiB3kEH;;;;;;;;GjBqlEG;;AMhiEH;;AAqCA;;AWzEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CjB2kED;;AiBnlED;EAYI;EACA;CjB2kEH;;AiBvkEC;ETzCA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;ES8BA;EACA;EACA;EACA;EACA;CjBmlEH;;AiB9kEC;EACE;ETtDF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CRooEH;;AiBtlED;EACE;CjBylED;;AiBrlED;EACE;CjBwlED;;AiBplED;EACE;EACA;EACA;CjBulED;;AiBnlED;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CjBklED;;AiB3mED;EA6BI;EACA;CjBklEH;;AiBhnED;EAmCI;EACA;CjBilEH;;AiB9kEC;EACE;CjBilEH;;AiB9kEgC;EAC7B;CjBilEH;;AiB9kEC;EACE;EACA;CjBilEH;;AiB9kEC;;EAEE;EACA;EACA;CjBilEH;;AiB9kEC;EACE;EACA;EACA;CjBilEH;;AiB5kED;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CjB+kED;;AiB7kE8B;;EAE3B;CjBglEH;;AiB5kEC;Ed+GA;EACA;CHi+DD;;AiB7kEC;EACE;CjBglEH;;AiB7kEC;;EAEE;CjBglEH;;AiB7kEgD;;;EAG7C;EACA;EACA;EACA;CjBglEH;;AiB7kEC;;;EAGE;CjBglEH;;AiB7kEC;EACE;EACA;CjBglEH;;AiB5kEC;EACE;EACA;EACA;EACA;EACA;EACA;EduEF;EACA;EcrEE;EACA;CjB+kEH;;AiB5kEgC;EAC7B;EACA;EACA;CjB+kEH;;AiB5kEC;EACE;CjB+kEH;;AiB1kED;EACE;EACA;EACA;EACA;EACA;EACA;CjB6kED;;AiB3kEgC;EAC7B;CjB8kEH;;AiBzkED;EACE;EACA;EACA;EdmCA;EACA;Ec5BA;CjBukED;;AiBrkEC;;EAME;CjBokEH;;AiBvlED;EAsBI;CjBqkEH;;AkBj1ED;;;;;;;;;;;;;;;;;;GlBq2EG;;AkBj1EH;;;;;;;;;ElB41EE;;AkBj1EF;EACE;EfdE;EAqKF;EACA;EACA;EACA;EexJA;EACA;EACA;EACA;EACA;EAAA;EACA;MAAA;EACA;MAAA;ClBw1ED;;AkBj2ED;EAYI;EACA;ClBy1EH;;AkBt1EG;EACA;ClBy1EH;;AkB12ED;EAqBI;ClBy1EH;;AkBp1ED;EACE;EACA;EACA;EACA;ClBu1ED;;AkBp1ED;;EAEE;EACA;EACA;EACA;EACA;EAAA;ClBu1ED;;AkBp1ED;EACE;EACA;EACA;EACA;EACA;Ef4JA;Ee1JA;EAAA;EACA;MAAA;EACA;EACA;EACA;ClBu1ED;;AkBl2ED;EAcI;EACA;ClBw1EH;;AkBv2ED;EVxCE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EUqDE;ClB+1EH;;AkB51EC;EfsCA;EACA;EACA;EACA;EevCE;EACA;EACA;EACA;EACA;MAAA;EACA;MAAA;MAAA;EACA;EACA;EACA;EACA;KAAA;MAAA;UAAA;EACA;EACA;ClBk2EH;;AkB/2EC;EAgBI;ClBm2EL;;AkB/1EG;EACE;EACA;EACA;EACA;EACA;EACA;EACA;ClBk2EL;;AkB/1EG;EACE;ClBk2EL;;AkBj4EC;EAmCI;EACA;EACA;EACA;ClBk2EL;;AkB/1EG;EACE;ClBk2EL;;AkB/1EG;EACE;EACA;EACA;EACA;ClBk2EL;;AkBh2EO;EACA;ClBm2EP;;AkB/1EG;EACE;EACA;EACA;ClBk2EL;;AkB75EC;EA+DI;EACA;ClBk2EL;;AkB/1EK;EACA;ClBk2EL;;AkB/1EK;EACA;ClBk2EL;;AkB91EC;EACE;EACA;EACA;ClBi2EH;;AmBlhFD;;;;;;;;;;;;;;GnBkiFG;;AmBlhFH;;GnBshFG;;AKtiFH;;;;;;;;;;;;;;GLsjFG;;AMj/EH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AC3JA;;AAqCA;;Aa7EA;EACE;CnBwjFD;;AmBtjFC;EACE;CnByjFH;;AmBrjFC;;EAEE;EACA;EAwCA;;;;;;MnBshFE;CACL;;AmB1kFD;;;;EAeM;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CnBkkFL;;AmBxlFD;;;;EAyBQ;EACA;EACA;CnBskFP;;AmBjmFD;;;;EAqCQ;EACA;CnBmkFP;;AmBzmFD;;EAgDM;CnB8jFL;;AmB9mFD;;;;EA8DQ;EACA;EACA;CnBujFP;;AmB3jFK;;;;EAQI;EACA;CnB0jFT;;AmB/nFD;EA4EI;EACA;CnBujFH;;AmBpoFD;;EAkFI;EXtGF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CR0pFH;;AmBppFD;;EAyFI;EACA;EACA;CnBgkFH;;AmB3pFD;;;;;;;;EAuGQ;CnB+jFP;;AmB5jFG;;;;EAEE;EACA;EACA;EACA;EACA;EACA;CnBikFL;;AmBlrFD;;;;EAqHQ;EACA;CnBokFP;;AmB1rFD;;;;;;;;;;;;;;;;;;;;;;;;EAkIQ;EACA;EACA;EACA;EACA;EACA;CnBmlFP;;AmB1tFD;;;;;;;;EA+IQ;CnBslFP;;AmBruFD;;;;;;;;EAuJQ;CnBylFP;;AmBhvFD;;EA8JI;CnBulFH;;AmB/kFS;;;;;;;;EAEF;EACA;CnBwlFP;;AmBjwFD;;;;EA4KQ;CnB4lFP;;AmBxlFS;;;;EAEF;CnB6lFP;;AmB/wFD;;;;;;;;EAwLQ;CnBkmFP;;AmBhmFa;;;;EAEN;CnBqmFP;;AmBnmFa;;;;EAEN;CnBwmFP;;AmBxyFD;;EAqMQ;CnBwmFP;;AmBtmFS;;;;EAEF;EACA;CnB2mFP;;AmBrzFD;;;;EA+MM;EACA;CnB6mFL;;AmB7zFD;;;;EAwNM;EACA;CnB4mFL;;AoBh2FD;;;;;;;;;;;;;;;;;;GpBo3FG;;AoBh2FH;EACE;EACA;CpBm2FD;;AoBh2FD;;EAEE;CpBm2FD;;AoBr2FD;;EZQE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EYTE;CpB42FH;;AqB34FD;;;;;;;;;;;;;;;;;;GrB+5FG;;AqB34FH;EbmDE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EAGA;EAGA;CRo1FD;;AqBj6FD;EbgFI;EACA;CRq1FH;;AA/+BC;EQj2DI;EACA;CRo1FL;;AqBv6FD;Eb+CE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EAGA;EAGA;CRo3FD;;AQl3FC;EACE;EACA;CRq3FH;;AAp/BC;EQ53DI;EACA;CRo3FL;;AqBn8FD;EACE;EACA;EACA;EACA;EACA;EAAA;CrBs8FD;;AqB38FD;EAQI;CrBu8FH;;AqBp8FC;EACE;EACA;EACA;EACA;EAAA;EACA;MAAA;CrBu8FH;;AqBp8FC;ElB7BE;EAgEF;EACA;EACA;EACA;EkBnCE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAAA;EACA;MAAA;EACA;MAAA;EACA;KAAA;MAAA;UAAA;EACA;EACA;EACA;EACA;CrB08FH;;AqBx8FG;EACE;EACA;EACA;CrB28FL;;AqBl+FC;EA2BI;CrB28FL;;AqBt+FC;EA+BI;CrB28FL;;AqB1+FC;EAmCI;EACA;EACA;CrB28FL;;AqBh/FC;EAwCM;CrB48FP;;AqBp/FC;EA6CI;CrB28FL;;AqBx/FC;EAiDI;EACA;CrB28FL;;AqBx8FG;EACE;EACA;EACA;EACA;EACA;CrB28FL;;AqBx8FK;EACA;CrB28FL;;AqBx8FG;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CrB08FP;;AqBx8FK;EAEE;CrB08FP;;AqBr8FC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;MAAA;CrBw8FH;;AqBh9FC;EblGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CRsjGD;;AqBx8FC;EACE;MAAA;EACA;MAAA;CrB28FH;;AqB78FC;EAKI;EACA;MAAA;CrB48FL;;AqBl9FC;EAUI;EACA;EACA;EACA;CrB48FL;;AqBz9FC;EAgBM;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CrB68FP;;AqBt+FC;EA6BM;CrB68FP;;AqB1+FC;EAiCM;CrB68FP;;AqB18FO;EACA;CrB68FP;;AqBz+FG;EAiCM;EACA;CrB48FT;;AqBv/FC;EAkDI;CrBy8FL;;AqB3/FC;EAqDM;EACA;CrB08FP;;AqB/8FG;EAQM;EACA;EACA;CrB28FT;;AqBj8FC;EAGI;EACA;CrBk8FL;;AqBt8FC;EAQI;CrBk8FL;;AqB18FC;EAYI;MAAA;EACA;EACA;EACA;CrBk8FL;;AqBj9FC;EAkBM;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CrBm8FP;;AqB59FC;EAkCM;CrB87FP;;AqB37FO;EAEA;EACA;CrB67FP;;AqBr+FC;EA4CM;EACA;CrB67FP;;AqB1+FC;EAkDQ;EACA;CrB47FT;;AqB/+FC;EAyDI;CrB07FL;;AqBn/FC;EA4DM;EACA;CrB27FP;;AqBx/FC;EAgEQ;EACA;CrB47FT;;AqBn7FC;EAEE;EACA;CrBq7FH;;AqB17FD;EAUM;MAAA;CrBo7FL;;AqB76FD;EAEI;CrB+6FH;;AqB76FC;EACE;EACA;CrBg7FH;;AqB96FK;EACA;CrBi7FL;;AqB17FD;EAaI;EACA;CrBi7FH;;AqB56FD;EACE;IACE;IACA;GrB+6FD;;EqB76FD;IACE;IACA;GrBg7FD;;EqB96FD;IACE;IACA;GrBi7FD;CACF;;AqB96FD;;;;;;;;;;ErB07FE;;AqB96FF;EACE;IAAK;GrBk7FJ;;EqBj7FD;IAAM;GrBq7FL;;EqBp7FD;IAAM;GrBw7FL;;EqBv7FD;IAAO;GrB27FN;CACF;;AqBz7FD;EACE;IAAK;GrB67FJ;;EqB57FD;IAAM;GrBg8FL;;EqB/7FD;IAAM;GrBm8FL;;EqBl8FD;IAAO;GrBs8FN;CACF;;AqBp8FD;;;;;;;;;;ErBg9FE;;AqBp8FF;EACE;IAAK;GrBw8FJ;;EqBv8FD;IAAM;GrB28FL;;EqB18FD;IAAM;GrB88FL;;EqB78FD;IAAO;GrBi9FN;CACF;;AqB/8FD;EACE;IAAK;GrBm9FJ;;EqBl9FD;IAAM;GrBs9FL;;EqBr9FD;IAAM;GrBy9FL;;EqBx9FD;IAAO;GrB49FN;CACF;;AsBt2GD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EtBg6GE;;AuB95GF;EACE;EACA;CvBi6GD;;AuBn6GD;EAKI;CvBk6GH;;AuB55GD;EAGI;CvB65GH;;AuBh6GD;EAOI;CvB65GH;;AuBp6GD;EAWI;CvB65GH;;AuB15GC;EACE;CvB65GH;;AuB56GD;EAmBI;CvB65GH;;AuBh7GD;EAuBI;CvB65GH;;AuB15GC;EACE;CvB65GH;;AuB15GC;EACE;CvB65GH;;AuB57GD;EAmCI;CvB65GH;;AuB15GC;EACE;CvB65GH;;AuBt5GD;EAEI;CvBw5GH;;AuBj5GD;EAIM;EACA;CvBi5GL;;AuBt5GD;EAUQ;EACA;CvBg5GP;;AuBv4GD;EAGI;EACA;CvBw4GH;;AuB14GC;EAKI;CvBy4GL;;AuB94GC;EASI;CvBy4GL;;AuBp5GD;EAeM;CvBy4GL;;AuBt5GC;EAiBI;CvBy4GL;;AuB15GC;EAoBM;CvB04GP;;AuBp4GC;EACE;CvBu4GH;;AuBx4GC;EAII;CvBw4GL;;AuB54GC;EAQI;CvBw4GL;;AuB56GD;EAwCM;EACA;CvBw4GL;;AuBj7GD;EA4CQ;CvBy4GP;;AuBz5GC;EAoBM;CvBy4GP;;AuBz7GD;EAoDQ;CvBy4GP;;AuB77GD;EAwDQ;CvBy4GP;;AuBj8GD;EAgEI;CvBq4GH;;AuBr8GD;EAmEM;CvBs4GL;;AuB14GC;EAQI;CvBs4GL;;AuB78GD;EA2EM;EACA;CvBs4GL;;AuBl9GD;EA+EQ;CvBu4GP;;AuBv5GC;EAoBM;CvBu4GP;;AuB19GD;EAuFQ;CvBu4GP;;AuBp4GO;EACA;CvBu4GP;;AuBl+GD;EAmGI;CvBm4GH;;AuBt+GD;EAyGI;CvBi4GH;;AuB/3GK;EACA;CvBk4GL;;AuB9+GD;;EAgHM;EACA;CvBm4GL;;AuBp/GD;EAsHI;CvBk4GH;;AuBx/GD;EAyHM;CvBm4GL;;AuBv4GC;;EAQI;EACA;CvBo4GL;;AuB93GC;;EAII;EACA;CvB+3GL;;AuBxgHD;;EAgJQ;EACA;CvB63GP;;AuB9gHD;;EAyJQ;EACA;CvB03GP;;AuBh5GC;;EA6BM;CvBw3GP;;AuB/2GC;EAGI;EACA;EAeA;EAgBA;EAGA;EA6BA;EAQA;EAOA;EA8BA;EA0BA;EAMA;EAsCA;EAkBA;CvBurGL;;AuBh4GD;EAQQ;CvB43GP;;AuBp4GD;EAYQ;CvB43GP;;AuBv4GC;EAeM;EACA;CvB43GP;;AuB74GD;EAsBQ;CvB23GP;;AuBj5GD;EA8BQ;CvBu3GP;;AuBr5GD;EAyCQ;CvBg3GP;;AuBx5GC;EA4CM;CvBg3GP;;AuB75GD;EAiDQ;CvBg3GP;;AuBj6GD;EAqDQ;CvBg3GP;;AuBr6GD;EAyDQ;CvBg3GP;;AuBz6GD;EA6DQ;CvBg3GP;;AuB76GD;EAiEQ;CvBg3GP;;AuBj7GD;EAsEQ;CvB+2GP;;AuBr7GD;EA+EQ;CvB02GP;;AuBz7GD;EAsFQ;EACA;CvBu2GP;;AuB77GC;EA0FM;EACA;CvBu2GP;;AuBn8GD;EAgGQ;EACA;CvBu2GP;;AuBx8GD;EAqGQ;EACA;CvBu2GP;;AuB58GC;EAyGM;CvBu2GP;;AuBj9GD;EA8GQ;CvBu2GP;;AuBr9GD;EAmHQ;CvBs2GP;;AuBx9GC;EA0HM;CvBk2GP;;AuB79GD;EAqIQ;CvB41GP;;AuBj+GD;EA8IQ;CvBu1GP;;AuBr+GD;;;EAsJQ;CvBq1GP;;AuB3+GD;;;EA4JQ;CvBq1GP;;AuBl1GiD;EAC1C;CvBq1GP;;AuBp/GC;;;EAqKM;EACA;CvBq1GP;;AuB3/GC;;;EA4KM;EACA;CvBq1GP;;AuBngHD;;;EAoLQ;CvBq1GP;;AuBzgHD;;;EA2LQ;CvBo1GP;;AuB/gHD;EAmMQ;CvBg1GP;;AuBnhHD;EA+MI;CvBw0GH;;AuBvhHD;EAmNI;CvBw0GH;;AuB3hHD;EAwNI;CvBu0GH;;AuBh0GD;EAGI;CvBi0GH;;AuBp0GD;EAMI;CvBk0GH;;AuBh0GmC;;EAEhC;EACA;EACA;CvBm0GH;;AuB/0GD;EAeI;CvBo0GH;;AuBn1GD;EAkBI;CvBq0GH;;AuBn0GmC;;EAEhC;CvBs0GH;;AuBp0G2C;;;EAGxC;CvBu0GH;;AuBr0G2C;EACxC;CvBw0GH;;AuBt2GD;EAiCI;CvBy0GH;;AuB12GD;EAoCI;CvB00GH;;AuBn0GD;EAGI;CvBo0GH;;AuBv0GD;EAMI;CvBq0GH;;AuBn0GkC;;EAE/B;CvBs0GH;;AuBn0GC;EACE;CvBs0GH;;AuBp0GqC;EAClC;EACA;CvBu0GH;;AuBz1GD;EAsBI;CvBu0GH;;AuB71GD;EAyBI;CvBw0GH;;AuBt0G6C;;EAE1C;CvBy0GH;;AuBt2GD;;EAkCI;CvBy0GH;;AuBt0GiC;EAC9B;CvBy0GH;;AuB/2GD;;EA0CI;CvB00GH;;AuBn0GD;EAEI;CvBq0GH;;AuBv0GD;EAKI;CvBs0GH;;AuB30GD;;EASI;CvBu0GH;;AuBp0GC;EACE;CvBu0GH;;AuBr0G+B;;EAE5B;CvBw0GH;;AuBr0G+B;;EAE5B;CvBw0GH;;AuB91GD;EA0BI;CvBw0GH;;AuBt0G4D;;EAEzD;CvBy0GH;;AuBn0GD;EAEI;CvBq0GH;;AuBv0GD;EAKI;CvBs0GH;;AuB30GD;EAQI;CvBu0GH;;AuB/0GD;EAWI;CvBw0GH;;AuBn1GD;EAcI;CvBy0GH;;AuBv0GoC;EACjC;CvB00GH;;AuB31GD;EAoBI;CvB20GH;;AuBp0GD;EAGI;CvBq0GH;;AuBx0GD;EAMI;CvBs0GH;;AuB50GD;;EAUI;CvBu0GH;;AuBj1GD;EAcI;CvBu0GH;;AuBr1GD;EAiBI;CvBw0GH;;AuBt0GuC;;EAEpC;CvBy0GH;;AuBt0GC;EACE;CvBy0GH;;AuBv0GwB;EACrB;CvB00GH;;AuBt2GD;EA+BI;EACA;CvB20GH;;AuBx0GuC;;EAEpC;CvB20GH;;AuBh3GD;EAyCI;CvB20GH;;AuBz0G8D;;EAE3D;CvB40GH;;AuBr0GD;EAGI;EACA;CvBs0GH;;AuBn0GK;EAEI;CvBq0GT;;AuB90GD;EAYU;CvBs0GT;;AuBl1GD;EAiBM;CvBq0GL;;AuBt0GG;;EAKI;CvBs0GP;;AuB30GG;;EASQ;CvBu0GX;;AuB5zGD;EAGI;CvB6zGH;;AuBh0GD;EAOI;EACA;EACA;CvB6zGH;;AuBt0GD;EAYM;CvB8zGL;;AuB10GD;;EAiBM;EACA;CvB8zGL;;AuBh1GD;;EAqBQ;CvBg0GP;;AuBr1GD;;EAyBQ;CvBi0GP;;AuB9zGO;;EACA;CvBk0GP;;AuBz1GC;EA4BI;CvBi0GL;;AuB71GC;EAgCI;CvBi0GL;;AuBv2GD;EA0CM;CvBi0GL;;AuBzzGD;EAGI;CvB0zGH;;AuB7zGD;EAOI;CvB0zGH;;AuBj0GD;EAWI;CvB0zGH;;AuBr0GD;EAcM;CvB2zGL;;AuBvzGC;EACE;CvB0zGH;;AuB70GD;EAuBI;CvB0zGH;;AuBj1GD;EA2BI;CvB0zGH;;AuBr1GD;EA+BI;CvB0zGH;;AuBz1GD;EAkCM;CvB2zGL;;AuBnzGD;EAGI;EfzyBF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CR0lIH;;AuBl0GD;EAQI;EACA;CvB8zGH;;AuBv0GD;EAYM;EACA;CvB+zGL;;AuB5zGgC;EAC7B;CvB+zGH;;AuBh1GD;;EAqBI;EACA;EACA;CvBg0GH;;AuBv1GD;EA2BI;CvBg0GH;;AuB31GD;;EA+BI;CvBi0GH;;AuBh2GD;;;;EAqCI;CvBk0GH;;AuBv2GD;EAwCI;CvBm0GH;;AuB32GD;EA2CI;CvBo0GH;;AuB/2GD;EA8CI;CvBq0GH;;AuBn3GD;EAkDI;CvBq0GH;;AuB/zGD;EACE;CvBk0GD;;AuB/zGD;EAGI;CvBg0GH;;AuBn0GD;EAMM;EACA;CvBi0GL;;AuBt0GC;;EASM;CvBk0GP;;AuB30GC;EAYM;CvBm0GP;;AuB/0GC;EAeM;EACA;CvBo0GP;;AuBt1GD;EAqBQ;CvBq0GP;;AuB11GD;EAwBU;CvBs0GT;;AuB51GC;EA2BI;CvBq0GL;;AuB7zGD;;;;EASQ;EACA;EACA;CvB2zGP;;AuBt0GD;;;;EAcU;EACA;EACA;CvB+zGT;;AuB/0GD;;;;EAmBU;EACA;CvBm0GT;;AuBv1GD;;;;EA0BU;EACA;EACA;CvBo0GT;;AuBx0GO;;;;EAOI;EACA;CvBw0GX;;AuBx2GD;;EAwCM;Ef/6BJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CRivIH;;AuBx3GD;;EA8CM;EACA;EACA;CvB+0GL;;AuB/3GD;;;;EAwDQ;CvB80GP;;AuBr0GO;;;;;;;;;;;;;;;;;;;;;;;;EAEE;CvB81GT;;AuBx1GO;;;;;;;;EAEE;CvBi2GT;;AuB56GD;;;;;;;;EAmFU;CvBo2GT;;AuBv7GD;;EA0FM;CvBk2GL;;AuB57GD;;;;EAkGQ;CvBi2GP;;AuBn8GD;;;;EAyGQ;CvBi2GP;;AuBx1GD;EAKM;EACA;CvBu1GL;;AuB31GC;EAOM;CvBw1GP;;AuB/1GC;EAUM;CvBy1GP;;AuBn2GC;EAaM;CvB01GP;;AuBz2GD;EAkBQ;EACA;EACA;CvB21GP;;AuB/2GD;EAuBU;CvB41GT;;AuBn3GD;EA2BQ;CvB41GP;;AuBr3GC;EA6BQ;CvB41GT;;AuBz3GC;EAmCI;EACA;CvB01GL;;AuBh4GD;EAgDQ;CvBo1GP;;AuBp4GD;EAmDU;CvBq1GT;;AuBx4GD;EAuDQ;CvBq1GP;;AuB54GD;EAkEQ;CvB80GP;;AuBh5GD;EAqEU;CvB+0GT;;AuBp5GD;EAyEQ;CvB+0GP;;AuBx5GD;EAkFM;EACA;CvB00GL;;AuBn0GG;EACE;EACA;CvBs0GL;;AuBl6GD;EA+FQ;CvBu0GP;;AuBt6GD;EAmGM;EACA;CvBu0GL;;AsB76ID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EtBu+IE;;AwBr+IF;EACE;EACA;CxBw+ID;;AwB1+ID;EAII;CxB0+IH;;AwBr+ID;EAGI;CxBs+IH;;AwBn+IC;EACE;CxBs+IH;;AwBn+IC;EACE;CxBs+IH;;AwBj/ID;EAeI;CxBs+IH;;AwBn+IC;EACE;CxBs+IH;;AwBz/ID;EAuBI;CxBs+IH;;AwB7/ID;EA2BI;CxBs+IH;;AwBn+IC;EACE;CxBs+IH;;AwBn+IC;EACE;CxBs+IH;;AwBzgJD;EAuCI;CxBs+IH;;AwBh+ID;EAEI;CxBk+IH;;AwB39ID;EAIM;EACA;CxB29IL;;AwB/9IC;EASM;EACA;CxB09IP;;AwBj9ID;EAGI;EACA;CxBk9IH;;AwBt9ID;EAOM;CxBm9IL;;AwB19ID;EAWM;CxBm9IL;;AwB59IC;EAaI;CxBm9IL;;AwBl+ID;EAmBM;CxBm9IL;;AwBt+ID;EAsBQ;CxBo9IP;;AwB1+ID;EA6BI;CxBi9IH;;AwB9+ID;EAgCM;CxBk9IL;;AwBl/ID;EAoCM;CxBk9IL;;AwB19IC;EAYI;EACA;CxBk9IL;;AwB3/ID;EA4CQ;CxBm9IP;;AwB//ID;EAgDQ;CxBm9IP;;AwBv+IC;EAwBM;CxBm9IP;;AwBvgJD;EAwDQ;CxBm9IP;;AwB58IC;EACE;CxB+8IH;;AwBh9IC;EAII;CxBg9IL;;AwBnhJD;EAuEM;CxBg9IL;;AwBx9IC;EAYI;EACA;CxBg9IL;;AwB5hJD;EA+EQ;CxBi9IP;;AwBhiJD;EAmFQ;CxBi9IP;;AwBr+IC;EAwBM;CxBi9IP;;AwBxiJD;EA2FQ;CxBi9IP;;AwB18IC;EACE;CxB68IH;;AwBx8IC;EACE;CxB28IH;;AwBpjJD;EA4GM;CxB48IL;;AwBh9IC;;EAQI;EACA;CxB68IL;;AwB9jJD;EAsHI;CxB48IH;;AwB18IK;EACA;CxB68IL;;AwBtkJD;;EA6HM;EACA;CxB88IL;;AwB5kJD;;EAwIM;EACA;CxBy8IL;;AwBllJD;;EAgJQ;EACA;CxBu8IP;;AwBp9IC;;EAqBM;EACA;CxBo8IP;;AwB9lJD;;EAiKQ;CxBk8IP;;AwBz7ID;EAKM;EACA;EAeA;EAmBA;EA8BA;EAQA;EAOA;EA8BA;EA0BA;EAMA;EAsCA;EAkBA;CxB6vIL;;AwBt8IC;EAOM;CxBm8IP;;AwB58ID;EAaQ;CxBm8IP;;AwBh9ID;EAiBQ;EACA;CxBm8IP;;AwBr9ID;EAuBQ;CxBk8IP;;AwBv9IC;EA+BM;CxB47IP;;AwB79ID;EA2CQ;CxBs7IP;;AwB/9IC;EA6CM;CxBs7IP;;AwBr+ID;EAmDQ;CxBs7IP;;AwBz+ID;EAuDQ;CxBs7IP;;AwB7+ID;EA2DQ;CxBs7IP;;AwBj/ID;EA+DQ;CxBs7IP;;AwBr/ID;EAmEQ;CxBs7IP;;AwBv/IC;EAsEM;CxBq7IP;;AwB3/IC;EA+EM;CxBg7IP;;AwBjgJD;EAwFQ;EACA;CxB66IP;;AwBpgJC;EA2FM;EACA;CxB66IP;;AwB3gJD;EAkGQ;EACA;CxB66IP;;AwBhhJD;EAuGQ;EACA;CxB66IP;;AwBrhJD;EA4GQ;CxB66IP;;AwBzhJD;EAgHQ;CxB66IP;;AwB7hJD;EAqHQ;CxB46IP;;AwBjiJD;EA6HQ;CxBw6IP;;AwBriJD;EAuIQ;CxBk6IP;;AwBziJD;EAgJQ;CxB65IP;;AwB7iJD;;;EAwJQ;CxB25IP;;AwBnjJD;;;EA8JQ;CxB25IP;;AwBx5IiD;EAC1C;CxB25IP;;AwB7jJD;;;EAwKQ;EACA;CxB25IP;;AwBpkJD;;;EA+KQ;EACA;CxB25IP;;AwBzkJC;;;EAoLM;CxB25IP;;AwBjlJD;;;EA6LQ;CxB05IP;;AwBvlJD;EAqMQ;CxBs5IP;;AwB3lJD;EAiNI;CxB84IH;;AwB/lJD;EAqNI;CxB84IH;;AwBnmJD;EA0NI;CxB64IH;;AwBt4ID;EAGI;CxBu4IH;;AwB14ID;EAMI;CxBw4IH;;AwBt4ImC;;EAEhC;EACA;EACA;CxBy4IH;;AwBv4IC;EACE;CxB04IH;;AwBx4IC;EACE;CxB24IH;;AwBz4ImC;;EAEhC;CxB44IH;;AwBl6ID;;;EA2BI;CxB64IH;;AwBx6ID;EA8BI;CxB84IH;;AwB56ID;EAiCI;CxB+4IH;;AwBh7ID;EAoCI;CxBg5IH;;AwBz4ID;EAGI;CxB04IH;;AwB74ID;EAMI;CxB24IH;;AwBz4IkC;;EAE/B;CxB44IH;;AwBz4IC;EACE;CxB44IH;;AwB14IqC;EAClC;EACA;CxB64IH;;AwB/5ID;EAsBI;CxB64IH;;AwBn6ID;EAyBI;CxB84IH;;AwB54I6C;;EAE1C;CxB+4IH;;AwB56ID;;EAkCI;CxB+4IH;;AwB54IiC;EAC9B;CxB+4IH;;AwBr7ID;;EA0CI;CxBg5IH;;AwBz4ID;EAEI;CxB24IH;;AwB74ID;EAKI;CxB44IH;;AwBj5ID;;EASI;CxB64IH;;AwB14IC;EACE;CxB64IH;;AwB34I+B;;EAE5B;CxB84IH;;AwB/5ID;;EAsBI;CxB84IH;;AwB34I8B;EAC3B;CxB84IH;;AwBx6ID;;EA8BI;CxB+4IH;;AwBz4ID;EAEI;CxB24IH;;AwB74ID;EAKI;CxB44IH;;AwBj5ID;EAQI;CxB64IH;;AwB34I6B;EAC1B;CxB84IH;;AwBz5ID;EAcI;CxB+4IH;;AwB75ID;EAiBI;CxBg5IH;;AwBj6ID;EAoBI;CxBi5IH;;AwB14ID;EAGI;CxB24IH;;AwB94ID;EAMI;CxB44IH;;AwB14IuC;;EAEpC;CxB64IH;;AwBv5ID;EAcI;CxB64IH;;AwB35ID;EAiBI;CxB84IH;;AwB/5ID;;EAqBI;CxB+4IH;;AwB54IC;EACE;CxB+4IH;;AwB74IwB;EACrB;CxBg5IH;;AwB56ID;EA+BI;EACA;CxBi5IH;;AwB94IuC;;EAEpC;CxBi5IH;;AwB94I+B;EAC5B;CxBi5IH;;AwB/4I8D;;EAE3D;CxBk5IH;;AwB14ID;EAGI;EACA;CxB24IH;;AwBx4IK;EAEI;CxB04IT;;AwB54IK;EAMI;CxB04IT;;AwBv5ID;EAmBM;CxBw4IL;;AwBz4IG;;EAKI;CxBy4IP;;AwBh6ID;;EA2BY;CxB04IX;;AwBh4ID;EAGI;CxBi4IH;;AwBp4ID;EAOI;EACA;EACA;CxBi4IH;;AwB14ID;EAYM;CxBk4IL;;AwB94ID;;EAiBM;EACA;CxBk4IL;;AwBp5ID;;EAqBQ;CxBo4IP;;AwBz5ID;;EAyBQ;CxBq4IP;;AwBl4IO;;EACA;CxBs4IP;;AwB75IC;EA4BI;CxBq4IL;;AwBv6ID;EAsCM;CxBq4IL;;AwBr6IC;EAoCI;CxBq4IL;;AwB73IC;EACE;CxBg4IH;;AwB73IC;EACE;CxBg4IH;;AwB73IC;EACE;CxBg4IH;;AwBj4IC;EAII;CxBi4IL;;AwB94ID;EAkBI;CxBg4IH;;AwBl5ID;EAsBI;CxBg4IH;;AwBt5ID;EA0BI;CxBg4IH;;AwB15ID;EA8BI;CxBg4IH;;AwB95ID;EAiCM;CxBi4IL;;AwBz3ID;EAGI;EhBzyBF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CRgqKH;;AwBj4IC;EACE;EACA;CxBo4IH;;AwB74ID;EAYM;EACA;CxBq4IL;;AwBl5ID;EAiBI;CxBq4IH;;AwBt5ID;;EAqBI;EACA;EACA;CxBs4IH;;AwB75ID;EA2BI;CxBs4IH;;AwBj6ID;;EA+BI;CxBu4IH;;AwBt6ID;;;;EAqCI;CxBw4IH;;AwB76ID;EAwCI;CxBy4IH;;AwBj7ID;EA2CI;CxB04IH;;AwBr7ID;EA8CI;CxB24IH;;AwBz7ID;EAkDI;CxB24IH;;AwBp4ID;EACE;CxBu4ID;;AwBp4ID;EAGI;CxBq4IH;;AwBx4ID;EAMM;EACA;CxBs4IL;;AwB34IC;;EASM;CxBu4IP;;AwBl5ID;EAcQ;CxBw4IP;;AwBp5IC;EAeM;EACA;CxBy4IP;;AwB35ID;EAqBQ;CxB04IP;;AwB/5ID;EAwBU;CxB24IT;;AwBj6IC;EA2BI;CxB04IL;;AwBl4ID;;;;EASQ;EACA;EACA;CxBg4IP;;AwB34ID;;;;EAcU;EACA;EACA;CxBo4IT;;AwBp5ID;;;;EAmBU;EACA;CxBw4IT;;AwBp4IO;;;;EAEE;EACA;EACA;CxBy4IT;;AwB74IO;;;;EAOI;EACA;CxB64IX;;AwB76ID;;EAwCM;EhBh7BJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CRuzKH;;AwB77ID;;EA8CM;EACA;EACA;CxBo5IL;;AwBp8ID;;;;EAwDQ;CxBm5IP;;AwB38ID;;;;;;;;;;;;;;;;;;;;;;;;EAmEU;CxBm6IT;;AwB75IO;;;;;;;;EAEE;CxBs6IT;;AwBj/ID;;;;;;;;EAmFU;CxBy6IT;;AwB5/ID;;EA0FM;CxBu6IL;;AwBjgJD;;;;EAkGQ;CxBs6IP;;AwBxgJD;;;;EAyGQ;CxBs6IP;;AwB55ID;EAKM;EACA;CxB25IL;;AwB/5IC;EAOM;CxB45IP;;AwBr6ID;EAYQ;CxB65IP;;AwBv6IC;EAaM;CxB85IP;;AwB36IC;EAgBM;EACA;EACA;CxB+5IP;;AwBn7ID;EAuBU;CxBg6IT;;AwBv7ID;EA2BQ;CxBg6IP;;AwBz7IC;EA6BQ;CxBg6IT;;AwB77IC;EAmCI;EACA;CxB85IL;;AwBp8ID;EAgDQ;CxBw5IP;;AwBx8ID;EAmDU;CxBy5IT;;AwBt5IK;EACE;CxBy5IP;;AwBh9ID;EAkEQ;CxBk5IP;;AwBp9ID;EAqEU;CxBm5IT;;AwBh5IK;EACE;CxBm5IP;;AwB59ID;EAkFM;EACA;CxB84IL;;AwBv4IG;EACE;EACA;CxB04IL;;AwBt+ID;EA+FQ;CxB24IP;;AwB1+ID;EAmGM;EACA;CxB24IL","file":"mdl-ext-eqjs.css","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n    $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ==========  TYPOGRAPHY  ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n   page loading. For important text, such as the body, we want it to load\n   immediately and not wait for the web font load, whereas for other sections,\n   such as headers and titles, we're OK with things taking a bit longer to load.\n   We do have some optional classes and parameters in the mixins, in case you\n   definitely want to make sure you're using the preferred font and don't mind\n   the performance hit.\n   We should be able to improve on this once CSS Font Loading L3 becomes more\n   widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ==========  COLORS  ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ==========  IMAGES  ========== */\n$image_path: '/images' !default;\n\n/* ==========  Color & Themes  ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n  $color-primary: '$color-primary';\n  $color-primary-dark: '$color-primary-dark';\n  $color-accent: '$color-accent';\n  $color-primary-contrast: '$color-primary-contrast';\n  $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ==========  Typography  ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ==========  Components  ========== */\n\n/* ==========  Standard Buttons  ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ==========  Icon Toggles  ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ==========  Radio Buttons  ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ==========  Ripple effect  ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ==========  Layout  ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ==========  Content Tabs  ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ==========  Checkboxes  ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ==========  Switches  ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ==========  Spinner  ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ==========  Text fields  ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ==========  Card  ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ==========  Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ==========  List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ==========  Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ==========  Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ==========  Tooltips  ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ==========  Footer  ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n    strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px  !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_variables.scss","@charset \"UTF-8\";\n\n// Material Design Lite\n@import '~material-design-lite/src/variables';\n@import '~material-design-lite/src/mixins';\n\n// mdl-ext\n@import 'mdl-ext-eqjs';\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/mdl-ext-eqjs-build.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* ==========  Color Palettes  ========== */\n\n// Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200,\n// A400, A700.\n\n$palette-red:\n\"255,235,238\"\n\"255,205,210\"\n\"239,154,154\"\n\"229,115,115\"\n\"239,83,80\"\n\"244,67,54\"\n\"229,57,53\"\n\"211,47,47\"\n\"198,40,40\"\n\"183,28,28\"\n\"255,138,128\"\n\"255,82,82\"\n\"255,23,68\"\n\"213,0,0\";\n\n$palette-red-50: nth($palette-red, 1);\n$palette-red-100: nth($palette-red, 2);\n$palette-red-200: nth($palette-red, 3);\n$palette-red-300: nth($palette-red, 4);\n$palette-red-400: nth($palette-red, 5);\n$palette-red-500: nth($palette-red, 6);\n$palette-red-600: nth($palette-red, 7);\n$palette-red-700: nth($palette-red, 8);\n$palette-red-800: nth($palette-red, 9);\n$palette-red-900: nth($palette-red, 10);\n$palette-red-A100: nth($palette-red, 11);\n$palette-red-A200: nth($palette-red, 12);\n$palette-red-A400: nth($palette-red, 13);\n$palette-red-A700: nth($palette-red, 14);\n\n$palette-pink:\n\"252,228,236\"\n\"248,187,208\"\n\"244,143,177\"\n\"240,98,146\"\n\"236,64,122\"\n\"233,30,99\"\n\"216,27,96\"\n\"194,24,91\"\n\"173,20,87\"\n\"136,14,79\"\n\"255,128,171\"\n\"255,64,129\"\n\"245,0,87\"\n\"197,17,98\";\n\n$palette-pink-50: nth($palette-pink, 1);\n$palette-pink-100: nth($palette-pink, 2);\n$palette-pink-200: nth($palette-pink, 3);\n$palette-pink-300: nth($palette-pink, 4);\n$palette-pink-400: nth($palette-pink, 5);\n$palette-pink-500: nth($palette-pink, 6);\n$palette-pink-600: nth($palette-pink, 7);\n$palette-pink-700: nth($palette-pink, 8);\n$palette-pink-800: nth($palette-pink, 9);\n$palette-pink-900: nth($palette-pink, 10);\n$palette-pink-A100: nth($palette-pink, 11);\n$palette-pink-A200: nth($palette-pink, 12);\n$palette-pink-A400: nth($palette-pink, 13);\n$palette-pink-A700: nth($palette-pink, 14);\n\n$palette-purple:\n\"243,229,245\"\n\"225,190,231\"\n\"206,147,216\"\n\"186,104,200\"\n\"171,71,188\"\n\"156,39,176\"\n\"142,36,170\"\n\"123,31,162\"\n\"106,27,154\"\n\"74,20,140\"\n\"234,128,252\"\n\"224,64,251\"\n\"213,0,249\"\n\"170,0,255\";\n\n$palette-purple-50: nth($palette-purple, 1);\n$palette-purple-100: nth($palette-purple, 2);\n$palette-purple-200: nth($palette-purple, 3);\n$palette-purple-300: nth($palette-purple, 4);\n$palette-purple-400: nth($palette-purple, 5);\n$palette-purple-500: nth($palette-purple, 6);\n$palette-purple-600: nth($palette-purple, 7);\n$palette-purple-700: nth($palette-purple, 8);\n$palette-purple-800: nth($palette-purple, 9);\n$palette-purple-900: nth($palette-purple, 10);\n$palette-purple-A100: nth($palette-purple, 11);\n$palette-purple-A200: nth($palette-purple, 12);\n$palette-purple-A400: nth($palette-purple, 13);\n$palette-purple-A700: nth($palette-purple, 14);\n\n$palette-deep-purple:\n\"237,231,246\"\n\"209,196,233\"\n\"179,157,219\"\n\"149,117,205\"\n\"126,87,194\"\n\"103,58,183\"\n\"94,53,177\"\n\"81,45,168\"\n\"69,39,160\"\n\"49,27,146\"\n\"179,136,255\"\n\"124,77,255\"\n\"101,31,255\"\n\"98,0,234\";\n\n$palette-deep-purple-50: nth($palette-deep-purple, 1);\n$palette-deep-purple-100: nth($palette-deep-purple, 2);\n$palette-deep-purple-200: nth($palette-deep-purple, 3);\n$palette-deep-purple-300: nth($palette-deep-purple, 4);\n$palette-deep-purple-400: nth($palette-deep-purple, 5);\n$palette-deep-purple-500: nth($palette-deep-purple, 6);\n$palette-deep-purple-600: nth($palette-deep-purple, 7);\n$palette-deep-purple-700: nth($palette-deep-purple, 8);\n$palette-deep-purple-800: nth($palette-deep-purple, 9);\n$palette-deep-purple-900: nth($palette-deep-purple, 10);\n$palette-deep-purple-A100: nth($palette-deep-purple, 11);\n$palette-deep-purple-A200: nth($palette-deep-purple, 12);\n$palette-deep-purple-A400: nth($palette-deep-purple, 13);\n$palette-deep-purple-A700: nth($palette-deep-purple, 14);\n\n$palette-indigo:\n\"232,234,246\"\n\"197,202,233\"\n\"159,168,218\"\n\"121,134,203\"\n\"92,107,192\"\n\"63,81,181\"\n\"57,73,171\"\n\"48,63,159\"\n\"40,53,147\"\n\"26,35,126\"\n\"140,158,255\"\n\"83,109,254\"\n\"61,90,254\"\n\"48,79,254\";\n\n$palette-indigo-50: nth($palette-indigo, 1);\n$palette-indigo-100: nth($palette-indigo, 2);\n$palette-indigo-200: nth($palette-indigo, 3);\n$palette-indigo-300: nth($palette-indigo, 4);\n$palette-indigo-400: nth($palette-indigo, 5);\n$palette-indigo-500: nth($palette-indigo, 6);\n$palette-indigo-600: nth($palette-indigo, 7);\n$palette-indigo-700: nth($palette-indigo, 8);\n$palette-indigo-800: nth($palette-indigo, 9);\n$palette-indigo-900: nth($palette-indigo, 10);\n$palette-indigo-A100: nth($palette-indigo, 11);\n$palette-indigo-A200: nth($palette-indigo, 12);\n$palette-indigo-A400: nth($palette-indigo, 13);\n$palette-indigo-A700: nth($palette-indigo, 14);\n\n$palette-blue:\n\"227,242,253\"\n\"187,222,251\"\n\"144,202,249\"\n\"100,181,246\"\n\"66,165,245\"\n\"33,150,243\"\n\"30,136,229\"\n\"25,118,210\"\n\"21,101,192\"\n\"13,71,161\"\n\"130,177,255\"\n\"68,138,255\"\n\"41,121,255\"\n\"41,98,255\";\n\n$palette-blue-50: nth($palette-blue, 1);\n$palette-blue-100: nth($palette-blue, 2);\n$palette-blue-200: nth($palette-blue, 3);\n$palette-blue-300: nth($palette-blue, 4);\n$palette-blue-400: nth($palette-blue, 5);\n$palette-blue-500: nth($palette-blue, 6);\n$palette-blue-600: nth($palette-blue, 7);\n$palette-blue-700: nth($palette-blue, 8);\n$palette-blue-800: nth($palette-blue, 9);\n$palette-blue-900: nth($palette-blue, 10);\n$palette-blue-A100: nth($palette-blue, 11);\n$palette-blue-A200: nth($palette-blue, 12);\n$palette-blue-A400: nth($palette-blue, 13);\n$palette-blue-A700: nth($palette-blue, 14);\n\n$palette-light-blue:\n\"225,245,254\"\n\"179,229,252\"\n\"129,212,250\"\n\"79,195,247\"\n\"41,182,246\"\n\"3,169,244\"\n\"3,155,229\"\n\"2,136,209\"\n\"2,119,189\"\n\"1,87,155\"\n\"128,216,255\"\n\"64,196,255\"\n\"0,176,255\"\n\"0,145,234\";\n\n$palette-light-blue-50: nth($palette-light-blue, 1);\n$palette-light-blue-100: nth($palette-light-blue, 2);\n$palette-light-blue-200: nth($palette-light-blue, 3);\n$palette-light-blue-300: nth($palette-light-blue, 4);\n$palette-light-blue-400: nth($palette-light-blue, 5);\n$palette-light-blue-500: nth($palette-light-blue, 6);\n$palette-light-blue-600: nth($palette-light-blue, 7);\n$palette-light-blue-700: nth($palette-light-blue, 8);\n$palette-light-blue-800: nth($palette-light-blue, 9);\n$palette-light-blue-900: nth($palette-light-blue, 10);\n$palette-light-blue-A100: nth($palette-light-blue, 11);\n$palette-light-blue-A200: nth($palette-light-blue, 12);\n$palette-light-blue-A400: nth($palette-light-blue, 13);\n$palette-light-blue-A700: nth($palette-light-blue, 14);\n\n$palette-cyan:\n\"224,247,250\"\n\"178,235,242\"\n\"128,222,234\"\n\"77,208,225\"\n\"38,198,218\"\n\"0,188,212\"\n\"0,172,193\"\n\"0,151,167\"\n\"0,131,143\"\n\"0,96,100\"\n\"132,255,255\"\n\"24,255,255\"\n\"0,229,255\"\n\"0,184,212\";\n\n$palette-cyan-50: nth($palette-cyan, 1);\n$palette-cyan-100: nth($palette-cyan, 2);\n$palette-cyan-200: nth($palette-cyan, 3);\n$palette-cyan-300: nth($palette-cyan, 4);\n$palette-cyan-400: nth($palette-cyan, 5);\n$palette-cyan-500: nth($palette-cyan, 6);\n$palette-cyan-600: nth($palette-cyan, 7);\n$palette-cyan-700: nth($palette-cyan, 8);\n$palette-cyan-800: nth($palette-cyan, 9);\n$palette-cyan-900: nth($palette-cyan, 10);\n$palette-cyan-A100: nth($palette-cyan, 11);\n$palette-cyan-A200: nth($palette-cyan, 12);\n$palette-cyan-A400: nth($palette-cyan, 13);\n$palette-cyan-A700: nth($palette-cyan, 14);\n\n$palette-teal:\n\"224,242,241\"\n\"178,223,219\"\n\"128,203,196\"\n\"77,182,172\"\n\"38,166,154\"\n\"0,150,136\"\n\"0,137,123\"\n\"0,121,107\"\n\"0,105,92\"\n\"0,77,64\"\n\"167,255,235\"\n\"100,255,218\"\n\"29,233,182\"\n\"0,191,165\";\n\n$palette-teal-50: nth($palette-teal, 1);\n$palette-teal-100: nth($palette-teal, 2);\n$palette-teal-200: nth($palette-teal, 3);\n$palette-teal-300: nth($palette-teal, 4);\n$palette-teal-400: nth($palette-teal, 5);\n$palette-teal-500: nth($palette-teal, 6);\n$palette-teal-600: nth($palette-teal, 7);\n$palette-teal-700: nth($palette-teal, 8);\n$palette-teal-800: nth($palette-teal, 9);\n$palette-teal-900: nth($palette-teal, 10);\n$palette-teal-A100: nth($palette-teal, 11);\n$palette-teal-A200: nth($palette-teal, 12);\n$palette-teal-A400: nth($palette-teal, 13);\n$palette-teal-A700: nth($palette-teal, 14);\n\n$palette-green:\n\"232,245,233\"\n\"200,230,201\"\n\"165,214,167\"\n\"129,199,132\"\n\"102,187,106\"\n\"76,175,80\"\n\"67,160,71\"\n\"56,142,60\"\n\"46,125,50\"\n\"27,94,32\"\n\"185,246,202\"\n\"105,240,174\"\n\"0,230,118\"\n\"0,200,83\";\n\n$palette-green-50: nth($palette-green, 1);\n$palette-green-100: nth($palette-green, 2);\n$palette-green-200: nth($palette-green, 3);\n$palette-green-300: nth($palette-green, 4);\n$palette-green-400: nth($palette-green, 5);\n$palette-green-500: nth($palette-green, 6);\n$palette-green-600: nth($palette-green, 7);\n$palette-green-700: nth($palette-green, 8);\n$palette-green-800: nth($palette-green, 9);\n$palette-green-900: nth($palette-green, 10);\n$palette-green-A100: nth($palette-green, 11);\n$palette-green-A200: nth($palette-green, 12);\n$palette-green-A400: nth($palette-green, 13);\n$palette-green-A700: nth($palette-green, 14);\n\n$palette-light-green:\n\"241,248,233\"\n\"220,237,200\"\n\"197,225,165\"\n\"174,213,129\"\n\"156,204,101\"\n\"139,195,74\"\n\"124,179,66\"\n\"104,159,56\"\n\"85,139,47\"\n\"51,105,30\"\n\"204,255,144\"\n\"178,255,89\"\n\"118,255,3\"\n\"100,221,23\";\n\n$palette-light-green-50: nth($palette-light-green, 1);\n$palette-light-green-100: nth($palette-light-green, 2);\n$palette-light-green-200: nth($palette-light-green, 3);\n$palette-light-green-300: nth($palette-light-green, 4);\n$palette-light-green-400: nth($palette-light-green, 5);\n$palette-light-green-500: nth($palette-light-green, 6);\n$palette-light-green-600: nth($palette-light-green, 7);\n$palette-light-green-700: nth($palette-light-green, 8);\n$palette-light-green-800: nth($palette-light-green, 9);\n$palette-light-green-900: nth($palette-light-green, 10);\n$palette-light-green-A100: nth($palette-light-green, 11);\n$palette-light-green-A200: nth($palette-light-green, 12);\n$palette-light-green-A400: nth($palette-light-green, 13);\n$palette-light-green-A700: nth($palette-light-green, 14);\n\n$palette-lime:\n\"249,251,231\"\n\"240,244,195\"\n\"230,238,156\"\n\"220,231,117\"\n\"212,225,87\"\n\"205,220,57\"\n\"192,202,51\"\n\"175,180,43\"\n\"158,157,36\"\n\"130,119,23\"\n\"244,255,129\"\n\"238,255,65\"\n\"198,255,0\"\n\"174,234,0\";\n\n$palette-lime-50: nth($palette-lime, 1);\n$palette-lime-100: nth($palette-lime, 2);\n$palette-lime-200: nth($palette-lime, 3);\n$palette-lime-300: nth($palette-lime, 4);\n$palette-lime-400: nth($palette-lime, 5);\n$palette-lime-500: nth($palette-lime, 6);\n$palette-lime-600: nth($palette-lime, 7);\n$palette-lime-700: nth($palette-lime, 8);\n$palette-lime-800: nth($palette-lime, 9);\n$palette-lime-900: nth($palette-lime, 10);\n$palette-lime-A100: nth($palette-lime, 11);\n$palette-lime-A200: nth($palette-lime, 12);\n$palette-lime-A400: nth($palette-lime, 13);\n$palette-lime-A700: nth($palette-lime, 14);\n\n$palette-yellow:\n\"255,253,231\"\n\"255,249,196\"\n\"255,245,157\"\n\"255,241,118\"\n\"255,238,88\"\n\"255,235,59\"\n\"253,216,53\"\n\"251,192,45\"\n\"249,168,37\"\n\"245,127,23\"\n\"255,255,141\"\n\"255,255,0\"\n\"255,234,0\"\n\"255,214,0\";\n\n$palette-yellow-50: nth($palette-yellow, 1);\n$palette-yellow-100: nth($palette-yellow, 2);\n$palette-yellow-200: nth($palette-yellow, 3);\n$palette-yellow-300: nth($palette-yellow, 4);\n$palette-yellow-400: nth($palette-yellow, 5);\n$palette-yellow-500: nth($palette-yellow, 6);\n$palette-yellow-600: nth($palette-yellow, 7);\n$palette-yellow-700: nth($palette-yellow, 8);\n$palette-yellow-800: nth($palette-yellow, 9);\n$palette-yellow-900: nth($palette-yellow, 10);\n$palette-yellow-A100: nth($palette-yellow, 11);\n$palette-yellow-A200: nth($palette-yellow, 12);\n$palette-yellow-A400: nth($palette-yellow, 13);\n$palette-yellow-A700: nth($palette-yellow, 14);\n\n$palette-amber:\n\"255,248,225\"\n\"255,236,179\"\n\"255,224,130\"\n\"255,213,79\"\n\"255,202,40\"\n\"255,193,7\"\n\"255,179,0\"\n\"255,160,0\"\n\"255,143,0\"\n\"255,111,0\"\n\"255,229,127\"\n\"255,215,64\"\n\"255,196,0\"\n\"255,171,0\";\n\n$palette-amber-50: nth($palette-amber, 1);\n$palette-amber-100: nth($palette-amber, 2);\n$palette-amber-200: nth($palette-amber, 3);\n$palette-amber-300: nth($palette-amber, 4);\n$palette-amber-400: nth($palette-amber, 5);\n$palette-amber-500: nth($palette-amber, 6);\n$palette-amber-600: nth($palette-amber, 7);\n$palette-amber-700: nth($palette-amber, 8);\n$palette-amber-800: nth($palette-amber, 9);\n$palette-amber-900: nth($palette-amber, 10);\n$palette-amber-A100: nth($palette-amber, 11);\n$palette-amber-A200: nth($palette-amber, 12);\n$palette-amber-A400: nth($palette-amber, 13);\n$palette-amber-A700: nth($palette-amber, 14);\n\n$palette-orange:\n\"255,243,224\"\n\"255,224,178\"\n\"255,204,128\"\n\"255,183,77\"\n\"255,167,38\"\n\"255,152,0\"\n\"251,140,0\"\n\"245,124,0\"\n\"239,108,0\"\n\"230,81,0\"\n\"255,209,128\"\n\"255,171,64\"\n\"255,145,0\"\n\"255,109,0\";\n\n$palette-orange-50: nth($palette-orange, 1);\n$palette-orange-100: nth($palette-orange, 2);\n$palette-orange-200: nth($palette-orange, 3);\n$palette-orange-300: nth($palette-orange, 4);\n$palette-orange-400: nth($palette-orange, 5);\n$palette-orange-500: nth($palette-orange, 6);\n$palette-orange-600: nth($palette-orange, 7);\n$palette-orange-700: nth($palette-orange, 8);\n$palette-orange-800: nth($palette-orange, 9);\n$palette-orange-900: nth($palette-orange, 10);\n$palette-orange-A100: nth($palette-orange, 11);\n$palette-orange-A200: nth($palette-orange, 12);\n$palette-orange-A400: nth($palette-orange, 13);\n$palette-orange-A700: nth($palette-orange, 14);\n\n$palette-deep-orange:\n\"251,233,231\"\n\"255,204,188\"\n\"255,171,145\"\n\"255,138,101\"\n\"255,112,67\"\n\"255,87,34\"\n\"244,81,30\"\n\"230,74,25\"\n\"216,67,21\"\n\"191,54,12\"\n\"255,158,128\"\n\"255,110,64\"\n\"255,61,0\"\n\"221,44,0\";\n\n$palette-deep-orange-50: nth($palette-deep-orange, 1);\n$palette-deep-orange-100: nth($palette-deep-orange, 2);\n$palette-deep-orange-200: nth($palette-deep-orange, 3);\n$palette-deep-orange-300: nth($palette-deep-orange, 4);\n$palette-deep-orange-400: nth($palette-deep-orange, 5);\n$palette-deep-orange-500: nth($palette-deep-orange, 6);\n$palette-deep-orange-600: nth($palette-deep-orange, 7);\n$palette-deep-orange-700: nth($palette-deep-orange, 8);\n$palette-deep-orange-800: nth($palette-deep-orange, 9);\n$palette-deep-orange-900: nth($palette-deep-orange, 10);\n$palette-deep-orange-A100: nth($palette-deep-orange, 11);\n$palette-deep-orange-A200: nth($palette-deep-orange, 12);\n$palette-deep-orange-A400: nth($palette-deep-orange, 13);\n$palette-deep-orange-A700: nth($palette-deep-orange, 14);\n\n\n// Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900.\n\n$palette-brown:\n\"239,235,233\"\n\"215,204,200\"\n\"188,170,164\"\n\"161,136,127\"\n\"141,110,99\"\n\"121,85,72\"\n\"109,76,65\"\n\"93,64,55\"\n\"78,52,46\"\n\"62,39,35\";\n\n$palette-brown-50: nth($palette-brown, 1);\n$palette-brown-100: nth($palette-brown, 2);\n$palette-brown-200: nth($palette-brown, 3);\n$palette-brown-300: nth($palette-brown, 4);\n$palette-brown-400: nth($palette-brown, 5);\n$palette-brown-500: nth($palette-brown, 6);\n$palette-brown-600: nth($palette-brown, 7);\n$palette-brown-700: nth($palette-brown, 8);\n$palette-brown-800: nth($palette-brown, 9);\n$palette-brown-900: nth($palette-brown, 10);\n\n$palette-grey:\n\"250,250,250\"\n\"245,245,245\"\n\"238,238,238\"\n\"224,224,224\"\n\"189,189,189\"\n\"158,158,158\"\n\"117,117,117\"\n\"97,97,97\"\n\"66,66,66\"\n\"33,33,33\";\n\n$palette-grey-50: nth($palette-grey, 1);\n$palette-grey-100: nth($palette-grey, 2);\n$palette-grey-200: nth($palette-grey, 3);\n$palette-grey-300: nth($palette-grey, 4);\n$palette-grey-400: nth($palette-grey, 5);\n$palette-grey-500: nth($palette-grey, 6);\n$palette-grey-600: nth($palette-grey, 7);\n$palette-grey-700: nth($palette-grey, 8);\n$palette-grey-800: nth($palette-grey, 9);\n$palette-grey-900: nth($palette-grey, 10);\n\n$palette-blue-grey:\n\"236,239,241\"\n\"207,216,220\"\n\"176,190,197\"\n\"144,164,174\"\n\"120,144,156\"\n\"96,125,139\"\n\"84,110,122\"\n\"69,90,100\"\n\"55,71,79\"\n\"38,50,56\";\n\n$palette-blue-grey-50: nth($palette-blue-grey, 1);\n$palette-blue-grey-100: nth($palette-blue-grey, 2);\n$palette-blue-grey-200: nth($palette-blue-grey, 3);\n$palette-blue-grey-300: nth($palette-blue-grey, 4);\n$palette-blue-grey-400: nth($palette-blue-grey, 5);\n$palette-blue-grey-500: nth($palette-blue-grey, 6);\n$palette-blue-grey-600: nth($palette-blue-grey, 7);\n$palette-blue-grey-700: nth($palette-blue-grey, 8);\n$palette-blue-grey-800: nth($palette-blue-grey, 9);\n$palette-blue-grey-900: nth($palette-blue-grey, 10);\n\n$color-black: \"0,0,0\";\n$color-white: \"255,255,255\";\n\n\n/* colors.scss */\n$styleguide-generate-template: false !default;\n\n// The two possible colors for overlayed text.\n$color-dark-contrast: $color-white !default;\n$color-light-contrast: $color-black !default;\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_color-definitions.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@function strip-units($number) {\n  @return $number / ($number * 0 + 1);\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_functions.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n  @if $usePreferred {\n    font-family: $preferred_font;\n  }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 112px;\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: -0.04em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 56px;\n  font-weight: 400;\n  line-height: 1.35;\n  letter-spacing: -0.02em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 45px;\n  font-weight: 400;\n  line-height: 48px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 34px;\n  font-weight: 400;\n  line-height: 40px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 24px;\n  font-weight: 400;\n  line-height: 32px;\n  -moz-osx-font-smoothing: grayscale;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 20px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0.02em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 28px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  @if $usePreferred {\n    font-weight: 500;\n  } @else {\n    font-weight: bold;\n  }\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  position: relative;\n  font-size: 24px;\n  font-weight: 300;\n  font-style: italic;\n  line-height: 1.35;\n  letter-spacing: 0.08em;\n\n  &:before {\n    position: absolute;\n    left: -0.5em;\n    content: '“';\n  }\n\n  &:after {\n    content: '”';\n    margin-left: -0.05em;\n  }\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  text-transform: uppercase;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-icon() {\n  font-family: 'Material Icons';\n  font-weight: normal;\n  font-style: normal;\n  font-size: 24px;\n  line-height: 1;\n  letter-spacing: normal;\n  text-transform: none;\n  display: inline-block;\n  word-wrap: normal;\n  font-feature-settings: 'liga';\n  -webkit-font-feature-settings: 'liga';\n  -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n  box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0  6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0  8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n  box-shadow: 0  9px 46px  8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 24px 38px  3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n  @if(type_of($units) != 'number') {\n    @error \"The unit given to dialog-width should be a number.\";\n  }\n  // 56dp is the base unit width for Dialogs.\n  // With 5 units being the number of units for a mobile device.\n  // https://goo.gl/sK2O5o\n  width: $units * 56px;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_mixins.scss","@charset \"UTF-8\";\n\n/**\n * Element Queries are a new way of writing CSS styles so the rules apply to individual elements\n * on the page, instead of to the whole page as one document like in regular CSS Media Queries.\n * This SASS file includes the eq.js, https://github.com/Snugug/eq.js, prolyfill which is an easy to use\n * drop-in solution to JavaScript powered element queries. It works well with SASS,\n * and element queries work without requireing a server to run.\n *\n * Feel fre to write your own element query stylesheet using one of the other libraries, e.g:\n *   [EQCSS]               - (https://github.com/eqcss/eqcss)\n *   [CSS Element Queries] - (https://github.com/marcj/css-element-queries)\n *   [BoomQueries]         - (https://github.com/BoomTownROI/boomqueries)\n */\n\n// eq.js mixins\n@import '~eq.js/sass/eq';\n\n// Configuration and helpers\n@import 'variables';\n@import 'mixins';\n@import 'functions';\n\n// Components\n@import 'aria-expanded-toggle/aria-expanded-toggle';\n@import 'sticky-header/sticky-header';\n@import 'dialog/dialog';\n@import 'grid/grid-eqjs';\n@import 'lightboard/lightboard';\n@import 'lightboard/lightboard-eqjs';\n@import 'lightbox/lightbox';\n@import 'carousel/carousel';\n@import 'selectfield/selectfield';\n@import 'menu-button/menu-button';\n@import 'bordered-fields/bordered-fields';\n@import 'collapsible/collapsible';\n@import 'accordion/accordion';\n@import 'color-themes/light-color-theme';\n@import 'color-themes/dark-color-theme';\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/mdl-ext-eqjs.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"functions\";\n\n// ----------------------------------------------------------------\n// Sample colors\n// ----------------------------------------------------------------\n$mdlext-palette-amber-50:                         #FFF8E1;\n$mdlext-palette-amber-100:                        #FFECB3;\n$mdlext-palette-amber-500:                        #FFC107;\n$mdlext-palette-amber-700:                        #FFA000;\n$mdlext-palette-blue-grey-500:                    #607D8B;\n$mdlext-palette-deep-orange-500:                  #FF5722;\n$mdlext-palette-deep-purple-100:                  #D1C4E9;\n$mdlext-palette-deep-purple-500:                  #512DA8;\n$mdlext-palette-deep-purple-700:                  #673AB7;\n$mdlext-palette-green-50:                         #E8F5E9;\n$mdlext-palette-green-100:                        #C8E6C9;\n$mdlext-palette-green-500:                        #4CAF50;\n$mdlext-palette-green-700:                        #388E3C;\n$mdlext-palette-grey-50:                          #FAFAFA;\n$mdlext-palette-grey-100:                         #F5F5F5;\n$mdlext-palette-grey-200:                         #EEEEEE;\n$mdlext-palette-grey-300:                         #E0E0E0;\n$mdlext-palette-grey-400:                         #BDBDBD;\n$mdlext-palette-grey-500:                         #9E9E9E;\n$mdlext-palette-grey-600:                         #757575;\n$mdlext-palette-grey-700:                         #616161;\n$mdlext-palette-grey-800:                         #424242;\n$mdlext-palette-grey-900:                         #212121;\n$mdlext-palette-indigo-A200:                      #536DFE;\n$mdlext-palette-light-blue-500:                   #03A9F4;\n$mdlext-palette-light-green-500:                  #8BC34A;\n$mdlext-palette-pink-500:                         #E91E63;\n$mdlext-palette-pink-700:                         #C2185B;\n$mdlext-palette-pink-A400:                        #F50057;\n$mdlext-palette-purple-A200:                      #E040FB;\n$mdlext-palette-red-700:                          #D32F2F;\n$mdlext-palette-red-A200:                         #FF5252;\n$mdlext-palette-red-A400:                         #FF1744;\n$mdlext-palette-yellow-500:                       #FFEB3B;\n$mdlext-color-black:                              #000000;\n$mdlext-color-white:                              #FFFFFF;\n\n\n/* ==========   Sticky Header   ========== */\n$mdlext-sticky-header-background-color           : transparent !default;\n$mdlext-sticky-header-background-color-scroll    : transparent !default;\n$mdlext-sticky-header-gradient-color             : rgb-string-to-hex($color-primary) !default;\n$mdlext-sticky-header-gradient-color-start       : $mdlext-sticky-header-gradient-color !default;\n$mdlext-sticky-header-gradient-color-end         : $mdlext-sticky-header-gradient-color-start !default;\n$mdlext-sticky-header-gradient-color-scroll-start: rgba($mdlext-sticky-header-gradient-color, 0.98) !default;\n$mdlext-sticky-header-gradient-color-scroll-end  : rgba($mdlext-sticky-header-gradient-color, 0.95) !default;\n\n// Background shorthand\n/* stylelint-disable */\n$mdlext-sticky-header-background                 : $mdlext-sticky-header-background-color\n                                                   linear-gradient(to bottom,\n                                                      $mdlext-sticky-header-gradient-color-start 0,\n                                                      $mdlext-sticky-header-gradient-color-end 100%) !default;\n\n// Background shorthand when content is scrolling\n$mdlext-sticky-header-background-scroll          : $mdlext-sticky-header-background-color-scroll\n                                                   linear-gradient(to bottom,\n                                                      $mdlext-sticky-header-gradient-color-scroll-start 100%,\n                                                      $mdlext-sticky-header-gradient-color-scroll-end 100%) !default;\n/* stylelint-enable */\n\n/* ==========     Accordion     ========== */\n$mdlext-accordion-header-background-color-base   : $mdlext-palette-grey-500 !default;\n$mdlext-accordion-header-background-color        : rgba($mdlext-accordion-header-background-color-base, 0.20) !default;\n$mdlext-accordion-header-background-open-color   : rgba($mdlext-accordion-header-background-color-base, 0.30) !default;\n$mdlext-accordion-header-background-active-color : rgba($mdlext-accordion-header-background-color-base, 0.40) !default;\n$mdlext-accordion-header-border-color            : rgba($mdlext-accordion-header-background-color-base, 0.50) !default;\n$mdlext-accordion-header-background-hover-color  : rgba($mdlext-accordion-header-background-color-base, 0.40) !default;\n$mdlext-accordion-header-focus-outline-color     : invert !default;\n$mdlext-accordion-header-disabled-color          : rgba($mdlext-accordion-header-background-color-base, 0.12) !default;\n$mdlext-accordion-header-secondary-color         : $mdlext-color-black !default;\n$mdlext-accordion-header-secondary-color-disabled: rgba($mdlext-color-black, 0.26) !default;\n$mdlext-accordion-header-highlight-color         : darken($mdlext-accordion-header-border-color, 3%) !default;\n$mdlext-accordion-ripple-color                   : rgba(rgb-string-to-hex($color-accent-contrast), 0.5) !default;\n$mdlext-accordion-header-padding                 : 8px !default;\n$mdlext-accordion-header-height                  : 56px !default;\n$mdlext-accordion-content-padding                : $mdlext-accordion-header-padding !default;\n$mdlext-accordion-content-color                  : inherit !default;\n$mdlext-accordion-content-background-color       : transparent !default;\n\n\n/* ==========     Dialog     ========== */\n$mdlext-dialog-padding           : 0;\n$mdlext-dialog-background-color  : transparent !default;\n$mdlext-dialog-backdrop-color    : rgba(0, 0, 0, 0.86) !default;\n$mdlext-dialog-open-animation    : 0.5s 0.2s forwards !default;\n$mdlext-dialog-backdrop-animation: 0.2s forwards !default;\n\n\n/* ==========     Lightbox     ========== */\n$mdlext-lightbox-background-color           : $card-background-color !default;\n$mdlext-lightbox-border                     : 0 !default;\n$mdlext-lightbox-border-radius              : 0 !default;\n$mdlext-lightbox-figure-margin              : 0 !default;\n$mdlext-lightbox-figure-padding             : 0 !default;\n$mdlext-lightbox-figcaption-background-color: rgba(255, 255, 255, 0.76) !default;\n$mdlext-lightbox-footer-background-color    : rgba(255, 255, 255, 0.86) !default;\n\n\n/* ==========  Lightboard  ========== */\n$mdlext-lightboard-medium-small-breakpoint     : $grid-tablet-breakpoint !default;          // 480\n$mdlext-lightboard-medium-breakpoint           : $grid-tablet-breakpoint + 180px !default;  // 480 + 180\n$mdlext-lightboard-medium-large-breakpoint     : $grid-desktop-breakpoint !default;         // 840\n$mdlext-lightboard-large-breakpoint            : $grid-desktop-breakpoint + 360px !default; // 840+360\n\n$mdlext-lightboard-small-gutter                : 2px !default;\n$mdlext-lightboard-small-margin                : 0 !default;\n$mdlext-lightboard-small-columns               : 2 !default;\n$mdlext-lightboard-small-frame-width           : 8px !default;\n\n$mdlext-lightboard-medium-small-gutter         : 4px !default;\n$mdlext-lightboard-medium-small-margin         : 0 !default;\n$mdlext-lightboard-medium-small-columns        : 4 !default;\n$mdlext-lightboard-medium-small-frame-width    : 8px !default;\n\n$mdlext-lightboard-medium-gutter               : 4px !default;\n$mdlext-lightboard-medium-margin               : 0 !default;\n$mdlext-lightboard-medium-columns              : 5 !default;\n$mdlext-lightboard-medium-frame-width          : 8px !default;\n\n$mdlext-lightboard-medium-large-gutter         : 8px !default;\n$mdlext-lightboard-medium-large-margin         : 0 !default;\n$mdlext-lightboard-medium-large-columns        : 6 !default;\n$mdlext-lightboard-medium-large-frame-width    : 12px !default;\n\n$mdlext-lightboard-large-gutter                : 8px !default;\n$mdlext-lightboard-large-margin                : 0 !default;\n$mdlext-lightboard-large-columns               : 7 !default;\n$mdlext-lightboard-large-frame-width           : 12px !default;\n\n$mdlext-lightboard-slide-max-size              : 250px !default;\n$mdlext-lightboard-slide-border-color          : #D8D8D8 !default;\n$mdlext-lightboard-slide-background-color      : #F8F8F8 !default;\n$mdlext-lightboard-slide-border-radius         : 5px !default;\n$mdlext-lightboard-slide-inner-border-radius   : 3px !default;\n$mdlext-lightboard-slide-box-shadow            : 2px 2px 6px -1px rgba(219, 215, 219, 0.5) !default;\n$mdlext-lightboard-slide-border-color-hover    : #B8B8B8 !default;\n$mdlext-lightboard-slide-background-color-hover: #E8E8E8 !default;\n$mdlext-lightboard-slide-active-bacground-color: #E8E8E8 !default;\n$mdlext-lightboard-slide-box-shadow-hover      : 2px 2px 12px -1px rgba(219, 215, 219, 1) !default;\n$mdlext-lightboard-ripple-color                : $tab-highlight-color !default;\n$mdlext-lightboard-focus-outline-color         : inherit !default;\n$mdlext-lightboard-figcaption-text-color       : rgb-string-to-hex($palette-grey-400) !default;\n\n\n/* ==========  Carousel  ========== */\n$mdlext-carousel-slide-border-top-width        : 2px !default;\n$mdlext-carousel-slide-border-top-color        : rgb-string-to-hex($color-accent) !default;\n$mdlext-carousel-slide-margin-horizontal       : 0;\n$mdlext-carousel-slide-figcaption-color        : $mdlext-lightboard-figcaption-text-color !default;\n$mdlext-carousel-slide-ripple-color            : $mdlext-lightboard-ripple-color !default;\n\n\n/* ==========  Bordered fields  ========== */\n$mdlext-bordered-field-vertical-spacing-top           : 0 !default;\n$mdlext-bordered-field-vertical-spacing-bottom        : $input-text-vertical-spacing !default;\n\n$mdlext-bordered-field-input-text-font-size           : $input-text-font-size !default;\n$mdlext-bordered-field-font-weight                    : normal !default;\n$mdlext-bordered-field-border-width                   : 1px !default;\n$mdlext-bordered-field-border-radius                  : 3px !default;\n$mdlext-bordered-field-padding                        : $input-text-padding + 4px !default;\n$mdlext-bordered-field-padding-top                    : $input-text-vertical-spacing !default;\n$mdlext-bordered-field-padding-bottom                 : $input-text-padding !default;\n\n$mdlext-bordered-field-input-text-color               : inherit !default;\n$mdlext-bordered-field-border-color                   : rgba($mdlext-color-black, 0.26) !default;\n$mdlext-bordered-field-background-color               : rgba(#FFFFFF, 0.2) !default;\n$mdlext-bordered-field-focus-border-color             : rgb-string-to-hex($color-primary) !default;\n$mdlext-bordered-field-focus-background-color         : rgba(#EEEEEE, 0.2) !default;\n\n$mdlext-bordered-field-input-text-disabled-text-color : rgba($mdlext-color-black, 0.12) !default;\n$mdlext-bordered-field-disabled-border-color          : rgba($mdlext-color-black, 0.12) !default;\n$mdlext-bordered-field-disabled-background-color      : $mdlext-bordered-field-background-color !default;\n\n$mdlext-bordered-field-input-text-error-color         : $mdlext-bordered-field-input-text-color !default;\n$mdlext-bordered-field-error-border-color             : rgb-string-to-hex($input-text-error-color) !default;\n$mdlext-bordered-field-error-background-color         : rgba(lighten($mdlext-bordered-field-error-border-color, 50%), 0.5) !default;\n$mdlext-bordered-field-error-focus-border-color       : darken($mdlext-bordered-field-error-border-color, 10%) !default;\n$mdlext-bordered-field-error-focus-background-color   : $mdlext-bordered-field-error-background-color !default;\n\n$mdlext-bordered-field-input-text-label-color         : rgba($mdlext-color-black, 0.26) !default;\n$mdlext-bordered-field-input-text-label-focus-color   : $mdlext-bordered-field-focus-border-color !default;\n$mdlext-bordered-field-input-text-label-error-color   : $mdlext-bordered-field-error-border-color !default;\n$mdlext-bordered-field-input-text-label-disabled-color: rgba($mdlext-color-black, 0.12) !default;\n\n$mdlext-bordered-field-label-font-size                : $mdlext-bordered-field-input-text-font-size !default;\n$mdlext-bordered-field-floating-label-font-size       : $input-text-floating-label-fontsize !default;\n$mdlext-bordered-field-floating-label-font-weight     : normal !default;\n\n$mdlext-bordered-field-height                         : $mdlext-bordered-field-padding-top + $mdlext-bordered-field-padding-bottom + $mdlext-bordered-field-input-text-font-size + 6px !default;\n$mdlext-bordered-field-floating-label-focus-bottom    : $mdlext-bordered-field-height - $mdlext-bordered-field-floating-label-font-size - $mdlext-bordered-field-padding-top/2 !default;\n\n\n// MDL can not handle required attribute properly. Planned for MDL-v2\n//$mdlext-bordered-field-required-border-color          : rgba(rgb-string-to-hex($color-accent), 0.8) !default;\n//$mdlext-bordered-field-required-background-color      : $mdlext-bordered-field-background-color !default;\n//$mdlext-bordered-field-required-focus-border-color    : rgba(rgb-string-to-hex($color-accent), 0.8) !default;\n//$mdlext-bordered-field-required-focus-background-color: $mdlext-bordered-field-background-color !default;\n//$mdlext-bordered-field-label-required-color           : $mdlext-bordered-field-required-border-color !default;\n\n\n\n/* ==========  Color Themes  ========== */\n\n// ----------------------------------------------------------------\n// Light Color Theme.\n// ----------------------------------------------------------------\n$mdlext-light-color-primary:                      #4CAF50 !default;\n$mdlext-light-color-primary-dark:                 #388E3C !default;\n$mdlext-light-color-primary-light:                #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast:             #C8E6C9 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:                       #E040FB !default;\n$mdlext-light-color-accent-light:                 #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:              #FAFAFA !default;\n\n$mdlext-light-content-background-color:           #FAFAFA !default;                         // background color on content (paper/card) background\n$mdlext-light-text-color-primary:                 rgba($mdlext-color-black, 0.87) !default; // text color on content (paper/card) background\n$mdlext-light-text-color-secondary:               rgba($mdlext-color-black, 0.54) !default; // text color on content (paper/card) background\n$mdlext-light-text-color-disabled:                rgba($mdlext-color-black, 0.38) !default; // disabled text, hint text, and icons\n$mdlext-light-divider-color:                      rgba($mdlext-color-black, 0.12) !default; // -> $card-border-color\n$mdlext-light-error-color:                        #D32F2F !default;\n\n// Anchor\n$mdlext-light-text-link-color:                    $mdlext-light-color-accent !default;\n\n// Card\n$mdlext-light-card-background-color:              $mdlext-light-content-background-color !default;\n$mdlext-light-card-text-color:                    $mdlext-light-text-color-primary !default;\n$mdlext-light-card-image-placeholder-color:       $mdlext-light-color-accent !default;\n$mdlext-light-card-supporting-text-text-color:    rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-card-border-color:                  rgba(0, 0, 0, 0.1) !default;\n$mdlext-light-card-subtitle-color:                rgba($mdlext-color-black, 0.54) !default;\n\n//  Item\n\n// Default Item Colors\n$mdlext-light-default-item-text-color:            rgba($mdlext-color-black, 0.87) !default;\n$mdlext-light-default-item-outline-color:         $mdlext-palette-grey-400 !default;\n$mdlext-light-default-item-hover-bg-color:        $mdlext-palette-grey-200 !default;\n$mdlext-light-default-item-focus-bg-color:        $mdlext-palette-grey-200 !default;\n$mdlext-light-default-item-active-bg-color:       $mdlext-palette-grey-300 !default;\n$mdlext-light-default-item-divider-color:         rgba($mdlext-color-black, 0.12) !default;\n\n// Disabled Button Colors\n$mdlext-light-disabled-item-text-color:           $mdlext-palette-grey-400 !default;\n\n// Dropdown menu / menu-button\n$mdlext-light-default-dropdown-bg-color:          $mdlext-color-white !default;\n\n// Badge\n$mdlext-light-badge-color:                        $mdlext-light-color-accent-contrast !default;\n$mdlext-light-badge-color-inverse:                $mdlext-light-color-accent !default;\n$mdlext-light-badge-background:                   $mdlext-light-color-accent !default;\n$mdlext-light-badge-background-inverse:           $mdlext-light-color-accent-contrast !default;\n\n// Default button colors.\n$mdlext-light-button-primary-color:               rgba($mdlext-palette-grey-500, 0.20) !default;\n$mdlext-light-button-secondary-color:             $mdlext-color-black !default;\n$mdlext-light-button-hover-color:                 $mdlext-light-button-primary-color !default;\n$mdlext-light-button-active-color:                rgba($mdlext-palette-grey-500, 0.40) !default;\n$mdlext-light-button-focus-color:                 rgba($mdlext-color-black, 0.12) !default;\n\n// Colored button colors.\n$mdlext-light-button-primary-color-alt:           $mdlext-light-color-primary-light !default;\n$mdlext-light-button-secondary-color-alt:         $mdlext-light-color-primary-contrast !default;\n$mdlext-light-button-hover-color-alt:             darken($mdlext-light-color-primary-light, 10%) !default;\n$mdlext-light-button-active-color-alt:            darken($mdlext-light-color-primary-light, 10%) !default;\n$mdlext-light-button-focus-color-alt:             $mdlext-light-button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$mdlext-light-button-ripple-color-alt:            $mdlext-light-color-primary-contrast !default;\n\n// Disabled button colors.\n$mdlext-light-button-primary-color-disabled:      rgba($mdlext-color-black, 0.12) !default;\n$mdlext-light-button-secondary-color-disabled:    rgba($mdlext-color-black, 0.26) !default;\n\n// FAB colors and sizes.\n$mdlext-light-button-fab-color-alt:               $mdlext-light-color-accent !default;\n$mdlext-light-button-fab-hover-color-alt:         $mdlext-light-color-accent !default;\n$mdlext-light-button-fab-active-color-alt:        $mdlext-light-color-accent !default;\n$mdlext-light-button-fab-text-color-alt:          $mdlext-light-color-accent-contrast !default;\n$mdlext-light-button-fab-ripple-color-alt:        $mdlext-light-color-accent-contrast !default;\n\n// Slider\n$mdlext-light-range-bg-color:                     rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-range-color:                        $mdlext-light-color-accent-light !default;\n$mdlext-light-range-faded-color:                  rgba($mdlext-light-color-accent-light, 0.26) !default;\n$mdlext-light-range-bg-focus-color:               rgba($mdlext-color-black, 0.12) !default;\n\n// Textfields\n$mdlext-light-input-text-background-color:        transparent !default;\n$mdlext-light-input-text-label-color:             rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-input-text-bottom-border-color:     rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-input-text-highlight-color:         $mdlext-light-color-accent-light !default;\n$mdlext-light-input-text-disabled-color:          rgba($mdlext-color-black, 0.12) !default;\n$mdlext-light-input-text-disabled-text-color:     rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-input-text-error-color:             $mdlext-light-error-color !default;\n\n// Checkboxes\n$mdlext-light-checkbox-color:                     $mdlext-light-color-accent-light !default;\n$mdlext-light-checkbox-off-color:                 rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-checkbox-disabled-color:            rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-checkbox-focus-color:               rgba($mdlext-light-color-accent-light, 0.26) !default;\n\n// Icon Toggles\n$mdlext-light-icon-toggle-color:                  $mdlext-palette-grey-700 !default;\n$mdlext-light-icon-toggle-focus-color:            $mdlext-light-button-focus-color !default;\n$mdlext-light-icon-toggle-checked-color:          $mdlext-light-color-accent-light !default;\n$mdlext-light-icon-toggle-checked-focus-color:    rgba($mdlext-light-color-accent-light, 0.26) !default;\n$mdlext-light-icon-toggle-disabled-color:         rgba($mdlext-color-black, 0.26) !default;\n\n// Radio Buttons\n$mdlext-light-radio-color:                        $mdlext-light-color-accent-light !default;\n$mdlext-light-radio-off-color:                    rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-radio-disabled-color:               rgba($mdlext-color-black, 0.26) !default;\n\n// Switches\n$mdlext-light-switch-color:                       $mdlext-light-color-accent-light !default;\n$mdlext-light-switch-faded-color:                 rgba($mdlext-light-color-accent-light, 0.26) !default;\n$mdlext-light-switch-thumb-color:                 $mdlext-light-switch-color !default;\n$mdlext-light-switch-track-color:                 rgba($mdlext-light-color-accent-light, 0.54) !default;\n$mdlext-light-switch-off-thumb-color:             $mdlext-palette-grey-50 !default;\n$mdlext-light-switch-off-track-color:             rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-switch-disabled-thumb-color:        $mdlext-palette-grey-400 !default;\n$mdlext-light-switch-disabled-track-color:        rgba($mdlext-color-black, 0.12) !default;\n\n// Data table\n$mdlext-light-data-table-background-color:               $mdlext-light-content-background-color !default;\n$mdlext-light-data-table-header-color:                   rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-data-table-header-sorted-color:            rgba($mdlext-color-black, 0.87) !default;\n$mdlext-light-data-table-header-sorted-icon-hover-color: rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-data-table-hover-color:                    $mdlext-palette-grey-200 !default;\n$mdlext-light-data-table-selection-color:                $mdlext-palette-grey-200 !default;\n$mdlext-light-data-table-divider-color:                  rgba($mdlext-color-black, 0.12) !default;\n$mdlext-light-data-table-dividers:                       1px solid $mdlext-light-data-table-divider-color !default;\n\n\n// Selectfield\n// Uses variables from textfield\n$mdlext-selectfield-arrow-width: 0.7em;\n$mdlext-selectfield-arrow-length: 0.5em;\n\n\n// Accordion\n$mdlext-light-accordion-header-background-color-base   : $mdlext-palette-grey-600 !default;\n$mdlext-light-accordion-header-background-color        : rgba($mdlext-light-accordion-header-background-color-base, 0.20) !default;\n$mdlext-light-accordion-header-background-open-color   : rgba($mdlext-light-accordion-header-background-color-base, 0.30) !default;\n$mdlext-light-accordion-header-background-active-color : rgba($mdlext-light-accordion-header-background-color-base, 0.40) !default;\n$mdlext-light-accordion-header-border-color            : rgba($mdlext-light-accordion-header-background-color-base, 0.50) !default;\n$mdlext-light-accordion-header-background-hover-color  : rgba($mdlext-light-accordion-header-background-color-base, 0.40) !default;\n$mdlext-light-accordion-header-focus-outline-color     : darken($mdlext-light-accordion-header-border-color, 3%) !default;\n$mdlext-light-accordion-header-disabled-color          : rgba($mdlext-light-accordion-header-background-color-base, 0.12) !default;\n$mdlext-light-accordion-header-secondary-color         : $mdlext-color-black !default;\n$mdlext-light-accordion-header-secondary-color-disabled: rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-accordion-header-highlight-color         : darken($mdlext-light-accordion-header-border-color, 6%) !default;\n$mdlext-light-accordion-ripple-color                   : rgba($mdlext-light-accordion-header-background-color-base, 0.4) !default;\n$mdlext-light-accordion-content-color                  : inherit !default;\n$mdlext-light-accordion-content-background-color       : transparent !default;\n\n\n// Bordered fields\n$mdlext-light-bordered-field-input-text-color               : inherit !default;\n$mdlext-light-bordered-field-border-color                   : $mdlext-light-input-text-bottom-border-color !default;\n$mdlext-light-bordered-field-background-color               : rgba($mdlext-light-content-background-color, 0.1) !default;\n$mdlext-light-bordered-field-focus-border-color             : $mdlext-light-color-accent-light !default;\n$mdlext-light-bordered-field-focus-background-color         : rgba(darken($mdlext-light-bordered-field-background-color, 10%), 0.1) !default;\n\n$mdlext-light-bordered-field-input-text-disabled-text-color : $mdlext-light-input-text-disabled-text-color;\n$mdlext-light-bordered-field-disabled-border-color          : $mdlext-light-input-text-disabled-color !default;\n$mdlext-light-bordered-field-disabled-background-color      : $mdlext-light-bordered-field-background-color !default;\n\n$mdlext-light-bordered-field-input-text-error-color         : $mdlext-light-bordered-field-input-text-color !default;\n$mdlext-light-bordered-field-error-border-color             : $mdlext-light-input-text-error-color !default;\n$mdlext-light-bordered-field-error-background-color         : rgba(lighten($mdlext-light-bordered-field-error-border-color, 50%), 0.5) !default;\n$mdlext-light-bordered-field-error-focus-border-color       : darken($mdlext-light-bordered-field-error-border-color, 10%) !default;\n$mdlext-light-bordered-field-error-focus-background-color   : $mdlext-light-bordered-field-error-background-color !default;\n\n$mdlext-light-bordered-field-input-text-label-color         : $mdlext-light-input-text-label-color !default;\n$mdlext-light-bordered-field-input-text-label-focus-color   : $mdlext-light-bordered-field-focus-border-color !default;\n$mdlext-light-bordered-field-input-text-label-error-color   : $mdlext-light-bordered-field-error-border-color !default;\n$mdlext-light-bordered-field-input-text-label-disabled-color: $mdlext-light-input-text-disabled-text-color !default;\n\n\n\n// ----------------------------------------------------------------\n// Dark Color Theme.\n// ----------------------------------------------------------------\n$mdlext-dark-color-primary:                       #FFC107 !default;\n$mdlext-dark-color-primary-dark:                  #FFA000 !default;\n$mdlext-dark-color-primary-light:                 #FFC107 !default;             // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-dark-color-primary-contrast:              #FFF8E1 !default;             // text color on primary/primary dark background\n$mdlext-dark-color-accent:                        #536DFE !default;\n$mdlext-dark-color-accent-light:                  #536DFE !default;             // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-dark-color-accent-contrast:               #FFFFFF !default;\n\n$mdlext-dark-content-background-color:            #303030 !default;             // #424242 or #303030, background color on content (paper/card) background\n$mdlext-dark-text-color-primary:                  rgba(#FFFFFF, 1.00) !default; // text color on content (paper/card) background\n$mdlext-dark-text-color-secondary:                rgba(#FFFFFF, 0.70) !default; // text color on content (paper/card) background\n$mdlext-dark-text-color-disabled:                 rgba(#FFFFFF, 0.50) !default; // disabled text, hint text, and icons\n$mdlext-dark-divider-color:                       rgba(#FFFFFF, 0.12) !default; // -> $card-border-color\n$mdlext-dark-error-color:                         #FF1744 !default;\n\n// Anchor\n$mdlext-dark-text-link-color:                     $mdlext-dark-color-accent !default;\n\n// Card\n$mdlext-dark-card-background-color:               $mdlext-dark-content-background-color !default;\n$mdlext-dark-card-text-color:                     $mdlext-dark-text-color-primary !default;\n$mdlext-dark-card-image-placeholder-color:        $mdlext-dark-color-accent !default;\n$mdlext-dark-card-supporting-text-text-color:     rgba($mdlext-color-white, 0.70) !default;\n$mdlext-dark-card-border-color:                   rgba(0, 0, 0, 0.1) !default;\n$mdlext-dark-card-subtitle-color:                 rgba($mdlext-color-black, 0.70) !default;\n\n//  Item\n\n// Default Item Colors\n$mdlext-dark-default-item-text-color:             rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-default-item-outline-color:          $mdlext-palette-grey-700 !default;\n$mdlext-dark-default-item-hover-bg-color:         $mdlext-palette-grey-900 !default;\n$mdlext-dark-default-item-focus-bg-color:         $mdlext-palette-grey-900 !default;\n$mdlext-dark-default-item-active-bg-color:        $mdlext-palette-grey-800 !default;\n$mdlext-dark-default-item-divider-color:          rgba($mdlext-color-white, 0.20) !default;\n\n// Disabled Button Colors\n$mdlext-dark-disabled-item-text-color:            $mdlext-palette-grey-500 !default;\n\n// Dropdown menu / menu-button\n$mdlext-dark-default-dropdown-bg-color:           $mdlext-color-black !default;\n\n// Badge\n$mdlext-dark-badge-color:                         $mdlext-dark-color-accent-contrast !default;\n$mdlext-dark-badge-color-inverse:                 $mdlext-dark-color-accent !default;\n$mdlext-dark-badge-background:                    $mdlext-dark-color-accent !default;\n$mdlext-dark-badge-background-inverse:            $mdlext-dark-color-accent-contrast !default;\n\n// Default button colors.\n$mdlext-dark-button-primary-color:                rgba($mdlext-palette-grey-500, 0.20) !default;\n$mdlext-dark-button-secondary-color:              $mdlext-color-white !default;\n$mdlext-dark-button-hover-color:                  $mdlext-dark-button-primary-color !default;\n$mdlext-dark-button-active-color:                 rgba($mdlext-palette-grey-500, 0.40) !default;\n$mdlext-dark-button-focus-color:                  rgba($mdlext-color-black, 0.12) !default;\n\n// Colored button colors.\n$mdlext-dark-button-primary-color-alt:            $mdlext-dark-color-primary-light !default;\n$mdlext-dark-button-secondary-color-alt:          $mdlext-dark-color-primary-contrast !default;\n$mdlext-dark-button-hover-color-alt:              darken($mdlext-dark-color-primary-light, 10%) !default;\n$mdlext-dark-button-active-color-alt:             darken($mdlext-dark-color-primary-light, 10%) !default;\n$mdlext-dark-button-focus-color-alt:              $mdlext-dark-button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$mdlext-dark-button-ripple-color-alt:             $mdlext-dark-color-primary-contrast !default;\n\n// Disabled button colors.\n$mdlext-dark-button-primary-color-disabled:       rgba($mdlext-color-white, 0.12) !default;\n$mdlext-dark-button-secondary-color-disabled:     rgba($mdlext-color-white, 0.26) !default;\n\n// FAB colors and sizes.\n$mdlext-dark-button-fab-color-alt:                $mdlext-dark-color-accent !default;\n$mdlext-dark-button-fab-hover-color-alt:          $mdlext-dark-color-accent !default;\n$mdlext-dark-button-fab-active-color-alt:         $mdlext-dark-color-accent !default;\n$mdlext-dark-button-fab-text-color-alt:           $mdlext-dark-color-accent-contrast !default;\n$mdlext-dark-button-fab-ripple-color-alt:         $mdlext-dark-color-accent-contrast !default;\n\n// Slider\n$mdlext-dark-range-bg-color:                      rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-range-color:                         $mdlext-dark-color-accent-light !default;\n$mdlext-dark-range-faded-color:                   rgba($mdlext-dark-color-accent-light, 0.50) !default;\n$mdlext-dark-range-bg-focus-color:                rgba($mdlext-color-white, 0.50) !default;\n\n// Textfields\n$mdlext-dark-input-text-background-color:         transparent !default;\n$mdlext-dark-input-text-label-color:              rgba($mdlext-color-white, 0.50) !default;\n$mdlext-dark-input-text-bottom-border-color:      rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-input-text-highlight-color:          $mdlext-dark-color-accent-light !default;\n$mdlext-dark-input-text-disabled-color:           rgba($mdlext-color-white, 0.12) !default;\n$mdlext-dark-input-text-disabled-text-color:      rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-input-text-error-color:              $mdlext-dark-error-color !default;\n\n// Checkboxes\n$mdlext-dark-checkbox-color:                      $mdlext-dark-color-accent-light !default;\n$mdlext-dark-checkbox-off-color:                  rgba($mdlext-color-white, 0.50) !default;\n$mdlext-dark-checkbox-disabled-color:             rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-checkbox-focus-color:                rgba($mdlext-dark-color-accent-light, 0.26) !default;\n\n// Icon Toggles\n$mdlext-dark-icon-toggle-color:                   $mdlext-palette-grey-700 !default;\n$mdlext-dark-icon-toggle-focus-color:             $mdlext-dark-button-focus-color !default;\n$mdlext-dark-icon-toggle-checked-color:           $mdlext-dark-color-accent-light !default;\n$mdlext-dark-icon-toggle-checked-focus-color:     rgba($mdlext-dark-color-accent-light, 0.26) !default;\n$mdlext-dark-icon-toggle-disabled-color:          rgba($mdlext-color-white, 0.50) !default;\n\n// Radio Buttons\n$mdlext-dark-radio-color:                         $mdlext-dark-color-accent-light !default;\n$mdlext-dark-radio-off-color:                     rgba($mdlext-color-white, 0.50) !default;\n$mdlext-dark-radio-disabled-color:                rgba($mdlext-color-white, 0.26) !default;\n\n// Switches\n$mdlext-dark-switch-color:                        $mdlext-dark-color-accent-light !default;\n$mdlext-dark-switch-faded-color:                  rgba($mdlext-dark-color-accent-light, 0.26) !default;\n$mdlext-dark-switch-thumb-color:                  $mdlext-dark-switch-color !default;\n$mdlext-dark-switch-track-color:                  rgba($mdlext-dark-color-accent-light, 0.5) !default;\n$mdlext-dark-switch-off-thumb-color:              $mdlext-palette-grey-50 !default;\n$mdlext-dark-switch-off-track-color:              rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-switch-disabled-thumb-color:         $mdlext-palette-grey-50 !default;\n$mdlext-dark-switch-disabled-track-color:         rgba($mdlext-color-white, 0.12) !default;\n\n// Data table\n$mdlext-dark-data-table-background-color:               $mdlext-dark-content-background-color !default;\n$mdlext-dark-data-table-header-color:                   rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-data-table-header-sorted-color:            rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-data-table-header-sorted-icon-hover-color: rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-data-table-hover-color:                    $mdlext-dark-default-item-hover-bg-color !default;\n$mdlext-dark-data-table-selection-color:                $mdlext-dark-default-item-active-bg-color !default;\n$mdlext-dark-data-table-divider-color:                  rgba($mdlext-color-white, 0.12) !default;\n$mdlext-dark-data-table-dividers:                       1px solid $mdlext-dark-data-table-divider-color !default;\n\n\n// Selectfield\n// Uses variables from textfield\n\n\n// Accordion\n$mdlext-dark-accordion-header-background-color-base   : $mdlext-color-black !default;\n$mdlext-dark-accordion-header-background-color        : rgba($mdlext-dark-accordion-header-background-color-base, 1.0) !default;\n$mdlext-dark-accordion-header-background-open-color   : rgba($mdlext-dark-accordion-header-background-color-base, 0.9) !default;\n$mdlext-dark-accordion-header-border-color            : $mdlext-palette-grey-800 !default;\n$mdlext-dark-accordion-header-background-hover-color  : rgba($mdlext-dark-accordion-header-background-color-base, 0.5) !default;\n$mdlext-dark-accordion-header-background-active-color : rgba($mdlext-dark-accordion-header-background-color-base, 0.6) !default;\n$mdlext-dark-accordion-header-focus-outline-color     : lighten($mdlext-dark-accordion-header-border-color, 40%) !default;\n$mdlext-dark-accordion-header-disabled-color          : rgba($mdlext-dark-accordion-header-background-color-base, 0.4) !default;\n$mdlext-dark-accordion-header-secondary-color         : $mdlext-dark-text-color-primary !default;\n$mdlext-dark-accordion-header-secondary-color-disabled: $mdlext-dark-text-color-disabled !default;\n$mdlext-dark-accordion-header-highlight-color         : lighten($mdlext-dark-accordion-header-border-color, 40%) !default;\n$mdlext-dark-accordion-ripple-color                   : rgba($mdlext-dark-accordion-header-background-color-base, 0.3) !default;\n$mdlext-dark-accordion-content-color                  : inherit !default;\n$mdlext-dark-accordion-content-background-color       : transparent !default;\n\n\n// Bordered fields\n$mdlext-dark-bordered-field-input-text-color               : inherit !default;\n$mdlext-dark-bordered-field-border-color                   : $mdlext-dark-input-text-bottom-border-color !default;\n$mdlext-dark-bordered-field-background-color               : rgba($mdlext-dark-content-background-color, 0.1) !default;\n$mdlext-dark-bordered-field-focus-border-color             : $mdlext-dark-color-accent-light !default;\n$mdlext-dark-bordered-field-focus-background-color         : rgba(darken($mdlext-dark-bordered-field-background-color, 10%), 0.1) !default;\n\n$mdlext-dark-bordered-field-input-text-disabled-text-color : $mdlext-dark-input-text-disabled-text-color;\n$mdlext-dark-bordered-field-disabled-border-color          : $mdlext-dark-input-text-disabled-color !default;\n$mdlext-dark-bordered-field-disabled-background-color      : $mdlext-dark-bordered-field-background-color !default;\n\n$mdlext-dark-bordered-field-input-text-error-color         : $mdlext-dark-bordered-field-input-text-color !default;\n$mdlext-dark-bordered-field-error-border-color             : $mdlext-dark-input-text-error-color !default;\n$mdlext-dark-bordered-field-error-background-color         : rgba($mdlext-dark-bordered-field-error-border-color, 0.1) !default;\n$mdlext-dark-bordered-field-error-focus-border-color       : darken($mdlext-dark-bordered-field-error-border-color, 10%) !default;\n$mdlext-dark-bordered-field-error-focus-background-color   : $mdlext-dark-bordered-field-error-background-color !default;\n\n$mdlext-dark-bordered-field-input-text-label-color         : $mdlext-dark-input-text-label-color !default;\n$mdlext-dark-bordered-field-input-text-label-focus-color   : $mdlext-dark-bordered-field-focus-border-color !default;\n$mdlext-dark-bordered-field-input-text-label-error-color   : $mdlext-dark-bordered-field-error-border-color !default;\n$mdlext-dark-bordered-field-input-text-label-disabled-color: $mdlext-dark-input-text-disabled-text-color !default;\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_variables.scss","///\n/// Returns the opposite direction of each direction in a list\n/// Modified from: https://css-tricks.com/snippets/sass/opposite-direction-function/\n/// @author Hugo Giraudel\n/// @param {List} $directions - List of initial directions\n/// @return {List} - List of opposite directions\n@function mdlext-opposite-direction($directions) {\n  $opposite-directions: ();\n  $direction-map: (\n    'top':    'bottom',\n    'right':  'left',\n    'bottom': 'top',\n    'left':   'right',\n    'center': 'center',\n    'ltr':    'rtl',\n    'rtl':    'ltr'\n  );\n\n  @each $direction in $directions {\n    $direction: to-lower-case($direction);\n\n    @if map-has-key($direction-map, $direction) {\n      $opposite-directions: append($opposite-directions, unquote(map-get($direction-map, $direction)));\n    }\n    @else {\n      @warn \"No opposite direction can be found for `#{$direction}`. Direction omitted.\";\n    }\n  }\n\n  @return $opposite-directions;\n}\n\n///\n/// Strip unit from value\n/// @author Hugo Giraudel\n/// http://hugogiraudel.com/2013/08/12/sass-functions/\n/// https://css-tricks.com/snippets/sass/strip-unit-function/\n/// @param {Number} $number - Number to remove unit from\n/// @return {Number} - Unitless number\n\n@function strip-unit($number) {\n  @return if(type-of($number) == 'number' and not unitless($number), $number / ($number * 0 + 1), $number);\n}\n\n///\n/// Clamping a number means restricting it between min and max values.\n///    4 clamped to 1-3 equals 3.\n///   -5 clamped to 1-10 equals 1.\n///   42 clamped to 10-100 equals 42.\n/// @author Hugo Giraudel\n/// http://hugogiraudel.com/2013/08/12/sass-functions/\n/// @param {Number} $value - The value to clamp\n/// @param {Number} $min - min value in range\n/// @param {Number} $max - Max value in range\n/// @return {Number} - The clamped value\n\n@function clamp($value, $min, $max) {\n  @return if($value > $max, $max, if($value < $min, $min, $value));\n}\n\n///\n/// Convert one unit into another\n/// @author Hugo Giraudel\n/// http://www.sitepoint.com/understanding-sass-units/\n/// @param {Number} $value - Initial value\n/// @param {String} $unit - Desired unit\n/// @return {Number}\n/// @throw Error if `$unit` does not exist or if units are incompatible.\n\n/* stylelint-disable */\n@function convert-unit($value, $unit) {\n  $units: (\n    'px'  : 0px,\n    'cm'  : 0cm,\n    'mm'  : 0mm,\n    '%'   : 0%,\n    'ch'  : 0ch,\n    'in'  : 0in,\n    'em'  : 0em,\n    'rem' : 0rem,\n    'pt'  : 0pt,\n    'pc'  : 0pc,\n    'ex'  : 0ex,\n    'vw'  : 0vw,\n    'vh'  : 0vh,\n    'vmin': 0vmin,\n    'vmax': 0vmax,\n    'deg' : 0deg,\n    'turn': 0turn,\n    'rad' : 0rad,\n    'grad': 0grad,\n    's'   : 0s,\n    'ms'  : 0ms,\n    'Hz'  : 0Hz,\n    'kHz' : 0kHz,\n    'dppx': 0dppx,\n    'dpcm': 0dpcm,\n    'dpi' : 0dpi,\n  );\n\n  @if map-has-key($units, $unit) {\n    @return map-get($units, $unit) + $value;\n  }\n\n  @error \"Unknown unit `#{$unit}`.\";\n}\n/* stylelint-enable */\n\n\n///\n/// Replace `$search` with `$replace` in `$string`\n/// @author Hugo Giraudel, http://hugogiraudel.com/2014/01/13/sass-string-replacement-function/\n/// @param {String} $string - Initial string\n/// @param {String} $search - Substring to replace\n/// @param {String} $replace ('') - New value\n/// @return {String} - Updated string\n@function str-replace($string, $search, $replace: '') {\n  $index: str-index($string, $search);\n\n  @if $index {\n    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n  }\n  @return $string;\n}\n\n///\n/// @function explode() -- split a string into a list of strings\n/// @author https://gist.github.com/danielpchen/3677421ea15dcf2579ff\n///  {string} $string: the string to be split\n///  {string} $delimiter: the boundary string\n///  @return {list} the result list\n@function explode($string, $delimiter: ',') {\n  $result: ();\n  @if $delimiter == \"\" {\n    @for $i from 1 through str-length($string) {\n      $result: append($result, str-slice($string, $i, $i));\n    }\n    @return $result;\n  }\n  $exploding: true;\n  @while $exploding {\n    $d-index: str-index($string, $delimiter);\n    @if $d-index {\n      @if $d-index > 1 {\n        $result: append($result, str-slice($string, 1, $d-index - 1));\n        $string: str-slice($string, $d-index + str-length($delimiter));\n      }\n      @else if $d-index == 1 {\n        $string: str-slice($string, 1, $d-index + str-length($delimiter));\n      }\n      @else {\n        $result: append($result, $string);\n        $exploding: false;\n      }\n    }\n    @else {\n      $result: append($result, $string);\n      $exploding: false;\n    }\n  }\n  @return $result;\n}\n\n///\n/// Add `$unit` to `$value`\n/// @author Hugo Giraudel\n///\n/// @param {Number} $value - Value to add unit to\n/// @param {String} $unit - String representation of the unit\n///\n/// @return {Number} - `$value` expressed in `$unit`\n/// @throw Error if `$unit` does not exist or if units are incompatible.\n///\n@function to-length($value, $unit) {\n  $units: (\n    'px'  : 1px,\n    'cm'  : 1cm,\n    'mm'  : 1mm,\n    '%'   : 1%,\n    'ch'  : 1ch,\n    'pc'  : 1pc,\n    'in'  : 1in,\n    'em'  : 1em,\n    'rem' : 1rem,\n    'pt'  : 1pt,\n    'ex'  : 1ex,\n    'vw'  : 1vw,\n    'vh'  : 1vh,\n    'vmin': 1vmin,\n    'vmax': 1vmax\n  );\n\n  @if not index(map-keys($units), $unit) {\n    @error('Invalid unit `#{$unit}`.');\n  }\n\n  @return $value * map-get($units, $unit);\n}\n\n///\n/// Casts a string into a number\n///\n/// @author Hugo Giraudel\n// @param {String | Number} $value - Value to be parsed\n///\n/// @return {Number}\n/// @throw Error if `$value` is not a number or a string.\n///\n@function to-number($value) {\n  @if type-of($value) == 'number' {\n    @return $value;\n  }\n  @else if type-of($value) != 'string' {\n    @error('Value for `to-number` should be a number or a string.');\n  }\n\n  $result: 0;\n  $digits: 0;\n  $minus: str-slice($value, 1, 1) == '-';\n  $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);\n\n  @for $i from if($minus, 2, 1) through str-length($value) {\n    $character: str-slice($value, $i, $i);\n\n    @if not (index(map-keys($numbers), $character) or $character == '.') {\n      @return to-length(if($minus, -$result, $result), str-slice($value, $i));\n    }\n\n    @if $character == '.' {\n      $digits: 1;\n    }\n    @else if $digits == 0 {\n      $result: $result * 10 + map-get($numbers, $character);\n    }\n    @else {\n      $digits: $digits * 10;\n      $result: $result + map-get($numbers, $character) / $digits;\n    }\n  }\n\n  @return if($minus, -$result, $result);\n}\n\n///\n/// Convert `$rgb-string` to a number list\n/// @author Leif Olsen\n/// @param {String | Number} $value - Value to be parsed\n/// @return {list} the rgb number list\n/// @throw Error if `$value` is not a number, color or a string.\n@function rgb-string-to-numbers($value) {\n  @if type-of($value) == 'number' or type-of($value) == 'color' {\n    @return $value;\n  }\n  @else if type-of($value) != 'string' {\n    @error('Value for `rgb-string-to-numbers` should be a number or a string.');\n  }\n\n  $s: str-replace($value, \"rgba\");\n  $s: str-replace($s, \"rgb\");\n  $s: str-replace($s, \"(\");\n  $s: str-replace($s, \")\");\n  $s: str-replace($s, \" \");\n  $l: explode($s);\n  $result: ();\n  @for $i from 1 through length($l) {\n    $result: append($result, to-number(nth($l, $i)));\n  }\n  @return $result;\n}\n\n///\n/// Convert `$rgb-string` to a corresponding hex value\n/// @author Leif Olsen\n/// @param {String | Number} $value - Value to be parsed\n/// @return {number} the rgb hex value\n/// @throw Error if `$value` is not a number, color or a string.\n@function rgb-string-to-hex($value) {\n  @if type-of($value) == 'number' or type-of($value) == 'color' {\n    @return $value;\n  }\n  @else if type-of($value) != 'string' {\n    @error('Value for `rgb-string-to-numbers` should be a number or a string.');\n  }\n  $l: rgb-string-to-numbers($value);\n  @return rgb(nth($l, 1), nth($l, 2), nth($l, 3));\n}\n\n\n///\n/// Convert hex color to a coresponding `$rgb-string`\n/// @author https://github.com/google/material-design-lite/issues/1689\n/// @param {Number} $hexColor - Value to convert\n/// @return {String} the rgb string value\n///\n/// @example - $color-primary: hex-to-string(#333);\n@function hex-to-rgb-string($hexColor) {\n  // 0.999999 val in alpha actually compiles to 1.0\n  $rgbaVal:  inspect(rgba($hexColor, 0.9999999));\n\n  // slice substring between 'rgba(' and '1.0)'\n  @return str-slice($rgbaVal, 6, str-length($rgbaVal)-4);\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_functions.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n@import \"../mixins\";\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss","@import \"functions\";\n\n/// Triangle helper mixin\n/// Modified from: http://blustemy.io/drawing-pure-css-arrows-with-mixins/\n///                https://css-tricks.com/snippets/sass/css-triangle-mixin/\n/// @param {Direction} $direction - Triangle direction, either `top`, `right`, `bottom` or `left`\n/// @param {Color} $color [currentcolor] - Triangle color\n/// @param {Length} $size [1em] - Triangle size\n@mixin mdlext-arrow($direction: bottom, $base-width: 15px, $length: 10px, $color: inherit, $font-size: inherit) {\n  content: '';\n  width: 0;\n  height: 0;\n  font-size: $font-size;\n  line-height: $font-size;\n  border-#{mdlext-opposite-direction($direction)}: $length solid $color;\n  border-#{mdlext-opposite-direction($direction)}-width: $length;\n  border-#{mdlext-opposite-direction($direction)}-style: solid;\n  border-#{mdlext-opposite-direction($direction)}-color: $color;\n\n  $perpendicular-borders: ($base-width / 2) solid transparent;\n\n  @if $direction == top or $direction == bottom {\n    border-left: $perpendicular-borders;\n    border-right: $perpendicular-borders;\n  }\n  @else if $direction == right or $direction == left {\n    border-bottom: $perpendicular-borders;\n    border-top: $perpendicular-borders;\n  }\n}\n\n/// Hide element while making it readable for screen readers\n/// Copied from HTML5Boilerplate:\n/// https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css#L119-L133\n@mixin mdlext-visually-hidden() {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n\n/// Toggle for aria-expanded attribute\n///\n/// @author Leif Olsen\n/// @param {Font} $font-family ['Material Icons'] - Font family\n/// @param {Length} $font-size [24px] - Font size\n/// @param {string} $icon ['+'] - icon to display when 'aria-expanded=\"false\"'\n/// @param {string} $icon-expanded ['-'] - icon to display when 'aria-expanded=\"true\"'\n/// @link https://github.com/google/material-design-icons Modified from '.material-icons' class\n/// @param {Length} $icon-offset [0] - Icon offset\n///\n/// @example - +/- toggle\n///   .plus-minus {\n///     @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: inherit);\n///   }\n///   <div aria-expanded=\"false\">\n///     <i class=\"plus-minus\"></i>\n///   </div>\n///\n/// @example - Material Icons, expand-more/expand_less\n///   .more-less {\n///     @include mdlext-aria-expanded-toggle($content: 'expand_more', $content-expanded: 'expand_less');\n///   }\n///   <div aria-expanded=\"true\">\n///     <i class=\"more-less\"></i>\n///   </div>\n\n@mixin mdlext-aria-expanded-toggle($font-family: 'Material Icons', $font-size: 24px, $icon: '+', $icon-expanded: '-', $icon-offset: 0) {\n  font-family: $font-family;\n  font-weight: inherit;\n  font-style: inherit;\n  font-size: $font-size;  // Preferred icon size\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-transform: none;\n  letter-spacing: normal;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n  vertical-align: middle;\n\n  // Support for all WebKit browsers.\n  -webkit-font-smoothing: antialiased;\n  -webkit-font-feature-settings: 'liga';\n\n  // Support for Safari and Chrome.\n  text-rendering: optimizeLegibility;\n\n  // Support for Firefox.\n  -moz-osx-font-smoothing: grayscale;\n\n  // Support for IE.\n  font-feature-settings: 'liga';\n\n  &::after {\n    content: $icon;\n    margin-left: $icon-offset;\n  }\n\n  [aria-expanded='true'] > & {\n    &::after {\n      content: $icon-expanded;\n      margin-left: $icon-offset;\n    }\n  }\n}\n\n\n/// Keyframe mixin\n/// Modified from: http://sassbreak.com/nested-keyframe-rules-sass/\n/// Modified from: http://sassbreak.com/sass-tools-and-snippets/\n///\n/// @example\n///\n/// .some-element {\n///   animation: 10s linear infinite;\n///\n///   @include mdlext-animation-keyframes {\n///     from {\n///       background-position: 0% 0%;\n///     }\n///     to {\n///       background-position: 114.2857% 0%;\n///     }\n///   }\n/// }\n\n@mixin mdlext-animation-keyframes {\n  $animation-name: unique-id();\n  animation-name: $animation-name;\n\n  @keyframes #{$animation-name} {\n    @content;\n  }\n}\n\n\n/// Flexible title mixin\n/// A flexible title consists of three regions, left, middle and right.\n/// The left and right regions are optional and will typically contain state icons\n/// or act as a toolbar. The middle region should contain the title text.\n///\n/// @author Leif Olsen\n/// @param {String} $class - class name\n/// @gutter {Length} [8px] - horizontal spacing between title elements\n///\n/// @example\n///\n/// @include mdlext-flexible-title(my-title) {\n///   overflow: hidden;\n///   background-color: yellow;\n///   &__text {\n///     font-size: 20px;\n///     letter-spacing: 0.02em;\n///     font-weight: 400;\n///     line-height: 1.1;\n///   }\n/// }\n///\n/// <header class=\"my-title\">\n///   <i class=\"material-icons\" role=\"presentation\" style=\"font-size: 28px;\">info</i>\n///   <h2 class=\"my-title__text\">A title</h2>\n///   <span class=\"my-title__spacer\"></span>\n///   <i class=\"mdlext-aria-expanded-more-less\" role=\"presentation\" style=\"font-size: 28px;\"></i>\n/// </header>\n\n@mixin mdlext-flexible-title($class, $gutter: 8px) {\n  .#{$class} {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    display: flex;\n    align-self: stretch;\n    align-items: center;\n    margin: 0;\n    padding: 0 $gutter;\n\n    &__text,\n    &__text > * {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0 $gutter 0 0;\n    }\n\n    > *:last-child {\n      padding-right: 0;\n    }\n\n    // Used to align elements inside a header or drawer, by growing to fill\n    // remaining space. Commonly used for aligning elements to the right.\n    &__spacer {\n      flex: 1;\n    }\n\n    @content;\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_mixins.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-layout__sticky-header {\n  position: absolute;\n  overflow: visible;\n  background: $mdlext-sticky-header-background;\n  transition: 0.1s ease-in-out;\n\n  &.mdlext-is-scroll {\n    background: $mdlext-sticky-header-background-scroll;\n  }\n}\n\n*:not(.is-small-screen) .mdlext-layout__sticky-header {\n  .mdl-layout__drawer-button {\n    visibility: hidden;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding;\n  }\n}\n\n*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header,\n.is-small-screen.has-drawer .mdlext-layout__sticky-header {\n  display: flex;\n\n  .mdl-layout__drawer-button {\n    visibility: visible;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding + $layout-drawer-button-desktop-size;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/sticky-header/_sticky-header.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SASS based on css from Google Chrome Dialog polyfill, https://github.com/GoogleChrome/dialog-polyfill\n * @include 'node_modules/dialog-polyfill/dialog-polyfill.css' before using this\n */\n\n@import \"../variables\";\n\ndialog.mdlext-dialog {\n  position: absolute;\n  border: 0;\n  opacity: 0;\n  padding: $mdlext-dialog-padding;\n  background-color: $mdlext-dialog-background-color;\n\n  &[open] {\n    animation: mdlext-open-dialog $mdlext-dialog-open-animation;\n  }\n  &[open]::backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n  &[open] + .backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n}\n\n@keyframes mdlext-darken-backdrop {\n  to { background: $mdlext-dialog-backdrop-color; }\n}\n@keyframes mdlext-open-dialog {\n  to { opacity: 1; }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/dialog/dialog.scss","@charset \"UTF-8\";\n\n/**\n * This code is modified from Material Design Lite _grid.sass,\n * which is Licensed under the Apache License, Version 2.0\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n//////////////////////////////////////////////////////////////////////////////////\n//\n// Element queries for _grid.scss, based on: https://github.com/Snugug/eq.js\n//\n//////////////////////////////////////////////////////////////////////////////////\n\n// Use of this module requires the user to include variables from material-design-lite in hers/his main SASS module\n//@import \"../../node_modules/material-design-lite/src/variables\";\n.mdlext-grid {\n  display: flex;\n  flex-flow: row wrap;\n  margin: 0 auto;\n  align-items: stretch;\n\n  &.mdlext-grid--no-spacing {\n    padding: 0;\n  }\n\n  & > .mdlext-cell {\n    box-sizing: border-box;\n  }\n\n  & > .mdlext-cell--top {\n    align-self: flex-start;\n  }\n\n  & > .mdlext-cell--middle {\n    align-self: center;\n  }\n\n  & > .mdlext-cell--bottom {\n    align-self: flex-end;\n  }\n\n  & > .mdlext-cell--stretch {\n    align-self: stretch;\n  }\n\n  .mdlext-grid--no-spacing > .mdlext-cell {\n    margin: 0;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    & > .mdlext-cell--order-#{$i} {\n      order: $i;\n    }\n  }\n}\n\n// Mixins for width calculation.\n@mixin _partial-size($size, $columns, $gutter) {\n  width: calc(#{(($size / $columns) * 100) + \"%\"} - #{$gutter});\n}\n@mixin _full-size($gutter) {\n  @include _partial-size(1, 1, $gutter);\n}\n@mixin _offset-size($size, $columns, $gutter) {\n  margin-left: calc(#{(($size / $columns) * 100) + \"%\"} + #{$gutter / 2});\n}\n\n@mixin _partial-size-no-spacing($size, $columns) {\n  width: #{(($size / $columns) * 100) + \"%\"};\n}\n@mixin _full-size-no-spacing() {\n  @include _partial-size-no-spacing(1, 1);\n}\n@mixin _offset-size-no-spacing($size, $columns) {\n  margin-left: #{(($size / $columns) * 100) + \"%\"};\n}\n\n\n.mdlext-grid {\n\n  @include eq-pts((\n    grid_phone: 0,\n    grid_tablet: strip-unit($grid-tablet-breakpoint),\n    grid_desktop: strip-unit($grid-desktop-breakpoint)\n  ));\n\n  ////////// Phone //////////\n  @include eq('grid_phone') {\n    padding: $grid-phone-margin - ($grid-phone-gutter / 2);\n\n    & > .mdlext-cell {\n      margin: $grid-phone-gutter / 2;\n      @include _partial-size($grid-cell-default-columns, $grid-phone-columns, $grid-phone-gutter);\n    }\n\n    & > .mdlext-cell--hide-phone {\n      display: none !important;\n    }\n\n    // Define order override classes.\n    @for $i from 1 through $grid-max-columns {\n      & > .mdlext-cell--order-#{$i}-phone.mdlext-cell--order-#{$i}-phone {\n        order: $i;\n      }\n    }\n\n    // Define partial sizes for columnNumber < totalColumns.\n    @for $i from 1 through ($grid-phone-columns - 1) {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n        @include _partial-size($i, $grid-phone-columns, $grid-phone-gutter);\n      }\n    }\n\n    // Define 100% for everything else.\n    @for $i from $grid-phone-columns through $grid-desktop-columns {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n        @include _full-size($grid-phone-gutter);\n      }\n    }\n\n    // Define valid phone offsets.\n    @for $i from 1 through ($grid-phone-columns - 1) {\n      & > .mdlext-cell--#{$i}-offset,\n      & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {\n        @include _offset-size($i, $grid-phone-columns, $grid-phone-gutter);\n      }\n    }\n\n    &.mdlext-grid--no-spacing {\n      padding: 0;\n\n      & > .mdlext-cell {\n        margin: 0;\n        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-phone-columns);\n      }\n\n      // Define partial sizes for columnNumber < totalColumns.\n      @for $i from 1 through ($grid-phone-columns - 1) {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n          @include _partial-size-no-spacing($i, $grid-phone-columns);\n        }\n      }\n\n      // Define 100% for everything else.\n      @for $i from $grid-phone-columns through $grid-desktop-columns {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n          @include _full-size-no-spacing();\n        }\n      }\n\n      // Define valid phone offsets.\n      @for $i from 1 through ($grid-phone-columns - 1) {\n        & > .mdlext-cell--#{$i}-offset,\n        & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {\n          @include _offset-size-no-spacing($i, $grid-phone-columns);\n        }\n      }\n    }\n  }\n\n  ////////// Tablet //////////\n  @include eq('grid_tablet') {\n    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);\n\n    & > .mdlext-cell {\n      margin: $grid-tablet-gutter / 2;\n      @include _partial-size($grid-cell-default-columns, $grid-tablet-columns, $grid-tablet-gutter);\n    }\n\n    & > .mdlext-cell--hide-tablet {\n      display: none !important;\n    }\n\n    // Define order override classes.\n    @for $i from 1 through $grid-max-columns {\n      & > .mdlext-cell--order-#{$i}-tablet.mdlext-cell--order-#{$i}-tablet {\n        order: $i;\n      }\n    }\n\n    // Define partial sizes for columnNumber < totalColumns.\n    @for $i from 1 through ($grid-tablet-columns - 1) {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n        @include _partial-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n      }\n    }\n\n    // Define 100% for everything else.\n    @for $i from $grid-tablet-columns through $grid-desktop-columns {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n        @include _full-size($grid-tablet-gutter);\n      }\n    }\n\n    // Define valid tablet offsets.\n    @for $i from 1 through ($grid-tablet-columns - 1) {\n      & > .mdlext-cell--#{$i}-offset,\n      & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {\n        @include _offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n      }\n    }\n\n    &.mdlext-grid--no-spacing {\n      padding: 0;\n\n      & > .mdlext-cell {\n        margin: 0;\n        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-tablet-columns);\n      }\n\n      // Define partial sizes for columnNumber < totalColumns.\n      @for $i from 1 through ($grid-tablet-columns - 1) {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n          @include _partial-size-no-spacing($i, $grid-tablet-columns);\n        }\n      }\n\n      // Define 100% for everything else.\n      @for $i from $grid-tablet-columns through $grid-desktop-columns {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n          @include _full-size-no-spacing();\n        }\n      }\n\n      // Define valid tablet offsets.\n      @for $i from 1 through ($grid-tablet-columns - 1) {\n        & > .mdlext-cell--#{$i}-offset,\n        & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {\n          @include _offset-size-no-spacing($i, $grid-tablet-columns);\n        }\n      }\n    }\n  }\n\n  ////////// Desktop //////////\n  @include eq('grid_desktop') {\n    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);\n\n    & > .mdlext-cell {\n      margin: $grid-desktop-gutter / 2;\n      @include _partial-size($grid-cell-default-columns, $grid-desktop-columns, $grid-desktop-gutter);\n    }\n\n    & > .mdlext-cell--hide-desktop {\n      display: none !important;\n    }\n\n    // Define order override classes.\n    @for $i from 1 through $grid-max-columns {\n      & > .mdlext-cell--order-#{$i}-desktop.mdlext-cell--order-#{$i}-desktop {\n        order: $i;\n      }\n    }\n\n    // Define partial sizes for all numbers of columns.\n    @for $i from 1 through $grid-desktop-columns {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {\n        @include _partial-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n      }\n    }\n\n    // Define valid desktop offsets.\n    @for $i from 1 through ($grid-desktop-columns - 1) {\n      & > .mdlext-cell--#{$i}-offset,\n      & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {\n        @include _offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n      }\n    }\n\n    &.mdlext-grid--no-spacing {\n      padding: 0;\n\n      & > .mdlext-cell {\n        margin: 0;\n        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-desktop-columns);\n      }\n\n      // Define partial sizes for all numbers of columns.\n      @for $i from 1 through $grid-desktop-columns {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {\n          @include _partial-size-no-spacing($i, $grid-desktop-columns);\n        }\n      }\n\n      // Define valid desktop offsets.\n      @for $i from 1 through ($grid-desktop-columns - 1) {\n        & > .mdlext-cell--#{$i}-offset,\n        & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {\n          @include _offset-size-no-spacing($i, $grid-desktop-columns);\n        }\n      }\n    }\n  }\n}\n\n@include eq-selectors;\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/grid/_grid-eqjs.scss","//////////////////////////////\n// Variables\n//////////////////////////////\n// Selectors that were called for CSS element queries\n$EQ-Selectors: ();\n\n//////////////////////////////\n// Error Mixin\n//////////////////////////////\n@mixin EQSTATECHECK($states, $name) {\n  $EQ-Error: 'You need to include a state for the `#{$name}` mixin!';\n  @if (length($states) == 0) {\n    @if feature-exists(at-error) {\n      @error $EQ-Error;\n    }\n    @else {\n      @warn $EQ-Error;\n    }\n  }\n  @else {\n    @content;\n  }\n}\n\n//////////////////////////////\n// Element Queries!\n//\n// $states - List of states to apply styling to; @include eq(small, medium, large)\n//////////////////////////////\n@mixin eq($states...) {\n  @include EQSTATECHECK('eq', $states) {\n    //////////////////////////////\n    // Markup based Element Queries\n    //////////////////////////////\n    $extend: unique-id();\n    @at-root {\n      %#{$extend} {\n        @content;\n      }\n    }\n    @each $state in $states {\n      &[data-eq-state$=\"#{$state}\"] {\n        @extend %#{$extend};\n      }\n    }\n  }\n}\n\n//////////////////////////////\n// Element Query Stack!\n//\n// Contains one of the query states!\n// $states - List of states to apply styling to; @include eq-contains(small, medium, large)\n//  * Space separated list will be treated like an `and` media query; all of the states must be active\n//  * Comma separated list will be treated like an `or` media query: at least one of the states must be active\n//////////////////////////////\n@mixin eq-contains($states...) {\n  // Space separator API, so going to do stupid magic\n  @if length($states) == 1 {\n    $states: nth($states, 1);\n  }\n\n  @include EQSTATECHECK('eq', $states) {\n    //////////////////////////////\n    // Markup based Element Queries\n    //////////////////////////////\n    $extend: unique-id();\n    @at-root {\n      %#{$extend} {\n        @content;\n      }\n    }\n    @if list-separator($states) == 'space' {\n      $stateApply: '';\n\n      @each $state in $states {\n        $stateApply: $stateApply + '[data-eq-state~=\"#{$state}\"]';\n      }\n\n      &#{$stateApply} {\n        @extend %#{$extend};\n      }\n    }\n    @else {\n      @each $state in $states {\n        &[data-eq-state~=\"#{$state}\"] {\n          @extend %#{$extend};\n        }\n      }\n    }\n  }\n}\n\n//////////////////////////////\n// Element Query Points\n//\n// Prints element query points to element's `:before`\n//\n// $states - Map of `name: size`; @include eq-pts((small: 400, medium: 600, large: 900))\n//////////////////////////////\n@mixin eq-pts($states) {\n  &:before {\n    display: none;\n    content: '#{str-slice(inspect($states), 2, -2)}';\n  }\n\n  @if not index($EQ-Selectors, '#{&}') {\n    $EQ-Selectors: append($EQ-Selectors, '#{&}', 'comma') !global;\n  }\n}\n\n//////////////////////////////\n// Element Query Selectors\n//\n// Prints list of selectors that were called for CSS element queries to HTML's `:before`\n//////////////////////////////\n@mixin eq-selectors {\n  @at-root {\n    html:before {\n      display: none;\n      content: '#{$EQ-Selectors}';\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/eq.js/sass/_eq.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A lightboard is a translucent surface illuminated from behind, used for situations\n * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\nul.mdlext-lightboard {\n  list-style: none;\n}\n\n.mdlext-lightboard {\n  box-sizing: border-box;\n  margin: 0 auto;\n  padding: 0;\n  display: flex;\n  flex-flow:row wrap;\n  align-items: stretch;\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightboard__slide {\n    background-color: $mdlext-lightboard-slide-background-color;\n    border: 1px solid $mdlext-lightboard-slide-border-color;\n    border-radius: $mdlext-lightboard-slide-border-radius;\n    box-shadow: $mdlext-lightboard-slide-box-shadow;\n    position: relative;\n    display: block;\n    max-width: $mdlext-lightboard-slide-max-size;\n\n    &::before {\n      // 1:1 ratio\n      // TODO: Use a class for ratio so the grid can display slides with different ratios (16:9, 16:10, 4:3 ...)\n      content: '';\n      display: block;\n      padding-top: 100%;\n    }\n    &:hover,\n    &:active,\n    &:focus {\n      border-color: $mdlext-lightboard-slide-border-color-hover;\n      background-color: $mdlext-lightboard-slide-background-color-hover;\n      box-shadow: $mdlext-lightboard-slide-box-shadow-hover;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-lightboard-focus-outline-color;\n    }\n    &[aria-selected='true'] {\n      background-color: $mdlext-lightboard-slide-active-bacground-color;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &__frame,\n    &__ripple-container {\n      text-decoration: none;\n      display: block;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n\n      &:focus {\n        outline-offset: -2px;\n        outline-color: $mdlext-lightboard-focus-outline-color;\n      }\n      & .mdl-ripple {\n        background: $mdlext-lightboard-ripple-color;\n      }\n      figure {\n        display: block;\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n\n        img {\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n          margin: auto;\n          max-width: 100%;\n          max-height: 100%;\n          border-width: 0;\n          border-radius: $mdlext-lightboard-slide-inner-border-radius;\n        }\n        figcaption {\n          @include typo-caption($colorContrast: false, $usePreferred: true);\n\n          color: $mdlext-lightboard-figcaption-text-color;\n          position: absolute;\n          bottom: -2px;\n          white-space: nowrap;\n          overflow: hidden;\n          max-width: 100%;\n          width: 100%;\n          text-align: center;\n          text-overflow: ellipsis;\n          padding: 4px 0;\n        }\n      }\n      &:hover {\n        figcaption {\n          // As far as I can see there is no way to darken/lighten a text color\n          // defined by MDL, due to the \"unqote\" functions.\n          // So this is a hack\n          color: rgba(0, 0, 0, 1) !important;\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      }\n    }\n  }\n}\n\n////// Media / Element queries default, Small //////\n.mdlext-lightboard {\n  padding: calc((#{$mdlext-lightboard-small-margin} - #{$mdlext-lightboard-small-gutter}) / 2);\n\n  .mdlext-lightboard__slide {\n    margin: calc(#{$mdlext-lightboard-small-gutter} / 2);\n    width: calc(1 / #{$mdlext-lightboard-small-columns} * 100% - #{$mdlext-lightboard-small-gutter});\n\n    .mdlext-lightboard__slide__frame figure {\n      margin: $mdlext-lightboard-small-frame-width;\n    }\n  }\n  &.mdlext-lightboard--no-spacing {\n    padding: 0;\n\n    .mdlext-lightboard__slide {\n      margin: 0;\n      width: calc(1 / #{$mdlext-lightboard-small-columns} * 100%);\n    }\n  }\n}\n\n// Import one of _lightboard-media-queries.scss or _lightboard-eq-js.scss to complete SASS\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard.scss","@charset \"UTF-8\";\n//////////////////////////////////////////////////////////////////////////////////\n//\n// Element queries for _lightbox.scss, based on: https://github.com/Snugug/eq.js\n//\n//////////////////////////////////////////////////////////////////////////////////\n\n@import \"../variables\";\n@import \"../functions\";\n\n.mdlext-lightboard {\n\n  @include eq-pts((\n    lightboard_medium_small: strip-unit($mdlext-lightboard-medium-small-breakpoint),\n    lightboard_medium: strip-unit($mdlext-lightboard-medium-breakpoint),\n    lightboard_medium_large: strip-unit($mdlext-lightboard-medium-large-breakpoint),\n    lightboard_large: strip-unit($mdlext-lightboard-large-breakpoint)\n  ));\n\n  ////// small - meduim-small //////\n  @include eq('lightboard_medium_small') {\n    padding: calc((#{$mdlext-lightboard-medium-small-margin} - #{$mdlext-lightboard-medium-small-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-small-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100% - #{$mdlext-lightboard-medium-small-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-small-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100%);\n      }\n    }\n  }\n\n  ////// meduim-small - medium //////\n  @include eq('lightboard_medium') {\n    padding: calc((#{$mdlext-lightboard-medium-margin} - #{$mdlext-lightboard-medium-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100% - #{$mdlext-lightboard-medium-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100%);\n      }\n    }\n  }\n\n  ////// meduim - medium-large //////\n  @include eq('lightboard_medium_large') {\n    padding: calc((#{$mdlext-lightboard-medium-large-margin} - #{$mdlext-lightboard-medium-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100% - #{$mdlext-lightboard-medium-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100%);\n      }\n    }\n  }\n\n  ////// meduim-large - large //////\n  @include eq('lightboard_large') {\n    padding: calc((#{$mdlext-lightboard-large-margin} - #{$mdlext-lightboard-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-large-columns} * 100% - #{$mdlext-lightboard-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-large-columns} * 100%);\n      }\n    }\n  }\n}\n\n@include eq-selectors;\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard-eqjs.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-lightbox {\n  user-select: none;\n  cursor: default;\n  position: relative;\n  width: auto;\n  max-width: 100%;\n  margin: 0 auto;\n  border: $mdlext-lightbox-border;\n  border-radius: $mdlext-lightbox-border-radius;\n  background-color: $mdlext-lightbox-background-color;\n  box-sizing: border-box;\n  outline: 0;\n  display: block; // display: flex and IE11 has issues with reposition. Set display:block for now.\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightbox__slider {\n    // Displays prevvious, current and next image while dragging\n    // Elements are created by lightbox component when dragging starts\n    position: absolute;\n    top: 0;\n    left: 0;\n    display: flex;\n    justify-content: center;\n\n    .mdlext-lightbox__slider__slide {\n      flex-shrink: 0;\n      display: block;\n      text-align: left;\n      color: #7f7f7f;\n      background-size: cover;\n      background-position: center;\n      background-repeat: no-repeat;\n\n      //&:nth-child(1),\n      //&:nth-child(3) {\n      //  filter: blur(1px);\n      //}\n    }\n  }\n\n  figure {\n    margin: $mdlext-lightbox-figure-margin;\n    padding: $mdlext-lightbox-figure-padding;\n    position: relative;\n\n    img {\n      width: 100%;\n      max-width: 100%;\n      height: auto;\n      border: 0;\n      outline: 0;\n    }\n    figcaption {\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      display: block;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      max-width: 100%;\n      height: auto;\n      max-height: 50%;\n      overflow: auto;\n      padding: 8px;\n      background-color: $mdlext-lightbox-figcaption-background-color;\n      transform-origin: bottom;\n      transform: scaleY(0);\n      transition: 0.2s ease-in-out;\n\n      &.mdlext-lightbox__show-figcaption {\n        transform: scaleY(1);\n      }\n      tbody {\n        th {\n          text-align: left;\n        }\n        th,\n        td {\n          vertical-align: text-top;\n        }\n      }\n    }\n  }\n  .mdl-card__menu {\n    color: #ffffff;\n    z-index: 1;\n  }\n  footer {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    background-color: $mdlext-lightbox-footer-background-color;\n\n    .mdl-card__supporting-text {\n      flex: 1;\n      overflow: hidden;\n      padding: 0;\n      height: $card-supporting-text-line-height;\n      width: 100%;\n    }\n    nav {\n      display: flex;\n    }\n  }\n\n  &.mdlext-lightbox--sticky-footer footer {\n    position: fixed;\n    bottom: 0;\n    left: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightbox/_lightbox.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A carousel ...\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\nul.mdlext-carousel {\n  list-style: none;\n}\n\n.mdlext-carousel {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  height: 100%;  // Use a container to constrain height and width\n  width: 100%;\n  display: block;\n  white-space: nowrap;\n  font-size: 0;\n  background-color: transparent;\n}\n\n.mdlext-carousel__slide {\n  box-sizing: border-box;\n  display: inline-block;\n  position: relative;\n  outline: 0;\n  margin: 0 $mdlext-carousel-slide-margin-horizontal;\n  padding:0;\n  height: 100%;\n  border-top: $mdlext-carousel-slide-border-top-width solid transparent; // Makes room for the animated select/focus line\n\n  //&:focus,\n  &[aria-selected],\n  &[aria-selected='true'] {\n    figcaption {\n      // As far as I can see there is no way to darken/lighten a text color\n      // defined by MDL, due to the \"unqote\" functions.\n      // So this is a hack\n      color: rgba(0, 0, 0, 1) !important;\n      background-color: rgba(255, 255, 255, 0.25);\n    }\n  }\n\n  &[aria-selected]::after,\n  &[aria-selected='true']::after {\n    height: $mdlext-carousel-slide-border-top-width;\n    width: 100%;\n    display: block;\n    content: ' ';\n    top: (-$mdlext-carousel-slide-border-top-width);\n    left: 0;\n    position: absolute;\n    background: $mdlext-carousel-slide-border-top-color;\n    animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n    transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n  }\n\n\n  a {\n    text-decoration: none;\n  }\n\n  figure {\n    box-sizing: border-box;\n    position: relative;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n\n    img {\n      box-sizing: border-box;\n      max-height: 100%;\n    }\n\n    figcaption {\n      box-sizing: border-box;\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      color: $mdlext-carousel-slide-figcaption-color;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      white-space: nowrap;\n      overflow: hidden;\n      max-width: 100%;\n      width: 100%;\n      text-align: center;\n      text-overflow: ellipsis;\n      padding: 4px 0;\n    }\n    &:hover {\n      figcaption {\n        // As far as I can see there is no way to darken/lighten a text color\n        // defined by MDL, due to the \"unqote\" functions.\n        // So this is a hack\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.25);\n      }\n    }\n  }\n\n  .mdlext-carousel__slide__ripple-container {\n    text-decoration: none;\n    display: block;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    outline: 0;\n\n    & .mdl-ripple {\n      background: $mdlext-carousel-slide-ripple-color;\n    }\n  }\n}\n\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/carousel/_carousel.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Copied/Modified/Inspired from/by:\n *   https://github.com/google/material-design-lite/tree/master/src/textfield\n *   http://red-team-design.com/making-html-dropdowns-not-suck/\n *   http://codepen.io/etcpe9/pen/PqyOye,\n *   http://codepen.io/pudgereyem/pen/PqBxQx\n *   https://github.com/MEYVN-digital/mdl-selectfield\n *   https://github.com/mebibou/mdl-selectfield\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../mixins\";\n\n// The container for the selectfield.\n.mdlext-selectfield {\n  box-sizing: border-box;\n  position: relative;\n  font-size: $input-text-font-size;\n  display: inline-block;\n  width: 300px;\n  max-width: 100%;\n  margin: 0;\n  padding: $input-text-vertical-spacing 0;\n\n  // Align buttons, if used.\n  & .mdl-button {\n    bottom: $input-text-vertical-spacing;\n    position: absolute;\n  }\n\n  // Styling the down arrow\n  &::after {\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length);\n\n    position: absolute;\n    right: 0.5em;\n    top: 50%;\n    transform: translateY(-50%);\n    pointer-events: none;\n  }\n}\n\n.mdlext-selectfield.is-disabled {\n  &::after {\n    color: $input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $input-text-disabled-color);\n  }\n}\n\n// Optional class to align right.\n.mdlext-selectfield--align-right {\n  text-align: right;\n}\n\n// Optional class to display at full width.\n.mdlext-selectfield--full-width {\n  width: 100%;\n}\n\n// Optional class to make the select field expandable.\n.mdlext-selectfield--expandable {\n  min-height: $input-text-button-size;\n  min-width: $input-text-button-size;\n  width: auto;\n}\n\n// Styling for the select element.\n.mdlext-selectfield__select {\n\n  // Reset select\n  box-sizing: border-box;\n  border: 0;\n  border-radius: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  appearance: none;\n  text-indent: 0.01px; // Removes default arrow from firefox\n  text-overflow: '';   // Removes default arrow from firefox\n  outline: none;\n  box-shadow: none;\n  // End Reset select\n\n  font-size: $input-text-font-size;\n  font-family: $performance_font;\n  padding: $input-text-padding calc(1.2em + #{$input-text-padding}) $input-text-padding 0;\n  width: $input-text-width;\n  border-bottom: 1px solid $input-text-bottom-border-color;\n  display: block;\n  margin: 0;\n  background: none;\n  text-align: left;\n  color: inherit;\n\n  // Mozilla, remove focusring\n  &:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 #000000;\n  }\n\n  // MS, remove selected option background color\n  &:focus::-ms-value {\n    background-color: inherit;\n    color: inherit;\n  }\n\n  &::-ms-expand {\n    display: none;\n  }\n\n  .mdlext-selectfield.is-focused & {\n    outline: none;\n  }\n\n  .mdlext-selectfield.is-invalid & {\n    border-color: $input-text-error-color;\n    box-shadow: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled & {\n    border-bottom: 1px dotted $input-text-disabled-color;\n    color: $input-text-disabled-text-color;\n    background-color: transparent;\n  }\n\n  option {\n    color: $text-color-primary;\n    box-sizing: border-box;\n    background-color: inherit;\n  }\n}\n\n// Styling for the label / floating label.\n.mdlext-selectfield__label {\n  box-sizing: border-box;\n  color: $input-text-label-color;\n  font-size: $input-text-font-size;\n  top: ($input-text-padding + $input-text-vertical-spacing);\n  bottom: 0;\n  left: 0;\n  right: 0;\n  pointer-events: none;\n  position: absolute;\n  display: block;\n  width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-align: left;\n\n  .mdlext-selectfield.is-dirty &,\n  .mdlext-selectfield.has-placeholder & {\n    visibility: hidden;\n  }\n\n  // Floating Label\n  .mdlext-selectfield--floating-label & {\n    @include material-animation-default();\n  }\n\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    transition: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled.is-disabled & {\n    color: $input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused &,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty &,\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    color: $input-text-highlight-color;\n    font-size: $input-text-floating-label-fontsize;\n    top: $input-text-vertical-spacing - ($input-text-floating-label-fontsize + $input-text-padding);\n    visibility: visible;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder & {\n    top: -($input-text-floating-label-fontsize + $input-text-padding);\n  }\n\n  .mdlext-selectfield--floating-label.is-invalid & {\n    color: $input-text-error-color;\n    font-size: $input-text-floating-label-fontsize;\n  }\n\n  // The after label is the colored underline for the Selectfield.\n  &::after {\n    background-color: $input-text-highlight-color;\n    bottom: $input-text-vertical-spacing;\n    content: '';\n    height: 2px;\n    left: 45%;\n    position: absolute;\n    @include material-animation-default();\n\n    visibility: hidden;\n    width: 10px;\n  }\n\n  .mdlext-selectfield.is-focused &::after {\n    left: 0;\n    visibility: visible;\n    width: 100%;\n  }\n\n  .mdlext-selectfield.is-invalid &::after {\n    background-color: $input-text-error-color;\n  }\n}\n\n// SelectField Error.\n.mdlext-selectfield__error {\n  color: $input-text-error-color;\n  font-size: $input-text-floating-label-fontsize;\n  position: absolute;\n  margin-top: 3px;\n  visibility: hidden;\n  display: block;\n\n  .mdlext-selectfield.is-invalid & {\n    visibility: visible;\n  }\n}\n\n// Expandable Holder.\n.mdlext-selectfield__expandable-holder {\n  display: inline-block;\n  position: relative;\n  margin-left: $input-text-button-size;\n\n  @include material-animation-default();\n\n  // Safari (possibly others) need to be convinced that this field is actually\n  // visible, otherwise it cannot be tabbed to nor focused via a <label>.\n  // TODO: In some cases (Retina displays), this is big enough to render the\n  // inner element :(\n  max-width: 0.1px;\n\n  .mdlext-selectfield.is-focused &,\n  .mdlext-selectfield.is-dirty & {\n    // This is an unfortunate hack. Animating between widths in percent (%)\n    // in many browsers (Chrome, Firefox) only animates the inner visual style\n    // of the input - the outer bounding box still 'jumps'.\n    // Thus assume a sensible maximum, and animate to/from that value.\n    max-width: 600px;\n  }\n  .mdlext-selectfield__label::after {\n    bottom: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/selectfield/_selectfield.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/* Moved to aria-expanded-toggle.scss\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n*/\n\n.mdlext-menu-button {\n  box-sizing: border-box;\n  @include typo-menu();\n  text-transform: none;\n  position: relative;\n  height: $button-height;\n  padding: 0 $button-padding;\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n\n  > * {\n    margin: 0;\n    padding: 0 0 0 8px;\n  }\n\n  > *:first-child {\n    padding-left: 0;\n  }\n\n  > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n    margin-left: auto; // If more than one element, push last element to the right\n  }\n\n}\n\n.mdlext-menu-button__caption {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  line-height: 1.2;\n}\n\n.mdlext-menu,\n.mdlext-menu__item {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n}\n\n.mdlext-menu {\n  position: absolute; //fixed;\n  background: $default-dropdown-bg-color;\n  z-index: 1000;\n  min-width: 124px;\n  border-radius: 2px;\n  @include shadow-3dp();\n  display: inline-flex;\n  flex-direction: column;\n  padding: 0;\n  overflow: hidden;\n  overflow-y: auto;\n\n  &:focus {\n    outline-offset: -1px;\n    outline-width: 1px;\n  }\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n\n  &__item {\n    @include typo-body-1();\n    color: $default-item-text-color;\n    background-color: $default-dropdown-bg-color;\n    position: relative;\n    padding: 0 16px 0 24px;\n    align-items: center;\n    align-self: stretch;\n    text-decoration: none;\n    cursor: pointer;\n    white-space: nowrap;\n    user-select: none;\n    min-height: 40px;\n    overflow: hidden;\n\n    &[aria-selected='true'] {\n      background-color: $default-item-active-bg-color;\n    }\n\n    // checkmark\n    &[aria-selected='true']::before {\n      content:'\\2713';\n      position: absolute;\n      font-size: 1.4em;\n      left: 4px;\n      top: 50%;\n      transform: translateY(-50%);\n      pointer-events: none;\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $default-item-hover-bg-color;\n    }\n\n    &:focus {\n      outline-offset: -2px;\n      outline-width: 1px;\n      outline-color: $default-item-outline-color;\n      background-color: $default-item-focus-bg-color;\n    }\n\n    &::-moz-focus-inner {\n      border: 0;\n    }\n\n    &[disabled] {\n      color: $disabled-item-text-color;\n      background-color: transparent;\n      cursor: auto;\n      pointer-events: none;\n\n      > * {\n        color: $disabled-item-text-color;\n      }\n    }\n\n    &__caption {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0 0 0 8px;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n      margin-left: auto; // If more than one element, push last element to the right\n    }\n\n  }\n  &__item-separator {\n    margin: 0;\n    padding: 0;\n    border-bottom: 1px solid $default-item-divider-color;\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/menu-button/_menu-button.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * The bordered fields are based on / inspired by this CodePen: http://codepen.io/prajwal078/pen/LVJZXz?editors=010\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../variables\";\n@import \"../functions\";\n\n\n// \"Theme\" for this styling\n.mdlext-bordered-fields {\n  box-sizing: border-box;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  // Styling for textfield and selectfield.\n  .mdl-textfield,\n  .mdlext-selectfield {\n    padding: 0;\n    margin: $mdlext-bordered-field-vertical-spacing-top 0 $mdlext-bordered-field-vertical-spacing-bottom 0;\n\n    .mdl-textfield__input,\n    .mdlext-selectfield__select {\n      height: $mdlext-bordered-field-height;\n      background-color: $mdlext-bordered-field-background-color;\n      border: $mdlext-bordered-field-border-width solid $mdlext-bordered-field-border-color;\n      border-radius: $mdlext-bordered-field-border-radius;\n      padding: $mdlext-bordered-field-padding-top $mdlext-bordered-field-padding $mdlext-bordered-field-padding-bottom $mdlext-bordered-field-padding;\n      font-size: $mdlext-bordered-field-input-text-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      color: $mdlext-bordered-field-input-text-color;\n\n      &:disabled {\n        color: $mdlext-bordered-field-input-text-disabled-text-color;\n        background-color: $mdlext-bordered-field-disabled-background-color;\n        border-color: $mdlext-bordered-field-disabled-border-color;\n      }\n\n      // MDL can not handle required attribute properly. Planned for MDL-v2\n      //&:required {\n      //  background-color: $mdlext-bordered-field-required-background-color;\n      //  border-color: $mdlext-bordered-field-required-border-color;\n      //}\n\n      &:focus {\n        background-color: $mdlext-bordered-field-focus-background-color;\n        border-color: $mdlext-bordered-field-focus-border-color;\n      }\n\n      // MDL can not handle required. Planned for MDL-v2\n      //&:required:focus {\n      //  background-color: $mdlext-bordered-field-required-focus-background-color;\n      //  border-color: $mdlext-bordered-field-required-focus-border-color;\n      //}\n    }\n    .mdlext-selectfield__select {\n      padding-right: calc(1em + #{$mdlext-bordered-field-padding});  // space for down arrow\n    }\n\n    /*\n    &.is-dirty {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n      }\n    }\n    */\n\n    &.is-invalid {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        color: $mdlext-bordered-field-input-text-error-color;\n        border-color: $mdlext-bordered-field-error-border-color;\n        background-color: $mdlext-bordered-field-error-background-color;\n\n        &:focus {\n          //&:required:focus {\n          border-color: $mdlext-bordered-field-error-focus-border-color;\n          background-color: $mdlext-bordered-field-error-focus-background-color;\n        }\n      }\n    }\n  }\n\n  .mdlext-selectfield::after {\n    top: auto;\n    bottom: $mdlext-bordered-field-padding-bottom;  // Position of down arrow\n  }\n\n  fieldset[disabled] .mdlext-selectfield::after,\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-bordered-field-input-text-disabled-text-color);\n  }\n\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    background-color: $mdlext-bordered-field-disabled-background-color;\n    border-color: $mdlext-bordered-field-disabled-border-color;\n  }\n\n\n  // Styling for the label / floating label.\n  .mdl-textfield,\n  .mdlext-selectfield {\n\n    &.is-dirty,\n    &.has-placeholder {\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        visibility: hidden;\n      }\n    }\n    .mdl-textfield__label,\n    .mdlext-selectfield__label {\n      color: $mdlext-bordered-field-input-text-label-color;\n      font-size: $mdlext-bordered-field-label-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      padding-left: $mdlext-bordered-field-padding;\n      top: auto;\n      bottom: $mdlext-bordered-field-padding-bottom;\n\n      // Hides the colored underline for the textField/selectfield.\n      &::after {\n        background-color: transparent !important;\n        visibility: hidden !important;\n      }\n    }\n    &.mdl-textfield--floating-label.is-focused.is-focused,\n    &.mdl-textfield--floating-label.is-dirty.is-dirty,\n    &.mdl-textfield--floating-label.has-placeholder,\n    &.mdlext-selectfield--floating-label.is-focused.is-focused,\n    &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n    &.mdlext-selectfield--floating-label.has-placeholder {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-focus-color;\n        font-size: $mdlext-bordered-field-floating-label-font-size;\n        font-weight: $mdlext-bordered-field-floating-label-font-weight;\n        top: auto;\n        bottom: $mdlext-bordered-field-floating-label-focus-bottom;\n        visibility: visible;\n      }\n    }\n    &.mdl-textfield--floating-label.is-disabled.is-disabled,\n    &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-disabled-color;\n      }\n    }\n    &.mdl-textfield--floating-label.is-invalid.is-invalid,\n    &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-error-color;\n      }\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n    color: $mdlext-bordered-field-input-text-label-disabled-color;\n  }\n\n  // Icon(s) and/or button(s) inside textfield\n  .mdl-textfield,\n  .mdlext-selectfield {\n    &.mdlext-bordered-fields__icon-left,\n    &.mdlext-bordered-fields__icon-right {\n      & > i,\n      & > .mdl-button {\n        position: absolute;\n        bottom: $mdlext-bordered-field-padding-bottom - 2px;\n      }\n      & > i {\n        bottom: $mdlext-bordered-field-padding-bottom + 2px;\n      }\n    }\n    &.mdlext-bordered-fields__icon-left {\n      & > i:first-child,\n      & > .mdl-button:first-child {\n        left: $mdlext-bordered-field-padding/2;\n      }\n      & > i ~ .mdl-textfield__input,\n      & > .mdl-button ~ .mdl-textfield__input,\n      & > i ~ .mdlext-selectfield__select,\n      & > .mdl-button ~ .mdlext-selectfield__select {\n        padding-left: $input-text-button-size;\n      }\n      & > i ~ .mdl-textfield__label,\n      & > .mdl-button ~ .mdl-textfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n      & > i ~ .mdlext-selectfield__label,\n      & > .mdl-button ~ .mdlext-selectfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n    }\n    &.mdlext-bordered-fields__icon-right {\n      & > .mdl-textfield__input {\n        padding-right: $input-text-button-size;\n      }\n      & > i:last-child,\n      & > .mdl-button:last-child {\n        left: auto;\n        right: $mdlext-bordered-field-padding/2;\n      }\n    }\n    &.is-disabled i,\n    &.is-disabled .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield,\n  fieldset[disabled] .mdlext-selectfield {\n    i,\n    .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/bordered-fields/_bordered-fields.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-collapsible {\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.mdlext-collapsible-group,\n.mdlext-collapsible-region {\n  box-sizing: border-box;\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/collapsible/_collapsible.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-aria-toggle-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: 1.4em);\n}\n\n.mdlext-aria-toggle-material-icons {\n  @include mdlext-aria-expanded-toggle($font-size: 1.3em, $icon: 'expand_more', $icon-expanded: 'expand_less', $icon-offset: -$mdlext-accordion-header-padding);\n}\n\n.mdlext-accordion {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  &__panel {\n    box-sizing: border-box;\n    position: relative;\n    overflow: hidden;\n    display: flex;\n    flex-wrap: nowrap;\n  }\n\n  &__tab {\n    @include typo-title();\n\n    font-weight: 400;\n    line-height: 1.1;\n    box-sizing: border-box;\n    position: relative;\n    margin: 0;\n    padding: 0; // $mdlext-accordion-header-padding;\n    min-width: $mdlext-accordion-header-height;\n    min-height: $mdlext-accordion-header-height;\n    display: flex;\n    align-items: center;\n    align-self: stretch;\n    user-select: none;\n    color: $mdlext-accordion-header-secondary-color;\n    background-color: $mdlext-accordion-header-background-color;\n    cursor: pointer;\n    overflow: hidden;\n\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-accordion-header-focus-outline-color;\n      outline-width: 2px;\n    }\n\n    &[aria-expanded='true'] {\n      background-color: $mdlext-accordion-header-background-open-color;\n    }\n\n    &[aria-selected='true'] {\n      background-color: $mdlext-accordion-header-background-active-color;\n    }\n\n    &[disabled] {\n      background-color: $mdlext-accordion-header-disabled-color;\n      color: $mdlext-accordion-header-secondary-color-disabled;\n      pointer-events: none;\n\n      > * {\n        color: $mdlext-accordion-header-secondary-color-disabled;\n      }\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $mdlext-accordion-header-background-hover-color;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0;\n    }\n\n    &__caption {\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    &--ripple {\n      &[aria-selected='true']::before {\n        content: '';\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        background: $mdlext-accordion-ripple-color;\n        opacity: 0;\n        border-radius: 100%;\n        transform: scale(1, 1) translate(-50%);\n        transform-origin: 50% 50%;\n      }\n      &[aria-selected='true']:focus:not(:active)::before {\n        // http://easings.net/\n        animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; // cubic-bezier(0.4, 0.0, 1, 1); //cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; //ease-out;\n      }\n    }\n  }\n\n  &__tabpanel {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0 $mdlext-accordion-content-padding;\n    color: $mdlext-accordion-content-color;\n    background-color: $mdlext-accordion-content-background-color;\n    display: block;\n    overflow: auto;\n    flex-grow: 1;\n\n    &[hidden] {\n      @include mdlext-visually-hidden;\n    }\n  }\n}\n\n// Vertical layout\n.mdlext-accordion {\n\n  &--vertical {\n    flex-direction: column;\n    flex-wrap: nowrap;\n\n    .mdlext-accordion__panel {\n      min-height: $mdlext-accordion-header-height;\n      flex-direction: column;\n    }\n\n    .mdlext-accordion__tab {\n      height: $mdlext-accordion-header-height;\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        height: 1px;\n        width: 100%;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n        animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        padding-left: $mdlext-accordion-header-padding;\n      }\n\n      > *:first-child {\n        padding-left: 0;\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        margin-left: auto; // If more than one element, push last element to the right\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 5%;\n          height: 10%;\n        }\n      }\n\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleY(1);\n        animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleY(0);\n          animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;\n          animation-delay: 0.1s;\n        }\n      }\n    }\n  }\n}\n\n// Horizontal layout\n.mdlext-accordion {\n\n  &--horizontal {\n\n    .mdlext-accordion__panel {\n      min-width: $mdlext-accordion-header-height;\n      width: $mdlext-accordion-header-height;\n    }\n\n    &[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {\n      width: 100%;\n    }\n\n    .mdlext-accordion__tab {\n      flex-direction: column-reverse;\n      width: $mdlext-accordion-header-height;\n      white-space: nowrap;\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        top: 0;\n        right: 0;\n        height: 100%;\n        width: 1px;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n\n        // Figure out how to animate a vertical line\n        //animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        //transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        //transform: rotate(-90deg) translateX(50%);\n        transform: rotate(-90deg) translateX($mdlext-accordion-header-padding);\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        // If more than one element, push last element to top\n        margin-bottom: auto;\n        transform: rotate(-90deg) translateX(0);\n      }\n\n      &__caption {\n        transform: rotate(-90deg) translateX(50%);\n        padding-right: $mdlext-accordion-header-padding + 8px;\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 10%;\n          height: 5%;\n        }\n      }\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleX(1);\n        animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleX(0);\n          animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;\n        }\n      }\n    }\n  }\n}\n\n.mdlext-accordion {\n\n  &__panel:first-child > &__tab {\n    // Use container to set outer borders\n    border-top-color: transparent;\n    border-left-color: transparent;\n  }\n\n  &[aria-multiselectable=\"false\"] {\n    .mdlext-accordion__panel.is-expanded {\n      flex-grow: 1;\n    }\n  }\n}\n\n// Making accordion appear disabled.\n// Note: does not prevent tabbing into a disabled accordion\n.mdlext-accordion[disabled] {\n  * {\n    pointer-events: none;\n  }\n  .mdlext-accordion__tab {\n    background-color: $mdlext-accordion-header-disabled-color;\n    color: $mdlext-accordion-header-secondary-color-disabled;\n\n    > * {\n      color: $mdlext-accordion-header-secondary-color-disabled;\n    }\n  }\n  .mdlext-accordion__tabpanel {\n    opacity: 0.8;\n    filter: blur(1px) grayscale(80%);\n  }\n}\n\n\n@keyframes mdlext-accordion-tab-ripple {\n  0% {\n    transform: scale(0, 0);\n    opacity: 1;\n  }\n  20% {\n    transform: scale(25, 25);\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n    transform: scale(40, 40);\n  }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0.1); }\n  40% { transform: scaleY(1.03); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.03); }\n  100% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0); }\n  60% { transform: scaleY(1.01); }\n  80% { transform: scaleY(0.98); }\n  100% { transform: scaleY(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-y {\n  0% { transform: scaleY(1); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(0); }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0.1); }\n  40% { transform: scaleX(1.03); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.03); }\n  100% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0); }\n  60% { transform: scaleX(1.01); }\n  80% { transform: scaleX(0.98); }\n  100% { transform: scaleX(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-x {\n  0% { transform: scaleX(1); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(0); }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/accordion/_accordion.scss","/* -------------------------------------------------------------\n   Palette samples. Not part of build\n----------------------------------------------------------------\n\n$mdlext-light-color-primary:          #9E9E9E !default;\n$mdlext-light-color-primary-dark:     #616161 !default;\n$mdlext-light-color-primary-light:    #9E9E9E !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #212121 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #E040FB !default;\n$mdlext-light-color-accent-light:     #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FAFAFA !default;\n\n$mdlext-light-color-primary:          #F5F5F5 !default;\n$mdlext-light-color-primary-dark:     #E0E0E0 !default;\n$mdlext-light-color-primary-light:    #8BC34A !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #000000 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #FFC107 !default;\n$mdlext-light-color-accent-light:     #FFC107 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-light-color-primary:          #673AB7 !default;\n$mdlext-light-color-primary-dark:     #512DA8 !default;\n$mdlext-light-color-primary-light:    #673AB7 !default;   // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #D1C4E9 !default;   // text color on primary/primary dark background\n$mdlext-light-color-accent:           #4CAF50 !default;\n$mdlext-light-color-accent-light:     #4CAF50 !default;   // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-light-color-primary:          #4CAF50 !default;\n$mdlext-light-color-primary-dark:     #388E3C !default;\n$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #FF5252 !default;\n$mdlext-light-color-accent-light:     #FF5252 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-light-color-primary:          #4CAF50 !default;\n$mdlext-light-color-primary-dark:     #388E3C !default;\n$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #03A9F4 !default;\n$mdlext-light-color-accent-light:     #03A9F4 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-dark-color-primary:           #212121 !default;\n$mdlext-dark-color-primary-dark:      #000000 !default;\n$mdlext-dark-color-primary-light:     #607D8B !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-dark-color-primary-contrast:  #FFFFFF !default;  // text color on primary/primary dark background\n$mdlext-dark-color-accent:            #FF5722 !default;\n$mdlext-dark-color-accent-light:      #FF5722 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-dark-color-accent-contrast:   #FFFFFF !default;\n\n*/\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_color-themes.scss","@import \"color-themes\";\n\n.mdlext-light-color-theme {\n  background-color: $mdlext-light-content-background-color;\n  color: $mdlext-light-text-color-primary;\n\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n// -----------------------------\n.mdlext-light-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-light-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-light-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  a {\n    color: $mdlext-light-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-light-badge-background;\n      color: $mdlext-light-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-light-badge-color-inverse;\n        background: $mdlext-light-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-light-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-light-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-light-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-light-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-primary-color-alt;\n      color: $mdlext-light-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-fab-color-alt;\n      color: $mdlext-light-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-light-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-secondary-color-alt;\n      background-color: $mdlext-light-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-light-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-fab-text-color-alt;\n      background-color: $mdlext-light-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-light-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-light-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-color 16px,\n          $mdlext-light-range-color 0);\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(to left,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-bg-color 16px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n\n      /**************************** Thumbs ****************************/\n      &::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-color 0%,\n          $mdlext-light-range-color 37.5%,\n          $mdlext-light-range-faded-color 37.5%,\n          $mdlext-light-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-light-range-bg-color 66.67%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-bg-focus-color 0%,\n          $mdlext-light-range-bg-focus-color 25%,\n          $mdlext-light-range-bg-color 25%,\n          $mdlext-light-range-bg-color 37.5%,\n          $mdlext-light-range-bg-focus-color 37.5%,\n          $mdlext-light-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-light-range-bg-color 77.78%,\n          $mdlext-light-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-light-range-bg-color 50%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-light-range-bg-color 25px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-light-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-light-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-light-checkbox-focus-color;\n    background-color: $mdlext-light-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-light-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-light-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-light-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-light-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-light-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-light-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-light-switch-faded-color;\n    background-color: $mdlext-light-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-light-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-light-data-table-divider-color;\n    background-color: $mdlext-light-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-light-data-table-selection-color;\n        }\n        &:hover {\n          background-color: $mdlext-light-data-table-hover-color;\n        }\n      }\n    }\n    th {\n      color: $data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-light-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-light-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-light-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-light-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-light-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-light-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-light-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-light-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-light-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-default-item-active-bg-color;\n    }\n  }\n}\n\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-card {\n    background: $mdlext-light-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-light-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-light-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-light-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-light-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-light-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(0, 0, 0, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-light-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-light-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-light-content-background-color;\n      color: $mdlext-light-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-light-color-theme {\n  background: $mdlext-light-default-dropdown-bg-color;\n}\n\n.mdlext-light-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-light-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-light-default-item-text-color;\n      background-color: $mdlext-light-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-light-default-item-outline-color;\n        background-color: $mdlext-light-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-light-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-light-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-light-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-light-bordered-field-background-color;\n        border-color: $mdlext-light-bordered-field-border-color;\n        color: $mdlext-light-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-light-bordered-field-disabled-background-color;\n          border-color: $mdlext-light-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-light-bordered-field-focus-background-color;\n          border-color: $mdlext-light-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-light-bordered-field-input-text-error-color;\n          border-color: $mdlext-light-bordered-field-error-border-color;\n          background-color: $mdlext-light-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-light-bordered-field-error-focus-border-color;\n            background-color: $mdlext-light-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-light-bordered-field-disabled-background-color;\n      border-color: $mdlext-light-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-light-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n  }\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-light-accordion-header-secondary-color;\n      background-color: $mdlext-light-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-light-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-light-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-light-accordion-header-disabled-color;\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-light-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-light-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-light-accordion-content-color;\n      background-color: $mdlext-light-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-light-accordion-header-disabled-color;\n      color: $mdlext-light-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_light-color-theme.scss","@import \"color-themes\";\n\n.mdlext-dark-color-theme {\n  background-color: $mdlext-dark-content-background-color;\n  color: $mdlext-dark-text-color-primary;\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n.mdlext-dark-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n.mdlext-dark-color-theme {\n  a {\n    color: $mdlext-dark-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-dark-badge-background;\n      color: $mdlext-dark-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-dark-badge-color-inverse;\n        background: $mdlext-dark-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-dark-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-dark-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-dark-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-primary-color-alt;\n      color: $mdlext-dark-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-fab-color-alt;\n      color: $mdlext-dark-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-dark-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-secondary-color-alt;\n      background-color: $mdlext-dark-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-dark-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-fab-text-color-alt;\n      background-color: $mdlext-dark-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-dark-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-dark-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(\n          to right,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-color 16px,\n          $mdlext-dark-range-color 0\n        );\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(\n          to left,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-bg-color 16px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n      &::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-color 0%,\n          $mdlext-dark-range-color 37.5%,\n          $mdlext-dark-range-faded-color 37.5%,\n          $mdlext-dark-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-dark-range-bg-color 66.67%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-bg-focus-color 0%,\n          $mdlext-dark-range-bg-focus-color 25%,\n          $mdlext-dark-range-bg-color 25%,\n          $mdlext-dark-range-bg-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-dark-range-bg-color 77.78%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-dark-range-bg-color 50%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-dark-range-bg-color 25px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-dark-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-dark-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-dark-checkbox-focus-color;\n    background-color: $mdlext-dark-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-dark-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-dark-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-dark-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-dark-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-dark-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-dark-switch-faded-color;\n    background-color: $mdlext-dark-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-dark-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-dark-data-table-divider-color;\n    background-color: $mdlext-dark-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-dark-data-table-selection-color;\n        }\n\n        &:hover {\n          background-color: $mdlext-dark-data-table-hover-color;\n        }\n      }\n    }\n\n    th {\n      color: $mdlext-dark-data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-dark-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-dark-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-dark-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-dark-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-dark-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-dark-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-dark-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-dark-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-dark-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-default-item-active-bg-color;\n    }\n  }\n}\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-card {\n    background: $mdlext-dark-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-dark-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-dark-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-dark-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-dark-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-dark-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(255, 255, 255, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-dark-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-dark-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-dark-content-background-color;\n      color: $mdlext-dark-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-dark-color-theme {\n  background: $mdlext-dark-default-dropdown-bg-color;\n}\n\n.mdlext-dark-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-dark-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-dark-default-item-text-color;\n      background-color: $mdlext-dark-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-dark-default-item-outline-color;\n        background-color: $mdlext-dark-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-dark-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-dark-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-dark-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-dark-bordered-field-background-color;\n        border-color: $mdlext-dark-bordered-field-border-color;\n        color: $mdlext-dark-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-dark-bordered-field-disabled-background-color;\n          border-color: $mdlext-dark-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-dark-bordered-field-focus-background-color;\n          border-color: $mdlext-dark-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-dark-bordered-field-input-text-error-color;\n          border-color: $mdlext-dark-bordered-field-error-border-color;\n          background-color: $mdlext-dark-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-dark-bordered-field-error-focus-border-color;\n            background-color: $mdlext-dark-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-dark-bordered-field-disabled-background-color;\n      border-color: $mdlext-dark-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-dark-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n  }\n\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-dark-accordion-header-secondary-color;\n      background-color: $mdlext-dark-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-dark-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-dark-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-dark-accordion-header-disabled-color;\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-dark-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-dark-accordion-content-color;\n      background-color: $mdlext-dark-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-dark-accordion-header-disabled-color;\n      color: $mdlext-dark-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_dark-color-theme.scss"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext-eqjs.min.css b/node_modules/mdl-ext/lib/mdl-ext-eqjs.min.css
new file mode 100644
index 0000000..1dbbe23
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext-eqjs.min.css
@@ -0,0 +1,2 @@
+.mdlext-aria-expanded-plus-minus{font-family:inherit;font-weight:inherit;font-style:inherit;font-size:24px;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-expanded-plus-minus:after{content:"+";margin-left:0}[aria-expanded=true]>.mdlext-aria-expanded-plus-minus:after{content:"-";margin-left:0}.mdlext-aria-expanded-more-less{font-family:Material Icons;font-weight:inherit;font-style:inherit;font-size:24px;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-expanded-more-less:after{content:"expand_more";margin-left:0}[aria-expanded=true]>.mdlext-aria-expanded-more-less:after{content:"expand_less";margin-left:0}.mdlext-layout__sticky-header{position:absolute;overflow:visible;background:transparent linear-gradient(180deg,#3f51b5 0,#3f51b5);transition:.1s ease-in-out}.mdlext-layout__sticky-header.mdlext-is-scroll{background:transparent linear-gradient(180deg,rgba(63,81,181,.98) 100%,rgba(63,81,181,.95) 0)}:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__drawer-button{visibility:hidden}:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__header-row{padding-left:16px}.is-small-screen.has-drawer .mdlext-layout__sticky-header,:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header{display:-ms-flexbox;display:flex}.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button,:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button{visibility:visible}.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row,:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row{padding-left:64px}dialog.mdlext-dialog{position:absolute;border:0;opacity:0;padding:0;background-color:transparent}dialog.mdlext-dialog[open]{animation:mdlext-open-dialog .5s .2s forwards}dialog.mdlext-dialog[open]::-webkit-backdrop{animation:mdlext-darken-backdrop .2s forwards}dialog.mdlext-dialog[open]::backdrop{animation:mdlext-darken-backdrop .2s forwards}dialog.mdlext-dialog[open]+.backdrop{animation:mdlext-darken-backdrop .2s forwards}@keyframes mdlext-darken-backdrop{to{background:rgba(0,0,0,.86)}}@keyframes mdlext-open-dialog{to{opacity:1}}.mdlext-grid{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-ms-flex-align:stretch;align-items:stretch}.mdlext-grid.mdlext-grid--no-spacing{padding:0}.mdlext-grid>.mdlext-cell{box-sizing:border-box}.mdlext-grid>.mdlext-cell--top{-ms-flex-item-align:start;align-self:flex-start}.mdlext-grid>.mdlext-cell--middle{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.mdlext-grid>.mdlext-cell--bottom{-ms-flex-item-align:end;align-self:flex-end}.mdlext-grid>.mdlext-cell--stretch{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.mdlext-grid .mdlext-grid--no-spacing>.mdlext-cell{margin:0}.mdlext-grid>.mdlext-cell--order-1{-ms-flex-order:1;order:1}.mdlext-grid>.mdlext-cell--order-2{-ms-flex-order:2;order:2}.mdlext-grid>.mdlext-cell--order-3{-ms-flex-order:3;order:3}.mdlext-grid>.mdlext-cell--order-4{-ms-flex-order:4;order:4}.mdlext-grid>.mdlext-cell--order-5{-ms-flex-order:5;order:5}.mdlext-grid>.mdlext-cell--order-6{-ms-flex-order:6;order:6}.mdlext-grid>.mdlext-cell--order-7{-ms-flex-order:7;order:7}.mdlext-grid>.mdlext-cell--order-8{-ms-flex-order:8;order:8}.mdlext-grid>.mdlext-cell--order-9{-ms-flex-order:9;order:9}.mdlext-grid>.mdlext-cell--order-10{-ms-flex-order:10;order:10}.mdlext-grid>.mdlext-cell--order-11{-ms-flex-order:11;order:11}.mdlext-grid>.mdlext-cell--order-12{-ms-flex-order:12;order:12}.mdlext-grid:before{display:none;content:"grid_phone: 0, grid_tablet: 480, grid_desktop: 840"}.mdlext-grid[data-eq-state$=grid_phone]{padding:8px}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell{margin:8px;width:calc(100% - 16px)}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--hide-phone{display:none!important}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-1-phone.mdlext-cell--order-1-phone{-ms-flex-order:1;order:1}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-2-phone.mdlext-cell--order-2-phone{-ms-flex-order:2;order:2}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-3-phone.mdlext-cell--order-3-phone{-ms-flex-order:3;order:3}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-4-phone.mdlext-cell--order-4-phone{-ms-flex-order:4;order:4}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-5-phone.mdlext-cell--order-5-phone{-ms-flex-order:5;order:5}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-6-phone.mdlext-cell--order-6-phone{-ms-flex-order:6;order:6}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-7-phone.mdlext-cell--order-7-phone{-ms-flex-order:7;order:7}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-8-phone.mdlext-cell--order-8-phone{-ms-flex-order:8;order:8}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-9-phone.mdlext-cell--order-9-phone{-ms-flex-order:9;order:9}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-10-phone.mdlext-cell--order-10-phone{-ms-flex-order:10;order:10}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-11-phone.mdlext-cell--order-11-phone{-ms-flex-order:11;order:11}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--order-12-phone.mdlext-cell--order-12-phone{-ms-flex-order:12;order:12}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-col-phone.mdlext-cell--1-col-phone{width:calc(25% - 16px)}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-col-phone.mdlext-cell--2-col-phone{width:calc(50% - 16px)}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-col-phone.mdlext-cell--3-col-phone{width:calc(75% - 16px)}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--4-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--4-col-phone.mdlext-cell--4-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--5-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--5-col-phone.mdlext-cell--5-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--6-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--6-col-phone.mdlext-cell--6-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--7-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--7-col-phone.mdlext-cell--7-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--8-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--8-col-phone.mdlext-cell--8-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--9-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--9-col-phone.mdlext-cell--9-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--10-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--10-col-phone.mdlext-cell--10-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--11-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--11-col-phone.mdlext-cell--11-col-phone,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--12-col,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--12-col-phone.mdlext-cell--12-col-phone{width:calc(100% - 16px)}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-offset,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone{margin-left:calc(25% + 8px)}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-offset,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone{margin-left:calc(50% + 8px)}.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-offset,.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone{margin-left:calc(75% + 8px)}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]{padding:0}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell{margin:0;width:100%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-col-phone.mdlext-cell--1-col-phone{width:25%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-col-phone.mdlext-cell--2-col-phone{width:50%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-col-phone.mdlext-cell--3-col-phone{width:75%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--4-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--4-col-phone.mdlext-cell--4-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--5-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--5-col-phone.mdlext-cell--5-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--6-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--6-col-phone.mdlext-cell--6-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--7-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--7-col-phone.mdlext-cell--7-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--8-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--8-col-phone.mdlext-cell--8-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--9-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--9-col-phone.mdlext-cell--9-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--10-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--10-col-phone.mdlext-cell--10-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--11-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--11-col-phone.mdlext-cell--11-col-phone,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--12-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--12-col-phone.mdlext-cell--12-col-phone{width:100%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone{margin-left:25%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone{margin-left:50%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_phone]>.mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone{margin-left:75%}.mdlext-grid[data-eq-state$=grid_tablet]{padding:8px}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell{margin:8px;width:calc(50% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--hide-tablet{display:none!important}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-1-tablet.mdlext-cell--order-1-tablet{-ms-flex-order:1;order:1}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-2-tablet.mdlext-cell--order-2-tablet{-ms-flex-order:2;order:2}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-3-tablet.mdlext-cell--order-3-tablet{-ms-flex-order:3;order:3}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-4-tablet.mdlext-cell--order-4-tablet{-ms-flex-order:4;order:4}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-5-tablet.mdlext-cell--order-5-tablet{-ms-flex-order:5;order:5}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-6-tablet.mdlext-cell--order-6-tablet{-ms-flex-order:6;order:6}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-7-tablet.mdlext-cell--order-7-tablet{-ms-flex-order:7;order:7}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-8-tablet.mdlext-cell--order-8-tablet{-ms-flex-order:8;order:8}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-9-tablet.mdlext-cell--order-9-tablet{-ms-flex-order:9;order:9}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-10-tablet.mdlext-cell--order-10-tablet{-ms-flex-order:10;order:10}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-11-tablet.mdlext-cell--order-11-tablet{-ms-flex-order:11;order:11}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--order-12-tablet.mdlext-cell--order-12-tablet{-ms-flex-order:12;order:12}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet{width:calc(25% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet{width:calc(50% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet{width:calc(75% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--8-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--9-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--10-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--11-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--12-col,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet{width:calc(100% - 16px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-offset,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet{margin-left:calc(12.5% + 8px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-offset,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet{margin-left:calc(25% + 8px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-offset,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet{margin-left:calc(37.5% + 8px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-offset,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet{margin-left:calc(50% + 8px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-offset,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet{margin-left:calc(62.5% + 8px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-offset,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet{margin-left:calc(75% + 8px)}.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-offset,.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet{margin-left:calc(87.5% + 8px)}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]{padding:0}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell{margin:0;width:50%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet{width:12.5%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet{width:25%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet{width:37.5%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet{width:50%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet{width:62.5%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet{width:75%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet{width:87.5%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--8-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--9-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--10-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--11-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--12-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet{width:100%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet{margin-left:12.5%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet{margin-left:25%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet{margin-left:37.5%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet{margin-left:50%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet{margin-left:62.5%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet{margin-left:75%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_tablet]>.mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet{margin-left:87.5%}.mdlext-grid[data-eq-state$=grid_desktop]{padding:8px}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell{margin:8px;width:calc(33.33333% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--hide-desktop{display:none!important}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-1-desktop.mdlext-cell--order-1-desktop{-ms-flex-order:1;order:1}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-2-desktop.mdlext-cell--order-2-desktop{-ms-flex-order:2;order:2}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-3-desktop.mdlext-cell--order-3-desktop{-ms-flex-order:3;order:3}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-4-desktop.mdlext-cell--order-4-desktop{-ms-flex-order:4;order:4}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-5-desktop.mdlext-cell--order-5-desktop{-ms-flex-order:5;order:5}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-6-desktop.mdlext-cell--order-6-desktop{-ms-flex-order:6;order:6}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-7-desktop.mdlext-cell--order-7-desktop{-ms-flex-order:7;order:7}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-8-desktop.mdlext-cell--order-8-desktop{-ms-flex-order:8;order:8}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-9-desktop.mdlext-cell--order-9-desktop{-ms-flex-order:9;order:9}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-10-desktop.mdlext-cell--order-10-desktop{-ms-flex-order:10;order:10}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-11-desktop.mdlext-cell--order-11-desktop{-ms-flex-order:11;order:11}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--order-12-desktop.mdlext-cell--order-12-desktop{-ms-flex-order:12;order:12}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop{width:calc(8.33333% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop{width:calc(16.66667% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop{width:calc(25% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop{width:calc(33.33333% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop{width:calc(41.66667% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop{width:calc(50% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop{width:calc(58.33333% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop{width:calc(66.66667% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop{width:calc(75% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop{width:calc(83.33333% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop{width:calc(91.66667% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--12-col,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop{width:calc(100% - 16px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop{margin-left:calc(8.33333% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop{margin-left:calc(16.66667% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop{margin-left:calc(25% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop{margin-left:calc(33.33333% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop{margin-left:calc(41.66667% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop{margin-left:calc(50% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop{margin-left:calc(58.33333% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop{margin-left:calc(66.66667% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop{margin-left:calc(75% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop{margin-left:calc(83.33333% + 8px)}.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-offset,.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop{margin-left:calc(91.66667% + 8px)}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]{padding:0}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell{margin:0;width:33.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop{width:8.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop{width:16.66667%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop{width:25%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop{width:33.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop{width:41.66667%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop{width:50%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop{width:58.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop{width:66.66667%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop{width:75%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop{width:83.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop{width:91.66667%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--12-col,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop{width:100%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop{margin-left:8.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop{margin-left:16.66667%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop{margin-left:25%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop{margin-left:33.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop{margin-left:41.66667%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop{margin-left:50%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop{margin-left:58.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop{margin-left:66.66667%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop{margin-left:75%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop{margin-left:83.33333%}.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-offset,.mdlext-grid--no-spacing.mdlext-grid[data-eq-state$=grid_desktop]>.mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop{margin-left:91.66667%}html:before{content:".mdlext-grid"}ul.mdlext-lightboard{list-style:none}.mdlext-lightboard{margin:0 auto;padding:0;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:stretch;align-items:stretch}.mdlext-lightboard,.mdlext-lightboard *,.mdlext-lightboard :after,.mdlext-lightboard :before,.mdlext-lightboard input[type=search]{box-sizing:border-box}.mdlext-lightboard .mdlext-lightboard__slide{background-color:#f8f8f8;border:1px solid #d8d8d8;border-radius:5px;box-shadow:2px 2px 6px -1px hsla(300,5%,85%,.5);position:relative;display:block;max-width:250px}.mdlext-lightboard .mdlext-lightboard__slide:before{content:"";display:block;padding-top:100%}.mdlext-lightboard .mdlext-lightboard__slide:active,.mdlext-lightboard .mdlext-lightboard__slide:focus,.mdlext-lightboard .mdlext-lightboard__slide:hover{border-color:#b8b8b8;background-color:#e8e8e8;box-shadow:2px 2px 12px -1px #dbd7db}.mdlext-lightboard .mdlext-lightboard__slide:active figcaption,.mdlext-lightboard .mdlext-lightboard__slide:focus figcaption,.mdlext-lightboard .mdlext-lightboard__slide:hover figcaption{color:#000!important;background-color:hsla(0,0%,100%,.2)}.mdlext-lightboard .mdlext-lightboard__slide:focus{outline-offset:-2px;outline-color:inherit}.mdlext-lightboard .mdlext-lightboard__slide[aria-selected=true]{background-color:#e8e8e8}.mdlext-lightboard .mdlext-lightboard__slide[aria-selected=true] figcaption{color:#000!important;background-color:hsla(0,0%,100%,.2)}.mdlext-lightboard .mdlext-lightboard__slide__frame,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container{text-decoration:none;display:block;overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0}.mdlext-lightboard .mdlext-lightboard__slide__frame:focus,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:focus{outline-offset:-2px;outline-color:inherit}.mdlext-lightboard .mdlext-lightboard__slide__frame .mdl-ripple,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container .mdl-ripple{background:#3f51b5}.mdlext-lightboard .mdlext-lightboard__slide__frame figure,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure{display:block;position:absolute;top:0;left:0;right:0;bottom:0}.mdlext-lightboard .mdlext-lightboard__slide__frame figure img,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure img{position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;max-width:100%;max-height:100%;border-width:0;border-radius:3px}.mdlext-lightboard .mdlext-lightboard__slide__frame figure figcaption,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure figcaption{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1;letter-spacing:0;color:#bdbdbd;position:absolute;bottom:-2px;white-space:nowrap;overflow:hidden;max-width:100%;width:100%;text-align:center;text-overflow:ellipsis;padding:4px 0}.mdlext-lightboard .mdlext-lightboard__slide__frame:hover figcaption,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:hover figcaption{color:#000!important;background-color:hsla(0,0%,100%,.2)}.mdlext-lightboard{padding:-1px}.mdlext-lightboard .mdlext-lightboard__slide{margin:1px;width:calc(1 / 2 * 100% - 2px)}.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:8px}.mdlext-lightboard.mdlext-lightboard--no-spacing{padding:0}.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide{margin:0;width:50%}.mdlext-lightboard:before{display:none;content:"lightboard_medium_small: 480, lightboard_medium: 660, lightboard_medium_large: 840, lightboard_large: 1200"}.mdlext-lightboard[data-eq-state$=lightboard_medium_small]{padding:-2px}.mdlext-lightboard[data-eq-state$=lightboard_medium_small] .mdlext-lightboard__slide{margin:2px;width:calc(1 / 4 * 100% - 4px)}.mdlext-lightboard[data-eq-state$=lightboard_medium_small] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:8px}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_medium_small]{padding:0}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_medium_small] .mdlext-lightboard__slide{margin:0;width:25%}.mdlext-lightboard[data-eq-state$=lightboard_medium]{padding:-2px}.mdlext-lightboard[data-eq-state$=lightboard_medium] .mdlext-lightboard__slide{margin:2px;width:calc(1 / 5 * 100% - 4px)}.mdlext-lightboard[data-eq-state$=lightboard_medium] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:8px}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_medium]{padding:0}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_medium] .mdlext-lightboard__slide{margin:0;width:20%}.mdlext-lightboard[data-eq-state$=lightboard_medium_large]{padding:-4px}.mdlext-lightboard[data-eq-state$=lightboard_medium_large] .mdlext-lightboard__slide{margin:4px;width:calc(1 / 6 * 100% - 8px)}.mdlext-lightboard[data-eq-state$=lightboard_medium_large] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:12px}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_medium_large]{padding:0}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_medium_large] .mdlext-lightboard__slide{margin:0;width:16.66667%}.mdlext-lightboard[data-eq-state$=lightboard_large]{padding:-4px}.mdlext-lightboard[data-eq-state$=lightboard_large] .mdlext-lightboard__slide{margin:4px;width:calc(1 / 7 * 100% - 8px)}.mdlext-lightboard[data-eq-state$=lightboard_large] .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:12px}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_large]{padding:0}.mdlext-lightboard--no-spacing.mdlext-lightboard[data-eq-state$=lightboard_large] .mdlext-lightboard__slide{margin:0;width:14.28571%}html:before{display:none;content:".mdlext-grid,.mdlext-lightboard"}.mdlext-lightbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;position:relative;width:auto;max-width:100%;margin:0 auto;border:0;border-radius:0;background-color:#fff;outline:0;display:block}.mdlext-lightbox,.mdlext-lightbox *,.mdlext-lightbox :after,.mdlext-lightbox :before,.mdlext-lightbox input[type=search]{box-sizing:border-box}.mdlext-lightbox .mdlext-lightbox__slider{position:absolute;top:0;left:0;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.mdlext-lightbox .mdlext-lightbox__slider .mdlext-lightbox__slider__slide{-ms-flex-negative:0;flex-shrink:0;display:block;text-align:left;color:#7f7f7f;background-size:cover;background-position:50%;background-repeat:no-repeat}.mdlext-lightbox figure{margin:0;padding:0;position:relative}.mdlext-lightbox figure img{width:100%;max-width:100%;height:auto;border:0;outline:0}.mdlext-lightbox figure figcaption{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1;letter-spacing:0;display:block;position:absolute;bottom:0;left:0;right:0;max-width:100%;height:auto;max-height:50%;overflow:auto;padding:8px;background-color:hsla(0,0%,100%,.76);transform-origin:bottom;transform:scaleY(0);transition:.2s ease-in-out}.mdlext-lightbox figure figcaption.mdlext-lightbox__show-figcaption{transform:scaleY(1)}.mdlext-lightbox figure figcaption tbody th{text-align:left}.mdlext-lightbox figure figcaption tbody td,.mdlext-lightbox figure figcaption tbody th{vertical-align:text-top}.mdlext-lightbox .mdl-card__menu{color:#fff;z-index:1}.mdlext-lightbox footer{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;background-color:hsla(0,0%,100%,.86)}.mdlext-lightbox footer .mdl-card__supporting-text{-ms-flex:1;flex:1;overflow:hidden;padding:0;height:18px;width:100%}.mdlext-lightbox footer nav{display:-ms-flexbox;display:flex}.mdlext-lightbox.mdlext-lightbox--sticky-footer footer{position:fixed;bottom:0;left:0}ul.mdlext-carousel{list-style:none}.mdlext-carousel{overflow:hidden;width:100%;display:block;white-space:nowrap;font-size:0;background-color:transparent}.mdlext-carousel,.mdlext-carousel__slide{box-sizing:border-box;margin:0;padding:0;height:100%}.mdlext-carousel__slide{display:inline-block;position:relative;outline:0;border-top:2px solid transparent}.mdlext-carousel__slide[aria-selected=true] figcaption,.mdlext-carousel__slide[aria-selected] figcaption{color:#000!important;background-color:hsla(0,0%,100%,.25)}.mdlext-carousel__slide[aria-selected=true]:after,.mdlext-carousel__slide[aria-selected]:after{height:2px;width:100%;display:block;content:" ";top:-2px;left:0;position:absolute;background:#ff4081;animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;transition:all 1s cubic-bezier(.4,0,1,1)}.mdlext-carousel__slide a{text-decoration:none}.mdlext-carousel__slide figure{box-sizing:border-box;position:relative;height:100%;margin:0;padding:0}.mdlext-carousel__slide figure img{box-sizing:border-box;max-height:100%}.mdlext-carousel__slide figure figcaption{box-sizing:border-box;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1;letter-spacing:0;color:#bdbdbd;position:absolute;bottom:0;left:0;white-space:nowrap;overflow:hidden;max-width:100%;width:100%;text-align:center;text-overflow:ellipsis;padding:4px 0}.mdlext-carousel__slide figure:hover figcaption{color:#000!important;background-color:hsla(0,0%,100%,.25)}.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container{text-decoration:none;display:block;overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0;outline:0}.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container .mdl-ripple{background:#3f51b5}.mdlext-selectfield{box-sizing:border-box;position:relative;font-size:16px;display:inline-block;width:300px;max-width:100%;margin:0;padding:20px 0}.mdlext-selectfield .mdl-button{bottom:20px;position:absolute}.mdlext-selectfield:after{border-top:.5em solid inherit;border-top-width:.5em;border-top-style:solid;border-top-color:inherit;border-left:.35em solid transparent;border-right:.35em solid transparent;position:absolute;right:.5em;top:50%;transform:translateY(-50%);pointer-events:none}.mdlext-selectfield.is-disabled:after,.mdlext-selectfield:after{content:"";width:0;height:0;font-size:inherit;line-height:inherit}.mdlext-selectfield.is-disabled:after{color:rgba(0,0,0,.12);border-top:.5em solid rgba(0,0,0,.12);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-selectfield--align-right{text-align:right}.mdlext-selectfield--full-width{width:100%}.mdlext-selectfield--expandable{min-height:32px;min-width:32px;width:auto}.mdlext-selectfield__select{box-sizing:border-box;border:0;border-radius:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;text-indent:.01px;text-overflow:"";outline:none;box-shadow:none;font-size:16px;font-family:Helvetica,Arial,sans-serif;padding:4px calc(1.2em + 4px) 4px 0;width:100%;border-bottom:1px solid rgba(0,0,0,.12);display:block;margin:0;background:none;text-align:left;color:inherit}.mdlext-selectfield__select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.mdlext-selectfield__select:focus::-ms-value{background-color:inherit;color:inherit}.mdlext-selectfield__select::-ms-expand{display:none}.mdlext-selectfield.is-focused .mdlext-selectfield__select{outline:none}.mdlext-selectfield.is-invalid .mdlext-selectfield__select{border-color:#d50000;box-shadow:none}.mdlext-selectfield.is-disabled .mdlext-selectfield__select,fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{border-bottom:1px dotted rgba(0,0,0,.12);color:rgba(0,0,0,.26);background-color:transparent}.mdlext-selectfield__select option{color:rgba(0,0,0,.87);box-sizing:border-box;background-color:inherit}.mdlext-selectfield__label{box-sizing:border-box;color:rgba(0,0,0,.26);font-size:16px;top:24px;bottom:0;left:0;right:0;pointer-events:none;position:absolute;display:block;width:100%;overflow:hidden;white-space:nowrap;text-align:left}.mdlext-selectfield.has-placeholder .mdlext-selectfield__label,.mdlext-selectfield.is-dirty .mdlext-selectfield__label{visibility:hidden}.mdlext-selectfield--floating-label .mdlext-selectfield__label{transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label{transition:none}.mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label,fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.26)}.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label{color:#3f51b5;font-size:12px;top:4px;visibility:visible}.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder .mdlext-selectfield__label{top:-16px}.mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label{color:#d50000;font-size:12px}.mdlext-selectfield__label:after{background-color:#3f51b5;bottom:20px;content:"";height:2px;left:45%;position:absolute;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdlext-selectfield.is-focused .mdlext-selectfield__label:after{left:0;visibility:visible;width:100%}.mdlext-selectfield.is-invalid .mdlext-selectfield__label:after{background-color:#d50000}.mdlext-selectfield__error{color:#d50000;font-size:12px;position:absolute;margin-top:3px;visibility:hidden;display:block}.mdlext-selectfield.is-invalid .mdlext-selectfield__error{visibility:visible}.mdlext-selectfield__expandable-holder{display:inline-block;position:relative;margin-left:32px;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);max-width:.1px}.mdlext-selectfield.is-dirty .mdlext-selectfield__expandable-holder,.mdlext-selectfield.is-focused .mdlext-selectfield__expandable-holder{max-width:600px}.mdlext-selectfield__expandable-holder .mdlext-selectfield__label:after{bottom:0}.mdlext-menu-button{box-sizing:border-box;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:1;letter-spacing:0;text-transform:none;position:relative;height:36px;padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch}.mdlext-menu-button>*{margin:0;padding:0 0 0 8px}.mdlext-menu-button>:first-child{padding-left:0}.mdlext-menu-button>:last-child:not(:only-child):not(.mdlext-menu__item__caption){margin-left:auto}.mdlext-menu-button__caption{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.mdlext-menu,.mdlext-menu__item{box-sizing:border-box;margin:0;padding:0;list-style:none;display:-ms-flexbox;display:flex}.mdlext-menu{position:absolute;background:#fff;z-index:1000;min-width:124px;border-radius:2px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;padding:0;overflow:hidden;overflow-y:auto}.mdlext-menu:focus{outline-offset:-1px;outline-width:1px}.mdlext-menu[hidden]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;pointer-events:none}.mdlext-menu__item{font-size:14px;font-weight:400;line-height:24px;letter-spacing:0;color:rgba(0,0,0,.87);background-color:#fff;position:relative;padding:0 16px 0 24px;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;text-decoration:none;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:40px;overflow:hidden}.mdlext-menu__item[aria-selected=true]{background-color:#e0e0e0}.mdlext-menu__item[aria-selected=true]:before{content:"\2713";position:absolute;font-size:1.4em;left:4px;top:50%;transform:translateY(-50%);pointer-events:none}.mdlext-menu__item:hover:not([disabled]){background-color:#eee}.mdlext-menu__item:focus{outline-offset:-2px;outline-width:1px;outline-color:#bdbdbd;background-color:#eee}.mdlext-menu__item::-moz-focus-inner{border:0}.mdlext-menu__item[disabled]{color:#bdbdbd;background-color:transparent;cursor:auto;pointer-events:none}.mdlext-menu__item[disabled]>*{color:#bdbdbd}.mdlext-menu__item__caption{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mdlext-menu__item>*{margin:0;padding:0 0 0 8px}.mdlext-menu__item>:first-child{padding-left:0}.mdlext-menu__item>:last-child:not(:only-child):not(.mdlext-menu__item__caption){margin-left:auto}.mdlext-menu__item-separator{margin:0;padding:0;border-bottom:1px solid rgba(0,0,0,.12)}.mdlext-bordered-fields,.mdlext-bordered-fields *{box-sizing:border-box}.mdlext-bordered-fields .mdl-textfield,.mdlext-bordered-fields .mdlext-selectfield{padding:0;margin:0 0 20px}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{height:46px;background-color:hsla(0,0%,100%,.2);border:1px solid rgba(0,0,0,.26);border-radius:3px;padding:20px 8px 4px;font-size:16px;font-weight:400;color:inherit}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled{color:rgba(0,0,0,.12);background-color:hsla(0,0%,100%,.2);border-color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus{background-color:hsla(0,0%,93%,.2);border-color:#3f51b5}.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{padding-right:calc(1em + 8px)}.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select{color:inherit;border-color:#d50000;background-color:hsla(0,100%,92%,.5)}.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus{border-color:#a20000;background-color:hsla(0,100%,92%,.5)}.mdlext-bordered-fields .mdlext-selectfield:after{top:auto;bottom:4px}.mdlext-bordered-fields .mdlext-selectfield.is-disabled:after,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield:after{color:rgba(0,0,0,.12);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid rgba(0,0,0,.12);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{color:rgba(0,0,0,.12);background-color:hsla(0,0%,100%,.2);border-color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdlext-selectfield__label{visibility:hidden}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.26);font-size:16px;font-weight:400;padding-left:8px;top:auto;bottom:4px}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label:after,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label:after,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label:after,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label:after{background-color:transparent!important;visibility:hidden!important}.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label{color:#3f51b5;font-size:12px;font-weight:400;top:auto;bottom:24px;visibility:visible}.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label{color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label{color:#d50000}.mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label,.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>.mdl-button,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>.mdl-button,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>i{position:absolute;bottom:2px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>i{bottom:6px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button:first-child,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i:first-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button:first-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i:first-child{left:4px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__select,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__select{padding-left:32px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__label{left:24px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>.mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>.mdl-textfield__input{padding-right:32px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>.mdl-button:last-child,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>i:last-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>.mdl-button:last-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>i:last-child{left:auto;right:4px}.mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,.mdlext-bordered-fields .mdl-textfield.is-disabled i,.mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button,.mdlext-bordered-fields .mdlext-selectfield.is-disabled i,.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,.mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i{color:rgba(0,0,0,.12);pointer-events:none}.mdlext-collapsible{cursor:pointer}.mdlext-collapsible,.mdlext-collapsible-group,.mdlext-collapsible-region{box-sizing:border-box}.mdlext-collapsible-group[hidden],.mdlext-collapsible-region[hidden]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;pointer-events:none}.mdlext-aria-toggle-plus-minus{font-family:inherit;font-weight:inherit;font-style:inherit;font-size:1.4em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-toggle-plus-minus:after{content:"+";margin-left:0}[aria-expanded=true]>.mdlext-aria-toggle-plus-minus:after{content:"-";margin-left:0}.mdlext-aria-toggle-material-icons{font-family:Material Icons;font-weight:inherit;font-style:inherit;font-size:1.3em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-toggle-material-icons:after{content:"expand_more";margin-left:-8px}[aria-expanded=true]>.mdlext-aria-toggle-material-icons:after{content:"expand_less";margin-left:-8px}.mdlext-accordion{margin:0;padding:0;list-style:none;display:-ms-flexbox;display:flex}.mdlext-accordion,.mdlext-accordion *{box-sizing:border-box}.mdlext-accordion__panel{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.mdlext-accordion__panel,.mdlext-accordion__tab{box-sizing:border-box;position:relative;overflow:hidden;display:-ms-flexbox;display:flex}.mdlext-accordion__tab{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em;font-weight:400;line-height:1.1;margin:0;padding:0;min-width:56px;min-height:56px;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#000;background-color:hsla(0,0%,62%,.2);cursor:pointer}.mdlext-accordion__tab:focus{outline-offset:-2px;outline-color:invert;outline-width:2px}.mdlext-accordion__tab[aria-expanded=true]{background-color:hsla(0,0%,62%,.3)}.mdlext-accordion__tab[aria-selected=true]{background-color:hsla(0,0%,62%,.4)}.mdlext-accordion__tab[disabled]{background-color:hsla(0,0%,62%,.12);color:rgba(0,0,0,.26);pointer-events:none}.mdlext-accordion__tab[disabled]>*{color:rgba(0,0,0,.26)}.mdlext-accordion__tab:hover:not([disabled]){background-color:hsla(0,0%,62%,.4)}.mdlext-accordion__tab>*{margin:0;padding:0}.mdlext-accordion__tab__caption{padding-left:8px;padding-right:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mdlext-accordion__tab>:first-child{padding-left:0}.mdlext-accordion__tab--ripple[aria-selected=true]:before{content:"";position:absolute;top:50%;left:50%;background:hsla(0,0%,100%,.5);opacity:0;border-radius:100%;transform:scale(1) translate(-50%);transform-origin:50% 50%}.mdlext-accordion__tab--ripple[aria-selected=true]:focus:not(:active):before{animation:mdlext-accordion-tab-ripple 1s cubic-bezier(.4,0,.4,1) .01s alternate forwards}.mdlext-accordion__tabpanel{box-sizing:border-box;margin:0;padding:0 8px;color:inherit;background-color:transparent;display:block;overflow:auto;-ms-flex-positive:1;flex-grow:1}.mdlext-accordion__tabpanel[hidden]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.mdlext-accordion--vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.mdlext-accordion--vertical .mdlext-accordion__panel{min-height:56px;-ms-flex-direction:column;flex-direction:column}.mdlext-accordion--vertical .mdlext-accordion__tab{height:56px;border-top:1px solid hsla(0,0%,62%,.5);padding-left:8px;padding-right:8px}.mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected=true]:after{position:absolute;bottom:0;left:0;height:1px;width:100%;display:block;content:" ";background-color:hsla(0,0%,59%,.5);animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;transition:all 1s cubic-bezier(.4,0,1,1)}.mdlext-accordion--vertical .mdlext-accordion__tab>*{padding-left:8px}.mdlext-accordion--vertical .mdlext-accordion__tab>:first-child{padding-left:0}.mdlext-accordion--vertical .mdlext-accordion__tab>:last-child:not(:only-child):not(.mdlext-accordion__tab__caption){margin-left:auto}.mdlext-accordion--vertical .mdlext-accordion__tab--ripple[aria-selected=true]:before{width:5%;height:10%}.mdlext-accordion--vertical .mdlext-accordion__tabpanel{border-top:1px solid hsla(0,0%,62%,.5)}.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation{transform:scaleY(1);animation:mdlext-accordion-show-tabpanel-y .2s ease-in-out}.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation[hidden]{transform:scaleY(0);animation:mdlext-accordion-hide-tabpanel-y .2s ease-out;animation-delay:.1s}.mdlext-accordion--horizontal .mdlext-accordion__panel{min-width:56px;width:56px}.mdlext-accordion--horizontal[aria-multiselectable=true] .mdlext-accordion__panel.is-expanded{width:100%}.mdlext-accordion--horizontal .mdlext-accordion__tab{-ms-flex-direction:column-reverse;flex-direction:column-reverse;width:56px;white-space:nowrap;border-left:1px solid hsla(0,0%,62%,.5)}.mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected=true]:after{position:absolute;top:0;right:0;height:100%;width:1px;display:block;content:" ";background-color:hsla(0,0%,59%,.5)}.mdlext-accordion--horizontal .mdlext-accordion__tab>*{transform:rotate(-90deg) translateX(8px)}.mdlext-accordion--horizontal .mdlext-accordion__tab>:last-child:not(:only-child):not(.mdlext-accordion__tab__caption){margin-bottom:auto;transform:rotate(-90deg) translateX(0)}.mdlext-accordion--horizontal .mdlext-accordion__tab__caption{transform:rotate(-90deg) translateX(50%);padding-right:16px}.mdlext-accordion--horizontal .mdlext-accordion__tab--ripple[aria-selected=true]:before{width:10%;height:5%}.mdlext-accordion--horizontal .mdlext-accordion__tabpanel{border-left:1px solid hsla(0,0%,62%,.5)}.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation{transform:scaleX(1);animation:mdlext-accordion-show-tabpanel-x .2s ease-in-out}.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation[hidden]{transform:scaleX(0);animation:mdlext-accordion-hide-tabpanel-x .2s ease-out}.mdlext-accordion__panel:first-child>.mdlext-accordion__tab{border-top-color:transparent;border-left-color:transparent}.mdlext-accordion[aria-multiselectable=false] .mdlext-accordion__panel.is-expanded{-ms-flex-positive:1;flex-grow:1}.mdlext-accordion[disabled] *{pointer-events:none}.mdlext-accordion[disabled] .mdlext-accordion__tab{background-color:hsla(0,0%,62%,.12);color:rgba(0,0,0,.26)}.mdlext-accordion[disabled] .mdlext-accordion__tab>*{color:rgba(0,0,0,.26)}.mdlext-accordion[disabled] .mdlext-accordion__tabpanel{opacity:.8;filter:blur(1px) grayscale(80%)}@keyframes mdlext-accordion-tab-ripple{0%{transform:scale(0);opacity:1}20%{transform:scale(25);opacity:1}to{opacity:0;transform:scale(40)}}@keyframes mdlext-accordion-show-tabpanel-y{0%{transform:scaleY(0)}60%{transform:scaleY(1.01)}80%{transform:scaleY(.98)}to{transform:scaleY(1)}}@keyframes mdlext-accordion-hide-tabpanel-y{0%{transform:scaleY(1)}60%{transform:scaleY(.98)}80%{transform:scaleY(1.01)}to{transform:scaleY(0)}}@keyframes mdlext-accordion-show-tabpanel-x{0%{transform:scaleX(0)}60%{transform:scaleX(1.01)}80%{transform:scaleX(.98)}to{transform:scaleX(1)}}@keyframes mdlext-accordion-hide-tabpanel-x{0%{transform:scaleX(1)}60%{transform:scaleX(.98)}80%{transform:scaleX(1.01)}to{transform:scaleX(0)}}.mdlext-light-color-theme{background-color:#fafafa;color:rgba(0,0,0,.87)}.mdlext-light-color-theme a{outline-color:inherit}.mdlext-light-color-theme .mdl-color--primary{background-color:#4caf50!important}.mdlext-light-color-theme .mdl-color--primary-contrast{background-color:#c8e6c9!important}.mdlext-light-color-theme .mdl-color--primary-dark{background-color:#388e3c!important}.mdlext-light-color-theme .mdl-color--accent{background-color:#e040fb!important}.mdlext-light-color-theme .mdl-color--accent-contrast{background-color:#fafafa!important}.mdlext-light-color-theme .mdl-color-text--primary{color:#4caf50!important}.mdlext-light-color-theme .mdl-color-text--primary-contrast{color:#c8e6c9!important}.mdlext-light-color-theme .mdl-color-text--primary-dark{color:#388e3c!important}.mdlext-light-color-theme .mdl-color-text--accent{color:#e040fb!important}.mdlext-light-color-theme .mdl-color-text--accent-contrast{color:#fafafa!important}.mdlext-light-color-theme a{color:#e040fb}.mdlext-light-color-theme .mdl-badge[data-badge]:after{background:#e040fb;color:#fafafa}.mdlext-light-color-theme .mdl-badge.mdl-badge--no-background[data-badge]:after{color:#e040fb;background:#fafafa}.mdlext-light-color-theme .mdl-button{background:transparent;color:#000}.mdlext-light-color-theme .mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdlext-light-color-theme .mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdlext-light-color-theme .mdl-button.mdl-button--colored{color:#4caf50}.mdlext-light-color-theme .mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-button--raised{background:hsla(0,0%,62%,.2)}.mdlext-light-color-theme .mdl-button--raised:active,.mdlext-light-color-theme .mdl-button--raised:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored{background:#4caf50;color:#c8e6c9}.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:active,.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active),.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:hover{background-color:#3d8b40}.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple{background:#c8e6c9}.mdlext-light-color-theme .mdl-button--fab{background:hsla(0,0%,62%,.2)}.mdlext-light-color-theme .mdl-button--fab:active,.mdlext-light-color-theme .mdl-button--fab:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored{background:#e040fb;color:#fafafa}.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:active,.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active),.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:hover{background-color:#e040fb}.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fafafa}.mdlext-light-color-theme .mdl-button--icon{color:inherit}.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary{color:#4caf50}.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple{background:#c8e6c9}.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#c8e6c9;background-color:#4caf50}.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent{color:#e040fb}.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fafafa}.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fafafa;background-color:#e040fb}.mdlext-light-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);background-color:transparent}.mdlext-light-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button--fab[disabled][disabled],.mdlext-light-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded{background:transparent;color:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-track{background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-track{background:none;color:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 16px,#e040fb 0,#e040fb 0)}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-upper{background:linear-gradient(270deg,transparent,transparent 16px,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 0)}.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,#e040fb 0,#e040fb 37.5%,rgba(224,64,251,.26) 0,rgba(224,64,251,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-ms-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border-color:#e040fb;background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border-color:rgba(0,0,0,.26);background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 66.67%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12) 0,rgba(0,0,0,.12) 25%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 37.5%,rgba(0,0,0,.12) 0,rgba(0,0,0,.12) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 77.78%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled+.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb{border-color:rgba(0,0,0,.26);background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb{border-color:rgba(0,0,0,.26);background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 50%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 25px,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 0)}.mdlext-light-color-theme .mdl-slider__background-flex{background:transparent}.mdlext-light-color-theme .mdl-slider__background-lower{background:#e040fb}.mdlext-light-color-theme .mdl-slider__background-upper{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield__input{border-bottom-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__input{border-color:#d32f2f}.mdlext-light-color-theme .mdl-textfield.is-disabled .mdl-textfield__input,.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input{background-color:transparent;border-bottom-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield__label{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-textfield__label:after{background-color:#e040fb}.mdlext-light-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label{color:#e040fb}.mdlext-light-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#d32f2f}.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#d32f2f}.mdlext-light-color-theme .mdl-textfield__error{color:#d32f2f}.mdlext-light-color-theme .mdl-checkbox__box-outline{border-color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline{border-color:#e040fb}.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-checkbox__focus-helper{background-color:transparent}.mdlext-light-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(224,64,251,.26);background-color:rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-checkbox__tick-outline{background:transparent}.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:#e040fb}.mdlext-light-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-checkbox__ripple-container .mdl-ripple{background:#e040fb}.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-radio__outer-circle{border-color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle{border-color:#e040fb}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle,.mdlext-light-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-radio__inner-circle{background:#e040fb}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle,.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__label,.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-radio__ripple-container .mdl-ripple{background:#e040fb}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple,.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-icon-toggle__label{color:#616161}.mdlext-light-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:#e040fb}.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-switch__track{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__track{background:rgba(224,64,251,.54)}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__track,.mdlext-light-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch{background:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-switch__thumb{background:#fafafa}.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__thumb{background:#e040fb}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__thumb,.mdlext-light-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch{background:#bdbdbd}.mdlext-light-color-theme .mdl-switch__focus-helper{background-color:transparent}.mdlext-light-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper{background-color:rgba(0,0,0,.1)}.mdlext-light-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(224,64,251,.26);background-color:rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__label,.mdlext-light-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch{color:#bdbdbd}.mdlext-light-color-theme .mdl-switch__ripple-container .mdl-ripple{background:#e040fb}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple,.mdlext-light-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-data-table{border-color:rgba(0,0,0,.12);background-color:#fafafa}.mdlext-light-color-theme .mdl-data-table tbody tr.is-selected,.mdlext-light-color-theme .mdl-data-table tbody tr:hover{background-color:#eee}.mdlext-light-color-theme .mdl-data-table th{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-menu__outline{background:#fff}.mdlext-light-color-theme .mdl-menu__item{color:rgba(0,0,0,.87);background-color:transparent;outline-color:#bdbdbd}.mdlext-light-color-theme .mdl-menu__item--full-bleed-divider{border-bottom-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled],.mdlext-light-color-theme .mdl-menu__item[disabled]{color:#bdbdbd;background-color:transparent}.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:focus,.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:hover,.mdlext-light-color-theme .mdl-menu__item[disabled]:focus,.mdlext-light-color-theme .mdl-menu__item[disabled]:hover{background-color:transparent}.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple,.mdlext-light-color-theme .mdl-menu__item[disabled] .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-menu__item:focus,.mdlext-light-color-theme .mdl-menu__item:hover{background-color:#eee}.mdlext-light-color-theme .mdl-menu__item:active{background-color:#e0e0e0}.mdlext-light-color-theme .mdl-card{background:#fafafa}.mdlext-light-color-theme .mdl-card__media{background-color:#e040fb}.mdlext-light-color-theme .mdl-card__title{color:rgba(0,0,0,.87)}.mdlext-light-color-theme .mdl-card__title.mdl-card--border{border-bottom-color:rgba(0,0,0,.1)}.mdlext-light-color-theme .mdl-card__title-text{color:inherit}.mdlext-light-color-theme .mdl-card__subtitle-text,.mdlext-light-color-theme .mdl-card__supporting-text{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-card__actions{background-color:transparent}.mdlext-light-color-theme .mdl-card__actions.mdl-card--border{border-top-color:rgba(0,0,0,.1)}.mdlext-light-color-theme .mdlext-selectfield.is-disabled:after{color:rgba(0,0,0,.12);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid rgba(0,0,0,.12);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-light-color-theme .mdlext-selectfield__select{border-bottom-color:rgba(0,0,0,.26);color:inherit}.mdlext-light-color-theme .mdlext-selectfield__select option{background-color:#fafafa;color:rgba(0,0,0,.87)}.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select{border-color:#d32f2f}.mdlext-light-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select,.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{background-color:transparent;border-bottom-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-selectfield__label{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label{color:#e040fb}.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label{color:#d32f2f}.mdlext-light-color-theme .mdlext-selectfield__label:after{background-color:#e040fb}.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label:after{background-color:#d32f2f}.mdlext-light-color-theme .mdlext-selectfield__error{color:#d32f2f}.mdlext-light-color-theme .mdlext-menu,.mdlext-menu.mdlext-light-color-theme{background:#fff}.mdlext-light-color-theme .mdlext-menu__item{color:rgba(0,0,0,.87);background-color:#fff}.mdlext-light-color-theme .mdlext-menu__item:active,.mdlext-light-color-theme .mdlext-menu__item[aria-selected=true]{background-color:#e0e0e0}.mdlext-light-color-theme .mdlext-menu__item:hover:not([disabled]){background-color:#eee}.mdlext-light-color-theme .mdlext-menu__item:focus{outline-color:#bdbdbd;background-color:#eee}.mdlext-light-color-theme .mdlext-menu__item[disabled],.mdlext-light-color-theme .mdlext-menu__item[disabled]>*{color:#bdbdbd}.mdlext-light-color-theme .mdlext-menu__item-separator{border-bottom:1px solid rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{background-color:hsla(0,0%,98%,.1);border-color:rgba(0,0,0,.26);color:inherit}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled{color:rgba(0,0,0,.26);background-color:hsla(0,0%,98%,.1);border-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus{background-color:hsla(0,0%,88%,.1);border-color:#e040fb}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select{color:inherit;border-color:#d32f2f;background-color:hsla(0,0%,100%,.5)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus{border-color:#ab2424;background-color:hsla(0,0%,100%,.5)}.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled:after,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield:after{color:rgba(0,0,0,.26);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid rgba(0,0,0,.26);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.26);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{color:rgba(0,0,0,.26);background-color:hsla(0,0%,98%,.1);border-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label{color:#e040fb}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label{color:#d32f2f}.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i{color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-accordion__tab{color:#000;background-color:hsla(0,0%,46%,.2)}.mdlext-light-color-theme .mdlext-accordion__tab:focus{outline-color:hsla(0,0%,43%,.5)}.mdlext-light-color-theme .mdlext-accordion__tab[aria-expanded=true]{background-color:hsla(0,0%,46%,.3)}.mdlext-light-color-theme .mdlext-accordion__tab[aria-selected=true]{background-color:hsla(0,0%,46%,.4)}.mdlext-light-color-theme .mdlext-accordion__tab[disabled]{background-color:hsla(0,0%,46%,.12);color:rgba(0,0,0,.26);pointer-events:none}.mdlext-light-color-theme .mdlext-accordion__tab[disabled]>*{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-accordion__tab:hover:not([disabled]){background-color:hsla(0,0%,46%,.4)}.mdlext-light-color-theme .mdlext-accordion__tab--ripple[aria-selected=true]:before{background:hsla(0,0%,46%,.4)}.mdlext-light-color-theme .mdlext-accordion__tabpanel{color:inherit;background-color:transparent}.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab{border-top:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected=true]:after{background-color:hsla(0,0%,40%,.5)}.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel{border-top:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab{border-left:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected=true]:after{background-color:hsla(0,0%,40%,.5)}.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel{border-left:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion__panel:first-child>.mdlext-light-color-theme .mdlext-accordion__tab{border-top-color:transparent;border-left-color:transparent}.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab{background-color:hsla(0,0%,46%,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab>*{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel{opacity:.8;filter:blur(1px) grayscale(80%)}.mdlext-dark-color-theme{background-color:#303030;color:#fff}.mdlext-dark-color-theme a{outline-color:inherit}.mdlext-dark-color-theme .mdl-color--primary{background-color:#ffc107!important}.mdlext-dark-color-theme .mdl-color--primary-contrast{background-color:#fff8e1!important}.mdlext-dark-color-theme .mdl-color--primary-dark{background-color:#ffa000!important}.mdlext-dark-color-theme .mdl-color--accent{background-color:#536dfe!important}.mdlext-dark-color-theme .mdl-color--accent-contrast{background-color:#fff!important}.mdlext-dark-color-theme .mdl-color-text--primary{color:#ffc107!important}.mdlext-dark-color-theme .mdl-color-text--primary-contrast{color:#fff8e1!important}.mdlext-dark-color-theme .mdl-color-text--primary-dark{color:#ffa000!important}.mdlext-dark-color-theme .mdl-color-text--accent{color:#536dfe!important}.mdlext-dark-color-theme .mdl-color-text--accent-contrast{color:#fff!important}.mdlext-dark-color-theme a{color:#536dfe}.mdlext-dark-color-theme .mdl-badge[data-badge]:after{background:#536dfe;color:#fff}.mdlext-dark-color-theme .mdl-badge.mdl-badge--no-background[data-badge]:after{color:#536dfe;background:#fff}.mdlext-dark-color-theme .mdl-button{background:transparent;color:#fff}.mdlext-dark-color-theme .mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdlext-dark-color-theme .mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-dark-color-theme .mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdlext-dark-color-theme .mdl-button.mdl-button--colored{color:#ffc107}.mdlext-dark-color-theme .mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-dark-color-theme .mdl-button--raised{background:hsla(0,0%,62%,.2)}.mdlext-dark-color-theme .mdl-button--raised:active,.mdlext-dark-color-theme .mdl-button--raised:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored{background:#ffc107;color:#fff8e1}.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:active,.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active),.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:hover{background-color:#d39e00}.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff8e1}.mdlext-dark-color-theme .mdl-button--fab{background:hsla(0,0%,62%,.2)}.mdlext-dark-color-theme .mdl-button--fab:active,.mdlext-dark-color-theme .mdl-button--fab:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored{background:#536dfe;color:#fff}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:active,.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active),.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:hover{background-color:#536dfe}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdlext-dark-color-theme .mdl-button--icon{color:inherit}.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary{color:#ffc107}.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff8e1}.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff8e1;background-color:#ffc107}.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent{color:#536dfe}.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#536dfe}.mdlext-dark-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button[disabled][disabled]{color:hsla(0,0%,100%,.26);background-color:transparent}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button--fab[disabled][disabled],.mdlext-dark-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button--raised[disabled][disabled]{background-color:hsla(0,0%,100%,.12);color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button--colored[disabled][disabled]{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-slider.is-upgraded{background:transparent;color:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-track{background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-track{background:none;color:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 16px,#536dfe 0,#536dfe 0)}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-upper{background:linear-gradient(270deg,transparent,transparent 16px,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 0)}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(83,109,254,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(83,109,254,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,#536dfe 0,#536dfe 37.5%,rgba(83,109,254,.5) 0,rgba(83,109,254,.5) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-ms-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border-color:#536dfe;background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border-color:hsla(0,0%,100%,.87);background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px hsla(0,0%,100%,.5);background:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px hsla(0,0%,100%,.5);background:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border-color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border-color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 66.67%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 25%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 37.5%,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 77.78%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled+.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb{border-color:hsla(0,0%,100%,.87);background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb{border-color:hsla(0,0%,100%,.87);background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 50%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 25px,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 0)}.mdlext-dark-color-theme .mdl-slider__background-flex{background:transparent}.mdlext-dark-color-theme .mdl-slider__background-lower{background:#536dfe}.mdlext-dark-color-theme .mdl-slider__background-upper{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-textfield__input{border-bottom-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__input{border-color:#ff1744}.mdlext-dark-color-theme .mdl-textfield.is-disabled .mdl-textfield__input,.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input{background-color:transparent;border-bottom-color:hsla(0,0%,100%,.12);color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-textfield__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-textfield__label:after{background-color:#536dfe}.mdlext-dark-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label{color:#536dfe}.mdlext-dark-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#ff1744}.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#ff1744}.mdlext-dark-color-theme .mdl-textfield__error{color:#ff1744}.mdlext-dark-color-theme .mdl-checkbox__box-outline{border-color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline{border-color:#536dfe}.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline{border-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-checkbox__focus-helper{background-color:transparent}.mdlext-dark-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(83,109,254,.26);background-color:rgba(83,109,254,.26)}.mdlext-dark-color-theme .mdl-checkbox__tick-outline{background:transparent}.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:#536dfe}.mdlext-dark-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-checkbox__ripple-container .mdl-ripple{background:#536dfe}.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-radio__outer-circle{border-color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle{border-color:#536dfe}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle,.mdlext-dark-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio{border-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-radio__inner-circle{background:#536dfe}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle,.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle{background:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__label,.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-radio__ripple-container .mdl-ripple{background:#536dfe}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple,.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-icon-toggle__label{color:#616161}.mdlext-dark-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:#536dfe}.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdlext-dark-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(83,109,254,.26)}.mdlext-dark-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-switch__track{background:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__track{background:rgba(83,109,254,.5)}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__track,.mdlext-dark-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch{background:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdl-switch__thumb{background:#fafafa}.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__thumb,.mdlext-dark-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch{background:#fafafa}.mdlext-dark-color-theme .mdl-switch__focus-helper{background-color:transparent}.mdlext-dark-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper{background-color:rgba(0,0,0,.1)}.mdlext-dark-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(83,109,254,.26);background-color:rgba(83,109,254,.26)}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__label,.mdlext-dark-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch{color:#fafafa}.mdlext-dark-color-theme .mdl-switch__ripple-container .mdl-ripple{background:#536dfe}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple,.mdlext-dark-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-data-table{border-color:hsla(0,0%,100%,.12);background-color:#303030}.mdlext-dark-color-theme .mdl-data-table tbody tr.is-selected{background-color:#424242}.mdlext-dark-color-theme .mdl-data-table tbody tr:hover{background-color:#212121}.mdlext-dark-color-theme .mdl-data-table th,.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending{color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-menu__outline{background:#000}.mdlext-dark-color-theme .mdl-menu__item{color:hsla(0,0%,100%,.87);background-color:transparent;outline-color:#616161}.mdlext-dark-color-theme .mdl-menu__item--full-bleed-divider{border-bottom-color:hsla(0,0%,100%,.2)}.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled],.mdlext-dark-color-theme .mdl-menu__item[disabled]{color:#9e9e9e;background-color:transparent}.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:focus,.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:hover,.mdlext-dark-color-theme .mdl-menu__item[disabled]:focus,.mdlext-dark-color-theme .mdl-menu__item[disabled]:hover{background-color:transparent}.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple,.mdlext-dark-color-theme .mdl-menu__item[disabled] .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-menu__item:focus,.mdlext-dark-color-theme .mdl-menu__item:hover{background-color:#212121}.mdlext-dark-color-theme .mdl-menu__item:active{background-color:#424242}.mdlext-dark-color-theme .mdl-card{background:#303030}.mdlext-dark-color-theme .mdl-card__media{background-color:#536dfe}.mdlext-dark-color-theme .mdl-card__title{color:#fff}.mdlext-dark-color-theme .mdl-card__title.mdl-card--border{border-bottom-color:rgba(0,0,0,.1)}.mdlext-dark-color-theme .mdl-card__title-text{color:inherit}.mdlext-dark-color-theme .mdl-card__subtitle-text{color:rgba(0,0,0,.7)}.mdlext-dark-color-theme .mdl-card__supporting-text{color:hsla(0,0%,100%,.7)}.mdlext-dark-color-theme .mdl-card__actions{background-color:hsla(0,0%,100%,0)}.mdlext-dark-color-theme .mdl-card__actions.mdl-card--border{border-top-color:rgba(0,0,0,.1)}.mdlext-dark-color-theme .mdlext-selectfield.is-disabled:after{color:hsla(0,0%,100%,.12);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid hsla(0,0%,100%,.12);border-top-width:.5em;border-top-style:solid;border-top-color:hsla(0,0%,100%,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-dark-color-theme .mdlext-selectfield__select{border-bottom-color:hsla(0,0%,100%,.26);color:inherit}.mdlext-dark-color-theme .mdlext-selectfield__select option{background-color:#303030;color:#fff}.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select{border-color:#ff1744}.mdlext-dark-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select,.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{background-color:transparent;border-bottom-color:hsla(0,0%,100%,.12);color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-selectfield__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label{color:#536dfe}.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label{color:#ff1744}.mdlext-dark-color-theme .mdlext-selectfield__label:after{background-color:#536dfe}.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label:after{background-color:#ff1744}.mdlext-dark-color-theme .mdlext-selectfield__error{color:#ff1744}.mdlext-dark-color-theme .mdlext-menu,.mdlext-menu.mdlext-dark-color-theme{background:#000}.mdlext-dark-color-theme .mdlext-menu__item{color:hsla(0,0%,100%,.87);background-color:#000}.mdlext-dark-color-theme .mdlext-menu__item:active,.mdlext-dark-color-theme .mdlext-menu__item[aria-selected=true]{background-color:#424242}.mdlext-dark-color-theme .mdlext-menu__item:hover:not([disabled]){background-color:#212121}.mdlext-dark-color-theme .mdlext-menu__item:focus{outline-color:#616161;background-color:#212121}.mdlext-dark-color-theme .mdlext-menu__item[disabled],.mdlext-dark-color-theme .mdlext-menu__item[disabled]>*{color:#9e9e9e}.mdlext-dark-color-theme .mdlext-menu__item-separator{border-bottom:1px solid hsla(0,0%,100%,.2)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{background-color:rgba(48,48,48,.1);border-color:hsla(0,0%,100%,.26);color:inherit}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled{color:hsla(0,0%,100%,.26);background-color:rgba(48,48,48,.1);border-color:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus{background-color:hsla(0,0%,9%,.1);border-color:#536dfe}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select{color:inherit;border-color:#ff1744;background-color:rgba(255,23,68,.1)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus{border-color:#e3002c;background-color:rgba(255,23,68,.1)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled:after,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield:after{color:hsla(0,0%,100%,.26);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid hsla(0,0%,100%,.26);border-top-width:.5em;border-top-style:solid;border-top-color:hsla(0,0%,100%,.26);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{color:hsla(0,0%,100%,.26);background-color:rgba(48,48,48,.1);border-color:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label{color:#536dfe}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label{color:#ff1744}.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i{color:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdlext-accordion__tab{color:#fff;background-color:#000}.mdlext-dark-color-theme .mdlext-accordion__tab:focus{outline-color:#a8a8a8}.mdlext-dark-color-theme .mdlext-accordion__tab[aria-expanded=true]{background-color:rgba(0,0,0,.9)}.mdlext-dark-color-theme .mdlext-accordion__tab[aria-selected=true]{background-color:rgba(0,0,0,.6)}.mdlext-dark-color-theme .mdlext-accordion__tab[disabled]{background-color:rgba(0,0,0,.4);color:hsla(0,0%,100%,.5);pointer-events:none}.mdlext-dark-color-theme .mdlext-accordion__tab[disabled]>*{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-accordion__tab:hover:not([disabled]){background-color:rgba(0,0,0,.5)}.mdlext-dark-color-theme .mdlext-accordion__tab--ripple[aria-selected=true]:before{background:rgba(0,0,0,.3)}.mdlext-dark-color-theme .mdlext-accordion__tabpanel{color:inherit;background-color:transparent}.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab{border-top:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected=true]:after{background-color:#a8a8a8}.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel{border-top:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab{border-left:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected=true]:after{background-color:#a8a8a8}.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel{border-left:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion__panel:first-child>.mdlext-dark-color-theme .mdlext-accordion__tab{border-top-color:transparent;border-left-color:transparent}.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab{background-color:rgba(0,0,0,.4);color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab>*{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel{opacity:.8;filter:blur(1px) grayscale(80%)}
+/*# sourceMappingURL=mdl-ext-eqjs.min.css.map*/
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext-eqjs.min.css.map b/node_modules/mdl-ext/lib/mdl-ext-eqjs.min.css.map
new file mode 100644
index 0000000..ecfade4
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext-eqjs.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss","webpack:///webpack:///src/_mixins.scss","webpack:///webpack:///src/mdl-ext-eqjs-build.scss","webpack:///webpack:///src/sticky-header/_sticky-header.scss","webpack:///webpack:///src/dialog/dialog.scss","webpack:///webpack:///src/grid/_grid-eqjs.scss","webpack:///webpack:///~/eq.js/sass/_eq.scss","webpack:///webpack:///src/lightboard/_lightboard.scss","webpack:///webpack:///~/material-design-lite/src/_mixins.scss","webpack:///webpack:///src/lightboard/_lightboard-eqjs.scss","webpack:///webpack:///src/lightbox/_lightbox.scss","webpack:///webpack:///src/carousel/_carousel.scss","webpack:///webpack:///src/selectfield/_selectfield.scss","webpack:///webpack:///src/menu-button/_menu-button.scss","webpack:///webpack:///src/bordered-fields/_bordered-fields.scss","webpack:///webpack:///src/collapsible/_collapsible.scss","webpack:///webpack:///src/accordion/_accordion.scss","webpack:///webpack:///src/color-themes/_light-color-theme.scss","webpack:///webpack:///src/color-themes/_dark-color-theme.scss"],"names":[],"mappings":"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HgBJ,YACE,aACA,0CIjGN,iBACE,qFACA,eACA,kBACA,WACA,eACA,cACA,SACA,gBACA,sBAEA,UACA,cAZF,yHAUE,sBAVF,0CAwBI,kBACA,MACA,OACA,iCACA,4CA5BJ,0EA+BM,kCACA,cACA,gBACA,cACA,sBACA,wBACA,4BAMD,wBAID,SACA,UACA,kBAjDJ,4BAoDM,WACA,eACA,YACA,SACA,UACD,mCF5DD,8CAgIF,eACA,gBACA,cACA,iBEnEI,cACA,kBACA,SACA,OACA,QACA,eACA,YACA,eACA,cACA,YACA,qCACA,wBACA,oBACA,2BA1EN,oEA6EQ,oBA7ER,4CAiFU,gBAjFV,wFAqFU,wBACD,iCAKL,WACA,UA5FJ,wBA+FI,iCACA,oDACA,yCACA,qCAEA,mDACE,kBACA,gBACA,UACA,YACA,WAEF,4BACE,iCA5GN,uDAiHI,eACA,SACA,OChHJ,mBACE,gBAGF,iBAIE,gBAEA,WACA,cACA,mBACA,YACA,6BAGF,yCAZE,sBACA,SACA,UAEA,YAQF,wBAEE,qBACA,kBACA,UAIA,iCAuFD,yGA9EK,qBACA,qCAIJ,+FAEE,WACA,WACA,cACA,YACA,SACA,OACA,kBACA,mBACA,4EACA,yCAIF,0BACE,qBAGF,+BACE,sBACA,kBACA,YACA,SACA,UAEA,mCACE,sBACA,gBACD,0CAGC,oEHmDJ,eACA,gBACA,cACA,iBGnDI,cACA,kBACA,SACA,OACA,mBACA,gBACA,eACA,WACA,kBACA,uBACA,cAGA,gDAIE,qBACA,qCA3ER,kEAiFI,qBACA,cACA,gBACA,kBACA,MACA,OACA,QACA,SACA,UAzFJ,8EA4FM,mBACD,oBCtGH,sBACA,kBACA,eACA,qBACA,YACA,eACA,SACA,eAGE,gCACA,YACA,kBAbJ,0BXnBE,8BACA,sBACA,uBACA,yBAKE,oCACA,qCW8BA,kBACA,WACA,QACA,2BACA,oBAIJ,gEXpDE,WACA,QACA,SACA,kBACA,oBWgDF,sCAEI,4DXhDF,sBACA,uBACA,iCAKE,oCACA,qCW8CJ,iCACE,iBAIF,gCACE,WACD,gCAIC,gBACA,eACA,WACD,4BAMC,sBACA,SACA,gBACA,wBACA,qBACA,oBACA,gBACA,kBACA,iBACA,aACA,gBAGA,eACA,uCACA,oCACA,WACA,wCACA,cACA,SACA,gBACA,gBACA,cAuCD,2CAnCG,kBACA,uBACD,6CAIC,yBACA,cApCJ,wCAwCI,aAG6B,2DAC7B,aACD,2DAGC,qBACA,gBAGqC,+HAErC,yCACA,sBACA,6BAGF,mCACE,sBACA,sBACA,yBAKJ,2BACE,sBACA,sBACA,eACA,SACA,SACA,OACA,QACA,oBACA,kBACA,cACA,WACA,gBACA,mBACA,gBAEA,uHAEE,kBAIF,+DJ+GA,wBACA,mDI5GoD,+EAClD,gBACD,yIAIC,sBAG6C,0OAG7C,cACA,eACA,QACA,mBAGF,sVAGE,UACD,0EAGC,cACA,eAIF,iCACE,yBACA,YACA,WACA,WACA,SACA,0CJwEF,mDIrEE,kBACA,WAGF,gEACE,OACA,mBACA,WACD,gEAGC,yBAKJ,2BACE,cACA,eACA,kBACA,eACA,kBACA,cAKD,0DAFG,mBACD,uCAKD,qBACA,kBACA,yCJoCA,mDI5BA,eAEA,0IAME,gBAEF,wEACE,SC7OJ,oBACE,oELuJA,eACA,gBACA,cACA,iBKxJA,oBACA,kBACA,YACA,eACA,iCACA,yCACA,+CATF,sBAYI,SACA,kBACD,iCAGC,eAGA,kFACA,iBACD,6BAKD,mBACA,gBACA,uBACA,gBAGF,gCAEE,sBACA,SACA,UACA,gBACA,iCACD,aAGC,kBACA,gBACA,aACA,gBACA,mHAEA,+CACA,gDACA,UACA,gBACA,gBAXF,mBAcI,oBACA,kBAGF,qBZ1DA,SACA,mBACA,WACA,YACA,gBACA,UACA,kBACA,UYqDE,oBACD,mBLwCD,eACA,gBACA,iBACA,iBKvCE,sBACA,sBACA,kBACA,sBACA,yCACA,0EACA,qBACA,eACA,mBACA,qFACA,gBACA,gBAbF,uCAgBI,yBAIF,8CACE,gBACA,kBACA,gBACA,SACA,QACA,2BACA,oBAGF,yCACE,sBA/BJ,yBAmCI,oBACA,kBACA,sBACA,sBACD,qCAGC,SACD,6BAGC,cACA,6BACA,YACA,oBAjDJ,+BAoDM,cAIJ,4BACE,mBACA,gBACA,uBA3DJ,qBA+DI,SACA,kBAGA,gCACA,eApEJ,iFAwEI,iBAIJ,6BACE,SACA,UACA,wCCjJF,kDACE,sBACD,mFAKC,UACA,gBA8DD,0QA1DG,YACA,oCACA,iCACA,kBACA,qBACA,eACA,gBACA,cAtBN,8SAyBQ,sBACA,oCACA,6BACD,kSASC,mCACA,qBASJ,2IACE,8BAhDN,sTA8DQ,cACA,qBACA,qCAJF,8UAQI,qBACA,qCAMR,kDACE,SACA,WACD,mIAIC,iCbrGF,QACA,SACA,kBACA,oBACA,sCACA,sBACA,uBACA,iCAKE,oCACA,qCaMJ,2KAyFI,sBACA,oCACA,6BACD,onBAWK,kBAGJ,wQAEE,sBACA,eACA,gBACA,iBACA,SACA,WAPF,gSAWI,uCACA,4BAUF,4vFAEE,cACA,eACA,gBACA,SACA,YACA,mBACD,o9BAOC,sBAMF,o8BAEE,cACD,oKAMH,sBACD,wpBASK,kBACA,WAEE,wTACF,WACD,0XAKC,SAlLR,41BAwLQ,kBAMM,w1BAEN,UACD,qMAIC,mBArMR,0XAyMQ,UACA,UAOH,ggBAOC,sBACA,oBACD,oBC/NH,eAGF,yEAJE,sBAIF,qEdQE,SACA,mBACA,WACA,YACA,gBACA,UACA,kBACA,UcTE,oBACD,+BduCD,oBACA,oBACA,mBACA,gBACA,qBACA,UACA,WACA,cACA,oBACA,sBACA,iBACA,mBACA,cACA,sBAGA,mCACA,qCAGA,kCAGA,kCAGA,6BCwiED,qCDriEG,YACA,cCyiEH,0DDpiEK,YACA,cenFN,mCf+CE,2BACA,oBACA,mBACA,gBACA,qBACA,UACA,WACA,cACA,oBACA,sBACA,iBACA,mBACA,cACA,sBAGA,mCACA,qCAGA,kCAGA,kCAGA,6BevED,yCf0EG,sBACA,iBCykEH,8DDpkEK,sBACA,iBe/EN,kBAEE,SACA,UACA,gBACA,iCALF,sCACE,sBAUA,yBAKE,sCAGF,gDAPE,sBACA,kBACA,gBACA,iCAIF,uBR7BE,8CAgEF,eACA,gBACA,cACA,qBQnCE,gBACA,gBAGA,SACA,UACA,eACA,gBAEA,yCACA,+CACA,qFACA,WACA,mCACA,eAiED,6BA7DG,oBACA,qBACA,kBACD,2CAGC,mCA3BJ,2CA+BI,mCACD,iCAGC,oCACA,sBACA,oBAKD,mCAFG,sBAxCN,6CA6CI,mCACD,yBAGC,SACA,UAGF,gCACE,iBACA,kBACA,mBACA,gBACA,uBACD,oCAGC,eAIA,0DACE,WACA,kBACA,QACA,SACA,8BACA,UACA,mBACA,mCACA,yBAEF,6EAEE,yFACD,4BAKH,sBACA,SACA,cACA,cACA,6BACA,cACA,cACA,gCAEA,oCf5GF,SACA,mBACA,WACA,YACA,gBACA,UACA,kBACA,Ue8GA,4BACE,gDACA,sCA6DD,qDA1DG,gBACA,gDANJ,mDAUI,YACA,uCACA,iBACA,kBAbJ,6EAgBM,kBACA,SACA,OACA,WACA,WACA,cACA,YACA,mCACA,4EACA,yCACD,qDAGC,iBAGA,gEACA,eAjCN,qHAqCM,iBArCN,sFA0CQ,SACA,WACD,wDAMH,uCAlDJ,mEAqDM,oBACA,2DALJ,2EAQM,oBACA,wDACA,oBAYN,uDACE,eACA,WACD,8FAGC,WARJ,qDAYI,gEACA,WACA,mBACA,wCAfJ,+EAkBM,kBACA,MACA,QACA,YACA,UACA,cACA,YACA,mCAzBN,uDAkCM,yCACD,uHAIC,mBACA,uCAxCN,8DA4CM,yCACA,mBAlCJ,wFAuCM,UACA,UAnDR,0DAyDI,wCADF,qEAII,oBACA,2DAMD,6EAHG,oBACA,wDACD,4DAUL,6BACA,8BAIA,mFACE,gCAQJ,8BACE,oBAFJ,mDAKI,oCACA,sBANJ,qDASM,sBATN,wDAaI,WACA,gCACD,uCAKD,GACE,mBACA,UAEF,IACE,oBACA,UAEF,GACE,UACA,oBdqoED,CcrnEH,4CACE,GAAK,oBACL,IAAM,uBACN,IAAM,sBACN,GAAO,oBdmoEN,CchoEH,4CACE,GAAK,oBACL,IAAM,sBACN,IAAM,uBACN,GAAO,oBd8oEN,Cc/nEH,4CACE,GAAK,oBACL,IAAM,uBACN,IAAM,sBACN,GAAO,oBd6oEN,Cc1oEH,4CACE,GAAK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","file":"mdl-ext-eqjs.min.css","sourcesContent":["@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n@import \"../mixins\";\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss","@import \"functions\";\n\n/// Triangle helper mixin\n/// Modified from: http://blustemy.io/drawing-pure-css-arrows-with-mixins/\n///                https://css-tricks.com/snippets/sass/css-triangle-mixin/\n/// @param {Direction} $direction - Triangle direction, either `top`, `right`, `bottom` or `left`\n/// @param {Color} $color [currentcolor] - Triangle color\n/// @param {Length} $size [1em] - Triangle size\n@mixin mdlext-arrow($direction: bottom, $base-width: 15px, $length: 10px, $color: inherit, $font-size: inherit) {\n  content: '';\n  width: 0;\n  height: 0;\n  font-size: $font-size;\n  line-height: $font-size;\n  border-#{mdlext-opposite-direction($direction)}: $length solid $color;\n  border-#{mdlext-opposite-direction($direction)}-width: $length;\n  border-#{mdlext-opposite-direction($direction)}-style: solid;\n  border-#{mdlext-opposite-direction($direction)}-color: $color;\n\n  $perpendicular-borders: ($base-width / 2) solid transparent;\n\n  @if $direction == top or $direction == bottom {\n    border-left: $perpendicular-borders;\n    border-right: $perpendicular-borders;\n  }\n  @else if $direction == right or $direction == left {\n    border-bottom: $perpendicular-borders;\n    border-top: $perpendicular-borders;\n  }\n}\n\n/// Hide element while making it readable for screen readers\n/// Copied from HTML5Boilerplate:\n/// https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css#L119-L133\n@mixin mdlext-visually-hidden() {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n\n/// Toggle for aria-expanded attribute\n///\n/// @author Leif Olsen\n/// @param {Font} $font-family ['Material Icons'] - Font family\n/// @param {Length} $font-size [24px] - Font size\n/// @param {string} $icon ['+'] - icon to display when 'aria-expanded=\"false\"'\n/// @param {string} $icon-expanded ['-'] - icon to display when 'aria-expanded=\"true\"'\n/// @link https://github.com/google/material-design-icons Modified from '.material-icons' class\n/// @param {Length} $icon-offset [0] - Icon offset\n///\n/// @example - +/- toggle\n///   .plus-minus {\n///     @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: inherit);\n///   }\n///   <div aria-expanded=\"false\">\n///     <i class=\"plus-minus\"></i>\n///   </div>\n///\n/// @example - Material Icons, expand-more/expand_less\n///   .more-less {\n///     @include mdlext-aria-expanded-toggle($content: 'expand_more', $content-expanded: 'expand_less');\n///   }\n///   <div aria-expanded=\"true\">\n///     <i class=\"more-less\"></i>\n///   </div>\n\n@mixin mdlext-aria-expanded-toggle($font-family: 'Material Icons', $font-size: 24px, $icon: '+', $icon-expanded: '-', $icon-offset: 0) {\n  font-family: $font-family;\n  font-weight: inherit;\n  font-style: inherit;\n  font-size: $font-size;  // Preferred icon size\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-transform: none;\n  letter-spacing: normal;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n  vertical-align: middle;\n\n  // Support for all WebKit browsers.\n  -webkit-font-smoothing: antialiased;\n  -webkit-font-feature-settings: 'liga';\n\n  // Support for Safari and Chrome.\n  text-rendering: optimizeLegibility;\n\n  // Support for Firefox.\n  -moz-osx-font-smoothing: grayscale;\n\n  // Support for IE.\n  font-feature-settings: 'liga';\n\n  &::after {\n    content: $icon;\n    margin-left: $icon-offset;\n  }\n\n  [aria-expanded='true'] > & {\n    &::after {\n      content: $icon-expanded;\n      margin-left: $icon-offset;\n    }\n  }\n}\n\n\n/// Keyframe mixin\n/// Modified from: http://sassbreak.com/nested-keyframe-rules-sass/\n/// Modified from: http://sassbreak.com/sass-tools-and-snippets/\n///\n/// @example\n///\n/// .some-element {\n///   animation: 10s linear infinite;\n///\n///   @include mdlext-animation-keyframes {\n///     from {\n///       background-position: 0% 0%;\n///     }\n///     to {\n///       background-position: 114.2857% 0%;\n///     }\n///   }\n/// }\n\n@mixin mdlext-animation-keyframes {\n  $animation-name: unique-id();\n  animation-name: $animation-name;\n\n  @keyframes #{$animation-name} {\n    @content;\n  }\n}\n\n\n/// Flexible title mixin\n/// A flexible title consists of three regions, left, middle and right.\n/// The left and right regions are optional and will typically contain state icons\n/// or act as a toolbar. The middle region should contain the title text.\n///\n/// @author Leif Olsen\n/// @param {String} $class - class name\n/// @gutter {Length} [8px] - horizontal spacing between title elements\n///\n/// @example\n///\n/// @include mdlext-flexible-title(my-title) {\n///   overflow: hidden;\n///   background-color: yellow;\n///   &__text {\n///     font-size: 20px;\n///     letter-spacing: 0.02em;\n///     font-weight: 400;\n///     line-height: 1.1;\n///   }\n/// }\n///\n/// <header class=\"my-title\">\n///   <i class=\"material-icons\" role=\"presentation\" style=\"font-size: 28px;\">info</i>\n///   <h2 class=\"my-title__text\">A title</h2>\n///   <span class=\"my-title__spacer\"></span>\n///   <i class=\"mdlext-aria-expanded-more-less\" role=\"presentation\" style=\"font-size: 28px;\"></i>\n/// </header>\n\n@mixin mdlext-flexible-title($class, $gutter: 8px) {\n  .#{$class} {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    display: flex;\n    align-self: stretch;\n    align-items: center;\n    margin: 0;\n    padding: 0 $gutter;\n\n    &__text,\n    &__text > * {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0 $gutter 0 0;\n    }\n\n    > *:last-child {\n      padding-right: 0;\n    }\n\n    // Used to align elements inside a header or drawer, by growing to fill\n    // remaining space. Commonly used for aligning elements to the right.\n    &__spacer {\n      flex: 1;\n    }\n\n    @content;\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_mixins.scss","@charset \"UTF-8\";\n\n// Material Design Lite\n@import '~material-design-lite/src/variables';\n@import '~material-design-lite/src/mixins';\n\n// mdl-ext\n@import 'mdl-ext-eqjs';\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/mdl-ext-eqjs-build.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-layout__sticky-header {\n  position: absolute;\n  overflow: visible;\n  background: $mdlext-sticky-header-background;\n  transition: 0.1s ease-in-out;\n\n  &.mdlext-is-scroll {\n    background: $mdlext-sticky-header-background-scroll;\n  }\n}\n\n*:not(.is-small-screen) .mdlext-layout__sticky-header {\n  .mdl-layout__drawer-button {\n    visibility: hidden;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding;\n  }\n}\n\n*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header,\n.is-small-screen.has-drawer .mdlext-layout__sticky-header {\n  display: flex;\n\n  .mdl-layout__drawer-button {\n    visibility: visible;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding + $layout-drawer-button-desktop-size;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/sticky-header/_sticky-header.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SASS based on css from Google Chrome Dialog polyfill, https://github.com/GoogleChrome/dialog-polyfill\n * @include 'node_modules/dialog-polyfill/dialog-polyfill.css' before using this\n */\n\n@import \"../variables\";\n\ndialog.mdlext-dialog {\n  position: absolute;\n  border: 0;\n  opacity: 0;\n  padding: $mdlext-dialog-padding;\n  background-color: $mdlext-dialog-background-color;\n\n  &[open] {\n    animation: mdlext-open-dialog $mdlext-dialog-open-animation;\n  }\n  &[open]::backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n  &[open] + .backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n}\n\n@keyframes mdlext-darken-backdrop {\n  to { background: $mdlext-dialog-backdrop-color; }\n}\n@keyframes mdlext-open-dialog {\n  to { opacity: 1; }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/dialog/dialog.scss","@charset \"UTF-8\";\n\n/**\n * This code is modified from Material Design Lite _grid.sass,\n * which is Licensed under the Apache License, Version 2.0\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n//////////////////////////////////////////////////////////////////////////////////\n//\n// Element queries for _grid.scss, based on: https://github.com/Snugug/eq.js\n//\n//////////////////////////////////////////////////////////////////////////////////\n\n// Use of this module requires the user to include variables from material-design-lite in hers/his main SASS module\n//@import \"../../node_modules/material-design-lite/src/variables\";\n.mdlext-grid {\n  display: flex;\n  flex-flow: row wrap;\n  margin: 0 auto;\n  align-items: stretch;\n\n  &.mdlext-grid--no-spacing {\n    padding: 0;\n  }\n\n  & > .mdlext-cell {\n    box-sizing: border-box;\n  }\n\n  & > .mdlext-cell--top {\n    align-self: flex-start;\n  }\n\n  & > .mdlext-cell--middle {\n    align-self: center;\n  }\n\n  & > .mdlext-cell--bottom {\n    align-self: flex-end;\n  }\n\n  & > .mdlext-cell--stretch {\n    align-self: stretch;\n  }\n\n  .mdlext-grid--no-spacing > .mdlext-cell {\n    margin: 0;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    & > .mdlext-cell--order-#{$i} {\n      order: $i;\n    }\n  }\n}\n\n// Mixins for width calculation.\n@mixin _partial-size($size, $columns, $gutter) {\n  width: calc(#{(($size / $columns) * 100) + \"%\"} - #{$gutter});\n}\n@mixin _full-size($gutter) {\n  @include _partial-size(1, 1, $gutter);\n}\n@mixin _offset-size($size, $columns, $gutter) {\n  margin-left: calc(#{(($size / $columns) * 100) + \"%\"} + #{$gutter / 2});\n}\n\n@mixin _partial-size-no-spacing($size, $columns) {\n  width: #{(($size / $columns) * 100) + \"%\"};\n}\n@mixin _full-size-no-spacing() {\n  @include _partial-size-no-spacing(1, 1);\n}\n@mixin _offset-size-no-spacing($size, $columns) {\n  margin-left: #{(($size / $columns) * 100) + \"%\"};\n}\n\n\n.mdlext-grid {\n\n  @include eq-pts((\n    grid_phone: 0,\n    grid_tablet: strip-unit($grid-tablet-breakpoint),\n    grid_desktop: strip-unit($grid-desktop-breakpoint)\n  ));\n\n  ////////// Phone //////////\n  @include eq('grid_phone') {\n    padding: $grid-phone-margin - ($grid-phone-gutter / 2);\n\n    & > .mdlext-cell {\n      margin: $grid-phone-gutter / 2;\n      @include _partial-size($grid-cell-default-columns, $grid-phone-columns, $grid-phone-gutter);\n    }\n\n    & > .mdlext-cell--hide-phone {\n      display: none !important;\n    }\n\n    // Define order override classes.\n    @for $i from 1 through $grid-max-columns {\n      & > .mdlext-cell--order-#{$i}-phone.mdlext-cell--order-#{$i}-phone {\n        order: $i;\n      }\n    }\n\n    // Define partial sizes for columnNumber < totalColumns.\n    @for $i from 1 through ($grid-phone-columns - 1) {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n        @include _partial-size($i, $grid-phone-columns, $grid-phone-gutter);\n      }\n    }\n\n    // Define 100% for everything else.\n    @for $i from $grid-phone-columns through $grid-desktop-columns {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n        @include _full-size($grid-phone-gutter);\n      }\n    }\n\n    // Define valid phone offsets.\n    @for $i from 1 through ($grid-phone-columns - 1) {\n      & > .mdlext-cell--#{$i}-offset,\n      & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {\n        @include _offset-size($i, $grid-phone-columns, $grid-phone-gutter);\n      }\n    }\n\n    &.mdlext-grid--no-spacing {\n      padding: 0;\n\n      & > .mdlext-cell {\n        margin: 0;\n        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-phone-columns);\n      }\n\n      // Define partial sizes for columnNumber < totalColumns.\n      @for $i from 1 through ($grid-phone-columns - 1) {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n          @include _partial-size-no-spacing($i, $grid-phone-columns);\n        }\n      }\n\n      // Define 100% for everything else.\n      @for $i from $grid-phone-columns through $grid-desktop-columns {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n          @include _full-size-no-spacing();\n        }\n      }\n\n      // Define valid phone offsets.\n      @for $i from 1 through ($grid-phone-columns - 1) {\n        & > .mdlext-cell--#{$i}-offset,\n        & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {\n          @include _offset-size-no-spacing($i, $grid-phone-columns);\n        }\n      }\n    }\n  }\n\n  ////////// Tablet //////////\n  @include eq('grid_tablet') {\n    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);\n\n    & > .mdlext-cell {\n      margin: $grid-tablet-gutter / 2;\n      @include _partial-size($grid-cell-default-columns, $grid-tablet-columns, $grid-tablet-gutter);\n    }\n\n    & > .mdlext-cell--hide-tablet {\n      display: none !important;\n    }\n\n    // Define order override classes.\n    @for $i from 1 through $grid-max-columns {\n      & > .mdlext-cell--order-#{$i}-tablet.mdlext-cell--order-#{$i}-tablet {\n        order: $i;\n      }\n    }\n\n    // Define partial sizes for columnNumber < totalColumns.\n    @for $i from 1 through ($grid-tablet-columns - 1) {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n        @include _partial-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n      }\n    }\n\n    // Define 100% for everything else.\n    @for $i from $grid-tablet-columns through $grid-desktop-columns {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n        @include _full-size($grid-tablet-gutter);\n      }\n    }\n\n    // Define valid tablet offsets.\n    @for $i from 1 through ($grid-tablet-columns - 1) {\n      & > .mdlext-cell--#{$i}-offset,\n      & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {\n        @include _offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n      }\n    }\n\n    &.mdlext-grid--no-spacing {\n      padding: 0;\n\n      & > .mdlext-cell {\n        margin: 0;\n        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-tablet-columns);\n      }\n\n      // Define partial sizes for columnNumber < totalColumns.\n      @for $i from 1 through ($grid-tablet-columns - 1) {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n          @include _partial-size-no-spacing($i, $grid-tablet-columns);\n        }\n      }\n\n      // Define 100% for everything else.\n      @for $i from $grid-tablet-columns through $grid-desktop-columns {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n          @include _full-size-no-spacing();\n        }\n      }\n\n      // Define valid tablet offsets.\n      @for $i from 1 through ($grid-tablet-columns - 1) {\n        & > .mdlext-cell--#{$i}-offset,\n        & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {\n          @include _offset-size-no-spacing($i, $grid-tablet-columns);\n        }\n      }\n    }\n  }\n\n  ////////// Desktop //////////\n  @include eq('grid_desktop') {\n    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);\n\n    & > .mdlext-cell {\n      margin: $grid-desktop-gutter / 2;\n      @include _partial-size($grid-cell-default-columns, $grid-desktop-columns, $grid-desktop-gutter);\n    }\n\n    & > .mdlext-cell--hide-desktop {\n      display: none !important;\n    }\n\n    // Define order override classes.\n    @for $i from 1 through $grid-max-columns {\n      & > .mdlext-cell--order-#{$i}-desktop.mdlext-cell--order-#{$i}-desktop {\n        order: $i;\n      }\n    }\n\n    // Define partial sizes for all numbers of columns.\n    @for $i from 1 through $grid-desktop-columns {\n      & > .mdlext-cell--#{$i}-col,\n      & > .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {\n        @include _partial-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n      }\n    }\n\n    // Define valid desktop offsets.\n    @for $i from 1 through ($grid-desktop-columns - 1) {\n      & > .mdlext-cell--#{$i}-offset,\n      & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {\n        @include _offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n      }\n    }\n\n    &.mdlext-grid--no-spacing {\n      padding: 0;\n\n      & > .mdlext-cell {\n        margin: 0;\n        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-desktop-columns);\n      }\n\n      // Define partial sizes for all numbers of columns.\n      @for $i from 1 through $grid-desktop-columns {\n        & > .mdlext-cell--#{$i}-col,\n        & > .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {\n          @include _partial-size-no-spacing($i, $grid-desktop-columns);\n        }\n      }\n\n      // Define valid desktop offsets.\n      @for $i from 1 through ($grid-desktop-columns - 1) {\n        & > .mdlext-cell--#{$i}-offset,\n        & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {\n          @include _offset-size-no-spacing($i, $grid-desktop-columns);\n        }\n      }\n    }\n  }\n}\n\n@include eq-selectors;\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/grid/_grid-eqjs.scss","//////////////////////////////\n// Variables\n//////////////////////////////\n// Selectors that were called for CSS element queries\n$EQ-Selectors: ();\n\n//////////////////////////////\n// Error Mixin\n//////////////////////////////\n@mixin EQSTATECHECK($states, $name) {\n  $EQ-Error: 'You need to include a state for the `#{$name}` mixin!';\n  @if (length($states) == 0) {\n    @if feature-exists(at-error) {\n      @error $EQ-Error;\n    }\n    @else {\n      @warn $EQ-Error;\n    }\n  }\n  @else {\n    @content;\n  }\n}\n\n//////////////////////////////\n// Element Queries!\n//\n// $states - List of states to apply styling to; @include eq(small, medium, large)\n//////////////////////////////\n@mixin eq($states...) {\n  @include EQSTATECHECK('eq', $states) {\n    //////////////////////////////\n    // Markup based Element Queries\n    //////////////////////////////\n    $extend: unique-id();\n    @at-root {\n      %#{$extend} {\n        @content;\n      }\n    }\n    @each $state in $states {\n      &[data-eq-state$=\"#{$state}\"] {\n        @extend %#{$extend};\n      }\n    }\n  }\n}\n\n//////////////////////////////\n// Element Query Stack!\n//\n// Contains one of the query states!\n// $states - List of states to apply styling to; @include eq-contains(small, medium, large)\n//  * Space separated list will be treated like an `and` media query; all of the states must be active\n//  * Comma separated list will be treated like an `or` media query: at least one of the states must be active\n//////////////////////////////\n@mixin eq-contains($states...) {\n  // Space separator API, so going to do stupid magic\n  @if length($states) == 1 {\n    $states: nth($states, 1);\n  }\n\n  @include EQSTATECHECK('eq', $states) {\n    //////////////////////////////\n    // Markup based Element Queries\n    //////////////////////////////\n    $extend: unique-id();\n    @at-root {\n      %#{$extend} {\n        @content;\n      }\n    }\n    @if list-separator($states) == 'space' {\n      $stateApply: '';\n\n      @each $state in $states {\n        $stateApply: $stateApply + '[data-eq-state~=\"#{$state}\"]';\n      }\n\n      &#{$stateApply} {\n        @extend %#{$extend};\n      }\n    }\n    @else {\n      @each $state in $states {\n        &[data-eq-state~=\"#{$state}\"] {\n          @extend %#{$extend};\n        }\n      }\n    }\n  }\n}\n\n//////////////////////////////\n// Element Query Points\n//\n// Prints element query points to element's `:before`\n//\n// $states - Map of `name: size`; @include eq-pts((small: 400, medium: 600, large: 900))\n//////////////////////////////\n@mixin eq-pts($states) {\n  &:before {\n    display: none;\n    content: '#{str-slice(inspect($states), 2, -2)}';\n  }\n\n  @if not index($EQ-Selectors, '#{&}') {\n    $EQ-Selectors: append($EQ-Selectors, '#{&}', 'comma') !global;\n  }\n}\n\n//////////////////////////////\n// Element Query Selectors\n//\n// Prints list of selectors that were called for CSS element queries to HTML's `:before`\n//////////////////////////////\n@mixin eq-selectors {\n  @at-root {\n    html:before {\n      display: none;\n      content: '#{$EQ-Selectors}';\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/eq.js/sass/_eq.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A lightboard is a translucent surface illuminated from behind, used for situations\n * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\nul.mdlext-lightboard {\n  list-style: none;\n}\n\n.mdlext-lightboard {\n  box-sizing: border-box;\n  margin: 0 auto;\n  padding: 0;\n  display: flex;\n  flex-flow:row wrap;\n  align-items: stretch;\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightboard__slide {\n    background-color: $mdlext-lightboard-slide-background-color;\n    border: 1px solid $mdlext-lightboard-slide-border-color;\n    border-radius: $mdlext-lightboard-slide-border-radius;\n    box-shadow: $mdlext-lightboard-slide-box-shadow;\n    position: relative;\n    display: block;\n    max-width: $mdlext-lightboard-slide-max-size;\n\n    &::before {\n      // 1:1 ratio\n      // TODO: Use a class for ratio so the grid can display slides with different ratios (16:9, 16:10, 4:3 ...)\n      content: '';\n      display: block;\n      padding-top: 100%;\n    }\n    &:hover,\n    &:active,\n    &:focus {\n      border-color: $mdlext-lightboard-slide-border-color-hover;\n      background-color: $mdlext-lightboard-slide-background-color-hover;\n      box-shadow: $mdlext-lightboard-slide-box-shadow-hover;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-lightboard-focus-outline-color;\n    }\n    &[aria-selected='true'] {\n      background-color: $mdlext-lightboard-slide-active-bacground-color;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &__frame,\n    &__ripple-container {\n      text-decoration: none;\n      display: block;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n\n      &:focus {\n        outline-offset: -2px;\n        outline-color: $mdlext-lightboard-focus-outline-color;\n      }\n      & .mdl-ripple {\n        background: $mdlext-lightboard-ripple-color;\n      }\n      figure {\n        display: block;\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n\n        img {\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n          margin: auto;\n          max-width: 100%;\n          max-height: 100%;\n          border-width: 0;\n          border-radius: $mdlext-lightboard-slide-inner-border-radius;\n        }\n        figcaption {\n          @include typo-caption($colorContrast: false, $usePreferred: true);\n\n          color: $mdlext-lightboard-figcaption-text-color;\n          position: absolute;\n          bottom: -2px;\n          white-space: nowrap;\n          overflow: hidden;\n          max-width: 100%;\n          width: 100%;\n          text-align: center;\n          text-overflow: ellipsis;\n          padding: 4px 0;\n        }\n      }\n      &:hover {\n        figcaption {\n          // As far as I can see there is no way to darken/lighten a text color\n          // defined by MDL, due to the \"unqote\" functions.\n          // So this is a hack\n          color: rgba(0, 0, 0, 1) !important;\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      }\n    }\n  }\n}\n\n////// Media / Element queries default, Small //////\n.mdlext-lightboard {\n  padding: calc((#{$mdlext-lightboard-small-margin} - #{$mdlext-lightboard-small-gutter}) / 2);\n\n  .mdlext-lightboard__slide {\n    margin: calc(#{$mdlext-lightboard-small-gutter} / 2);\n    width: calc(1 / #{$mdlext-lightboard-small-columns} * 100% - #{$mdlext-lightboard-small-gutter});\n\n    .mdlext-lightboard__slide__frame figure {\n      margin: $mdlext-lightboard-small-frame-width;\n    }\n  }\n  &.mdlext-lightboard--no-spacing {\n    padding: 0;\n\n    .mdlext-lightboard__slide {\n      margin: 0;\n      width: calc(1 / #{$mdlext-lightboard-small-columns} * 100%);\n    }\n  }\n}\n\n// Import one of _lightboard-media-queries.scss or _lightboard-eq-js.scss to complete SASS\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n  @if $usePreferred {\n    font-family: $preferred_font;\n  }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 112px;\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: -0.04em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 56px;\n  font-weight: 400;\n  line-height: 1.35;\n  letter-spacing: -0.02em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 45px;\n  font-weight: 400;\n  line-height: 48px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 34px;\n  font-weight: 400;\n  line-height: 40px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 24px;\n  font-weight: 400;\n  line-height: 32px;\n  -moz-osx-font-smoothing: grayscale;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 20px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0.02em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 28px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  @if $usePreferred {\n    font-weight: 500;\n  } @else {\n    font-weight: bold;\n  }\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  position: relative;\n  font-size: 24px;\n  font-weight: 300;\n  font-style: italic;\n  line-height: 1.35;\n  letter-spacing: 0.08em;\n\n  &:before {\n    position: absolute;\n    left: -0.5em;\n    content: '“';\n  }\n\n  &:after {\n    content: '”';\n    margin-left: -0.05em;\n  }\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  text-transform: uppercase;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-icon() {\n  font-family: 'Material Icons';\n  font-weight: normal;\n  font-style: normal;\n  font-size: 24px;\n  line-height: 1;\n  letter-spacing: normal;\n  text-transform: none;\n  display: inline-block;\n  word-wrap: normal;\n  font-feature-settings: 'liga';\n  -webkit-font-feature-settings: 'liga';\n  -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n  box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0  6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0  8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n  box-shadow: 0  9px 46px  8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 24px 38px  3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n  @if(type_of($units) != 'number') {\n    @error \"The unit given to dialog-width should be a number.\";\n  }\n  // 56dp is the base unit width for Dialogs.\n  // With 5 units being the number of units for a mobile device.\n  // https://goo.gl/sK2O5o\n  width: $units * 56px;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_mixins.scss","@charset \"UTF-8\";\n//////////////////////////////////////////////////////////////////////////////////\n//\n// Element queries for _lightbox.scss, based on: https://github.com/Snugug/eq.js\n//\n//////////////////////////////////////////////////////////////////////////////////\n\n@import \"../variables\";\n@import \"../functions\";\n\n.mdlext-lightboard {\n\n  @include eq-pts((\n    lightboard_medium_small: strip-unit($mdlext-lightboard-medium-small-breakpoint),\n    lightboard_medium: strip-unit($mdlext-lightboard-medium-breakpoint),\n    lightboard_medium_large: strip-unit($mdlext-lightboard-medium-large-breakpoint),\n    lightboard_large: strip-unit($mdlext-lightboard-large-breakpoint)\n  ));\n\n  ////// small - meduim-small //////\n  @include eq('lightboard_medium_small') {\n    padding: calc((#{$mdlext-lightboard-medium-small-margin} - #{$mdlext-lightboard-medium-small-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-small-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100% - #{$mdlext-lightboard-medium-small-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-small-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100%);\n      }\n    }\n  }\n\n  ////// meduim-small - medium //////\n  @include eq('lightboard_medium') {\n    padding: calc((#{$mdlext-lightboard-medium-margin} - #{$mdlext-lightboard-medium-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100% - #{$mdlext-lightboard-medium-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100%);\n      }\n    }\n  }\n\n  ////// meduim - medium-large //////\n  @include eq('lightboard_medium_large') {\n    padding: calc((#{$mdlext-lightboard-medium-large-margin} - #{$mdlext-lightboard-medium-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100% - #{$mdlext-lightboard-medium-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100%);\n      }\n    }\n  }\n\n  ////// meduim-large - large //////\n  @include eq('lightboard_large') {\n    padding: calc((#{$mdlext-lightboard-large-margin} - #{$mdlext-lightboard-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-large-columns} * 100% - #{$mdlext-lightboard-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-large-columns} * 100%);\n      }\n    }\n  }\n}\n\n@include eq-selectors;\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard-eqjs.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-lightbox {\n  user-select: none;\n  cursor: default;\n  position: relative;\n  width: auto;\n  max-width: 100%;\n  margin: 0 auto;\n  border: $mdlext-lightbox-border;\n  border-radius: $mdlext-lightbox-border-radius;\n  background-color: $mdlext-lightbox-background-color;\n  box-sizing: border-box;\n  outline: 0;\n  display: block; // display: flex and IE11 has issues with reposition. Set display:block for now.\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightbox__slider {\n    // Displays prevvious, current and next image while dragging\n    // Elements are created by lightbox component when dragging starts\n    position: absolute;\n    top: 0;\n    left: 0;\n    display: flex;\n    justify-content: center;\n\n    .mdlext-lightbox__slider__slide {\n      flex-shrink: 0;\n      display: block;\n      text-align: left;\n      color: #7f7f7f;\n      background-size: cover;\n      background-position: center;\n      background-repeat: no-repeat;\n\n      //&:nth-child(1),\n      //&:nth-child(3) {\n      //  filter: blur(1px);\n      //}\n    }\n  }\n\n  figure {\n    margin: $mdlext-lightbox-figure-margin;\n    padding: $mdlext-lightbox-figure-padding;\n    position: relative;\n\n    img {\n      width: 100%;\n      max-width: 100%;\n      height: auto;\n      border: 0;\n      outline: 0;\n    }\n    figcaption {\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      display: block;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      max-width: 100%;\n      height: auto;\n      max-height: 50%;\n      overflow: auto;\n      padding: 8px;\n      background-color: $mdlext-lightbox-figcaption-background-color;\n      transform-origin: bottom;\n      transform: scaleY(0);\n      transition: 0.2s ease-in-out;\n\n      &.mdlext-lightbox__show-figcaption {\n        transform: scaleY(1);\n      }\n      tbody {\n        th {\n          text-align: left;\n        }\n        th,\n        td {\n          vertical-align: text-top;\n        }\n      }\n    }\n  }\n  .mdl-card__menu {\n    color: #ffffff;\n    z-index: 1;\n  }\n  footer {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    background-color: $mdlext-lightbox-footer-background-color;\n\n    .mdl-card__supporting-text {\n      flex: 1;\n      overflow: hidden;\n      padding: 0;\n      height: $card-supporting-text-line-height;\n      width: 100%;\n    }\n    nav {\n      display: flex;\n    }\n  }\n\n  &.mdlext-lightbox--sticky-footer footer {\n    position: fixed;\n    bottom: 0;\n    left: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightbox/_lightbox.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A carousel ...\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\nul.mdlext-carousel {\n  list-style: none;\n}\n\n.mdlext-carousel {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  height: 100%;  // Use a container to constrain height and width\n  width: 100%;\n  display: block;\n  white-space: nowrap;\n  font-size: 0;\n  background-color: transparent;\n}\n\n.mdlext-carousel__slide {\n  box-sizing: border-box;\n  display: inline-block;\n  position: relative;\n  outline: 0;\n  margin: 0 $mdlext-carousel-slide-margin-horizontal;\n  padding:0;\n  height: 100%;\n  border-top: $mdlext-carousel-slide-border-top-width solid transparent; // Makes room for the animated select/focus line\n\n  //&:focus,\n  &[aria-selected],\n  &[aria-selected='true'] {\n    figcaption {\n      // As far as I can see there is no way to darken/lighten a text color\n      // defined by MDL, due to the \"unqote\" functions.\n      // So this is a hack\n      color: rgba(0, 0, 0, 1) !important;\n      background-color: rgba(255, 255, 255, 0.25);\n    }\n  }\n\n  &[aria-selected]::after,\n  &[aria-selected='true']::after {\n    height: $mdlext-carousel-slide-border-top-width;\n    width: 100%;\n    display: block;\n    content: ' ';\n    top: (-$mdlext-carousel-slide-border-top-width);\n    left: 0;\n    position: absolute;\n    background: $mdlext-carousel-slide-border-top-color;\n    animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n    transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n  }\n\n\n  a {\n    text-decoration: none;\n  }\n\n  figure {\n    box-sizing: border-box;\n    position: relative;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n\n    img {\n      box-sizing: border-box;\n      max-height: 100%;\n    }\n\n    figcaption {\n      box-sizing: border-box;\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      color: $mdlext-carousel-slide-figcaption-color;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      white-space: nowrap;\n      overflow: hidden;\n      max-width: 100%;\n      width: 100%;\n      text-align: center;\n      text-overflow: ellipsis;\n      padding: 4px 0;\n    }\n    &:hover {\n      figcaption {\n        // As far as I can see there is no way to darken/lighten a text color\n        // defined by MDL, due to the \"unqote\" functions.\n        // So this is a hack\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.25);\n      }\n    }\n  }\n\n  .mdlext-carousel__slide__ripple-container {\n    text-decoration: none;\n    display: block;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    outline: 0;\n\n    & .mdl-ripple {\n      background: $mdlext-carousel-slide-ripple-color;\n    }\n  }\n}\n\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/carousel/_carousel.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Copied/Modified/Inspired from/by:\n *   https://github.com/google/material-design-lite/tree/master/src/textfield\n *   http://red-team-design.com/making-html-dropdowns-not-suck/\n *   http://codepen.io/etcpe9/pen/PqyOye,\n *   http://codepen.io/pudgereyem/pen/PqBxQx\n *   https://github.com/MEYVN-digital/mdl-selectfield\n *   https://github.com/mebibou/mdl-selectfield\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../mixins\";\n\n// The container for the selectfield.\n.mdlext-selectfield {\n  box-sizing: border-box;\n  position: relative;\n  font-size: $input-text-font-size;\n  display: inline-block;\n  width: 300px;\n  max-width: 100%;\n  margin: 0;\n  padding: $input-text-vertical-spacing 0;\n\n  // Align buttons, if used.\n  & .mdl-button {\n    bottom: $input-text-vertical-spacing;\n    position: absolute;\n  }\n\n  // Styling the down arrow\n  &::after {\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length);\n\n    position: absolute;\n    right: 0.5em;\n    top: 50%;\n    transform: translateY(-50%);\n    pointer-events: none;\n  }\n}\n\n.mdlext-selectfield.is-disabled {\n  &::after {\n    color: $input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $input-text-disabled-color);\n  }\n}\n\n// Optional class to align right.\n.mdlext-selectfield--align-right {\n  text-align: right;\n}\n\n// Optional class to display at full width.\n.mdlext-selectfield--full-width {\n  width: 100%;\n}\n\n// Optional class to make the select field expandable.\n.mdlext-selectfield--expandable {\n  min-height: $input-text-button-size;\n  min-width: $input-text-button-size;\n  width: auto;\n}\n\n// Styling for the select element.\n.mdlext-selectfield__select {\n\n  // Reset select\n  box-sizing: border-box;\n  border: 0;\n  border-radius: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  appearance: none;\n  text-indent: 0.01px; // Removes default arrow from firefox\n  text-overflow: '';   // Removes default arrow from firefox\n  outline: none;\n  box-shadow: none;\n  // End Reset select\n\n  font-size: $input-text-font-size;\n  font-family: $performance_font;\n  padding: $input-text-padding calc(1.2em + #{$input-text-padding}) $input-text-padding 0;\n  width: $input-text-width;\n  border-bottom: 1px solid $input-text-bottom-border-color;\n  display: block;\n  margin: 0;\n  background: none;\n  text-align: left;\n  color: inherit;\n\n  // Mozilla, remove focusring\n  &:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 #000000;\n  }\n\n  // MS, remove selected option background color\n  &:focus::-ms-value {\n    background-color: inherit;\n    color: inherit;\n  }\n\n  &::-ms-expand {\n    display: none;\n  }\n\n  .mdlext-selectfield.is-focused & {\n    outline: none;\n  }\n\n  .mdlext-selectfield.is-invalid & {\n    border-color: $input-text-error-color;\n    box-shadow: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled & {\n    border-bottom: 1px dotted $input-text-disabled-color;\n    color: $input-text-disabled-text-color;\n    background-color: transparent;\n  }\n\n  option {\n    color: $text-color-primary;\n    box-sizing: border-box;\n    background-color: inherit;\n  }\n}\n\n// Styling for the label / floating label.\n.mdlext-selectfield__label {\n  box-sizing: border-box;\n  color: $input-text-label-color;\n  font-size: $input-text-font-size;\n  top: ($input-text-padding + $input-text-vertical-spacing);\n  bottom: 0;\n  left: 0;\n  right: 0;\n  pointer-events: none;\n  position: absolute;\n  display: block;\n  width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-align: left;\n\n  .mdlext-selectfield.is-dirty &,\n  .mdlext-selectfield.has-placeholder & {\n    visibility: hidden;\n  }\n\n  // Floating Label\n  .mdlext-selectfield--floating-label & {\n    @include material-animation-default();\n  }\n\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    transition: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled.is-disabled & {\n    color: $input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused &,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty &,\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    color: $input-text-highlight-color;\n    font-size: $input-text-floating-label-fontsize;\n    top: $input-text-vertical-spacing - ($input-text-floating-label-fontsize + $input-text-padding);\n    visibility: visible;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder & {\n    top: -($input-text-floating-label-fontsize + $input-text-padding);\n  }\n\n  .mdlext-selectfield--floating-label.is-invalid & {\n    color: $input-text-error-color;\n    font-size: $input-text-floating-label-fontsize;\n  }\n\n  // The after label is the colored underline for the Selectfield.\n  &::after {\n    background-color: $input-text-highlight-color;\n    bottom: $input-text-vertical-spacing;\n    content: '';\n    height: 2px;\n    left: 45%;\n    position: absolute;\n    @include material-animation-default();\n\n    visibility: hidden;\n    width: 10px;\n  }\n\n  .mdlext-selectfield.is-focused &::after {\n    left: 0;\n    visibility: visible;\n    width: 100%;\n  }\n\n  .mdlext-selectfield.is-invalid &::after {\n    background-color: $input-text-error-color;\n  }\n}\n\n// SelectField Error.\n.mdlext-selectfield__error {\n  color: $input-text-error-color;\n  font-size: $input-text-floating-label-fontsize;\n  position: absolute;\n  margin-top: 3px;\n  visibility: hidden;\n  display: block;\n\n  .mdlext-selectfield.is-invalid & {\n    visibility: visible;\n  }\n}\n\n// Expandable Holder.\n.mdlext-selectfield__expandable-holder {\n  display: inline-block;\n  position: relative;\n  margin-left: $input-text-button-size;\n\n  @include material-animation-default();\n\n  // Safari (possibly others) need to be convinced that this field is actually\n  // visible, otherwise it cannot be tabbed to nor focused via a <label>.\n  // TODO: In some cases (Retina displays), this is big enough to render the\n  // inner element :(\n  max-width: 0.1px;\n\n  .mdlext-selectfield.is-focused &,\n  .mdlext-selectfield.is-dirty & {\n    // This is an unfortunate hack. Animating between widths in percent (%)\n    // in many browsers (Chrome, Firefox) only animates the inner visual style\n    // of the input - the outer bounding box still 'jumps'.\n    // Thus assume a sensible maximum, and animate to/from that value.\n    max-width: 600px;\n  }\n  .mdlext-selectfield__label::after {\n    bottom: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/selectfield/_selectfield.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/* Moved to aria-expanded-toggle.scss\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n*/\n\n.mdlext-menu-button {\n  box-sizing: border-box;\n  @include typo-menu();\n  text-transform: none;\n  position: relative;\n  height: $button-height;\n  padding: 0 $button-padding;\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n\n  > * {\n    margin: 0;\n    padding: 0 0 0 8px;\n  }\n\n  > *:first-child {\n    padding-left: 0;\n  }\n\n  > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n    margin-left: auto; // If more than one element, push last element to the right\n  }\n\n}\n\n.mdlext-menu-button__caption {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  line-height: 1.2;\n}\n\n.mdlext-menu,\n.mdlext-menu__item {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n}\n\n.mdlext-menu {\n  position: absolute; //fixed;\n  background: $default-dropdown-bg-color;\n  z-index: 1000;\n  min-width: 124px;\n  border-radius: 2px;\n  @include shadow-3dp();\n  display: inline-flex;\n  flex-direction: column;\n  padding: 0;\n  overflow: hidden;\n  overflow-y: auto;\n\n  &:focus {\n    outline-offset: -1px;\n    outline-width: 1px;\n  }\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n\n  &__item {\n    @include typo-body-1();\n    color: $default-item-text-color;\n    background-color: $default-dropdown-bg-color;\n    position: relative;\n    padding: 0 16px 0 24px;\n    align-items: center;\n    align-self: stretch;\n    text-decoration: none;\n    cursor: pointer;\n    white-space: nowrap;\n    user-select: none;\n    min-height: 40px;\n    overflow: hidden;\n\n    &[aria-selected='true'] {\n      background-color: $default-item-active-bg-color;\n    }\n\n    // checkmark\n    &[aria-selected='true']::before {\n      content:'\\2713';\n      position: absolute;\n      font-size: 1.4em;\n      left: 4px;\n      top: 50%;\n      transform: translateY(-50%);\n      pointer-events: none;\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $default-item-hover-bg-color;\n    }\n\n    &:focus {\n      outline-offset: -2px;\n      outline-width: 1px;\n      outline-color: $default-item-outline-color;\n      background-color: $default-item-focus-bg-color;\n    }\n\n    &::-moz-focus-inner {\n      border: 0;\n    }\n\n    &[disabled] {\n      color: $disabled-item-text-color;\n      background-color: transparent;\n      cursor: auto;\n      pointer-events: none;\n\n      > * {\n        color: $disabled-item-text-color;\n      }\n    }\n\n    &__caption {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0 0 0 8px;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n      margin-left: auto; // If more than one element, push last element to the right\n    }\n\n  }\n  &__item-separator {\n    margin: 0;\n    padding: 0;\n    border-bottom: 1px solid $default-item-divider-color;\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/menu-button/_menu-button.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * The bordered fields are based on / inspired by this CodePen: http://codepen.io/prajwal078/pen/LVJZXz?editors=010\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../variables\";\n@import \"../functions\";\n\n\n// \"Theme\" for this styling\n.mdlext-bordered-fields {\n  box-sizing: border-box;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  // Styling for textfield and selectfield.\n  .mdl-textfield,\n  .mdlext-selectfield {\n    padding: 0;\n    margin: $mdlext-bordered-field-vertical-spacing-top 0 $mdlext-bordered-field-vertical-spacing-bottom 0;\n\n    .mdl-textfield__input,\n    .mdlext-selectfield__select {\n      height: $mdlext-bordered-field-height;\n      background-color: $mdlext-bordered-field-background-color;\n      border: $mdlext-bordered-field-border-width solid $mdlext-bordered-field-border-color;\n      border-radius: $mdlext-bordered-field-border-radius;\n      padding: $mdlext-bordered-field-padding-top $mdlext-bordered-field-padding $mdlext-bordered-field-padding-bottom $mdlext-bordered-field-padding;\n      font-size: $mdlext-bordered-field-input-text-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      color: $mdlext-bordered-field-input-text-color;\n\n      &:disabled {\n        color: $mdlext-bordered-field-input-text-disabled-text-color;\n        background-color: $mdlext-bordered-field-disabled-background-color;\n        border-color: $mdlext-bordered-field-disabled-border-color;\n      }\n\n      // MDL can not handle required attribute properly. Planned for MDL-v2\n      //&:required {\n      //  background-color: $mdlext-bordered-field-required-background-color;\n      //  border-color: $mdlext-bordered-field-required-border-color;\n      //}\n\n      &:focus {\n        background-color: $mdlext-bordered-field-focus-background-color;\n        border-color: $mdlext-bordered-field-focus-border-color;\n      }\n\n      // MDL can not handle required. Planned for MDL-v2\n      //&:required:focus {\n      //  background-color: $mdlext-bordered-field-required-focus-background-color;\n      //  border-color: $mdlext-bordered-field-required-focus-border-color;\n      //}\n    }\n    .mdlext-selectfield__select {\n      padding-right: calc(1em + #{$mdlext-bordered-field-padding});  // space for down arrow\n    }\n\n    /*\n    &.is-dirty {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n      }\n    }\n    */\n\n    &.is-invalid {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        color: $mdlext-bordered-field-input-text-error-color;\n        border-color: $mdlext-bordered-field-error-border-color;\n        background-color: $mdlext-bordered-field-error-background-color;\n\n        &:focus {\n          //&:required:focus {\n          border-color: $mdlext-bordered-field-error-focus-border-color;\n          background-color: $mdlext-bordered-field-error-focus-background-color;\n        }\n      }\n    }\n  }\n\n  .mdlext-selectfield::after {\n    top: auto;\n    bottom: $mdlext-bordered-field-padding-bottom;  // Position of down arrow\n  }\n\n  fieldset[disabled] .mdlext-selectfield::after,\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-bordered-field-input-text-disabled-text-color);\n  }\n\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    background-color: $mdlext-bordered-field-disabled-background-color;\n    border-color: $mdlext-bordered-field-disabled-border-color;\n  }\n\n\n  // Styling for the label / floating label.\n  .mdl-textfield,\n  .mdlext-selectfield {\n\n    &.is-dirty,\n    &.has-placeholder {\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        visibility: hidden;\n      }\n    }\n    .mdl-textfield__label,\n    .mdlext-selectfield__label {\n      color: $mdlext-bordered-field-input-text-label-color;\n      font-size: $mdlext-bordered-field-label-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      padding-left: $mdlext-bordered-field-padding;\n      top: auto;\n      bottom: $mdlext-bordered-field-padding-bottom;\n\n      // Hides the colored underline for the textField/selectfield.\n      &::after {\n        background-color: transparent !important;\n        visibility: hidden !important;\n      }\n    }\n    &.mdl-textfield--floating-label.is-focused.is-focused,\n    &.mdl-textfield--floating-label.is-dirty.is-dirty,\n    &.mdl-textfield--floating-label.has-placeholder,\n    &.mdlext-selectfield--floating-label.is-focused.is-focused,\n    &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n    &.mdlext-selectfield--floating-label.has-placeholder {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-focus-color;\n        font-size: $mdlext-bordered-field-floating-label-font-size;\n        font-weight: $mdlext-bordered-field-floating-label-font-weight;\n        top: auto;\n        bottom: $mdlext-bordered-field-floating-label-focus-bottom;\n        visibility: visible;\n      }\n    }\n    &.mdl-textfield--floating-label.is-disabled.is-disabled,\n    &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-disabled-color;\n      }\n    }\n    &.mdl-textfield--floating-label.is-invalid.is-invalid,\n    &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-error-color;\n      }\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n    color: $mdlext-bordered-field-input-text-label-disabled-color;\n  }\n\n  // Icon(s) and/or button(s) inside textfield\n  .mdl-textfield,\n  .mdlext-selectfield {\n    &.mdlext-bordered-fields__icon-left,\n    &.mdlext-bordered-fields__icon-right {\n      & > i,\n      & > .mdl-button {\n        position: absolute;\n        bottom: $mdlext-bordered-field-padding-bottom - 2px;\n      }\n      & > i {\n        bottom: $mdlext-bordered-field-padding-bottom + 2px;\n      }\n    }\n    &.mdlext-bordered-fields__icon-left {\n      & > i:first-child,\n      & > .mdl-button:first-child {\n        left: $mdlext-bordered-field-padding/2;\n      }\n      & > i ~ .mdl-textfield__input,\n      & > .mdl-button ~ .mdl-textfield__input,\n      & > i ~ .mdlext-selectfield__select,\n      & > .mdl-button ~ .mdlext-selectfield__select {\n        padding-left: $input-text-button-size;\n      }\n      & > i ~ .mdl-textfield__label,\n      & > .mdl-button ~ .mdl-textfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n      & > i ~ .mdlext-selectfield__label,\n      & > .mdl-button ~ .mdlext-selectfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n    }\n    &.mdlext-bordered-fields__icon-right {\n      & > .mdl-textfield__input {\n        padding-right: $input-text-button-size;\n      }\n      & > i:last-child,\n      & > .mdl-button:last-child {\n        left: auto;\n        right: $mdlext-bordered-field-padding/2;\n      }\n    }\n    &.is-disabled i,\n    &.is-disabled .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield,\n  fieldset[disabled] .mdlext-selectfield {\n    i,\n    .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/bordered-fields/_bordered-fields.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-collapsible {\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.mdlext-collapsible-group,\n.mdlext-collapsible-region {\n  box-sizing: border-box;\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/collapsible/_collapsible.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-aria-toggle-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: 1.4em);\n}\n\n.mdlext-aria-toggle-material-icons {\n  @include mdlext-aria-expanded-toggle($font-size: 1.3em, $icon: 'expand_more', $icon-expanded: 'expand_less', $icon-offset: -$mdlext-accordion-header-padding);\n}\n\n.mdlext-accordion {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  &__panel {\n    box-sizing: border-box;\n    position: relative;\n    overflow: hidden;\n    display: flex;\n    flex-wrap: nowrap;\n  }\n\n  &__tab {\n    @include typo-title();\n\n    font-weight: 400;\n    line-height: 1.1;\n    box-sizing: border-box;\n    position: relative;\n    margin: 0;\n    padding: 0; // $mdlext-accordion-header-padding;\n    min-width: $mdlext-accordion-header-height;\n    min-height: $mdlext-accordion-header-height;\n    display: flex;\n    align-items: center;\n    align-self: stretch;\n    user-select: none;\n    color: $mdlext-accordion-header-secondary-color;\n    background-color: $mdlext-accordion-header-background-color;\n    cursor: pointer;\n    overflow: hidden;\n\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-accordion-header-focus-outline-color;\n      outline-width: 2px;\n    }\n\n    &[aria-expanded='true'] {\n      background-color: $mdlext-accordion-header-background-open-color;\n    }\n\n    &[aria-selected='true'] {\n      background-color: $mdlext-accordion-header-background-active-color;\n    }\n\n    &[disabled] {\n      background-color: $mdlext-accordion-header-disabled-color;\n      color: $mdlext-accordion-header-secondary-color-disabled;\n      pointer-events: none;\n\n      > * {\n        color: $mdlext-accordion-header-secondary-color-disabled;\n      }\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $mdlext-accordion-header-background-hover-color;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0;\n    }\n\n    &__caption {\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    &--ripple {\n      &[aria-selected='true']::before {\n        content: '';\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        background: $mdlext-accordion-ripple-color;\n        opacity: 0;\n        border-radius: 100%;\n        transform: scale(1, 1) translate(-50%);\n        transform-origin: 50% 50%;\n      }\n      &[aria-selected='true']:focus:not(:active)::before {\n        // http://easings.net/\n        animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; // cubic-bezier(0.4, 0.0, 1, 1); //cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; //ease-out;\n      }\n    }\n  }\n\n  &__tabpanel {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0 $mdlext-accordion-content-padding;\n    color: $mdlext-accordion-content-color;\n    background-color: $mdlext-accordion-content-background-color;\n    display: block;\n    overflow: auto;\n    flex-grow: 1;\n\n    &[hidden] {\n      @include mdlext-visually-hidden;\n    }\n  }\n}\n\n// Vertical layout\n.mdlext-accordion {\n\n  &--vertical {\n    flex-direction: column;\n    flex-wrap: nowrap;\n\n    .mdlext-accordion__panel {\n      min-height: $mdlext-accordion-header-height;\n      flex-direction: column;\n    }\n\n    .mdlext-accordion__tab {\n      height: $mdlext-accordion-header-height;\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        height: 1px;\n        width: 100%;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n        animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        padding-left: $mdlext-accordion-header-padding;\n      }\n\n      > *:first-child {\n        padding-left: 0;\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        margin-left: auto; // If more than one element, push last element to the right\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 5%;\n          height: 10%;\n        }\n      }\n\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleY(1);\n        animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleY(0);\n          animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;\n          animation-delay: 0.1s;\n        }\n      }\n    }\n  }\n}\n\n// Horizontal layout\n.mdlext-accordion {\n\n  &--horizontal {\n\n    .mdlext-accordion__panel {\n      min-width: $mdlext-accordion-header-height;\n      width: $mdlext-accordion-header-height;\n    }\n\n    &[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {\n      width: 100%;\n    }\n\n    .mdlext-accordion__tab {\n      flex-direction: column-reverse;\n      width: $mdlext-accordion-header-height;\n      white-space: nowrap;\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        top: 0;\n        right: 0;\n        height: 100%;\n        width: 1px;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n\n        // Figure out how to animate a vertical line\n        //animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        //transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        //transform: rotate(-90deg) translateX(50%);\n        transform: rotate(-90deg) translateX($mdlext-accordion-header-padding);\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        // If more than one element, push last element to top\n        margin-bottom: auto;\n        transform: rotate(-90deg) translateX(0);\n      }\n\n      &__caption {\n        transform: rotate(-90deg) translateX(50%);\n        padding-right: $mdlext-accordion-header-padding + 8px;\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 10%;\n          height: 5%;\n        }\n      }\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleX(1);\n        animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleX(0);\n          animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;\n        }\n      }\n    }\n  }\n}\n\n.mdlext-accordion {\n\n  &__panel:first-child > &__tab {\n    // Use container to set outer borders\n    border-top-color: transparent;\n    border-left-color: transparent;\n  }\n\n  &[aria-multiselectable=\"false\"] {\n    .mdlext-accordion__panel.is-expanded {\n      flex-grow: 1;\n    }\n  }\n}\n\n// Making accordion appear disabled.\n// Note: does not prevent tabbing into a disabled accordion\n.mdlext-accordion[disabled] {\n  * {\n    pointer-events: none;\n  }\n  .mdlext-accordion__tab {\n    background-color: $mdlext-accordion-header-disabled-color;\n    color: $mdlext-accordion-header-secondary-color-disabled;\n\n    > * {\n      color: $mdlext-accordion-header-secondary-color-disabled;\n    }\n  }\n  .mdlext-accordion__tabpanel {\n    opacity: 0.8;\n    filter: blur(1px) grayscale(80%);\n  }\n}\n\n\n@keyframes mdlext-accordion-tab-ripple {\n  0% {\n    transform: scale(0, 0);\n    opacity: 1;\n  }\n  20% {\n    transform: scale(25, 25);\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n    transform: scale(40, 40);\n  }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0.1); }\n  40% { transform: scaleY(1.03); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.03); }\n  100% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0); }\n  60% { transform: scaleY(1.01); }\n  80% { transform: scaleY(0.98); }\n  100% { transform: scaleY(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-y {\n  0% { transform: scaleY(1); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(0); }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0.1); }\n  40% { transform: scaleX(1.03); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.03); }\n  100% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0); }\n  60% { transform: scaleX(1.01); }\n  80% { transform: scaleX(0.98); }\n  100% { transform: scaleX(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-x {\n  0% { transform: scaleX(1); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(0); }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/accordion/_accordion.scss","@import \"color-themes\";\n\n.mdlext-light-color-theme {\n  background-color: $mdlext-light-content-background-color;\n  color: $mdlext-light-text-color-primary;\n\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n// -----------------------------\n.mdlext-light-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-light-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-light-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  a {\n    color: $mdlext-light-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-light-badge-background;\n      color: $mdlext-light-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-light-badge-color-inverse;\n        background: $mdlext-light-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-light-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-light-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-light-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-light-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-primary-color-alt;\n      color: $mdlext-light-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-fab-color-alt;\n      color: $mdlext-light-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-light-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-secondary-color-alt;\n      background-color: $mdlext-light-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-light-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-fab-text-color-alt;\n      background-color: $mdlext-light-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-light-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-light-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-color 16px,\n          $mdlext-light-range-color 0);\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(to left,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-bg-color 16px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n\n      /**************************** Thumbs ****************************/\n      &::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-color 0%,\n          $mdlext-light-range-color 37.5%,\n          $mdlext-light-range-faded-color 37.5%,\n          $mdlext-light-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-light-range-bg-color 66.67%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-bg-focus-color 0%,\n          $mdlext-light-range-bg-focus-color 25%,\n          $mdlext-light-range-bg-color 25%,\n          $mdlext-light-range-bg-color 37.5%,\n          $mdlext-light-range-bg-focus-color 37.5%,\n          $mdlext-light-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-light-range-bg-color 77.78%,\n          $mdlext-light-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-light-range-bg-color 50%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-light-range-bg-color 25px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-light-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-light-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-light-checkbox-focus-color;\n    background-color: $mdlext-light-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-light-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-light-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-light-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-light-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-light-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-light-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-light-switch-faded-color;\n    background-color: $mdlext-light-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-light-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-light-data-table-divider-color;\n    background-color: $mdlext-light-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-light-data-table-selection-color;\n        }\n        &:hover {\n          background-color: $mdlext-light-data-table-hover-color;\n        }\n      }\n    }\n    th {\n      color: $data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-light-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-light-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-light-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-light-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-light-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-light-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-light-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-light-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-light-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-default-item-active-bg-color;\n    }\n  }\n}\n\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-card {\n    background: $mdlext-light-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-light-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-light-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-light-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-light-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-light-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(0, 0, 0, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-light-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-light-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-light-content-background-color;\n      color: $mdlext-light-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-light-color-theme {\n  background: $mdlext-light-default-dropdown-bg-color;\n}\n\n.mdlext-light-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-light-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-light-default-item-text-color;\n      background-color: $mdlext-light-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-light-default-item-outline-color;\n        background-color: $mdlext-light-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-light-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-light-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-light-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-light-bordered-field-background-color;\n        border-color: $mdlext-light-bordered-field-border-color;\n        color: $mdlext-light-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-light-bordered-field-disabled-background-color;\n          border-color: $mdlext-light-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-light-bordered-field-focus-background-color;\n          border-color: $mdlext-light-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-light-bordered-field-input-text-error-color;\n          border-color: $mdlext-light-bordered-field-error-border-color;\n          background-color: $mdlext-light-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-light-bordered-field-error-focus-border-color;\n            background-color: $mdlext-light-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-light-bordered-field-disabled-background-color;\n      border-color: $mdlext-light-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-light-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n  }\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-light-accordion-header-secondary-color;\n      background-color: $mdlext-light-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-light-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-light-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-light-accordion-header-disabled-color;\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-light-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-light-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-light-accordion-content-color;\n      background-color: $mdlext-light-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-light-accordion-header-disabled-color;\n      color: $mdlext-light-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_light-color-theme.scss","@import \"color-themes\";\n\n.mdlext-dark-color-theme {\n  background-color: $mdlext-dark-content-background-color;\n  color: $mdlext-dark-text-color-primary;\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n.mdlext-dark-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n.mdlext-dark-color-theme {\n  a {\n    color: $mdlext-dark-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-dark-badge-background;\n      color: $mdlext-dark-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-dark-badge-color-inverse;\n        background: $mdlext-dark-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-dark-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-dark-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-dark-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-primary-color-alt;\n      color: $mdlext-dark-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-fab-color-alt;\n      color: $mdlext-dark-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-dark-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-secondary-color-alt;\n      background-color: $mdlext-dark-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-dark-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-fab-text-color-alt;\n      background-color: $mdlext-dark-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-dark-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-dark-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(\n          to right,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-color 16px,\n          $mdlext-dark-range-color 0\n        );\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(\n          to left,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-bg-color 16px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n      &::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-color 0%,\n          $mdlext-dark-range-color 37.5%,\n          $mdlext-dark-range-faded-color 37.5%,\n          $mdlext-dark-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-dark-range-bg-color 66.67%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-bg-focus-color 0%,\n          $mdlext-dark-range-bg-focus-color 25%,\n          $mdlext-dark-range-bg-color 25%,\n          $mdlext-dark-range-bg-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-dark-range-bg-color 77.78%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-dark-range-bg-color 50%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-dark-range-bg-color 25px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-dark-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-dark-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-dark-checkbox-focus-color;\n    background-color: $mdlext-dark-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-dark-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-dark-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-dark-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-dark-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-dark-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-dark-switch-faded-color;\n    background-color: $mdlext-dark-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-dark-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-dark-data-table-divider-color;\n    background-color: $mdlext-dark-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-dark-data-table-selection-color;\n        }\n\n        &:hover {\n          background-color: $mdlext-dark-data-table-hover-color;\n        }\n      }\n    }\n\n    th {\n      color: $mdlext-dark-data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-dark-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-dark-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-dark-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-dark-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-dark-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-dark-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-dark-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-dark-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-dark-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-default-item-active-bg-color;\n    }\n  }\n}\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-card {\n    background: $mdlext-dark-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-dark-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-dark-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-dark-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-dark-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-dark-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(255, 255, 255, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-dark-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-dark-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-dark-content-background-color;\n      color: $mdlext-dark-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-dark-color-theme {\n  background: $mdlext-dark-default-dropdown-bg-color;\n}\n\n.mdlext-dark-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-dark-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-dark-default-item-text-color;\n      background-color: $mdlext-dark-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-dark-default-item-outline-color;\n        background-color: $mdlext-dark-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-dark-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-dark-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-dark-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-dark-bordered-field-background-color;\n        border-color: $mdlext-dark-bordered-field-border-color;\n        color: $mdlext-dark-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-dark-bordered-field-disabled-background-color;\n          border-color: $mdlext-dark-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-dark-bordered-field-focus-background-color;\n          border-color: $mdlext-dark-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-dark-bordered-field-input-text-error-color;\n          border-color: $mdlext-dark-bordered-field-error-border-color;\n          background-color: $mdlext-dark-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-dark-bordered-field-error-focus-border-color;\n            background-color: $mdlext-dark-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-dark-bordered-field-disabled-background-color;\n      border-color: $mdlext-dark-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-dark-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n  }\n\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-dark-accordion-header-secondary-color;\n      background-color: $mdlext-dark-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-dark-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-dark-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-dark-accordion-header-disabled-color;\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-dark-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-dark-accordion-content-color;\n      background-color: $mdlext-dark-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-dark-accordion-header-disabled-color;\n      color: $mdlext-dark-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_dark-color-theme.scss"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.css b/node_modules/mdl-ext/lib/mdl-ext.css
new file mode 100644
index 0000000..a26dc18
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.css
@@ -0,0 +1,5765 @@
+/**
+ * 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.
+*/
+
+/* ==========  COLORS  ========== */
+
+/**
+*
+* Material design color palettes.
+* @see http://www.google.com/design/spec/style/color.html
+*
+**/
+
+/**
+ * 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  ========== */
+
+/* colors.scss */
+
+/**
+ * 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.
+ */
+
+/* ==========  IMAGES  ========== */
+
+/* ==========  Color & Themes  ========== */
+
+/* ==========  Typography  ========== */
+
+/* ==========  Components  ========== */
+
+/* ==========  Standard Buttons  ========== */
+
+/* ==========  Icon Toggles  ========== */
+
+/* ==========  Radio Buttons  ========== */
+
+/* ==========  Ripple effect  ========== */
+
+/* ==========  Layout  ========== */
+
+/* ==========  Content Tabs  ========== */
+
+/* ==========  Checkboxes  ========== */
+
+/* ==========  Switches  ========== */
+
+/* ==========  Spinner  ========== */
+
+/* ==========  Text fields  ========== */
+
+/* ==========  Card  ========== */
+
+/* ==========  Sliders ========== */
+
+/* ========== Progress ========== */
+
+/* ==========  List ========== */
+
+/* ==========  Item ========== */
+
+/* ==========  Dropdown menu ========== */
+
+/* ==========  Tooltips  ========== */
+
+/* ==========  Footer  ========== */
+
+/* TEXTFIELD */
+
+/* SWITCH */
+
+/* SPINNER */
+
+/* RADIO */
+
+/* MENU */
+
+/* LIST */
+
+/* LAYOUT */
+
+/* ICON TOGGLE */
+
+/* FOOTER */
+
+/*mega-footer*/
+
+/*mini-footer*/
+
+/* CHECKBOX */
+
+/* CARD */
+
+/* Card dimensions */
+
+/* Cover image */
+
+/* BUTTON */
+
+/**
+ *
+ * Dimensions
+ *
+ */
+
+/* ANIMATION */
+
+/* PROGRESS */
+
+/* BADGE */
+
+/* SHADOWS */
+
+/* GRID */
+
+/* DATA TABLE */
+
+/* DIALOG */
+
+/* SNACKBAR */
+
+/* TOOLTIP */
+
+/* CHIP */
+
+/**
+ * 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 */
+
+/* Shadows */
+
+/* Animations */
+
+/* Dialog */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+.mdlext-aria-expanded-plus-minus {
+  font-family: inherit;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 24px;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-expanded-plus-minus::after {
+  content: "+";
+  margin-left: 0;
+}
+
+[aria-expanded='true'] > .mdlext-aria-expanded-plus-minus::after {
+  content: "-";
+  margin-left: 0;
+}
+
+.mdlext-aria-expanded-more-less {
+  font-family: "Material Icons";
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 24px;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-expanded-more-less::after {
+  content: "expand_more";
+  margin-left: 0;
+}
+
+[aria-expanded='true'] > .mdlext-aria-expanded-more-less::after {
+  content: "expand_less";
+  margin-left: 0;
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+.mdlext-layout__sticky-header {
+  position: absolute;
+  overflow: visible;
+  background: transparent linear-gradient(to bottom, #3f51b5 0, #3f51b5 100%);
+  transition: 0.1s ease-in-out;
+}
+
+.mdlext-layout__sticky-header.mdlext-is-scroll {
+  background: transparent linear-gradient(to bottom, rgba(63, 81, 181, 0.98) 100%, rgba(63, 81, 181, 0.95) 100%);
+}
+
+*:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__drawer-button {
+  visibility: hidden;
+}
+
+*:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__header-row {
+  padding-left: 16px;
+}
+
+*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header,
+.is-small-screen.has-drawer .mdlext-layout__sticky-header {
+  display: -ms-flexbox;
+  display: flex;
+}
+
+*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button,
+.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button {
+  visibility: visible;
+}
+
+*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row,
+.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row {
+  padding-left: 64px;
+}
+
+/**
+ * Copyright 2015 Google Inc. All Rights Reserved.
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * SASS based on css from Google Chrome Dialog polyfill, https://github.com/GoogleChrome/dialog-polyfill
+ * @include 'node_modules/dialog-polyfill/dialog-polyfill.css' before using this
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+dialog.mdlext-dialog {
+  position: absolute;
+  border: 0;
+  opacity: 0;
+  padding: 0;
+  background-color: transparent;
+}
+
+dialog.mdlext-dialog[open] {
+  animation: mdlext-open-dialog 0.5s 0.2s forwards;
+}
+
+dialog.mdlext-dialog[open]::-webkit-backdrop {
+  animation: mdlext-darken-backdrop 0.2s forwards;
+}
+
+dialog.mdlext-dialog[open]::backdrop {
+  animation: mdlext-darken-backdrop 0.2s forwards;
+}
+
+dialog.mdlext-dialog[open] + .backdrop {
+  animation: mdlext-darken-backdrop 0.2s forwards;
+}
+
+@keyframes mdlext-darken-backdrop {
+  to {
+    background: rgba(0, 0, 0, 0.86);
+  }
+}
+
+@keyframes mdlext-open-dialog {
+  to {
+    opacity: 1;
+  }
+}
+
+/**
+ * This code is modified from Material Design Lite _grid.sass,
+ * which is Licensed under the Apache License, Version 2.0
+ * 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.
+ *
+ */
+
+.mdlext-grid {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-flow: row wrap;
+      flex-flow: row wrap;
+  margin: 0 auto;
+  -ms-flex-align: stretch;
+      align-items: stretch;
+}
+
+.mdlext-grid.mdlext-grid--no-spacing {
+  padding: 0;
+}
+
+.mdlext-cell {
+  box-sizing: border-box;
+}
+
+.mdlext-cell--top {
+  -ms-flex-item-align: start;
+      align-self: flex-start;
+}
+
+.mdlext-cell--middle {
+  -ms-flex-item-align: center;
+      -ms-grid-row-align: center;
+      align-self: center;
+}
+
+.mdlext-cell--bottom {
+  -ms-flex-item-align: end;
+      align-self: flex-end;
+}
+
+.mdlext-cell--stretch {
+  -ms-flex-item-align: stretch;
+      -ms-grid-row-align: stretch;
+      align-self: stretch;
+}
+
+.mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell {
+  margin: 0;
+}
+
+.mdlext-cell--order-1 {
+  -ms-flex-order: 1;
+      order: 1;
+}
+
+.mdlext-cell--order-2 {
+  -ms-flex-order: 2;
+      order: 2;
+}
+
+.mdlext-cell--order-3 {
+  -ms-flex-order: 3;
+      order: 3;
+}
+
+.mdlext-cell--order-4 {
+  -ms-flex-order: 4;
+      order: 4;
+}
+
+.mdlext-cell--order-5 {
+  -ms-flex-order: 5;
+      order: 5;
+}
+
+.mdlext-cell--order-6 {
+  -ms-flex-order: 6;
+      order: 6;
+}
+
+.mdlext-cell--order-7 {
+  -ms-flex-order: 7;
+      order: 7;
+}
+
+.mdlext-cell--order-8 {
+  -ms-flex-order: 8;
+      order: 8;
+}
+
+.mdlext-cell--order-9 {
+  -ms-flex-order: 9;
+      order: 9;
+}
+
+.mdlext-cell--order-10 {
+  -ms-flex-order: 10;
+      order: 10;
+}
+
+.mdlext-cell--order-11 {
+  -ms-flex-order: 11;
+      order: 11;
+}
+
+.mdlext-cell--order-12 {
+  -ms-flex-order: 12;
+      order: 12;
+}
+
+/* stylelint-disable */
+
+@media (max-width: 479px) {
+  /* stylelint-enable */
+
+  .mdlext-grid {
+    padding: 8px;
+  }
+
+  .mdlext-cell {
+    margin: 8px;
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell {
+    width: 100%;
+  }
+
+  .mdlext-cell--hide-phone {
+    display: none !important;
+  }
+
+  .mdlext-cell--order-1-phone.mdlext-cell--order-1-phone {
+    -ms-flex-order: 1;
+        order: 1;
+  }
+
+  .mdlext-cell--order-2-phone.mdlext-cell--order-2-phone {
+    -ms-flex-order: 2;
+        order: 2;
+  }
+
+  .mdlext-cell--order-3-phone.mdlext-cell--order-3-phone {
+    -ms-flex-order: 3;
+        order: 3;
+  }
+
+  .mdlext-cell--order-4-phone.mdlext-cell--order-4-phone {
+    -ms-flex-order: 4;
+        order: 4;
+  }
+
+  .mdlext-cell--order-5-phone.mdlext-cell--order-5-phone {
+    -ms-flex-order: 5;
+        order: 5;
+  }
+
+  .mdlext-cell--order-6-phone.mdlext-cell--order-6-phone {
+    -ms-flex-order: 6;
+        order: 6;
+  }
+
+  .mdlext-cell--order-7-phone.mdlext-cell--order-7-phone {
+    -ms-flex-order: 7;
+        order: 7;
+  }
+
+  .mdlext-cell--order-8-phone.mdlext-cell--order-8-phone {
+    -ms-flex-order: 8;
+        order: 8;
+  }
+
+  .mdlext-cell--order-9-phone.mdlext-cell--order-9-phone {
+    -ms-flex-order: 9;
+        order: 9;
+  }
+
+  .mdlext-cell--order-10-phone.mdlext-cell--order-10-phone {
+    -ms-flex-order: 10;
+        order: 10;
+  }
+
+  .mdlext-cell--order-11-phone.mdlext-cell--order-11-phone {
+    -ms-flex-order: 11;
+        order: 11;
+  }
+
+  .mdlext-cell--order-12-phone.mdlext-cell--order-12-phone {
+    -ms-flex-order: 12;
+        order: 12;
+  }
+
+  .mdlext-cell--1-col,
+  .mdlext-cell--1-col-phone.mdlext-cell--1-col-phone {
+    width: calc(25% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--1-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--1-col-phone.mdlext-cell--1-col-phone {
+    width: 25%;
+  }
+
+  .mdlext-cell--2-col,
+  .mdlext-cell--2-col-phone.mdlext-cell--2-col-phone {
+    width: calc(50% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--2-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--2-col-phone.mdlext-cell--2-col-phone {
+    width: 50%;
+  }
+
+  .mdlext-cell--3-col,
+  .mdlext-cell--3-col-phone.mdlext-cell--3-col-phone {
+    width: calc(75% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--3-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--3-col-phone.mdlext-cell--3-col-phone {
+    width: 75%;
+  }
+
+  .mdlext-cell--4-col,
+  .mdlext-cell--4-col-phone.mdlext-cell--4-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--4-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--4-col-phone.mdlext-cell--4-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--5-col,
+  .mdlext-cell--5-col-phone.mdlext-cell--5-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--5-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--5-col-phone.mdlext-cell--5-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--6-col,
+  .mdlext-cell--6-col-phone.mdlext-cell--6-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--6-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--6-col-phone.mdlext-cell--6-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--7-col,
+  .mdlext-cell--7-col-phone.mdlext-cell--7-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--7-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--7-col-phone.mdlext-cell--7-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--8-col,
+  .mdlext-cell--8-col-phone.mdlext-cell--8-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--8-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--8-col-phone.mdlext-cell--8-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--9-col,
+  .mdlext-cell--9-col-phone.mdlext-cell--9-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--9-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--9-col-phone.mdlext-cell--9-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--10-col,
+  .mdlext-cell--10-col-phone.mdlext-cell--10-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--10-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--10-col-phone.mdlext-cell--10-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--11-col,
+  .mdlext-cell--11-col-phone.mdlext-cell--11-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--11-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--11-col-phone.mdlext-cell--11-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--12-col,
+  .mdlext-cell--12-col-phone.mdlext-cell--12-col-phone {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--12-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--12-col-phone.mdlext-cell--12-col-phone {
+    width: 100%;
+  }
+
+  .mdlext-cell--1-offset,
+  .mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone {
+    margin-left: calc(25% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--1-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone {
+    margin-left: 25%;
+  }
+
+  .mdlext-cell--2-offset,
+  .mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone {
+    margin-left: calc(50% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--2-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone {
+    margin-left: 50%;
+  }
+
+  .mdlext-cell--3-offset,
+  .mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone {
+    margin-left: calc(75% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--3-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone {
+    margin-left: 75%;
+  }
+}
+
+/* stylelint-disable */
+
+@media (min-width: 480px) and (max-width: 839px) {
+  /* stylelint-enable */
+
+  .mdlext-grid {
+    padding: 8px;
+  }
+
+  .mdlext-cell {
+    margin: 8px;
+    width: calc(50% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell {
+    width: 50%;
+  }
+
+  .mdlext-cell--hide-tablet {
+    display: none !important;
+  }
+
+  .mdlext-cell--order-1-tablet.mdlext-cell--order-1-tablet {
+    -ms-flex-order: 1;
+        order: 1;
+  }
+
+  .mdlext-cell--order-2-tablet.mdlext-cell--order-2-tablet {
+    -ms-flex-order: 2;
+        order: 2;
+  }
+
+  .mdlext-cell--order-3-tablet.mdlext-cell--order-3-tablet {
+    -ms-flex-order: 3;
+        order: 3;
+  }
+
+  .mdlext-cell--order-4-tablet.mdlext-cell--order-4-tablet {
+    -ms-flex-order: 4;
+        order: 4;
+  }
+
+  .mdlext-cell--order-5-tablet.mdlext-cell--order-5-tablet {
+    -ms-flex-order: 5;
+        order: 5;
+  }
+
+  .mdlext-cell--order-6-tablet.mdlext-cell--order-6-tablet {
+    -ms-flex-order: 6;
+        order: 6;
+  }
+
+  .mdlext-cell--order-7-tablet.mdlext-cell--order-7-tablet {
+    -ms-flex-order: 7;
+        order: 7;
+  }
+
+  .mdlext-cell--order-8-tablet.mdlext-cell--order-8-tablet {
+    -ms-flex-order: 8;
+        order: 8;
+  }
+
+  .mdlext-cell--order-9-tablet.mdlext-cell--order-9-tablet {
+    -ms-flex-order: 9;
+        order: 9;
+  }
+
+  .mdlext-cell--order-10-tablet.mdlext-cell--order-10-tablet {
+    -ms-flex-order: 10;
+        order: 10;
+  }
+
+  .mdlext-cell--order-11-tablet.mdlext-cell--order-11-tablet {
+    -ms-flex-order: 11;
+        order: 11;
+  }
+
+  .mdlext-cell--order-12-tablet.mdlext-cell--order-12-tablet {
+    -ms-flex-order: 12;
+        order: 12;
+  }
+
+  .mdlext-cell--1-col,
+  .mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet {
+    width: calc(12.5% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--1-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet {
+    width: 12.5%;
+  }
+
+  .mdlext-cell--2-col,
+  .mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet {
+    width: calc(25% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--2-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet {
+    width: 25%;
+  }
+
+  .mdlext-cell--3-col,
+  .mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet {
+    width: calc(37.5% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--3-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet {
+    width: 37.5%;
+  }
+
+  .mdlext-cell--4-col,
+  .mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet {
+    width: calc(50% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--4-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet {
+    width: 50%;
+  }
+
+  .mdlext-cell--5-col,
+  .mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet {
+    width: calc(62.5% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--5-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet {
+    width: 62.5%;
+  }
+
+  .mdlext-cell--6-col,
+  .mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet {
+    width: calc(75% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--6-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet {
+    width: 75%;
+  }
+
+  .mdlext-cell--7-col,
+  .mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet {
+    width: calc(87.5% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--7-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet {
+    width: 87.5%;
+  }
+
+  .mdlext-cell--8-col,
+  .mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--8-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet {
+    width: 100%;
+  }
+
+  .mdlext-cell--9-col,
+  .mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--9-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet {
+    width: 100%;
+  }
+
+  .mdlext-cell--10-col,
+  .mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--10-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet {
+    width: 100%;
+  }
+
+  .mdlext-cell--11-col,
+  .mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--11-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet {
+    width: 100%;
+  }
+
+  .mdlext-cell--12-col,
+  .mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--12-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet {
+    width: 100%;
+  }
+
+  .mdlext-cell--1-offset,
+  .mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet {
+    margin-left: calc(12.5% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--1-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet {
+    margin-left: 12.5%;
+  }
+
+  .mdlext-cell--2-offset,
+  .mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet {
+    margin-left: calc(25% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--2-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet {
+    margin-left: 25%;
+  }
+
+  .mdlext-cell--3-offset,
+  .mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet {
+    margin-left: calc(37.5% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--3-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet {
+    margin-left: 37.5%;
+  }
+
+  .mdlext-cell--4-offset,
+  .mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet {
+    margin-left: calc(50% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--4-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet {
+    margin-left: 50%;
+  }
+
+  .mdlext-cell--5-offset,
+  .mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet {
+    margin-left: calc(62.5% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--5-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet {
+    margin-left: 62.5%;
+  }
+
+  .mdlext-cell--6-offset,
+  .mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet {
+    margin-left: calc(75% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--6-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet {
+    margin-left: 75%;
+  }
+
+  .mdlext-cell--7-offset,
+  .mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet {
+    margin-left: calc(87.5% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--7-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet {
+    margin-left: 87.5%;
+  }
+}
+
+@media (min-width: 840px) {
+  .mdlext-grid {
+    padding: 8px;
+  }
+
+  .mdlext-cell {
+    margin: 8px;
+    width: calc(33.33333% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell {
+    width: 33.33333%;
+  }
+
+  .mdlext-cell--hide-desktop {
+    display: none !important;
+  }
+
+  .mdlext-cell--order-1-desktop.mdlext-cell--order-1-desktop {
+    -ms-flex-order: 1;
+        order: 1;
+  }
+
+  .mdlext-cell--order-2-desktop.mdlext-cell--order-2-desktop {
+    -ms-flex-order: 2;
+        order: 2;
+  }
+
+  .mdlext-cell--order-3-desktop.mdlext-cell--order-3-desktop {
+    -ms-flex-order: 3;
+        order: 3;
+  }
+
+  .mdlext-cell--order-4-desktop.mdlext-cell--order-4-desktop {
+    -ms-flex-order: 4;
+        order: 4;
+  }
+
+  .mdlext-cell--order-5-desktop.mdlext-cell--order-5-desktop {
+    -ms-flex-order: 5;
+        order: 5;
+  }
+
+  .mdlext-cell--order-6-desktop.mdlext-cell--order-6-desktop {
+    -ms-flex-order: 6;
+        order: 6;
+  }
+
+  .mdlext-cell--order-7-desktop.mdlext-cell--order-7-desktop {
+    -ms-flex-order: 7;
+        order: 7;
+  }
+
+  .mdlext-cell--order-8-desktop.mdlext-cell--order-8-desktop {
+    -ms-flex-order: 8;
+        order: 8;
+  }
+
+  .mdlext-cell--order-9-desktop.mdlext-cell--order-9-desktop {
+    -ms-flex-order: 9;
+        order: 9;
+  }
+
+  .mdlext-cell--order-10-desktop.mdlext-cell--order-10-desktop {
+    -ms-flex-order: 10;
+        order: 10;
+  }
+
+  .mdlext-cell--order-11-desktop.mdlext-cell--order-11-desktop {
+    -ms-flex-order: 11;
+        order: 11;
+  }
+
+  .mdlext-cell--order-12-desktop.mdlext-cell--order-12-desktop {
+    -ms-flex-order: 12;
+        order: 12;
+  }
+
+  .mdlext-cell--1-col,
+  .mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop {
+    width: calc(8.33333% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--1-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop {
+    width: 8.33333%;
+  }
+
+  .mdlext-cell--2-col,
+  .mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop {
+    width: calc(16.66667% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--2-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop {
+    width: 16.66667%;
+  }
+
+  .mdlext-cell--3-col,
+  .mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop {
+    width: calc(25% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--3-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop {
+    width: 25%;
+  }
+
+  .mdlext-cell--4-col,
+  .mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop {
+    width: calc(33.33333% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--4-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop {
+    width: 33.33333%;
+  }
+
+  .mdlext-cell--5-col,
+  .mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop {
+    width: calc(41.66667% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--5-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop {
+    width: 41.66667%;
+  }
+
+  .mdlext-cell--6-col,
+  .mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop {
+    width: calc(50% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--6-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop {
+    width: 50%;
+  }
+
+  .mdlext-cell--7-col,
+  .mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop {
+    width: calc(58.33333% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--7-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop {
+    width: 58.33333%;
+  }
+
+  .mdlext-cell--8-col,
+  .mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop {
+    width: calc(66.66667% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--8-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop {
+    width: 66.66667%;
+  }
+
+  .mdlext-cell--9-col,
+  .mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop {
+    width: calc(75% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--9-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop {
+    width: 75%;
+  }
+
+  .mdlext-cell--10-col,
+  .mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop {
+    width: calc(83.33333% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--10-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop {
+    width: 83.33333%;
+  }
+
+  .mdlext-cell--11-col,
+  .mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop {
+    width: calc(91.66667% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--11-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop {
+    width: 91.66667%;
+  }
+
+  .mdlext-cell--12-col,
+  .mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop {
+    width: calc(100% - 16px);
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell--12-col,
+  .mdlext-grid--no-spacing >
+    .mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop {
+    width: 100%;
+  }
+
+  .mdlext-cell--1-offset,
+  .mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop {
+    margin-left: calc(8.33333% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--1-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop {
+    margin-left: 8.33333%;
+  }
+
+  .mdlext-cell--2-offset,
+  .mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop {
+    margin-left: calc(16.66667% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--2-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop {
+    margin-left: 16.66667%;
+  }
+
+  .mdlext-cell--3-offset,
+  .mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop {
+    margin-left: calc(25% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--3-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop {
+    margin-left: 25%;
+  }
+
+  .mdlext-cell--4-offset,
+  .mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop {
+    margin-left: calc(33.33333% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--4-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop {
+    margin-left: 33.33333%;
+  }
+
+  .mdlext-cell--5-offset,
+  .mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop {
+    margin-left: calc(41.66667% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--5-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop {
+    margin-left: 41.66667%;
+  }
+
+  .mdlext-cell--6-offset,
+  .mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop {
+    margin-left: calc(50% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--6-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop {
+    margin-left: 50%;
+  }
+
+  .mdlext-cell--7-offset,
+  .mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop {
+    margin-left: calc(58.33333% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--7-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop {
+    margin-left: 58.33333%;
+  }
+
+  .mdlext-cell--8-offset,
+  .mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop {
+    margin-left: calc(66.66667% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--8-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop {
+    margin-left: 66.66667%;
+  }
+
+  .mdlext-cell--9-offset,
+  .mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop {
+    margin-left: calc(75% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--9-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop {
+    margin-left: 75%;
+  }
+
+  .mdlext-cell--10-offset,
+  .mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop {
+    margin-left: calc(83.33333% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--10-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop {
+    margin-left: 83.33333%;
+  }
+
+  .mdlext-cell--11-offset,
+  .mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop {
+    margin-left: calc(91.66667% + 8px);
+  }
+
+  .mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell--11-offset,
+  .mdlext-grid.mdlext-grid--no-spacing >
+    .mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop {
+    margin-left: 91.66667%;
+  }
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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 lightboard is a translucent surface illuminated from behind, used for situations
+ * where a shape laid upon the surface needs to be seen with high contrast. In the "old days" of photography
+ * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox
+ * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+ul.mdlext-lightboard {
+  list-style: none;
+}
+
+.mdlext-lightboard {
+  box-sizing: border-box;
+  margin: 0 auto;
+  padding: 0;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-flow: row wrap;
+      flex-flow: row wrap;
+  -ms-flex-align: stretch;
+      align-items: stretch;
+}
+
+.mdlext-lightboard *,
+.mdlext-lightboard *::before,
+.mdlext-lightboard *::after,
+.mdlext-lightboard input[type="search"] {
+  box-sizing: border-box;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide {
+  background-color: #F8F8F8;
+  border: 1px solid #D8D8D8;
+  border-radius: 5px;
+  box-shadow: 2px 2px 6px -1px rgba(219, 215, 219, 0.5);
+  position: relative;
+  display: block;
+  max-width: 250px;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide::before {
+  content: '';
+  display: block;
+  padding-top: 100%;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide:hover,
+.mdlext-lightboard .mdlext-lightboard__slide:active,
+.mdlext-lightboard .mdlext-lightboard__slide:focus {
+  border-color: #B8B8B8;
+  background-color: #E8E8E8;
+  box-shadow: 2px 2px 12px -1px #dbd7db;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide:hover figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide:active figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide:focus figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide:focus {
+  outline-offset: -2px;
+  outline-color: inherit;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide[aria-selected='true'] {
+  background-color: #E8E8E8;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide[aria-selected='true'] figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container {
+  text-decoration: none;
+  display: block;
+  overflow: hidden;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame:focus,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:focus {
+  outline-offset: -2px;
+  outline-color: inherit;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame .mdl-ripple,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container .mdl-ripple {
+  background: rgb(63,81,181);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame figure,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure {
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame figure img,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure img {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  margin: auto;
+  max-width: 100%;
+  max-height: 100%;
+  border-width: 0;
+  border-radius: 3px;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame figure figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure figcaption {
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1;
+  letter-spacing: 0;
+  color: #bdbdbd;
+  position: absolute;
+  bottom: -2px;
+  white-space: nowrap;
+  overflow: hidden;
+  max-width: 100%;
+  width: 100%;
+  text-align: center;
+  text-overflow: ellipsis;
+  padding: 4px 0;
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide__frame:hover figcaption,
+.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:hover figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-lightboard {
+  padding: calc((0 - 2px) / 2);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide {
+  margin: calc(2px / 2);
+  width: calc(1 / 2 * 100% - 2px);
+}
+
+.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+  margin: 8px;
+}
+
+.mdlext-lightboard.mdlext-lightboard--no-spacing {
+  padding: 0;
+}
+
+.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide {
+  margin: 0;
+  width: calc(1 / 2 * 100%);
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+/* stylelint-disable */
+
+@media (min-width: 480px) and (max-width: 659px) {
+  /* stylelint-enable */
+
+  .mdlext-lightboard {
+    padding: calc((0 - 4px) / 2);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide {
+    margin: calc(4px / 2);
+    width: calc(1 / 4 * 100% - 4px);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+    margin: 8px;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing {
+    padding: 0;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide {
+    margin: 0;
+    width: calc(1 / 4 * 100%);
+  }
+}
+
+/* stylelint-disable */
+
+@media (min-width: 660px) and (max-width: 839px) {
+  /* stylelint-enable */
+
+  .mdlext-lightboard {
+    padding: calc((0 - 4px) / 2);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide {
+    margin: calc(4px / 2);
+    width: calc(1 / 5 * 100% - 4px);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+    margin: 8px;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing {
+    padding: 0;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide {
+    margin: 0;
+    width: calc(1 / 5 * 100%);
+  }
+}
+
+/* stylelint-disable */
+
+@media (min-width: 840px) and (max-width: 1199px) {
+  /* stylelint-enable */
+
+  .mdlext-lightboard {
+    padding: calc((0 - 8px) / 2);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide {
+    margin: calc(8px / 2);
+    width: calc(1 / 6 * 100% - 8px);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+    margin: 12px;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing {
+    padding: 0;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide {
+    margin: 0;
+    width: calc(1 / 6 * 100%);
+  }
+}
+
+@media (min-width: 1200px) {
+  .mdlext-lightboard {
+    padding: calc((0 - 8px) / 2);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide {
+    margin: calc(8px / 2);
+    width: calc(1 / 7 * 100% - 8px);
+  }
+
+  .mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure {
+    margin: 12px;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing {
+    padding: 0;
+  }
+
+  .mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide {
+    margin: 0;
+    width: calc(1 / 7 * 100%);
+  }
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+.mdlext-lightbox {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  cursor: default;
+  position: relative;
+  width: auto;
+  max-width: 100%;
+  margin: 0 auto;
+  border: 0;
+  border-radius: 0;
+  background-color: rgb(255,255,255);
+  box-sizing: border-box;
+  outline: 0;
+  display: block;
+}
+
+.mdlext-lightbox *,
+.mdlext-lightbox *::before,
+.mdlext-lightbox *::after,
+.mdlext-lightbox input[type="search"] {
+  box-sizing: border-box;
+}
+
+.mdlext-lightbox .mdlext-lightbox__slider {
+  position: absolute;
+  top: 0;
+  left: 0;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.mdlext-lightbox .mdlext-lightbox__slider .mdlext-lightbox__slider__slide {
+  -ms-flex-negative: 0;
+      flex-shrink: 0;
+  display: block;
+  text-align: left;
+  color: #7f7f7f;
+  background-size: cover;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+
+.mdlext-lightbox figure {
+  margin: 0;
+  padding: 0;
+  position: relative;
+}
+
+.mdlext-lightbox figure img {
+  width: 100%;
+  max-width: 100%;
+  height: auto;
+  border: 0;
+  outline: 0;
+}
+
+.mdlext-lightbox figure figcaption {
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1;
+  letter-spacing: 0;
+  display: block;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  max-width: 100%;
+  height: auto;
+  max-height: 50%;
+  overflow: auto;
+  padding: 8px;
+  background-color: rgba(255, 255, 255, 0.76);
+  transform-origin: bottom;
+  transform: scaleY(0);
+  transition: 0.2s ease-in-out;
+}
+
+.mdlext-lightbox figure figcaption.mdlext-lightbox__show-figcaption {
+  transform: scaleY(1);
+}
+
+.mdlext-lightbox figure figcaption tbody th {
+  text-align: left;
+}
+
+.mdlext-lightbox figure figcaption tbody th,
+.mdlext-lightbox figure figcaption tbody td {
+  vertical-align: text-top;
+}
+
+.mdlext-lightbox .mdl-card__menu {
+  color: #ffffff;
+  z-index: 1;
+}
+
+.mdlext-lightbox footer {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-pack: justify;
+      justify-content: space-between;
+  -ms-flex-align: center;
+      align-items: center;
+  background-color: rgba(255, 255, 255, 0.86);
+}
+
+.mdlext-lightbox footer .mdl-card__supporting-text {
+  -ms-flex: 1;
+      flex: 1;
+  overflow: hidden;
+  padding: 0;
+  height: 18px;
+  width: 100%;
+}
+
+.mdlext-lightbox footer nav {
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.mdlext-lightbox.mdlext-lightbox--sticky-footer footer {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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 carousel ...
+ */
+
+ul.mdlext-carousel {
+  list-style: none;
+}
+
+.mdlext-carousel {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  overflow: hidden;
+  height: 100%;
+  width: 100%;
+  display: block;
+  white-space: nowrap;
+  font-size: 0;
+  background-color: transparent;
+}
+
+.mdlext-carousel__slide {
+  box-sizing: border-box;
+  display: inline-block;
+  position: relative;
+  outline: 0;
+  margin: 0 0;
+  padding: 0;
+  height: 100%;
+  border-top: 2px solid transparent;
+}
+
+.mdlext-carousel__slide[aria-selected] figcaption,
+.mdlext-carousel__slide[aria-selected='true'] figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.25);
+}
+
+.mdlext-carousel__slide[aria-selected]::after,
+.mdlext-carousel__slide[aria-selected='true']::after {
+  height: 2px;
+  width: 100%;
+  display: block;
+  content: ' ';
+  top: -2px;
+  left: 0;
+  position: absolute;
+  background: #ff4081;
+  animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
+  transition: all 1s cubic-bezier(0.4, 0, 1, 1);
+}
+
+.mdlext-carousel__slide a {
+  text-decoration: none;
+}
+
+.mdlext-carousel__slide figure {
+  box-sizing: border-box;
+  position: relative;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+}
+
+.mdlext-carousel__slide figure img {
+  box-sizing: border-box;
+  max-height: 100%;
+}
+
+.mdlext-carousel__slide figure figcaption {
+  box-sizing: border-box;
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1;
+  letter-spacing: 0;
+  color: #bdbdbd;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  white-space: nowrap;
+  overflow: hidden;
+  max-width: 100%;
+  width: 100%;
+  text-align: center;
+  text-overflow: ellipsis;
+  padding: 4px 0;
+}
+
+.mdlext-carousel__slide figure:hover figcaption {
+  color: black !important;
+  background-color: rgba(255, 255, 255, 0.25);
+}
+
+.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container {
+  text-decoration: none;
+  display: block;
+  overflow: hidden;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  outline: 0;
+}
+
+.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container .mdl-ripple {
+  background: rgb(63,81,181);
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/*
+ * Copied/Modified/Inspired from/by:
+ *   https://github.com/google/material-design-lite/tree/master/src/textfield
+ *   http://red-team-design.com/making-html-dropdowns-not-suck/
+ *   http://codepen.io/etcpe9/pen/PqyOye,
+ *   http://codepen.io/pudgereyem/pen/PqBxQx
+ *   https://github.com/MEYVN-digital/mdl-selectfield
+ *   https://github.com/mebibou/mdl-selectfield
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+.mdlext-selectfield {
+  box-sizing: border-box;
+  position: relative;
+  font-size: 16px;
+  display: inline-block;
+  width: 300px;
+  max-width: 100%;
+  margin: 0;
+  padding: 20px 0;
+}
+
+.mdlext-selectfield .mdl-button {
+  bottom: 20px;
+  position: absolute;
+}
+
+.mdlext-selectfield::after {
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid inherit;
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: inherit;
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+  position: absolute;
+  right: 0.5em;
+  top: 50%;
+  transform: translateY(-50%);
+  pointer-events: none;
+}
+
+.mdlext-selectfield.is-disabled::after {
+  color: rgba(0,0,0, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0,0,0, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0,0,0, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-selectfield--align-right {
+  text-align: right;
+}
+
+.mdlext-selectfield--full-width {
+  width: 100%;
+}
+
+.mdlext-selectfield--expandable {
+  min-height: 32px;
+  min-width: 32px;
+  width: auto;
+}
+
+.mdlext-selectfield__select {
+  box-sizing: border-box;
+  border: 0;
+  border-radius: 0;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  -ms-appearance: none;
+  appearance: none;
+  text-indent: 0.01px;
+  text-overflow: '';
+  outline: none;
+  box-shadow: none;
+  font-size: 16px;
+  font-family: "Helvetica", "Arial", sans-serif;
+  padding: 4px calc(1.2em + 4px) 4px 0;
+  width: 100%;
+  border-bottom: 1px solid rgba(0,0,0, 0.12);
+  display: block;
+  margin: 0;
+  background: none;
+  text-align: left;
+  color: inherit;
+}
+
+.mdlext-selectfield__select:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 #000000;
+}
+
+.mdlext-selectfield__select:focus::-ms-value {
+  background-color: inherit;
+  color: inherit;
+}
+
+.mdlext-selectfield__select::-ms-expand {
+  display: none;
+}
+
+.mdlext-selectfield.is-focused .mdlext-selectfield__select {
+  outline: none;
+}
+
+.mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  border-color: rgb(213,0,0);
+  box-shadow: none;
+}
+
+fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+.mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+  border-bottom: 1px dotted rgba(0,0,0, 0.12);
+  color: rgba(0,0,0, 0.26);
+  background-color: transparent;
+}
+
+.mdlext-selectfield__select option {
+  color: rgba(0,0,0, 0.87);
+  box-sizing: border-box;
+  background-color: inherit;
+}
+
+.mdlext-selectfield__label {
+  box-sizing: border-box;
+  color: rgba(0,0,0, 0.26);
+  font-size: 16px;
+  top: 24px;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  pointer-events: none;
+  position: absolute;
+  display: block;
+  width: 100%;
+  overflow: hidden;
+  white-space: nowrap;
+  text-align: left;
+}
+
+.mdlext-selectfield.is-dirty .mdlext-selectfield__label,
+.mdlext-selectfield.has-placeholder .mdlext-selectfield__label {
+  visibility: hidden;
+}
+
+.mdlext-selectfield--floating-label .mdlext-selectfield__label {
+  transition-duration: 0.2s;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  transition: none;
+}
+
+fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+.mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0,0,0, 0.26);
+}
+
+.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: rgb(63,81,181);
+  font-size: 12px;
+  top: 4px;
+  visibility: visible;
+}
+
+.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,
+.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder .mdlext-selectfield__label {
+  top: -16px;
+}
+
+.mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+  color: rgb(213,0,0);
+  font-size: 12px;
+}
+
+.mdlext-selectfield__label::after {
+  background-color: rgb(63,81,181);
+  bottom: 20px;
+  content: '';
+  height: 2px;
+  left: 45%;
+  position: absolute;
+  transition-duration: 0.2s;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  visibility: hidden;
+  width: 10px;
+}
+
+.mdlext-selectfield.is-focused .mdlext-selectfield__label::after {
+  left: 0;
+  visibility: visible;
+  width: 100%;
+}
+
+.mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+  background-color: rgb(213,0,0);
+}
+
+.mdlext-selectfield__error {
+  color: rgb(213,0,0);
+  font-size: 12px;
+  position: absolute;
+  margin-top: 3px;
+  visibility: hidden;
+  display: block;
+}
+
+.mdlext-selectfield.is-invalid .mdlext-selectfield__error {
+  visibility: visible;
+}
+
+.mdlext-selectfield__expandable-holder {
+  display: inline-block;
+  position: relative;
+  margin-left: 32px;
+  transition-duration: 0.2s;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  max-width: 0.1px;
+}
+
+.mdlext-selectfield.is-focused .mdlext-selectfield__expandable-holder,
+.mdlext-selectfield.is-dirty .mdlext-selectfield__expandable-holder {
+  max-width: 600px;
+}
+
+.mdlext-selectfield__expandable-holder .mdlext-selectfield__label::after {
+  bottom: 0;
+}
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/* Moved to aria-expanded-toggle.scss
+
+.mdlext-aria-expanded-plus-minus {
+  @include mdlext-aria-expanded-toggle($font-family: inherit);
+}
+
+.mdlext-aria-expanded-more-less {
+  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');
+}
+*/
+
+.mdlext-menu-button {
+  box-sizing: border-box;
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 14px;
+  font-weight: 500;
+  line-height: 1;
+  letter-spacing: 0;
+  text-transform: none;
+  position: relative;
+  height: 36px;
+  padding: 0 16px;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-item-align: stretch;
+      align-self: stretch;
+}
+
+.mdlext-menu-button > * {
+  margin: 0;
+  padding: 0 0 0 8px;
+}
+
+.mdlext-menu-button > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-menu-button > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {
+  margin-left: auto;
+}
+
+.mdlext-menu-button__caption {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  line-height: 1.2;
+}
+
+.mdlext-menu,
+.mdlext-menu__item {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.mdlext-menu {
+  position: absolute;
+  background: rgb(255,255,255);
+  z-index: 1000;
+  min-width: 124px;
+  border-radius: 2px;
+  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12);
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-direction: column;
+      flex-direction: column;
+  padding: 0;
+  overflow: hidden;
+  overflow-y: auto;
+}
+
+.mdlext-menu:focus {
+  outline-offset: -1px;
+  outline-width: 1px;
+}
+
+.mdlext-menu[hidden] {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+  pointer-events: none;
+}
+
+.mdlext-menu__item {
+  font-size: 14px;
+  font-weight: 400;
+  line-height: 24px;
+  letter-spacing: 0;
+  color: rgba(0,0,0, 0.87);
+  background-color: rgb(255,255,255);
+  position: relative;
+  padding: 0 16px 0 24px;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-item-align: stretch;
+      -ms-grid-row-align: stretch;
+      align-self: stretch;
+  text-decoration: none;
+  cursor: pointer;
+  white-space: nowrap;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  min-height: 40px;
+  overflow: hidden;
+}
+
+.mdlext-menu__item[aria-selected='true'] {
+  background-color: rgb(224,224,224);
+}
+
+.mdlext-menu__item[aria-selected='true']::before {
+  content: '\2713';
+  position: absolute;
+  font-size: 1.4em;
+  left: 4px;
+  top: 50%;
+  transform: translateY(-50%);
+  pointer-events: none;
+}
+
+.mdlext-menu__item:hover:not([disabled]) {
+  background-color: rgb(238,238,238);
+}
+
+.mdlext-menu__item:focus {
+  outline-offset: -2px;
+  outline-width: 1px;
+  outline-color: rgb(189,189,189);
+  background-color: rgb(238,238,238);
+}
+
+.mdlext-menu__item::-moz-focus-inner {
+  border: 0;
+}
+
+.mdlext-menu__item[disabled] {
+  color: rgb(189,189,189);
+  background-color: transparent;
+  cursor: auto;
+  pointer-events: none;
+}
+
+.mdlext-menu__item[disabled] > * {
+  color: rgb(189,189,189);
+}
+
+.mdlext-menu__item__caption {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.mdlext-menu__item > * {
+  margin: 0;
+  padding: 0 0 0 8px;
+}
+
+.mdlext-menu__item > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-menu__item > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {
+  margin-left: auto;
+}
+
+.mdlext-menu__item-separator {
+  margin: 0;
+  padding: 0;
+  border-bottom: 1px solid rgba(0,0,0, 0.12);
+}
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/*
+ * The bordered fields are based on / inspired by this CodePen: http://codepen.io/prajwal078/pen/LVJZXz?editors=010
+ */
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========   Sticky Header   ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+
+/* ==========     Dialog     ========== */
+
+/* ==========     Lightbox     ========== */
+
+/* ==========  Lightboard  ========== */
+
+/* ==========  Carousel  ========== */
+
+/* ==========  Bordered fields  ========== */
+
+/* ==========  Color Themes  ========== */
+
+/* stylelint-disable */
+
+/* stylelint-enable */
+
+.mdlext-bordered-fields {
+  box-sizing: border-box;
+}
+
+.mdlext-bordered-fields * {
+  box-sizing: border-box;
+}
+
+.mdlext-bordered-fields .mdl-textfield,
+.mdlext-bordered-fields .mdlext-selectfield {
+  padding: 0;
+  margin: 0 0 20px 0;
+  /*
+    &.is-dirty {
+      .mdl-textfield__input,
+      .mdlext-selectfield__select {
+      }
+    }
+    */
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  height: 46px;
+  background-color: rgba(255, 255, 255, 0.2);
+  border: 1px solid rgba(0, 0, 0, 0.26);
+  border-radius: 3px;
+  padding: 20px 8px 4px 8px;
+  font-size: 16px;
+  font-weight: normal;
+  color: inherit;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled {
+  color: rgba(0, 0, 0, 0.12);
+  background-color: rgba(255, 255, 255, 0.2);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus {
+  background-color: rgba(238, 238, 238, 0.2);
+  border-color: #3f51b5;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  padding-right: calc(1em + 8px);
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  color: inherit;
+  border-color: #d50000;
+  background-color: rgba(255, 213, 213, 0.5);
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus {
+  border-color: #a20000;
+  background-color: rgba(255, 213, 213, 0.5);
+}
+
+.mdlext-bordered-fields .mdlext-selectfield::after {
+  top: auto;
+  bottom: 4px;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield::after,
+.mdlext-bordered-fields .mdlext-selectfield.is-disabled::after {
+  color: rgba(0, 0, 0, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0, 0, 0, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0, 0, 0, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+  color: rgba(0, 0, 0, 0.12);
+  background-color: rgba(255, 255, 255, 0.2);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdlext-selectfield__label {
+  visibility: hidden;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+  font-size: 16px;
+  font-weight: normal;
+  padding-left: 8px;
+  top: auto;
+  bottom: 4px;
+}
+
+.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label::after,
+.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label::after,
+.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label::after,
+.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label::after {
+  background-color: transparent !important;
+  visibility: hidden !important;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #3f51b5;
+  font-size: 12px;
+  font-weight: normal;
+  top: auto;
+  bottom: 24px;
+  visibility: visible;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label {
+  color: #d50000;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > i,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > .mdl-button,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > .mdl-button {
+  position: absolute;
+  bottom: 2px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > i {
+  bottom: 6px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i:first-child,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button:first-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i:first-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button:first-child {
+  left: 4px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__select,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__select {
+  padding-left: 32px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdl-textfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdl-textfield__label {
+  left: 24px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > i ~ .mdlext-selectfield__label,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left > .mdl-button ~ .mdlext-selectfield__label {
+  left: 24px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > .mdl-textfield__input,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > .mdl-textfield__input {
+  padding-right: 32px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > i:last-child,
+.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right > .mdl-button:last-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > i:last-child,
+.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right > .mdl-button:last-child {
+  left: auto;
+  right: 4px;
+}
+
+.mdlext-bordered-fields .mdl-textfield.is-disabled i,
+.mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,
+.mdlext-bordered-fields .mdlext-selectfield.is-disabled i,
+.mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+  pointer-events: none;
+}
+
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,
+.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i,
+.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+  pointer-events: none;
+}
+
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+.mdlext-collapsible {
+  box-sizing: border-box;
+  cursor: pointer;
+}
+
+.mdlext-collapsible-group,
+.mdlext-collapsible-region {
+  box-sizing: border-box;
+}
+
+.mdlext-collapsible-group[hidden],
+.mdlext-collapsible-region[hidden] {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+  pointer-events: none;
+}
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+.mdlext-aria-toggle-plus-minus {
+  font-family: inherit;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 1.4em;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-toggle-plus-minus::after {
+  content: "+";
+  margin-left: 0;
+}
+
+[aria-expanded='true'] > .mdlext-aria-toggle-plus-minus::after {
+  content: "-";
+  margin-left: 0;
+}
+
+.mdlext-aria-toggle-material-icons {
+  font-family: "Material Icons";
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 1.3em;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+  text-rendering: optimizeLegibility;
+  -moz-osx-font-smoothing: grayscale;
+  font-feature-settings: 'liga';
+}
+
+.mdlext-aria-toggle-material-icons::after {
+  content: "expand_more";
+  margin-left: -8px;
+}
+
+[aria-expanded='true'] > .mdlext-aria-toggle-material-icons::after {
+  content: "expand_less";
+  margin-left: -8px;
+}
+
+.mdlext-accordion {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.mdlext-accordion * {
+  box-sizing: border-box;
+}
+
+.mdlext-accordion__panel {
+  box-sizing: border-box;
+  position: relative;
+  overflow: hidden;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-wrap: nowrap;
+      flex-wrap: nowrap;
+}
+
+.mdlext-accordion__tab {
+  font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+  font-size: 20px;
+  font-weight: 500;
+  line-height: 1;
+  letter-spacing: 0.02em;
+  font-weight: 400;
+  line-height: 1.1;
+  box-sizing: border-box;
+  position: relative;
+  margin: 0;
+  padding: 0;
+  min-width: 56px;
+  min-height: 56px;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-item-align: stretch;
+      align-self: stretch;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  color: #000000;
+  background-color: rgba(158, 158, 158, 0.2);
+  cursor: pointer;
+  overflow: hidden;
+}
+
+.mdlext-accordion__tab:focus {
+  outline-offset: -2px;
+  outline-color: invert;
+  outline-width: 2px;
+}
+
+.mdlext-accordion__tab[aria-expanded='true'] {
+  background-color: rgba(158, 158, 158, 0.3);
+}
+
+.mdlext-accordion__tab[aria-selected='true'] {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-accordion__tab[disabled] {
+  background-color: rgba(158, 158, 158, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+  pointer-events: none;
+}
+
+.mdlext-accordion__tab[disabled] > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-accordion__tab:hover:not([disabled]) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-accordion__tab > * {
+  margin: 0;
+  padding: 0;
+}
+
+.mdlext-accordion__tab__caption {
+  padding-left: 8px;
+  padding-right: 8px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.mdlext-accordion__tab > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  content: '';
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  background: rgba(255, 255, 255, 0.5);
+  opacity: 0;
+  border-radius: 100%;
+  transform: scale(1, 1) translate(-50%);
+  transform-origin: 50% 50%;
+}
+
+.mdlext-accordion__tab--ripple[aria-selected='true']:focus:not(:active)::before {
+  animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
+}
+
+.mdlext-accordion__tabpanel {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0 8px;
+  color: inherit;
+  background-color: transparent;
+  display: block;
+  overflow: auto;
+  -ms-flex-positive: 1;
+      flex-grow: 1;
+}
+
+.mdlext-accordion__tabpanel[hidden] {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+
+.mdlext-accordion--vertical {
+  -ms-flex-direction: column;
+      flex-direction: column;
+  -ms-flex-wrap: nowrap;
+      flex-wrap: nowrap;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__panel {
+  min-height: 56px;
+  -ms-flex-direction: column;
+      flex-direction: column;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab {
+  height: 56px;
+  border-top: 1px solid rgba(158, 158, 158, 0.5);
+  padding-left: 8px;
+  padding-right: 8px;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected='true']::after {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  height: 1px;
+  width: 100%;
+  display: block;
+  content: " ";
+  background-color: rgba(150, 150, 150, 0.5);
+  animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
+  transition: all 1s cubic-bezier(0.4, 0, 1, 1);
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab > * {
+  padding-left: 8px;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab > *:first-child {
+  padding-left: 0;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
+  margin-left: auto;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  width: 5%;
+  height: 10%;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tabpanel {
+  border-top: 1px solid rgba(158, 158, 158, 0.5);
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation {
+  transform: scaleY(1);
+  animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;
+}
+
+.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation[hidden] {
+  transform: scaleY(0);
+  animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;
+  animation-delay: 0.1s;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__panel {
+  min-width: 56px;
+  width: 56px;
+}
+
+.mdlext-accordion--horizontal[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {
+  width: 100%;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab {
+  -ms-flex-direction: column-reverse;
+      flex-direction: column-reverse;
+  width: 56px;
+  white-space: nowrap;
+  border-left: 1px solid rgba(158, 158, 158, 0.5);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected='true']::after {
+  position: absolute;
+  top: 0;
+  right: 0;
+  height: 100%;
+  width: 1px;
+  display: block;
+  content: " ";
+  background-color: rgba(150, 150, 150, 0.5);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab > * {
+  transform: rotate(-90deg) translateX(8px);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
+  margin-bottom: auto;
+  transform: rotate(-90deg) translateX(0);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab__caption {
+  transform: rotate(-90deg) translateX(50%);
+  padding-right: 16px;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  width: 10%;
+  height: 5%;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tabpanel {
+  border-left: 1px solid rgba(158, 158, 158, 0.5);
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation {
+  transform: scaleX(1);
+  animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;
+}
+
+.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation[hidden] {
+  transform: scaleX(0);
+  animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;
+}
+
+.mdlext-accordion__panel:first-child > .mdlext-accordion__tab {
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+
+.mdlext-accordion[aria-multiselectable="false"] .mdlext-accordion__panel.is-expanded {
+  -ms-flex-positive: 1;
+      flex-grow: 1;
+}
+
+.mdlext-accordion[disabled] * {
+  pointer-events: none;
+}
+
+.mdlext-accordion[disabled] .mdlext-accordion__tab {
+  background-color: rgba(158, 158, 158, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-accordion[disabled] .mdlext-accordion__tab > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-accordion[disabled] .mdlext-accordion__tabpanel {
+  opacity: 0.8;
+  filter: blur(1px) grayscale(80%);
+}
+
+@keyframes mdlext-accordion-tab-ripple {
+  0% {
+    transform: scale(0, 0);
+    opacity: 1;
+  }
+
+  20% {
+    transform: scale(25, 25);
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    transform: scale(40, 40);
+  }
+}
+
+/*
+@keyframes mdlext-accordion-show-tabpanel-y {
+  0% { transform: scaleY(0.1); }
+  40% { transform: scaleY(1.03); }
+  60% { transform: scaleY(0.98); }
+  80% { transform: scaleY(1.03); }
+  100% { transform: scaleY(0.98); }
+  80% { transform: scaleY(1.01); }
+  100% { transform: scaleY(1); }
+}
+*/
+
+@keyframes mdlext-accordion-show-tabpanel-y {
+  0% {
+    transform: scaleY(0);
+  }
+
+  60% {
+    transform: scaleY(1.01);
+  }
+
+  80% {
+    transform: scaleY(0.98);
+  }
+
+  100% {
+    transform: scaleY(1);
+  }
+}
+
+@keyframes mdlext-accordion-hide-tabpanel-y {
+  0% {
+    transform: scaleY(1);
+  }
+
+  60% {
+    transform: scaleY(0.98);
+  }
+
+  80% {
+    transform: scaleY(1.01);
+  }
+
+  100% {
+    transform: scaleY(0);
+  }
+}
+
+/*
+@keyframes mdlext-accordion-show-tabpanel-x {
+  0% { transform: scaleX(0.1); }
+  40% { transform: scaleX(1.03); }
+  60% { transform: scaleX(0.98); }
+  80% { transform: scaleX(1.03); }
+  100% { transform: scaleX(0.98); }
+  80% { transform: scaleX(1.01); }
+  100% { transform: scaleX(1); }
+}
+*/
+
+@keyframes mdlext-accordion-show-tabpanel-x {
+  0% {
+    transform: scaleX(0);
+  }
+
+  60% {
+    transform: scaleX(1.01);
+  }
+
+  80% {
+    transform: scaleX(0.98);
+  }
+
+  100% {
+    transform: scaleX(1);
+  }
+}
+
+@keyframes mdlext-accordion-hide-tabpanel-x {
+  0% {
+    transform: scaleX(1);
+  }
+
+  60% {
+    transform: scaleX(0.98);
+  }
+
+  80% {
+    transform: scaleX(1.01);
+  }
+
+  100% {
+    transform: scaleX(0);
+  }
+}
+
+/* -------------------------------------------------------------
+   Palette samples. Not part of build
+----------------------------------------------------------------
+
+$mdlext-light-color-primary:          #9E9E9E !default;
+$mdlext-light-color-primary-dark:     #616161 !default;
+$mdlext-light-color-primary-light:    #9E9E9E !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #212121 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #E040FB !default;
+$mdlext-light-color-accent-light:     #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FAFAFA !default;
+
+$mdlext-light-color-primary:          #F5F5F5 !default;
+$mdlext-light-color-primary-dark:     #E0E0E0 !default;
+$mdlext-light-color-primary-light:    #8BC34A !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #000000 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FFC107 !default;
+$mdlext-light-color-accent-light:     #FFC107 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #673AB7 !default;
+$mdlext-light-color-primary-dark:     #512DA8 !default;
+$mdlext-light-color-primary-light:    #673AB7 !default;   // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #D1C4E9 !default;   // text color on primary/primary dark background
+$mdlext-light-color-accent:           #4CAF50 !default;
+$mdlext-light-color-accent-light:     #4CAF50 !default;   // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FF5252 !default;
+$mdlext-light-color-accent-light:     #FF5252 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #03A9F4 !default;
+$mdlext-light-color-accent-light:     #03A9F4 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-dark-color-primary:           #212121 !default;
+$mdlext-dark-color-primary-dark:      #000000 !default;
+$mdlext-dark-color-primary-light:     #607D8B !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-dark-color-primary-contrast:  #FFFFFF !default;  // text color on primary/primary dark background
+$mdlext-dark-color-accent:            #FF5722 !default;
+$mdlext-dark-color-accent-light:      #FF5722 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-dark-color-accent-contrast:   #FFFFFF !default;
+
+*/
+
+.mdlext-light-color-theme {
+  background-color: #FAFAFA;
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme a {
+  outline-color: inherit;
+}
+
+.mdlext-light-color-theme .mdl-color--primary {
+  background-color: #4CAF50 !important;
+}
+
+.mdlext-light-color-theme .mdl-color--primary-contrast {
+  background-color: #C8E6C9 !important;
+}
+
+.mdlext-light-color-theme .mdl-color--primary-dark {
+  background-color: #388E3C !important;
+}
+
+.mdlext-light-color-theme .mdl-color--accent {
+  background-color: #E040FB !important;
+}
+
+.mdlext-light-color-theme .mdl-color--accent-contrast {
+  background-color: #FAFAFA !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--primary {
+  color: #4CAF50 !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--primary-contrast {
+  color: #C8E6C9 !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--primary-dark {
+  color: #388E3C !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--accent {
+  color: #E040FB !important;
+}
+
+.mdlext-light-color-theme .mdl-color-text--accent-contrast {
+  color: #FAFAFA !important;
+}
+
+.mdlext-light-color-theme a {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-badge[data-badge]::after {
+  background: #E040FB;
+  color: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-badge.mdl-badge--no-background[data-badge]::after {
+  color: #E040FB;
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button {
+  background: transparent;
+  color: #000000;
+}
+
+.mdlext-light-color-theme .mdl-button:hover {
+  background-color: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-light-color-theme .mdl-button:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-button:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button.mdl-button--colored {
+  color: #4CAF50;
+}
+
+.mdlext-light-color-theme .mdl-button.mdl-button--colored:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-button--raised {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-light-color-theme .mdl-button--raised:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--raised:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored {
+  background: #4CAF50;
+  color: #C8E6C9;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:hover {
+  background-color: #3d8b40;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:active {
+  background-color: #3d8b40;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active) {
+  background-color: #3d8b40;
+}
+
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple {
+  background: #C8E6C9;
+}
+
+.mdlext-light-color-theme .mdl-button--fab {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-light-color-theme .mdl-button--fab:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--fab:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored {
+  background: #E040FB;
+  color: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:hover {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active) {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:active {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button--icon {
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary {
+  color: #4CAF50;
+}
+
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple {
+  background: #C8E6C9;
+}
+
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised,
+.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab {
+  color: #C8E6C9;
+  background-color: #4CAF50;
+}
+
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised,
+.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab {
+  color: #FAFAFA;
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-button[disabled][disabled],
+.mdlext-light-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(0, 0, 0, 0.26);
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-button--fab[disabled][disabled],
+.mdlext-light-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-button--raised[disabled][disabled],
+.mdlext-light-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-button--colored[disabled][disabled],
+.mdlext-light-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded {
+  background: transparent;
+  color: #E040FB;
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** Thumbs ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** 0-value ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** Disabled ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-track {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-track {
+  background: none;
+  color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 16px, #E040FB 16px, #E040FB 0);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-upper {
+  background: linear-gradient(to left, transparent, transparent 16px, rgba(0, 0, 0, 0.26) 16px, rgba(0, 0, 0, 0.26) 0);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, #E040FB 0%, #E040FB 37.5%, rgba(224, 64, 251, 0.26) 37.5%, rgba(224, 64, 251, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-ms-thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb {
+  border-color: #E040FB;
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.12);
+  background: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.12);
+  background: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(0, 0, 0, 0.26) 66.67%, rgba(0, 0, 0, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, rgba(0, 0, 0, 0.12) 0%, rgba(0, 0, 0, 0.12) 25%, rgba(0, 0, 0, 0.26) 25%, rgba(0, 0, 0, 0.26) 37.5%, rgba(0, 0, 0, 0.12) 37.5%, rgba(0, 0, 0, 0.12) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(0, 0, 0, 0.26) 77.78%, rgba(0, 0, 0, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {
+  background-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb {
+  border-color: rgba(0, 0, 0, 0.26);
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,
+.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(0, 0, 0, 0.26) 50%, rgba(0, 0, 0, 0.26) 100%);
+}
+
+.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 25px, rgba(0, 0, 0, 0.26) 25px, rgba(0, 0, 0, 0.26) 0);
+}
+
+.mdlext-light-color-theme .mdl-slider__background-flex {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-slider__background-lower {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-slider__background-upper {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield__input {
+  border-bottom-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__input {
+  border-color: #D32F2F;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdl-textfield.is-disabled .mdl-textfield__input {
+  background-color: transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield__label {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-textfield__label::after {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__label::after {
+  background-color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdl-textfield__error {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdl-checkbox__box-outline {
+  border-color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline {
+  border-color: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,
+.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-checkbox__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {
+  box-shadow: 0 0 0 8px rgba(224, 64, 251, 0.26);
+  background-color: rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-checkbox__tick-outline {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,
+.mdlext-light-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {
+  background-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,
+.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-checkbox__ripple-container .mdl-ripple {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,
+.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-radio__outer-circle {
+  border-color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle {
+  border-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle {
+  border-color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-radio__inner-circle {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-radio__ripple-container .mdl-ripple {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,
+.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle__label {
+  color: #616161;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {
+  background-color: rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: #616161;
+}
+
+.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-switch__track {
+  background: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__track {
+  background: rgba(224, 64, 251, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__track {
+  background: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-switch__thumb {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__thumb {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__thumb {
+  background: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdl-switch__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper {
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-light-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {
+  box-shadow: 0 0 0 20px rgba(224, 64, 251, 0.26);
+  background-color: rgba(224, 64, 251, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__label {
+  color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdl-switch__ripple-container .mdl-ripple {
+  background: #E040FB;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,
+.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-data-table {
+  border-color: rgba(0, 0, 0, 0.12);
+  background-color: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-data-table tbody tr.is-selected {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-data-table tbody tr:hover {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-data-table th {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending {
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover::before,
+.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover::before {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdl-menu__outline {
+  background: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdl-menu__item {
+  color: rgba(0, 0, 0, 0.87);
+  background-color: transparent;
+  outline-color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdl-menu__item--full-bleed-divider {
+  border-bottom-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled],
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled] {
+  color: #BDBDBD;
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled]:hover,
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:hover {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled]:focus,
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:focus {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item[disabled] .mdl-ripple,
+.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-light-color-theme .mdl-menu__item:hover {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-menu__item:focus {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdl-menu__item:active {
+  background-color: #E0E0E0;
+}
+
+.mdlext-light-color-theme .mdl-card {
+  background: #FAFAFA;
+}
+
+.mdlext-light-color-theme .mdl-card__media {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdl-card__title {
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme .mdl-card__title.mdl-card--border {
+  border-bottom-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-light-color-theme .mdl-card__title-text {
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdl-card__subtitle-text {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-card__supporting-text {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdl-card__actions {
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdl-card__actions.mdl-card--border {
+  border-top-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield.is-disabled::after {
+  color: rgba(0, 0, 0, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0, 0, 0, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0, 0, 0, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__select {
+  border-bottom-color: rgba(0, 0, 0, 0.26);
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__select option {
+  background-color: #FAFAFA;
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  border-color: #D32F2F;
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+.mdlext-light-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+  background-color: transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__label::after {
+  background-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+  background-color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdlext-selectfield__error {
+  color: #D32F2F;
+}
+
+.mdlext-menu.mdlext-light-color-theme {
+  background: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdlext-menu {
+  background: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item {
+  color: rgba(0, 0, 0, 0.87);
+  background-color: #FFFFFF;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item:active,
+.mdlext-light-color-theme .mdlext-menu__item[aria-selected='true'] {
+  background-color: #E0E0E0;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item:hover:not([disabled]) {
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item:focus {
+  outline-color: #BDBDBD;
+  background-color: #EEEEEE;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item[disabled] {
+  color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item[disabled] > * {
+  color: #BDBDBD;
+}
+
+.mdlext-light-color-theme .mdlext-menu__item-separator {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  background-color: rgba(250, 250, 250, 0.1);
+  border-color: rgba(0, 0, 0, 0.26);
+  color: inherit;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled {
+  color: rgba(0, 0, 0, 0.26);
+  background-color: rgba(250, 250, 250, 0.1);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus {
+  background-color: rgba(225, 225, 225, 0.1);
+  border-color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  color: inherit;
+  border-color: #D32F2F;
+  background-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus {
+  border-color: #ab2424;
+  background-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield::after,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled::after {
+  color: rgba(0, 0, 0, 0.26);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(0, 0, 0, 0.26);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(0, 0, 0, 0.26);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+  color: rgba(0, 0, 0, 0.26);
+  background-color: rgba(250, 250, 250, 0.1);
+  border-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.54);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #E040FB;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label {
+  color: #D32F2F;
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,
+.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i,
+.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button {
+  color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab {
+  color: #000000;
+  background-color: rgba(117, 117, 117, 0.2);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab:focus {
+  outline-color: rgba(109, 109, 109, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[aria-expanded='true'] {
+  background-color: rgba(117, 117, 117, 0.3);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[aria-selected='true'] {
+  background-color: rgba(117, 117, 117, 0.4);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[disabled] {
+  background-color: rgba(117, 117, 117, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+  pointer-events: none;
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab[disabled] > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab:hover:not([disabled]) {
+  background-color: rgba(117, 117, 117, 0.4);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  background: rgba(117, 117, 117, 0.4);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__tabpanel {
+  color: inherit;
+  background-color: transparent;
+}
+
+.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab {
+  border-top: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: rgba(102, 102, 102, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel {
+  border-top: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab {
+  border-left: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: rgba(102, 102, 102, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel {
+  border-left: 1px solid rgba(117, 117, 117, 0.5);
+}
+
+.mdlext-light-color-theme .mdlext-accordion__panel:first-child > .mdlext-light-color-theme .mdlext-accordion__tab {
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+
+.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab {
+  background-color: rgba(117, 117, 117, 0.12);
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab > * {
+  color: rgba(0, 0, 0, 0.26);
+}
+
+.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel {
+  opacity: 0.8;
+  filter: blur(1px) grayscale(80%);
+}
+
+/* -------------------------------------------------------------
+   Palette samples. Not part of build
+----------------------------------------------------------------
+
+$mdlext-light-color-primary:          #9E9E9E !default;
+$mdlext-light-color-primary-dark:     #616161 !default;
+$mdlext-light-color-primary-light:    #9E9E9E !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #212121 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #E040FB !default;
+$mdlext-light-color-accent-light:     #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FAFAFA !default;
+
+$mdlext-light-color-primary:          #F5F5F5 !default;
+$mdlext-light-color-primary-dark:     #E0E0E0 !default;
+$mdlext-light-color-primary-light:    #8BC34A !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #000000 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FFC107 !default;
+$mdlext-light-color-accent-light:     #FFC107 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #673AB7 !default;
+$mdlext-light-color-primary-dark:     #512DA8 !default;
+$mdlext-light-color-primary-light:    #673AB7 !default;   // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #D1C4E9 !default;   // text color on primary/primary dark background
+$mdlext-light-color-accent:           #4CAF50 !default;
+$mdlext-light-color-accent-light:     #4CAF50 !default;   // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FF5252 !default;
+$mdlext-light-color-accent-light:     #FF5252 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #03A9F4 !default;
+$mdlext-light-color-accent-light:     #03A9F4 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-dark-color-primary:           #212121 !default;
+$mdlext-dark-color-primary-dark:      #000000 !default;
+$mdlext-dark-color-primary-light:     #607D8B !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-dark-color-primary-contrast:  #FFFFFF !default;  // text color on primary/primary dark background
+$mdlext-dark-color-accent:            #FF5722 !default;
+$mdlext-dark-color-accent-light:      #FF5722 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-dark-color-accent-contrast:   #FFFFFF !default;
+
+*/
+
+.mdlext-dark-color-theme {
+  background-color: #303030;
+  color: white;
+}
+
+.mdlext-dark-color-theme a {
+  outline-color: inherit;
+}
+
+.mdlext-dark-color-theme .mdl-color--primary {
+  background-color: #FFC107 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--primary-contrast {
+  background-color: #FFF8E1 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--primary-dark {
+  background-color: #FFA000 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--accent {
+  background-color: #536DFE !important;
+}
+
+.mdlext-dark-color-theme .mdl-color--accent-contrast {
+  background-color: #FFFFFF !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--primary {
+  color: #FFC107 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--primary-contrast {
+  color: #FFF8E1 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--primary-dark {
+  color: #FFA000 !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--accent {
+  color: #536DFE !important;
+}
+
+.mdlext-dark-color-theme .mdl-color-text--accent-contrast {
+  color: #FFFFFF !important;
+}
+
+.mdlext-dark-color-theme a {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-badge[data-badge]::after {
+  background: #536DFE;
+  color: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-badge.mdl-badge--no-background[data-badge]::after {
+  color: #536DFE;
+  background: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button {
+  background: transparent;
+  color: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button:hover {
+  background-color: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-button:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-button:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button.mdl-button--colored {
+  color: #FFC107;
+}
+
+.mdlext-dark-color-theme .mdl-button.mdl-button--colored:focus:not(:active) {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored {
+  background: #FFC107;
+  color: #FFF8E1;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:hover {
+  background-color: #d39e00;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:active {
+  background-color: #d39e00;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active) {
+  background-color: #d39e00;
+}
+
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple {
+  background: #FFF8E1;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab {
+  background: rgba(158, 158, 158, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-button--fab:active {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--fab:focus:not(:active) {
+  background-color: rgba(158, 158, 158, 0.4);
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored {
+  background: #536DFE;
+  color: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:hover {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active) {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:active {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple {
+  background: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button--icon {
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary {
+  color: #FFC107;
+}
+
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple {
+  background: #FFF8E1;
+}
+
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised,
+.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab {
+  color: #FFF8E1;
+  background-color: #FFC107;
+}
+
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple {
+  background: #FFFFFF;
+}
+
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised,
+.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab {
+  color: #FFFFFF;
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-button[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(255, 255, 255, 0.26);
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-button--fab[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-button--raised[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled {
+  background-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-button--colored[disabled][disabled],
+.mdlext-dark-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded {
+  background: transparent;
+  color: #536DFE;
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** 0-value ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+  /**************************** Disabled ****************************/
+  /* stylelint-disable */
+  /* stylelint-enable */
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-track {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-track {
+  background: none;
+  color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 16px, #536DFE 16px, #536DFE 0);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-upper {
+  background: linear-gradient(to left, transparent, transparent 16px, rgba(255, 255, 255, 0.87) 16px, rgba(255, 255, 255, 0.87) 0);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(83, 109, 254, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(83, 109, 254, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, #536DFE 0%, #536DFE 37.5%, rgba(83, 109, 254, 0.5) 37.5%, rgba(83, 109, 254, 0.5) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-ms-thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb {
+  border-color: #536DFE;
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
+  box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.5);
+  background: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb {
+  box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.5);
+  background: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(255, 255, 255, 0.87) 66.67%, rgba(255, 255, 255, 0.87) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb {
+  background: radial-gradient(circle closest-side, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.5) 25%, rgba(255, 255, 255, 0.87) 25%, rgba(255, 255, 255, 0.87) 37.5%, rgba(255, 255, 255, 0.5) 37.5%, rgba(255, 255, 255, 0.5) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(255, 255, 255, 0.87) 77.78%, rgba(255, 255, 255, 0.87) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {
+  background-color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb {
+  border-color: rgba(255, 255, 255, 0.87);
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,
+.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb {
+  background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(255, 255, 255, 0.87) 50%, rgba(255, 255, 255, 0.87) 100%);
+}
+
+.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower {
+  background: linear-gradient(to right, transparent, transparent 25px, rgba(255, 255, 255, 0.87) 25px, rgba(255, 255, 255, 0.87) 0);
+}
+
+.mdlext-dark-color-theme .mdl-slider__background-flex {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-slider__background-lower {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-slider__background-upper {
+  background: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-textfield__input {
+  border-bottom-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__input {
+  border-color: #FF1744;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdl-textfield.is-disabled .mdl-textfield__input {
+  background-color: transparent;
+  border-bottom-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-textfield__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-textfield__label::after {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__label::after {
+  background-color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdl-textfield__error {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__box-outline {
+  border-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline {
+  border-color: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,
+.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {
+  border-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {
+  box-shadow: 0 0 0 8px rgba(83, 109, 254, 0.26);
+  background-color: rgba(83, 109, 254, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__tick-outline {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,
+.mdlext-dark-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {
+  background-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,
+.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-checkbox__ripple-container .mdl-ripple {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,
+.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-radio__outer-circle {
+  border-color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle {
+  border-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle {
+  border-color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-radio__inner-circle {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle {
+  background: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-radio__ripple-container .mdl-ripple {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,
+.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle__label {
+  color: #616161;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {
+  background-color: rgba(0, 0, 0, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {
+  background-color: rgba(83, 109, 254, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: #616161;
+}
+
+.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-switch__track {
+  background: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__track {
+  background: rgba(83, 109, 254, 0.5);
+}
+
+.mdlext-dark-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__track {
+  background: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdl-switch__thumb {
+  background: #FAFAFA;
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__thumb {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__thumb {
+  background: #FAFAFA;
+}
+
+.mdlext-dark-color-theme .mdl-switch__focus-helper {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper {
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-dark-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {
+  box-shadow: 0 0 0 20px rgba(83, 109, 254, 0.26);
+  background-color: rgba(83, 109, 254, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__label {
+  color: #FAFAFA;
+}
+
+.mdlext-dark-color-theme .mdl-switch__ripple-container .mdl-ripple {
+  background: #536DFE;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,
+.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-data-table {
+  border-color: rgba(255, 255, 255, 0.12);
+  background-color: #303030;
+}
+
+.mdlext-dark-color-theme .mdl-data-table tbody tr.is-selected {
+  background-color: #424242;
+}
+
+.mdlext-dark-color-theme .mdl-data-table tbody tr:hover {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdl-data-table th {
+  color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending {
+  color: rgba(255, 255, 255, 0.87);
+}
+
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover::before,
+.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover::before {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdl-menu__outline {
+  background: #000000;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item {
+  color: rgba(255, 255, 255, 0.87);
+  background-color: transparent;
+  outline-color: #616161;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item--full-bleed-divider {
+  border-bottom-color: rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled],
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled] {
+  color: #9E9E9E;
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled]:hover,
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:hover {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled]:focus,
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:focus {
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item[disabled] .mdl-ripple,
+.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple {
+  background: transparent;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item:hover {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item:focus {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdl-menu__item:active {
+  background-color: #424242;
+}
+
+.mdlext-dark-color-theme .mdl-card {
+  background: #303030;
+}
+
+.mdlext-dark-color-theme .mdl-card__media {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdl-card__title {
+  color: white;
+}
+
+.mdlext-dark-color-theme .mdl-card__title.mdl-card--border {
+  border-bottom-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-dark-color-theme .mdl-card__title-text {
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdl-card__subtitle-text {
+  color: rgba(0, 0, 0, 0.7);
+}
+
+.mdlext-dark-color-theme .mdl-card__supporting-text {
+  color: rgba(255, 255, 255, 0.7);
+}
+
+.mdlext-dark-color-theme .mdl-card__actions {
+  background-color: rgba(255, 255, 255, 0);
+}
+
+.mdlext-dark-color-theme .mdl-card__actions.mdl-card--border {
+  border-top-color: rgba(0, 0, 0, 0.1);
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield.is-disabled::after {
+  color: rgba(255, 255, 255, 0.12);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(255, 255, 255, 0.12);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(255, 255, 255, 0.12);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__select {
+  border-bottom-color: rgba(255, 255, 255, 0.26);
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__select option {
+  background-color: #303030;
+  color: white;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  border-color: #FF1744;
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+.mdlext-dark-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+  background-color: transparent;
+  border-bottom-color: rgba(255, 255, 255, 0.12);
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__label::after {
+  background-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+  background-color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdlext-selectfield__error {
+  color: #FF1744;
+}
+
+.mdlext-menu.mdlext-dark-color-theme {
+  background: #000000;
+}
+
+.mdlext-dark-color-theme .mdlext-menu {
+  background: #000000;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item {
+  color: rgba(255, 255, 255, 0.87);
+  background-color: #000000;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item:active,
+.mdlext-dark-color-theme .mdlext-menu__item[aria-selected='true'] {
+  background-color: #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item:hover:not([disabled]) {
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item:focus {
+  outline-color: #616161;
+  background-color: #212121;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item[disabled] {
+  color: #9E9E9E;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item[disabled] > * {
+  color: #9E9E9E;
+}
+
+.mdlext-dark-color-theme .mdlext-menu__item-separator {
+  border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select {
+  background-color: rgba(48, 48, 48, 0.1);
+  border-color: rgba(255, 255, 255, 0.26);
+  color: inherit;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled {
+  color: rgba(255, 255, 255, 0.26);
+  background-color: rgba(48, 48, 48, 0.1);
+  border-color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus {
+  background-color: rgba(23, 23, 23, 0.1);
+  border-color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+  color: inherit;
+  border-color: #FF1744;
+  background-color: rgba(255, 23, 68, 0.1);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus {
+  border-color: #e3002c;
+  background-color: rgba(255, 23, 68, 0.1);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield::after,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled::after {
+  color: rgba(255, 255, 255, 0.26);
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: inherit;
+  line-height: inherit;
+  border-top: 0.5em solid rgba(255, 255, 255, 0.26);
+  border-top-width: 0.5em;
+  border-top-style: solid;
+  border-top-color: rgba(255, 255, 255, 0.26);
+  border-left: 0.35em solid transparent;
+  border-right: 0.35em solid transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+  color: rgba(255, 255, 255, 0.26);
+  background-color: rgba(48, 48, 48, 0.1);
+  border-color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+  color: #536DFE;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label {
+  color: #FF1744;
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+  color: rgba(255, 255, 255, 0.26);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,
+.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button {
+  color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i,
+.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button {
+  color: rgba(255, 255, 255, 0.12);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab {
+  color: white;
+  background-color: black;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab:focus {
+  outline-color: #a8a8a8;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[aria-expanded='true'] {
+  background-color: rgba(0, 0, 0, 0.9);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[aria-selected='true'] {
+  background-color: rgba(0, 0, 0, 0.6);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[disabled] {
+  background-color: rgba(0, 0, 0, 0.4);
+  color: rgba(255, 255, 255, 0.5);
+  pointer-events: none;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab[disabled] > * {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab:hover:not([disabled]) {
+  background-color: rgba(0, 0, 0, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tab--ripple[aria-selected='true']::before {
+  background: rgba(0, 0, 0, 0.3);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__tabpanel {
+  color: inherit;
+  background-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab {
+  border-top: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: #a8a8a8;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel {
+  border-top: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab {
+  border-left: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected='true']::after {
+  background-color: #a8a8a8;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel {
+  border-left: 1px solid #424242;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion__panel:first-child > .mdlext-dark-color-theme .mdlext-accordion__tab {
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+
+.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab {
+  background-color: rgba(0, 0, 0, 0.4);
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab > * {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel {
+  opacity: 0.8;
+  filter: blur(1px) grayscale(80%);
+}
+
+
+/*# sourceMappingURL=mdl-ext.css.map*/
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.css.map b/node_modules/mdl-ext/lib/mdl-ext.css.map
new file mode 100644
index 0000000..f91a309
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack:///~/material-design-lite/src/_variables.scss?0a5c","webpack:///webpack:///src/mdl-ext-build.scss","webpack:///webpack:///~/material-design-lite/src/_color-definitions.scss?1036","webpack:///webpack:///~/material-design-lite/src/_functions.scss?fd08","webpack:///webpack:///~/material-design-lite/src/_mixins.scss?572c","webpack:///webpack:///src/_variables.scss?5326","webpack:///webpack:///src/_functions.scss?19fe","webpack:///webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss?d01f","webpack:///webpack:///src/_mixins.scss?c723","webpack:///webpack:///src/sticky-header/_sticky-header.scss?721e","webpack:///webpack:///src/dialog/dialog.scss?6dd1","webpack:///webpack:///src/grid/_grid-media-queries.scss","webpack:///webpack:///src/lightboard/_lightboard.scss?79ea","webpack:///webpack:///src/lightboard/_lightboard-media-queries.scss","webpack:///webpack:///src/lightbox/_lightbox.scss?bce5","webpack:///webpack:///src/carousel/_carousel.scss?ab9b","webpack:///webpack:///src/selectfield/_selectfield.scss?910a","webpack:///webpack:///src/menu-button/_menu-button.scss?610a","webpack:///webpack:///src/bordered-fields/_bordered-fields.scss?3072","webpack:///webpack:///src/collapsible/_collapsible.scss?5cb7","webpack:///webpack:///src/accordion/_accordion.scss?b350","webpack:///webpack:///src/color-themes/_color-themes.scss?0fde","webpack:///webpack:///src/color-themes/_light-color-theme.scss?77e1","webpack:///webpack:///src/color-themes/_dark-color-theme.scss?a990"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GCcG;;ADEH;wCCCwC;;ADExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCgCG;;ADGH;;AAEA;;;;;;;;;ECQE;;ADKF;;AAEA;;;;;GCEG;;ACzEH;;;;;;;;;;;;;;GDyFG;;ACzEH;;AAikBA;;ACjlBA;;;;;;;;;;;;;;GF6GG;;AD5BH;;AAGA;;AA8BA;;AAgBA;;AAEA;;AAkCA;;AAQA;;AAMA;;AAIA;;AAqBA;;AAOA;;AAQA;;AAYA;;AASA;;AAUA;;AASA;;AAOA;;AAMA;;AAOA;;AAaA;;AAIA;;AAKA;;AASA;;AAYA;;AAYA;;AAgBA;;AAWA;;AAKA;;AAeA;;AA6BA;;AAMA;;AAEA;;AAOA;;AAMA;;AAWA;;AAEA;;AA0BA;;AAKA;;AACA;;;;GC9RG;;ADiTH;;AAQA;;AAGA;;AAUA;;AAMA;;AAqBA;;AA6BA;;AAGA;;AAOA;;AAIA;;AI3kBA;;;;;;;;;;;;;;GHmOG;;AGnNH;;AA+MA;;AA6CA;;AAsBA;;AClSA;;;;;;;;;;;;;;GJ2PG;;AKtLH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AC3JA;;AAqCA;;AArCA;;AAqCA;;ACxGA;;;;;;;;;;;;;;;;;;GN6SG;;AK1OH;;AAqCA;;AClFA;ECiDE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EAGA;EAGA;CPsOD;;AMjTD;EC8EI;EACA;CPuOH;;AAvFC;EO3II;EACA;CPsOL;;AMvTD;EC6CE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EAGA;EAGA;CPsQD;;AM7UD;EC0EI;EACA;CPuQH;;AA5FC;EOtKI;EACA;CPsQL;;AQnXD;;;;;;;;;;;;;;GRmYG;;AInYH;;;;;;;;;;;;;;GJmZG;;AK9UH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AI3MA;EACE;EACA;EACA;EACA;CRyZD;;AQ7ZD;EAOI;CR0ZH;;AQtZD;EAEI;CRwZH;;AQtZC;EACE;CRyZH;;AQrZD;;EAEE;EAAA;CRwZD;;AQ1ZD;;EAKI;CR0ZH;;AQ/ZD;;EAQI;CR4ZH;;AS7cD;;;;;;;;;;;;;;;;;;GTieG;;AIjeH;;;;;;;;;;;;;;GJifG;;AK5aH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AK1MA;EACE;EACA;EACA;EACA;EACA;CTsfD;;AS3fD;EAQI;CTufH;;AS/fD;EAWI;CTwfH;;ASngBD;EAWI;CTwfH;;AStfW;EACR;CTyfH;;ASrfD;EACE;IAAK;GTyfJ;CACF;;ASxfD;EACE;IAAK;GT4fJ;CACF;;AUviBD;;;;;;;;;;;;;;;;;GV0jBG;;AU9hBH;EACE;EAAA;EACA;MAAA;EACA;EACA;MAAA;CViiBD;;AU/hBC;EACE;CVkiBH;;AU9hBD;EACE;CViiBD;;AU7hBD;EACE;MAAA;CVgiBD;;AU7hBD;EACE;MAAA;MAAA;CVgiBD;;AU7hBD;EACE;MAAA;CVgiBD;;AU7hBD;EACE;MAAA;MAAA;CVgiBD;;AU7hBD;EACE;CVgiBD;;AU3hBC;EACE;MAAA;CV8hBH;;AU/hBC;EACE;MAAA;CVkiBH;;AUniBC;EACE;MAAA;CVsiBH;;AUviBC;EACE;MAAA;CV0iBH;;AU3iBC;EACE;MAAA;CV8iBH;;AU/iBC;EACE;MAAA;CVkjBH;;AUnjBC;EACE;MAAA;CVsjBH;;AUvjBC;EACE;MAAA;CV0jBH;;AU3jBC;EACE;MAAA;CV8jBH;;AU/jBC;EACE;MAAA;CVkkBH;;AUnkBC;EACE;MAAA;CVskBH;;AUvkBC;EACE;MAAA;CV0kBH;;AU5iBD;;AACA;EACA;;EACE;IACE;GVijBD;;EU9iBD;IACE;IA/BF;GVilBC;;EU/kBD;IACE;GVklBD;;EUljBD;IACE;GVqjBD;;EUhjBC;IACE;QAAA;GVmjBH;;EUpjBC;IACE;QAAA;GVujBH;;EUxjBC;IACE;QAAA;GV2jBH;;EU5jBC;IACE;QAAA;GV+jBH;;EUhkBC;IACE;QAAA;GVmkBH;;EUpkBC;IACE;QAAA;GVukBH;;EUxkBC;IACE;QAAA;GV2kBH;;EU5kBC;IACE;QAAA;GV+kBH;;EUhlBC;IACE;QAAA;GVmlBH;;EUplBC;IACE;QAAA;GVulBH;;EUxlBC;IACE;QAAA;GV2lBH;;EU5lBC;IACE;QAAA;GV+lBH;;EUzlBC;;IAhDF;GV8oBC;;EU5oB0B;;;IACzB;GVipBD;;EUpmBC;;IAhDF;GVypBC;;EUvpBD;;;IACE;GV4pBD;;EU/mBC;;IAhDF;GVoqBC;;EUlqB0B;;;IACzB;GVuqBD;;EUlnBC;;IAxDF;GV+qBC;;EU7qBD;;;IACE;GVkrBD;;EU7nBC;;IAxDF;GV0rBC;;EUxrBD;;;IACE;GV6rBD;;EUxoBC;;IAxDF;GVqsBC;;EUnsBD;;;IACE;GVwsBD;;EUnpBC;;IAxDF;GVgtBC;;EU9sBD;;;IACE;GVmtBD;;EU9pBC;;IAxDF;GV2tBC;;EUztBD;;;IACE;GV8tBD;;EUzqBC;;IAxDF;GVsuBC;;EUpuBD;;;IACE;GVyuBD;;EUprBC;;IAxDF;GVivBC;;EU/uBD;;;IACE;GVovBD;;EU/rBC;;IAxDF;GV4vBC;;EU1vBD;;;IACE;GV+vBD;;EU1sBC;;IAxDF;GVuwBC;;EUrwBD;;;IACE;GV0wBD;;EU7sBC;;IApDF;GVswBC;;EUpwBD;;;IACE;GVywBD;;EUxtBC;;IApDF;GVixBC;;EU/wBsC;;;IACrC;GVoxBD;;EUnuBC;;IApDF;GV4xBC;;EU1xBD;;;IACE;GV+xBD;CACF;;AUruBD;;AACA;EAA4F;;EAC1F;IACE;GV2uBD;;EUxuBD;IACE;IAjFF;GV6zBC;;EU3zB0B;IACzB;GV8zBD;;EU5uBD;IACE;GV+uBD;;EU1uBC;IACE;QAAA;GV6uBH;;EU9uBC;IACE;QAAA;GVivBH;;EUlvBC;IACE;QAAA;GVqvBH;;EUtvBC;IACE;QAAA;GVyvBH;;EU1vBC;IACE;QAAA;GV6vBH;;EU9vBC;IACE;QAAA;GViwBH;;EUlwBC;IACE;QAAA;GVqwBH;;EUtwBC;IACE;QAAA;GVywBH;;EU1wBC;IACE;QAAA;GV6wBH;;EU9wBC;IACE;QAAA;GVixBH;;EUlxBC;IACE;QAAA;GVqxBH;;EUtxBC;IACE;QAAA;GVyxBH;;EUnxBC;;IAlGF;GV03BC;;EUx3B0B;;;IACzB;GV63BD;;EU9xBC;;IAlGF;GVq4BC;;EUn4BD;;;IACE;GVw4BD;;EUzyBC;;IAlGF;GVg5BC;;EU94B0B;;;IACzB;GVm5BD;;EUpzBC;;IAlGF;GV25BC;;EUz5BD;;;IACE;GV85BD;;EU/zBC;;IAlGF;GVs6BC;;EUp6B0B;;;IACzB;GVy6BD;;EU10BC;;IAlGF;GVi7BC;;EU/6B0B;;;IACzB;GVo7BD;;EUr1BC;;IAlGF;GV47BC;;EU17B0B;;;IACzB;GV+7BD;;EUx1BC;;IA1GF;GVu8BC;;EUr8B0B;;;IACzB;GV08BD;;EUn2BC;;IA1GF;GVk9BC;;EUh9B0B;;;IACzB;GVq9BD;;EU92BC;;IA1GF;GV69BC;;EU39B0B;;;IACzB;GVg+BD;;EUz3BC;;IA1GF;GVw+BC;;EUt+BD;;;IACE;GV2+BD;;EUp4BC;;IA1GF;GVm/BC;;EUj/B0B;;;IACzB;GVs/BD;;EUv4BC;;IAtGF;GVk/BC;;EUh/BD;;;IACE;GVq/BD;;EUl5BC;;IAtGF;GV6/BC;;EU3/BD;;;IACE;GVggCD;;EU75BC;;IAtGF;GVwgCC;;EUtgCsC;;;IACrC;GV2gCD;;EUx6BC;;IAtGF;GVmhCC;;EUjhCD;;;IACE;GVshCD;;EUn7BC;;IAtGF;GV8hCC;;EU5hCsC;;;IACrC;GViiCD;;EU97BC;;IAtGF;GVyiCC;;EUviCD;;;IACE;GV4iCD;;EUz8BC;;IAtGF;GVojCC;;EUljCD;;;IACE;GVujCD;CACF;;AU38BD;EACE;IACE;GV88BD;;EU38BD;IACE;IAlIF;GVilCC;;EU/kCD;IACE;GVklCD;;EU/8BD;IACE;GVk9BD;;EU78BC;IACE;QAAA;GVg9BH;;EUj9BC;IACE;QAAA;GVo9BH;;EUr9BC;IACE;QAAA;GVw9BH;;EUz9BC;IACE;QAAA;GV49BH;;EU79BC;IACE;QAAA;GVg+BH;;EUj+BC;IACE;QAAA;GVo+BH;;EUr+BC;IACE;QAAA;GVw+BH;;EUz+BC;IACE;QAAA;GV4+BH;;EU7+BC;IACE;QAAA;GVg/BH;;EUj/BC;IACE;QAAA;GVo/BH;;EUr/BC;IACE;QAAA;GVw/BH;;EUz/BC;IACE;QAAA;GV4/BH;;EUt/BC;;IAnJF;GV8oCC;;EU5oCD;;;IACE;GVipCD;;EUjgCC;;IAnJF;GVypCC;;EUvpCD;;;IACE;GV4pCD;;EU5gCC;;IAnJF;GVoqCC;;EUlqC0B;;;IACzB;GVuqCD;;EUvhCC;;IAnJF;GV+qCC;;EU7qCD;;;IACE;GVkrCD;;EUliCC;;IAnJF;GV0rCC;;EUxrC0B;;;IACzB;GV6rCD;;EU7iCC;;IAnJF;GVqsCC;;EUnsCD;;;IACE;GVwsCD;;EUxjCC;;IAnJF;GVgtCC;;EU9sC0B;;;IACzB;GVmtCD;;EUnkCC;;IAnJF;GV2tCC;;EUztC0B;;;IACzB;GV8tCD;;EU9kCC;;IAnJF;GVsuCC;;EUpuC0B;;;IACzB;GVyuCD;;EUzlCC;;IAnJF;GVivCC;;EU/uC0B;;;IACzB;GVovCD;;EUpmCC;;IAnJF;GV4vCC;;EU1vC0B;;;IACzB;GV+vCD;;EU/mCC;;IAnJF;GVuwCC;;EUrwC0B;;;IACzB;GV0wCD;;EUlnCC;;IA/IF;GVswCC;;EUpwCsC;;;IACrC;GVywCD;;EU7nCC;;IA/IF;GVixCC;;EU/wCD;;;IACE;GVoxCD;;EUxoCC;;IA/IF;GV4xCC;;EU1xCsC;;;IACrC;GV+xCD;;EUnpCC;;IA/IF;GVuyCC;;EUryCD;;;IACE;GV0yCD;;EU9pCC;;IA/IF;GVkzCC;;EUhzCsC;;;IACrC;GVqzCD;;EUzqCC;;IA/IF;GV6zCC;;EU3zCsC;;;IACrC;GVg0CD;;EUprCC;;IA/IF;GVw0CC;;EUt0CD;;;IACE;GV20CD;;EU/rCC;;IA/IF;GVm1CC;;EUj1CsC;;;IACrC;GVs1CD;;EU1sCC;;IA/IF;GV81CC;;EU51CD;;;IACE;GVi2CD;;EUrtCC;;IA/IF;GVy2CC;;EUv2CD;;;IACE;GV42CD;;EUhuCC;;IA/IF;GVo3CC;;EUl3CD;;;IACE;GVu3CD;CACF;;AWj9CD;;;;;;;;;;;;;;GXi+CG;;AWj9CH;;;;;GXw9CG;;AI1+CH;;;;;;;;;;;;;;GJ0/CG;;AKr7CH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AOlMA;EACE;CXu/CD;;AWp/CD;EACE;EACA;EACA;EACA;EAAA;EACA;MAAA;EACA;MAAA;CXu/CD;;AWr/CC;;;;EAIE;CXw/CH;;AWpgDD;EAgBI;EACA;EACA;EACA;EACA;EACA;EACA;CXw/CH;;AW9gDD;EA2BM;EACA;EACA;CXu/CL;;AWphDD;;;EAkCM;EACA;EACA;CXw/CL;;AW5hDD;;;EAuCQ;EACA;CX2/CP;;AWniDD;EA4CM;EACA;CX2/CL;;AWxiDD;EAgDM;CX4/CL;;AW1/CK;EACE;EACA;CX6/CP;;AWliDC;;EA0CI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CX6/CL;;AW7jDD;;EAmEQ;EACA;CX+/CP;;AWnkDD;;EAuEQ;CXigDP;;AWxkDD;;EA0EQ;EACA;EACA;EACA;EACA;EACA;CXmgDP;;AWllDD;;EAkFU;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CXqgDT;;AWngDO;;ER3GJ;EAgIF;EACA;EACA;EACA;EQrBQ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CX0gDT;;AWtgDO;;EAIE;EACA;CXugDT;;AW//CD;EACE;CXkgDD;;AWngDD;EAII;EACA;CXmgDH;;AWxgDD;EAQM;CXogDL;;AWjgDC;EACE;CXogDH;;AWhhDD;EAeM;EACA;CXqgDL;;AIjrDD;;;;;;;;;;;;;;GJisDG;;AK5nDH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;AQjNA;;AACA;EAA2H;;EACzH;IACE;GZgtDD;;EY9sDC;IACE;IACA;GZitDH;;EY/sDoC;IAC/B;GZktDL;;EY/sDC;IACE;GZktDH;;EY9tDD;IAeM;IACA;GZmtDL;CACF;;AY7sDD;;AACA;EAA2H;;EACzH;IACE;GZmtDD;;EYjtDC;IACE;IACA;GZotDH;;EYltDoC;IAC/B;GZqtDL;;EYltDC;IACE;GZqtDH;;EYjuDD;IAeM;IACA;GZstDL;CACF;;AYhtDD;;AACA;EAA2H;;EACzH;IACE;GZstDD;;EYvtDD;IAII;IACA;GZutDH;;EY5tDD;IAQM;GZwtDL;;EYhuDD;IAYI;GZwtDH;;EYttDG;IACE;IACA;GZytDL;CACF;;AYntDD;EACE;IACE;GZstDD;;EYvtDD;IAII;IACA;GZutDH;;EY5tDD;IAQM;GZwtDL;;EYhuDD;IAYI;GZwtDH;;EYpuDD;IAeM;IACA;GZytDL;CACF;;Aan0DD;;;;;;;;;;;;;;Gbm1DG;;AIr1DH;;;;;;;;;;;;;;GJq2DG;;AKhyDH;;AAqCA;;AD/CA;;AAUA;;AAWA;;AAEA;;AAoBA;;AAQA;;AAUA;;AA8CA;;AAQA;;AAkDA;;ASzMA;EACE;KAAA;MAAA;UAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Cby2DD;;Aar3DD;;;;EAkBI;Cb02DH;;Aav2DC;EAGE;EACA;EACA;EACA;EAAA;EACA;MAAA;Cbw2DH;;Aat2DG;EACE;MAAA;EACA;EACA;EACA;EACA;EACA;EACA;Cby2DL;;Aah2DC;EACE;EACA;EACA;Cbm2DH;;Aap5DD;EAoDM;EACA;EACA;EACA;EACA;Cbo2DL;;Aa55DD;EVHI;EAgIF;EACA;EACA;EACA;EUnEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Cbw2DL;;Aax3DG;EAmBI;Cby2DP;;Aat7DD;EAiFU;Cby2DT;;Aa17DD;;EAqFU;Cb02DT;;Aa/7DD;EA2FI;EACA;Cbw2DH;;Aap8DD;EA+FI;EAAA;EACA;MAAA;EACA;MAAA;EACA;Cby2DH;;Aav2DG;EACE;MAAA;EACA;EACA;EACA;EACA;Cb02DL;;Aan9DD;EA4GM;EAAA;Cb22DL;;Aav2DkC;EAC/B;EACA;EACA;Cb02DH;;Acl/DD;;;;;;;;;;;;;;GdkgEG;;Acl/DH;;Gds/DG;;Ac9+DH;EACE;Cdi/DD;;Ac9+DD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Cdi/DD;;Ac9+DD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Cdi/DD;;Ac5+DG;;EAIE;EACA;Cd6+DL;;Ac//DD;;EAwBI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Cd4+DH;;Ac7gED;EAsCI;Cd2+DH;;Acx+DC;EACE;EACA;EACA;EACA;EACA;Cd2+DH;;Acz+DG;EACE;EACA;Cd4+DL;;Acz+DG;EACE;EX7EF;EAgIF;EACA;EACA;EACA;EWnDI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Cd++DL;;AcljED;EA0EQ;EACA;Cd4+DP;;Acv+DC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Cd0+DH;;AcnkED;EA4FM;Cd2+DL;;AelnED;;;;;;;;;;;;;;GfkoEG;;AelnEH;;;;;;;;Gf4nEG;;AKvkEH;;AAqCA;;AUzEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CfknED;;Ae1nED;EAYI;EACA;CfknEH;;Ae9mEC;ERzCA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;EQ8BA;EACA;EACA;EACA;EACA;Cf0nEH;;AetnED;EAEI;ERtDF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CP2qEH;;Ae7nED;EACE;CfgoED;;Ae5nED;EACE;Cf+nED;;Ae3nED;EACE;EACA;EACA;Cf8nED;;Ae1nED;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CfynED;;AetnEC;EACE;EACA;CfynEH;;AernEC;EACE;EACA;CfwnEH;;Ae5pED;EAwCI;CfwnEH;;AernEC;EACE;CfwnEH;;AernEgC;EAC7B;EACA;CfwnEH;;AernEC;;EAEE;EACA;EACA;CfwnEH;;AehrED;EA4DI;EACA;EACA;CfwnEH;;AennED;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CfsnED;;AepnE8B;;EAE3B;CfunEH;;AennEqC;EZ+GpC;EACA;CHwgED;;AepnEqD;EAClD;CfunEH;;AepnEwC;;EAErC;CfunEH;;AepnEgD;;;EAG7C;EACA;EACA;EACA;CfunEH;;AepnEC;;;EAGE;CfunEH;;AepnEgD;EAC7C;EACA;CfunEH;;Ae3qED;EAyDI;EACA;EACA;EACA;EACA;EACA;EZuEF;EACA;EYrEE;EACA;CfsnEH;;AennEC;EACE;EACA;EACA;CfsnEH;;AennEgC;EAC7B;CfsnEH;;AejnED;EACE;EACA;EACA;EACA;EACA;EACA;CfonED;;AelnEC;EACE;CfqnEH;;AehnED;EACE;EACA;EACA;EZmCA;EACA;EY5BA;Cf8mED;;Ae5mEgC;;EAM7B;Cf2mEH;;AezmEC;EACE;Cf4mEH;;AgBx3ED;;;;;;;;;;;;;;;;;;GhB44EG;;AgBx3EH;;;;;;;;;EhBm4EE;;AgBx3EF;EACE;EbdE;EAqKF;EACA;EACA;EACA;EaxJA;EACA;EACA;EACA;EACA;EAAA;EACA;MAAA;EACA;MAAA;ChB+3ED;;AgB73EG;EACA;EACA;ChBg4EH;;AgB73EG;EACA;ChBg4EH;;AgBj5ED;EAqBI;ChBg4EH;;AgB33ED;EACE;EACA;EACA;EACA;ChB83ED;;AgB33ED;;EAEE;EACA;EACA;EACA;EACA;EAAA;ChB83ED;;AgB33ED;EACE;EACA;EACA;EACA;EACA;Eb4JA;Ea1JA;EAAA;EACA;MAAA;EACA;EACA;EACA;ChB83ED;;AgBz4ED;EAcI;EACA;ChB+3EH;;AgB94ED;ETxCE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ESqDE;ChBs4EH;;AgBn4EC;EbsCA;EACA;EACA;EACA;EavCE;EACA;EACA;EACA;EACA;MAAA;EACA;MAAA;MAAA;EACA;EACA;EACA;EACA;KAAA;MAAA;UAAA;EACA;EACA;ChBy4EH;;AgBv4EG;EACE;ChB04EL;;AgBt4EG;EACE;EACA;EACA;EACA;EACA;EACA;EACA;ChBy4EL;;AgBt4EG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D;;;;;;;;;;EnBi+FE;;AmBr9FF;EACE;IAAK;GnBy9FJ;;EmBx9FD;IAAM;GnB49FL;;EmB39FD;IAAM;GnB+9FL;;EmB99FD;IAAO;GnBk+FN;CACF;;AmBh+FD;EACE;IAAK;GnBo+FJ;;EmBn+FD;IAAM;GnBu+FL;;EmBt+FD;IAAM;GnB0+FL;;EmBz+FD;IAAO;GnB6+FN;CACF;;AmB3+FD;;;;;;;;;;EnBu/FE;;AmB3+FF;EACE;IAAK;GnB++FJ;;EmB9+FD;IAAM;GnBk/FL;;EmBj/FD;IAAM;GnBq/FL;;EmBp/FD;IAAO;GnBw/FN;CACF;;AmBt/FD;EACE;IAAK;GnB0/FJ;;EmBz/FD;IAAM;GnB6/FL;;EmB5/FD;IAAM;GnBggGL;;EmB//FD;IAAO;GnBmgGN;CACF;;AoB74GD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EpBu8GE;;AqBr8GF;EACE;EACA;CrBw8GD;;AqB18GD;EAKI;CrBy8GH;;AqBj8GC;EACE;CrBo8GH;;AqBj8GC;EACE;CrBo8GH;;AqB38GD;EAWI;CrBo8GH;;AqBj8GC;EACE;CrBo8GH;;AqBj8GC;EACE;CrBo8GH;;AqBv9GD;EAuBI;CrBo8GH;;AqB39GD;EA2BI;CrBo8GH;;AqB/9GD;EA+BI;CrBo8GH;;AqBj8GC;EACE;CrBo8GH;;AqBv+GD;EAuCI;CrBo8GH;;AqB77GD;EAEI;CrB+7GH;;AqBv7GC;EAGI;EACA;CrBw7GL;;AqB77GD;EAUQ;EACA;CrBu7GP;;AqB96GD;EAGI;EACA;CrB+6GH;;AqBj7GC;EAKI;CrBg7GL;;AqBv7GD;EAWM;CrBg7GL;;AqB37GD;EAeM;CrBg7GL;;AqB/7GD;EAmBM;CrBg7GL;;AqBj8GC;EAoBM;CrBi7GP;;AqBv8GD;EA6BI;CrB86GH;;AqB38GD;EAgCM;CrB+6GL;;AqBn7GC;EAQI;CrB+6GL;;AqBv7GC;EAYI;EACA;CrB+6GL;;AqB57GC;EAgBM;CrBg7GP;;AqBh8GC;EAoBM;CrBg7GP;;AqBh+GD;EAoDQ;CrBg7GP;;AqBp+GD;EAwDQ;CrBg7GP;;AqBx+GD;EAgEI;CrB46GH;;AqB5+GD;EAmEM;CrB66GL;;AqBj7GC;EAQI;CrB66GL;;AqBp/GD;EA2EM;EACA;CrB66GL;;AqBz/GD;EA+EQ;CrB86GP;;AqB7/GD;EAmFQ;CrB86GP;;AqBjgHD;EAuFQ;CrB86GP;;AqBrgHD;EA2FQ;CrB86GP;;AqBzgHD;EAmGI;CrB06GH;;AqBr6GC;EACE;CrBw6GH;;AqBjhHD;EA4GM;CrBy6GL;;AqBrhHD;;EAgHM;EACA;CrB06GL;;AqBt6GC;EACE;CrBy6GH;;AqBv6GK;EACA;CrB06GL;;AqB96GC;;EAQI;EACA;CrB26GL;;AqBziHD;;EAwIM;EACA;CrBs6GL;;AqB/iHD;;EAgJQ;EACA;CrBo6GP;;AqBrjHD;;EAyJQ;EACA;CrBi6GP;;AqBv7GC;;EA6BM;CrB+5GP;;AqBv5GD;EAIM;EACA;EAeA;EAgBA;EAGA;EA6BA;EAQA;EAOA;EA8BA;EA0BA;EAMA;EAsCA;EAkBA;CrB8tGL;;AqBv6GD;EAQQ;CrBm6GP;;AqB36GD;EAYQ;CrBm6GP;;AqB/6GD;EAgBQ;EACA;CrBm6GP;;AqBp7GD;EAsBQ;CrBk6GP;;AqBx7GD;EA8BQ;CrB85GP;;AqB57GD;EAyCQ;CrBu5GP;;AqBh8GD;EA6CQ;CrBu5GP;;AqBp8GD;EAiDQ;CrBu5GP;;AqBx8GD;EAqDQ;CrBu5GP;;AqB58GD;EAyDQ;CrBu5GP;;AqB/8GC;EA4DM;CrBu5GP;;AqBp9GD;EAiEQ;CrBu5GP;;AqBx9GD;EAsEQ;CrBs5GP;;AqB59GD;EA+EQ;CrBi5GP;;AqBh+GD;EAsFQ;EACA;CrB84GP;;AqBp+GC;EA0FM;EACA;CrB84GP;;AqB1+GD;EAgGQ;EACA;CrB84GP;;AqB/+GD;EAqGQ;EACA;CrB84GP;;AqBp/GD;EA0GQ;CrB84GP;;AqBx/GD;EA8GQ;CrB84GP;;AqB3/GC;EAkHM;CrB64GP;;AqB//GC;EA0HM;CrBy4GP;;AqBpgHD;EAqIQ;CrBm4GP;;AqBxgHD;EA8IQ;CrB83GP;;AqB3gHC;;;EAqJM;CrB43GP;;AqBlhHD;;;EA4JQ;CrB43GP;;AqBxhHD;EAgKQ;CrB43GP;;AqB3hHC;;;EAqKM;EACA;CrB43GP;;AqBliHC;;;EA4KM;EACA;CrB43GP;;AqB1iHD;;;EAoLQ;CrB43GP;;AqBhjHD;;;EA2LQ;CrB23GP;;AqBrjHC;EAkMM;CrBu3GP;;AqB52GC;EACE;CrB+2GH;;AqB9jHD;EAmNI;CrB+2GH;;AqB32GC;EACE;CrB82GH;;AqBv2GD;EAGI;CrBw2GH;;AqB32GD;EAMI;CrBy2GH;;AqB/2GD;;EAUI;EACA;EACA;CrB02GH;;AqBt3GD;EAeI;CrB22GH;;AqBz2GC;EACE;CrB42GH;;AqB12GmC;;EAEhC;CrB62GH;;AqB32G2C;;;EAGxC;CrB82GH;;AqBz4GD;EA8BI;CrB+2GH;;AqB74GD;EAiCI;CrBg3GH;;AqBj5GD;EAoCI;CrBi3GH;;AqBx2GC;EACE;CrB22GH;;AqB92GD;EAMI;CrB42GH;;AqBl3GD;;EAUI;CrB62GH;;AqB12GC;EACE;CrB62GH;;AqB33GD;EAiBI;EACA;CrB82GH;;AqBh4GD;EAsBI;CrB82GH;;AqBp4GD;EAyBI;CrB+2GH;;AqBx4GD;;EA6BI;CrBg3GH;;AqB74GD;;EAkCI;CrBg3GH;;AqB72GiC;EAC9B;CrBg3GH;;AqBt5GD;;EA0CI;CrBi3GH;;AqBz2GC;EACE;CrB42GH;;AqB92GD;EAKI;CrB62GH;;AqB32G6C;;EAE1C;CrB82GH;;AqB32GC;EACE;CrB82GH;;AqB33GD;;EAiBI;CrB+2GH;;AqBh4GD;;EAsBI;CrB+2GH;;AqBr4GD;EA0BI;CrB+2GH;;AqBz4GD;;EA8BI;CrBg3GH;;AqB12GD;EAEI;CrB42GH;;AqB92GD;EAKI;CrB62GH;;AqB32G8B;EAC3B;CrB82GH;;AqB52G6B;EAC1B;CrB+2GH;;AqB72GwC;EACrC;CrBg3GH;;AqB92GoC;EACjC;CrBi3GH;;AqB/2GiE;EAC9D;CrBk3GH;;AqBz2GC;EACE;CrB42GH;;AqB/2GD;EAMI;CrB62GH;;AqBn3GD;;EAUI;CrB82GH;;AqBx3GD;EAcI;CrB82GH;;AqB52GwB;EACrB;CrB+2GH;;AqBh4GD;;EAqBI;CrBg3GH;;AqBr4GD;EAyBI;CrBg3GH;;AqB92GwB;EACrB;CrBi3GH;;AqB/2GmC;EAChC;EACA;CrBk3GH;;AqB/2GuC;;EAEpC;CrBk3GH;;AqB/2G+B;EAC5B;CrBk3GH;;AqB35GD;;EA6CI;CrBm3GH;;AqB52GD;EAGI;EACA;CrB62GH;;AqBj3GD;EASU;CrB42GT;;AqBr3GD;EAYU;CrB62GT;;AqBz2GG;EACE;CrB42GL;;AqB73GD;;EAqBQ;CrB62GP;;AqBl4GD;;EAyBY;CrB82GX;;AqBj2GC;EACE;CrBo2GH;;AqBv2GD;EAOI;EACA;EACA;CrBo2GH;;AqBv2GC;EAMI;CrBq2GL;;AqB32GC;;EAWI;EACA;CrBq2GL;;AqBj3GC;;EAeM;CrBu2GP;;AqB53GD;;EAyBQ;CrBw2GP;;AqBr2GO;;EACA;CrBy2GP;;AqBh4GC;EA4BI;CrBw2GL;;AqB14GD;EAsCM;CrBw2GL;;AqB94GD;EA0CM;CrBw2GL;;AqB91GC;EACE;CrBi2GH;;AqBp2GD;EAOI;CrBi2GH;;AqB91GC;EACE;CrBi2GH;;AqB52GD;EAcM;CrBk2GL;;AqBh3GD;EAmBI;CrBi2GH;;AqB91GC;EACE;CrBi2GH;;AqBx3GD;EA2BI;CrBi2GH;;AqB91GC;EACE;CrBi2GH;;AqBh4GD;EAkCM;CrBk2GL;;AqB11GD;EAGI;EdzyBF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CPioIH;;AqBz2GD;EAQI;EACA;CrBq2GH;;AqB92GD;EAYM;EACA;CrBs2GL;;AqBn3GD;EAiBI;CrBs2GH;;AqBv3GD;;EAqBI;EACA;EACA;CrBu2GH;;AqBp2GC;EACE;CrBu2GH;;AqBl4GD;;EA+BI;CrBw2GH;;AqBv4GD;;;;EAqCI;CrBy2GH;;AqB94GD;EAwCI;CrB02GH;;AqBl5GD;EA2CI;CrB22GH;;AqBt5GD;EA8CI;CrB42GH;;AqB15GD;EAkDI;CrB42GH;;AqBt2GD;EACE;CrBy2GD;;AqBt2GD;EAGI;CrBu2GH;;AqBx2GC;EAII;EACA;CrBw2GL;;AqB72GC;;EASM;CrBy2GP;;AqBp3GD;EAcQ;CrB02GP;;AqBt3GC;EAeM;EACA;CrB22GP;;AqB33GC;EAmBM;CrB42GP;;AqB12GS;EACA;CrB62GT;;AqBr4GD;EA6BM;CrB42GL;;AqBp2GD;;;;EASQ;EACA;EACA;CrBk2GP;;AqBt2GK;;;;EAOI;EACA;EACA;CrBs2GT;;AqBt3GD;;;;EAmBU;EACA;CrB02GT;;AqB93GD;;;;EA0BU;EACA;EACA;CrB22GT;;AqBv4GD;;;;EA+BY;EACA;CrB+2GX;;AqB/4GD;;EAwCM;Ed/6BJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CPwxIH;;AqB/5GD;;EA8CM;EACA;EACA;CrBs3GL;;AqBt6GD;;;;EAwDQ;CrBq3GP;;AqB52GO;;;;;;;;;;;;;;;;;;;;;;;;EAEE;CrBq4GT;;AqB/3GO;;;;;;;;EAEE;CrBw4GT;;AqBl4GO;;;;;;;;EAEE;CrB24GT;;AqBt4GqC;;EAEhC;CrBy4GL;;AqBn+GD;;;;EAkGQ;CrBw4GP;;AqBn4GK;;;;EAEE;CrBw4GP;;AqB/3GD;EAKM;EACA;CrB83GL;;AqBp4GD;EASQ;CrB+3GP;;AqBt4GC;EAUM;CrBg4GP;;AqB54GD;EAeQ;CrBi4GP;;AqBh5GD;EAkBQ;EACA;EACA;CrBk4GP;;AqBh4GS;EACA;CrBm4GT;;AqBx5GC;EAyBM;CrBm4GP;;AqB55GC;EA6BQ;CrBm4GT;;AqBl6GD;EAqCM;EACA;CrBi4GL;;AqBx3GK;EACE;CrB23GP;;AqB36GD;EAmDU;CrB43GT;;AqBz3GK;EACE;CrB43GP;;AqBl3GK;EACE;CrBq3GP;;AqBv7GD;EAqEU;CrBs3GT;;AqBn3GK;EACE;CrBs3GP;;AqBj3GC;EAII;EACA;CrBi3GL;;AqBp8GD;EA2FM;EACA;CrB62GL;;AqB32GO;EACA;CrB82GP;;AqB78GD;EAmGM;EACA;CrB82GL;;AoBp9ID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EpB8gJE;;AsB5gJF;EACE;EACA;CtB+gJD;;AsB9gJC;EACE;CtBihJH;;AsB5gJD;EAGI;CtB6gJH;;AsB1gJC;EACE;CtB6gJH;;AsB1gJC;EACE;CtB6gJH;;AsBxhJD;EAeI;CtB6gJH;;AsB5hJD;EAmBI;CtB6gJH;;AsBhiJD;EAuBI;CtB6gJH;;AsB1gJC;EACE;CtB6gJH;;AsBxiJD;EA+BI;CtB6gJH;;AsB5iJD;EAmCI;CtB6gJH;;AsB1gJC;EACE;CtB6gJH;;AsBtgJC;EACE;CtBygJH;;AsBlgJD;EAIM;EACA;CtBkgJL;;AsBtgJC;EASM;EACA;CtBigJP;;AsBx/ID;EAGI;EACA;CtBy/IH;;AsB7/ID;EAOM;CtB0/IL;;AsBjgJD;EAWM;CtB0/IL;;AsBngJC;EAaI;CtB0/IL;;AsBzgJD;EAmBM;CtB0/IL;;AsB7gJD;EAsBQ;CtB2/IP;;AsBjhJD;EA6BI;CtBw/IH;;AsBz/IC;EAII;CtBy/IL;;AsBzhJD;EAoCM;CtBy/IL;;AsB7hJD;EAwCM;EACA;CtBy/IL;;AsBliJD;EA4CQ;CtB0/IP;;AsBtiJD;EAgDQ;CtB0/IP;;AsB1iJD;EAoDQ;CtB0/IP;;AsB9iJD;EAwDQ;CtB0/IP;;AsBn/IC;EACE;CtBs/IH;;AsBtjJD;EAmEM;CtBu/IL;;AsB1jJD;EAuEM;CtBu/IL;;AsB//IC;EAYI;EACA;CtBu/IL;;AsBnkJD;EA+EQ;CtBw/IP;;AsBvkJD;EAmFQ;CtBw/IP;;AsB5gJC;EAwBM;CtBw/IP;;AsBr/IO;EACA;CtBw/IP;;AsBj/IC;EACE;CtBo/IH;;AsBvlJD;EAyGI;CtBk/IH;;AsB3lJD;EA4GM;CtBm/IL;;AsBv/IC;;EAQI;EACA;CtBo/IL;;AsBrmJD;EAsHI;CtBm/IH;;AsBzmJD;EAyHM;CtBo/IL;;AsB7mJD;;EA6HM;EACA;CtBq/IL;;AsB/+IC;;EAII;EACA;CtBg/IL;;AsBr/IC;;EAYM;EACA;CtB8+IP;;AsB/nJD;;EAyJQ;EACA;CtB2+IP;;AsBjgJC;;EA6BM;CtBy+IP;;AsB99IC;EAGI;EACA;EAeA;EAmBA;EA8BA;EAQA;EAOA;EA8BA;EA0BA;EAMA;EAsCA;EAkBA;CtBoyIL;;AsB/+ID;EASQ;CtB0+IP;;AsBn/ID;EAaQ;CtB0+IP;;AsBv/ID;EAiBQ;EACA;CtB0+IP;;AsB1/IC;EAqBM;CtBy+IP;;AsB9/IC;EA+BM;CtBm+IP;;AsBpgJD;EA2CQ;CtB69IP;;AsBxgJD;EA+CQ;CtB69IP;;AsB5gJD;EAmDQ;CtB69IP;;AsBhhJD;EAuDQ;CtB69IP;;AsBphJD;EA2DQ;CtB69IP;;AsBxhJD;EA+DQ;CtB69IP;;AsB5hJD;EAmEQ;CtB69IP;;AsBhiJD;EAwEQ;CtB49IP;;AsBpiJD;EAiFQ;CtBu9IP;;AsBxiJD;EAwFQ;EACA;CtBo9IP;;AsB7iJD;EA6FQ;EACA;CtBo9IP;;AsBhjJC;EAgGM;EACA;CtBo9IP;;AsBrjJC;EAqGM;EACA;CtBo9IP;;AsB5jJD;EA4GQ;CtBo9IP;;AsBhkJD;EAgHQ;CtBo9IP;;AsBlkJC;EAmHM;CtBm9IP;;AsBxkJD;EA6HQ;CtB+8IP;;AsB5kJD;EAuIQ;CtBy8IP;;AsBhlJD;EAgJQ;CtBo8IP;;AsBllJC;;;EAsJM;CtBk8IP;;AsB1lJD;;;EA8JQ;CtBk8IP;;AsB/7IiD;EAC1C;CtBk8IP;;AsBpmJD;;;EAwKQ;EACA;CtBk8IP;;AsBzmJC;;;EA6KM;EACA;CtBk8IP;;AsBlnJD;;;EAsLQ;CtBk8IP;;AsBtnJC;;;EA2LM;CtBi8IP;;AsB5nJC;EAmMM;CtB67IP;;AsBloJD;EAiNI;CtBq7IH;;AsBl7IC;EACE;CtBq7IH;;AsB1oJD;EA0NI;CtBo7IH;;AsB36IC;EACE;CtB86IH;;AsBj7ID;EAMI;CtB+6IH;;AsBr7ID;;EAUI;EACA;EACA;CtBg7IH;;AsB96IC;EACE;CtBi7IH;;AsBh8ID;EAkBI;CtBk7IH;;AsBp8ID;;EAsBI;CtBm7IH;;AsBj7I2C;;;EAGxC;CtBo7IH;;AsB/8ID;EA8BI;CtBq7IH;;AsBn9ID;EAiCI;CtBs7IH;;AsBv9ID;EAoCI;CtBu7IH;;AsB96IC;EACE;CtBi7IH;;AsBp7ID;EAMI;CtBk7IH;;AsBx7ID;;EAUI;CtBm7IH;;AsB77ID;EAcI;CtBm7IH;;AsBj8ID;EAiBI;EACA;CtBo7IH;;AsBj7IC;EACE;CtBo7IH;;AsB18ID;EAyBI;CtBq7IH;;AsB98ID;;EA6BI;CtBs7IH;;AsBn9ID;;EAkCI;CtBs7IH;;AsBx9ID;EAsCI;CtBs7IH;;AsBp7IkE;;EAE/D;CtBu7IH;;AsB/6IC;EACE;CtBk7IH;;AsBp7ID;EAKI;CtBm7IH;;AsBx7ID;;EASI;CtBo7IH;;AsB77ID;EAaI;CtBo7IH;;AsBl7I+B;;EAE5B;CtBq7IH;;AsBt8ID;;EAsBI;CtBq7IH;;AsBl7I8B;EAC3B;CtBq7IH;;AsBn7I4D;;EAEzD;CtBs7IH;;AsBh7ID;EAEI;CtBk7IH;;AsBp7ID;EAKI;CtBm7IH;;AsBx7ID;EAQI;CtBo7IH;;AsB57ID;EAWI;CtBq7IH;;AsBh8ID;EAcI;CtBs7IH;;AsBp7IoC;EACjC;CtBu7IH;;AsBr7IiE;EAC9D;CtBw7IH;;AsB/6IC;EACE;CtBk7IH;;AsBr7ID;EAMI;CtBm7IH;;AsBz7ID;;EAUI;CtBo7IH;;AsB97ID;EAcI;CtBo7IH;;AsBl7IwB;EACrB;CtBq7IH;;AsBn7IuC;;EAEpC;CtBs7IH;;AsBn7IC;EACE;CtBs7IH;;AsB/8ID;EA4BI;CtBu7IH;;AsBr7ImC;EAChC;EACA;CtBw7IH;;AsBx9ID;;EAqCI;CtBw7IH;;AsB79ID;EAyCI;CtBw7IH;;AsBj+ID;;EA6CI;CtBy7IH;;AsB/6IC;EACE;EACA;CtBk7IH;;AsB/6IK;EAEI;CtBi7IT;;AsBn7IK;EAMI;CtBi7IT;;AsB56IG;EACE;CtB+6IL;;AsBl8ID;;EAuBQ;CtBg7IP;;AsBr7IG;;EASQ;CtBi7IX;;AsBv6ID;EAGI;CtBw6IH;;AsB36ID;EAOI;EACA;EACA;CtBw6IH;;AsB36IC;EAMI;CtBy6IL;;AsBr7ID;;EAiBM;EACA;CtBy6IL;;AsB37ID;;EAqBQ;CtB26IP;;AsBh8ID;;EAyBQ;CtB46IP;;AsBr8ID;;EA6BQ;CtB66IP;;AsB18ID;EAkCM;CtB46IL;;AsB98ID;EAsCM;CtB46IL;;AsBl9ID;EA0CM;CtB46IL;;AsBr6ID;EAEI;CtBu6IH;;AsBp6IC;EACE;CtBu6IH;;AsB76ID;EAUI;CtBu6IH;;AsBx6IC;EAII;CtBw6IL;;AsBp6IC;EACE;CtBu6IH;;AsBp6IC;EACE;CtBu6IH;;AsB77ID;EA0BI;CtBu6IH;;AsBj8ID;EA8BI;CtBu6IH;;AsBx6IC;EAII;CtBw6IL;;AsBh6ID;EAGI;EfzyBF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CPusKH;;AsBx6IC;EACE;EACA;CtB26IH;;AsBz6IG;EACE;EACA;CtB46IL;;AsBz6IgC;EAC7B;CtB46IH;;AsB77ID;;EAqBI;EACA;EACA;CtB66IH;;AsBp8ID;EA2BI;CtB66IH;;AsB36IwC;;EAErC;CtB86IH;;AsB78ID;;;;EAqCI;CtB+6IH;;AsB76IgD;EAC7C;CtBg7IH;;AsB96IC;EACE;CtBi7IH;;AsB59ID;EA8CI;CtBk7IH;;AsBh+ID;EAkDI;CtBk7IH;;AsB36ID;EACE;CtB86ID;;AsB36ID;EAGI;CtB46IH;;AsB/6ID;EAMM;EACA;CtB66IL;;AsBp7ID;;EAWQ;CtB86IP;;AsBz7ID;EAcQ;CtB+6IP;;AsB77ID;EAiBQ;EACA;CtBg7IP;;AsBl8ID;EAqBQ;CtBi7IP;;AsBt8ID;EAwBU;CtBk7IT;;AsB18ID;EA6BM;CtBi7IL;;AsBz6ID;;;;EASQ;EACA;EACA;CtBu6IP;;AsBl7ID;;;;EAcU;EACA;EACA;CtB26IT;;AsB37ID;;;;EAmBU;EACA;CtB+6IT;;AsBn8ID;;;;EA0BU;EACA;EACA;CtBg7IT;;AsB58ID;;;;EA+BY;EACA;CtBo7IX;;AsBp9ID;;EAwCM;Efh7BJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKE;EACA;CP81KH;;AsBx7IqC;;EAEhC;EACA;EACA;CtB27IL;;AsBr7IK;;;;EAEE;CtB07IP;;AsBj7IO;;;;;;;;;;;;;;;;;;;;;;;;EAEE;CtB08IT;;AsB7gJD;;;;;;;;EA2EU;CtB68IT;;AsBv8IO;;;;;;;;EAEE;CtBg9IT;;AsBniJD;;EA0FM;CtB88IL;;AsBxiJD;;;;EAkGQ;CtB68IP;;AsB/iJD;;;;EAyGQ;CtB68IP;;AsBn8ID;EAKM;EACA;CtBk8IL;;AsBx8ID;EASQ;CtBm8IP;;AsB58ID;EAYQ;CtBo8IP;;AsBh9ID;EAeQ;CtBq8IP;;AsBp9ID;EAkBQ;EACA;EACA;CtBs8IP;;AsB19ID;EAuBU;CtBu8IT;;AsB99ID;EA2BQ;CtBu8IP;;AsBh+IC;EA6BQ;CtBu8IT;;AsBt+ID;EAqCM;EACA;CtBq8IL;;AsB3+ID;EAgDQ;CtB+7IP;;AsB/+ID;EAmDU;CtBg8IT;;AsB77IK;EACE;CtBg8IP;;AsBt7IK;EACE;CtBy7IP;;AsB3/ID;EAqEU;CtB07IT;;AsBv7IK;EACE;CtB07IP;;AsBr7IC;EAII;EACA;CtBq7IL;;AsBxgJD;EA2FM;EACA;CtBi7IL;;AsB7gJD;EA+FQ;CtBk7IP;;AsBjhJD;EAmGM;EACA;CtBk7IL","file":"mdl-ext.css","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n    $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ==========  TYPOGRAPHY  ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n   page loading. For important text, such as the body, we want it to load\n   immediately and not wait for the web font load, whereas for other sections,\n   such as headers and titles, we're OK with things taking a bit longer to load.\n   We do have some optional classes and parameters in the mixins, in case you\n   definitely want to make sure you're using the preferred font and don't mind\n   the performance hit.\n   We should be able to improve on this once CSS Font Loading L3 becomes more\n   widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ==========  COLORS  ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ==========  IMAGES  ========== */\n$image_path: '/images' !default;\n\n/* ==========  Color & Themes  ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n  $color-primary: '$color-primary';\n  $color-primary-dark: '$color-primary-dark';\n  $color-accent: '$color-accent';\n  $color-primary-contrast: '$color-primary-contrast';\n  $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ==========  Typography  ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ==========  Components  ========== */\n\n/* ==========  Standard Buttons  ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ==========  Icon Toggles  ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ==========  Radio Buttons  ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ==========  Ripple effect  ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ==========  Layout  ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ==========  Content Tabs  ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ==========  Checkboxes  ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ==========  Switches  ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ==========  Spinner  ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ==========  Text fields  ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ==========  Card  ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ==========  Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ==========  List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ==========  Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ==========  Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ==========  Tooltips  ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ==========  Footer  ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n    strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px  !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_variables.scss","@charset \"UTF-8\";\n\n// Material Design Lite\n@import '~material-design-lite/src/variables';\n@import '~material-design-lite/src/mixins';\n\n// mdl-ext\n@import 'mdl-ext';\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/mdl-ext-build.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* ==========  Color Palettes  ========== */\n\n// Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200,\n// A400, A700.\n\n$palette-red:\n\"255,235,238\"\n\"255,205,210\"\n\"239,154,154\"\n\"229,115,115\"\n\"239,83,80\"\n\"244,67,54\"\n\"229,57,53\"\n\"211,47,47\"\n\"198,40,40\"\n\"183,28,28\"\n\"255,138,128\"\n\"255,82,82\"\n\"255,23,68\"\n\"213,0,0\";\n\n$palette-red-50: nth($palette-red, 1);\n$palette-red-100: nth($palette-red, 2);\n$palette-red-200: nth($palette-red, 3);\n$palette-red-300: nth($palette-red, 4);\n$palette-red-400: nth($palette-red, 5);\n$palette-red-500: nth($palette-red, 6);\n$palette-red-600: nth($palette-red, 7);\n$palette-red-700: nth($palette-red, 8);\n$palette-red-800: nth($palette-red, 9);\n$palette-red-900: nth($palette-red, 10);\n$palette-red-A100: nth($palette-red, 11);\n$palette-red-A200: nth($palette-red, 12);\n$palette-red-A400: nth($palette-red, 13);\n$palette-red-A700: nth($palette-red, 14);\n\n$palette-pink:\n\"252,228,236\"\n\"248,187,208\"\n\"244,143,177\"\n\"240,98,146\"\n\"236,64,122\"\n\"233,30,99\"\n\"216,27,96\"\n\"194,24,91\"\n\"173,20,87\"\n\"136,14,79\"\n\"255,128,171\"\n\"255,64,129\"\n\"245,0,87\"\n\"197,17,98\";\n\n$palette-pink-50: nth($palette-pink, 1);\n$palette-pink-100: nth($palette-pink, 2);\n$palette-pink-200: nth($palette-pink, 3);\n$palette-pink-300: nth($palette-pink, 4);\n$palette-pink-400: nth($palette-pink, 5);\n$palette-pink-500: nth($palette-pink, 6);\n$palette-pink-600: nth($palette-pink, 7);\n$palette-pink-700: nth($palette-pink, 8);\n$palette-pink-800: nth($palette-pink, 9);\n$palette-pink-900: nth($palette-pink, 10);\n$palette-pink-A100: nth($palette-pink, 11);\n$palette-pink-A200: nth($palette-pink, 12);\n$palette-pink-A400: nth($palette-pink, 13);\n$palette-pink-A700: nth($palette-pink, 14);\n\n$palette-purple:\n\"243,229,245\"\n\"225,190,231\"\n\"206,147,216\"\n\"186,104,200\"\n\"171,71,188\"\n\"156,39,176\"\n\"142,36,170\"\n\"123,31,162\"\n\"106,27,154\"\n\"74,20,140\"\n\"234,128,252\"\n\"224,64,251\"\n\"213,0,249\"\n\"170,0,255\";\n\n$palette-purple-50: nth($palette-purple, 1);\n$palette-purple-100: nth($palette-purple, 2);\n$palette-purple-200: nth($palette-purple, 3);\n$palette-purple-300: nth($palette-purple, 4);\n$palette-purple-400: nth($palette-purple, 5);\n$palette-purple-500: nth($palette-purple, 6);\n$palette-purple-600: nth($palette-purple, 7);\n$palette-purple-700: nth($palette-purple, 8);\n$palette-purple-800: nth($palette-purple, 9);\n$palette-purple-900: nth($palette-purple, 10);\n$palette-purple-A100: nth($palette-purple, 11);\n$palette-purple-A200: nth($palette-purple, 12);\n$palette-purple-A400: nth($palette-purple, 13);\n$palette-purple-A700: nth($palette-purple, 14);\n\n$palette-deep-purple:\n\"237,231,246\"\n\"209,196,233\"\n\"179,157,219\"\n\"149,117,205\"\n\"126,87,194\"\n\"103,58,183\"\n\"94,53,177\"\n\"81,45,168\"\n\"69,39,160\"\n\"49,27,146\"\n\"179,136,255\"\n\"124,77,255\"\n\"101,31,255\"\n\"98,0,234\";\n\n$palette-deep-purple-50: nth($palette-deep-purple, 1);\n$palette-deep-purple-100: nth($palette-deep-purple, 2);\n$palette-deep-purple-200: nth($palette-deep-purple, 3);\n$palette-deep-purple-300: nth($palette-deep-purple, 4);\n$palette-deep-purple-400: nth($palette-deep-purple, 5);\n$palette-deep-purple-500: nth($palette-deep-purple, 6);\n$palette-deep-purple-600: nth($palette-deep-purple, 7);\n$palette-deep-purple-700: nth($palette-deep-purple, 8);\n$palette-deep-purple-800: nth($palette-deep-purple, 9);\n$palette-deep-purple-900: nth($palette-deep-purple, 10);\n$palette-deep-purple-A100: nth($palette-deep-purple, 11);\n$palette-deep-purple-A200: nth($palette-deep-purple, 12);\n$palette-deep-purple-A400: nth($palette-deep-purple, 13);\n$palette-deep-purple-A700: nth($palette-deep-purple, 14);\n\n$palette-indigo:\n\"232,234,246\"\n\"197,202,233\"\n\"159,168,218\"\n\"121,134,203\"\n\"92,107,192\"\n\"63,81,181\"\n\"57,73,171\"\n\"48,63,159\"\n\"40,53,147\"\n\"26,35,126\"\n\"140,158,255\"\n\"83,109,254\"\n\"61,90,254\"\n\"48,79,254\";\n\n$palette-indigo-50: nth($palette-indigo, 1);\n$palette-indigo-100: nth($palette-indigo, 2);\n$palette-indigo-200: nth($palette-indigo, 3);\n$palette-indigo-300: nth($palette-indigo, 4);\n$palette-indigo-400: nth($palette-indigo, 5);\n$palette-indigo-500: nth($palette-indigo, 6);\n$palette-indigo-600: nth($palette-indigo, 7);\n$palette-indigo-700: nth($palette-indigo, 8);\n$palette-indigo-800: nth($palette-indigo, 9);\n$palette-indigo-900: nth($palette-indigo, 10);\n$palette-indigo-A100: nth($palette-indigo, 11);\n$palette-indigo-A200: nth($palette-indigo, 12);\n$palette-indigo-A400: nth($palette-indigo, 13);\n$palette-indigo-A700: nth($palette-indigo, 14);\n\n$palette-blue:\n\"227,242,253\"\n\"187,222,251\"\n\"144,202,249\"\n\"100,181,246\"\n\"66,165,245\"\n\"33,150,243\"\n\"30,136,229\"\n\"25,118,210\"\n\"21,101,192\"\n\"13,71,161\"\n\"130,177,255\"\n\"68,138,255\"\n\"41,121,255\"\n\"41,98,255\";\n\n$palette-blue-50: nth($palette-blue, 1);\n$palette-blue-100: nth($palette-blue, 2);\n$palette-blue-200: nth($palette-blue, 3);\n$palette-blue-300: nth($palette-blue, 4);\n$palette-blue-400: nth($palette-blue, 5);\n$palette-blue-500: nth($palette-blue, 6);\n$palette-blue-600: nth($palette-blue, 7);\n$palette-blue-700: nth($palette-blue, 8);\n$palette-blue-800: nth($palette-blue, 9);\n$palette-blue-900: nth($palette-blue, 10);\n$palette-blue-A100: nth($palette-blue, 11);\n$palette-blue-A200: nth($palette-blue, 12);\n$palette-blue-A400: nth($palette-blue, 13);\n$palette-blue-A700: nth($palette-blue, 14);\n\n$palette-light-blue:\n\"225,245,254\"\n\"179,229,252\"\n\"129,212,250\"\n\"79,195,247\"\n\"41,182,246\"\n\"3,169,244\"\n\"3,155,229\"\n\"2,136,209\"\n\"2,119,189\"\n\"1,87,155\"\n\"128,216,255\"\n\"64,196,255\"\n\"0,176,255\"\n\"0,145,234\";\n\n$palette-light-blue-50: nth($palette-light-blue, 1);\n$palette-light-blue-100: nth($palette-light-blue, 2);\n$palette-light-blue-200: nth($palette-light-blue, 3);\n$palette-light-blue-300: nth($palette-light-blue, 4);\n$palette-light-blue-400: nth($palette-light-blue, 5);\n$palette-light-blue-500: nth($palette-light-blue, 6);\n$palette-light-blue-600: nth($palette-light-blue, 7);\n$palette-light-blue-700: nth($palette-light-blue, 8);\n$palette-light-blue-800: nth($palette-light-blue, 9);\n$palette-light-blue-900: nth($palette-light-blue, 10);\n$palette-light-blue-A100: nth($palette-light-blue, 11);\n$palette-light-blue-A200: nth($palette-light-blue, 12);\n$palette-light-blue-A400: nth($palette-light-blue, 13);\n$palette-light-blue-A700: nth($palette-light-blue, 14);\n\n$palette-cyan:\n\"224,247,250\"\n\"178,235,242\"\n\"128,222,234\"\n\"77,208,225\"\n\"38,198,218\"\n\"0,188,212\"\n\"0,172,193\"\n\"0,151,167\"\n\"0,131,143\"\n\"0,96,100\"\n\"132,255,255\"\n\"24,255,255\"\n\"0,229,255\"\n\"0,184,212\";\n\n$palette-cyan-50: nth($palette-cyan, 1);\n$palette-cyan-100: nth($palette-cyan, 2);\n$palette-cyan-200: nth($palette-cyan, 3);\n$palette-cyan-300: nth($palette-cyan, 4);\n$palette-cyan-400: nth($palette-cyan, 5);\n$palette-cyan-500: nth($palette-cyan, 6);\n$palette-cyan-600: nth($palette-cyan, 7);\n$palette-cyan-700: nth($palette-cyan, 8);\n$palette-cyan-800: nth($palette-cyan, 9);\n$palette-cyan-900: nth($palette-cyan, 10);\n$palette-cyan-A100: nth($palette-cyan, 11);\n$palette-cyan-A200: nth($palette-cyan, 12);\n$palette-cyan-A400: nth($palette-cyan, 13);\n$palette-cyan-A700: nth($palette-cyan, 14);\n\n$palette-teal:\n\"224,242,241\"\n\"178,223,219\"\n\"128,203,196\"\n\"77,182,172\"\n\"38,166,154\"\n\"0,150,136\"\n\"0,137,123\"\n\"0,121,107\"\n\"0,105,92\"\n\"0,77,64\"\n\"167,255,235\"\n\"100,255,218\"\n\"29,233,182\"\n\"0,191,165\";\n\n$palette-teal-50: nth($palette-teal, 1);\n$palette-teal-100: nth($palette-teal, 2);\n$palette-teal-200: nth($palette-teal, 3);\n$palette-teal-300: nth($palette-teal, 4);\n$palette-teal-400: nth($palette-teal, 5);\n$palette-teal-500: nth($palette-teal, 6);\n$palette-teal-600: nth($palette-teal, 7);\n$palette-teal-700: nth($palette-teal, 8);\n$palette-teal-800: nth($palette-teal, 9);\n$palette-teal-900: nth($palette-teal, 10);\n$palette-teal-A100: nth($palette-teal, 11);\n$palette-teal-A200: nth($palette-teal, 12);\n$palette-teal-A400: nth($palette-teal, 13);\n$palette-teal-A700: nth($palette-teal, 14);\n\n$palette-green:\n\"232,245,233\"\n\"200,230,201\"\n\"165,214,167\"\n\"129,199,132\"\n\"102,187,106\"\n\"76,175,80\"\n\"67,160,71\"\n\"56,142,60\"\n\"46,125,50\"\n\"27,94,32\"\n\"185,246,202\"\n\"105,240,174\"\n\"0,230,118\"\n\"0,200,83\";\n\n$palette-green-50: nth($palette-green, 1);\n$palette-green-100: nth($palette-green, 2);\n$palette-green-200: nth($palette-green, 3);\n$palette-green-300: nth($palette-green, 4);\n$palette-green-400: nth($palette-green, 5);\n$palette-green-500: nth($palette-green, 6);\n$palette-green-600: nth($palette-green, 7);\n$palette-green-700: nth($palette-green, 8);\n$palette-green-800: nth($palette-green, 9);\n$palette-green-900: nth($palette-green, 10);\n$palette-green-A100: nth($palette-green, 11);\n$palette-green-A200: nth($palette-green, 12);\n$palette-green-A400: nth($palette-green, 13);\n$palette-green-A700: nth($palette-green, 14);\n\n$palette-light-green:\n\"241,248,233\"\n\"220,237,200\"\n\"197,225,165\"\n\"174,213,129\"\n\"156,204,101\"\n\"139,195,74\"\n\"124,179,66\"\n\"104,159,56\"\n\"85,139,47\"\n\"51,105,30\"\n\"204,255,144\"\n\"178,255,89\"\n\"118,255,3\"\n\"100,221,23\";\n\n$palette-light-green-50: nth($palette-light-green, 1);\n$palette-light-green-100: nth($palette-light-green, 2);\n$palette-light-green-200: nth($palette-light-green, 3);\n$palette-light-green-300: nth($palette-light-green, 4);\n$palette-light-green-400: nth($palette-light-green, 5);\n$palette-light-green-500: nth($palette-light-green, 6);\n$palette-light-green-600: nth($palette-light-green, 7);\n$palette-light-green-700: nth($palette-light-green, 8);\n$palette-light-green-800: nth($palette-light-green, 9);\n$palette-light-green-900: nth($palette-light-green, 10);\n$palette-light-green-A100: nth($palette-light-green, 11);\n$palette-light-green-A200: nth($palette-light-green, 12);\n$palette-light-green-A400: nth($palette-light-green, 13);\n$palette-light-green-A700: nth($palette-light-green, 14);\n\n$palette-lime:\n\"249,251,231\"\n\"240,244,195\"\n\"230,238,156\"\n\"220,231,117\"\n\"212,225,87\"\n\"205,220,57\"\n\"192,202,51\"\n\"175,180,43\"\n\"158,157,36\"\n\"130,119,23\"\n\"244,255,129\"\n\"238,255,65\"\n\"198,255,0\"\n\"174,234,0\";\n\n$palette-lime-50: nth($palette-lime, 1);\n$palette-lime-100: nth($palette-lime, 2);\n$palette-lime-200: nth($palette-lime, 3);\n$palette-lime-300: nth($palette-lime, 4);\n$palette-lime-400: nth($palette-lime, 5);\n$palette-lime-500: nth($palette-lime, 6);\n$palette-lime-600: nth($palette-lime, 7);\n$palette-lime-700: nth($palette-lime, 8);\n$palette-lime-800: nth($palette-lime, 9);\n$palette-lime-900: nth($palette-lime, 10);\n$palette-lime-A100: nth($palette-lime, 11);\n$palette-lime-A200: nth($palette-lime, 12);\n$palette-lime-A400: nth($palette-lime, 13);\n$palette-lime-A700: nth($palette-lime, 14);\n\n$palette-yellow:\n\"255,253,231\"\n\"255,249,196\"\n\"255,245,157\"\n\"255,241,118\"\n\"255,238,88\"\n\"255,235,59\"\n\"253,216,53\"\n\"251,192,45\"\n\"249,168,37\"\n\"245,127,23\"\n\"255,255,141\"\n\"255,255,0\"\n\"255,234,0\"\n\"255,214,0\";\n\n$palette-yellow-50: nth($palette-yellow, 1);\n$palette-yellow-100: nth($palette-yellow, 2);\n$palette-yellow-200: nth($palette-yellow, 3);\n$palette-yellow-300: nth($palette-yellow, 4);\n$palette-yellow-400: nth($palette-yellow, 5);\n$palette-yellow-500: nth($palette-yellow, 6);\n$palette-yellow-600: nth($palette-yellow, 7);\n$palette-yellow-700: nth($palette-yellow, 8);\n$palette-yellow-800: nth($palette-yellow, 9);\n$palette-yellow-900: nth($palette-yellow, 10);\n$palette-yellow-A100: nth($palette-yellow, 11);\n$palette-yellow-A200: nth($palette-yellow, 12);\n$palette-yellow-A400: nth($palette-yellow, 13);\n$palette-yellow-A700: nth($palette-yellow, 14);\n\n$palette-amber:\n\"255,248,225\"\n\"255,236,179\"\n\"255,224,130\"\n\"255,213,79\"\n\"255,202,40\"\n\"255,193,7\"\n\"255,179,0\"\n\"255,160,0\"\n\"255,143,0\"\n\"255,111,0\"\n\"255,229,127\"\n\"255,215,64\"\n\"255,196,0\"\n\"255,171,0\";\n\n$palette-amber-50: nth($palette-amber, 1);\n$palette-amber-100: nth($palette-amber, 2);\n$palette-amber-200: nth($palette-amber, 3);\n$palette-amber-300: nth($palette-amber, 4);\n$palette-amber-400: nth($palette-amber, 5);\n$palette-amber-500: nth($palette-amber, 6);\n$palette-amber-600: nth($palette-amber, 7);\n$palette-amber-700: nth($palette-amber, 8);\n$palette-amber-800: nth($palette-amber, 9);\n$palette-amber-900: nth($palette-amber, 10);\n$palette-amber-A100: nth($palette-amber, 11);\n$palette-amber-A200: nth($palette-amber, 12);\n$palette-amber-A400: nth($palette-amber, 13);\n$palette-amber-A700: nth($palette-amber, 14);\n\n$palette-orange:\n\"255,243,224\"\n\"255,224,178\"\n\"255,204,128\"\n\"255,183,77\"\n\"255,167,38\"\n\"255,152,0\"\n\"251,140,0\"\n\"245,124,0\"\n\"239,108,0\"\n\"230,81,0\"\n\"255,209,128\"\n\"255,171,64\"\n\"255,145,0\"\n\"255,109,0\";\n\n$palette-orange-50: nth($palette-orange, 1);\n$palette-orange-100: nth($palette-orange, 2);\n$palette-orange-200: nth($palette-orange, 3);\n$palette-orange-300: nth($palette-orange, 4);\n$palette-orange-400: nth($palette-orange, 5);\n$palette-orange-500: nth($palette-orange, 6);\n$palette-orange-600: nth($palette-orange, 7);\n$palette-orange-700: nth($palette-orange, 8);\n$palette-orange-800: nth($palette-orange, 9);\n$palette-orange-900: nth($palette-orange, 10);\n$palette-orange-A100: nth($palette-orange, 11);\n$palette-orange-A200: nth($palette-orange, 12);\n$palette-orange-A400: nth($palette-orange, 13);\n$palette-orange-A700: nth($palette-orange, 14);\n\n$palette-deep-orange:\n\"251,233,231\"\n\"255,204,188\"\n\"255,171,145\"\n\"255,138,101\"\n\"255,112,67\"\n\"255,87,34\"\n\"244,81,30\"\n\"230,74,25\"\n\"216,67,21\"\n\"191,54,12\"\n\"255,158,128\"\n\"255,110,64\"\n\"255,61,0\"\n\"221,44,0\";\n\n$palette-deep-orange-50: nth($palette-deep-orange, 1);\n$palette-deep-orange-100: nth($palette-deep-orange, 2);\n$palette-deep-orange-200: nth($palette-deep-orange, 3);\n$palette-deep-orange-300: nth($palette-deep-orange, 4);\n$palette-deep-orange-400: nth($palette-deep-orange, 5);\n$palette-deep-orange-500: nth($palette-deep-orange, 6);\n$palette-deep-orange-600: nth($palette-deep-orange, 7);\n$palette-deep-orange-700: nth($palette-deep-orange, 8);\n$palette-deep-orange-800: nth($palette-deep-orange, 9);\n$palette-deep-orange-900: nth($palette-deep-orange, 10);\n$palette-deep-orange-A100: nth($palette-deep-orange, 11);\n$palette-deep-orange-A200: nth($palette-deep-orange, 12);\n$palette-deep-orange-A400: nth($palette-deep-orange, 13);\n$palette-deep-orange-A700: nth($palette-deep-orange, 14);\n\n\n// Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900.\n\n$palette-brown:\n\"239,235,233\"\n\"215,204,200\"\n\"188,170,164\"\n\"161,136,127\"\n\"141,110,99\"\n\"121,85,72\"\n\"109,76,65\"\n\"93,64,55\"\n\"78,52,46\"\n\"62,39,35\";\n\n$palette-brown-50: nth($palette-brown, 1);\n$palette-brown-100: nth($palette-brown, 2);\n$palette-brown-200: nth($palette-brown, 3);\n$palette-brown-300: nth($palette-brown, 4);\n$palette-brown-400: nth($palette-brown, 5);\n$palette-brown-500: nth($palette-brown, 6);\n$palette-brown-600: nth($palette-brown, 7);\n$palette-brown-700: nth($palette-brown, 8);\n$palette-brown-800: nth($palette-brown, 9);\n$palette-brown-900: nth($palette-brown, 10);\n\n$palette-grey:\n\"250,250,250\"\n\"245,245,245\"\n\"238,238,238\"\n\"224,224,224\"\n\"189,189,189\"\n\"158,158,158\"\n\"117,117,117\"\n\"97,97,97\"\n\"66,66,66\"\n\"33,33,33\";\n\n$palette-grey-50: nth($palette-grey, 1);\n$palette-grey-100: nth($palette-grey, 2);\n$palette-grey-200: nth($palette-grey, 3);\n$palette-grey-300: nth($palette-grey, 4);\n$palette-grey-400: nth($palette-grey, 5);\n$palette-grey-500: nth($palette-grey, 6);\n$palette-grey-600: nth($palette-grey, 7);\n$palette-grey-700: nth($palette-grey, 8);\n$palette-grey-800: nth($palette-grey, 9);\n$palette-grey-900: nth($palette-grey, 10);\n\n$palette-blue-grey:\n\"236,239,241\"\n\"207,216,220\"\n\"176,190,197\"\n\"144,164,174\"\n\"120,144,156\"\n\"96,125,139\"\n\"84,110,122\"\n\"69,90,100\"\n\"55,71,79\"\n\"38,50,56\";\n\n$palette-blue-grey-50: nth($palette-blue-grey, 1);\n$palette-blue-grey-100: nth($palette-blue-grey, 2);\n$palette-blue-grey-200: nth($palette-blue-grey, 3);\n$palette-blue-grey-300: nth($palette-blue-grey, 4);\n$palette-blue-grey-400: nth($palette-blue-grey, 5);\n$palette-blue-grey-500: nth($palette-blue-grey, 6);\n$palette-blue-grey-600: nth($palette-blue-grey, 7);\n$palette-blue-grey-700: nth($palette-blue-grey, 8);\n$palette-blue-grey-800: nth($palette-blue-grey, 9);\n$palette-blue-grey-900: nth($palette-blue-grey, 10);\n\n$color-black: \"0,0,0\";\n$color-white: \"255,255,255\";\n\n\n/* colors.scss */\n$styleguide-generate-template: false !default;\n\n// The two possible colors for overlayed text.\n$color-dark-contrast: $color-white !default;\n$color-light-contrast: $color-black !default;\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_color-definitions.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@function strip-units($number) {\n  @return $number / ($number * 0 + 1);\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_functions.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n  @if $usePreferred {\n    font-family: $preferred_font;\n  }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 112px;\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: -0.04em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 56px;\n  font-weight: 400;\n  line-height: 1.35;\n  letter-spacing: -0.02em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 45px;\n  font-weight: 400;\n  line-height: 48px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 34px;\n  font-weight: 400;\n  line-height: 40px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 24px;\n  font-weight: 400;\n  line-height: 32px;\n  -moz-osx-font-smoothing: grayscale;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 20px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0.02em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 28px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  @if $usePreferred {\n    font-weight: 500;\n  } @else {\n    font-weight: bold;\n  }\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  position: relative;\n  font-size: 24px;\n  font-weight: 300;\n  font-style: italic;\n  line-height: 1.35;\n  letter-spacing: 0.08em;\n\n  &:before {\n    position: absolute;\n    left: -0.5em;\n    content: '“';\n  }\n\n  &:after {\n    content: '”';\n    margin-left: -0.05em;\n  }\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  text-transform: uppercase;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-icon() {\n  font-family: 'Material Icons';\n  font-weight: normal;\n  font-style: normal;\n  font-size: 24px;\n  line-height: 1;\n  letter-spacing: normal;\n  text-transform: none;\n  display: inline-block;\n  word-wrap: normal;\n  font-feature-settings: 'liga';\n  -webkit-font-feature-settings: 'liga';\n  -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n  box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0  6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0  8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n  box-shadow: 0  9px 46px  8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 24px 38px  3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n  @if(type_of($units) != 'number') {\n    @error \"The unit given to dialog-width should be a number.\";\n  }\n  // 56dp is the base unit width for Dialogs.\n  // With 5 units being the number of units for a mobile device.\n  // https://goo.gl/sK2O5o\n  width: $units * 56px;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_mixins.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"functions\";\n\n// ----------------------------------------------------------------\n// Sample colors\n// ----------------------------------------------------------------\n$mdlext-palette-amber-50:                         #FFF8E1;\n$mdlext-palette-amber-100:                        #FFECB3;\n$mdlext-palette-amber-500:                        #FFC107;\n$mdlext-palette-amber-700:                        #FFA000;\n$mdlext-palette-blue-grey-500:                    #607D8B;\n$mdlext-palette-deep-orange-500:                  #FF5722;\n$mdlext-palette-deep-purple-100:                  #D1C4E9;\n$mdlext-palette-deep-purple-500:                  #512DA8;\n$mdlext-palette-deep-purple-700:                  #673AB7;\n$mdlext-palette-green-50:                         #E8F5E9;\n$mdlext-palette-green-100:                        #C8E6C9;\n$mdlext-palette-green-500:                        #4CAF50;\n$mdlext-palette-green-700:                        #388E3C;\n$mdlext-palette-grey-50:                          #FAFAFA;\n$mdlext-palette-grey-100:                         #F5F5F5;\n$mdlext-palette-grey-200:                         #EEEEEE;\n$mdlext-palette-grey-300:                         #E0E0E0;\n$mdlext-palette-grey-400:                         #BDBDBD;\n$mdlext-palette-grey-500:                         #9E9E9E;\n$mdlext-palette-grey-600:                         #757575;\n$mdlext-palette-grey-700:                         #616161;\n$mdlext-palette-grey-800:                         #424242;\n$mdlext-palette-grey-900:                         #212121;\n$mdlext-palette-indigo-A200:                      #536DFE;\n$mdlext-palette-light-blue-500:                   #03A9F4;\n$mdlext-palette-light-green-500:                  #8BC34A;\n$mdlext-palette-pink-500:                         #E91E63;\n$mdlext-palette-pink-700:                         #C2185B;\n$mdlext-palette-pink-A400:                        #F50057;\n$mdlext-palette-purple-A200:                      #E040FB;\n$mdlext-palette-red-700:                          #D32F2F;\n$mdlext-palette-red-A200:                         #FF5252;\n$mdlext-palette-red-A400:                         #FF1744;\n$mdlext-palette-yellow-500:                       #FFEB3B;\n$mdlext-color-black:                              #000000;\n$mdlext-color-white:                              #FFFFFF;\n\n\n/* ==========   Sticky Header   ========== */\n$mdlext-sticky-header-background-color           : transparent !default;\n$mdlext-sticky-header-background-color-scroll    : transparent !default;\n$mdlext-sticky-header-gradient-color             : rgb-string-to-hex($color-primary) !default;\n$mdlext-sticky-header-gradient-color-start       : $mdlext-sticky-header-gradient-color !default;\n$mdlext-sticky-header-gradient-color-end         : $mdlext-sticky-header-gradient-color-start !default;\n$mdlext-sticky-header-gradient-color-scroll-start: rgba($mdlext-sticky-header-gradient-color, 0.98) !default;\n$mdlext-sticky-header-gradient-color-scroll-end  : rgba($mdlext-sticky-header-gradient-color, 0.95) !default;\n\n// Background shorthand\n/* stylelint-disable */\n$mdlext-sticky-header-background                 : $mdlext-sticky-header-background-color\n                                                   linear-gradient(to bottom,\n                                                      $mdlext-sticky-header-gradient-color-start 0,\n                                                      $mdlext-sticky-header-gradient-color-end 100%) !default;\n\n// Background shorthand when content is scrolling\n$mdlext-sticky-header-background-scroll          : $mdlext-sticky-header-background-color-scroll\n                                                   linear-gradient(to bottom,\n                                                      $mdlext-sticky-header-gradient-color-scroll-start 100%,\n                                                      $mdlext-sticky-header-gradient-color-scroll-end 100%) !default;\n/* stylelint-enable */\n\n/* ==========     Accordion     ========== */\n$mdlext-accordion-header-background-color-base   : $mdlext-palette-grey-500 !default;\n$mdlext-accordion-header-background-color        : rgba($mdlext-accordion-header-background-color-base, 0.20) !default;\n$mdlext-accordion-header-background-open-color   : rgba($mdlext-accordion-header-background-color-base, 0.30) !default;\n$mdlext-accordion-header-background-active-color : rgba($mdlext-accordion-header-background-color-base, 0.40) !default;\n$mdlext-accordion-header-border-color            : rgba($mdlext-accordion-header-background-color-base, 0.50) !default;\n$mdlext-accordion-header-background-hover-color  : rgba($mdlext-accordion-header-background-color-base, 0.40) !default;\n$mdlext-accordion-header-focus-outline-color     : invert !default;\n$mdlext-accordion-header-disabled-color          : rgba($mdlext-accordion-header-background-color-base, 0.12) !default;\n$mdlext-accordion-header-secondary-color         : $mdlext-color-black !default;\n$mdlext-accordion-header-secondary-color-disabled: rgba($mdlext-color-black, 0.26) !default;\n$mdlext-accordion-header-highlight-color         : darken($mdlext-accordion-header-border-color, 3%) !default;\n$mdlext-accordion-ripple-color                   : rgba(rgb-string-to-hex($color-accent-contrast), 0.5) !default;\n$mdlext-accordion-header-padding                 : 8px !default;\n$mdlext-accordion-header-height                  : 56px !default;\n$mdlext-accordion-content-padding                : $mdlext-accordion-header-padding !default;\n$mdlext-accordion-content-color                  : inherit !default;\n$mdlext-accordion-content-background-color       : transparent !default;\n\n\n/* ==========     Dialog     ========== */\n$mdlext-dialog-padding           : 0;\n$mdlext-dialog-background-color  : transparent !default;\n$mdlext-dialog-backdrop-color    : rgba(0, 0, 0, 0.86) !default;\n$mdlext-dialog-open-animation    : 0.5s 0.2s forwards !default;\n$mdlext-dialog-backdrop-animation: 0.2s forwards !default;\n\n\n/* ==========     Lightbox     ========== */\n$mdlext-lightbox-background-color           : $card-background-color !default;\n$mdlext-lightbox-border                     : 0 !default;\n$mdlext-lightbox-border-radius              : 0 !default;\n$mdlext-lightbox-figure-margin              : 0 !default;\n$mdlext-lightbox-figure-padding             : 0 !default;\n$mdlext-lightbox-figcaption-background-color: rgba(255, 255, 255, 0.76) !default;\n$mdlext-lightbox-footer-background-color    : rgba(255, 255, 255, 0.86) !default;\n\n\n/* ==========  Lightboard  ========== */\n$mdlext-lightboard-medium-small-breakpoint     : $grid-tablet-breakpoint !default;          // 480\n$mdlext-lightboard-medium-breakpoint           : $grid-tablet-breakpoint + 180px !default;  // 480 + 180\n$mdlext-lightboard-medium-large-breakpoint     : $grid-desktop-breakpoint !default;         // 840\n$mdlext-lightboard-large-breakpoint            : $grid-desktop-breakpoint + 360px !default; // 840+360\n\n$mdlext-lightboard-small-gutter                : 2px !default;\n$mdlext-lightboard-small-margin                : 0 !default;\n$mdlext-lightboard-small-columns               : 2 !default;\n$mdlext-lightboard-small-frame-width           : 8px !default;\n\n$mdlext-lightboard-medium-small-gutter         : 4px !default;\n$mdlext-lightboard-medium-small-margin         : 0 !default;\n$mdlext-lightboard-medium-small-columns        : 4 !default;\n$mdlext-lightboard-medium-small-frame-width    : 8px !default;\n\n$mdlext-lightboard-medium-gutter               : 4px !default;\n$mdlext-lightboard-medium-margin               : 0 !default;\n$mdlext-lightboard-medium-columns              : 5 !default;\n$mdlext-lightboard-medium-frame-width          : 8px !default;\n\n$mdlext-lightboard-medium-large-gutter         : 8px !default;\n$mdlext-lightboard-medium-large-margin         : 0 !default;\n$mdlext-lightboard-medium-large-columns        : 6 !default;\n$mdlext-lightboard-medium-large-frame-width    : 12px !default;\n\n$mdlext-lightboard-large-gutter                : 8px !default;\n$mdlext-lightboard-large-margin                : 0 !default;\n$mdlext-lightboard-large-columns               : 7 !default;\n$mdlext-lightboard-large-frame-width           : 12px !default;\n\n$mdlext-lightboard-slide-max-size              : 250px !default;\n$mdlext-lightboard-slide-border-color          : #D8D8D8 !default;\n$mdlext-lightboard-slide-background-color      : #F8F8F8 !default;\n$mdlext-lightboard-slide-border-radius         : 5px !default;\n$mdlext-lightboard-slide-inner-border-radius   : 3px !default;\n$mdlext-lightboard-slide-box-shadow            : 2px 2px 6px -1px rgba(219, 215, 219, 0.5) !default;\n$mdlext-lightboard-slide-border-color-hover    : #B8B8B8 !default;\n$mdlext-lightboard-slide-background-color-hover: #E8E8E8 !default;\n$mdlext-lightboard-slide-active-bacground-color: #E8E8E8 !default;\n$mdlext-lightboard-slide-box-shadow-hover      : 2px 2px 12px -1px rgba(219, 215, 219, 1) !default;\n$mdlext-lightboard-ripple-color                : $tab-highlight-color !default;\n$mdlext-lightboard-focus-outline-color         : inherit !default;\n$mdlext-lightboard-figcaption-text-color       : rgb-string-to-hex($palette-grey-400) !default;\n\n\n/* ==========  Carousel  ========== */\n$mdlext-carousel-slide-border-top-width        : 2px !default;\n$mdlext-carousel-slide-border-top-color        : rgb-string-to-hex($color-accent) !default;\n$mdlext-carousel-slide-margin-horizontal       : 0;\n$mdlext-carousel-slide-figcaption-color        : $mdlext-lightboard-figcaption-text-color !default;\n$mdlext-carousel-slide-ripple-color            : $mdlext-lightboard-ripple-color !default;\n\n\n/* ==========  Bordered fields  ========== */\n$mdlext-bordered-field-vertical-spacing-top           : 0 !default;\n$mdlext-bordered-field-vertical-spacing-bottom        : $input-text-vertical-spacing !default;\n\n$mdlext-bordered-field-input-text-font-size           : $input-text-font-size !default;\n$mdlext-bordered-field-font-weight                    : normal !default;\n$mdlext-bordered-field-border-width                   : 1px !default;\n$mdlext-bordered-field-border-radius                  : 3px !default;\n$mdlext-bordered-field-padding                        : $input-text-padding + 4px !default;\n$mdlext-bordered-field-padding-top                    : $input-text-vertical-spacing !default;\n$mdlext-bordered-field-padding-bottom                 : $input-text-padding !default;\n\n$mdlext-bordered-field-input-text-color               : inherit !default;\n$mdlext-bordered-field-border-color                   : rgba($mdlext-color-black, 0.26) !default;\n$mdlext-bordered-field-background-color               : rgba(#FFFFFF, 0.2) !default;\n$mdlext-bordered-field-focus-border-color             : rgb-string-to-hex($color-primary) !default;\n$mdlext-bordered-field-focus-background-color         : rgba(#EEEEEE, 0.2) !default;\n\n$mdlext-bordered-field-input-text-disabled-text-color : rgba($mdlext-color-black, 0.12) !default;\n$mdlext-bordered-field-disabled-border-color          : rgba($mdlext-color-black, 0.12) !default;\n$mdlext-bordered-field-disabled-background-color      : $mdlext-bordered-field-background-color !default;\n\n$mdlext-bordered-field-input-text-error-color         : $mdlext-bordered-field-input-text-color !default;\n$mdlext-bordered-field-error-border-color             : rgb-string-to-hex($input-text-error-color) !default;\n$mdlext-bordered-field-error-background-color         : rgba(lighten($mdlext-bordered-field-error-border-color, 50%), 0.5) !default;\n$mdlext-bordered-field-error-focus-border-color       : darken($mdlext-bordered-field-error-border-color, 10%) !default;\n$mdlext-bordered-field-error-focus-background-color   : $mdlext-bordered-field-error-background-color !default;\n\n$mdlext-bordered-field-input-text-label-color         : rgba($mdlext-color-black, 0.26) !default;\n$mdlext-bordered-field-input-text-label-focus-color   : $mdlext-bordered-field-focus-border-color !default;\n$mdlext-bordered-field-input-text-label-error-color   : $mdlext-bordered-field-error-border-color !default;\n$mdlext-bordered-field-input-text-label-disabled-color: rgba($mdlext-color-black, 0.12) !default;\n\n$mdlext-bordered-field-label-font-size                : $mdlext-bordered-field-input-text-font-size !default;\n$mdlext-bordered-field-floating-label-font-size       : $input-text-floating-label-fontsize !default;\n$mdlext-bordered-field-floating-label-font-weight     : normal !default;\n\n$mdlext-bordered-field-height                         : $mdlext-bordered-field-padding-top + $mdlext-bordered-field-padding-bottom + $mdlext-bordered-field-input-text-font-size + 6px !default;\n$mdlext-bordered-field-floating-label-focus-bottom    : $mdlext-bordered-field-height - $mdlext-bordered-field-floating-label-font-size - $mdlext-bordered-field-padding-top/2 !default;\n\n\n// MDL can not handle required attribute properly. Planned for MDL-v2\n//$mdlext-bordered-field-required-border-color          : rgba(rgb-string-to-hex($color-accent), 0.8) !default;\n//$mdlext-bordered-field-required-background-color      : $mdlext-bordered-field-background-color !default;\n//$mdlext-bordered-field-required-focus-border-color    : rgba(rgb-string-to-hex($color-accent), 0.8) !default;\n//$mdlext-bordered-field-required-focus-background-color: $mdlext-bordered-field-background-color !default;\n//$mdlext-bordered-field-label-required-color           : $mdlext-bordered-field-required-border-color !default;\n\n\n\n/* ==========  Color Themes  ========== */\n\n// ----------------------------------------------------------------\n// Light Color Theme.\n// ----------------------------------------------------------------\n$mdlext-light-color-primary:                      #4CAF50 !default;\n$mdlext-light-color-primary-dark:                 #388E3C !default;\n$mdlext-light-color-primary-light:                #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast:             #C8E6C9 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:                       #E040FB !default;\n$mdlext-light-color-accent-light:                 #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:              #FAFAFA !default;\n\n$mdlext-light-content-background-color:           #FAFAFA !default;                         // background color on content (paper/card) background\n$mdlext-light-text-color-primary:                 rgba($mdlext-color-black, 0.87) !default; // text color on content (paper/card) background\n$mdlext-light-text-color-secondary:               rgba($mdlext-color-black, 0.54) !default; // text color on content (paper/card) background\n$mdlext-light-text-color-disabled:                rgba($mdlext-color-black, 0.38) !default; // disabled text, hint text, and icons\n$mdlext-light-divider-color:                      rgba($mdlext-color-black, 0.12) !default; // -> $card-border-color\n$mdlext-light-error-color:                        #D32F2F !default;\n\n// Anchor\n$mdlext-light-text-link-color:                    $mdlext-light-color-accent !default;\n\n// Card\n$mdlext-light-card-background-color:              $mdlext-light-content-background-color !default;\n$mdlext-light-card-text-color:                    $mdlext-light-text-color-primary !default;\n$mdlext-light-card-image-placeholder-color:       $mdlext-light-color-accent !default;\n$mdlext-light-card-supporting-text-text-color:    rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-card-border-color:                  rgba(0, 0, 0, 0.1) !default;\n$mdlext-light-card-subtitle-color:                rgba($mdlext-color-black, 0.54) !default;\n\n//  Item\n\n// Default Item Colors\n$mdlext-light-default-item-text-color:            rgba($mdlext-color-black, 0.87) !default;\n$mdlext-light-default-item-outline-color:         $mdlext-palette-grey-400 !default;\n$mdlext-light-default-item-hover-bg-color:        $mdlext-palette-grey-200 !default;\n$mdlext-light-default-item-focus-bg-color:        $mdlext-palette-grey-200 !default;\n$mdlext-light-default-item-active-bg-color:       $mdlext-palette-grey-300 !default;\n$mdlext-light-default-item-divider-color:         rgba($mdlext-color-black, 0.12) !default;\n\n// Disabled Button Colors\n$mdlext-light-disabled-item-text-color:           $mdlext-palette-grey-400 !default;\n\n// Dropdown menu / menu-button\n$mdlext-light-default-dropdown-bg-color:          $mdlext-color-white !default;\n\n// Badge\n$mdlext-light-badge-color:                        $mdlext-light-color-accent-contrast !default;\n$mdlext-light-badge-color-inverse:                $mdlext-light-color-accent !default;\n$mdlext-light-badge-background:                   $mdlext-light-color-accent !default;\n$mdlext-light-badge-background-inverse:           $mdlext-light-color-accent-contrast !default;\n\n// Default button colors.\n$mdlext-light-button-primary-color:               rgba($mdlext-palette-grey-500, 0.20) !default;\n$mdlext-light-button-secondary-color:             $mdlext-color-black !default;\n$mdlext-light-button-hover-color:                 $mdlext-light-button-primary-color !default;\n$mdlext-light-button-active-color:                rgba($mdlext-palette-grey-500, 0.40) !default;\n$mdlext-light-button-focus-color:                 rgba($mdlext-color-black, 0.12) !default;\n\n// Colored button colors.\n$mdlext-light-button-primary-color-alt:           $mdlext-light-color-primary-light !default;\n$mdlext-light-button-secondary-color-alt:         $mdlext-light-color-primary-contrast !default;\n$mdlext-light-button-hover-color-alt:             darken($mdlext-light-color-primary-light, 10%) !default;\n$mdlext-light-button-active-color-alt:            darken($mdlext-light-color-primary-light, 10%) !default;\n$mdlext-light-button-focus-color-alt:             $mdlext-light-button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$mdlext-light-button-ripple-color-alt:            $mdlext-light-color-primary-contrast !default;\n\n// Disabled button colors.\n$mdlext-light-button-primary-color-disabled:      rgba($mdlext-color-black, 0.12) !default;\n$mdlext-light-button-secondary-color-disabled:    rgba($mdlext-color-black, 0.26) !default;\n\n// FAB colors and sizes.\n$mdlext-light-button-fab-color-alt:               $mdlext-light-color-accent !default;\n$mdlext-light-button-fab-hover-color-alt:         $mdlext-light-color-accent !default;\n$mdlext-light-button-fab-active-color-alt:        $mdlext-light-color-accent !default;\n$mdlext-light-button-fab-text-color-alt:          $mdlext-light-color-accent-contrast !default;\n$mdlext-light-button-fab-ripple-color-alt:        $mdlext-light-color-accent-contrast !default;\n\n// Slider\n$mdlext-light-range-bg-color:                     rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-range-color:                        $mdlext-light-color-accent-light !default;\n$mdlext-light-range-faded-color:                  rgba($mdlext-light-color-accent-light, 0.26) !default;\n$mdlext-light-range-bg-focus-color:               rgba($mdlext-color-black, 0.12) !default;\n\n// Textfields\n$mdlext-light-input-text-background-color:        transparent !default;\n$mdlext-light-input-text-label-color:             rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-input-text-bottom-border-color:     rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-input-text-highlight-color:         $mdlext-light-color-accent-light !default;\n$mdlext-light-input-text-disabled-color:          rgba($mdlext-color-black, 0.12) !default;\n$mdlext-light-input-text-disabled-text-color:     rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-input-text-error-color:             $mdlext-light-error-color !default;\n\n// Checkboxes\n$mdlext-light-checkbox-color:                     $mdlext-light-color-accent-light !default;\n$mdlext-light-checkbox-off-color:                 rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-checkbox-disabled-color:            rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-checkbox-focus-color:               rgba($mdlext-light-color-accent-light, 0.26) !default;\n\n// Icon Toggles\n$mdlext-light-icon-toggle-color:                  $mdlext-palette-grey-700 !default;\n$mdlext-light-icon-toggle-focus-color:            $mdlext-light-button-focus-color !default;\n$mdlext-light-icon-toggle-checked-color:          $mdlext-light-color-accent-light !default;\n$mdlext-light-icon-toggle-checked-focus-color:    rgba($mdlext-light-color-accent-light, 0.26) !default;\n$mdlext-light-icon-toggle-disabled-color:         rgba($mdlext-color-black, 0.26) !default;\n\n// Radio Buttons\n$mdlext-light-radio-color:                        $mdlext-light-color-accent-light !default;\n$mdlext-light-radio-off-color:                    rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-radio-disabled-color:               rgba($mdlext-color-black, 0.26) !default;\n\n// Switches\n$mdlext-light-switch-color:                       $mdlext-light-color-accent-light !default;\n$mdlext-light-switch-faded-color:                 rgba($mdlext-light-color-accent-light, 0.26) !default;\n$mdlext-light-switch-thumb-color:                 $mdlext-light-switch-color !default;\n$mdlext-light-switch-track-color:                 rgba($mdlext-light-color-accent-light, 0.54) !default;\n$mdlext-light-switch-off-thumb-color:             $mdlext-palette-grey-50 !default;\n$mdlext-light-switch-off-track-color:             rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-switch-disabled-thumb-color:        $mdlext-palette-grey-400 !default;\n$mdlext-light-switch-disabled-track-color:        rgba($mdlext-color-black, 0.12) !default;\n\n// Data table\n$mdlext-light-data-table-background-color:               $mdlext-light-content-background-color !default;\n$mdlext-light-data-table-header-color:                   rgba($mdlext-color-black, 0.54) !default;\n$mdlext-light-data-table-header-sorted-color:            rgba($mdlext-color-black, 0.87) !default;\n$mdlext-light-data-table-header-sorted-icon-hover-color: rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-data-table-hover-color:                    $mdlext-palette-grey-200 !default;\n$mdlext-light-data-table-selection-color:                $mdlext-palette-grey-200 !default;\n$mdlext-light-data-table-divider-color:                  rgba($mdlext-color-black, 0.12) !default;\n$mdlext-light-data-table-dividers:                       1px solid $mdlext-light-data-table-divider-color !default;\n\n\n// Selectfield\n// Uses variables from textfield\n$mdlext-selectfield-arrow-width: 0.7em;\n$mdlext-selectfield-arrow-length: 0.5em;\n\n\n// Accordion\n$mdlext-light-accordion-header-background-color-base   : $mdlext-palette-grey-600 !default;\n$mdlext-light-accordion-header-background-color        : rgba($mdlext-light-accordion-header-background-color-base, 0.20) !default;\n$mdlext-light-accordion-header-background-open-color   : rgba($mdlext-light-accordion-header-background-color-base, 0.30) !default;\n$mdlext-light-accordion-header-background-active-color : rgba($mdlext-light-accordion-header-background-color-base, 0.40) !default;\n$mdlext-light-accordion-header-border-color            : rgba($mdlext-light-accordion-header-background-color-base, 0.50) !default;\n$mdlext-light-accordion-header-background-hover-color  : rgba($mdlext-light-accordion-header-background-color-base, 0.40) !default;\n$mdlext-light-accordion-header-focus-outline-color     : darken($mdlext-light-accordion-header-border-color, 3%) !default;\n$mdlext-light-accordion-header-disabled-color          : rgba($mdlext-light-accordion-header-background-color-base, 0.12) !default;\n$mdlext-light-accordion-header-secondary-color         : $mdlext-color-black !default;\n$mdlext-light-accordion-header-secondary-color-disabled: rgba($mdlext-color-black, 0.26) !default;\n$mdlext-light-accordion-header-highlight-color         : darken($mdlext-light-accordion-header-border-color, 6%) !default;\n$mdlext-light-accordion-ripple-color                   : rgba($mdlext-light-accordion-header-background-color-base, 0.4) !default;\n$mdlext-light-accordion-content-color                  : inherit !default;\n$mdlext-light-accordion-content-background-color       : transparent !default;\n\n\n// Bordered fields\n$mdlext-light-bordered-field-input-text-color               : inherit !default;\n$mdlext-light-bordered-field-border-color                   : $mdlext-light-input-text-bottom-border-color !default;\n$mdlext-light-bordered-field-background-color               : rgba($mdlext-light-content-background-color, 0.1) !default;\n$mdlext-light-bordered-field-focus-border-color             : $mdlext-light-color-accent-light !default;\n$mdlext-light-bordered-field-focus-background-color         : rgba(darken($mdlext-light-bordered-field-background-color, 10%), 0.1) !default;\n\n$mdlext-light-bordered-field-input-text-disabled-text-color : $mdlext-light-input-text-disabled-text-color;\n$mdlext-light-bordered-field-disabled-border-color          : $mdlext-light-input-text-disabled-color !default;\n$mdlext-light-bordered-field-disabled-background-color      : $mdlext-light-bordered-field-background-color !default;\n\n$mdlext-light-bordered-field-input-text-error-color         : $mdlext-light-bordered-field-input-text-color !default;\n$mdlext-light-bordered-field-error-border-color             : $mdlext-light-input-text-error-color !default;\n$mdlext-light-bordered-field-error-background-color         : rgba(lighten($mdlext-light-bordered-field-error-border-color, 50%), 0.5) !default;\n$mdlext-light-bordered-field-error-focus-border-color       : darken($mdlext-light-bordered-field-error-border-color, 10%) !default;\n$mdlext-light-bordered-field-error-focus-background-color   : $mdlext-light-bordered-field-error-background-color !default;\n\n$mdlext-light-bordered-field-input-text-label-color         : $mdlext-light-input-text-label-color !default;\n$mdlext-light-bordered-field-input-text-label-focus-color   : $mdlext-light-bordered-field-focus-border-color !default;\n$mdlext-light-bordered-field-input-text-label-error-color   : $mdlext-light-bordered-field-error-border-color !default;\n$mdlext-light-bordered-field-input-text-label-disabled-color: $mdlext-light-input-text-disabled-text-color !default;\n\n\n\n// ----------------------------------------------------------------\n// Dark Color Theme.\n// ----------------------------------------------------------------\n$mdlext-dark-color-primary:                       #FFC107 !default;\n$mdlext-dark-color-primary-dark:                  #FFA000 !default;\n$mdlext-dark-color-primary-light:                 #FFC107 !default;             // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-dark-color-primary-contrast:              #FFF8E1 !default;             // text color on primary/primary dark background\n$mdlext-dark-color-accent:                        #536DFE !default;\n$mdlext-dark-color-accent-light:                  #536DFE !default;             // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-dark-color-accent-contrast:               #FFFFFF !default;\n\n$mdlext-dark-content-background-color:            #303030 !default;             // #424242 or #303030, background color on content (paper/card) background\n$mdlext-dark-text-color-primary:                  rgba(#FFFFFF, 1.00) !default; // text color on content (paper/card) background\n$mdlext-dark-text-color-secondary:                rgba(#FFFFFF, 0.70) !default; // text color on content (paper/card) background\n$mdlext-dark-text-color-disabled:                 rgba(#FFFFFF, 0.50) !default; // disabled text, hint text, and icons\n$mdlext-dark-divider-color:                       rgba(#FFFFFF, 0.12) !default; // -> $card-border-color\n$mdlext-dark-error-color:                         #FF1744 !default;\n\n// Anchor\n$mdlext-dark-text-link-color:                     $mdlext-dark-color-accent !default;\n\n// Card\n$mdlext-dark-card-background-color:               $mdlext-dark-content-background-color !default;\n$mdlext-dark-card-text-color:                     $mdlext-dark-text-color-primary !default;\n$mdlext-dark-card-image-placeholder-color:        $mdlext-dark-color-accent !default;\n$mdlext-dark-card-supporting-text-text-color:     rgba($mdlext-color-white, 0.70) !default;\n$mdlext-dark-card-border-color:                   rgba(0, 0, 0, 0.1) !default;\n$mdlext-dark-card-subtitle-color:                 rgba($mdlext-color-black, 0.70) !default;\n\n//  Item\n\n// Default Item Colors\n$mdlext-dark-default-item-text-color:             rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-default-item-outline-color:          $mdlext-palette-grey-700 !default;\n$mdlext-dark-default-item-hover-bg-color:         $mdlext-palette-grey-900 !default;\n$mdlext-dark-default-item-focus-bg-color:         $mdlext-palette-grey-900 !default;\n$mdlext-dark-default-item-active-bg-color:        $mdlext-palette-grey-800 !default;\n$mdlext-dark-default-item-divider-color:          rgba($mdlext-color-white, 0.20) !default;\n\n// Disabled Button Colors\n$mdlext-dark-disabled-item-text-color:            $mdlext-palette-grey-500 !default;\n\n// Dropdown menu / menu-button\n$mdlext-dark-default-dropdown-bg-color:           $mdlext-color-black !default;\n\n// Badge\n$mdlext-dark-badge-color:                         $mdlext-dark-color-accent-contrast !default;\n$mdlext-dark-badge-color-inverse:                 $mdlext-dark-color-accent !default;\n$mdlext-dark-badge-background:                    $mdlext-dark-color-accent !default;\n$mdlext-dark-badge-background-inverse:            $mdlext-dark-color-accent-contrast !default;\n\n// Default button colors.\n$mdlext-dark-button-primary-color:                rgba($mdlext-palette-grey-500, 0.20) !default;\n$mdlext-dark-button-secondary-color:              $mdlext-color-white !default;\n$mdlext-dark-button-hover-color:                  $mdlext-dark-button-primary-color !default;\n$mdlext-dark-button-active-color:                 rgba($mdlext-palette-grey-500, 0.40) !default;\n$mdlext-dark-button-focus-color:                  rgba($mdlext-color-black, 0.12) !default;\n\n// Colored button colors.\n$mdlext-dark-button-primary-color-alt:            $mdlext-dark-color-primary-light !default;\n$mdlext-dark-button-secondary-color-alt:          $mdlext-dark-color-primary-contrast !default;\n$mdlext-dark-button-hover-color-alt:              darken($mdlext-dark-color-primary-light, 10%) !default;\n$mdlext-dark-button-active-color-alt:             darken($mdlext-dark-color-primary-light, 10%) !default;\n$mdlext-dark-button-focus-color-alt:              $mdlext-dark-button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$mdlext-dark-button-ripple-color-alt:             $mdlext-dark-color-primary-contrast !default;\n\n// Disabled button colors.\n$mdlext-dark-button-primary-color-disabled:       rgba($mdlext-color-white, 0.12) !default;\n$mdlext-dark-button-secondary-color-disabled:     rgba($mdlext-color-white, 0.26) !default;\n\n// FAB colors and sizes.\n$mdlext-dark-button-fab-color-alt:                $mdlext-dark-color-accent !default;\n$mdlext-dark-button-fab-hover-color-alt:          $mdlext-dark-color-accent !default;\n$mdlext-dark-button-fab-active-color-alt:         $mdlext-dark-color-accent !default;\n$mdlext-dark-button-fab-text-color-alt:           $mdlext-dark-color-accent-contrast !default;\n$mdlext-dark-button-fab-ripple-color-alt:         $mdlext-dark-color-accent-contrast !default;\n\n// Slider\n$mdlext-dark-range-bg-color:                      rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-range-color:                         $mdlext-dark-color-accent-light !default;\n$mdlext-dark-range-faded-color:                   rgba($mdlext-dark-color-accent-light, 0.50) !default;\n$mdlext-dark-range-bg-focus-color:                rgba($mdlext-color-white, 0.50) !default;\n\n// Textfields\n$mdlext-dark-input-text-background-color:         transparent !default;\n$mdlext-dark-input-text-label-color:              rgba($mdlext-color-white, 0.50) !default;\n$mdlext-dark-input-text-bottom-border-color:      rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-input-text-highlight-color:          $mdlext-dark-color-accent-light !default;\n$mdlext-dark-input-text-disabled-color:           rgba($mdlext-color-white, 0.12) !default;\n$mdlext-dark-input-text-disabled-text-color:      rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-input-text-error-color:              $mdlext-dark-error-color !default;\n\n// Checkboxes\n$mdlext-dark-checkbox-color:                      $mdlext-dark-color-accent-light !default;\n$mdlext-dark-checkbox-off-color:                  rgba($mdlext-color-white, 0.50) !default;\n$mdlext-dark-checkbox-disabled-color:             rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-checkbox-focus-color:                rgba($mdlext-dark-color-accent-light, 0.26) !default;\n\n// Icon Toggles\n$mdlext-dark-icon-toggle-color:                   $mdlext-palette-grey-700 !default;\n$mdlext-dark-icon-toggle-focus-color:             $mdlext-dark-button-focus-color !default;\n$mdlext-dark-icon-toggle-checked-color:           $mdlext-dark-color-accent-light !default;\n$mdlext-dark-icon-toggle-checked-focus-color:     rgba($mdlext-dark-color-accent-light, 0.26) !default;\n$mdlext-dark-icon-toggle-disabled-color:          rgba($mdlext-color-white, 0.50) !default;\n\n// Radio Buttons\n$mdlext-dark-radio-color:                         $mdlext-dark-color-accent-light !default;\n$mdlext-dark-radio-off-color:                     rgba($mdlext-color-white, 0.50) !default;\n$mdlext-dark-radio-disabled-color:                rgba($mdlext-color-white, 0.26) !default;\n\n// Switches\n$mdlext-dark-switch-color:                        $mdlext-dark-color-accent-light !default;\n$mdlext-dark-switch-faded-color:                  rgba($mdlext-dark-color-accent-light, 0.26) !default;\n$mdlext-dark-switch-thumb-color:                  $mdlext-dark-switch-color !default;\n$mdlext-dark-switch-track-color:                  rgba($mdlext-dark-color-accent-light, 0.5) !default;\n$mdlext-dark-switch-off-thumb-color:              $mdlext-palette-grey-50 !default;\n$mdlext-dark-switch-off-track-color:              rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-switch-disabled-thumb-color:         $mdlext-palette-grey-50 !default;\n$mdlext-dark-switch-disabled-track-color:         rgba($mdlext-color-white, 0.12) !default;\n\n// Data table\n$mdlext-dark-data-table-background-color:               $mdlext-dark-content-background-color !default;\n$mdlext-dark-data-table-header-color:                   rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-data-table-header-sorted-color:            rgba($mdlext-color-white, 0.87) !default;\n$mdlext-dark-data-table-header-sorted-icon-hover-color: rgba($mdlext-color-white, 0.26) !default;\n$mdlext-dark-data-table-hover-color:                    $mdlext-dark-default-item-hover-bg-color !default;\n$mdlext-dark-data-table-selection-color:                $mdlext-dark-default-item-active-bg-color !default;\n$mdlext-dark-data-table-divider-color:                  rgba($mdlext-color-white, 0.12) !default;\n$mdlext-dark-data-table-dividers:                       1px solid $mdlext-dark-data-table-divider-color !default;\n\n\n// Selectfield\n// Uses variables from textfield\n\n\n// Accordion\n$mdlext-dark-accordion-header-background-color-base   : $mdlext-color-black !default;\n$mdlext-dark-accordion-header-background-color        : rgba($mdlext-dark-accordion-header-background-color-base, 1.0) !default;\n$mdlext-dark-accordion-header-background-open-color   : rgba($mdlext-dark-accordion-header-background-color-base, 0.9) !default;\n$mdlext-dark-accordion-header-border-color            : $mdlext-palette-grey-800 !default;\n$mdlext-dark-accordion-header-background-hover-color  : rgba($mdlext-dark-accordion-header-background-color-base, 0.5) !default;\n$mdlext-dark-accordion-header-background-active-color : rgba($mdlext-dark-accordion-header-background-color-base, 0.6) !default;\n$mdlext-dark-accordion-header-focus-outline-color     : lighten($mdlext-dark-accordion-header-border-color, 40%) !default;\n$mdlext-dark-accordion-header-disabled-color          : rgba($mdlext-dark-accordion-header-background-color-base, 0.4) !default;\n$mdlext-dark-accordion-header-secondary-color         : $mdlext-dark-text-color-primary !default;\n$mdlext-dark-accordion-header-secondary-color-disabled: $mdlext-dark-text-color-disabled !default;\n$mdlext-dark-accordion-header-highlight-color         : lighten($mdlext-dark-accordion-header-border-color, 40%) !default;\n$mdlext-dark-accordion-ripple-color                   : rgba($mdlext-dark-accordion-header-background-color-base, 0.3) !default;\n$mdlext-dark-accordion-content-color                  : inherit !default;\n$mdlext-dark-accordion-content-background-color       : transparent !default;\n\n\n// Bordered fields\n$mdlext-dark-bordered-field-input-text-color               : inherit !default;\n$mdlext-dark-bordered-field-border-color                   : $mdlext-dark-input-text-bottom-border-color !default;\n$mdlext-dark-bordered-field-background-color               : rgba($mdlext-dark-content-background-color, 0.1) !default;\n$mdlext-dark-bordered-field-focus-border-color             : $mdlext-dark-color-accent-light !default;\n$mdlext-dark-bordered-field-focus-background-color         : rgba(darken($mdlext-dark-bordered-field-background-color, 10%), 0.1) !default;\n\n$mdlext-dark-bordered-field-input-text-disabled-text-color : $mdlext-dark-input-text-disabled-text-color;\n$mdlext-dark-bordered-field-disabled-border-color          : $mdlext-dark-input-text-disabled-color !default;\n$mdlext-dark-bordered-field-disabled-background-color      : $mdlext-dark-bordered-field-background-color !default;\n\n$mdlext-dark-bordered-field-input-text-error-color         : $mdlext-dark-bordered-field-input-text-color !default;\n$mdlext-dark-bordered-field-error-border-color             : $mdlext-dark-input-text-error-color !default;\n$mdlext-dark-bordered-field-error-background-color         : rgba($mdlext-dark-bordered-field-error-border-color, 0.1) !default;\n$mdlext-dark-bordered-field-error-focus-border-color       : darken($mdlext-dark-bordered-field-error-border-color, 10%) !default;\n$mdlext-dark-bordered-field-error-focus-background-color   : $mdlext-dark-bordered-field-error-background-color !default;\n\n$mdlext-dark-bordered-field-input-text-label-color         : $mdlext-dark-input-text-label-color !default;\n$mdlext-dark-bordered-field-input-text-label-focus-color   : $mdlext-dark-bordered-field-focus-border-color !default;\n$mdlext-dark-bordered-field-input-text-label-error-color   : $mdlext-dark-bordered-field-error-border-color !default;\n$mdlext-dark-bordered-field-input-text-label-disabled-color: $mdlext-dark-input-text-disabled-text-color !default;\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_variables.scss","///\n/// Returns the opposite direction of each direction in a list\n/// Modified from: https://css-tricks.com/snippets/sass/opposite-direction-function/\n/// @author Hugo Giraudel\n/// @param {List} $directions - List of initial directions\n/// @return {List} - List of opposite directions\n@function mdlext-opposite-direction($directions) {\n  $opposite-directions: ();\n  $direction-map: (\n    'top':    'bottom',\n    'right':  'left',\n    'bottom': 'top',\n    'left':   'right',\n    'center': 'center',\n    'ltr':    'rtl',\n    'rtl':    'ltr'\n  );\n\n  @each $direction in $directions {\n    $direction: to-lower-case($direction);\n\n    @if map-has-key($direction-map, $direction) {\n      $opposite-directions: append($opposite-directions, unquote(map-get($direction-map, $direction)));\n    }\n    @else {\n      @warn \"No opposite direction can be found for `#{$direction}`. Direction omitted.\";\n    }\n  }\n\n  @return $opposite-directions;\n}\n\n///\n/// Strip unit from value\n/// @author Hugo Giraudel\n/// http://hugogiraudel.com/2013/08/12/sass-functions/\n/// https://css-tricks.com/snippets/sass/strip-unit-function/\n/// @param {Number} $number - Number to remove unit from\n/// @return {Number} - Unitless number\n\n@function strip-unit($number) {\n  @return if(type-of($number) == 'number' and not unitless($number), $number / ($number * 0 + 1), $number);\n}\n\n///\n/// Clamping a number means restricting it between min and max values.\n///    4 clamped to 1-3 equals 3.\n///   -5 clamped to 1-10 equals 1.\n///   42 clamped to 10-100 equals 42.\n/// @author Hugo Giraudel\n/// http://hugogiraudel.com/2013/08/12/sass-functions/\n/// @param {Number} $value - The value to clamp\n/// @param {Number} $min - min value in range\n/// @param {Number} $max - Max value in range\n/// @return {Number} - The clamped value\n\n@function clamp($value, $min, $max) {\n  @return if($value > $max, $max, if($value < $min, $min, $value));\n}\n\n///\n/// Convert one unit into another\n/// @author Hugo Giraudel\n/// http://www.sitepoint.com/understanding-sass-units/\n/// @param {Number} $value - Initial value\n/// @param {String} $unit - Desired unit\n/// @return {Number}\n/// @throw Error if `$unit` does not exist or if units are incompatible.\n\n/* stylelint-disable */\n@function convert-unit($value, $unit) {\n  $units: (\n    'px'  : 0px,\n    'cm'  : 0cm,\n    'mm'  : 0mm,\n    '%'   : 0%,\n    'ch'  : 0ch,\n    'in'  : 0in,\n    'em'  : 0em,\n    'rem' : 0rem,\n    'pt'  : 0pt,\n    'pc'  : 0pc,\n    'ex'  : 0ex,\n    'vw'  : 0vw,\n    'vh'  : 0vh,\n    'vmin': 0vmin,\n    'vmax': 0vmax,\n    'deg' : 0deg,\n    'turn': 0turn,\n    'rad' : 0rad,\n    'grad': 0grad,\n    's'   : 0s,\n    'ms'  : 0ms,\n    'Hz'  : 0Hz,\n    'kHz' : 0kHz,\n    'dppx': 0dppx,\n    'dpcm': 0dpcm,\n    'dpi' : 0dpi,\n  );\n\n  @if map-has-key($units, $unit) {\n    @return map-get($units, $unit) + $value;\n  }\n\n  @error \"Unknown unit `#{$unit}`.\";\n}\n/* stylelint-enable */\n\n\n///\n/// Replace `$search` with `$replace` in `$string`\n/// @author Hugo Giraudel, http://hugogiraudel.com/2014/01/13/sass-string-replacement-function/\n/// @param {String} $string - Initial string\n/// @param {String} $search - Substring to replace\n/// @param {String} $replace ('') - New value\n/// @return {String} - Updated string\n@function str-replace($string, $search, $replace: '') {\n  $index: str-index($string, $search);\n\n  @if $index {\n    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n  }\n  @return $string;\n}\n\n///\n/// @function explode() -- split a string into a list of strings\n/// @author https://gist.github.com/danielpchen/3677421ea15dcf2579ff\n///  {string} $string: the string to be split\n///  {string} $delimiter: the boundary string\n///  @return {list} the result list\n@function explode($string, $delimiter: ',') {\n  $result: ();\n  @if $delimiter == \"\" {\n    @for $i from 1 through str-length($string) {\n      $result: append($result, str-slice($string, $i, $i));\n    }\n    @return $result;\n  }\n  $exploding: true;\n  @while $exploding {\n    $d-index: str-index($string, $delimiter);\n    @if $d-index {\n      @if $d-index > 1 {\n        $result: append($result, str-slice($string, 1, $d-index - 1));\n        $string: str-slice($string, $d-index + str-length($delimiter));\n      }\n      @else if $d-index == 1 {\n        $string: str-slice($string, 1, $d-index + str-length($delimiter));\n      }\n      @else {\n        $result: append($result, $string);\n        $exploding: false;\n      }\n    }\n    @else {\n      $result: append($result, $string);\n      $exploding: false;\n    }\n  }\n  @return $result;\n}\n\n///\n/// Add `$unit` to `$value`\n/// @author Hugo Giraudel\n///\n/// @param {Number} $value - Value to add unit to\n/// @param {String} $unit - String representation of the unit\n///\n/// @return {Number} - `$value` expressed in `$unit`\n/// @throw Error if `$unit` does not exist or if units are incompatible.\n///\n@function to-length($value, $unit) {\n  $units: (\n    'px'  : 1px,\n    'cm'  : 1cm,\n    'mm'  : 1mm,\n    '%'   : 1%,\n    'ch'  : 1ch,\n    'pc'  : 1pc,\n    'in'  : 1in,\n    'em'  : 1em,\n    'rem' : 1rem,\n    'pt'  : 1pt,\n    'ex'  : 1ex,\n    'vw'  : 1vw,\n    'vh'  : 1vh,\n    'vmin': 1vmin,\n    'vmax': 1vmax\n  );\n\n  @if not index(map-keys($units), $unit) {\n    @error('Invalid unit `#{$unit}`.');\n  }\n\n  @return $value * map-get($units, $unit);\n}\n\n///\n/// Casts a string into a number\n///\n/// @author Hugo Giraudel\n// @param {String | Number} $value - Value to be parsed\n///\n/// @return {Number}\n/// @throw Error if `$value` is not a number or a string.\n///\n@function to-number($value) {\n  @if type-of($value) == 'number' {\n    @return $value;\n  }\n  @else if type-of($value) != 'string' {\n    @error('Value for `to-number` should be a number or a string.');\n  }\n\n  $result: 0;\n  $digits: 0;\n  $minus: str-slice($value, 1, 1) == '-';\n  $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);\n\n  @for $i from if($minus, 2, 1) through str-length($value) {\n    $character: str-slice($value, $i, $i);\n\n    @if not (index(map-keys($numbers), $character) or $character == '.') {\n      @return to-length(if($minus, -$result, $result), str-slice($value, $i));\n    }\n\n    @if $character == '.' {\n      $digits: 1;\n    }\n    @else if $digits == 0 {\n      $result: $result * 10 + map-get($numbers, $character);\n    }\n    @else {\n      $digits: $digits * 10;\n      $result: $result + map-get($numbers, $character) / $digits;\n    }\n  }\n\n  @return if($minus, -$result, $result);\n}\n\n///\n/// Convert `$rgb-string` to a number list\n/// @author Leif Olsen\n/// @param {String | Number} $value - Value to be parsed\n/// @return {list} the rgb number list\n/// @throw Error if `$value` is not a number, color or a string.\n@function rgb-string-to-numbers($value) {\n  @if type-of($value) == 'number' or type-of($value) == 'color' {\n    @return $value;\n  }\n  @else if type-of($value) != 'string' {\n    @error('Value for `rgb-string-to-numbers` should be a number or a string.');\n  }\n\n  $s: str-replace($value, \"rgba\");\n  $s: str-replace($s, \"rgb\");\n  $s: str-replace($s, \"(\");\n  $s: str-replace($s, \")\");\n  $s: str-replace($s, \" \");\n  $l: explode($s);\n  $result: ();\n  @for $i from 1 through length($l) {\n    $result: append($result, to-number(nth($l, $i)));\n  }\n  @return $result;\n}\n\n///\n/// Convert `$rgb-string` to a corresponding hex value\n/// @author Leif Olsen\n/// @param {String | Number} $value - Value to be parsed\n/// @return {number} the rgb hex value\n/// @throw Error if `$value` is not a number, color or a string.\n@function rgb-string-to-hex($value) {\n  @if type-of($value) == 'number' or type-of($value) == 'color' {\n    @return $value;\n  }\n  @else if type-of($value) != 'string' {\n    @error('Value for `rgb-string-to-numbers` should be a number or a string.');\n  }\n  $l: rgb-string-to-numbers($value);\n  @return rgb(nth($l, 1), nth($l, 2), nth($l, 3));\n}\n\n\n///\n/// Convert hex color to a coresponding `$rgb-string`\n/// @author https://github.com/google/material-design-lite/issues/1689\n/// @param {Number} $hexColor - Value to convert\n/// @return {String} the rgb string value\n///\n/// @example - $color-primary: hex-to-string(#333);\n@function hex-to-rgb-string($hexColor) {\n  // 0.999999 val in alpha actually compiles to 1.0\n  $rgbaVal:  inspect(rgba($hexColor, 0.9999999));\n\n  // slice substring between 'rgba(' and '1.0)'\n  @return str-slice($rgbaVal, 6, str-length($rgbaVal)-4);\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_functions.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n@import \"../mixins\";\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss","@import \"functions\";\n\n/// Triangle helper mixin\n/// Modified from: http://blustemy.io/drawing-pure-css-arrows-with-mixins/\n///                https://css-tricks.com/snippets/sass/css-triangle-mixin/\n/// @param {Direction} $direction - Triangle direction, either `top`, `right`, `bottom` or `left`\n/// @param {Color} $color [currentcolor] - Triangle color\n/// @param {Length} $size [1em] - Triangle size\n@mixin mdlext-arrow($direction: bottom, $base-width: 15px, $length: 10px, $color: inherit, $font-size: inherit) {\n  content: '';\n  width: 0;\n  height: 0;\n  font-size: $font-size;\n  line-height: $font-size;\n  border-#{mdlext-opposite-direction($direction)}: $length solid $color;\n  border-#{mdlext-opposite-direction($direction)}-width: $length;\n  border-#{mdlext-opposite-direction($direction)}-style: solid;\n  border-#{mdlext-opposite-direction($direction)}-color: $color;\n\n  $perpendicular-borders: ($base-width / 2) solid transparent;\n\n  @if $direction == top or $direction == bottom {\n    border-left: $perpendicular-borders;\n    border-right: $perpendicular-borders;\n  }\n  @else if $direction == right or $direction == left {\n    border-bottom: $perpendicular-borders;\n    border-top: $perpendicular-borders;\n  }\n}\n\n/// Hide element while making it readable for screen readers\n/// Copied from HTML5Boilerplate:\n/// https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css#L119-L133\n@mixin mdlext-visually-hidden() {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n\n/// Toggle for aria-expanded attribute\n///\n/// @author Leif Olsen\n/// @param {Font} $font-family ['Material Icons'] - Font family\n/// @param {Length} $font-size [24px] - Font size\n/// @param {string} $icon ['+'] - icon to display when 'aria-expanded=\"false\"'\n/// @param {string} $icon-expanded ['-'] - icon to display when 'aria-expanded=\"true\"'\n/// @link https://github.com/google/material-design-icons Modified from '.material-icons' class\n/// @param {Length} $icon-offset [0] - Icon offset\n///\n/// @example - +/- toggle\n///   .plus-minus {\n///     @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: inherit);\n///   }\n///   <div aria-expanded=\"false\">\n///     <i class=\"plus-minus\"></i>\n///   </div>\n///\n/// @example - Material Icons, expand-more/expand_less\n///   .more-less {\n///     @include mdlext-aria-expanded-toggle($content: 'expand_more', $content-expanded: 'expand_less');\n///   }\n///   <div aria-expanded=\"true\">\n///     <i class=\"more-less\"></i>\n///   </div>\n\n@mixin mdlext-aria-expanded-toggle($font-family: 'Material Icons', $font-size: 24px, $icon: '+', $icon-expanded: '-', $icon-offset: 0) {\n  font-family: $font-family;\n  font-weight: inherit;\n  font-style: inherit;\n  font-size: $font-size;  // Preferred icon size\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-transform: none;\n  letter-spacing: normal;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n  vertical-align: middle;\n\n  // Support for all WebKit browsers.\n  -webkit-font-smoothing: antialiased;\n  -webkit-font-feature-settings: 'liga';\n\n  // Support for Safari and Chrome.\n  text-rendering: optimizeLegibility;\n\n  // Support for Firefox.\n  -moz-osx-font-smoothing: grayscale;\n\n  // Support for IE.\n  font-feature-settings: 'liga';\n\n  &::after {\n    content: $icon;\n    margin-left: $icon-offset;\n  }\n\n  [aria-expanded='true'] > & {\n    &::after {\n      content: $icon-expanded;\n      margin-left: $icon-offset;\n    }\n  }\n}\n\n\n/// Keyframe mixin\n/// Modified from: http://sassbreak.com/nested-keyframe-rules-sass/\n/// Modified from: http://sassbreak.com/sass-tools-and-snippets/\n///\n/// @example\n///\n/// .some-element {\n///   animation: 10s linear infinite;\n///\n///   @include mdlext-animation-keyframes {\n///     from {\n///       background-position: 0% 0%;\n///     }\n///     to {\n///       background-position: 114.2857% 0%;\n///     }\n///   }\n/// }\n\n@mixin mdlext-animation-keyframes {\n  $animation-name: unique-id();\n  animation-name: $animation-name;\n\n  @keyframes #{$animation-name} {\n    @content;\n  }\n}\n\n\n/// Flexible title mixin\n/// A flexible title consists of three regions, left, middle and right.\n/// The left and right regions are optional and will typically contain state icons\n/// or act as a toolbar. The middle region should contain the title text.\n///\n/// @author Leif Olsen\n/// @param {String} $class - class name\n/// @gutter {Length} [8px] - horizontal spacing between title elements\n///\n/// @example\n///\n/// @include mdlext-flexible-title(my-title) {\n///   overflow: hidden;\n///   background-color: yellow;\n///   &__text {\n///     font-size: 20px;\n///     letter-spacing: 0.02em;\n///     font-weight: 400;\n///     line-height: 1.1;\n///   }\n/// }\n///\n/// <header class=\"my-title\">\n///   <i class=\"material-icons\" role=\"presentation\" style=\"font-size: 28px;\">info</i>\n///   <h2 class=\"my-title__text\">A title</h2>\n///   <span class=\"my-title__spacer\"></span>\n///   <i class=\"mdlext-aria-expanded-more-less\" role=\"presentation\" style=\"font-size: 28px;\"></i>\n/// </header>\n\n@mixin mdlext-flexible-title($class, $gutter: 8px) {\n  .#{$class} {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    display: flex;\n    align-self: stretch;\n    align-items: center;\n    margin: 0;\n    padding: 0 $gutter;\n\n    &__text,\n    &__text > * {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0 $gutter 0 0;\n    }\n\n    > *:last-child {\n      padding-right: 0;\n    }\n\n    // Used to align elements inside a header or drawer, by growing to fill\n    // remaining space. Commonly used for aligning elements to the right.\n    &__spacer {\n      flex: 1;\n    }\n\n    @content;\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_mixins.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-layout__sticky-header {\n  position: absolute;\n  overflow: visible;\n  background: $mdlext-sticky-header-background;\n  transition: 0.1s ease-in-out;\n\n  &.mdlext-is-scroll {\n    background: $mdlext-sticky-header-background-scroll;\n  }\n}\n\n*:not(.is-small-screen) .mdlext-layout__sticky-header {\n  .mdl-layout__drawer-button {\n    visibility: hidden;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding;\n  }\n}\n\n*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header,\n.is-small-screen.has-drawer .mdlext-layout__sticky-header {\n  display: flex;\n\n  .mdl-layout__drawer-button {\n    visibility: visible;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding + $layout-drawer-button-desktop-size;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/sticky-header/_sticky-header.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SASS based on css from Google Chrome Dialog polyfill, https://github.com/GoogleChrome/dialog-polyfill\n * @include 'node_modules/dialog-polyfill/dialog-polyfill.css' before using this\n */\n\n@import \"../variables\";\n\ndialog.mdlext-dialog {\n  position: absolute;\n  border: 0;\n  opacity: 0;\n  padding: $mdlext-dialog-padding;\n  background-color: $mdlext-dialog-background-color;\n\n  &[open] {\n    animation: mdlext-open-dialog $mdlext-dialog-open-animation;\n  }\n  &[open]::backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n  &[open] + .backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n}\n\n@keyframes mdlext-darken-backdrop {\n  to { background: $mdlext-dialog-backdrop-color; }\n}\n@keyframes mdlext-open-dialog {\n  to { opacity: 1; }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/dialog/dialog.scss","@charset \"UTF-8\";\n\n/**\n * This code is modified from Material Design Lite _grid.sass,\n * which is Licensed under the Apache License, Version 2.0\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n///////////////////////////////////////////////////////////////////////\n//\n// Grid media queries, modified from Material Design Lite _grid.sass\n//\n///////////////////////////////////////////////////////////////////////\n// Use of this module requires the user to include variables from material-design-lite in hers/his main SASS module\n//@import \"../../node_modules/material-design-lite/src/variables\";\n\n\n.mdlext-grid {\n  display: flex;\n  flex-flow: row wrap;\n  margin: 0 auto;\n  align-items: stretch;\n\n  &.mdlext-grid--no-spacing {\n    padding: 0;\n  }\n}\n\n.mdlext-cell {\n  box-sizing: border-box;\n}\n\n\n.mdlext-cell--top {\n  align-self: flex-start;\n}\n\n.mdlext-cell--middle {\n  align-self: center;\n}\n\n.mdlext-cell--bottom {\n  align-self: flex-end;\n}\n\n.mdlext-cell--stretch {\n  align-self: stretch;\n}\n\n.mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell {\n  margin: 0;\n}\n\n// Define order override classes.\n@for $i from 1 through $grid-max-columns {\n  .mdlext-cell--order-#{$i} {\n    order: $i;\n  }\n}\n\n\n// Mixins for width calculation.\n@mixin partial-size($size, $columns, $gutter) {\n  width: calc(#{(($size / $columns) * 100) + \"%\"} - #{$gutter});\n\n  .mdlext-grid--no-spacing > & {\n    width: #{(($size / $columns) * 100) + \"%\"};\n  }\n}\n\n@mixin full-size($gutter) {\n  @include partial-size(1, 1, $gutter);\n}\n\n@mixin offset-size($size, $columns, $gutter) {\n  margin-left: calc(#{(($size / $columns) * 100) + \"%\"} + #{$gutter / 2});\n\n  .mdlext-grid.mdlext-grid--no-spacing > & {\n    margin-left: #{(($size / $columns) * 100) + \"%\"};\n  }\n}\n\n\n\n////////// Phone //////////\n\n/* stylelint-disable */\n@media (max-width: $grid-tablet-breakpoint - 1) {\n/* stylelint-enable */\n  .mdlext-grid {\n    padding: $grid-phone-margin - ($grid-phone-gutter / 2);\n  }\n\n  .mdlext-cell {\n    margin: $grid-phone-gutter / 2;\n    @include partial-size($grid-cell-default-columns, $grid-phone-columns, $grid-phone-gutter);\n  }\n\n  .mdlext-cell--hide-phone {\n    display: none !important;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    .mdlext-cell--order-#{$i}-phone.mdlext-cell--order-#{$i}-phone {\n      order: $i;\n    }\n  }\n\n  // Define partial sizes for columnNumber < totalColumns.\n  @for $i from 1 through ($grid-phone-columns - 1) {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n      @include partial-size($i, $grid-phone-columns, $grid-phone-gutter);\n    }\n  }\n\n  // Define 100% for everything else.\n  @for $i from $grid-phone-columns through $grid-desktop-columns {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n      @include full-size($grid-phone-gutter);\n    }\n  }\n\n  // Define valid phone offsets.\n  @for $i from 1 through ($grid-phone-columns - 1) {\n    .mdlext-cell--#{$i}-offset,\n    .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {\n      @include offset-size($i, $grid-phone-columns, $grid-phone-gutter);\n    }\n  }\n}\n\n\n////////// Tablet //////////\n\n/* stylelint-disable */\n@media (min-width: $grid-tablet-breakpoint) and (max-width: $grid-desktop-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-grid {\n    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);\n  }\n\n  .mdlext-cell {\n    margin: $grid-tablet-gutter / 2;\n    @include partial-size($grid-cell-default-columns, $grid-tablet-columns, $grid-tablet-gutter);\n  }\n\n  .mdlext-cell--hide-tablet {\n    display: none !important;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    .mdlext-cell--order-#{$i}-tablet.mdlext-cell--order-#{$i}-tablet {\n      order: $i;\n    }\n  }\n\n  // Define partial sizes for columnNumber < totalColumns.\n  @for $i from 1 through ($grid-tablet-columns - 1) {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n      @include partial-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n    }\n  }\n\n  // Define 100% for everything else.\n  @for $i from $grid-tablet-columns through $grid-desktop-columns {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n      @include full-size($grid-tablet-gutter);\n    }\n  }\n\n  // Define valid tablet offsets.\n  @for $i from 1 through ($grid-tablet-columns - 1) {\n    .mdlext-cell--#{$i}-offset,\n    .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {\n      @include offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n    }\n  }\n}\n\n\n////////// Desktop //////////\n\n@media (min-width: $grid-desktop-breakpoint) {\n  .mdlext-grid {\n    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);\n  }\n\n  .mdlext-cell {\n    margin: $grid-desktop-gutter / 2;\n    @include partial-size($grid-cell-default-columns, $grid-desktop-columns, $grid-desktop-gutter);\n  }\n\n  .mdlext-cell--hide-desktop {\n    display: none !important;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    .mdlext-cell--order-#{$i}-desktop.mdlext-cell--order-#{$i}-desktop {\n      order: $i;\n    }\n  }\n\n  // Define partial sizes for all numbers of columns.\n  @for $i from 1 through $grid-desktop-columns {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {\n      @include partial-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n    }\n  }\n\n  // Define valid desktop offsets.\n  @for $i from 1 through ($grid-desktop-columns - 1) {\n    .mdlext-cell--#{$i}-offset,\n    .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {\n      @include offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/grid/_grid-media-queries.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A lightboard is a translucent surface illuminated from behind, used for situations\n * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\nul.mdlext-lightboard {\n  list-style: none;\n}\n\n.mdlext-lightboard {\n  box-sizing: border-box;\n  margin: 0 auto;\n  padding: 0;\n  display: flex;\n  flex-flow:row wrap;\n  align-items: stretch;\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightboard__slide {\n    background-color: $mdlext-lightboard-slide-background-color;\n    border: 1px solid $mdlext-lightboard-slide-border-color;\n    border-radius: $mdlext-lightboard-slide-border-radius;\n    box-shadow: $mdlext-lightboard-slide-box-shadow;\n    position: relative;\n    display: block;\n    max-width: $mdlext-lightboard-slide-max-size;\n\n    &::before {\n      // 1:1 ratio\n      // TODO: Use a class for ratio so the grid can display slides with different ratios (16:9, 16:10, 4:3 ...)\n      content: '';\n      display: block;\n      padding-top: 100%;\n    }\n    &:hover,\n    &:active,\n    &:focus {\n      border-color: $mdlext-lightboard-slide-border-color-hover;\n      background-color: $mdlext-lightboard-slide-background-color-hover;\n      box-shadow: $mdlext-lightboard-slide-box-shadow-hover;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-lightboard-focus-outline-color;\n    }\n    &[aria-selected='true'] {\n      background-color: $mdlext-lightboard-slide-active-bacground-color;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &__frame,\n    &__ripple-container {\n      text-decoration: none;\n      display: block;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n\n      &:focus {\n        outline-offset: -2px;\n        outline-color: $mdlext-lightboard-focus-outline-color;\n      }\n      & .mdl-ripple {\n        background: $mdlext-lightboard-ripple-color;\n      }\n      figure {\n        display: block;\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n\n        img {\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n          margin: auto;\n          max-width: 100%;\n          max-height: 100%;\n          border-width: 0;\n          border-radius: $mdlext-lightboard-slide-inner-border-radius;\n        }\n        figcaption {\n          @include typo-caption($colorContrast: false, $usePreferred: true);\n\n          color: $mdlext-lightboard-figcaption-text-color;\n          position: absolute;\n          bottom: -2px;\n          white-space: nowrap;\n          overflow: hidden;\n          max-width: 100%;\n          width: 100%;\n          text-align: center;\n          text-overflow: ellipsis;\n          padding: 4px 0;\n        }\n      }\n      &:hover {\n        figcaption {\n          // As far as I can see there is no way to darken/lighten a text color\n          // defined by MDL, due to the \"unqote\" functions.\n          // So this is a hack\n          color: rgba(0, 0, 0, 1) !important;\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      }\n    }\n  }\n}\n\n////// Media / Element queries default, Small //////\n.mdlext-lightboard {\n  padding: calc((#{$mdlext-lightboard-small-margin} - #{$mdlext-lightboard-small-gutter}) / 2);\n\n  .mdlext-lightboard__slide {\n    margin: calc(#{$mdlext-lightboard-small-gutter} / 2);\n    width: calc(1 / #{$mdlext-lightboard-small-columns} * 100% - #{$mdlext-lightboard-small-gutter});\n\n    .mdlext-lightboard__slide__frame figure {\n      margin: $mdlext-lightboard-small-frame-width;\n    }\n  }\n  &.mdlext-lightboard--no-spacing {\n    padding: 0;\n\n    .mdlext-lightboard__slide {\n      margin: 0;\n      width: calc(1 / #{$mdlext-lightboard-small-columns} * 100%);\n    }\n  }\n}\n\n// Import one of _lightboard-media-queries.scss or _lightboard-eq-js.scss to complete SASS\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard.scss","@charset \"UTF-8\";\n\n//////////////////////////////\n//\n// Lightboard media queries\n//\n//////////////////////////////\n@import \"../variables\";\n\n////////// Small /////////////\n//@media (max-width: $mdlext-lightboard-medium-small-breakpoint - 1) {\n//  // This is the default, see: _lightboard.scss\n//}\n\n////////// Medium small //////////\n/* stylelint-disable */\n@media (min-width: $mdlext-lightboard-medium-small-breakpoint) and (max-width: $mdlext-lightboard-medium-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-medium-small-margin} - #{$mdlext-lightboard-medium-small-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-small-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100% - #{$mdlext-lightboard-medium-small-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-small-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100%);\n      }\n    }\n  }\n}\n\n////////// Medium //////////\n/* stylelint-disable */\n@media (min-width: $mdlext-lightboard-medium-breakpoint) and (max-width: $mdlext-lightboard-medium-large-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-medium-margin} - #{$mdlext-lightboard-medium-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100% - #{$mdlext-lightboard-medium-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100%);\n      }\n    }\n  }\n}\n\n////////// Medium large //////////\n/* stylelint-disable */\n@media (min-width: $mdlext-lightboard-medium-large-breakpoint)  and (max-width: $mdlext-lightboard-large-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-medium-large-margin} - #{$mdlext-lightboard-medium-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100% - #{$mdlext-lightboard-medium-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100%);\n      }\n    }\n  }\n}\n\n////////// Large //////////\n@media (min-width: $mdlext-lightboard-large-breakpoint) {\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-large-margin} - #{$mdlext-lightboard-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-large-columns} * 100% - #{$mdlext-lightboard-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-large-columns} * 100%);\n      }\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard-media-queries.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-lightbox {\n  user-select: none;\n  cursor: default;\n  position: relative;\n  width: auto;\n  max-width: 100%;\n  margin: 0 auto;\n  border: $mdlext-lightbox-border;\n  border-radius: $mdlext-lightbox-border-radius;\n  background-color: $mdlext-lightbox-background-color;\n  box-sizing: border-box;\n  outline: 0;\n  display: block; // display: flex and IE11 has issues with reposition. Set display:block for now.\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightbox__slider {\n    // Displays prevvious, current and next image while dragging\n    // Elements are created by lightbox component when dragging starts\n    position: absolute;\n    top: 0;\n    left: 0;\n    display: flex;\n    justify-content: center;\n\n    .mdlext-lightbox__slider__slide {\n      flex-shrink: 0;\n      display: block;\n      text-align: left;\n      color: #7f7f7f;\n      background-size: cover;\n      background-position: center;\n      background-repeat: no-repeat;\n\n      //&:nth-child(1),\n      //&:nth-child(3) {\n      //  filter: blur(1px);\n      //}\n    }\n  }\n\n  figure {\n    margin: $mdlext-lightbox-figure-margin;\n    padding: $mdlext-lightbox-figure-padding;\n    position: relative;\n\n    img {\n      width: 100%;\n      max-width: 100%;\n      height: auto;\n      border: 0;\n      outline: 0;\n    }\n    figcaption {\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      display: block;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      max-width: 100%;\n      height: auto;\n      max-height: 50%;\n      overflow: auto;\n      padding: 8px;\n      background-color: $mdlext-lightbox-figcaption-background-color;\n      transform-origin: bottom;\n      transform: scaleY(0);\n      transition: 0.2s ease-in-out;\n\n      &.mdlext-lightbox__show-figcaption {\n        transform: scaleY(1);\n      }\n      tbody {\n        th {\n          text-align: left;\n        }\n        th,\n        td {\n          vertical-align: text-top;\n        }\n      }\n    }\n  }\n  .mdl-card__menu {\n    color: #ffffff;\n    z-index: 1;\n  }\n  footer {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    background-color: $mdlext-lightbox-footer-background-color;\n\n    .mdl-card__supporting-text {\n      flex: 1;\n      overflow: hidden;\n      padding: 0;\n      height: $card-supporting-text-line-height;\n      width: 100%;\n    }\n    nav {\n      display: flex;\n    }\n  }\n\n  &.mdlext-lightbox--sticky-footer footer {\n    position: fixed;\n    bottom: 0;\n    left: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightbox/_lightbox.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A carousel ...\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\nul.mdlext-carousel {\n  list-style: none;\n}\n\n.mdlext-carousel {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  height: 100%;  // Use a container to constrain height and width\n  width: 100%;\n  display: block;\n  white-space: nowrap;\n  font-size: 0;\n  background-color: transparent;\n}\n\n.mdlext-carousel__slide {\n  box-sizing: border-box;\n  display: inline-block;\n  position: relative;\n  outline: 0;\n  margin: 0 $mdlext-carousel-slide-margin-horizontal;\n  padding:0;\n  height: 100%;\n  border-top: $mdlext-carousel-slide-border-top-width solid transparent; // Makes room for the animated select/focus line\n\n  //&:focus,\n  &[aria-selected],\n  &[aria-selected='true'] {\n    figcaption {\n      // As far as I can see there is no way to darken/lighten a text color\n      // defined by MDL, due to the \"unqote\" functions.\n      // So this is a hack\n      color: rgba(0, 0, 0, 1) !important;\n      background-color: rgba(255, 255, 255, 0.25);\n    }\n  }\n\n  &[aria-selected]::after,\n  &[aria-selected='true']::after {\n    height: $mdlext-carousel-slide-border-top-width;\n    width: 100%;\n    display: block;\n    content: ' ';\n    top: (-$mdlext-carousel-slide-border-top-width);\n    left: 0;\n    position: absolute;\n    background: $mdlext-carousel-slide-border-top-color;\n    animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n    transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n  }\n\n\n  a {\n    text-decoration: none;\n  }\n\n  figure {\n    box-sizing: border-box;\n    position: relative;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n\n    img {\n      box-sizing: border-box;\n      max-height: 100%;\n    }\n\n    figcaption {\n      box-sizing: border-box;\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      color: $mdlext-carousel-slide-figcaption-color;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      white-space: nowrap;\n      overflow: hidden;\n      max-width: 100%;\n      width: 100%;\n      text-align: center;\n      text-overflow: ellipsis;\n      padding: 4px 0;\n    }\n    &:hover {\n      figcaption {\n        // As far as I can see there is no way to darken/lighten a text color\n        // defined by MDL, due to the \"unqote\" functions.\n        // So this is a hack\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.25);\n      }\n    }\n  }\n\n  .mdlext-carousel__slide__ripple-container {\n    text-decoration: none;\n    display: block;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    outline: 0;\n\n    & .mdl-ripple {\n      background: $mdlext-carousel-slide-ripple-color;\n    }\n  }\n}\n\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/carousel/_carousel.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Copied/Modified/Inspired from/by:\n *   https://github.com/google/material-design-lite/tree/master/src/textfield\n *   http://red-team-design.com/making-html-dropdowns-not-suck/\n *   http://codepen.io/etcpe9/pen/PqyOye,\n *   http://codepen.io/pudgereyem/pen/PqBxQx\n *   https://github.com/MEYVN-digital/mdl-selectfield\n *   https://github.com/mebibou/mdl-selectfield\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../mixins\";\n\n// The container for the selectfield.\n.mdlext-selectfield {\n  box-sizing: border-box;\n  position: relative;\n  font-size: $input-text-font-size;\n  display: inline-block;\n  width: 300px;\n  max-width: 100%;\n  margin: 0;\n  padding: $input-text-vertical-spacing 0;\n\n  // Align buttons, if used.\n  & .mdl-button {\n    bottom: $input-text-vertical-spacing;\n    position: absolute;\n  }\n\n  // Styling the down arrow\n  &::after {\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length);\n\n    position: absolute;\n    right: 0.5em;\n    top: 50%;\n    transform: translateY(-50%);\n    pointer-events: none;\n  }\n}\n\n.mdlext-selectfield.is-disabled {\n  &::after {\n    color: $input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $input-text-disabled-color);\n  }\n}\n\n// Optional class to align right.\n.mdlext-selectfield--align-right {\n  text-align: right;\n}\n\n// Optional class to display at full width.\n.mdlext-selectfield--full-width {\n  width: 100%;\n}\n\n// Optional class to make the select field expandable.\n.mdlext-selectfield--expandable {\n  min-height: $input-text-button-size;\n  min-width: $input-text-button-size;\n  width: auto;\n}\n\n// Styling for the select element.\n.mdlext-selectfield__select {\n\n  // Reset select\n  box-sizing: border-box;\n  border: 0;\n  border-radius: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  appearance: none;\n  text-indent: 0.01px; // Removes default arrow from firefox\n  text-overflow: '';   // Removes default arrow from firefox\n  outline: none;\n  box-shadow: none;\n  // End Reset select\n\n  font-size: $input-text-font-size;\n  font-family: $performance_font;\n  padding: $input-text-padding calc(1.2em + #{$input-text-padding}) $input-text-padding 0;\n  width: $input-text-width;\n  border-bottom: 1px solid $input-text-bottom-border-color;\n  display: block;\n  margin: 0;\n  background: none;\n  text-align: left;\n  color: inherit;\n\n  // Mozilla, remove focusring\n  &:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 #000000;\n  }\n\n  // MS, remove selected option background color\n  &:focus::-ms-value {\n    background-color: inherit;\n    color: inherit;\n  }\n\n  &::-ms-expand {\n    display: none;\n  }\n\n  .mdlext-selectfield.is-focused & {\n    outline: none;\n  }\n\n  .mdlext-selectfield.is-invalid & {\n    border-color: $input-text-error-color;\n    box-shadow: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled & {\n    border-bottom: 1px dotted $input-text-disabled-color;\n    color: $input-text-disabled-text-color;\n    background-color: transparent;\n  }\n\n  option {\n    color: $text-color-primary;\n    box-sizing: border-box;\n    background-color: inherit;\n  }\n}\n\n// Styling for the label / floating label.\n.mdlext-selectfield__label {\n  box-sizing: border-box;\n  color: $input-text-label-color;\n  font-size: $input-text-font-size;\n  top: ($input-text-padding + $input-text-vertical-spacing);\n  bottom: 0;\n  left: 0;\n  right: 0;\n  pointer-events: none;\n  position: absolute;\n  display: block;\n  width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-align: left;\n\n  .mdlext-selectfield.is-dirty &,\n  .mdlext-selectfield.has-placeholder & {\n    visibility: hidden;\n  }\n\n  // Floating Label\n  .mdlext-selectfield--floating-label & {\n    @include material-animation-default();\n  }\n\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    transition: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled.is-disabled & {\n    color: $input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused &,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty &,\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    color: $input-text-highlight-color;\n    font-size: $input-text-floating-label-fontsize;\n    top: $input-text-vertical-spacing - ($input-text-floating-label-fontsize + $input-text-padding);\n    visibility: visible;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder & {\n    top: -($input-text-floating-label-fontsize + $input-text-padding);\n  }\n\n  .mdlext-selectfield--floating-label.is-invalid & {\n    color: $input-text-error-color;\n    font-size: $input-text-floating-label-fontsize;\n  }\n\n  // The after label is the colored underline for the Selectfield.\n  &::after {\n    background-color: $input-text-highlight-color;\n    bottom: $input-text-vertical-spacing;\n    content: '';\n    height: 2px;\n    left: 45%;\n    position: absolute;\n    @include material-animation-default();\n\n    visibility: hidden;\n    width: 10px;\n  }\n\n  .mdlext-selectfield.is-focused &::after {\n    left: 0;\n    visibility: visible;\n    width: 100%;\n  }\n\n  .mdlext-selectfield.is-invalid &::after {\n    background-color: $input-text-error-color;\n  }\n}\n\n// SelectField Error.\n.mdlext-selectfield__error {\n  color: $input-text-error-color;\n  font-size: $input-text-floating-label-fontsize;\n  position: absolute;\n  margin-top: 3px;\n  visibility: hidden;\n  display: block;\n\n  .mdlext-selectfield.is-invalid & {\n    visibility: visible;\n  }\n}\n\n// Expandable Holder.\n.mdlext-selectfield__expandable-holder {\n  display: inline-block;\n  position: relative;\n  margin-left: $input-text-button-size;\n\n  @include material-animation-default();\n\n  // Safari (possibly others) need to be convinced that this field is actually\n  // visible, otherwise it cannot be tabbed to nor focused via a <label>.\n  // TODO: In some cases (Retina displays), this is big enough to render the\n  // inner element :(\n  max-width: 0.1px;\n\n  .mdlext-selectfield.is-focused &,\n  .mdlext-selectfield.is-dirty & {\n    // This is an unfortunate hack. Animating between widths in percent (%)\n    // in many browsers (Chrome, Firefox) only animates the inner visual style\n    // of the input - the outer bounding box still 'jumps'.\n    // Thus assume a sensible maximum, and animate to/from that value.\n    max-width: 600px;\n  }\n  .mdlext-selectfield__label::after {\n    bottom: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/selectfield/_selectfield.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/* Moved to aria-expanded-toggle.scss\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n*/\n\n.mdlext-menu-button {\n  box-sizing: border-box;\n  @include typo-menu();\n  text-transform: none;\n  position: relative;\n  height: $button-height;\n  padding: 0 $button-padding;\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n\n  > * {\n    margin: 0;\n    padding: 0 0 0 8px;\n  }\n\n  > *:first-child {\n    padding-left: 0;\n  }\n\n  > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n    margin-left: auto; // If more than one element, push last element to the right\n  }\n\n}\n\n.mdlext-menu-button__caption {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  line-height: 1.2;\n}\n\n.mdlext-menu,\n.mdlext-menu__item {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n}\n\n.mdlext-menu {\n  position: absolute; //fixed;\n  background: $default-dropdown-bg-color;\n  z-index: 1000;\n  min-width: 124px;\n  border-radius: 2px;\n  @include shadow-3dp();\n  display: inline-flex;\n  flex-direction: column;\n  padding: 0;\n  overflow: hidden;\n  overflow-y: auto;\n\n  &:focus {\n    outline-offset: -1px;\n    outline-width: 1px;\n  }\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n\n  &__item {\n    @include typo-body-1();\n    color: $default-item-text-color;\n    background-color: $default-dropdown-bg-color;\n    position: relative;\n    padding: 0 16px 0 24px;\n    align-items: center;\n    align-self: stretch;\n    text-decoration: none;\n    cursor: pointer;\n    white-space: nowrap;\n    user-select: none;\n    min-height: 40px;\n    overflow: hidden;\n\n    &[aria-selected='true'] {\n      background-color: $default-item-active-bg-color;\n    }\n\n    // checkmark\n    &[aria-selected='true']::before {\n      content:'\\2713';\n      position: absolute;\n      font-size: 1.4em;\n      left: 4px;\n      top: 50%;\n      transform: translateY(-50%);\n      pointer-events: none;\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $default-item-hover-bg-color;\n    }\n\n    &:focus {\n      outline-offset: -2px;\n      outline-width: 1px;\n      outline-color: $default-item-outline-color;\n      background-color: $default-item-focus-bg-color;\n    }\n\n    &::-moz-focus-inner {\n      border: 0;\n    }\n\n    &[disabled] {\n      color: $disabled-item-text-color;\n      background-color: transparent;\n      cursor: auto;\n      pointer-events: none;\n\n      > * {\n        color: $disabled-item-text-color;\n      }\n    }\n\n    &__caption {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0 0 0 8px;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n      margin-left: auto; // If more than one element, push last element to the right\n    }\n\n  }\n  &__item-separator {\n    margin: 0;\n    padding: 0;\n    border-bottom: 1px solid $default-item-divider-color;\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/menu-button/_menu-button.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * The bordered fields are based on / inspired by this CodePen: http://codepen.io/prajwal078/pen/LVJZXz?editors=010\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../variables\";\n@import \"../functions\";\n\n\n// \"Theme\" for this styling\n.mdlext-bordered-fields {\n  box-sizing: border-box;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  // Styling for textfield and selectfield.\n  .mdl-textfield,\n  .mdlext-selectfield {\n    padding: 0;\n    margin: $mdlext-bordered-field-vertical-spacing-top 0 $mdlext-bordered-field-vertical-spacing-bottom 0;\n\n    .mdl-textfield__input,\n    .mdlext-selectfield__select {\n      height: $mdlext-bordered-field-height;\n      background-color: $mdlext-bordered-field-background-color;\n      border: $mdlext-bordered-field-border-width solid $mdlext-bordered-field-border-color;\n      border-radius: $mdlext-bordered-field-border-radius;\n      padding: $mdlext-bordered-field-padding-top $mdlext-bordered-field-padding $mdlext-bordered-field-padding-bottom $mdlext-bordered-field-padding;\n      font-size: $mdlext-bordered-field-input-text-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      color: $mdlext-bordered-field-input-text-color;\n\n      &:disabled {\n        color: $mdlext-bordered-field-input-text-disabled-text-color;\n        background-color: $mdlext-bordered-field-disabled-background-color;\n        border-color: $mdlext-bordered-field-disabled-border-color;\n      }\n\n      // MDL can not handle required attribute properly. Planned for MDL-v2\n      //&:required {\n      //  background-color: $mdlext-bordered-field-required-background-color;\n      //  border-color: $mdlext-bordered-field-required-border-color;\n      //}\n\n      &:focus {\n        background-color: $mdlext-bordered-field-focus-background-color;\n        border-color: $mdlext-bordered-field-focus-border-color;\n      }\n\n      // MDL can not handle required. Planned for MDL-v2\n      //&:required:focus {\n      //  background-color: $mdlext-bordered-field-required-focus-background-color;\n      //  border-color: $mdlext-bordered-field-required-focus-border-color;\n      //}\n    }\n    .mdlext-selectfield__select {\n      padding-right: calc(1em + #{$mdlext-bordered-field-padding});  // space for down arrow\n    }\n\n    /*\n    &.is-dirty {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n      }\n    }\n    */\n\n    &.is-invalid {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        color: $mdlext-bordered-field-input-text-error-color;\n        border-color: $mdlext-bordered-field-error-border-color;\n        background-color: $mdlext-bordered-field-error-background-color;\n\n        &:focus {\n          //&:required:focus {\n          border-color: $mdlext-bordered-field-error-focus-border-color;\n          background-color: $mdlext-bordered-field-error-focus-background-color;\n        }\n      }\n    }\n  }\n\n  .mdlext-selectfield::after {\n    top: auto;\n    bottom: $mdlext-bordered-field-padding-bottom;  // Position of down arrow\n  }\n\n  fieldset[disabled] .mdlext-selectfield::after,\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-bordered-field-input-text-disabled-text-color);\n  }\n\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    background-color: $mdlext-bordered-field-disabled-background-color;\n    border-color: $mdlext-bordered-field-disabled-border-color;\n  }\n\n\n  // Styling for the label / floating label.\n  .mdl-textfield,\n  .mdlext-selectfield {\n\n    &.is-dirty,\n    &.has-placeholder {\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        visibility: hidden;\n      }\n    }\n    .mdl-textfield__label,\n    .mdlext-selectfield__label {\n      color: $mdlext-bordered-field-input-text-label-color;\n      font-size: $mdlext-bordered-field-label-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      padding-left: $mdlext-bordered-field-padding;\n      top: auto;\n      bottom: $mdlext-bordered-field-padding-bottom;\n\n      // Hides the colored underline for the textField/selectfield.\n      &::after {\n        background-color: transparent !important;\n        visibility: hidden !important;\n      }\n    }\n    &.mdl-textfield--floating-label.is-focused.is-focused,\n    &.mdl-textfield--floating-label.is-dirty.is-dirty,\n    &.mdl-textfield--floating-label.has-placeholder,\n    &.mdlext-selectfield--floating-label.is-focused.is-focused,\n    &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n    &.mdlext-selectfield--floating-label.has-placeholder {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-focus-color;\n        font-size: $mdlext-bordered-field-floating-label-font-size;\n        font-weight: $mdlext-bordered-field-floating-label-font-weight;\n        top: auto;\n        bottom: $mdlext-bordered-field-floating-label-focus-bottom;\n        visibility: visible;\n      }\n    }\n    &.mdl-textfield--floating-label.is-disabled.is-disabled,\n    &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-disabled-color;\n      }\n    }\n    &.mdl-textfield--floating-label.is-invalid.is-invalid,\n    &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-error-color;\n      }\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n    color: $mdlext-bordered-field-input-text-label-disabled-color;\n  }\n\n  // Icon(s) and/or button(s) inside textfield\n  .mdl-textfield,\n  .mdlext-selectfield {\n    &.mdlext-bordered-fields__icon-left,\n    &.mdlext-bordered-fields__icon-right {\n      & > i,\n      & > .mdl-button {\n        position: absolute;\n        bottom: $mdlext-bordered-field-padding-bottom - 2px;\n      }\n      & > i {\n        bottom: $mdlext-bordered-field-padding-bottom + 2px;\n      }\n    }\n    &.mdlext-bordered-fields__icon-left {\n      & > i:first-child,\n      & > .mdl-button:first-child {\n        left: $mdlext-bordered-field-padding/2;\n      }\n      & > i ~ .mdl-textfield__input,\n      & > .mdl-button ~ .mdl-textfield__input,\n      & > i ~ .mdlext-selectfield__select,\n      & > .mdl-button ~ .mdlext-selectfield__select {\n        padding-left: $input-text-button-size;\n      }\n      & > i ~ .mdl-textfield__label,\n      & > .mdl-button ~ .mdl-textfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n      & > i ~ .mdlext-selectfield__label,\n      & > .mdl-button ~ .mdlext-selectfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n    }\n    &.mdlext-bordered-fields__icon-right {\n      & > .mdl-textfield__input {\n        padding-right: $input-text-button-size;\n      }\n      & > i:last-child,\n      & > .mdl-button:last-child {\n        left: auto;\n        right: $mdlext-bordered-field-padding/2;\n      }\n    }\n    &.is-disabled i,\n    &.is-disabled .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield,\n  fieldset[disabled] .mdlext-selectfield {\n    i,\n    .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/bordered-fields/_bordered-fields.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-collapsible {\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.mdlext-collapsible-group,\n.mdlext-collapsible-region {\n  box-sizing: border-box;\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/collapsible/_collapsible.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-aria-toggle-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: 1.4em);\n}\n\n.mdlext-aria-toggle-material-icons {\n  @include mdlext-aria-expanded-toggle($font-size: 1.3em, $icon: 'expand_more', $icon-expanded: 'expand_less', $icon-offset: -$mdlext-accordion-header-padding);\n}\n\n.mdlext-accordion {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  &__panel {\n    box-sizing: border-box;\n    position: relative;\n    overflow: hidden;\n    display: flex;\n    flex-wrap: nowrap;\n  }\n\n  &__tab {\n    @include typo-title();\n\n    font-weight: 400;\n    line-height: 1.1;\n    box-sizing: border-box;\n    position: relative;\n    margin: 0;\n    padding: 0; // $mdlext-accordion-header-padding;\n    min-width: $mdlext-accordion-header-height;\n    min-height: $mdlext-accordion-header-height;\n    display: flex;\n    align-items: center;\n    align-self: stretch;\n    user-select: none;\n    color: $mdlext-accordion-header-secondary-color;\n    background-color: $mdlext-accordion-header-background-color;\n    cursor: pointer;\n    overflow: hidden;\n\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-accordion-header-focus-outline-color;\n      outline-width: 2px;\n    }\n\n    &[aria-expanded='true'] {\n      background-color: $mdlext-accordion-header-background-open-color;\n    }\n\n    &[aria-selected='true'] {\n      background-color: $mdlext-accordion-header-background-active-color;\n    }\n\n    &[disabled] {\n      background-color: $mdlext-accordion-header-disabled-color;\n      color: $mdlext-accordion-header-secondary-color-disabled;\n      pointer-events: none;\n\n      > * {\n        color: $mdlext-accordion-header-secondary-color-disabled;\n      }\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $mdlext-accordion-header-background-hover-color;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0;\n    }\n\n    &__caption {\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    &--ripple {\n      &[aria-selected='true']::before {\n        content: '';\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        background: $mdlext-accordion-ripple-color;\n        opacity: 0;\n        border-radius: 100%;\n        transform: scale(1, 1) translate(-50%);\n        transform-origin: 50% 50%;\n      }\n      &[aria-selected='true']:focus:not(:active)::before {\n        // http://easings.net/\n        animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; // cubic-bezier(0.4, 0.0, 1, 1); //cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; //ease-out;\n      }\n    }\n  }\n\n  &__tabpanel {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0 $mdlext-accordion-content-padding;\n    color: $mdlext-accordion-content-color;\n    background-color: $mdlext-accordion-content-background-color;\n    display: block;\n    overflow: auto;\n    flex-grow: 1;\n\n    &[hidden] {\n      @include mdlext-visually-hidden;\n    }\n  }\n}\n\n// Vertical layout\n.mdlext-accordion {\n\n  &--vertical {\n    flex-direction: column;\n    flex-wrap: nowrap;\n\n    .mdlext-accordion__panel {\n      min-height: $mdlext-accordion-header-height;\n      flex-direction: column;\n    }\n\n    .mdlext-accordion__tab {\n      height: $mdlext-accordion-header-height;\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        height: 1px;\n        width: 100%;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n        animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        padding-left: $mdlext-accordion-header-padding;\n      }\n\n      > *:first-child {\n        padding-left: 0;\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        margin-left: auto; // If more than one element, push last element to the right\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 5%;\n          height: 10%;\n        }\n      }\n\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleY(1);\n        animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleY(0);\n          animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;\n          animation-delay: 0.1s;\n        }\n      }\n    }\n  }\n}\n\n// Horizontal layout\n.mdlext-accordion {\n\n  &--horizontal {\n\n    .mdlext-accordion__panel {\n      min-width: $mdlext-accordion-header-height;\n      width: $mdlext-accordion-header-height;\n    }\n\n    &[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {\n      width: 100%;\n    }\n\n    .mdlext-accordion__tab {\n      flex-direction: column-reverse;\n      width: $mdlext-accordion-header-height;\n      white-space: nowrap;\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        top: 0;\n        right: 0;\n        height: 100%;\n        width: 1px;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n\n        // Figure out how to animate a vertical line\n        //animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        //transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        //transform: rotate(-90deg) translateX(50%);\n        transform: rotate(-90deg) translateX($mdlext-accordion-header-padding);\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        // If more than one element, push last element to top\n        margin-bottom: auto;\n        transform: rotate(-90deg) translateX(0);\n      }\n\n      &__caption {\n        transform: rotate(-90deg) translateX(50%);\n        padding-right: $mdlext-accordion-header-padding + 8px;\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 10%;\n          height: 5%;\n        }\n      }\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleX(1);\n        animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleX(0);\n          animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;\n        }\n      }\n    }\n  }\n}\n\n.mdlext-accordion {\n\n  &__panel:first-child > &__tab {\n    // Use container to set outer borders\n    border-top-color: transparent;\n    border-left-color: transparent;\n  }\n\n  &[aria-multiselectable=\"false\"] {\n    .mdlext-accordion__panel.is-expanded {\n      flex-grow: 1;\n    }\n  }\n}\n\n// Making accordion appear disabled.\n// Note: does not prevent tabbing into a disabled accordion\n.mdlext-accordion[disabled] {\n  * {\n    pointer-events: none;\n  }\n  .mdlext-accordion__tab {\n    background-color: $mdlext-accordion-header-disabled-color;\n    color: $mdlext-accordion-header-secondary-color-disabled;\n\n    > * {\n      color: $mdlext-accordion-header-secondary-color-disabled;\n    }\n  }\n  .mdlext-accordion__tabpanel {\n    opacity: 0.8;\n    filter: blur(1px) grayscale(80%);\n  }\n}\n\n\n@keyframes mdlext-accordion-tab-ripple {\n  0% {\n    transform: scale(0, 0);\n    opacity: 1;\n  }\n  20% {\n    transform: scale(25, 25);\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n    transform: scale(40, 40);\n  }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0.1); }\n  40% { transform: scaleY(1.03); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.03); }\n  100% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0); }\n  60% { transform: scaleY(1.01); }\n  80% { transform: scaleY(0.98); }\n  100% { transform: scaleY(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-y {\n  0% { transform: scaleY(1); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(0); }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0.1); }\n  40% { transform: scaleX(1.03); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.03); }\n  100% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0); }\n  60% { transform: scaleX(1.01); }\n  80% { transform: scaleX(0.98); }\n  100% { transform: scaleX(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-x {\n  0% { transform: scaleX(1); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(0); }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/accordion/_accordion.scss","/* -------------------------------------------------------------\n   Palette samples. Not part of build\n----------------------------------------------------------------\n\n$mdlext-light-color-primary:          #9E9E9E !default;\n$mdlext-light-color-primary-dark:     #616161 !default;\n$mdlext-light-color-primary-light:    #9E9E9E !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #212121 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #E040FB !default;\n$mdlext-light-color-accent-light:     #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FAFAFA !default;\n\n$mdlext-light-color-primary:          #F5F5F5 !default;\n$mdlext-light-color-primary-dark:     #E0E0E0 !default;\n$mdlext-light-color-primary-light:    #8BC34A !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #000000 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #FFC107 !default;\n$mdlext-light-color-accent-light:     #FFC107 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-light-color-primary:          #673AB7 !default;\n$mdlext-light-color-primary-dark:     #512DA8 !default;\n$mdlext-light-color-primary-light:    #673AB7 !default;   // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #D1C4E9 !default;   // text color on primary/primary dark background\n$mdlext-light-color-accent:           #4CAF50 !default;\n$mdlext-light-color-accent-light:     #4CAF50 !default;   // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-light-color-primary:          #4CAF50 !default;\n$mdlext-light-color-primary-dark:     #388E3C !default;\n$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #FF5252 !default;\n$mdlext-light-color-accent-light:     #FF5252 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-light-color-primary:          #4CAF50 !default;\n$mdlext-light-color-primary-dark:     #388E3C !default;\n$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background\n$mdlext-light-color-accent:           #03A9F4 !default;\n$mdlext-light-color-accent-light:     #03A9F4 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-light-color-accent-contrast:  #FFFFFF !default;\n\n\n$mdlext-dark-color-primary:           #212121 !default;\n$mdlext-dark-color-primary-dark:      #000000 !default;\n$mdlext-dark-color-primary-light:     #607D8B !default;  // Fallback color. Set to color-primary if fallback is not needed\n$mdlext-dark-color-primary-contrast:  #FFFFFF !default;  // text color on primary/primary dark background\n$mdlext-dark-color-accent:            #FF5722 !default;\n$mdlext-dark-color-accent-light:      #FF5722 !default;  // Fallback color. Set to color-accent if fallback is not needed\n$mdlext-dark-color-accent-contrast:   #FFFFFF !default;\n\n*/\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_color-themes.scss","@import \"color-themes\";\n\n.mdlext-light-color-theme {\n  background-color: $mdlext-light-content-background-color;\n  color: $mdlext-light-text-color-primary;\n\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n// -----------------------------\n.mdlext-light-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-light-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-light-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  a {\n    color: $mdlext-light-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-light-badge-background;\n      color: $mdlext-light-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-light-badge-color-inverse;\n        background: $mdlext-light-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-light-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-light-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-light-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-light-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-primary-color-alt;\n      color: $mdlext-light-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-fab-color-alt;\n      color: $mdlext-light-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-light-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-secondary-color-alt;\n      background-color: $mdlext-light-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-light-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-fab-text-color-alt;\n      background-color: $mdlext-light-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-light-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-light-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-color 16px,\n          $mdlext-light-range-color 0);\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(to left,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-bg-color 16px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n\n      /**************************** Thumbs ****************************/\n      &::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-color 0%,\n          $mdlext-light-range-color 37.5%,\n          $mdlext-light-range-faded-color 37.5%,\n          $mdlext-light-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-light-range-bg-color 66.67%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-bg-focus-color 0%,\n          $mdlext-light-range-bg-focus-color 25%,\n          $mdlext-light-range-bg-color 25%,\n          $mdlext-light-range-bg-color 37.5%,\n          $mdlext-light-range-bg-focus-color 37.5%,\n          $mdlext-light-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-light-range-bg-color 77.78%,\n          $mdlext-light-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-light-range-bg-color 50%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-light-range-bg-color 25px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-light-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-light-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-light-checkbox-focus-color;\n    background-color: $mdlext-light-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-light-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-light-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-light-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-light-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-light-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-light-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-light-switch-faded-color;\n    background-color: $mdlext-light-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-light-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-light-data-table-divider-color;\n    background-color: $mdlext-light-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-light-data-table-selection-color;\n        }\n        &:hover {\n          background-color: $mdlext-light-data-table-hover-color;\n        }\n      }\n    }\n    th {\n      color: $data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-light-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-light-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-light-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-light-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-light-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-light-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-light-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-light-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-light-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-default-item-active-bg-color;\n    }\n  }\n}\n\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-card {\n    background: $mdlext-light-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-light-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-light-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-light-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-light-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-light-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(0, 0, 0, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-light-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-light-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-light-content-background-color;\n      color: $mdlext-light-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-light-color-theme {\n  background: $mdlext-light-default-dropdown-bg-color;\n}\n\n.mdlext-light-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-light-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-light-default-item-text-color;\n      background-color: $mdlext-light-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-light-default-item-outline-color;\n        background-color: $mdlext-light-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-light-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-light-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-light-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-light-bordered-field-background-color;\n        border-color: $mdlext-light-bordered-field-border-color;\n        color: $mdlext-light-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-light-bordered-field-disabled-background-color;\n          border-color: $mdlext-light-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-light-bordered-field-focus-background-color;\n          border-color: $mdlext-light-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-light-bordered-field-input-text-error-color;\n          border-color: $mdlext-light-bordered-field-error-border-color;\n          background-color: $mdlext-light-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-light-bordered-field-error-focus-border-color;\n            background-color: $mdlext-light-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-light-bordered-field-disabled-background-color;\n      border-color: $mdlext-light-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-light-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n  }\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-light-accordion-header-secondary-color;\n      background-color: $mdlext-light-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-light-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-light-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-light-accordion-header-disabled-color;\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-light-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-light-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-light-accordion-content-color;\n      background-color: $mdlext-light-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-light-accordion-header-disabled-color;\n      color: $mdlext-light-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_light-color-theme.scss","@import \"color-themes\";\n\n.mdlext-dark-color-theme {\n  background-color: $mdlext-dark-content-background-color;\n  color: $mdlext-dark-text-color-primary;\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n.mdlext-dark-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n.mdlext-dark-color-theme {\n  a {\n    color: $mdlext-dark-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-dark-badge-background;\n      color: $mdlext-dark-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-dark-badge-color-inverse;\n        background: $mdlext-dark-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-dark-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-dark-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-dark-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-primary-color-alt;\n      color: $mdlext-dark-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-fab-color-alt;\n      color: $mdlext-dark-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-dark-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-secondary-color-alt;\n      background-color: $mdlext-dark-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-dark-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-fab-text-color-alt;\n      background-color: $mdlext-dark-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-dark-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-dark-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(\n          to right,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-color 16px,\n          $mdlext-dark-range-color 0\n        );\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(\n          to left,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-bg-color 16px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n      &::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-color 0%,\n          $mdlext-dark-range-color 37.5%,\n          $mdlext-dark-range-faded-color 37.5%,\n          $mdlext-dark-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-dark-range-bg-color 66.67%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-bg-focus-color 0%,\n          $mdlext-dark-range-bg-focus-color 25%,\n          $mdlext-dark-range-bg-color 25%,\n          $mdlext-dark-range-bg-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-dark-range-bg-color 77.78%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-dark-range-bg-color 50%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-dark-range-bg-color 25px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-dark-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-dark-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-dark-checkbox-focus-color;\n    background-color: $mdlext-dark-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-dark-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-dark-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-dark-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-dark-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-dark-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-dark-switch-faded-color;\n    background-color: $mdlext-dark-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-dark-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-dark-data-table-divider-color;\n    background-color: $mdlext-dark-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-dark-data-table-selection-color;\n        }\n\n        &:hover {\n          background-color: $mdlext-dark-data-table-hover-color;\n        }\n      }\n    }\n\n    th {\n      color: $mdlext-dark-data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-dark-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-dark-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-dark-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-dark-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-dark-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-dark-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-dark-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-dark-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-dark-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-default-item-active-bg-color;\n    }\n  }\n}\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-card {\n    background: $mdlext-dark-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-dark-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-dark-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-dark-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-dark-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-dark-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(255, 255, 255, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-dark-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-dark-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-dark-content-background-color;\n      color: $mdlext-dark-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-dark-color-theme {\n  background: $mdlext-dark-default-dropdown-bg-color;\n}\n\n.mdlext-dark-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-dark-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-dark-default-item-text-color;\n      background-color: $mdlext-dark-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-dark-default-item-outline-color;\n        background-color: $mdlext-dark-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-dark-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-dark-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-dark-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-dark-bordered-field-background-color;\n        border-color: $mdlext-dark-bordered-field-border-color;\n        color: $mdlext-dark-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-dark-bordered-field-disabled-background-color;\n          border-color: $mdlext-dark-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-dark-bordered-field-focus-background-color;\n          border-color: $mdlext-dark-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-dark-bordered-field-input-text-error-color;\n          border-color: $mdlext-dark-bordered-field-error-border-color;\n          background-color: $mdlext-dark-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-dark-bordered-field-error-focus-border-color;\n            background-color: $mdlext-dark-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-dark-bordered-field-disabled-background-color;\n      border-color: $mdlext-dark-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-dark-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n  }\n\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-dark-accordion-header-secondary-color;\n      background-color: $mdlext-dark-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-dark-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-dark-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-dark-accordion-header-disabled-color;\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-dark-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-dark-accordion-content-color;\n      background-color: $mdlext-dark-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-dark-accordion-header-disabled-color;\n      color: $mdlext-dark-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_dark-color-theme.scss"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.js b/node_modules/mdl-ext/lib/mdl-ext.js
new file mode 100644
index 0000000..b3ecacf
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.js
@@ -0,0 +1,6477 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define("mdl-ext", [], factory);
+	else if(typeof exports === 'object')
+		exports["mdl-ext"] = factory();
+	else
+		root["mdl-ext"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(113);
+	module.exports = __webpack_require__(53);
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 2 */
+/***/ function(module, exports) {
+
+	'use strict';
+	
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	var VK_TAB = 9;
+	var VK_ENTER = 13;
+	var VK_ESC = 27;
+	var VK_SPACE = 32;
+	var VK_PAGE_UP = 33;
+	var VK_PAGE_DOWN = 34;
+	var VK_END = 35;
+	var VK_HOME = 36;
+	var VK_ARROW_LEFT = 37;
+	var VK_ARROW_UP = 38;
+	var VK_ARROW_RIGHT = 39;
+	var VK_ARROW_DOWN = 40;
+	
+	var ARIA_EXPANDED = 'aria-expanded';
+	var ARIA_HIDDEN = 'aria-hidden';
+	var ARIA_MULTISELECTABLE = 'aria-multiselectable';
+	var ARIA_SELECTED = 'aria-selected';
+	
+	var IS_DIRTY = 'is-dirty';
+	var IS_DISABLED = 'is-disabled';
+	var IS_EXPANDED = 'is-expanded';
+	var IS_FOCUSED = 'is-focused';
+	var IS_INVALID = 'is-invalid';
+	var IS_UPGRADED = 'is-upgraded';
+	var DATA_UPGRADED = 'data-upgraded';
+	
+	var MDL_RIPPLE = 'mdl-ripple';
+	var MDL_RIPPLE_COMPONENT = 'MaterialRipple';
+	var MDL_RIPPLE_EFFECT = 'mdl-js-ripple-effect';
+	var MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';
+	
+	exports.VK_TAB = VK_TAB;
+	exports.VK_ENTER = VK_ENTER;
+	exports.VK_ESC = VK_ESC;
+	exports.VK_SPACE = VK_SPACE;
+	exports.VK_PAGE_UP = VK_PAGE_UP;
+	exports.VK_PAGE_DOWN = VK_PAGE_DOWN;
+	exports.VK_END = VK_END;
+	exports.VK_HOME = VK_HOME;
+	exports.VK_ARROW_LEFT = VK_ARROW_LEFT;
+	exports.VK_ARROW_UP = VK_ARROW_UP;
+	exports.VK_ARROW_RIGHT = VK_ARROW_RIGHT;
+	exports.VK_ARROW_DOWN = VK_ARROW_DOWN;
+	exports.ARIA_EXPANDED = ARIA_EXPANDED;
+	exports.ARIA_HIDDEN = ARIA_HIDDEN;
+	exports.ARIA_MULTISELECTABLE = ARIA_MULTISELECTABLE;
+	exports.ARIA_SELECTED = ARIA_SELECTED;
+	exports.IS_DIRTY = IS_DIRTY;
+	exports.IS_DISABLED = IS_DISABLED;
+	exports.IS_EXPANDED = IS_EXPANDED;
+	exports.IS_FOCUSED = IS_FOCUSED;
+	exports.IS_INVALID = IS_INVALID;
+	exports.IS_UPGRADED = IS_UPGRADED;
+	exports.DATA_UPGRADED = DATA_UPGRADED;
+	exports.MDL_RIPPLE = MDL_RIPPLE;
+	exports.MDL_RIPPLE_COMPONENT = MDL_RIPPLE_COMPONENT;
+	exports.MDL_RIPPLE_EFFECT = MDL_RIPPLE_EFFECT;
+	exports.MDL_RIPPLE_EFFECT_IGNORE_EVENTS = MDL_RIPPLE_EFFECT_IGNORE_EVENTS;
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global    = __webpack_require__(5)
+	  , core      = __webpack_require__(1)
+	  , ctx       = __webpack_require__(37)
+	  , hide      = __webpack_require__(11)
+	  , PROTOTYPE = 'prototype';
+	
+	var $export = function(type, name, source){
+	  var IS_FORCED = type & $export.F
+	    , IS_GLOBAL = type & $export.G
+	    , IS_STATIC = type & $export.S
+	    , IS_PROTO  = type & $export.P
+	    , IS_BIND   = type & $export.B
+	    , IS_WRAP   = type & $export.W
+	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+	    , expProto  = exports[PROTOTYPE]
+	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+	    , key, own, out;
+	  if(IS_GLOBAL)source = name;
+	  for(key in source){
+	    // contains in native
+	    own = !IS_FORCED && target && target[key] !== undefined;
+	    if(own && key in exports)continue;
+	    // export native or passed
+	    out = own ? target[key] : source[key];
+	    // prevent global pollution for namespaces
+	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+	    // bind timers to global for call from export context
+	    : IS_BIND && own ? ctx(out, global)
+	    // wrap global constructors for prevent change them in library
+	    : IS_WRAP && target[key] == out ? (function(C){
+	      var F = function(a, b, c){
+	        if(this instanceof C){
+	          switch(arguments.length){
+	            case 0: return new C;
+	            case 1: return new C(a);
+	            case 2: return new C(a, b);
+	          } return new C(a, b, c);
+	        } return C.apply(this, arguments);
+	      };
+	      F[PROTOTYPE] = C[PROTOTYPE];
+	      return F;
+	    // make static versions for prototype methods
+	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+	    if(IS_PROTO){
+	      (exports.virtual || (exports.virtual = {}))[key] = out;
+	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+	    }
+	  }
+	};
+	// type bitmap
+	$export.F = 1;   // forced
+	$export.G = 2;   // global
+	$export.S = 4;   // static
+	$export.P = 8;   // proto
+	$export.B = 16;  // bind
+	$export.W = 32;  // wrap
+	$export.U = 64;  // safe
+	$export.R = 128; // real proto method for `library` 
+	module.exports = $export;
+
+/***/ },
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var store      = __webpack_require__(44)('wks')
+	  , uid        = __webpack_require__(46)
+	  , Symbol     = __webpack_require__(5).Symbol
+	  , USE_SYMBOL = typeof Symbol == 'function';
+	
+	var $exports = module.exports = function(name){
+	  return store[name] || (store[name] =
+	    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+	};
+	
+	$exports.store = store;
+
+/***/ },
+/* 5 */
+/***/ function(module, exports) {
+
+	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+	var global = module.exports = typeof window != 'undefined' && window.Math == Math
+	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(17);
+	module.exports = function(it){
+	  if(!isObject(it))throw TypeError(it + ' is not an object!');
+	  return it;
+	};
+
+/***/ },
+/* 7 */
+/***/ function(module, exports) {
+
+	module.exports = {};
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	
+	exports.__esModule = true;
+	
+	var _from = __webpack_require__(60);
+	
+	var _from2 = _interopRequireDefault(_from);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	exports.default = function (arr) {
+	  if (Array.isArray(arr)) {
+	    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
+	      arr2[i] = arr[i];
+	    }
+	
+	    return arr2;
+	  } else {
+	    return (0, _from2.default)(arr);
+	  }
+	};
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Thank's IE8 for his funny defineProperty
+	module.exports = !__webpack_require__(10)(function(){
+	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+	module.exports = function(exec){
+	  try {
+	    return !!exec();
+	  } catch(e){
+	    return true;
+	  }
+	};
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP         = __webpack_require__(12)
+	  , createDesc = __webpack_require__(25);
+	module.exports = __webpack_require__(9) ? function(object, key, value){
+	  return dP.f(object, key, createDesc(1, value));
+	} : function(object, key, value){
+	  object[key] = value;
+	  return object;
+	};
+
+/***/ },
+/* 12 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject       = __webpack_require__(6)
+	  , IE8_DOM_DEFINE = __webpack_require__(82)
+	  , toPrimitive    = __webpack_require__(101)
+	  , dP             = Object.defineProperty;
+	
+	exports.f = __webpack_require__(9) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+	  anObject(O);
+	  P = toPrimitive(P, true);
+	  anObject(Attributes);
+	  if(IE8_DOM_DEFINE)try {
+	    return dP(O, P, Attributes);
+	  } catch(e){ /* empty */ }
+	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+	  if('value' in Attributes)O[P] = Attributes.value;
+	  return O;
+	};
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	
+	var _apply = __webpack_require__(66);
+	
+	var _apply2 = _interopRequireDefault(_apply);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	/**
+	 * Since some events can fire at a high rate, the event handler should be limited to execute computationally
+	 * expensive operations, such as DOM modifications, inside a single rendered frame.
+	 * When listening to e.g. scroll and resize events, the browser tends to fire off more events per
+	 * second than are actually useful. For instance, if your event listener sets some element positions, then it
+	 * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of
+	 * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that
+	 * it runs immediately prior to the browser rendering the updated layout to the screen.
+	 * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page
+	 * is rendered to the screen.
+	 * *
+	 * @param callback the function to throttle
+	 * @param context  optional context of this, default to global
+	 * @return {function(...[*])}
+	 */
+	var fullThrottle = function fullThrottle(callback, context) {
+	
+	  if (!context) {
+	    context = undefined || window;
+	  }
+	
+	  var throttling = false;
+	
+	  return function () {
+	    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+	      args[_key] = arguments[_key];
+	    }
+	
+	    if (!throttling) {
+	      throttling = true;
+	      window.requestAnimationFrame(function () {
+	        throttling = false;
+	        return (0, _apply2.default)(callback, context, args);
+	      });
+	    }
+	  };
+	};
+	
+	exports.default = fullThrottle;
+	module.exports = exports["default"];
+
+/***/ },
+/* 14 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	/**
+	 * Converts a JSON string to object
+	 * @param jsonString
+	 * @param source
+	 */
+	
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	exports.jsonStringToObject = undefined;
+	
+	var _assign = __webpack_require__(33);
+	
+	var _assign2 = _interopRequireDefault(_assign);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	var jsonStringToObject = function jsonStringToObject(jsonString) {
+	  var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+	
+	  var s = jsonString.replace(/'/g, '"');
+	  try {
+	    return (0, _assign2.default)(source, JSON.parse(s));
+	  } catch (e) {
+	    throw new Error('Failed to parse json string: ' + s + '. Error: ' + e.message);
+	  }
+	};
+	
+	exports.jsonStringToObject = jsonStringToObject;
+
+/***/ },
+/* 15 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	/**
+	 * @license
+	 * Copyright 2016 Leif Olsen. 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 javascript utility for conditionally creating a list of strings.
+	 * The function takes any number of arguments which can be a string or object.
+	 * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames
+	 *
+	 * @param  {*} args the strings and/or objects to
+	 * @return {Array} a list of strings
+	 * @example
+	 * // Returns ['foo', 'bar', 'baz', 'quux']
+	 * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });
+	 * @example see the tests for more examples
+	 */
+	
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	exports.stringList = exports.randomString = exports.joinStrings = undefined;
+	
+	var _keys = __webpack_require__(65);
+	
+	var _keys2 = _interopRequireDefault(_keys);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	var stringList = function stringList() {
+	  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+	    args[_key] = arguments[_key];
+	  }
+	
+	  var isString = function isString(str) {
+	    return str != null && typeof str === 'string';
+	  };
+	
+	  var flatten = function flatten(list) {
+	    return list.reduce(function (a, b) {
+	      return a.concat(Array.isArray(b) ? flatten(b) : b);
+	    }, []);
+	  };
+	
+	  var objectToStrings = function objectToStrings(arg) {
+	    return (0, _keys2.default)(arg).filter(function (key) {
+	      return arg[key];
+	    }).map(function (key) {
+	      return key;
+	    });
+	  };
+	
+	  return args.filter(function (arg) {
+	    return !!arg;
+	  }).map(function (arg) {
+	    return isString(arg) ? arg : objectToStrings(arg);
+	  }).reduce(function (result, arg) {
+	    return result.concat(Array.isArray(arg) ? flatten(arg) : arg);
+	  }, []);
+	};
+	
+	/**
+	 * A simple javascript utility for conditionally joining strings together.
+	 * The function takes a delimiter string and any number of arguments which can be a string or object.
+	 *
+	 * @param delimiter delimiter to separate joined strings
+	 * @param  {*} args the strings and/or objects to join
+	 * @return {String} the joined strings
+	 * @example
+	 * // Returns 'foo, bar, baz, quux'
+	 * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });
+	 * @example see the tests for more examples
+	 */
+	var joinStrings = function joinStrings() {
+	  for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+	    args[_key2 - 1] = arguments[_key2];
+	  }
+	
+	  var delimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ' ';
+	  return stringList.apply(undefined, args).join(delimiter);
+	};
+	
+	/**
+	 * Generates a random string with a given length
+	 * @param n {Integer} length of generated string
+	 * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
+	 * @return {String} the random string
+	 * @example
+	 * // Returns e.g. 'pd781w0y'
+	 * randomString(8);
+	 * @example see the tests for more examples
+	 */
+	var randomString = function randomString() {
+	  var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12;
+	  return Array(n + 1).join((Math.random().toString(36) + '00000000000000000').slice(2, 18)).slice(0, n);
+	};
+	
+	exports.joinStrings = joinStrings;
+	exports.randomString = randomString;
+	exports.stringList = stringList;
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+	var hasOwnProperty = {}.hasOwnProperty;
+	module.exports = function(it, key){
+	  return hasOwnProperty.call(it, key);
+	};
+
+/***/ },
+/* 17 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  return typeof it === 'object' ? it !== null : typeof it === 'function';
+	};
+
+/***/ },
+/* 18 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+	var $keys       = __webpack_require__(95)
+	  , enumBugKeys = __webpack_require__(39);
+	
+	module.exports = Object.keys || function keys(O){
+	  return $keys(O, enumBugKeys);
+	};
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// to indexed object, toObject with fallback for non-array-like ES3 strings
+	var IObject = __webpack_require__(40)
+	  , defined = __webpack_require__(24);
+	module.exports = function(it){
+	  return IObject(defined(it));
+	};
+
+/***/ },
+/* 20 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.13 ToObject(argument)
+	var defined = __webpack_require__(24);
+	module.exports = function(it){
+	  return Object(defined(it));
+	};
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	exports.tether = exports.removeChildElements = exports.moveElements = exports.isRectInsideWindowViewport = exports.isFocusable = exports.getScrollParents = exports.getParentElements = exports.getWindowViewport = undefined;
+	
+	var _isNan = __webpack_require__(62);
+	
+	var _isNan2 = _interopRequireDefault(_isNan);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	/**
+	 * Remove child element(s)
+	 * element.innerHTNL = '' has a performance penality!
+	 * @see http://jsperf.com/empty-an-element/16
+	 * @see http://jsperf.com/force-reflow
+	 * @param element
+	 * @param forceReflow
+	 */
+	var removeChildElements = function removeChildElements(element) {
+	  var forceReflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+	
+	
+	  // See: http://jsperf.com/empty-an-element/16
+	  while (element.lastChild) {
+	    element.removeChild(element.lastChild);
+	  }
+	  if (forceReflow) {
+	    // See: http://jsperf.com/force-reflow
+	    var d = element.style.display;
+	
+	    element.style.display = 'none';
+	    element.style.display = d;
+	  }
+	};
+	
+	/**
+	 * Moves child elements from a DOM node to another dom node.
+	 * @param source {HTMLElement}
+	 * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created
+	 * @return {HTMLElement} The target node
+	 *
+	 * @example
+	 * // Moves child elements from a DOM node to another dom node.
+	 * moveElements(source, destination);
+	 *
+	 * @example
+	 * // If the second parameter is ommited, a document fragment is created:
+	 * let fragment = moveElements(source);
+	 *
+	 * @See: https://github.com/webmodules/dom-move
+	 */
+	var moveElements = function moveElements(source, target) {
+	  if (!target) {
+	    target = source.ownerDocument.createDocumentFragment();
+	  }
+	  while (source.firstChild) {
+	    target.appendChild(source.firstChild);
+	  }
+	  return target;
+	};
+	
+	/**
+	 * Get the browser viewport dimensions
+	 * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript
+	 * @return {{windowWidth: number, windowHeight: number}}
+	 */
+	var getWindowViewport = function getWindowViewport() {
+	  return {
+	    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),
+	    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)
+	  };
+	};
+	
+	/**
+	 * Check whether an element is in the window viewport
+	 * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/
+	 * @param top
+	 * @param left
+	 * @param bottom
+	 * @param right
+	 * @return {boolean} true if rectangle is inside window viewport, otherwise false
+	 */
+	var isRectInsideWindowViewport = function isRectInsideWindowViewport(_ref) {
+	  var top = _ref.top,
+	      left = _ref.left,
+	      bottom = _ref.bottom,
+	      right = _ref.right;
+	
+	  var _getWindowViewport = getWindowViewport(),
+	      viewportWidth = _getWindowViewport.viewportWidth,
+	      viewportHeight = _getWindowViewport.viewportHeight;
+	
+	  return top >= 0 && left >= 0 && bottom <= viewportHeight && right <= viewportWidth;
+	};
+	
+	/**
+	 * Get a list of parent elements that can possibly scroll
+	 * @param el the element to get parents for
+	 * @returns {Array}
+	 */
+	var getScrollParents = function getScrollParents(el) {
+	  var elements = [];
+	
+	  /*
+	  for (el = el.parentNode; el; el = el.parentNode) {
+	    const cs = window.getComputedStyle(el);
+	    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {
+	      elements.unshift(el);
+	    }
+	    if(el === document.body) {
+	      break;
+	    }
+	  }
+	  */
+	
+	  var element = el.parentNode;
+	  while (element) {
+	    var cs = window.getComputedStyle(element);
+	    if (!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {
+	      elements.unshift(element);
+	    }
+	    if (element === document.body) {
+	      break;
+	    }
+	    element = element.parentNode;
+	  }
+	
+	  return elements;
+	};
+	
+	/**
+	 * Get a list of parent elements, from a given element to a given element
+	 * @param {HTMLElement} from
+	 * @param {HTMLElement} to
+	 * @return {Array<HTMLElement>} the parent elements, not including from and to
+	 */
+	var getParentElements = function getParentElements(from, to) {
+	  var result = [];
+	  var element = from.parentNode;
+	  while (element) {
+	    if (element === to) {
+	      break;
+	    }
+	    result.unshift(element);
+	    element = element.parentNode;
+	  }
+	  return result;
+	};
+	
+	/**
+	 * Position element next to button
+	 *
+	 * Positioning strategy
+	 *  1. element.height > viewport.height
+	 *     let element.height = viewport.heigt
+	 *     let element.overflow-y = auto
+	 *  2. element.width > viewport.width
+	 *     let element.width = viewport.width
+	 *  3. position element below button, align left edge of element with button left
+	 *       done if element inside viewport
+	 *  4. position element below button, align right edge of element with button right
+	 *       done if element inside viewport
+	 *  5. positions element above button, aligns left edge of element with button left
+	 *       done if element inside viewport
+	 *  6. position element above the control element, aligned to its right.
+	 *       done if element inside viewport
+	 *  7. position element at button right hand side, aligns element top with button top
+	 *       done if element inside viewport
+	 *  8. position element at button left hand side, aligns element top with button top
+	 *       done if element inside viewport
+	 *  9. position element inside viewport
+	 *     1. position element at viewport bottom
+	 *     2. position element at button right hand side
+	 *        done if element inside viewport
+	 *     3. position element at button left hand side
+	 *       done if element inside viewport
+	 *     4. position element at viewport right
+	 * 10. done
+	 *
+	 */
+	var tether = function tether(controlledBy, element) {
+	  var controlRect = controlledBy.getBoundingClientRect();
+	
+	  // 1. will element height fit inside window viewport?
+	
+	  var _getWindowViewport2 = getWindowViewport(),
+	      viewportWidth = _getWindowViewport2.viewportWidth,
+	      viewportHeight = _getWindowViewport2.viewportHeight;
+	
+	  element.style.height = 'auto';
+	  //element.style.overflowY = 'hidden';
+	  if (element.offsetHeight > viewportHeight) {
+	    element.style.height = viewportHeight + 'px';
+	    element.style.overflowY = 'auto';
+	  }
+	
+	  // 2. will element width fit inside window viewport?
+	  element.style.width = 'auto';
+	  if (element.offsetWidth > viewportWidth) {
+	    element.style.width = viewportWidth + 'px';
+	  }
+	
+	  var elementRect = element.getBoundingClientRect();
+	
+	  // element to control distance
+	  var dy = controlRect.top - elementRect.top;
+	  var dx = controlRect.left - elementRect.left;
+	
+	  // element rect, window coordinates relative to top,left of control
+	  var top = elementRect.top + dy;
+	  var left = elementRect.left + dx;
+	  var bottom = top + elementRect.height;
+	  var right = left + elementRect.width;
+	
+	  // Position relative to control
+	  var ddy = dy;
+	  var ddx = dx;
+	
+	  if (isRectInsideWindowViewport({
+	    top: top + controlRect.height,
+	    left: left,
+	    bottom: bottom + controlRect.height,
+	    right: right
+	  })) {
+	    // 3 position element below the control element, aligned to its left
+	    ddy = controlRect.height + dy;
+	    //console.log('***** 3');
+	  } else if (isRectInsideWindowViewport({
+	    top: top + controlRect.height,
+	    left: left + controlRect.width - elementRect.width,
+	    bottom: bottom + controlRect.height,
+	    right: left + controlRect.width
+	  })) {
+	    // 4 position element below the control element, aligned to its right
+	    ddy = controlRect.height + dy;
+	    ddx = dx + controlRect.width - elementRect.width;
+	    //console.log('***** 4');
+	  } else if (isRectInsideWindowViewport({
+	    top: top - elementRect.height,
+	    left: left,
+	    bottom: bottom - elementRect.height,
+	    right: right
+	  })) {
+	    // 5. position element above the control element, aligned to its left.
+	    ddy = dy - elementRect.height;
+	    //console.log('***** 5');
+	  } else if (isRectInsideWindowViewport({
+	    top: top - elementRect.height,
+	    left: left + controlRect.width - elementRect.width,
+	    bottom: bottom - elementRect.height,
+	    right: left + controlRect.width
+	  })) {
+	    // 6. position element above the control element, aligned to its right.
+	    ddy = dy - elementRect.height;
+	    ddx = dx + controlRect.width - elementRect.width;
+	    //console.log('***** 6');
+	  } else if (isRectInsideWindowViewport({
+	    top: top,
+	    left: left + controlRect.width,
+	    bottom: bottom,
+	    right: right + controlRect.width
+	  })) {
+	    // 7. position element at button right hand side
+	    ddx = controlRect.width + dx;
+	    //console.log('***** 7');
+	  } else if (isRectInsideWindowViewport({
+	    top: top,
+	    left: left - controlRect.width,
+	    bottom: bottom,
+	    right: right - controlRect.width
+	  })) {
+	    // 8. position element at button left hand side
+	    ddx = dx - elementRect.width;
+	    //console.log('***** 8');
+	  } else {
+	    // 9. position element inside viewport, near controlrect if possible
+	    //console.log('***** 9');
+	
+	    // 9.1 position element near controlrect bottom
+	    ddy = dy - bottom + viewportHeight;
+	    if (top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {
+	      ddy = controlRect.height + dy;
+	    } else if (top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {
+	      ddy = dy - elementRect.height;
+	    }
+	
+	    if (left + elementRect.width + controlRect.width <= viewportWidth) {
+	      // 9.2 Position element at button right hand side
+	      ddx = controlRect.width + dx;
+	      //console.log('***** 9.2');
+	    } else if (left - elementRect.width >= 0) {
+	      // 9.3 Position element at button left hand side
+	      ddx = dx - elementRect.width;
+	      //console.log('***** 9.3');
+	    } else {
+	      // 9.4 position element at (near) viewport right
+	      var r = left + elementRect.width - viewportWidth;
+	      ddx = dx - r;
+	      //console.log('***** 9.4');
+	    }
+	  }
+	
+	  // 10. done
+	  element.style.top = element.offsetTop + ddy + 'px';
+	  element.style.left = element.offsetLeft + ddx + 'px';
+	  //console.log('***** 10. done');
+	};
+	
+	/**
+	 * Check if the given element can receive focus
+	 * @param {HTMLElement} element the element to check
+	 * @return {boolean} true if the element is focusable, otherwise false
+	 */
+	var isFocusable = function isFocusable(element) {
+	  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js
+	  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus
+	
+	  if (element.hasAttribute('tabindex')) {
+	    var tabindex = element.getAttribute('tabindex');
+	    if (!(0, _isNan2.default)(tabindex)) {
+	      return parseInt(tabindex) > -1;
+	    }
+	  }
+	
+	  if (element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') !== 'false') {
+	    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable
+	    return true;
+	  }
+	
+	  // natively focusable, but only when enabled
+	  var selector = /input|select|textarea|button|details/i;
+	  var name = element.nodeName;
+	  if (selector.test(name)) {
+	    return element.type.toLowerCase() !== 'hidden' && !element.disabled;
+	  }
+	
+	  // anchors and area must have an href
+	  if (name === 'A' || name === 'AREA') {
+	    return !!element.href;
+	  }
+	
+	  if (name === 'IFRAME') {
+	    // Check visible iframe
+	    var cs = window.getComputedStyle(element);
+	    return cs.getPropertyValue('display').toLowerCase() !== 'none';
+	  }
+	
+	  return false;
+	};
+	
+	/**
+	 * Get a list of offset parents for given element
+	 * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript
+	 * @param el the element
+	 * @return {Array} a list of offset parents
+	 */
+	/*
+	const offsetParents = (el) => {
+	  const elements = [];
+	  for (; el; el = el.offsetParent) {
+	    elements.unshift(el);
+	  }
+	  if(!elements.find(e => e === document.body)) {
+	    elements.unshift(document.body);
+	  }
+	  return elements;
+	};
+	*/
+	
+	/**
+	 * Finds the common offset ancestor of two DOM nodes
+	 * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript
+	 * @see https://gist.github.com/benpickles/4059636
+	 * @param a
+	 * @param b
+	 * @return {Element} The common offset ancestor of a and b
+	 */
+	/*
+	const commonOffsetAncestor = (a, b) => {
+	  const parentsA = offsetParents(a);
+	  const parentsB = offsetParents(b);
+	
+	  for (let i = 0; i < parentsA.length; i++) {
+	    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];
+	  }
+	};
+	*/
+	
+	/**
+	 * Calculate position relative to a target element
+	 * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively
+	 * @param target
+	 * @param el
+	 * @return {{top: number, left: number}}
+	 */
+	/*
+	const calcPositionRelativeToTarget = (target, el) => {
+	  let top = 0;
+	  let left = 0;
+	
+	  while(el) {
+	    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;
+	    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;
+	    el = el.offsetParent;
+	
+	    if(el === target) {
+	      break;
+	    }
+	  }
+	  return { top: top, left: left };
+	};
+	*/
+	
+	exports.getWindowViewport = getWindowViewport;
+	exports.getParentElements = getParentElements;
+	exports.getScrollParents = getScrollParents;
+	exports.isFocusable = isFocusable;
+	exports.isRectInsideWindowViewport = isRectInsideWindowViewport;
+	exports.moveElements = moveElements;
+	exports.removeChildElements = removeChildElements;
+	exports.tether = tether;
+
+/***/ },
+/* 22 */
+/***/ function(module, exports) {
+
+	"use strict";
+	
+	exports.__esModule = true;
+	
+	exports.default = function (instance, Constructor) {
+	  if (!(instance instanceof Constructor)) {
+	    throw new TypeError("Cannot call a class as a function");
+	  }
+	};
+
+/***/ },
+/* 23 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	
+	exports.__esModule = true;
+	
+	var _defineProperty = __webpack_require__(63);
+	
+	var _defineProperty2 = _interopRequireDefault(_defineProperty);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	exports.default = function () {
+	  function defineProperties(target, props) {
+	    for (var i = 0; i < props.length; i++) {
+	      var descriptor = props[i];
+	      descriptor.enumerable = descriptor.enumerable || false;
+	      descriptor.configurable = true;
+	      if ("value" in descriptor) descriptor.writable = true;
+	      (0, _defineProperty2.default)(target, descriptor.key, descriptor);
+	    }
+	  }
+	
+	  return function (Constructor, protoProps, staticProps) {
+	    if (protoProps) defineProperties(Constructor.prototype, protoProps);
+	    if (staticProps) defineProperties(Constructor, staticProps);
+	    return Constructor;
+	  };
+	}();
+
+/***/ },
+/* 24 */
+/***/ function(module, exports) {
+
+	// 7.2.1 RequireObjectCoercible(argument)
+	module.exports = function(it){
+	  if(it == undefined)throw TypeError("Can't call method on  " + it);
+	  return it;
+	};
+
+/***/ },
+/* 25 */
+/***/ function(module, exports) {
+
+	module.exports = function(bitmap, value){
+	  return {
+	    enumerable  : !(bitmap & 1),
+	    configurable: !(bitmap & 2),
+	    writable    : !(bitmap & 4),
+	    value       : value
+	  };
+	};
+
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var shared = __webpack_require__(44)('keys')
+	  , uid    = __webpack_require__(46);
+	module.exports = function(key){
+	  return shared[key] || (shared[key] = uid(key));
+	};
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+	// 7.1.4 ToInteger
+	var ceil  = Math.ceil
+	  , floor = Math.floor;
+	module.exports = function(it){
+	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+	};
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var $at  = __webpack_require__(99)(true);
+	
+	// 21.1.3.27 String.prototype[@@iterator]()
+	__webpack_require__(41)(String, 'String', function(iterated){
+	  this._t = String(iterated); // target
+	  this._i = 0;                // next index
+	// 21.1.5.2.1 %StringIteratorPrototype%.next()
+	}, function(){
+	  var O     = this._t
+	    , index = this._i
+	    , point;
+	  if(index >= O.length)return {value: undefined, done: true};
+	  point = $at(O, index);
+	  this._i += point.length;
+	  return {value: point, done: false};
+	});
+
+/***/ },
+/* 29 */
+/***/ function(module, exports) {
+
+	'use strict';
+	
+	// See: http://robertpenner.com/easing/
+	
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	var easeInOutQuad = function easeInOutQuad(t, b, c, d) {
+	  t /= d / 2;
+	  if (t < 1) return c / 2 * t * t + b;
+	  t--;
+	  return -c / 2 * (t * (t - 2) - 1) + b;
+	};
+	
+	var inOutQuintic = function inOutQuintic(t, b, c, d) {
+	  var ts = (t /= d) * t;
+	  var tc = ts * t;
+	  return b + c * (6 * tc * ts + -15 * ts * ts + 10 * tc);
+	};
+	
+	exports.easeInOutQuad = easeInOutQuad;
+	exports.inOutQuintic = inOutQuintic;
+
+/***/ },
+/* 30 */
+/***/ function(module, exports) {
+
+	'use strict';
+	
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	var MIN_INERVAL = 1000 / 60;
+	
+	/**
+	 * Trigger a callback at a given interval
+	 * @param interval defaults to 1000/60 ms
+	 * @return {function()} reference to start, stop, immediate and started
+	 */
+	
+	var intervalFunction = function intervalFunction() {
+	  var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : MIN_INERVAL;
+	
+	
+	  var lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;
+	  var cb = undefined;
+	  var next = null;
+	  var timeElapsed = 0;
+	
+	  var execute = function execute() {
+	    var f = cb(timeElapsed);
+	    if (!f) {
+	      cancel();
+	    }
+	  };
+	
+	  var cancel = function cancel() {
+	    if (next) {
+	      window.cancelAnimationFrame(next);
+	    }
+	    next = null;
+	    timeElapsed = 0;
+	  };
+	
+	  var _start = function _start() {
+	    var timeStart = Date.now();
+	
+	    var loop = function loop(now) {
+	      if (next) {
+	        next = window.requestAnimationFrame(function () {
+	          return loop(Date.now());
+	        });
+	
+	        timeElapsed += now - timeStart;
+	
+	        if (timeElapsed >= lapse) {
+	          execute();
+	          if ((timeElapsed -= lapse) > lapse) {
+	            // time elapsed - interval_ > interval_ , indicates inactivity
+	            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on
+	            timeElapsed = 0;
+	          }
+	        }
+	        timeStart = now;
+	      }
+	    };
+	
+	    next = 1; // a truthy value for first loop
+	    loop(timeStart);
+	  };
+	
+	  return {
+	    get started() {
+	      return next != null;
+	    },
+	    get interval() {
+	      return lapse;
+	    },
+	    set interval(value) {
+	      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;
+	    },
+	    start: function start(callback) {
+	      if (typeof callback !== 'function') {
+	        throw new TypeError('callback parameter must be a function');
+	      }
+	      cb = callback;
+	      _start();
+	    },
+	    immediate: function immediate() {
+	      if (!cb) {
+	        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');
+	      }
+	      execute();
+	    },
+	
+	    stop: function stop() {
+	      return cancel();
+	    }
+	  };
+	};
+	
+	exports.default = intervalFunction;
+	module.exports = exports['default'];
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(69), __esModule: true };
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(71), __esModule: true };
+
+/***/ },
+/* 33 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(73), __esModule: true };
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+	  return it;
+	};
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// getting tag from 19.1.3.6 Object.prototype.toString()
+	var cof = __webpack_require__(36)
+	  , TAG = __webpack_require__(4)('toStringTag')
+	  // ES3 wrong here
+	  , ARG = cof(function(){ return arguments; }()) == 'Arguments';
+	
+	// fallback for IE11 Script Access Denied error
+	var tryGet = function(it, key){
+	  try {
+	    return it[key];
+	  } catch(e){ /* empty */ }
+	};
+	
+	module.exports = function(it){
+	  var O, T, B;
+	  return it === undefined ? 'Undefined' : it === null ? 'Null'
+	    // @@toStringTag case
+	    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
+	    // builtinTag case
+	    : ARG ? cof(O)
+	    // ES3 arguments fallback
+	    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+	};
+
+/***/ },
+/* 36 */
+/***/ function(module, exports) {
+
+	var toString = {}.toString;
+	
+	module.exports = function(it){
+	  return toString.call(it).slice(8, -1);
+	};
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// optional / simple context binding
+	var aFunction = __webpack_require__(34);
+	module.exports = function(fn, that, length){
+	  aFunction(fn);
+	  if(that === undefined)return fn;
+	  switch(length){
+	    case 1: return function(a){
+	      return fn.call(that, a);
+	    };
+	    case 2: return function(a, b){
+	      return fn.call(that, a, b);
+	    };
+	    case 3: return function(a, b, c){
+	      return fn.call(that, a, b, c);
+	    };
+	  }
+	  return function(/* ...args */){
+	    return fn.apply(that, arguments);
+	  };
+	};
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(17)
+	  , document = __webpack_require__(5).document
+	  // in old IE typeof document.createElement is 'object'
+	  , is = isObject(document) && isObject(document.createElement);
+	module.exports = function(it){
+	  return is ? document.createElement(it) : {};
+	};
+
+/***/ },
+/* 39 */
+/***/ function(module, exports) {
+
+	// IE 8- don't enum bug keys
+	module.exports = (
+	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+	).split(',');
+
+/***/ },
+/* 40 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// fallback for non-array-like ES3 and non-enumerable old V8 strings
+	var cof = __webpack_require__(36);
+	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+	  return cof(it) == 'String' ? it.split('') : Object(it);
+	};
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var LIBRARY        = __webpack_require__(89)
+	  , $export        = __webpack_require__(3)
+	  , redefine       = __webpack_require__(98)
+	  , hide           = __webpack_require__(11)
+	  , has            = __webpack_require__(16)
+	  , Iterators      = __webpack_require__(7)
+	  , $iterCreate    = __webpack_require__(86)
+	  , setToStringTag = __webpack_require__(43)
+	  , getPrototypeOf = __webpack_require__(94)
+	  , ITERATOR       = __webpack_require__(4)('iterator')
+	  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
+	  , FF_ITERATOR    = '@@iterator'
+	  , KEYS           = 'keys'
+	  , VALUES         = 'values';
+	
+	var returnThis = function(){ return this; };
+	
+	module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
+	  $iterCreate(Constructor, NAME, next);
+	  var getMethod = function(kind){
+	    if(!BUGGY && kind in proto)return proto[kind];
+	    switch(kind){
+	      case KEYS: return function keys(){ return new Constructor(this, kind); };
+	      case VALUES: return function values(){ return new Constructor(this, kind); };
+	    } return function entries(){ return new Constructor(this, kind); };
+	  };
+	  var TAG        = NAME + ' Iterator'
+	    , DEF_VALUES = DEFAULT == VALUES
+	    , VALUES_BUG = false
+	    , proto      = Base.prototype
+	    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
+	    , $default   = $native || getMethod(DEFAULT)
+	    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
+	    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
+	    , methods, key, IteratorPrototype;
+	  // Fix native
+	  if($anyNative){
+	    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
+	    if(IteratorPrototype !== Object.prototype){
+	      // Set @@toStringTag to native iterators
+	      setToStringTag(IteratorPrototype, TAG, true);
+	      // fix for some old engines
+	      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
+	    }
+	  }
+	  // fix Array#{values, @@iterator}.name in V8 / FF
+	  if(DEF_VALUES && $native && $native.name !== VALUES){
+	    VALUES_BUG = true;
+	    $default = function values(){ return $native.call(this); };
+	  }
+	  // Define iterator
+	  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
+	    hide(proto, ITERATOR, $default);
+	  }
+	  // Plug for library
+	  Iterators[NAME] = $default;
+	  Iterators[TAG]  = returnThis;
+	  if(DEFAULT){
+	    methods = {
+	      values:  DEF_VALUES ? $default : getMethod(VALUES),
+	      keys:    IS_SET     ? $default : getMethod(KEYS),
+	      entries: $entries
+	    };
+	    if(FORCED)for(key in methods){
+	      if(!(key in proto))redefine(proto, key, methods[key]);
+	    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+	  }
+	  return methods;
+	};
+
+/***/ },
+/* 42 */
+/***/ function(module, exports) {
+
+	exports.f = {}.propertyIsEnumerable;
+
+/***/ },
+/* 43 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var def = __webpack_require__(12).f
+	  , has = __webpack_require__(16)
+	  , TAG = __webpack_require__(4)('toStringTag');
+	
+	module.exports = function(it, tag, stat){
+	  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
+	};
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global = __webpack_require__(5)
+	  , SHARED = '__core-js_shared__'
+	  , store  = global[SHARED] || (global[SHARED] = {});
+	module.exports = function(key){
+	  return store[key] || (store[key] = {});
+	};
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.15 ToLength
+	var toInteger = __webpack_require__(27)
+	  , min       = Math.min;
+	module.exports = function(it){
+	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+	};
+
+/***/ },
+/* 46 */
+/***/ function(module, exports) {
+
+	var id = 0
+	  , px = Math.random();
+	module.exports = function(key){
+	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+	};
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var classof   = __webpack_require__(35)
+	  , ITERATOR  = __webpack_require__(4)('iterator')
+	  , Iterators = __webpack_require__(7);
+	module.exports = __webpack_require__(1).getIteratorMethod = function(it){
+	  if(it != undefined)return it[ITERATOR]
+	    || it['@@iterator']
+	    || Iterators[classof(it)];
+	};
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(105);
+	var global        = __webpack_require__(5)
+	  , hide          = __webpack_require__(11)
+	  , Iterators     = __webpack_require__(7)
+	  , TO_STRING_TAG = __webpack_require__(4)('toStringTag');
+	
+	for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
+	  var NAME       = collections[i]
+	    , Collection = global[NAME]
+	    , proto      = Collection && Collection.prototype;
+	  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
+	  Iterators[NAME] = Iterators.Array;
+	}
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _toConsumableArray2 = __webpack_require__(8);
+	
+	var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+	
+	var _constants = __webpack_require__(2);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	(function () {
+	  'use strict';
+	
+	  var ACCORDION = 'mdlext-accordion';
+	  var ACCORDION_VERTICAL = 'mdlext-accordion--vertical';
+	  var ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';
+	  var PANEL = 'mdlext-accordion__panel';
+	  var PANEL_ROLE = 'presentation';
+	  var TAB = 'mdlext-accordion__tab';
+	  var TAB_CAPTION = 'mdlext-accordion__tab__caption';
+	  var TAB_ROLE = 'tab';
+	  var TABPANEL = 'mdlext-accordion__tabpanel';
+	  var TABPANEL_ROLE = 'tabpanel';
+	  var RIPPLE_EFFECT = 'mdlext-js-ripple-effect';
+	  var RIPPLE = 'mdlext-accordion__tab--ripple';
+	  var ANIMATION_EFFECT = 'mdlext-js-animation-effect';
+	  var ANIMATION = 'mdlext-accordion__tabpanel--animation';
+	
+	  /**
+	   * @constructor
+	   * @param {Element} element The element that will be upgraded.
+	   */
+	  var MaterialExtAccordion = function MaterialExtAccordion(element) {
+	
+	    // Stores the Accordion HTML element.
+	    this.element_ = element;
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	  window['MaterialExtAccordion'] = MaterialExtAccordion;
+	
+	  // Helpers
+	  var accordionPanelElements = function accordionPanelElements(element) {
+	    if (!element) {
+	      return {
+	        panel: null,
+	        tab: null,
+	        tabpanel: null
+	      };
+	    } else if (element.classList.contains(PANEL)) {
+	      return {
+	        panel: element,
+	        tab: element.querySelector('.' + TAB),
+	        tabpanel: element.querySelector('.' + TABPANEL)
+	      };
+	    } else {
+	      return {
+	        panel: element.parentNode,
+	        tab: element.parentNode.querySelector('.' + TAB),
+	        tabpanel: element.parentNode.querySelector('.' + TABPANEL)
+	      };
+	    }
+	  };
+	
+	  // Private methods.
+	
+	  /**
+	   * Handles custom command event, 'open', 'close', 'toggle' or upgrade
+	   * @param event. A custom event
+	   * @private
+	   */
+	  MaterialExtAccordion.prototype.commandHandler_ = function (event) {
+	    event.preventDefault();
+	    event.stopPropagation();
+	
+	    if (event && event.detail) {
+	      this.command(event.detail);
+	    }
+	  };
+	
+	  /**
+	   * Dispatch toggle event
+	   * @param {string} state
+	   * @param {Element} tab
+	   * @param {Element} tabpanel
+	   * @private
+	   */
+	  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function (state, tab, tabpanel) {
+	    var ce = new CustomEvent('toggle', {
+	      bubbles: true,
+	      cancelable: true,
+	      detail: { state: state, tab: tab, tabpanel: tabpanel }
+	    });
+	    this.element_.dispatchEvent(ce);
+	  };
+	
+	  /**
+	   * Open tab
+	   * @param {Element} panel
+	   * @param {Element} tab
+	   * @param {Element} tabpanel
+	   * @private
+	   */
+	  MaterialExtAccordion.prototype.openTab_ = function (panel, tab, tabpanel) {
+	    panel.classList.add(_constants.IS_EXPANDED);
+	    tab.setAttribute(_constants.ARIA_EXPANDED, 'true');
+	    tabpanel.removeAttribute('hidden');
+	    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');
+	    this.dispatchToggleEvent_('open', tab, tabpanel);
+	  };
+	
+	  /**
+	   * Close tab
+	   * @param {Element} panel
+	   * @param {Element} tab
+	   * @param {Element} tabpanel
+	   * @private
+	   */
+	  MaterialExtAccordion.prototype.closeTab_ = function (panel, tab, tabpanel) {
+	    panel.classList.remove(_constants.IS_EXPANDED);
+	    tab.setAttribute(_constants.ARIA_EXPANDED, 'false');
+	    tabpanel.setAttribute('hidden', '');
+	    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');
+	    this.dispatchToggleEvent_('close', tab, tabpanel);
+	  };
+	
+	  /**
+	   * Toggle tab
+	   * @param {Element} panel
+	   * @param {Element} tab
+	   * @param {Element} tabpanel
+	   * @private
+	   */
+	  MaterialExtAccordion.prototype.toggleTab_ = function (panel, tab, tabpanel) {
+	    if (!(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled'))) {
+	      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {
+	        this.closeTab_(panel, tab, tabpanel);
+	      } else {
+	        if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {
+	          this.closeTabs_();
+	        }
+	        this.openTab_(panel, tab, tabpanel);
+	      }
+	    }
+	  };
+	
+	  /**
+	   * Open tabs
+	   * @private
+	   */
+	  MaterialExtAccordion.prototype.openTabs_ = function () {
+	    var _this = this;
+	
+	    if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() === 'true') {
+	      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).filter(function (panel) {
+	        return !panel.classList.contains(_constants.IS_EXPANDED);
+	      }).forEach(function (closedItem) {
+	        var tab = closedItem.querySelector('.' + TAB);
+	        if (!tab.hasAttribute('disabled')) {
+	          _this.openTab_(closedItem, tab, closedItem.querySelector('.' + TABPANEL));
+	        }
+	      });
+	    }
+	  };
+	
+	  /**
+	   * Close tabs
+	   * @private
+	   */
+	  MaterialExtAccordion.prototype.closeTabs_ = function () {
+	    var _this2 = this;
+	
+	    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL + '.' + _constants.IS_EXPANDED))).forEach(function (panel) {
+	      var tab = panel.querySelector('.' + TAB);
+	      if (!tab.hasAttribute('disabled')) {
+	        _this2.closeTab_(panel, tab, panel.querySelector('.' + TABPANEL));
+	      }
+	    });
+	  };
+	
+	  // Public methods.
+	
+	  /**
+	   * Upgrade an individual accordion tab
+	   * @public
+	   * @param {Element} tabElement The HTML element for the accordion panel.
+	   */
+	  MaterialExtAccordion.prototype.upgradeTab = function (tabElement) {
+	    var _this3 = this;
+	
+	    var _accordionPanelElemen = accordionPanelElements(tabElement),
+	        panel = _accordionPanelElemen.panel,
+	        tab = _accordionPanelElemen.tab,
+	        tabpanel = _accordionPanelElemen.tabpanel;
+	
+	    var disableTab = function disableTab() {
+	      panel.classList.remove(_constants.IS_EXPANDED);
+	      tab.setAttribute('tabindex', '-1');
+	      tab.setAttribute(_constants.ARIA_EXPANDED, 'false');
+	      tabpanel.setAttribute('hidden', '');
+	      tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');
+	    };
+	
+	    var enableTab = function enableTab() {
+	      if (!tab.hasAttribute(_constants.ARIA_EXPANDED)) {
+	        tab.setAttribute(_constants.ARIA_EXPANDED, 'false');
+	      }
+	
+	      tab.setAttribute('tabindex', '0');
+	
+	      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {
+	        panel.classList.add(_constants.IS_EXPANDED);
+	        tabpanel.removeAttribute('hidden');
+	        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');
+	      } else {
+	        panel.classList.remove(_constants.IS_EXPANDED);
+	        tabpanel.setAttribute('hidden', '');
+	        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');
+	      }
+	    };
+	
+	    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.
+	    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.
+	    /* istanbul ignore next */
+	    var calcMaxTabCaptionWidth = function calcMaxTabCaptionWidth() {
+	
+	      var tabCaption = tab.querySelector('.' + TAB_CAPTION);
+	      if (tabCaption !== null) {
+	        var w = [].concat((0, _toConsumableArray3.default)(tab.children)).filter(function (el) {
+	          return el.classList && !el.classList.contains(TAB_CAPTION);
+	        }).reduce(function (v, el) {
+	          return v + el.offsetWidth;
+	        }, 0);
+	
+	        var maxWidth = tab.clientHeight - w;
+	        if (maxWidth > 0) {
+	          tabCaption.style['max-width'] = maxWidth + 'px';
+	        }
+	      }
+	    };
+	
+	    var selectTab = function selectTab() {
+	      if (!tab.hasAttribute(_constants.ARIA_SELECTED)) {
+	        [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected="true"]'))).forEach(function (selectedTab) {
+	          return selectedTab.removeAttribute(_constants.ARIA_SELECTED);
+	        });
+	        tab.setAttribute(_constants.ARIA_SELECTED, 'true');
+	      }
+	    };
+	
+	    var tabClickHandler = function tabClickHandler() {
+	      _this3.toggleTab_(panel, tab, tabpanel);
+	      selectTab();
+	    };
+	
+	    var tabFocusHandler = function tabFocusHandler() {
+	      selectTab();
+	    };
+	
+	    var tabpanelClickHandler = function tabpanelClickHandler() {
+	      selectTab();
+	    };
+	
+	    var tabpanelFocusHandler = function tabpanelFocusHandler() {
+	      selectTab();
+	    };
+	
+	    var tabKeydownHandler = function tabKeydownHandler(e) {
+	
+	      if (_this3.element_.hasAttribute('disabled')) {
+	        return;
+	      }
+	
+	      if (e.keyCode === _constants.VK_END || e.keyCode === _constants.VK_HOME || e.keyCode === _constants.VK_ARROW_UP || e.keyCode === _constants.VK_ARROW_LEFT || e.keyCode === _constants.VK_ARROW_DOWN || e.keyCode === _constants.VK_ARROW_RIGHT) {
+	
+	        var nextTab = null;
+	        var keyCode = e.keyCode;
+	
+	        if (keyCode === _constants.VK_HOME) {
+	          nextTab = _this3.element_.querySelector('.' + PANEL + ':first-child > .' + TAB);
+	          if (nextTab && nextTab.hasAttribute('disabled')) {
+	            nextTab = null;
+	            keyCode = _constants.VK_ARROW_DOWN;
+	          }
+	        } else if (keyCode === _constants.VK_END) {
+	          nextTab = _this3.element_.querySelector('.' + PANEL + ':last-child > .' + TAB);
+	          if (nextTab && nextTab.hasAttribute('disabled')) {
+	            nextTab = null;
+	            keyCode = _constants.VK_ARROW_UP;
+	          }
+	        }
+	
+	        if (!nextTab) {
+	          var nextPanel = panel;
+	
+	          do {
+	            if (keyCode === _constants.VK_ARROW_UP || keyCode === _constants.VK_ARROW_LEFT) {
+	              nextPanel = nextPanel.previousElementSibling;
+	              if (!nextPanel) {
+	                nextPanel = _this3.element_.querySelector('.' + PANEL + ':last-child');
+	              }
+	              if (nextPanel) {
+	                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);
+	              }
+	            } else if (keyCode === _constants.VK_ARROW_DOWN || keyCode === _constants.VK_ARROW_RIGHT) {
+	              nextPanel = nextPanel.nextElementSibling;
+	              if (!nextPanel) {
+	                nextPanel = _this3.element_.querySelector('.' + PANEL + ':first-child');
+	              }
+	              if (nextPanel) {
+	                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);
+	              }
+	            }
+	
+	            if (nextTab && nextTab.hasAttribute('disabled')) {
+	              nextTab = null;
+	            } else {
+	              break;
+	            }
+	          } while (nextPanel !== panel);
+	        }
+	
+	        if (nextTab) {
+	          e.preventDefault();
+	          e.stopPropagation();
+	          nextTab.focus();
+	
+	          // Workaround for JSDom testing:
+	          // In JsDom 'element.focus()' does not trigger any focus event
+	          if (!nextTab.hasAttribute(_constants.ARIA_SELECTED)) {
+	
+	            [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected="true"]'))).forEach(function (selectedTab) {
+	              return selectedTab.removeAttribute(_constants.ARIA_SELECTED);
+	            });
+	
+	            nextTab.setAttribute(_constants.ARIA_SELECTED, 'true');
+	          }
+	        }
+	      } else if (e.keyCode === _constants.VK_ENTER || e.keyCode === _constants.VK_SPACE) {
+	        e.preventDefault();
+	        e.stopPropagation();
+	        _this3.toggleTab_(panel, tab, tabpanel);
+	      }
+	    };
+	
+	    if (tab === null) {
+	      throw new Error('There must be a tab element for each accordion panel.');
+	    }
+	
+	    if (tabpanel === null) {
+	      throw new Error('There must be a tabpanel element for each accordion panel.');
+	    }
+	
+	    panel.setAttribute('role', PANEL_ROLE);
+	    tab.setAttribute('role', TAB_ROLE);
+	    tabpanel.setAttribute('role', TABPANEL_ROLE);
+	
+	    if (tab.hasAttribute('disabled')) {
+	      disableTab();
+	    } else {
+	      enableTab();
+	    }
+	
+	    if (this.element_.classList.contains(ACCORDION_HORIZONTAL)) {
+	      calcMaxTabCaptionWidth();
+	    }
+	
+	    if (this.element_.classList.contains(RIPPLE_EFFECT)) {
+	      tab.classList.add(RIPPLE);
+	    }
+	
+	    if (this.element_.classList.contains(ANIMATION_EFFECT)) {
+	      tabpanel.classList.add(ANIMATION);
+	    }
+	
+	    // Remove listeners, just in case ...
+	    tab.removeEventListener('click', tabClickHandler);
+	    tab.removeEventListener('focus', tabFocusHandler);
+	    tab.removeEventListener('keydown', tabKeydownHandler);
+	    tabpanel.removeEventListener('click', tabpanelClickHandler);
+	    tabpanel.removeEventListener('focus', tabpanelFocusHandler);
+	
+	    tab.addEventListener('click', tabClickHandler);
+	    tab.addEventListener('focus', tabFocusHandler);
+	    tab.addEventListener('keydown', tabKeydownHandler);
+	    tabpanel.addEventListener('click', tabpanelClickHandler, true);
+	    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);
+	  };
+	  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;
+	
+	  /**
+	   * Execute command
+	   * @param detail
+	   */
+	  MaterialExtAccordion.prototype.command = function (detail) {
+	    var _this4 = this;
+	
+	    var openTab = function openTab(tabElement) {
+	
+	      if (tabElement === undefined) {
+	        _this4.openTabs_();
+	      } else if (tabElement !== null) {
+	        var _accordionPanelElemen2 = accordionPanelElements(tabElement),
+	            panel = _accordionPanelElemen2.panel,
+	            tab = _accordionPanelElemen2.tab,
+	            tabpanel = _accordionPanelElemen2.tabpanel;
+	
+	        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() !== 'true') {
+	          _this4.toggleTab_(panel, tab, tabpanel);
+	        }
+	      }
+	    };
+	
+	    var closeTab = function closeTab(tabElement) {
+	      if (tabElement === undefined) {
+	        _this4.closeTabs_();
+	      } else if (tabElement !== null) {
+	        var _accordionPanelElemen3 = accordionPanelElements(tabElement),
+	            panel = _accordionPanelElemen3.panel,
+	            tab = _accordionPanelElemen3.tab,
+	            tabpanel = _accordionPanelElemen3.tabpanel;
+	
+	        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {
+	          _this4.toggleTab_(panel, tab, tabpanel);
+	        }
+	      }
+	    };
+	
+	    var toggleTab = function toggleTab(tabElement) {
+	      if (tabElement) {
+	        var _accordionPanelElemen4 = accordionPanelElements(tabElement),
+	            panel = _accordionPanelElemen4.panel,
+	            tab = _accordionPanelElemen4.tab,
+	            tabpanel = _accordionPanelElemen4.tabpanel;
+	
+	        _this4.toggleTab_(panel, tab, tabpanel);
+	      }
+	    };
+	
+	    if (detail && detail.action) {
+	      var action = detail.action,
+	          target = detail.target;
+	
+	
+	      switch (action.toLowerCase()) {
+	        case 'open':
+	          openTab(target);
+	          break;
+	        case 'close':
+	          closeTab(target);
+	          break;
+	        case 'toggle':
+	          toggleTab(target);
+	          break;
+	        case 'upgrade':
+	          if (target) {
+	            this.upgradeTab(target);
+	          }
+	          break;
+	        default:
+	          throw new Error('Unknown action "' + action + '". Action must be one of "open", "close", "toggle" or "upgrade"');
+	      }
+	    }
+	  };
+	  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtAccordion.prototype.init = function () {
+	    var _this5 = this;
+	
+	    if (this.element_) {
+	      // Do the init required for this component to work
+	      if (!(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {
+	        throw new Error('Accordion must have one of the classes "' + ACCORDION_HORIZONTAL + '" or "' + ACCORDION_VERTICAL + '"');
+	      }
+	
+	      this.element_.setAttribute('role', 'tablist');
+	
+	      if (!this.element_.hasAttribute(_constants.ARIA_MULTISELECTABLE)) {
+	        this.element_.setAttribute(_constants.ARIA_MULTISELECTABLE, 'false');
+	      }
+	
+	      this.element_.removeEventListener('command', this.commandHandler_);
+	      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+	
+	      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).forEach(function (panel) {
+	        return _this5.upgradeTab(panel);
+	      });
+	
+	      // Set upgraded flag
+	      this.element_.classList.add(_constants.IS_UPGRADED);
+	    }
+	  };
+	
+	  /*
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   *
+	   * Nothing to downgrade
+	   *
+	   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {
+	     'use strict';
+	     console.log('***** MaterialExtAccordion.mdlDowngrade');
+	   };
+	   */
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /* eslint no-undef: 0 */
+	  componentHandler.register({
+	    constructor: MaterialExtAccordion,
+	    classAsString: 'MaterialExtAccordion',
+	    cssClass: 'mdlext-js-accordion',
+	    widget: true
+	  });
+	})(); /**
+	       * @license
+	       * Copyright 2016 Leif Olsen. 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.
+	       *
+	       * This code is built with Google Material Design Lite,
+	       * which is Licensed under the Apache License, Version 2.0
+	       */
+	
+	/**
+	 * A WAI-ARIA friendly accordion component.
+	 * An accordion is a collection of expandable panels associated with a common outer container. Panels consist
+	 * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections
+	 * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.
+	 * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates
+	 * and makes the contents of each panel visible (or not) by interacting with the Accordion Header
+	 */
+
+/***/ },
+/* 50 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _isInteger = __webpack_require__(32);
+	
+	var _isInteger2 = _interopRequireDefault(_isInteger);
+	
+	var _toConsumableArray2 = __webpack_require__(8);
+	
+	var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+	
+	var _assign = __webpack_require__(33);
+	
+	var _assign2 = _interopRequireDefault(_assign);
+	
+	var _intervalFunction = __webpack_require__(30);
+	
+	var _intervalFunction2 = _interopRequireDefault(_intervalFunction);
+	
+	var _easing = __webpack_require__(29);
+	
+	var _jsonUtils = __webpack_require__(14);
+	
+	var _constants = __webpack_require__(2);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	/**
+	 * @license
+	 * Copyright 2016 Leif Olsen. 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.
+	 *
+	 * This code is built with Google Material Design Lite,
+	 * which is Licensed under the Apache License, Version 2.0
+	 */
+	
+	/**
+	 * Image carousel
+	 */
+	
+	var MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';
+	
+	(function () {
+	  'use strict';
+	
+	  //const CAROUSEL = 'mdlext-carousel';
+	
+	  var SLIDE = 'mdlext-carousel__slide';
+	  var ROLE = 'list';
+	  var SLIDE_ROLE = 'listitem';
+	
+	  /**
+	   * @constructor
+	   * @param {Element} element The element that will be upgraded.
+	   */
+	  var MaterialExtCarousel = function MaterialExtCarousel(element) {
+	    // Stores the element.
+	    this.element_ = element;
+	
+	    // Default config
+	    this.config_ = {
+	      interactive: true,
+	      autostart: false,
+	      type: 'slide',
+	      interval: 1000,
+	      animationLoop: (0, _intervalFunction2.default)(1000)
+	    };
+	
+	    this.scrollAnimation_ = (0, _intervalFunction2.default)(33);
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	
+	  window['MaterialExtCarousel'] = MaterialExtCarousel;
+	
+	  /**
+	   * Start slideshow animation
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.startSlideShow_ = function () {
+	    var _this = this;
+	
+	    var nextSlide = function nextSlide() {
+	      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected]');
+	      if (slide) {
+	        slide.removeAttribute('aria-selected');
+	        slide = slide.nextElementSibling;
+	      }
+	      if (!slide) {
+	        slide = _this.element_.querySelector('.' + SLIDE + ':first-child');
+	        _this.animateScroll_(0);
+	      }
+	      if (slide) {
+	        _this.moveSlideIntoViewport_(slide);
+	        slide.setAttribute('aria-selected', '');
+	        _this.emitSelectEvent_('next', null, slide);
+	        return true;
+	      }
+	      return false;
+	    };
+	
+	    var nextScroll = function nextScroll(direction) {
+	      var nextDirection = direction;
+	
+	      if ('next' === direction && _this.element_.scrollLeft === _this.element_.scrollWidth - _this.element_.clientWidth) {
+	        nextDirection = 'prev';
+	      } else if (_this.element_.scrollLeft === 0) {
+	        nextDirection = 'next';
+	      }
+	      var x = 'next' === nextDirection ? Math.min(_this.element_.scrollLeft + _this.element_.clientWidth, _this.element_.scrollWidth - _this.element_.clientWidth) : Math.max(_this.element_.scrollLeft - _this.element_.clientWidth, 0);
+	
+	      _this.animateScroll_(x, 1000);
+	      return nextDirection;
+	    };
+	
+	    if (!this.config_.animationLoop.started) {
+	      (function () {
+	        _this.config_.animationLoop.interval = _this.config_.interval;
+	        var direction = 'next';
+	
+	        if ('scroll' === _this.config_.type) {
+	          _this.config_.animationLoop.start(function () {
+	            direction = nextScroll(direction);
+	            return true; // It runs until cancelSlideShow_ is triggered
+	          });
+	        } else {
+	          nextSlide();
+	          _this.config_.animationLoop.start(function () {
+	            return nextSlide(); // It runs until cancelSlideShow_ is triggered
+	          });
+	        }
+	      })();
+	    }
+	
+	    // TODO: Pause animation when carousel is not in browser viewport or user changes tab
+	  };
+	
+	  /**
+	   * Cancel slideshow if running. Emmits a 'pause' event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.cancelSlideShow_ = function () {
+	    if (this.config_.animationLoop.started) {
+	      this.config_.animationLoop.stop();
+	      this.emitSelectEvent_('pause', _constants.VK_ESC, this.element_.querySelector('.' + SLIDE + '[aria-selected]'));
+	    }
+	  };
+	
+	  /**
+	   * Animate scroll
+	   * @param newPosition
+	   * @param newDuration
+	   * @param completedCallback
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.animateScroll_ = function (newPosition, newDuration, completedCallback) {
+	    var _this2 = this;
+	
+	    var start = this.element_.scrollLeft;
+	    var distance = newPosition - start;
+	
+	    if (distance !== 0) {
+	      (function () {
+	        var duration = Math.max(Math.min(Math.abs(distance), newDuration || 400), 100); // duration is between 100 and newDuration||400ms||distance
+	        var t = 0;
+	        _this2.scrollAnimation_.stop();
+	        _this2.scrollAnimation_.start(function (timeElapsed) {
+	          t += timeElapsed;
+	          if (t < duration) {
+	            _this2.element_.scrollLeft = (0, _easing.inOutQuintic)(t, start, distance, duration);
+	            return true;
+	          } else {
+	            _this2.element_.scrollLeft = newPosition;
+	            if (completedCallback) {
+	              completedCallback();
+	            }
+	            return false;
+	          }
+	        });
+	      })();
+	    } else {
+	      if (completedCallback) {
+	        completedCallback();
+	      }
+	    }
+	  };
+	
+	  /**
+	   * Execute commend
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.command_ = function (event) {
+	    var _this3 = this;
+	
+	    var x = 0;
+	    var slide = null;
+	    var a = event.detail.action.toLowerCase();
+	
+	    // Cancel slideshow if running
+	    this.cancelSlideShow_();
+	
+	    switch (a) {
+	      case 'first':
+	        slide = this.element_.querySelector('.' + SLIDE + ':first-child');
+	        break;
+	
+	      case 'last':
+	        x = this.element_.scrollWidth - this.element_.clientWidth;
+	        slide = this.element_.querySelector('.' + SLIDE + ':last-child');
+	        break;
+	
+	      case 'scroll-prev':
+	        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);
+	        break;
+	
+	      case 'scroll-next':
+	        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);
+	        break;
+	
+	      case 'next':
+	      case 'prev':
+	        slide = this.element_.querySelector('.' + SLIDE + '[aria-selected]');
+	        if (slide) {
+	          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;
+	          this.setAriaSelected_(slide);
+	          this.emitSelectEvent_(a, null, slide);
+	        }
+	        return;
+	
+	      case 'play':
+	        (0, _assign2.default)(this.config_, event.detail);
+	        this.startSlideShow_();
+	        return;
+	
+	      case 'pause':
+	        return;
+	
+	      default:
+	        return;
+	    }
+	
+	    this.animateScroll_(x, undefined, function () {
+	      if ('scroll-next' === a || 'scroll-prev' === a) {
+	        var slides = _this3.getSlidesInViewport_();
+	        if (slides.length > 0) {
+	          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];
+	        }
+	      }
+	      _this3.setAriaSelected_(slide);
+	      _this3.emitSelectEvent_(a, null, slide);
+	    });
+	  };
+	
+	  /**
+	   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause
+	   * @param event. A custom event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.commandHandler_ = function (event) {
+	    event.preventDefault();
+	    event.stopPropagation();
+	    if (event.detail && event.detail.action) {
+	      this.command_(event);
+	    }
+	  };
+	
+	  /**
+	   * Handle keypress
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.keyDownHandler_ = function (event) {
+	
+	    if (event && event.target && event.target !== this.element_) {
+	
+	      var action = 'first';
+	
+	      if (event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_PAGE_UP || event.keyCode === _constants.VK_PAGE_DOWN) {
+	
+	        event.preventDefault();
+	        if (event.keyCode === _constants.VK_END) {
+	          action = 'last';
+	        } else if (event.keyCode === _constants.VK_PAGE_UP) {
+	          action = 'scroll-prev';
+	        } else if (event.keyCode === _constants.VK_PAGE_DOWN) {
+	          action = 'scroll-next';
+	        }
+	
+	        var cmd = new CustomEvent('select', {
+	          detail: {
+	            action: action
+	          }
+	        });
+	        this.command_(cmd);
+	      } else if (event.keyCode === _constants.VK_TAB || event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {
+	
+	        var slide = getSlide_(event.target);
+	
+	        if (!slide) {
+	          return;
+	        }
+	
+	        // Cancel slideshow if running
+	        this.cancelSlideShow_();
+	
+	        switch (event.keyCode) {
+	          case _constants.VK_ARROW_UP:
+	          case _constants.VK_ARROW_LEFT:
+	            action = 'prev';
+	            slide = slide.previousElementSibling;
+	            break;
+	
+	          case _constants.VK_ARROW_DOWN:
+	          case _constants.VK_ARROW_RIGHT:
+	            action = 'next';
+	            slide = slide.nextElementSibling;
+	            break;
+	
+	          case _constants.VK_TAB:
+	            if (event.shiftKey) {
+	              action = 'prev';
+	              slide = slide.previousElementSibling;
+	            } else {
+	              action = 'next';
+	              slide = slide.nextElementSibling;
+	            }
+	            break;
+	
+	          case _constants.VK_SPACE:
+	          case _constants.VK_ENTER:
+	            action = 'select';
+	            break;
+	        }
+	
+	        if (slide) {
+	          event.preventDefault();
+	          setFocus_(slide);
+	          this.emitSelectEvent_(action, event.keyCode, slide);
+	        }
+	      }
+	    }
+	  };
+	
+	  /**
+	   * Handle dragging
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.dragHandler_ = function (event) {
+	    var _this4 = this;
+	
+	    event.preventDefault();
+	
+	    // Cancel slideshow if running
+	    this.cancelSlideShow_();
+	
+	    var updating = false;
+	    var rAFDragId = 0;
+	
+	    var startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);
+	    var prevX = startX;
+	    var targetElement = event.target;
+	
+	    var update = function update(e) {
+	      var currentX = e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0);
+	      var dx = prevX - currentX;
+	
+	      if (dx < 0) {
+	        _this4.element_.scrollLeft = Math.max(_this4.element_.scrollLeft + dx, 0);
+	      } else if (dx > 0) {
+	        _this4.element_.scrollLeft = Math.min(_this4.element_.scrollLeft + dx, _this4.element_.scrollWidth - _this4.element_.clientWidth);
+	      }
+	
+	      prevX = currentX;
+	      updating = false;
+	    };
+	
+	    // drag handler
+	    var drag = function drag(e) {
+	      e.preventDefault();
+	
+	      if (!updating) {
+	        rAFDragId = window.requestAnimationFrame(function () {
+	          return update(e);
+	        });
+	        updating = true;
+	      }
+	    };
+	
+	    // end drag handler
+	    var endDrag = function endDrag(e) {
+	      e.preventDefault();
+	
+	      _this4.element_.removeEventListener('mousemove', drag);
+	      _this4.element_.removeEventListener('touchmove', drag);
+	      window.removeEventListener('mouseup', endDrag);
+	      window.removeEventListener('touchend', endDrag);
+	
+	      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/
+	      window.cancelAnimationFrame(rAFDragId);
+	
+	      var slide = getSlide_(targetElement);
+	      setFocus_(slide);
+	      _this4.emitSelectEvent_('click', null, slide);
+	    };
+	
+	    this.element_.addEventListener('mousemove', drag);
+	    this.element_.addEventListener('touchmove', drag);
+	    window.addEventListener('mouseup', endDrag);
+	    window.addEventListener('touchend', endDrag);
+	  };
+	
+	  /**
+	   * Handle click
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.clickHandler_ = function (event) {
+	    // Click is handled by drag
+	    event.preventDefault();
+	  };
+	
+	  /**
+	   * Handle focus
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.focusHandler_ = function (event) {
+	    var slide = getSlide_(event.target);
+	    if (slide) {
+	      // The last focused/selected slide has 'aria-selected', even if focus is lost
+	      this.setAriaSelected_(slide);
+	      slide.classList.add(_constants.IS_FOCUSED);
+	    }
+	  };
+	
+	  /**
+	   * Handle blur
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.blurHandler_ = function (event) {
+	    var slide = getSlide_(event.target);
+	    if (slide) {
+	      slide.classList.remove(_constants.IS_FOCUSED);
+	    }
+	  };
+	
+	  /**
+	   * Emits a custeom 'select' event
+	   * @param command
+	   * @param keyCode
+	   * @param slide
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.emitSelectEvent_ = function (command, keyCode, slide) {
+	
+	    if (slide) {
+	      this.moveSlideIntoViewport_(slide);
+	
+	      var evt = new CustomEvent('select', {
+	        bubbles: true,
+	        cancelable: true,
+	        detail: {
+	          command: command,
+	          keyCode: keyCode,
+	          source: slide
+	        }
+	      });
+	      this.element_.dispatchEvent(evt);
+	    }
+	  };
+	
+	  /**
+	   * Get the first visible slide in component viewport
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.getSlidesInViewport_ = function () {
+	    var carouselRect = this.element_.getBoundingClientRect();
+	
+	    var slidesInViewport = [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).filter(function (slide) {
+	      var slideRect = slide.getBoundingClientRect();
+	      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;
+	    });
+	    return slidesInViewport;
+	  };
+	
+	  /**
+	   * Move slide into component viewport - if needed
+	   * @param slide
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function (slide) {
+	    var carouselRect = this.element_.getBoundingClientRect();
+	    var slideRect = slide.getBoundingClientRect();
+	
+	    if (slideRect.left < carouselRect.left) {
+	      var x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);
+	      this.animateScroll_(x);
+	    } else if (slideRect.right > carouselRect.right) {
+	      var _x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);
+	      this.animateScroll_(_x);
+	    }
+	  };
+	
+	  /**
+	   * Removes 'aria-selected' from all slides in carousel
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.setAriaSelected_ = function (slide) {
+	    if (slide) {
+	      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected]'))).forEach(function (slide) {
+	        return slide.removeAttribute('aria-selected');
+	      });
+	      slide.setAttribute('aria-selected', '');
+	    }
+	  };
+	
+	  /**
+	   * Removes event listeners
+	   * @private
+	   */
+	  MaterialExtCarousel.prototype.removeListeners_ = function () {
+	    this.element_.removeEventListener('focus', this.focusHandler_);
+	    this.element_.removeEventListener('blur', this.blurHandler_);
+	    this.element_.removeEventListener('keydown', this.keyDownHandler_);
+	    this.element_.removeEventListener('mousedown', this.dragHandler_);
+	    this.element_.removeEventListener('touchstart', this.dragHandler_);
+	    this.element_.removeEventListener('click', this.clickHandler_, false);
+	    this.element_.removeEventListener('command', this.commandHandler_);
+	    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);
+	  };
+	
+	  // Helpers
+	  var getSlide_ = function getSlide_(element) {
+	    return element.closest('.' + SLIDE);
+	  };
+	
+	  var setFocus_ = function setFocus_(slide) {
+	    if (slide) {
+	      slide.focus();
+	    }
+	  };
+	
+	  var addRipple_ = function addRipple_(slide) {
+	    if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {
+	      var rippleContainer = document.createElement('span');
+	      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);
+	      rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);
+	      var ripple = document.createElement('span');
+	      ripple.classList.add(_constants.MDL_RIPPLE);
+	      rippleContainer.appendChild(ripple);
+	
+	      var img = slide.querySelector('img');
+	      if (img) {
+	        // rippleContainer blocks image title
+	        rippleContainer.title = img.title;
+	      }
+	      slide.appendChild(rippleContainer);
+	      componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);
+	    }
+	  };
+	  // End helpers
+	
+	
+	  // Public methods.
+	
+	  /**
+	   * Cancel animation - if running.
+	   *
+	   * @public
+	   */
+	  MaterialExtCarousel.prototype.stopAnimation = function () {
+	    this.config_.animationLoop.stop();
+	  };
+	  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;
+	
+	  /**
+	   * Upgrade slides
+	   * Use if more list elements are added later (dynamically)
+	   *
+	   * @public
+	   */
+	  MaterialExtCarousel.prototype.upgradeSlides = function () {
+	    var _this5 = this;
+	
+	    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);
+	
+	    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {
+	
+	      slide.setAttribute('role', SLIDE_ROLE);
+	
+	      if (_this5.config_.interactive) {
+	        if (!slide.getAttribute('tabindex')) {
+	          slide.setAttribute('tabindex', '0');
+	        }
+	        if (hasRippleEffect) {
+	          addRipple_(slide);
+	        }
+	      } else {
+	        slide.setAttribute('tabindex', '-1');
+	      }
+	    });
+	  };
+	  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;
+	
+	  /**
+	   * Get config object
+	   *
+	   * @public
+	   */
+	  MaterialExtCarousel.prototype.getConfig = function () {
+	    return this.config_;
+	  };
+	  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtCarousel.prototype.init = function () {
+	
+	    if (this.element_) {
+	      // Config
+	      if (this.element_.hasAttribute('data-config')) {
+	        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.element_.getAttribute('data-config'), this.config_);
+	      }
+	
+	      // Wai-Aria
+	      this.element_.setAttribute('role', ROLE);
+	
+	      // Prefer tabindex -1
+	      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {
+	        this.element_.setAttribute('tabindex', -1);
+	      }
+	
+	      // Remove listeners, just in case ...
+	      this.removeListeners_();
+	
+	      if (this.config_.interactive) {
+	
+	        // Ripple
+	        var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);
+	        if (hasRippleEffect) {
+	          this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);
+	        }
+	
+	        // Listen to focus/blur events
+	        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);
+	        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);
+	
+	        // Listen to keyboard events
+	        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);
+	
+	        // Listen to drag events
+	        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);
+	        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);
+	
+	        // Listen to click events
+	        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);
+	      }
+	
+	      // Listen to custom 'command' event
+	      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+	
+	      // Listen to 'mdl-componentdowngraded' event
+	      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+	
+	      // Slides collection
+	      this.upgradeSlides();
+	
+	      // Set upgraded flag
+	      this.element_.classList.add(_constants.IS_UPGRADED);
+	
+	      if (this.config_.autostart) {
+	        // Start slideshow
+	        this.startSlideShow_();
+	      }
+	    }
+	  };
+	
+	  /*
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   */
+	  MaterialExtCarousel.prototype.mdlDowngrade_ = function () {
+	    'use strict';
+	    //console.log('***** MaterialExtCarousel.mdlDowngrade_');
+	
+	    // Stop animation - if any
+	
+	    this.stopAnimation();
+	
+	    // Remove listeners
+	    this.removeListeners_();
+	  };
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /* eslint no-undef: 0 */
+	  componentHandler.register({
+	    constructor: MaterialExtCarousel,
+	    classAsString: 'MaterialExtCarousel',
+	    cssClass: 'mdlext-js-carousel',
+	    widget: true
+	  });
+	})();
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _classCallCheck2 = __webpack_require__(22);
+	
+	var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+	
+	var _createClass2 = __webpack_require__(23);
+	
+	var _createClass3 = _interopRequireDefault(_createClass2);
+	
+	var _constants = __webpack_require__(2);
+	
+	var _stringUtils = __webpack_require__(15);
+	
+	var _domUtils = __webpack_require__(21);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	var JS_COLLAPSIBLE = 'mdlext-js-collapsible'; /**
+	                                               * @license
+	                                               * Copyright 2016-2017 Leif Olsen. 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.
+	                                               *
+	                                               * This code is built with Google Material Design Lite,
+	                                               * which is Licensed under the Apache License, Version 2.0
+	                                               */
+	
+	/**
+	 * A collapsible is a component to mark expandable and collapsible regions.
+	 * The component use the aria-expanded state to indicate whether regions of
+	 * the content are collapsible, and to expose whether a region is currently
+	 * expanded or collapsed.
+	 * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions
+	 */
+	
+	var COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';
+	var COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';
+	var COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';
+	
+	/**
+	 * The collapsible component
+	 */
+	
+	var Collapsible = function () {
+	
+	  /**
+	   * @constructor
+	   * @param {HTMLElement} element The element that this component is connected to.
+	   */
+	  function Collapsible(element) {
+	    var _this = this;
+	
+	    (0, _classCallCheck3.default)(this, Collapsible);
+	    this.element_ = null;
+	    this.controlElement_ = null;
+	
+	    this.keyDownHandler = function (event) {
+	      if (event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE) {
+	        event.preventDefault();
+	
+	        // Trigger click
+	        (event.target || _this.controlElement).dispatchEvent(new MouseEvent('click', {
+	          bubbles: true,
+	          cancelable: true,
+	          view: window
+	        }));
+	      }
+	    };
+	
+	    this.clickHandler = function (event) {
+	      if (!_this.isDisabled) {
+	        if (event.target !== _this.controlElement) {
+	          // Do not toggle if a focusable element inside the control element triggered the event
+	          var p = (0, _domUtils.getParentElements)(event.target, _this.controlElement);
+	          p.push(event.target);
+	          if (p.find(function (el) {
+	            return (0, _domUtils.isFocusable)(el);
+	          })) {
+	            return;
+	          }
+	        }
+	        _this.toggle();
+	      }
+	    };
+	
+	    this.element_ = element;
+	    this.init();
+	  }
+	
+	  (0, _createClass3.default)(Collapsible, [{
+	    key: 'collapse',
+	    value: function collapse() {
+	      if (!this.isDisabled && this.isExpanded) {
+	        if (this.dispatchToggleEvent('collapse')) {
+	          this.controlElement.setAttribute('aria-expanded', 'false');
+	          var regions = this.regionElements.slice(0);
+	          for (var i = regions.length - 1; i >= 0; --i) {
+	            regions[i].setAttribute('hidden', '');
+	          }
+	        }
+	      }
+	    }
+	  }, {
+	    key: 'expand',
+	    value: function expand() {
+	      if (!this.isDisabled && !this.isExpanded) {
+	        if (this.dispatchToggleEvent('expand')) {
+	          this.controlElement.setAttribute('aria-expanded', 'true');
+	          this.regionElements.forEach(function (region) {
+	            return region.removeAttribute('hidden');
+	          });
+	        }
+	      }
+	    }
+	  }, {
+	    key: 'toggle',
+	    value: function toggle() {
+	      if (this.isExpanded) {
+	        this.collapse();
+	      } else {
+	        this.expand();
+	      }
+	    }
+	  }, {
+	    key: 'dispatchToggleEvent',
+	    value: function dispatchToggleEvent(action) {
+	      return this.element.dispatchEvent(new CustomEvent('toggle', {
+	        bubbles: true,
+	        cancelable: true,
+	        detail: {
+	          action: action
+	        }
+	      }));
+	    }
+	  }, {
+	    key: 'disableToggle',
+	    value: function disableToggle() {
+	      this.controlElement.setAttribute('aria-disabled', true);
+	    }
+	  }, {
+	    key: 'enableToggle',
+	    value: function enableToggle() {
+	      this.controlElement.removeAttribute('aria-disabled');
+	    }
+	  }, {
+	    key: 'addRegionId',
+	    value: function addRegionId(regionId) {
+	      var ids = this.regionIds;
+	      if (!ids.find(function (id) {
+	        return regionId === id;
+	      })) {
+	        ids.push(regionId);
+	        this.controlElement.setAttribute('aria-controls', ids.join(' '));
+	      }
+	    }
+	  }, {
+	    key: 'addRegionElement',
+	    value: function addRegionElement(region) {
+	      if (!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) || region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {
+	        region.classList.add(COLLAPSIBLE_GROUP_CLASS);
+	      }
+	
+	      if (!region.hasAttribute('role')) {
+	        var role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';
+	        region.setAttribute('role', role);
+	      }
+	
+	      if (!region.hasAttribute('id')) {
+	        region.id = region.getAttribute('role') + '-' + (0, _stringUtils.randomString)();
+	      }
+	
+	      if (this.isExpanded) {
+	        region.removeAttribute('hidden');
+	      } else {
+	        region.setAttribute('hidden', '');
+	      }
+	      this.addRegionId(region.id);
+	    }
+	  }, {
+	    key: 'removeRegionElement',
+	    value: function removeRegionElement(region) {
+	      if (region && region.id) {
+	        var ids = this.regionIds.filter(function (id) {
+	          return id === region.id;
+	        });
+	        this.controlElement.setAttribute('aria-controls', ids.join(' '));
+	      }
+	    }
+	  }, {
+	    key: 'removeListeners',
+	    value: function removeListeners() {
+	      this.controlElement.removeEventListener('keydown', this.keyDownHandler);
+	      this.controlElement.removeEventListener('click', this.clickHandler);
+	    }
+	  }, {
+	    key: 'init',
+	    value: function init() {
+	      var _this2 = this;
+	
+	      var initControl = function initControl() {
+	        // Find the button element
+	        _this2.controlElement_ = _this2.element.querySelector('.' + COLLAPSIBLE_CONTROL_CLASS) || _this2.element;
+	
+	        // Add "aria-expanded" attribute if not present
+	        if (!_this2.controlElement.hasAttribute('aria-expanded')) {
+	          _this2.controlElement.setAttribute('aria-expanded', 'false');
+	        }
+	
+	        // Add role=button if control != <button>
+	        if (_this2.controlElement.nodeName.toLowerCase() !== 'button') {
+	          _this2.controlElement.setAttribute('role', 'button');
+	        }
+	
+	        // Add tabindex
+	        if (!(0, _domUtils.isFocusable)(_this2.controlElement) && !_this2.controlElement.hasAttribute('tabindex')) {
+	          _this2.controlElement.setAttribute('tabindex', '0');
+	        }
+	      };
+	
+	      var initRegions = function initRegions() {
+	        var regions = [];
+	        if (!_this2.controlElement.hasAttribute('aria-controls')) {
+	          // Add siblings as collapsible region(s)
+	          var r = _this2.element.nextElementSibling;
+	          while (r) {
+	            if (r.classList.contains(COLLAPSIBLE_GROUP_CLASS) || r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {
+	              regions.push(r);
+	            } else if (r.classList.contains(JS_COLLAPSIBLE)) {
+	              // A new collapsible component
+	              break;
+	            }
+	            r = r.nextElementSibling;
+	          }
+	        } else {
+	          regions = _this2.regionElements;
+	        }
+	        regions.forEach(function (region) {
+	          return _this2.addRegionElement(region);
+	        });
+	      };
+	
+	      var addListeners = function addListeners() {
+	        _this2.controlElement.addEventListener('keydown', _this2.keyDownHandler);
+	        _this2.controlElement.addEventListener('click', _this2.clickHandler);
+	      };
+	
+	      initControl();
+	      initRegions();
+	      this.removeListeners();
+	      addListeners();
+	    }
+	  }, {
+	    key: 'downgrade',
+	    value: function downgrade() {
+	      this.removeListeners();
+	    }
+	  }, {
+	    key: 'element',
+	    get: function get() {
+	      return this.element_;
+	    }
+	  }, {
+	    key: 'controlElement',
+	    get: function get() {
+	      return this.controlElement_;
+	    }
+	  }, {
+	    key: 'isDisabled',
+	    get: function get() {
+	      return this.controlElement.hasAttribute('disabled') && this.controlElement.getAttribute('disabled').toLowerCase() !== 'false' || this.controlElement.hasAttribute('aria-disabled') && this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false';
+	    }
+	  }, {
+	    key: 'isExpanded',
+	    get: function get() {
+	      return this.controlElement.hasAttribute('aria-expanded') && this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';
+	    }
+	  }, {
+	    key: 'regionIds',
+	    get: function get() {
+	      return this.controlElement.hasAttribute('aria-controls') ? this.controlElement.getAttribute('aria-controls').split(' ') : [];
+	    }
+	  }, {
+	    key: 'regionElements',
+	    get: function get() {
+	      return this.regionIds.map(function (id) {
+	        return document.querySelector('#' + id);
+	      }).filter(function (el) {
+	        return el != null;
+	      });
+	    }
+	  }]);
+	  return Collapsible;
+	}();
+	
+	(function () {
+	  'use strict';
+	
+	  /**
+	   * @constructor
+	   * @param {HTMLElement} element The element that will be upgraded.
+	   */
+	
+	  var MaterialExtCollapsible = function MaterialExtCollapsible(element) {
+	    this.element_ = element;
+	    this.collapsible = null;
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	  window['MaterialExtCollapsible'] = MaterialExtCollapsible;
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtCollapsible.prototype.init = function () {
+	    if (this.element_) {
+	      this.collapsible = new Collapsible(this.element_);
+	      this.element_.classList.add(_constants.IS_UPGRADED);
+	
+	      // Listen to 'mdl-componentdowngraded' event
+	      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+	    }
+	  };
+	
+	  /*
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   */
+	  MaterialExtCollapsible.prototype.mdlDowngrade_ = function () {
+	    this.collapsible.downgrade();
+	  };
+	
+	  // Public methods.
+	
+	  /**
+	   * Get control element.
+	   * @return {HTMLElement} element The element that controls the collapsible region.
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.getControlElement = function () {
+	    return this.collapsible.controlElement;
+	  };
+	  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;
+	
+	  /**
+	   * Get region elements controlled by this collapsible
+	   * @returns {Array<HTMLElement>} the collapsible region elements
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.getRegionElements = function () {
+	    return this.collapsible.regionElements;
+	  };
+	  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;
+	
+	  /**
+	   * Add region elements.
+	   * @param {Array<HTMLElement>} elements The element that will be upgraded.
+	   * @return {void}
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.addRegionElements = function () {
+	    var _this3 = this;
+	
+	    for (var _len = arguments.length, elements = Array(_len), _key = 0; _key < _len; _key++) {
+	      elements[_key] = arguments[_key];
+	    }
+	
+	    elements.forEach(function (element) {
+	      return _this3.collapsible.addRegionElement(element);
+	    });
+	  };
+	  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;
+	
+	  /**
+	   * Remove collapsible region(s) from component.
+	   * Note: This operation does not delete the element from the DOM tree.
+	   * @param {Array<HTMLElement>} elements The element that will be upgraded.
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.removeRegionElements = function () {
+	    var _this4 = this;
+	
+	    for (var _len2 = arguments.length, elements = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+	      elements[_key2] = arguments[_key2];
+	    }
+	
+	    elements.forEach(function (element) {
+	      return _this4.collapsible.removeRegionElement(element);
+	    });
+	  };
+	  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;
+	
+	  /**
+	   * Expand collapsible region(s)
+	   * @return {void}
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.expand = function () {
+	    this.collapsible.expand();
+	  };
+	  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;
+	
+	  /**
+	   * Collapse collapsible region(s)
+	   * @return {void}
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.collapse = function () {
+	    this.collapsible.collapse();
+	  };
+	  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;
+	
+	  /**
+	   * Toggle collapsible region(s)
+	   * @return {void}
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.toggle = function () {
+	    this.collapsible.toggle();
+	  };
+	  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;
+	
+	  /**
+	   * Check whether component has aria-expanded state true
+	   * @return {Boolean} true if aria-expanded="true", otherwise false
+	   */
+	  MaterialExtCollapsible.prototype.isExpanded = function () {
+	    return this.collapsible.isExpanded;
+	  };
+	  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;
+	
+	  /**
+	   * Check whether component has aria-disabled state set to true
+	   * @return {Boolean} true if aria-disabled="true", otherwise false
+	   */
+	  MaterialExtCollapsible.prototype.isDisabled = function () {
+	    return this.collapsible.isDisabled;
+	  };
+	  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;
+	
+	  /**
+	   * Disables toggling of collapsible region(s)
+	   * @return {void}
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.disableToggle = function () {
+	    this.collapsible.disableToggle();
+	  };
+	  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;
+	
+	  /**
+	   * Enables toggling of collapsible region(s)
+	   * @return {void}
+	   * @public
+	   */
+	  MaterialExtCollapsible.prototype.enableToggle = function () {
+	    this.collapsible.enableToggle();
+	  };
+	  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /* eslint no-undef: 0 */
+	  componentHandler.register({
+	    constructor: MaterialExtCollapsible,
+	    classAsString: 'MaterialExtCollapsible',
+	    cssClass: JS_COLLAPSIBLE,
+	    widget: true
+	  });
+	})();
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _classCallCheck2 = __webpack_require__(22);
+	
+	var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+	
+	var _createClass2 = __webpack_require__(23);
+	
+	var _createClass3 = _interopRequireDefault(_createClass2);
+	
+	var _class, _temp; /**
+	                    * @license
+	                    * Copyright 2016-2017 Leif Olsen. 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.
+	                    *
+	                    * This code is built with Google Material Design Lite,
+	                    * which is Licensed under the Apache License, Version 2.0
+	                    */
+	
+	var _jsonUtils = __webpack_require__(14);
+	
+	var _constants = __webpack_require__(2);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	var JS_FORMAT_FIELD = 'mdlext-js-formatfield';
+	var FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';
+	
+	/**
+	 * Detect browser locale
+	 * @returns {string} the locale
+	 * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference
+	 */
+	var browserLanguage = function browserLanguage() {
+	  return navigator.languages ? navigator.languages[0] : navigator.language || navigator.userLanguage;
+	};
+	
+	/**
+	 * The formatfield  formats an input field  using language sensitive number formatting.
+	 */
+	
+	var FormatField = (_temp = _class = function () {
+	  function FormatField(element) {
+	    var _this = this;
+	
+	    (0, _classCallCheck3.default)(this, FormatField);
+	    this.options_ = {};
+	
+	    this.clickHandler = function () {
+	      clearTimeout(FormatField.timer);
+	    };
+	
+	    this.focusInHandler = function () {
+	      if (!(_this.input.readOnly || _this.input.disabled)) {
+	        _this.input.value = _this.unformatInput();
+	        //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);
+	        FormatField.timer = setTimeout(function () {
+	          return _this.input.select();
+	        }, 200);
+	      }
+	    };
+	
+	    this.focusOutHandler = function () {
+	      clearTimeout(FormatField.timer);
+	
+	      if (!(_this.input.readOnly || _this.input.disabled)) {
+	        _this.formatValue();
+	      }
+	    };
+	
+	    this.element_ = element;
+	    this.init();
+	  }
+	
+	  (0, _createClass3.default)(FormatField, [{
+	    key: 'stripSeparatorsFromValue',
+	    value: function stripSeparatorsFromValue() {
+	      var _this2 = this;
+	
+	      var doReplace = function doReplace() {
+	        return _this2.input.value.replace(/\s/g, '').replace(new RegExp(_this2.options.groupSeparator, 'g'), '').replace(_this2.options.decimalSeparator, '.');
+	      };
+	      //.replace(this.intlGroupSeparator_, ''),
+	      //.replace(this.intlDecimalSeparator_, '.');
+	
+	      return this.input.value ? doReplace() : this.input.value;
+	    }
+	  }, {
+	    key: 'fixSeparators',
+	    value: function fixSeparators(value) {
+	      var _this3 = this;
+	
+	      var doReplace = function doReplace() {
+	        return value.replace(new RegExp(_this3.intlGroupSeparator_, 'g'), _this3.options.groupSeparator).replace(_this3.intlDecimalSeparator_, _this3.options.decimalSeparator);
+	      };
+	
+	      return value ? doReplace() : value;
+	    }
+	  }, {
+	    key: 'formatValue',
+	    value: function formatValue() {
+	      if (this.input.value) {
+	        var v = new Intl.NumberFormat(this.options.locales, this.options).format(this.stripSeparatorsFromValue());
+	
+	        if ('NaN' !== v) {
+	          this.input.value = this.fixSeparators(v);
+	        }
+	      }
+	    }
+	  }, {
+	    key: 'unformat',
+	    value: function unformat() {
+	      var _this4 = this;
+	
+	      var doReplace = function doReplace() {
+	        return _this4.input.value.replace(/\s/g, '').replace(new RegExp(_this4.options.groupSeparator, 'g'), '').replace(_this4.options.decimalSeparator, '.');
+	      };
+	
+	      return this.input.value ? doReplace() : this.input.value;
+	    }
+	  }, {
+	    key: 'unformatInput',
+	    value: function unformatInput() {
+	      var _this5 = this;
+	
+	      var doReplace = function doReplace() {
+	        return _this5.input.value.replace(/\s/g, '').replace(new RegExp(_this5.options.groupSeparator, 'g'), '');
+	      };
+	
+	      return this.input.value ? doReplace() : this.input.value;
+	    }
+	  }, {
+	    key: 'removeListeners',
+	    value: function removeListeners() {
+	      this.input.removeEventListener('click', this.clickHandler);
+	      this.input.removeEventListener('focusin', this.focusInHandler);
+	      this.input.removeEventListener('focusout', this.focusOutHandler);
+	    }
+	  }, {
+	    key: 'init',
+	    value: function init() {
+	      var _this6 = this;
+	
+	      var addListeners = function addListeners() {
+	        _this6.input.addEventListener('click', _this6.clickHandler);
+	        _this6.input.addEventListener('focusin', _this6.focusInHandler);
+	        _this6.input.addEventListener('focusout', _this6.focusOutHandler);
+	      };
+	
+	      var addOptions = function addOptions() {
+	        var opts = _this6.element.getAttribute('data-formatfield-options') || _this6.input.getAttribute('data-formatfield-options');
+	        if (opts) {
+	          _this6.options_ = (0, _jsonUtils.jsonStringToObject)(opts, _this6.options);
+	        }
+	      };
+	
+	      var addLocale = function addLocale() {
+	        if (!_this6.options.locales) {
+	          _this6.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',
+	        }
+	      };
+	
+	      var addGrouping = function addGrouping() {
+	        var s = 1234.5.toLocaleString(_this6.options.locales, {
+	          style: 'decimal',
+	          useGrouping: true,
+	          minimumFractionDigits: 1,
+	          maximumFractionDigits: 1
+	        });
+	
+	        _this6.intlGroupSeparator_ = s.charAt(1);
+	        _this6.intlDecimalSeparator_ = s.charAt(s.length - 2);
+	        _this6.options.groupSeparator = _this6.options.groupSeparator || _this6.intlGroupSeparator_;
+	        _this6.options.decimalSeparator = _this6.options.decimalSeparator || _this6.intlDecimalSeparator_;
+	
+	        if (_this6.options.groupSeparator === _this6.options.decimalSeparator) {
+	          var e = 'Error! options.groupSeparator, "' + _this6.options.groupSeparator + '" ' + 'and options.decimalSeparator, ' + ('"' + _this6.options.decimalSeparator + '" should not be equal');
+	          throw new Error(e);
+	        }
+	      };
+	
+	      this.input_ = this.element.querySelector('input') || this.element;
+	
+	      addOptions();
+	      addLocale();
+	      addGrouping();
+	      this.formatValue();
+	      addListeners();
+	    }
+	  }, {
+	    key: 'downgrade',
+	    value: function downgrade() {
+	      this.removeListeners();
+	    }
+	  }, {
+	    key: 'element',
+	    get: function get() {
+	      return this.element_;
+	    }
+	  }, {
+	    key: 'input',
+	    get: function get() {
+	      return this.input_;
+	    }
+	  }, {
+	    key: 'options',
+	    get: function get() {
+	      return this.options_;
+	    }
+	  }]);
+	  return FormatField;
+	}(), _class.timer = null, _temp);
+	
+	
+	(function () {
+	  'use strict';
+	
+	  /**
+	   * @constructor
+	   * @param {HTMLElement} element The element that will be upgraded.
+	   */
+	
+	  var MaterialExtFormatfield = function MaterialExtFormatfield(element) {
+	    this.element_ = element;
+	    this.formatField_ = null;
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	  window['MaterialExtFormatfield'] = MaterialExtFormatfield;
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtFormatfield.prototype.init = function () {
+	    if (this.element_) {
+	      this.element_.classList.add(_constants.IS_UPGRADED);
+	      this.formatField_ = new FormatField(this.element_);
+	
+	      // Listen to 'mdl-componentdowngraded' event
+	      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+	    }
+	  };
+	
+	  /**
+	   * Get options object
+	   *
+	   * @public
+	   *
+	   * @returns {Object} the options object
+	   */
+	  MaterialExtFormatfield.prototype.getOptions = function () {
+	    return this.formatField_.options;
+	  };
+	  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;
+	
+	  /**
+	   * A unformatted value is a string value where the locale specific decimal separator
+	   * is replaced with a '.' separator and group separators are stripped.
+	   * The returned value is suitable for parsing to a JavaScript numerical value.
+	   *
+	   * @example
+	   * input.value = '1 234,5';
+	   * inputElement.MaterialExtFormatfield.getUnformattedValue();
+	   * // Returns '1234.5'
+	   *
+	   * @public
+	   *
+	   * @returns {String} the unformatted value
+	   */
+	  MaterialExtFormatfield.prototype.getUnformattedValue = function () {
+	    return this.formatField_.unformat();
+	  };
+	  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;
+	
+	  /*
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   */
+	  MaterialExtFormatfield.prototype.mdlDowngrade_ = function () {
+	    this.formatField_.downgrade();
+	  };
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /* eslint no-undef: 0 */
+	  componentHandler.register({
+	    constructor: MaterialExtFormatfield,
+	    classAsString: FORMAT_FIELD_COMPONENT,
+	    cssClass: JS_FORMAT_FIELD,
+	    widget: true
+	  });
+	})();
+
+/***/ },
+/* 53 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	__webpack_require__(59);
+	
+	__webpack_require__(49);
+	
+	__webpack_require__(51);
+	
+	__webpack_require__(50);
+	
+	__webpack_require__(54);
+	
+	__webpack_require__(55);
+	
+	__webpack_require__(56);
+	
+	__webpack_require__(57);
+	
+	__webpack_require__(52);
+	
+	__webpack_require__(58);
+
+/***/ },
+/* 54 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _toConsumableArray2 = __webpack_require__(8);
+	
+	var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+	
+	var _constants = __webpack_require__(2);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	var MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container'; /**
+	                                                                          * @license
+	                                                                          * Copyright 2016 Leif Olsen. 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.
+	                                                                          *
+	                                                                          * This code is built with Google Material Design Lite,
+	                                                                          * which is Licensed under the Apache License, Version 2.0
+	                                                                          */
+	
+	/**
+	 * A lightboard is a translucent surface illuminated from behind, used for situations
+	 * where a shape laid upon the surface needs to be seen with high contrast. In the "old days" of photography
+	 * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox
+	 * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.
+	 */
+	
+	(function () {
+	  'use strict';
+	
+	  //const LIGHTBOARD = 'mdlext-lightboard';
+	
+	  var LIGHTBOARD_ROLE = 'grid';
+	  var SLIDE = 'mdlext-lightboard__slide';
+	  var SLIDE_ROLE = 'gridcell';
+	  var SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';
+	  /**
+	   * @constructor
+	   * @param {Element} element The element that will be upgraded.
+	   */
+	  var MaterialExtLightboard = function MaterialExtLightboard(element) {
+	    // Stores the element.
+	    this.element_ = element;
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	  window['MaterialExtLightboard'] = MaterialExtLightboard;
+	
+	  // Helpers
+	  var getSlide = function getSlide(element) {
+	    return element ? element.closest('.' + SLIDE) : null;
+	  };
+	
+	  // Private methods.
+	
+	  /**
+	   * Select a slide, i.e. set aria-selected="true"
+	   * @param element
+	   * @private
+	   */
+	  MaterialExtLightboard.prototype.selectSlide_ = function (element) {
+	    var slide = getSlide(element);
+	    if (slide && !slide.hasAttribute('aria-selected')) {
+	      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected="true"]'))).forEach(function (selectedSlide) {
+	        return selectedSlide.removeAttribute('aria-selected');
+	      });
+	
+	      slide.setAttribute('aria-selected', 'true');
+	    }
+	  };
+	
+	  /**
+	   * Dispatch select event
+	   * @param {Element} slide The slide that caused the event
+	   * @private
+	   */
+	  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function (slide) {
+	    this.element_.dispatchEvent(new CustomEvent('select', {
+	      bubbles: true,
+	      cancelable: true,
+	      detail: { source: slide }
+	    }));
+	  };
+	
+	  /**
+	   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade
+	   * @param event. A custom event
+	   * @private
+	   */
+	  MaterialExtLightboard.prototype.commandHandler_ = function (event) {
+	    event.preventDefault();
+	    event.stopPropagation();
+	
+	    if (event && event.detail) {
+	      this.command(event.detail);
+	    }
+	  };
+	
+	  // Public methods
+	
+	  /**
+	   * Initialize lightboard slides
+	   * @public
+	   */
+	  MaterialExtLightboard.prototype.upgradeSlides = function () {
+	
+	    var addRipple = function addRipple(slide) {
+	      // Use slide frame as ripple container
+	      if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {
+	        var a = slide.querySelector('.' + SLIDE_TABSTOP);
+	        if (a) {
+	          var rippleContainer = a;
+	          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);
+	          rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);
+	          var ripple = document.createElement('span');
+	          ripple.classList.add(_constants.MDL_RIPPLE);
+	          rippleContainer.appendChild(ripple);
+	          componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);
+	        }
+	      }
+	    };
+	
+	    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);
+	
+	    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {
+	
+	      slide.setAttribute('role', SLIDE_ROLE);
+	
+	      if (!slide.querySelector('a')) {
+	        slide.setAttribute('tabindex', '0');
+	      }
+	      if (hasRippleEffect) {
+	        addRipple(slide);
+	      }
+	    });
+	  };
+	  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;
+	
+	  /**
+	   * Execute command
+	   * @param detail
+	   * @public
+	   */
+	  MaterialExtLightboard.prototype.command = function (detail) {
+	    var _this = this;
+	
+	    var firstSlide = function firstSlide() {
+	      return _this.element_.querySelector('.' + SLIDE + ':first-child');
+	    };
+	
+	    var lastSlide = function lastSlide() {
+	      return _this.element_.querySelector('.' + SLIDE + ':last-child');
+	    };
+	
+	    var nextSlide = function nextSlide() {
+	      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected="true"]').nextElementSibling;
+	      return slide ? slide : firstSlide();
+	    };
+	
+	    var prevSlide = function prevSlide() {
+	      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected="true"]').previousElementSibling;
+	      return slide ? slide : lastSlide();
+	    };
+	
+	    if (detail && detail.action) {
+	      var action = detail.action,
+	          target = detail.target;
+	
+	
+	      var slide = void 0;
+	      switch (action.toLowerCase()) {
+	        case 'select':
+	          slide = getSlide(target);
+	          this.dispatchSelectEvent_(slide);
+	          break;
+	        case 'first':
+	          slide = firstSlide();
+	          break;
+	        case 'next':
+	          slide = nextSlide();
+	          break;
+	        case 'prev':
+	          slide = prevSlide();
+	          break;
+	        case 'last':
+	          slide = lastSlide();
+	          break;
+	        case 'upgrade':
+	          this.upgradeSlides();
+	          break;
+	        default:
+	          throw new Error('Unknown action "' + action + '". Action must be one of "first", "next", "prev", "last", "select" or "upgrade"');
+	      }
+	
+	      if (slide) {
+	        var a = slide.querySelector('a');
+	        if (a) {
+	          a.focus();
+	        } else {
+	          slide.focus();
+	        }
+	
+	        // Workaround for JSDom testing:
+	        // In JsDom 'element.focus()' does not trigger any focus event
+	        if (!slide.hasAttribute('aria-selected')) {
+	          this.selectSlide_(slide);
+	        }
+	      }
+	    }
+	  };
+	  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtLightboard.prototype.init = function () {
+	    var _this2 = this;
+	
+	    var keydownHandler = function keydownHandler(event) {
+	
+	      if (event.target !== _this2.element_) {
+	        var action = void 0;
+	        var target = void 0;
+	        switch (event.keyCode) {
+	          case _constants.VK_HOME:
+	            action = 'first';
+	            break;
+	          case _constants.VK_END:
+	            action = 'last';
+	            break;
+	          case _constants.VK_ARROW_UP:
+	          case _constants.VK_ARROW_LEFT:
+	            action = 'prev';
+	            break;
+	          case _constants.VK_ARROW_DOWN:
+	          case _constants.VK_ARROW_RIGHT:
+	            action = 'next';
+	            break;
+	          case _constants.VK_ENTER:
+	          case _constants.VK_SPACE:
+	            action = 'select';
+	            target = event.target;
+	            break;
+	        }
+	        if (action) {
+	          event.preventDefault();
+	          event.stopPropagation();
+	          _this2.command({ action: action, target: target });
+	        }
+	      }
+	    };
+	
+	    var clickHandler = function clickHandler(event) {
+	      event.preventDefault();
+	      event.stopPropagation();
+	
+	      if (event.target !== _this2.element_) {
+	        _this2.command({ action: 'select', target: event.target });
+	      }
+	    };
+	
+	    var focusHandler = function focusHandler(event) {
+	      event.preventDefault();
+	      event.stopPropagation();
+	
+	      if (event.target !== _this2.element_) {
+	        _this2.selectSlide_(event.target);
+	      }
+	    };
+	
+	    if (this.element_) {
+	      this.element_.setAttribute('role', LIGHTBOARD_ROLE);
+	
+	      if (this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT)) {
+	        this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);
+	      }
+	
+	      // Remove listeners, just in case ...
+	      this.element_.removeEventListener('command', this.commandHandler_);
+	      this.element_.removeEventListener('keydown', keydownHandler);
+	      this.element_.removeEventListener('click', clickHandler);
+	      this.element_.removeEventListener('focus', focusHandler);
+	
+	      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+	      this.element_.addEventListener('keydown', keydownHandler, true);
+	      this.element_.addEventListener('click', clickHandler, true);
+	      this.element_.addEventListener('focus', focusHandler, true);
+	
+	      this.upgradeSlides();
+	
+	      this.element_.classList.add(_constants.IS_UPGRADED);
+	    }
+	  };
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /* eslint no-undef: 0 */
+	  /* jshint undef:false */
+	  componentHandler.register({
+	    constructor: MaterialExtLightboard,
+	    classAsString: 'MaterialExtLightboard',
+	    cssClass: 'mdlext-js-lightboard',
+	    widget: true
+	  });
+	})();
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _toConsumableArray2 = __webpack_require__(8);
+	
+	var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+	
+	var _isInteger = __webpack_require__(32);
+	
+	var _isInteger2 = _interopRequireDefault(_isInteger);
+	
+	var _slicedToArray2 = __webpack_require__(67);
+	
+	var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+	
+	var _entries = __webpack_require__(64);
+	
+	var _entries2 = _interopRequireDefault(_entries);
+	
+	var _getIterator2 = __webpack_require__(31);
+	
+	var _getIterator3 = _interopRequireDefault(_getIterator2);
+	
+	var _fullThrottle = __webpack_require__(13);
+	
+	var _fullThrottle2 = _interopRequireDefault(_fullThrottle);
+	
+	var _constants = __webpack_require__(2);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	/**
+	 * @license
+	 * Copyright 2016 Leif Olsen. 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.
+	 *
+	 * This code is built with Google Material Design Lite,
+	 * which is Licensed under the Apache License, Version 2.0
+	 */
+	
+	/**
+	 * Responsive Lightbox
+	 */
+	
+	(function () {
+	  'use strict';
+	
+	  var LIGHTBOX = 'mdlext-lightbox';
+	  var LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';
+	  var LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';
+	  var STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';
+	  var BUTTON = 'mdl-button';
+	
+	  /**
+	   * https://github.com/google/material-design-lite/issues/4205
+	   * @constructor
+	   * @param {Element} element The element that will be upgraded.
+	   */
+	  var MaterialExtLightbox = function MaterialExtLightbox(element) {
+	    // Stores the element.
+	    this.element_ = element;
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	  window['MaterialExtLightbox'] = MaterialExtLightbox;
+	
+	  /**
+	   * Handle keypress
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtLightbox.prototype.keyDownHandler_ = function (event) {
+	
+	    if (event) {
+	      if (event.keyCode === _constants.VK_ESC || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {
+	
+	        if (event.keyCode !== _constants.VK_ESC) {
+	          event.preventDefault();
+	          event.stopPropagation();
+	        }
+	
+	        var action = 'first';
+	        if (event.keyCode === _constants.VK_END) {
+	          action = 'last';
+	        } else if (event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT) {
+	          action = 'prev';
+	        } else if (event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {
+	          action = 'next';
+	        } else if (event.keyCode === _constants.VK_SPACE) {
+	          action = 'select';
+	        } else if (event.keyCode === _constants.VK_ESC) {
+	          action = 'cancel';
+	        }
+	
+	        dispatchAction_(action, this);
+	      }
+	    }
+	  };
+	
+	  /**
+	   * Handle button clicks
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtLightbox.prototype.buttonClickHandler_ = function (event) {
+	
+	    if (event) {
+	      event.preventDefault();
+	      event.stopPropagation();
+	
+	      dispatchAction_(this.getAttribute('data-action') || '', this);
+	
+	      var n = this.closest('.' + LIGHTBOX);
+	      if (n) {
+	        n.focus();
+	      }
+	    }
+	  };
+	
+	  /**
+	   * Dispatches an action custom event
+	   * @param action
+	   * @param source
+	   * @param target
+	   * @private
+	   */
+	  var dispatchAction_ = function dispatchAction_(action, source) {
+	    var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source;
+	
+	
+	    target.dispatchEvent(new CustomEvent('action', {
+	      bubbles: true,
+	      cancelable: true,
+	      detail: {
+	        action: action || '',
+	        source: source
+	      }
+	    }));
+	  };
+	
+	  /**
+	   * Reposition dialog if component parent element is "DIALOG"
+	   * @param lightboxElement
+	   * @private
+	   */
+	  var repositionDialog_ = function repositionDialog_(lightboxElement) {
+	    var footerHeight = function footerHeight(footer, isSticky) {
+	      return isSticky && footer ? footer.offsetHeight : 0;
+	    };
+	
+	    var reposition = function reposition(dialog, fh) {
+	      if (window.getComputedStyle(dialog).position === 'absolute') {
+	        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+	        var topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;
+	        dialog.style.top = Math.max(scrollTop, topValue) + 'px';
+	      }
+	    };
+	
+	    var p = lightboxElement.parentNode;
+	    var dialog = p && p.nodeName === 'DIALOG' ? p : null;
+	
+	    if (dialog && dialog.hasAttribute('open')) {
+	      lightboxElement.style.width = 'auto';
+	      lightboxElement.style.maxWidth = '100%';
+	      var img = lightboxElement.querySelector('img');
+	      if (img) {
+	        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? img.naturalWidth + 'px' : img.width + 'px' || '100%';
+	      }
+	
+	      var fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));
+	      var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;
+	      if (dialog.offsetHeight > vh) {
+	        var n = 0;
+	        while (dialog.offsetHeight > vh && ++n < 4) {
+	          lightboxElement.style.width = lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight + 'px';
+	        }
+	      }
+	      reposition(dialog, fh);
+	    }
+	  };
+	
+	  /**
+	   * Handle image load
+	   * @param event
+	   * @private
+	   */
+	
+	  MaterialExtLightbox.prototype.imgLoadHandler_ = function () /*event*/{
+	    repositionDialog_(this);
+	  };
+	
+	  /**
+	   * Handle image drag
+	   * @param event
+	   * @private
+	     */
+	  MaterialExtLightbox.prototype.imgDragHandler_ = function (event) {
+	
+	    var setStyles = function setStyles(element, properties) {
+	      //noinspection JSAnnotator
+	      var _iteratorNormalCompletion = true;
+	      var _didIteratorError = false;
+	      var _iteratorError = undefined;
+	
+	      try {
+	        for (var _iterator = (0, _getIterator3.default)((0, _entries2.default)(properties)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+	          var _step$value = (0, _slicedToArray3.default)(_step.value, 2),
+	              key = _step$value[0],
+	              value = _step$value[1];
+	
+	          element.style[key] = value;
+	        }
+	        // ... or:
+	        //for (const key in properties) {
+	        //  element.style[key] = properties[key];
+	        //}
+	      } catch (err) {
+	        _didIteratorError = true;
+	        _iteratorError = err;
+	      } finally {
+	        try {
+	          if (!_iteratorNormalCompletion && _iterator.return) {
+	            _iterator.return();
+	          }
+	        } finally {
+	          if (_didIteratorError) {
+	            throw _iteratorError;
+	          }
+	        }
+	      }
+	    };
+	
+	    event.preventDefault();
+	    //event.stopPropagation();
+	
+	    var x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);
+	
+	    var img = this;
+	    img.style.opacity = '0.2';
+	
+	    var slider = document.createElement('div');
+	    slider.classList.add(LIGHTBOX_SLIDER);
+	    setStyles(slider, { 'width': img.offsetWidth + 'px', 'height': img.offsetHeight + 'px' });
+	
+	    var slide = document.createElement('div');
+	    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+	    slide.textContent = '>';
+	    setStyles(slide, {
+	      'width': img.offsetWidth + 'px',
+	      'height': img.offsetHeight + 'px',
+	      'line-height': img.offsetHeight + 'px',
+	      'font-size': img.offsetHeight / 4 + 'px',
+	      'text-align': 'right',
+	      'background-image': 'url("' + (img.getAttribute('data-img-url-prev') || '') + '")'
+	    });
+	    slider.appendChild(slide);
+	
+	    slide = document.createElement('div');
+	    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+	    setStyles(slide, {
+	      'width': img.offsetWidth + 'px',
+	      'height': img.offsetHeight + 'px',
+	      'background-image': 'url("' + img.src + '")'
+	    });
+	    slider.appendChild(slide);
+	
+	    slide = document.createElement('div');
+	    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+	    slide.textContent = '<';
+	    setStyles(slide, {
+	      'width': img.offsetWidth + 'px',
+	      'height': img.offsetHeight + 'px',
+	      'line-height': img.offsetHeight + 'px',
+	      'font-size': img.offsetHeight / 4 + 'px',
+	      'text-align': 'left',
+	      'background-image': 'url("' + (img.getAttribute('data-img-url-next') || '') + '")'
+	    });
+	    slider.appendChild(slide);
+	
+	    img.parentNode.appendChild(slider);
+	
+	    // drag handler
+	    var drag = function drag(e) {
+	      e.preventDefault();
+	      var dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance
+	
+	      if (slider.offsetWidth - Math.abs(dx) > 19) {
+	        slider.style.left = dx + 'px';
+	      }
+	    };
+	
+	    // end drag handler
+	    var endDrag = function endDrag(e) {
+	      e.preventDefault();
+	      //e.stopPropagation();
+	
+	      window.removeEventListener('mousemove', drag);
+	      window.removeEventListener('touchmove', drag);
+	      window.removeEventListener('mouseup', endDrag);
+	      window.removeEventListener('touchend', endDrag);
+	
+	      var dx = slider.offsetLeft;
+	      img.parentNode.removeChild(slider);
+	      img.style.opacity = '1.0';
+	
+	      if (Math.abs(dx) > 19) {
+	        dispatchAction_(dx > 0 ? 'prev' : 'next', img);
+	      }
+	    };
+	
+	    window.addEventListener('mousemove', drag);
+	    window.addEventListener('touchmove', drag);
+	    window.addEventListener('mouseup', endDrag);
+	    window.addEventListener('touchend', endDrag);
+	  };
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtLightbox.prototype.init = function () {
+	    var _this = this;
+	
+	    if (this.element_) {
+	      // Do the init required for this component to work
+	      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);
+	
+	      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {
+	        this.element_.setAttribute('tabindex', 1);
+	      }
+	
+	      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + BUTTON))).forEach(function (button) {
+	        return button.addEventListener('click', _this.buttonClickHandler_.bind(button), false);
+	      });
+	
+	      var figcaption = this.element_.querySelector('figcaption');
+	      if (figcaption) {
+	        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);
+	      }
+	
+	      var footer = this.element_.querySelector('footer');
+	      if (footer) {
+	        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);
+	      }
+	
+	      var img = this.element_.querySelector('img');
+	      if (img) {
+	        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);
+	        img.addEventListener('click', function (e) {
+	          return e.preventDefault();
+	        }, true);
+	        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);
+	        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);
+	      }
+	      window.addEventListener('resize', (0, _fullThrottle2.default)(function () {
+	        return repositionDialog_(_this.element_);
+	      }));
+	      window.addEventListener('orientationchange', function () {
+	        return repositionDialog_(_this.element_);
+	      });
+	
+	      // Set upgraded flag
+	      this.element_.classList.add(_constants.IS_UPGRADED);
+	    }
+	  };
+	
+	  /*
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   *
+	   * Nothing to downgrade
+	   *
+	  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {
+	  };
+	  */
+	
+	  /**
+	   * The component registers itself. It can assume componentHandler is available in the global scope.
+	   */
+	  /* jshint undef:false */
+	  componentHandler.register({
+	    constructor: MaterialExtLightbox,
+	    classAsString: 'MaterialExtLightbox',
+	    cssClass: 'mdlext-js-lightbox'
+	  });
+	})();
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _classCallCheck2 = __webpack_require__(22);
+	
+	var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+	
+	var _createClass2 = __webpack_require__(23);
+	
+	var _createClass3 = _interopRequireDefault(_createClass2);
+	
+	var _toConsumableArray2 = __webpack_require__(8);
+	
+	var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
+	
+	var _stringUtils = __webpack_require__(15);
+	
+	var _fullThrottle = __webpack_require__(13);
+	
+	var _fullThrottle2 = _interopRequireDefault(_fullThrottle);
+	
+	var _constants = __webpack_require__(2);
+	
+	var _domUtils = __webpack_require__(21);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	/**
+	 * @license
+	 * Copyright 2016 Leif Olsen. 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.
+	 *
+	 * This code is built with Google Material Design Lite,
+	 * which is Licensed under the Apache License, Version 2.0
+	 */
+	
+	/**
+	 * A menu button is a button that opens a menu. It is often styled as a
+	 * typical push button with a downward pointing arrow or triangle to hint
+	 * that activating the button will display a menu.
+	 */
+	var JS_MENU_BUTTON = 'mdlext-js-menu-button';
+	var MENU_BUTTON_MENU = 'mdlext-menu';
+	var MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';
+	var MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';
+	//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';
+	
+	/**
+	 * Creates the menu controlled by the menu button
+	 * @param element
+	 * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}
+	 */
+	
+	var menuFactory = function menuFactory(element) {
+	
+	  var ariaControls = null;
+	  var parentNode = null;
+	
+	  var removeAllSelected = function removeAllSelected() {
+	    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected="true"]'))).forEach(function (selectedItem) {
+	      return selectedItem.removeAttribute('aria-selected');
+	    });
+	  };
+	
+	  var setSelected = function setSelected(item) {
+	    var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+	
+	    if (force || item && !item.hasAttribute('aria-selected')) {
+	      removeAllSelected();
+	      if (item) {
+	        item.setAttribute('aria-selected', 'true');
+	      }
+	    }
+	  };
+	
+	  var getSelected = function getSelected() {
+	    return element.querySelector('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected="true"]');
+	  };
+	
+	  var isDisabled = function isDisabled(item) {
+	    return item && item.hasAttribute('disabled');
+	  };
+	
+	  var isSeparator = function isSeparator(item) {
+	    return item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);
+	  };
+	
+	  var focus = function focus(item) {
+	    if (item) {
+	      item = item.closest('.' + MENU_BUTTON_MENU_ITEM);
+	    }
+	    if (item) {
+	      item.focus();
+	    }
+	  };
+	
+	  var nextItem = function nextItem(current) {
+	    var n = current.nextElementSibling;
+	    if (!n) {
+	      n = element.firstElementChild;
+	    }
+	    if (!isDisabled(n) && !isSeparator(n)) {
+	      focus(n);
+	    } else {
+	      var i = element.children.length;
+	      while (n && i-- > 0) {
+	        if (isDisabled(n) || isSeparator(n)) {
+	          n = n.nextElementSibling;
+	          if (!n) {
+	            n = element.firstElementChild;
+	          }
+	        } else {
+	          focus(n);
+	          break;
+	        }
+	      }
+	    }
+	  };
+	
+	  var previousItem = function previousItem(current) {
+	    var p = current.previousElementSibling;
+	    if (!p) {
+	      p = element.lastElementChild;
+	    }
+	    if (!isDisabled(p) && !isSeparator(p)) {
+	      focus(p);
+	    } else {
+	      var i = element.children.length;
+	      while (p && i-- > 0) {
+	        if (isDisabled(p) || isSeparator(p)) {
+	          p = p.previousElementSibling;
+	          if (!p) {
+	            p = element.lastElementChild;
+	          }
+	        } else {
+	          focus(p);
+	          break;
+	        }
+	      }
+	    }
+	  };
+	
+	  var firstItem = function firstItem() {
+	    var item = element.firstElementChild;
+	    if (isDisabled(item) || isSeparator(item)) {
+	      nextItem(item);
+	    } else {
+	      focus(item);
+	    }
+	  };
+	
+	  var lastItem = function lastItem() {
+	    var item = element.lastElementChild;
+	    if (isDisabled(item) || isSeparator(item)) {
+	      previousItem(item);
+	    } else {
+	      focus(item);
+	    }
+	  };
+	
+	  var selectItem = function selectItem(item) {
+	    if (item && !isDisabled(item) && !isSeparator(item)) {
+	      setSelected(item);
+	      close(true, item);
+	    }
+	  };
+	
+	  var keyDownHandler = function keyDownHandler(event) {
+	
+	    var item = event.target.closest('.' + MENU_BUTTON_MENU_ITEM);
+	
+	    switch (event.keyCode) {
+	      case _constants.VK_ARROW_UP:
+	      case _constants.VK_ARROW_LEFT:
+	        if (item) {
+	          previousItem(item);
+	        } else {
+	          firstItem();
+	        }
+	        break;
+	
+	      case _constants.VK_ARROW_DOWN:
+	      case _constants.VK_ARROW_RIGHT:
+	        if (item) {
+	          nextItem(item);
+	        } else {
+	          lastItem();
+	        }
+	        break;
+	
+	      case _constants.VK_HOME:
+	        firstItem();
+	        break;
+	
+	      case _constants.VK_END:
+	        lastItem();
+	        break;
+	
+	      case _constants.VK_SPACE:
+	      case _constants.VK_ENTER:
+	        selectItem(item);
+	        break;
+	
+	      case _constants.VK_ESC:
+	        close(true);
+	        break;
+	
+	      case _constants.VK_TAB:
+	        // We do not have a "natural" tab order from menu, so the best we can do is to set focus back to the button
+	        close(true);
+	        break;
+	
+	      default:
+	        return;
+	    }
+	    event.preventDefault();
+	  };
+	
+	  var blurHandler = function blurHandler(event) {
+	
+	    // See: https://github.com/facebook/react/issues/2011
+	    var t = event.relatedTarget || event.explicitOriginalTarget || // FF
+	    document.activeElement; // IE11
+	
+	    //console.log('***** blur, target, relatedTarget', event.target, t);
+	
+	    try {
+	      if (t) {
+	        if (t.closest('.' + MENU_BUTTON_MENU) !== element && shouldClose(t)) {
+	          close();
+	        }
+	      } else {
+	        close();
+	      }
+	    } catch (err) {
+	      // FF throws error: "TypeError: n.closest is not a function" if related target is a text node
+	      close();
+	    }
+	  };
+	
+	  var clickHandler = function clickHandler(event) {
+	    //console.log('***** click, target', event.target);
+	
+	    event.preventDefault();
+	    var t = event.target;
+	    if (t && t.closest('.' + MENU_BUTTON_MENU) === element) {
+	      var item = t.closest('.' + MENU_BUTTON_MENU_ITEM);
+	      if (item) {
+	        selectItem(item);
+	      }
+	    } else {
+	      if (shouldClose(t)) {
+	        close();
+	      }
+	    }
+	  };
+	
+	  var touchStartHandler = function touchStartHandler(event) {
+	    //console.log('***** touchStart, target', event.target);
+	
+	    var t = event.target;
+	    if (!(t && t.closest('.' + MENU_BUTTON_MENU) === element)) {
+	      if (event.type === 'touchstart') {
+	        event.preventDefault();
+	      }
+	      close();
+	    }
+	  };
+	
+	  var addListeners = function addListeners() {
+	    element.addEventListener('keydown', keyDownHandler, false);
+	    element.addEventListener('blur', blurHandler, true);
+	    element.addEventListener('click', clickHandler, true);
+	    document.documentElement.addEventListener('touchstart', touchStartHandler, true);
+	  };
+	
+	  var _removeListeners = function _removeListeners() {
+	    element.removeEventListener('keydown', keyDownHandler, false);
+	    element.removeEventListener('blur', blurHandler, true);
+	    element.removeEventListener('click', clickHandler, true);
+	    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);
+	  };
+	
+	  var _open = function _open(controlElement) {
+	    var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';
+	
+	
+	    ariaControls = controlElement.closest('.' + JS_MENU_BUTTON);
+	
+	    element.style['min-width'] = Math.max(124, controlElement.getBoundingClientRect().width) + 'px';
+	    element.removeAttribute('hidden');
+	    (0, _domUtils.tether)(controlElement, element);
+	
+	    var item = void 0;
+	    switch (position.toLowerCase()) {
+	      case 'first':
+	        firstItem();
+	        break;
+	
+	      case 'last':
+	        lastItem();
+	        break;
+	
+	      case 'selected':
+	        item = getSelected();
+	        if (item && !item.hasAttribute('disabled')) {
+	          focus(item);
+	        } else {
+	          firstItem();
+	        }
+	        break;
+	    }
+	
+	    addListeners();
+	  };
+	
+	  var shouldClose = function shouldClose(target) {
+	    //console.log('***** shouldClose');
+	
+	    var result = false;
+	    var btn = target && target.closest('.' + JS_MENU_BUTTON) || null;
+	    if (!btn) {
+	      result = true;
+	    } else if (btn.getAttribute('aria-controls') === element.id) {
+	      if (btn !== ariaControls) {
+	        result = true;
+	      }
+	    } else {
+	      result = true;
+	    }
+	    return result;
+	  };
+	
+	  var close = function close() {
+	    var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+	    var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+	
+	    _removeListeners();
+	
+	    element.dispatchEvent(new CustomEvent('_closemenu', {
+	      bubbles: true,
+	      cancelable: true,
+	      detail: { forceFocus: forceFocus, item: item }
+	    }));
+	  };
+	
+	  var addWaiAria = function addWaiAria() {
+	    if (!element.hasAttribute('id')) {
+	      // Generate a random id
+	      element.id = 'menu-button-' + (0, _stringUtils.randomString)();
+	    }
+	    element.setAttribute('tabindex', '-1');
+	    element.setAttribute('role', 'menu');
+	    element.setAttribute('hidden', '');
+	
+	    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM))).forEach(function (menuitem) {
+	      menuitem.setAttribute('tabindex', '-1');
+	      menuitem.setAttribute('role', 'menuitem');
+	    });
+	
+	    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM_SEPARATOR))).forEach(function (menuitem) {
+	      menuitem.setAttribute('role', 'separator');
+	    });
+	  };
+	
+	  var init = function init() {
+	    addWaiAria();
+	    parentNode = element.parentNode;
+	    element.classList.add('is-upgraded');
+	  };
+	
+	  var _downgrade = function _downgrade() {
+	    _removeListeners();
+	    if (element.parentNode !== parentNode) {
+	      parentNode.appendChild(element);
+	    }
+	    element.classList.remove('is-upgraded');
+	  };
+	
+	  init();
+	
+	  return {
+	    /**
+	     * Get the menu element
+	     * @returns {Element} the menu element
+	     */
+	    get element() {
+	      return element;
+	    },
+	
+	    /**
+	     * Set selected menu item
+	     * @param item
+	     */
+	    set selected(item) {
+	      setSelected(item, true);
+	    },
+	
+	    /**
+	     * Open menu
+	     * @param {Element} controlElement the element where the menu should be aligned to
+	     * @param {String} position menuElement item to receive focus after menu element is opened
+	     */
+	    open: function open(controlElement) {
+	      var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';
+	      return _open(controlElement, position);
+	    },
+	
+	    /**
+	     * Remove event listeners.
+	     */
+	    removeListeners: function removeListeners() {
+	      return _removeListeners();
+	    },
+	
+	    /**
+	     * Downgrade menu
+	     */
+	    downgrade: function downgrade() {
+	      return _downgrade();
+	    }
+	  };
+	};
+	
+	/**
+	 * The menubutton component
+	 */
+	
+	var MenuButton = function () {
+	  function MenuButton(element) {
+	    var _this = this;
+	
+	    (0, _classCallCheck3.default)(this, MenuButton);
+	
+	    this.keyDownHandler = function (event) {
+	      if (!_this.isDisabled()) {
+	        switch (event.keyCode) {
+	          case _constants.VK_ARROW_UP:
+	            _this.openMenu('last');
+	            break;
+	
+	          case _constants.VK_ARROW_DOWN:
+	            _this.openMenu();
+	            break;
+	
+	          case _constants.VK_SPACE:
+	          case _constants.VK_ENTER:
+	            _this.openMenu('selected');
+	            break;
+	
+	          case _constants.VK_ESC:
+	            _this.closeMenu();
+	            break;
+	
+	          case _constants.VK_TAB:
+	            _this.closeMenu();
+	            return;
+	
+	          default:
+	            return;
+	        }
+	      }
+	      //event.stopPropagation();
+	      event.preventDefault();
+	    };
+	
+	    this.clickHandler = function () {
+	      if (!_this.isDisabled()) {
+	        if (_this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {
+	          _this.closeMenu(true);
+	        } else {
+	          _this.openMenu('selected');
+	        }
+	      }
+	    };
+	
+	    this.recalcMenuPosition = (0, _fullThrottle2.default)(function () {
+	      var c = _this.focusElement.getBoundingClientRect();
+	      var dx = _this.focusElementLastScrollPosition.left - c.left;
+	      var dy = _this.focusElementLastScrollPosition.top - c.top;
+	      var left = (parseFloat(_this.menu.element.style.left) || 0) - dx;
+	      var top = (parseFloat(_this.menu.element.style.top) || 0) - dy;
+	
+	      _this.menu.element.style.left = left + 'px';
+	      _this.menu.element.style.top = top + 'px';
+	      _this.focusElementLastScrollPosition = c;
+	    });
+	
+	    this.positionChangeHandler = function () {
+	      _this.recalcMenuPosition(_this);
+	    };
+	
+	    this.closeMenuHandler = function (event) {
+	      if (event && event.detail) {
+	        if (event.detail.item && event.detail.item !== _this.selectedItem) {
+	          _this.selectedItem = event.detail.item;
+	          _this.dispatchMenuSelect();
+	        }
+	        _this.closeMenu(event.detail.forceFocus);
+	      }
+	    };
+	
+	    this.element = element;
+	    this.focusElement = undefined;
+	    this.focusElementLastScrollPosition = undefined;
+	    this.scrollElements = [];
+	    this.menu = undefined;
+	    this.selectedItem = null;
+	    this.init();
+	  }
+	
+	  /**
+	   * Re-position menu if content is scrolled, window is resized or orientation change
+	   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/
+	   */
+	
+	
+	  (0, _createClass3.default)(MenuButton, [{
+	    key: 'dispatchMenuSelect',
+	    value: function dispatchMenuSelect() {
+	      this.element.dispatchEvent(new CustomEvent('menuselect', {
+	        bubbles: true,
+	        cancelable: true,
+	        detail: { source: this.selectedItem }
+	      }));
+	    }
+	  }, {
+	    key: 'isDisabled',
+	    value: function isDisabled() {
+	      return this.element.hasAttribute('disabled');
+	    }
+	  }, {
+	    key: 'removeListeners',
+	    value: function removeListeners() {
+	      this.element.removeEventListener('keydown', this.keyDownHandler);
+	      this.element.removeEventListener('click', this.clickHandler);
+	    }
+	  }, {
+	    key: 'openMenu',
+	    value: function openMenu() {
+	      var _this2 = this;
+	
+	      var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';
+	
+	
+	      if (!this.isDisabled() && this.menu) {
+	
+	        // Close the menu if button position change
+	        this.scrollElements = (0, _domUtils.getScrollParents)(this.element);
+	        this.scrollElements.forEach(function (el) {
+	          return el.addEventListener('scroll', _this2.positionChangeHandler);
+	        });
+	
+	        window.addEventListener('resize', this.positionChangeHandler);
+	        window.addEventListener('orientationchange', this.positionChangeHandler);
+	        this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);
+	
+	        this.menu.selected = this.selectedItem;
+	        this.menu.open(this.focusElement, position);
+	        this.element.setAttribute('aria-expanded', 'true');
+	
+	        this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();
+	      }
+	    }
+	  }, {
+	    key: 'closeMenu',
+	    value: function closeMenu() {
+	      var _this3 = this;
+	
+	      var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+	
+	      if (this.menu) {
+	        this.menu.removeListeners();
+	        this.scrollElements.forEach(function (el) {
+	          return el.removeEventListener('scroll', _this3.positionChangeHandler);
+	        });
+	        window.removeEventListener('resize', this.positionChangeHandler);
+	        window.removeEventListener('orientationchange', this.positionChangeHandler);
+	        this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);
+	
+	        if (forceFocus) {
+	          this.focus();
+	        }
+	        this.element.setAttribute('aria-expanded', 'false');
+	        this.menu.element.setAttribute('hidden', '');
+	      }
+	    }
+	  }, {
+	    key: 'focus',
+	    value: function focus() {
+	      if (!this.isDisabled()) {
+	        this.focusElement.focus();
+	      }
+	    }
+	  }, {
+	    key: 'init',
+	    value: function init() {
+	      var _this4 = this;
+	
+	      var addListeners = function addListeners() {
+	        _this4.element.addEventListener('keydown', _this4.keyDownHandler);
+	        _this4.element.addEventListener('click', _this4.clickHandler);
+	      };
+	
+	      var addWaiAria = function addWaiAria() {
+	        _this4.element.setAttribute('role', 'button');
+	        _this4.element.setAttribute('aria-expanded', 'false');
+	        _this4.element.setAttribute('aria-haspopup', 'true');
+	      };
+	
+	      var addFocusElement = function addFocusElement() {
+	        _this4.focusElement = _this4.element.querySelector('input[type="text"]');
+	        if (!_this4.focusElement) {
+	          _this4.focusElement = _this4.element;
+	
+	          if (!(_this4.focusElement.tagName.toLowerCase() === 'button' || _this4.focusElement.tagName.toLowerCase() === 'input')) {
+	            if (!_this4.focusElement.hasAttribute('tabindex')) {
+	              _this4.focusElement.setAttribute('tabindex', '0');
+	            }
+	          }
+	        }
+	      };
+	
+	      var moveElementToDocumentBody = function moveElementToDocumentBody(element) {
+	        // To position an element on top of all other z-indexed elements, the element should be moved to document.body
+	        //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/
+	
+	        if (element.parentNode !== document.body) {
+	          return document.body.appendChild(element);
+	        }
+	        return element;
+	      };
+	
+	      var findMenuElement = function findMenuElement() {
+	        var menuElement = void 0;
+	        var menuElementId = _this4.element.getAttribute('aria-controls');
+	        if (menuElementId !== null) {
+	          menuElement = document.querySelector('#' + menuElementId);
+	        } else {
+	          menuElement = _this4.element.parentNode.querySelector('.' + MENU_BUTTON_MENU);
+	        }
+	        return menuElement;
+	      };
+	
+	      var addMenu = function addMenu() {
+	        var menuElement = findMenuElement();
+	        if (menuElement) {
+	          if (menuElement.componentInstance) {
+	            _this4.menu = menuElement.componentInstance;
+	          } else {
+	            _this4.menu = menuFactory(menuElement);
+	            menuElement.componentInstance = _this4.menu;
+	            moveElementToDocumentBody(menuElement);
+	          }
+	          _this4.element.setAttribute('aria-controls', _this4.menu.element.id);
+	        }
+	      };
+	
+	      addFocusElement();
+	      addWaiAria();
+	      addMenu();
+	      this.removeListeners();
+	      addListeners();
+	    }
+	  }, {
+	    key: 'downgrade',
+	    value: function downgrade() {
+	      var _this5 = this;
+	
+	      if (this.menu) {
+	        // Do not downgrade menu if there are other buttons sharing this menu
+	        var related = [].concat((0, _toConsumableArray3.default)(document.querySelectorAll('.' + JS_MENU_BUTTON + '[aria-controls="' + this.element.getAttribute('aria-controls') + '"]')));
+	        if (related.filter(function (c) {
+	          return c !== _this5.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0;
+	        }).length === 0) {
+	          this.menu.downgrade();
+	        }
+	      }
+	      this.removeListeners();
+	    }
+	  }]);
+	  return MenuButton;
+	}();
+	
+	(function () {
+	  'use strict';
+	
+	  /**
+	   * https://github.com/google/material-design-lite/issues/4205
+	   * @constructor
+	   * @param {Element} element The element that will be upgraded.
+	   */
+	
+	  var MaterialExtMenuButton = function MaterialExtMenuButton(element) {
+	    this.element_ = element;
+	    this.menuButton_ = null;
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	  window['MaterialExtMenuButton'] = MaterialExtMenuButton;
+	
+	  // Public methods.
+	
+	  /**
+	   * Get the menu element controlled by this button, null if no menu is controlled by this button
+	   * @public
+	   */
+	  MaterialExtMenuButton.prototype.getMenuElement = function () {
+	    return this.menuButton_.menu ? this.menuButton_.menu.element : null;
+	  };
+	  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;
+	
+	  /**
+	   * Open menu
+	   * @public
+	   * @param {String} position one of "first", "last" or "selected"
+	   */
+	  MaterialExtMenuButton.prototype.openMenu = function (position) {
+	    this.menuButton_.openMenu(position);
+	  };
+	  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;
+	
+	  /**
+	   * Close menu
+	   * @public
+	   */
+	  MaterialExtMenuButton.prototype.closeMenu = function () {
+	    this.menuButton_.closeMenu(true);
+	  };
+	  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;
+	
+	  /**
+	   * Get selected menu item
+	   * @public
+	   * @returns {Element} The selected menu item or null if no item selected
+	   */
+	  MaterialExtMenuButton.prototype.getSelectedMenuItem = function () {
+	    return this.menuButton_.selectedItem;
+	  };
+	  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;
+	
+	  /**
+	   * Set (default) selected menu item
+	   * @param {Element} item
+	   */
+	  MaterialExtMenuButton.prototype.setSelectedMenuItem = function (item) {
+	    this.menuButton_.selectedItem = item;
+	  };
+	  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtMenuButton.prototype.init = function () {
+	    if (this.element_) {
+	      this.menuButton_ = new MenuButton(this.element_);
+	      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+	      this.element_.classList.add(_constants.IS_UPGRADED);
+	    }
+	  };
+	
+	  /**
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   */
+	  MaterialExtMenuButton.prototype.mdlDowngrade_ = function () {
+	    this.menuButton_.downgrade();
+	  };
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /* eslint no-undef: 0 */
+	  componentHandler.register({
+	    constructor: MaterialExtMenuButton,
+	    classAsString: 'MaterialExtMenuButton',
+	    cssClass: JS_MENU_BUTTON,
+	    widget: true
+	  });
+	})();
+
+/***/ },
+/* 57 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _stringUtils = __webpack_require__(15);
+	
+	var _constants = __webpack_require__(2);
+	
+	/**
+	 * @license
+	 * Copyright 2016 Leif Olsen. 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.
+	 *
+	 * This code is built with Google Material Design Lite,
+	 * which is Licensed under the Apache License, Version 2.0
+	 */
+	
+	/*
+	 * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield
+	 */
+	
+	(function () {
+	  'use strict';
+	
+	  var LABEL = 'mdlext-selectfield__label';
+	  var INPUT = 'mdlext-selectfield__select';
+	
+	  /**
+	   * Class constructor for Selectfield MDLEXT 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 MaterialExtSelectfield = function MaterialExtSelectfield(element) {
+	    this.element_ = element;
+	    this.init(); // Initialize instance.
+	  };
+	
+	  window['MaterialExtSelectfield'] = MaterialExtSelectfield;
+	
+	  /**
+	   * Handle focus.
+	   *
+	   * @param {Event} event The event that fired.
+	   * @private
+	   */
+	  /*eslint no-unused-vars: 0*/
+	  MaterialExtSelectfield.prototype.onFocus_ = function () /*event*/{
+	    this.element_.classList.add(_constants.IS_FOCUSED);
+	  };
+	
+	  /**
+	   * Handle lost focus.
+	   *
+	   * @param {Event} event The event that fired.
+	   * @private
+	   */
+	  /*eslint no-unused-vars: 0*/
+	  MaterialExtSelectfield.prototype.onBlur_ = function () /*event*/{
+	    this.element_.classList.remove(_constants.IS_FOCUSED);
+	  };
+	
+	  /**
+	   * Handle reset event from out side.
+	   *
+	   * @param {Event} event The event that fired.
+	   * @private
+	   */
+	  MaterialExtSelectfield.prototype.onReset_ = function () /*event*/{
+	    this.updateClasses_();
+	  };
+	
+	  /**
+	   * Handle class updates.
+	   *
+	   * @private
+	   */
+	  MaterialExtSelectfield.prototype.updateClasses_ = function () {
+	    this.checkDisabled();
+	    this.checkValidity();
+	    this.checkDirty();
+	    this.checkFocus();
+	  };
+	
+	  // Public methods.
+	
+	  /**
+	   * Check the disabled state and update field accordingly.
+	   *
+	   * @public
+	   */
+	  MaterialExtSelectfield.prototype.checkDisabled = function () {
+	    if (this.select_.disabled) {
+	      this.element_.classList.add(_constants.IS_DISABLED);
+	    } else {
+	      this.element_.classList.remove(_constants.IS_DISABLED);
+	    }
+	  };
+	  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;
+	
+	  /**
+	   * Check the focus state and update field accordingly.
+	   *
+	   * @public
+	   */
+	  MaterialExtSelectfield.prototype.checkFocus = function () {
+	    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus
+	    /*eslint no-extra-boolean-cast: 0*/
+	    if (Boolean(this.element_.querySelector(':focus'))) {
+	      this.element_.classList.add(_constants.IS_FOCUSED);
+	    } else {
+	      this.element_.classList.remove(_constants.IS_FOCUSED);
+	    }
+	  };
+	
+	  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;
+	
+	  /**
+	   * Check the validity state and update field accordingly.
+	   *
+	   * @public
+	   */
+	  MaterialExtSelectfield.prototype.checkValidity = function () {
+	
+	    /* Don't think it makes any sense to check validity.
+	       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0
+	     if (this.select_.validity) {
+	      if (this.select_.validity.valid) {
+	        this.element_.classList.remove(this.CssClasses_.IS_INVALID);
+	      } else {
+	        this.element_.classList.add(this.CssClasses_.IS_INVALID);
+	      }
+	    }
+	    */
+	  };
+	
+	  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;
+	
+	  /**
+	   * Check the dirty state and update field accordingly.
+	   *
+	   * @public
+	   */
+	  MaterialExtSelectfield.prototype.checkDirty = function () {
+	    if (this.select_.value && this.select_.value.length > 0) {
+	      this.element_.classList.add(_constants.IS_DIRTY);
+	    } else {
+	      this.element_.classList.remove(_constants.IS_DIRTY);
+	    }
+	  };
+	
+	  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;
+	
+	  /**
+	   * Disable select field.
+	   *
+	   * @public
+	   */
+	  MaterialExtSelectfield.prototype.disable = function () {
+	    this.select_.disabled = true;
+	    this.updateClasses_();
+	  };
+	
+	  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;
+	
+	  /**
+	   * Enable select field.
+	   *
+	   * @public
+	   */
+	  MaterialExtSelectfield.prototype.enable = function () {
+	    this.select_.disabled = false;
+	    this.updateClasses_();
+	  };
+	
+	  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;
+	
+	  /**
+	   * Update select field value.
+	   *
+	   * @param {string} value The value to which to set the control (optional).
+	   * @public
+	   */
+	  MaterialExtSelectfield.prototype.change = function (value) {
+	    this.select_.value = value || '';
+	    this.updateClasses_();
+	  };
+	  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;
+	
+	  /**
+	   * Initialize element.
+	   */
+	  MaterialExtSelectfield.prototype.init = function () {
+	    if (this.element_) {
+	      this.label_ = this.element_.querySelector('.' + LABEL);
+	      this.select_ = this.element_.querySelector('.' + INPUT);
+	
+	      if (this.select_) {
+	        // Remove listeners, just in case ...
+	        this.select_.removeEventListener('change', this.updateClasses_);
+	        this.select_.removeEventListener('focus', this.onFocus_);
+	        this.select_.removeEventListener('blur', this.onBlur_);
+	        this.select_.removeEventListener('reset', this.onReset_);
+	
+	        this.select_.addEventListener('change', this.updateClasses_.bind(this));
+	        this.select_.addEventListener('focus', this.onFocus_.bind(this));
+	        this.select_.addEventListener('blur', this.onBlur_.bind(this));
+	        this.select_.addEventListener('reset', this.onReset_.bind(this));
+	
+	        if (this.label_) {
+	          var id = void 0;
+	          if (!this.select_.hasAttribute('id')) {
+	            id = 'select-' + (0, _stringUtils.randomString)();
+	            this.select_.id = id;
+	          } else {
+	            id = this.select_.id;
+	          }
+	
+	          if (!this.label_.hasAttribute('for')) {
+	            this.label_.setAttribute('for', id);
+	          }
+	        }
+	
+	        var invalid = this.element_.classList.contains(_constants.IS_INVALID);
+	        this.updateClasses_();
+	        this.element_.classList.add(_constants.IS_UPGRADED);
+	
+	        if (invalid) {
+	          this.element_.classList.add(_constants.IS_INVALID);
+	        }
+	        if (this.select_.hasAttribute('autofocus')) {
+	          this.element_.focus();
+	          this.checkFocus();
+	        }
+	      }
+	    }
+	  };
+	
+	  /**
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   *
+	   * Nothing to downgrade
+	   *
+	  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {
+	    'use strict';
+	    console.log('***** MaterialExtSelectfield.mdlDowngrade ');
+	  };
+	  */
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /*eslint no-undef: 0*/
+	  componentHandler.register({
+	    constructor: MaterialExtSelectfield,
+	    classAsString: 'MaterialExtSelectfield',
+	    cssClass: 'mdlext-js-selectfield',
+	    widget: true
+	  });
+	})();
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	var _fullThrottle = __webpack_require__(13);
+	
+	var _fullThrottle2 = _interopRequireDefault(_fullThrottle);
+	
+	var _jsonUtils = __webpack_require__(14);
+	
+	var _constants = __webpack_require__(2);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	(function () {
+	  'use strict';
+	
+	  var MDL_LAYOUT_CONTENT = 'mdl-layout__content';
+	  var IS_SCROLL_CLASS = 'mdlext-is-scroll';
+	
+	  /**
+	   * @constructor
+	   * @param {Element} element The element that will be upgraded.
+	   */
+	  var MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {
+	    // Stores the element.
+	    this.header_ = element;
+	
+	    // Heder listens to scroll events from content
+	    this.content_ = null;
+	    this.lastScrollTop_ = 0;
+	
+	    // Default config
+	    this.config_ = {
+	      visibleAtScrollEnd: false
+	    };
+	
+	    this.mutationObserver_ = null;
+	
+	    this.drawing_ = false;
+	
+	    // Initialize instance.
+	    this.init();
+	  };
+	
+	  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;
+	
+	  /**
+	   * Update header width
+	   * @private
+	   */
+	  MaterialExtStickyHeader.prototype.recalcWidth_ = function () {
+	    this.header_.style.width = this.content_.clientWidth + 'px';
+	  };
+	
+	  var throttleResize = (0, _fullThrottle2.default)(function (self) {
+	    return self.recalcWidth_();
+	  });
+	
+	  /**
+	   * Adjust header width when window resizes or oreientation changes
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtStickyHeader.prototype.resizeHandler_ = function () /* event */{
+	    throttleResize(this);
+	  };
+	
+	  /**
+	   * Update header position
+	   * @private
+	   */
+	  MaterialExtStickyHeader.prototype.reposition_ = function () {
+	
+	    var currentContentScrollTop = this.content_.scrollTop;
+	    var scrollDiff = this.lastScrollTop_ - currentContentScrollTop;
+	
+	    if (currentContentScrollTop <= 0) {
+	      // Scrolled to the top. Header sticks to the top
+	      this.header_.style.top = '0';
+	      this.header_.classList.remove(IS_SCROLL_CLASS);
+	    } else if (scrollDiff > 0) {
+	
+	      if (scrollDiff >= this.header_.offsetHeight) {
+	
+	        // Scrolled up. Header slides in
+	        var headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;
+	        if (headerTop != 0) {
+	          this.header_.style.top = '0';
+	          this.header_.classList.add(IS_SCROLL_CLASS);
+	        }
+	        this.lastScrollTop_ = currentContentScrollTop;
+	      }
+	      return;
+	    } else if (scrollDiff < 0) {
+	      // Scrolled down
+	      this.header_.classList.add(IS_SCROLL_CLASS);
+	      var _headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;
+	
+	      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {
+	        // Bottom of content
+	        if (_headerTop != 0) {
+	          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : '-' + this.header_.offsetHeight + 'px';
+	        }
+	      } else {
+	        _headerTop += scrollDiff;
+	        var offsetHeight = this.header_.offsetHeight;
+	        this.header_.style.top = (Math.abs(_headerTop) > offsetHeight ? -offsetHeight : _headerTop) + 'px';
+	      }
+	    }
+	
+	    this.lastScrollTop_ = currentContentScrollTop;
+	  };
+	
+	  var throttleScroll = (0, _fullThrottle2.default)(function (self) {
+	    return self.reposition_();
+	  });
+	
+	  /**
+	   * Scroll header when content scrolls
+	   * @param event
+	   * @private
+	   */
+	  MaterialExtStickyHeader.prototype.scrollHandler_ = function () /* event */{
+	    throttleScroll(this);
+	  };
+	
+	  /**
+	   * Init header position
+	   * @private
+	   */
+	  MaterialExtStickyHeader.prototype.updatePosition_ = function () /* event */{
+	    this.recalcWidth_();
+	    this.reposition_();
+	  };
+	
+	  /**
+	   * Add mutation observer
+	   * @private
+	   */
+	  MaterialExtStickyHeader.prototype.addMutationObserver_ = function () {
+	    var _this = this;
+	
+	    // jsdom does not support MutationObserver - so this is not testable
+	    /* istanbul ignore next */
+	    this.mutationObserver_ = new MutationObserver(function () /*mutations*/{
+	      // Adjust header width if content changes (e.g. in a SPA)
+	      _this.updatePosition_();
+	    });
+	
+	    this.mutationObserver_.observe(this.content_, {
+	      attributes: false,
+	      childList: true,
+	      characterData: false,
+	      subtree: true
+	    });
+	  };
+	
+	  /**
+	  * Removes event listeners
+	  * @private
+	  */
+	  MaterialExtStickyHeader.prototype.removeListeners_ = function () {
+	
+	    window.removeEventListener('resize', this.resizeHandler_);
+	    window.removeEventListener('orientationchange', this.resizeHandler_);
+	
+	    if (this.content_) {
+	      this.content_.removeEventListener('scroll', this.scrollHandler_);
+	    }
+	
+	    if (this.mutationObserver_) {
+	      this.mutationObserver_.disconnect();
+	      this.mutationObserver_ = null;
+	    }
+	  };
+	
+	  /**
+	   * Initialize component
+	   */
+	  MaterialExtStickyHeader.prototype.init = function () {
+	
+	    if (this.header_) {
+	
+	      this.removeListeners_();
+	
+	      if (this.header_.hasAttribute('data-config')) {
+	        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.header_.getAttribute('data-config'));
+	      }
+	
+	      this.content_ = this.header_.parentNode.querySelector('.' + MDL_LAYOUT_CONTENT) || null;
+	
+	      if (this.content_) {
+	        this.content_.style.paddingTop = this.header_.offsetHeight + 'px'; // Make room for sticky header
+	        this.lastScrollTop_ = this.content_.scrollTop;
+	
+	        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));
+	        window.addEventListener('resize', this.resizeHandler_.bind(this));
+	        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));
+	
+	        this.addMutationObserver_();
+	        this.updatePosition_();
+	
+	        // Set upgraded flag
+	        this.header_.classList.add(_constants.IS_UPGRADED);
+	      }
+	    }
+	  };
+	
+	  /*
+	   * Downgrade component
+	   * E.g remove listeners and clean up resources
+	   *
+	   * Nothing to clean
+	   *
+	   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {
+	     'use strict';
+	     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');
+	   };
+	   */
+	
+	  // The component registers itself. It can assume componentHandler is available
+	  // in the global scope.
+	  /* eslint no-undef: 0 */
+	  componentHandler.register({
+	    constructor: MaterialExtStickyHeader,
+	    classAsString: 'MaterialExtStickyHeader',
+	    cssClass: 'mdlext-js-sticky-header'
+	  });
+	})(); /**
+	       * @license
+	       * Copyright 2016 Leif Olsen. 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.
+	       *
+	       * This code is built with Google Material Design Lite,
+	       * which is Licensed under the Apache License, Version 2.0
+	       */
+	
+	/**
+	 * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.
+	 * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and
+	 * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.
+	 */
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	
+	__webpack_require__(2);
+	
+	__webpack_require__(21);
+	
+	__webpack_require__(15);
+	
+	__webpack_require__(14);
+	
+	__webpack_require__(13);
+	
+	__webpack_require__(29);
+	
+	__webpack_require__(30);
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(68), __esModule: true };
+
+/***/ },
+/* 61 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(70), __esModule: true };
+
+/***/ },
+/* 62 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(72), __esModule: true };
+
+/***/ },
+/* 63 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(74), __esModule: true };
+
+/***/ },
+/* 64 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(75), __esModule: true };
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(76), __esModule: true };
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(77), __esModule: true };
+
+/***/ },
+/* 67 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	
+	exports.__esModule = true;
+	
+	var _isIterable2 = __webpack_require__(61);
+	
+	var _isIterable3 = _interopRequireDefault(_isIterable2);
+	
+	var _getIterator2 = __webpack_require__(31);
+	
+	var _getIterator3 = _interopRequireDefault(_getIterator2);
+	
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+	
+	exports.default = function () {
+	  function sliceIterator(arr, i) {
+	    var _arr = [];
+	    var _n = true;
+	    var _d = false;
+	    var _e = undefined;
+	
+	    try {
+	      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {
+	        _arr.push(_s.value);
+	
+	        if (i && _arr.length === i) break;
+	      }
+	    } catch (err) {
+	      _d = true;
+	      _e = err;
+	    } finally {
+	      try {
+	        if (!_n && _i["return"]) _i["return"]();
+	      } finally {
+	        if (_d) throw _e;
+	      }
+	    }
+	
+	    return _arr;
+	  }
+	
+	  return function (arr, i) {
+	    if (Array.isArray(arr)) {
+	      return arr;
+	    } else if ((0, _isIterable3.default)(Object(arr))) {
+	      return sliceIterator(arr, i);
+	    } else {
+	      throw new TypeError("Invalid attempt to destructure non-iterable instance");
+	    }
+	  };
+	}();
+
+/***/ },
+/* 68 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(28);
+	__webpack_require__(104);
+	module.exports = __webpack_require__(1).Array.from;
+
+/***/ },
+/* 69 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(48);
+	__webpack_require__(28);
+	module.exports = __webpack_require__(102);
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(48);
+	__webpack_require__(28);
+	module.exports = __webpack_require__(103);
+
+/***/ },
+/* 71 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(106);
+	module.exports = __webpack_require__(1).Number.isInteger;
+
+/***/ },
+/* 72 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(107);
+	module.exports = __webpack_require__(1).Number.isNaN;
+
+/***/ },
+/* 73 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(108);
+	module.exports = __webpack_require__(1).Object.assign;
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(109);
+	var $Object = __webpack_require__(1).Object;
+	module.exports = function defineProperty(it, key, desc){
+	  return $Object.defineProperty(it, key, desc);
+	};
+
+/***/ },
+/* 75 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(112);
+	module.exports = __webpack_require__(1).Object.entries;
+
+/***/ },
+/* 76 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(110);
+	module.exports = __webpack_require__(1).Object.keys;
+
+/***/ },
+/* 77 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(111);
+	module.exports = __webpack_require__(1).Reflect.apply;
+
+/***/ },
+/* 78 */
+/***/ function(module, exports) {
+
+	module.exports = function(){ /* empty */ };
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// false -> Array#indexOf
+	// true  -> Array#includes
+	var toIObject = __webpack_require__(19)
+	  , toLength  = __webpack_require__(45)
+	  , toIndex   = __webpack_require__(100);
+	module.exports = function(IS_INCLUDES){
+	  return function($this, el, fromIndex){
+	    var O      = toIObject($this)
+	      , length = toLength(O.length)
+	      , index  = toIndex(fromIndex, length)
+	      , value;
+	    // Array#includes uses SameValueZero equality algorithm
+	    if(IS_INCLUDES && el != el)while(length > index){
+	      value = O[index++];
+	      if(value != value)return true;
+	    // Array#toIndex ignores holes, Array#includes - not
+	    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+	      if(O[index] === el)return IS_INCLUDES || index || 0;
+	    } return !IS_INCLUDES && -1;
+	  };
+	};
+
+/***/ },
+/* 80 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var $defineProperty = __webpack_require__(12)
+	  , createDesc      = __webpack_require__(25);
+	
+	module.exports = function(object, index, value){
+	  if(index in object)$defineProperty.f(object, index, createDesc(0, value));
+	  else object[index] = value;
+	};
+
+/***/ },
+/* 81 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(5).document && document.documentElement;
+
+/***/ },
+/* 82 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = !__webpack_require__(9) && !__webpack_require__(10)(function(){
+	  return Object.defineProperty(__webpack_require__(38)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 83 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// check on default Array iterator
+	var Iterators  = __webpack_require__(7)
+	  , ITERATOR   = __webpack_require__(4)('iterator')
+	  , ArrayProto = Array.prototype;
+	
+	module.exports = function(it){
+	  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
+	};
+
+/***/ },
+/* 84 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 20.1.2.3 Number.isInteger(number)
+	var isObject = __webpack_require__(17)
+	  , floor    = Math.floor;
+	module.exports = function isInteger(it){
+	  return !isObject(it) && isFinite(it) && floor(it) === it;
+	};
+
+/***/ },
+/* 85 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// call something on iterator step with safe closing on error
+	var anObject = __webpack_require__(6);
+	module.exports = function(iterator, fn, value, entries){
+	  try {
+	    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
+	  // 7.4.6 IteratorClose(iterator, completion)
+	  } catch(e){
+	    var ret = iterator['return'];
+	    if(ret !== undefined)anObject(ret.call(iterator));
+	    throw e;
+	  }
+	};
+
+/***/ },
+/* 86 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var create         = __webpack_require__(91)
+	  , descriptor     = __webpack_require__(25)
+	  , setToStringTag = __webpack_require__(43)
+	  , IteratorPrototype = {};
+	
+	// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+	__webpack_require__(11)(IteratorPrototype, __webpack_require__(4)('iterator'), function(){ return this; });
+	
+	module.exports = function(Constructor, NAME, next){
+	  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
+	  setToStringTag(Constructor, NAME + ' Iterator');
+	};
+
+/***/ },
+/* 87 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var ITERATOR     = __webpack_require__(4)('iterator')
+	  , SAFE_CLOSING = false;
+	
+	try {
+	  var riter = [7][ITERATOR]();
+	  riter['return'] = function(){ SAFE_CLOSING = true; };
+	  Array.from(riter, function(){ throw 2; });
+	} catch(e){ /* empty */ }
+	
+	module.exports = function(exec, skipClosing){
+	  if(!skipClosing && !SAFE_CLOSING)return false;
+	  var safe = false;
+	  try {
+	    var arr  = [7]
+	      , iter = arr[ITERATOR]();
+	    iter.next = function(){ return {done: safe = true}; };
+	    arr[ITERATOR] = function(){ return iter; };
+	    exec(arr);
+	  } catch(e){ /* empty */ }
+	  return safe;
+	};
+
+/***/ },
+/* 88 */
+/***/ function(module, exports) {
+
+	module.exports = function(done, value){
+	  return {value: value, done: !!done};
+	};
+
+/***/ },
+/* 89 */
+/***/ function(module, exports) {
+
+	module.exports = true;
+
+/***/ },
+/* 90 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	// 19.1.2.1 Object.assign(target, source, ...)
+	var getKeys  = __webpack_require__(18)
+	  , gOPS     = __webpack_require__(93)
+	  , pIE      = __webpack_require__(42)
+	  , toObject = __webpack_require__(20)
+	  , IObject  = __webpack_require__(40)
+	  , $assign  = Object.assign;
+	
+	// should work with symbols and should have deterministic property order (V8 bug)
+	module.exports = !$assign || __webpack_require__(10)(function(){
+	  var A = {}
+	    , B = {}
+	    , S = Symbol()
+	    , K = 'abcdefghijklmnopqrst';
+	  A[S] = 7;
+	  K.split('').forEach(function(k){ B[k] = k; });
+	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+	  var T     = toObject(target)
+	    , aLen  = arguments.length
+	    , index = 1
+	    , getSymbols = gOPS.f
+	    , isEnum     = pIE.f;
+	  while(aLen > index){
+	    var S      = IObject(arguments[index++])
+	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+	      , length = keys.length
+	      , j      = 0
+	      , key;
+	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+	  } return T;
+	} : $assign;
+
+/***/ },
+/* 91 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+	var anObject    = __webpack_require__(6)
+	  , dPs         = __webpack_require__(92)
+	  , enumBugKeys = __webpack_require__(39)
+	  , IE_PROTO    = __webpack_require__(26)('IE_PROTO')
+	  , Empty       = function(){ /* empty */ }
+	  , PROTOTYPE   = 'prototype';
+	
+	// Create object with fake `null` prototype: use iframe Object with cleared prototype
+	var createDict = function(){
+	  // Thrash, waste and sodomy: IE GC bug
+	  var iframe = __webpack_require__(38)('iframe')
+	    , i      = enumBugKeys.length
+	    , lt     = '<'
+	    , gt     = '>'
+	    , iframeDocument;
+	  iframe.style.display = 'none';
+	  __webpack_require__(81).appendChild(iframe);
+	  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+	  // createDict = iframe.contentWindow.Object;
+	  // html.removeChild(iframe);
+	  iframeDocument = iframe.contentWindow.document;
+	  iframeDocument.open();
+	  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+	  iframeDocument.close();
+	  createDict = iframeDocument.F;
+	  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
+	  return createDict();
+	};
+	
+	module.exports = Object.create || function create(O, Properties){
+	  var result;
+	  if(O !== null){
+	    Empty[PROTOTYPE] = anObject(O);
+	    result = new Empty;
+	    Empty[PROTOTYPE] = null;
+	    // add "__proto__" for Object.getPrototypeOf polyfill
+	    result[IE_PROTO] = O;
+	  } else result = createDict();
+	  return Properties === undefined ? result : dPs(result, Properties);
+	};
+
+
+/***/ },
+/* 92 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP       = __webpack_require__(12)
+	  , anObject = __webpack_require__(6)
+	  , getKeys  = __webpack_require__(18);
+	
+	module.exports = __webpack_require__(9) ? Object.defineProperties : function defineProperties(O, Properties){
+	  anObject(O);
+	  var keys   = getKeys(Properties)
+	    , length = keys.length
+	    , i = 0
+	    , P;
+	  while(length > i)dP.f(O, P = keys[i++], Properties[P]);
+	  return O;
+	};
+
+/***/ },
+/* 93 */
+/***/ function(module, exports) {
+
+	exports.f = Object.getOwnPropertySymbols;
+
+/***/ },
+/* 94 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+	var has         = __webpack_require__(16)
+	  , toObject    = __webpack_require__(20)
+	  , IE_PROTO    = __webpack_require__(26)('IE_PROTO')
+	  , ObjectProto = Object.prototype;
+	
+	module.exports = Object.getPrototypeOf || function(O){
+	  O = toObject(O);
+	  if(has(O, IE_PROTO))return O[IE_PROTO];
+	  if(typeof O.constructor == 'function' && O instanceof O.constructor){
+	    return O.constructor.prototype;
+	  } return O instanceof Object ? ObjectProto : null;
+	};
+
+/***/ },
+/* 95 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var has          = __webpack_require__(16)
+	  , toIObject    = __webpack_require__(19)
+	  , arrayIndexOf = __webpack_require__(79)(false)
+	  , IE_PROTO     = __webpack_require__(26)('IE_PROTO');
+	
+	module.exports = function(object, names){
+	  var O      = toIObject(object)
+	    , i      = 0
+	    , result = []
+	    , key;
+	  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+	  // Don't enum bug & hidden keys
+	  while(names.length > i)if(has(O, key = names[i++])){
+	    ~arrayIndexOf(result, key) || result.push(key);
+	  }
+	  return result;
+	};
+
+/***/ },
+/* 96 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// most Object methods by ES6 should accept primitives
+	var $export = __webpack_require__(3)
+	  , core    = __webpack_require__(1)
+	  , fails   = __webpack_require__(10);
+	module.exports = function(KEY, exec){
+	  var fn  = (core.Object || {})[KEY] || Object[KEY]
+	    , exp = {};
+	  exp[KEY] = exec(fn);
+	  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
+	};
+
+/***/ },
+/* 97 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var getKeys   = __webpack_require__(18)
+	  , toIObject = __webpack_require__(19)
+	  , isEnum    = __webpack_require__(42).f;
+	module.exports = function(isEntries){
+	  return function(it){
+	    var O      = toIObject(it)
+	      , keys   = getKeys(O)
+	      , length = keys.length
+	      , i      = 0
+	      , result = []
+	      , key;
+	    while(length > i)if(isEnum.call(O, key = keys[i++])){
+	      result.push(isEntries ? [key, O[key]] : O[key]);
+	    } return result;
+	  };
+	};
+
+/***/ },
+/* 98 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(11);
+
+/***/ },
+/* 99 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(27)
+	  , defined   = __webpack_require__(24);
+	// true  -> String#at
+	// false -> String#codePointAt
+	module.exports = function(TO_STRING){
+	  return function(that, pos){
+	    var s = String(defined(that))
+	      , i = toInteger(pos)
+	      , l = s.length
+	      , a, b;
+	    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
+	    a = s.charCodeAt(i);
+	    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+	      ? TO_STRING ? s.charAt(i) : a
+	      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+	  };
+	};
+
+/***/ },
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(27)
+	  , max       = Math.max
+	  , min       = Math.min;
+	module.exports = function(index, length){
+	  index = toInteger(index);
+	  return index < 0 ? max(index + length, 0) : min(index, length);
+	};
+
+/***/ },
+/* 101 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.1 ToPrimitive(input [, PreferredType])
+	var isObject = __webpack_require__(17);
+	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+	// and the second argument - flag - preferred type is a string
+	module.exports = function(it, S){
+	  if(!isObject(it))return it;
+	  var fn, val;
+	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  throw TypeError("Can't convert object to primitive value");
+	};
+
+/***/ },
+/* 102 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject = __webpack_require__(6)
+	  , get      = __webpack_require__(47);
+	module.exports = __webpack_require__(1).getIterator = function(it){
+	  var iterFn = get(it);
+	  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');
+	  return anObject(iterFn.call(it));
+	};
+
+/***/ },
+/* 103 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var classof   = __webpack_require__(35)
+	  , ITERATOR  = __webpack_require__(4)('iterator')
+	  , Iterators = __webpack_require__(7);
+	module.exports = __webpack_require__(1).isIterable = function(it){
+	  var O = Object(it);
+	  return O[ITERATOR] !== undefined
+	    || '@@iterator' in O
+	    || Iterators.hasOwnProperty(classof(O));
+	};
+
+/***/ },
+/* 104 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var ctx            = __webpack_require__(37)
+	  , $export        = __webpack_require__(3)
+	  , toObject       = __webpack_require__(20)
+	  , call           = __webpack_require__(85)
+	  , isArrayIter    = __webpack_require__(83)
+	  , toLength       = __webpack_require__(45)
+	  , createProperty = __webpack_require__(80)
+	  , getIterFn      = __webpack_require__(47);
+	
+	$export($export.S + $export.F * !__webpack_require__(87)(function(iter){ Array.from(iter); }), 'Array', {
+	  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
+	  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){
+	    var O       = toObject(arrayLike)
+	      , C       = typeof this == 'function' ? this : Array
+	      , aLen    = arguments.length
+	      , mapfn   = aLen > 1 ? arguments[1] : undefined
+	      , mapping = mapfn !== undefined
+	      , index   = 0
+	      , iterFn  = getIterFn(O)
+	      , length, result, step, iterator;
+	    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
+	    // if object isn't iterable or it's array with default iterator - use simple case
+	    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){
+	      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){
+	        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
+	      }
+	    } else {
+	      length = toLength(O.length);
+	      for(result = new C(length); length > index; index++){
+	        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
+	      }
+	    }
+	    result.length = index;
+	    return result;
+	  }
+	});
+
+
+/***/ },
+/* 105 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var addToUnscopables = __webpack_require__(78)
+	  , step             = __webpack_require__(88)
+	  , Iterators        = __webpack_require__(7)
+	  , toIObject        = __webpack_require__(19);
+	
+	// 22.1.3.4 Array.prototype.entries()
+	// 22.1.3.13 Array.prototype.keys()
+	// 22.1.3.29 Array.prototype.values()
+	// 22.1.3.30 Array.prototype[@@iterator]()
+	module.exports = __webpack_require__(41)(Array, 'Array', function(iterated, kind){
+	  this._t = toIObject(iterated); // target
+	  this._i = 0;                   // next index
+	  this._k = kind;                // kind
+	// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+	}, function(){
+	  var O     = this._t
+	    , kind  = this._k
+	    , index = this._i++;
+	  if(!O || index >= O.length){
+	    this._t = undefined;
+	    return step(1);
+	  }
+	  if(kind == 'keys'  )return step(0, index);
+	  if(kind == 'values')return step(0, O[index]);
+	  return step(0, [index, O[index]]);
+	}, 'values');
+	
+	// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+	Iterators.Arguments = Iterators.Array;
+	
+	addToUnscopables('keys');
+	addToUnscopables('values');
+	addToUnscopables('entries');
+
+/***/ },
+/* 106 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 20.1.2.3 Number.isInteger(number)
+	var $export = __webpack_require__(3);
+	
+	$export($export.S, 'Number', {isInteger: __webpack_require__(84)});
+
+/***/ },
+/* 107 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 20.1.2.4 Number.isNaN(number)
+	var $export = __webpack_require__(3);
+	
+	$export($export.S, 'Number', {
+	  isNaN: function isNaN(number){
+	    return number != number;
+	  }
+	});
+
+/***/ },
+/* 108 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.3.1 Object.assign(target, source)
+	var $export = __webpack_require__(3);
+	
+	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(90)});
+
+/***/ },
+/* 109 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var $export = __webpack_require__(3);
+	// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+	$export($export.S + $export.F * !__webpack_require__(9), 'Object', {defineProperty: __webpack_require__(12).f});
+
+/***/ },
+/* 110 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.14 Object.keys(O)
+	var toObject = __webpack_require__(20)
+	  , $keys    = __webpack_require__(18);
+	
+	__webpack_require__(96)('keys', function(){
+	  return function keys(it){
+	    return $keys(toObject(it));
+	  };
+	});
+
+/***/ },
+/* 111 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
+	var $export   = __webpack_require__(3)
+	  , aFunction = __webpack_require__(34)
+	  , anObject  = __webpack_require__(6)
+	  , rApply    = (__webpack_require__(5).Reflect || {}).apply
+	  , fApply    = Function.apply;
+	// MS Edge argumentsList argument is optional
+	$export($export.S + $export.F * !__webpack_require__(10)(function(){
+	  rApply(function(){});
+	}), 'Reflect', {
+	  apply: function apply(target, thisArgument, argumentsList){
+	    var T = aFunction(target)
+	      , L = anObject(argumentsList);
+	    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
+	  }
+	});
+
+/***/ },
+/* 112 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// https://github.com/tc39/proposal-object-values-entries
+	var $export  = __webpack_require__(3)
+	  , $entries = __webpack_require__(97)(true);
+	
+	$export($export.S, 'Object', {
+	  entries: function entries(it){
+	    return $entries(it);
+	  }
+	});
+
+/***/ },
+/* 113 */
+/***/ function(module, exports) {
+
+	// removed by extract-text-webpack-plugin
+
+/***/ }
+/******/ ])
+});
+;
+//# sourceMappingURL=mdl-ext.js.map
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.js.map b/node_modules/mdl-ext/lib/mdl-ext.js.map
new file mode 100644
index 0000000..a401c9f
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition?5ca6","webpack:///webpack/bootstrap 80c672803f0b3533e5b7?a1f3","webpack:///./~/babel-runtime/~/core-js/library/modules/_core.js?d611","webpack:///./src/utils/constants.js?14df","webpack:///./~/babel-runtime/~/core-js/library/modules/_export.js?8e40","webpack:///./~/babel-runtime/~/core-js/library/modules/_wks.js?2014","webpack:///./~/babel-runtime/~/core-js/library/modules/_global.js?3c52","webpack:///./~/babel-runtime/~/core-js/library/modules/_an-object.js?3af2","webpack:///./~/babel-runtime/~/core-js/library/modules/_iterators.js?f3f3","webpack:///./~/babel-runtime/helpers/toConsumableArray.js?1825","webpack:///./~/babel-runtime/~/core-js/library/modules/_descriptors.js?c0f5","webpack:///./~/babel-runtime/~/core-js/library/modules/_fails.js?c6dd","webpack:///./~/babel-runtime/~/core-js/library/modules/_hide.js?0d2e","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-dp.js?5986","webpack:///./src/utils/full-throttle.js?dc07","webpack:///./src/utils/json-utils.js?45f0","webpack:///./src/utils/string-utils.js?37f8","webpack:///./~/babel-runtime/~/core-js/library/modules/_has.js?ddd0","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-object.js?cfda","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-keys.js?5d2e","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-iobject.js?527c","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-object.js?ca4f","webpack:///./src/utils/dom-utils.js?0816","webpack:///./~/babel-runtime/helpers/classCallCheck.js?21af","webpack:///./~/babel-runtime/helpers/createClass.js?1dfe","webpack:///./~/babel-runtime/~/core-js/library/modules/_defined.js?932b","webpack:///./~/babel-runtime/~/core-js/library/modules/_property-desc.js?256b","webpack:///./~/babel-runtime/~/core-js/library/modules/_shared-key.js?5602","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-integer.js?09ce","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.string.iterator.js?ae27","webpack:///./src/utils/easing.js?f6e9","webpack:///./src/utils/interval-function.js?c7e7","webpack:///./~/babel-runtime/core-js/get-iterator.js?1b08","webpack:///./~/babel-runtime/core-js/number/is-integer.js?14ca","webpack:///./~/babel-runtime/core-js/object/assign.js?e6ca","webpack:///./~/babel-runtime/~/core-js/library/modules/_a-function.js?0699","webpack:///./~/babel-runtime/~/core-js/library/modules/_classof.js?4e04","webpack:///./~/babel-runtime/~/core-js/library/modules/_cof.js?7381","webpack:///./~/babel-runtime/~/core-js/library/modules/_ctx.js?4e59","webpack:///./~/babel-runtime/~/core-js/library/modules/_dom-create.js?612f","webpack:///./~/babel-runtime/~/core-js/library/modules/_enum-bug-keys.js?3254","webpack:///./~/babel-runtime/~/core-js/library/modules/_iobject.js?34ed","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-define.js?4272","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-pie.js?a26b","webpack:///./~/babel-runtime/~/core-js/library/modules/_set-to-string-tag.js?57a7","webpack:///./~/babel-runtime/~/core-js/library/modules/_shared.js?f1ee","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-length.js?f510","webpack:///./~/babel-runtime/~/core-js/library/modules/_uid.js?c10a","webpack:///./~/babel-runtime/~/core-js/library/modules/core.get-iterator-method.js?8a45","webpack:///./~/babel-runtime/~/core-js/library/modules/web.dom.iterable.js?7e82","webpack:///./src/accordion/accordion.js?021c","webpack:///./src/carousel/carousel.js?7189","webpack:///./src/collapsible/collapsible.js?8da8","webpack:///./src/formatfield/formatfield.js?602e","webpack:///./src/index.js?9552","webpack:///./src/lightboard/lightboard.js?4a51","webpack:///./src/lightbox/lightbox.js?4a9b","webpack:///./src/menu-button/menu-button.js?292f","webpack:///./src/selectfield/selectfield.js?4310","webpack:///./src/sticky-header/sticky-header.js?0ce9","webpack:///./src/utils/index.js?d310","webpack:///./~/babel-runtime/core-js/array/from.js?efc2","webpack:///./~/babel-runtime/core-js/is-iterable.js?350e","webpack:///./~/babel-runtime/core-js/number/is-nan.js?f039","webpack:///./~/babel-runtime/core-js/object/define-property.js?5f70","webpack:///./~/babel-runtime/core-js/object/entries.js?41f9","webpack:///./~/babel-runtime/core-js/object/keys.js?fe06","webpack:///./~/babel-runtime/core-js/reflect/apply.js?a3c1","webpack:///./~/babel-runtime/helpers/slicedToArray.js?39c4","webpack:///./~/babel-runtime/~/core-js/library/fn/array/from.js?56e0","webpack:///./~/babel-runtime/~/core-js/library/fn/get-iterator.js?cf7c","webpack:///./~/babel-runtime/~/core-js/library/fn/is-iterable.js?f64a","webpack:///./~/babel-runtime/~/core-js/library/fn/number/is-integer.js?17db","webpack:///./~/babel-runtime/~/core-js/library/fn/number/is-nan.js?e8e9","webpack:///./~/babel-runtime/~/core-js/library/fn/object/assign.js?2fc7","webpack:///./~/babel-runtime/~/core-js/library/fn/object/define-property.js?4d33","webpack:///./~/babel-runtime/~/core-js/library/fn/object/entries.js?eb23","webpack:///./~/babel-runtime/~/core-js/library/fn/object/keys.js?0e2b","webpack:///./~/babel-runtime/~/core-js/library/fn/reflect/apply.js?1fe6","webpack:///./~/babel-runtime/~/core-js/library/modules/_add-to-unscopables.js?7da3","webpack:///./~/babel-runtime/~/core-js/library/modules/_array-includes.js?3a79","webpack:///./~/babel-runtime/~/core-js/library/modules/_create-property.js?f892","webpack:///./~/babel-runtime/~/core-js/library/modules/_html.js?8916","webpack:///./~/babel-runtime/~/core-js/library/modules/_ie8-dom-define.js?b102","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-array-iter.js?a9d0","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-integer.js?9053","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-call.js?45cd","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-create.js?0359","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-detect.js?e400","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-step.js?8944","webpack:///./~/babel-runtime/~/core-js/library/modules/_library.js?08a9","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-assign.js?82ff","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-create.js?9175","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-dps.js?73bc","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-gops.js?a865","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-gpo.js?5ec8","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-keys-internal.js?6fa8","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-sap.js?2605","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-to-array.js?205b","webpack:///./~/babel-runtime/~/core-js/library/modules/_redefine.js?350a","webpack:///./~/babel-runtime/~/core-js/library/modules/_string-at.js?8678","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-index.js?7bea","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-primitive.js?1a65","webpack:///./~/babel-runtime/~/core-js/library/modules/core.get-iterator.js?74ea","webpack:///./~/babel-runtime/~/core-js/library/modules/core.is-iterable.js?be30","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.array.from.js?f8ab","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.array.iterator.js?8359","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.number.is-integer.js?a48c","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.number.is-nan.js?7944","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.assign.js?07f0","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js?8bde","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.keys.js?dfa4","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.reflect.apply.js?2b77","webpack:///./~/babel-runtime/~/core-js/library/modules/es7.object.entries.js?872a","webpack:///./src/mdl-ext-build.scss?16f6"],"names":["VK_TAB","VK_ENTER","VK_ESC","VK_SPACE","VK_PAGE_UP","VK_PAGE_DOWN","VK_END","VK_HOME","VK_ARROW_LEFT","VK_ARROW_UP","VK_ARROW_RIGHT","VK_ARROW_DOWN","ARIA_EXPANDED","ARIA_HIDDEN","ARIA_MULTISELECTABLE","ARIA_SELECTED","IS_DIRTY","IS_DISABLED","IS_EXPANDED","IS_FOCUSED","IS_INVALID","IS_UPGRADED","DATA_UPGRADED","MDL_RIPPLE","MDL_RIPPLE_COMPONENT","MDL_RIPPLE_EFFECT","MDL_RIPPLE_EFFECT_IGNORE_EVENTS","fullThrottle","callback","context","window","throttling","args","requestAnimationFrame","jsonStringToObject","jsonString","source","s","replace","JSON","parse","e","Error","message","stringList","isString","str","flatten","list","reduce","a","b","concat","Array","isArray","objectToStrings","arg","filter","key","map","result","joinStrings","delimiter","join","randomString","n","Math","random","toString","slice","removeChildElements","element","forceReflow","lastChild","removeChild","d","style","display","moveElements","target","ownerDocument","createDocumentFragment","firstChild","appendChild","getWindowViewport","viewportWidth","max","document","documentElement","clientWidth","innerWidth","viewportHeight","clientHeight","innerHeight","isRectInsideWindowViewport","top","left","bottom","right","getScrollParents","elements","el","parentNode","cs","getComputedStyle","overflowY","overflowX","unshift","body","getParentElements","from","to","tether","controlledBy","controlRect","getBoundingClientRect","height","offsetHeight","width","offsetWidth","elementRect","dy","dx","ddy","ddx","r","offsetTop","offsetLeft","isFocusable","hasAttribute","tabindex","getAttribute","parseInt","selector","name","nodeName","test","type","toLowerCase","disabled","href","getPropertyValue","easeInOutQuad","t","c","inOutQuintic","ts","tc","MIN_INERVAL","intervalFunction","interval","lapse","cb","undefined","next","timeElapsed","execute","f","cancel","cancelAnimationFrame","start","timeStart","Date","now","loop","started","value","TypeError","immediate","ReferenceError","stop","ACCORDION","ACCORDION_VERTICAL","ACCORDION_HORIZONTAL","PANEL","PANEL_ROLE","TAB","TAB_CAPTION","TAB_ROLE","TABPANEL","TABPANEL_ROLE","RIPPLE_EFFECT","RIPPLE","ANIMATION_EFFECT","ANIMATION","MaterialExtAccordion","element_","init","accordionPanelElements","panel","tab","tabpanel","classList","contains","querySelector","prototype","commandHandler_","event","preventDefault","stopPropagation","detail","command","dispatchToggleEvent_","state","ce","CustomEvent","bubbles","cancelable","dispatchEvent","openTab_","add","setAttribute","removeAttribute","closeTab_","remove","toggleTab_","closeTabs_","openTabs_","querySelectorAll","forEach","closedItem","upgradeTab","tabElement","disableTab","enableTab","calcMaxTabCaptionWidth","tabCaption","w","children","v","maxWidth","selectTab","selectedTab","tabClickHandler","tabFocusHandler","tabpanelClickHandler","tabpanelFocusHandler","tabKeydownHandler","keyCode","nextTab","nextPanel","previousElementSibling","nextElementSibling","focus","removeEventListener","addEventListener","openTab","closeTab","toggleTab","action","bind","componentHandler","register","constructor","classAsString","cssClass","widget","MDL_RIPPLE_CONTAINER","SLIDE","ROLE","SLIDE_ROLE","MaterialExtCarousel","config_","interactive","autostart","animationLoop","scrollAnimation_","startSlideShow_","nextSlide","slide","animateScroll_","moveSlideIntoViewport_","emitSelectEvent_","nextScroll","nextDirection","direction","scrollLeft","scrollWidth","x","min","cancelSlideShow_","newPosition","newDuration","completedCallback","distance","duration","abs","command_","setAriaSelected_","slides","getSlidesInViewport_","length","keyDownHandler_","cmd","getSlide_","shiftKey","setFocus_","dragHandler_","updating","rAFDragId","startX","clientX","touches","prevX","targetElement","update","currentX","drag","endDrag","clickHandler_","focusHandler_","blurHandler_","evt","carouselRect","slidesInViewport","slideRect","removeListeners_","mdlDowngrade_","closest","addRipple_","rippleContainer","createElement","ripple","img","title","upgradeElement","stopAnimation","upgradeSlides","hasRippleEffect","getConfig","JS_COLLAPSIBLE","COLLAPSIBLE_CONTROL_CLASS","COLLAPSIBLE_GROUP_CLASS","COLLAPSIBLE_REGION_CLASS","Collapsible","controlElement_","keyDownHandler","controlElement","MouseEvent","view","clickHandler","isDisabled","p","push","find","toggle","isExpanded","dispatchToggleEvent","regions","regionElements","i","region","collapse","expand","regionId","ids","regionIds","id","role","addRegionId","initControl","initRegions","addRegionElement","addListeners","removeListeners","split","MaterialExtCollapsible","collapsible","downgrade","getControlElement","getRegionElements","addRegionElements","removeRegionElements","removeRegionElement","disableToggle","enableToggle","JS_FORMAT_FIELD","FORMAT_FIELD_COMPONENT","browserLanguage","navigator","languages","language","userLanguage","FormatField","options_","clearTimeout","timer","focusInHandler","input","readOnly","unformatInput","setTimeout","select","focusOutHandler","formatValue","doReplace","RegExp","options","groupSeparator","decimalSeparator","intlGroupSeparator_","intlDecimalSeparator_","Intl","NumberFormat","locales","format","stripSeparatorsFromValue","fixSeparators","addOptions","opts","addLocale","addGrouping","toLocaleString","useGrouping","minimumFractionDigits","maximumFractionDigits","charAt","input_","MaterialExtFormatfield","formatField_","getOptions","getUnformattedValue","unformat","LIGHTBOARD_ROLE","SLIDE_TABSTOP","MaterialExtLightboard","getSlide","selectSlide_","selectedSlide","dispatchSelectEvent_","addRipple","firstSlide","lastSlide","prevSlide","keydownHandler","focusHandler","LIGHTBOX","LIGHTBOX_SLIDER","LIGHTBOX_SLIDER_SLIDE","STICKY_FOOTER","BUTTON","MaterialExtLightbox","dispatchAction_","buttonClickHandler_","repositionDialog_","footerHeight","footer","isSticky","reposition","dialog","fh","position","scrollTop","topValue","lightboxElement","naturalWidth","vh","imgLoadHandler_","imgDragHandler_","setStyles","properties","opacity","slider","textContent","src","button","figcaption","JS_MENU_BUTTON","MENU_BUTTON_MENU","MENU_BUTTON_MENU_ITEM","MENU_BUTTON_MENU_ITEM_SEPARATOR","menuFactory","ariaControls","removeAllSelected","selectedItem","setSelected","item","force","getSelected","isSeparator","nextItem","current","firstElementChild","previousItem","lastElementChild","firstItem","lastItem","selectItem","close","blurHandler","relatedTarget","explicitOriginalTarget","activeElement","shouldClose","err","touchStartHandler","open","btn","forceFocus","addWaiAria","menuitem","selected","MenuButton","openMenu","closeMenu","recalcMenuPosition","focusElement","focusElementLastScrollPosition","parseFloat","menu","positionChangeHandler","closeMenuHandler","dispatchMenuSelect","scrollElements","addFocusElement","tagName","moveElementToDocumentBody","findMenuElement","menuElement","menuElementId","addMenu","componentInstance","related","indexOf","MaterialExtMenuButton","menuButton_","getMenuElement","getSelectedMenuItem","setSelectedMenuItem","LABEL","INPUT","MaterialExtSelectfield","onFocus_","onBlur_","onReset_","updateClasses_","checkDisabled","checkValidity","checkDirty","checkFocus","select_","Boolean","disable","enable","change","label_","invalid","MDL_LAYOUT_CONTENT","IS_SCROLL_CLASS","MaterialExtStickyHeader","header_","content_","lastScrollTop_","visibleAtScrollEnd","mutationObserver_","drawing_","recalcWidth_","throttleResize","self","resizeHandler_","reposition_","currentContentScrollTop","scrollDiff","headerTop","scrollHeight","throttleScroll","scrollHandler_","updatePosition_","addMutationObserver_","MutationObserver","observe","attributes","childList","characterData","subtree","disconnect","paddingTop"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;ACtCA,8BAA6B;AAC7B,sCAAqC,gC;;;;;;ACDrC;;;;;AAEA,KAAMA,SAAiB,CAAvB;AACA,KAAMC,WAAiB,EAAvB;AACA,KAAMC,SAAiB,EAAvB;AACA,KAAMC,WAAiB,EAAvB;AACA,KAAMC,aAAiB,EAAvB;AACA,KAAMC,eAAiB,EAAvB;AACA,KAAMC,SAAiB,EAAvB;AACA,KAAMC,UAAiB,EAAvB;AACA,KAAMC,gBAAiB,EAAvB;AACA,KAAMC,cAAiB,EAAvB;AACA,KAAMC,iBAAiB,EAAvB;AACA,KAAMC,gBAAiB,EAAvB;;AAEA,KAAMC,gBAAuB,eAA7B;AACA,KAAMC,cAAuB,aAA7B;AACA,KAAMC,uBAAuB,sBAA7B;AACA,KAAMC,gBAAuB,eAA7B;;AAEA,KAAMC,WAAgB,UAAtB;AACA,KAAMC,cAAgB,aAAtB;AACA,KAAMC,cAAgB,aAAtB;AACA,KAAMC,aAAgB,YAAtB;AACA,KAAMC,aAAgB,YAAtB;AACA,KAAMC,cAAgB,aAAtB;AACA,KAAMC,gBAAgB,eAAtB;;AAEA,KAAMC,aAAkC,YAAxC;AACA,KAAMC,uBAAkC,gBAAxC;AACA,KAAMC,oBAAkC,sBAAxC;AACA,KAAMC,kCAAkC,qCAAxC;;SAGE1B,M,GAAAA,M;SACAC,Q,GAAAA,Q;SACAC,M,GAAAA,M;SACAC,Q,GAAAA,Q;SACAC,U,GAAAA,U;SACAC,Y,GAAAA,Y;SACAC,M,GAAAA,M;SACAC,O,GAAAA,O;SACAC,a,GAAAA,a;SACAC,W,GAAAA,W;SACAC,c,GAAAA,c;SACAC,a,GAAAA,a;SACAC,a,GAAAA,a;SACAC,W,GAAAA,W;SACAC,oB,GAAAA,oB;SACAC,a,GAAAA,a;SACAC,Q,GAAAA,Q;SACAC,W,GAAAA,W;SACAC,W,GAAAA,W;SACAC,U,GAAAA,U;SACAC,U,GAAAA,U;SACAC,W,GAAAA,W;SACAC,a,GAAAA,a;SACAC,U,GAAAA,U;SACAC,oB,GAAAA,oB;SACAC,iB,GAAAA,iB;SACAC,+B,GAAAA,+B;;;;;;AC5DF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAmE;AACnE;AACA,sFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,gDAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,eAAc;AACd,eAAc;AACd,eAAc;AACd,gBAAe;AACf,gBAAe;AACf,gBAAe;AACf,iBAAgB;AAChB,0B;;;;;;AC5DA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wB;;;;;;ACVA;AACA;AACA;AACA,wCAAuC,gC;;;;;;ACHvC;AACA;AACA;AACA;AACA,G;;;;;;ACJA,qB;;;;;;ACAA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,gBAAgB;;AAE7F;AACA;AACA,8CAA6C,gBAAgB;AAC7D;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA,G;;;;;;ACpBA;AACA;AACA,kCAAiC,QAAQ,gBAAgB,UAAU,GAAG;AACtE,EAAC,E;;;;;;ACHD;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,G;;;;;;ACNA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,G;;;;;;ACPA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,UAAU;AACb;AACA;AACA;AACA,G;;;;;;;;;;;;;;;;;;ACfA;;;;;;;;;;;;;;;AAeA,KAAMC,eAAe,SAAfA,YAAe,CAACC,QAAD,EAAWC,OAAX,EAAuB;;AAE1C,OAAI,CAACA,OAAL,EAAc;AACZA,e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B;;;;;;;AClFf,mBAAkB,wD;;;;;;ACAlB,mBAAkB,wD;;;;;;ACAlB,mBAAkB,wD;;;;;;ACAlB;AACA;AACA;AACA,G;;;;;;ACHA;AACA;AACA;AACA;AACA,0BAAyB,kBAAkB,EAAE;;AAE7C;AACA;AACA;AACA;AACA,IAAG,UAAU;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACtBA,kBAAiB;;AAEjB;AACA;AACA,G;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;AACA;AACA;AACA,c;;;;;;ACHA;AACA;AACA;AACA;AACA,G;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,aAAa;;AAEzC;AACA;AACA;AACA;AACA;AACA,yCAAwC,oCAAoC;AAC5E,6CAA4C,oCAAoC;AAChF,MAAK,2BAA2B,oCAAoC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB,mBAAmB;AACnC;AACA;AACA,kCAAiC,2BAA2B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,G;;;;;;ACrEA,eAAc,sB;;;;;;ACAd;AACA;AACA;;AAEA;AACA,mEAAkE,+BAA+B;AACjG,G;;;;;;ACNA;AACA;AACA,oDAAmD;AACnD;AACA,wCAAuC;AACvC,G;;;;;;ACLA;AACA;AACA;AACA;AACA,4DAA2D;AAC3D,G;;;;;;ACLA;AACA;AACA;AACA;AACA,G;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACPA;AACA;AACA;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;AACA,G;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,G;;;;;;ACXA;AACA;AACA;AACA;AACA;;AAEA;AACA,2FAAgF,aAAa,EAAE;;AAE/F;AACA,sDAAqD,0BAA0B;AAC/E;AACA,G;;;;;;ACZA;AACA;;AAEA;AACA;AACA,gCAA+B,qBAAqB;AACpD,gCAA+B,SAAS,EAAE;AAC1C,EAAC,UAAU;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,SAAS,mBAAmB;AACvD,gCAA+B,aAAa;AAC5C;AACA,IAAG,UAAU;AACb;AACA,G;;;;;;ACpBA;AACA,WAAU;AACV,G;;;;;;ACFA,uB;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC,UAAU,EAAE;AAC9C,oBAAmB,sCAAsC;AACzD,EAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC,W;;;;;;AChCD;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;;;;;;ACxCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACZA,0C;;;;;;ACAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,G;;;;;;ACZA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA,oDAAmD,OAAO,EAAE;AAC5D,G;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,G;;;;;;ACfA,0C;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yEAA0E,kBAAkB,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAoD,gCAAgC;AACpF;AACA;AACA,MAAK;AACL;AACA,kCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;ACpCD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAgC;AAChC,eAAc;AACd,kBAAiB;AACjB;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA,6B;;;;;;ACjCA;AACA;;AAEA,+BAA8B,mCAAoC,E;;;;;;ACHlE;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC,E;;;;;;ACPD;AACA;;AAEA,2CAA0C,gCAAoC,E;;;;;;ACH9E;AACA;AACA,qEAAuE,0CAA0C,E;;;;;;ACFjH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC,E;;;;;;ACRD;AACA;AACA;AACA;AACA,sDAAmD;AACnD;AACA;AACA;AACA,sBAAqB;AACrB,EAAC;AACD;AACA;AACA;AACA;AACA;AACA,EAAC,E;;;;;;ACfD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC,E;;;;;;ACRD,0C","file":"mdl-ext.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"mdl-ext\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mdl-ext\"] = factory();\n\telse\n\t\troot[\"mdl-ext\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition\n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 80c672803f0b3533e5b7\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 80c672803f0b3533e5b7","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_core.js\n// module id = 1\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_core.js\n// module id = 1\n// module chunks = 0 1","'use strict';\n\nconst VK_TAB         = 9;\nconst VK_ENTER       = 13;\nconst VK_ESC         = 27;\nconst VK_SPACE       = 32;\nconst VK_PAGE_UP     = 33;\nconst VK_PAGE_DOWN   = 34;\nconst VK_END         = 35;\nconst VK_HOME        = 36;\nconst VK_ARROW_LEFT  = 37;\nconst VK_ARROW_UP    = 38;\nconst VK_ARROW_RIGHT = 39;\nconst VK_ARROW_DOWN  = 40;\n\nconst ARIA_EXPANDED        = 'aria-expanded';\nconst ARIA_HIDDEN          = 'aria-hidden';\nconst ARIA_MULTISELECTABLE = 'aria-multiselectable';\nconst ARIA_SELECTED        = 'aria-selected';\n\nconst IS_DIRTY      = 'is-dirty';\nconst IS_DISABLED   = 'is-disabled';\nconst IS_EXPANDED   = 'is-expanded';\nconst IS_FOCUSED    = 'is-focused';\nconst IS_INVALID    = 'is-invalid';\nconst IS_UPGRADED   = 'is-upgraded';\nconst DATA_UPGRADED = 'data-upgraded';\n\nconst MDL_RIPPLE                      = 'mdl-ripple';\nconst MDL_RIPPLE_COMPONENT            = 'MaterialRipple';\nconst MDL_RIPPLE_EFFECT               = 'mdl-js-ripple-effect';\nconst MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';\n\nexport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_PAGE_UP,\n  VK_PAGE_DOWN ,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN ,\n  ARIA_EXPANDED,\n  ARIA_HIDDEN,\n  ARIA_MULTISELECTABLE,\n  ARIA_SELECTED,\n  IS_DIRTY,\n  IS_DISABLED,\n  IS_EXPANDED,\n  IS_FOCUSED,\n  IS_INVALID,\n  IS_UPGRADED,\n  DATA_UPGRADED ,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/constants.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/constants.js","var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_export.js\n// module id = 3\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_export.js\n// module id = 3\n// module chunks = 0 1","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_wks.js\n// module id = 4\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_wks.js\n// module id = 4\n// module chunks = 0 1","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_global.js\n// module id = 5\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_global.js\n// module id = 5\n// module chunks = 0 1","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_an-object.js\n// module id = 6\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_an-object.js\n// module id = 6\n// module chunks = 0 1","module.exports = {};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iterators.js\n// module id = 7\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iterators.js\n// module id = 7\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  } else {\n    return (0, _from2.default)(arr);\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/toConsumableArray.js\n// module id = 8\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/toConsumableArray.js\n// module id = 8\n// module chunks = 0 1","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_descriptors.js\n// module id = 9\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_descriptors.js\n// module id = 9\n// module chunks = 0 1","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_fails.js\n// module id = 10\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_fails.js\n// module id = 10\n// module chunks = 0 1","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_hide.js\n// module id = 11\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_hide.js\n// module id = 11\n// module chunks = 0 1","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dp.js\n// module id = 12\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dp.js\n// module id = 12\n// module chunks = 0 1","/**\n * Since some events can fire at a high rate, the event handler should be limited to execute computationally\n * expensive operations, such as DOM modifications, inside a single rendered frame.\n * When listening to e.g. scroll and resize events, the browser tends to fire off more events per\n * second than are actually useful. For instance, if your event listener sets some element positions, then it\n * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of\n * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that\n * it runs immediately prior to the browser rendering the updated layout to the screen.\n * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page\n * is rendered to the screen.\n * *\n * @param callback the function to throttle\n * @param context  optional context of this, default to global\n * @return {function(...[*])}\n */\nconst fullThrottle = (callback, context) => {\n\n  if (!context) {\n    context = this || window;\n  }\n\n  let throttling = false;\n\n  return (...args) => {\n    if(!throttling) {\n      throttling = true;\n      window.requestAnimationFrame( () => {\n        throttling = false;\n        return Reflect.apply(callback, context, args);\n      });\n    }\n  };\n};\n\nexport default fullThrottle;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/full-throttle.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/full-throttle.js","'use strict';\n\n/**\n * Converts a JSON string to object\n * @param jsonString\n * @param source\n */\nconst jsonStringToObject = (jsonString, source = {} ) => {\n  const s = jsonString.replace(/'/g, '\"');\n  try {\n    return Object.assign(source, JSON.parse(s));\n  }\n  catch (e) {\n    throw new Error(`Failed to parse json string: ${s}. Error: ${e.message}`);\n  }\n};\n\nexport { jsonStringToObject };\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/json-utils.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/json-utils.js","'use strict';\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A javascript utility for conditionally creating a list of strings.\n * The function takes any number of arguments which can be a string or object.\n * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames\n *\n * @param  {*} args the strings and/or objects to\n * @return {Array} a list of strings\n * @example\n * // Returns ['foo', 'bar', 'baz', 'quux']\n * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n * @example see the tests for more examples\n */\nconst stringList = (...args) => {\n\n  const isString = str => str != null && typeof str === 'string';\n\n  const flatten = list => list.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);\n\n  const objectToStrings = arg =>\n    Object.keys(arg)\n      .filter(key => arg[key])\n      .map(key => key);\n\n  return args\n    .filter(arg => !!arg)\n    .map(arg => isString(arg) ? arg : objectToStrings(arg))\n    .reduce((result, arg) => result.concat(Array.isArray(arg) ? flatten(arg) : arg), []);\n};\n\n/**\n * A simple javascript utility for conditionally joining strings together.\n * The function takes a delimiter string and any number of arguments which can be a string or object.\n *\n * @param delimiter delimiter to separate joined strings\n * @param  {*} args the strings and/or objects to join\n * @return {String} the joined strings\n * @example\n * // Returns 'foo, bar, baz, quux'\n * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n * @example see the tests for more examples\n */\nconst joinStrings = (delimiter = ' ', ...args) => stringList(...args).join(delimiter);\n\n/**\n * Generates a random string with a given length\n * @param n {Integer} length of generated string\n * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\n * @return {String} the random string\n * @example\n * // Returns e.g. 'pd781w0y'\n * randomString(8);\n * @example see the tests for more examples\n */\nconst randomString = ( n=12 ) => Array( n+1 ).join((`${Math.random().toString(36)}00000000000000000`).slice(2, 18)).slice(0, n);\n\nexport { joinStrings, randomString, stringList };\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/string-utils.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/string-utils.js","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_has.js\n// module id = 16\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_has.js\n// module id = 16\n// module chunks = 0 1","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-object.js\n// module id = 17\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-object.js\n// module id = 17\n// module chunks = 0 1","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = require('./_object-keys-internal')\n  , enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys.js\n// module id = 18\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys.js\n// module id = 18\n// module chunks = 0 1","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-iobject.js\n// module id = 19\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-iobject.js\n// module id = 19\n// module chunks = 0 1","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-object.js\n// module id = 20\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-object.js\n// module id = 20\n// module chunks = 0 1","/**\n * Remove child element(s)\n * element.innerHTNL = '' has a performance penality!\n * @see http://jsperf.com/empty-an-element/16\n * @see http://jsperf.com/force-reflow\n * @param element\n * @param forceReflow\n */\nconst removeChildElements = (element, forceReflow = true) => {\n\n  // See: http://jsperf.com/empty-an-element/16\n  while (element.lastChild) {\n    element.removeChild(element.lastChild);\n  }\n  if(forceReflow) {\n    // See: http://jsperf.com/force-reflow\n    const d = element.style.display;\n\n    element.style.display = 'none';\n    element.style.display = d;\n  }\n};\n\n/**\n * Moves child elements from a DOM node to another dom node.\n * @param source {HTMLElement}\n * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created\n * @return {HTMLElement} The target node\n *\n * @example\n * // Moves child elements from a DOM node to another dom node.\n * moveElements(source, destination);\n *\n * @example\n * // If the second parameter is ommited, a document fragment is created:\n * let fragment = moveElements(source);\n *\n * @See: https://github.com/webmodules/dom-move\n */\nconst moveElements = (source, target) => {\n  if (!target) {\n    target = source.ownerDocument.createDocumentFragment();\n  }\n  while (source.firstChild) {\n    target.appendChild(source.firstChild);\n  }\n  return target;\n};\n\n\n/**\n * Get the browser viewport dimensions\n * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript\n * @return {{windowWidth: number, windowHeight: number}}\n */\nconst getWindowViewport = () => {\n  return {\n    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\n  };\n};\n\n\n/**\n * Check whether an element is in the window viewport\n * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/\n * @param top\n * @param left\n * @param bottom\n * @param right\n * @return {boolean} true if rectangle is inside window viewport, otherwise false\n */\nconst isRectInsideWindowViewport = ({ top, left, bottom, right }) => {\n  const { viewportWidth, viewportHeight } = getWindowViewport();\n  return top >= 0 &&\n    left >= 0 &&\n    bottom <= viewportHeight &&\n    right <= viewportWidth;\n};\n\n\n/**\n * Get a list of parent elements that can possibly scroll\n * @param el the element to get parents for\n * @returns {Array}\n */\nconst getScrollParents = el => {\n  const elements = [];\n\n  /*\n  for (el = el.parentNode; el; el = el.parentNode) {\n    const cs = window.getComputedStyle(el);\n    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n      elements.unshift(el);\n    }\n    if(el === document.body) {\n      break;\n    }\n  }\n  */\n\n  let element = el.parentNode;\n  while (element) {\n    const cs = window.getComputedStyle(element);\n    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n      elements.unshift(element);\n    }\n    if(element === document.body) {\n      break;\n    }\n    element = element.parentNode;\n  }\n\n  return elements;\n};\n\n/**\n * Get a list of parent elements, from a given element to a given element\n * @param {HTMLElement} from\n * @param {HTMLElement} to\n * @return {Array<HTMLElement>} the parent elements, not including from and to\n */\nconst getParentElements = (from, to) => {\n  const result = [];\n  let element = from.parentNode;\n  while (element) {\n    if(element === to) {\n      break;\n    }\n    result.unshift(element);\n    element = element.parentNode;\n  }\n  return result;\n};\n\n/**\n * Position element next to button\n *\n * Positioning strategy\n *  1. element.height > viewport.height\n *     let element.height = viewport.heigt\n *     let element.overflow-y = auto\n *  2. element.width > viewport.width\n *     let element.width = viewport.width\n *  3. position element below button, align left edge of element with button left\n *       done if element inside viewport\n *  4. position element below button, align right edge of element with button right\n *       done if element inside viewport\n *  5. positions element above button, aligns left edge of element with button left\n *       done if element inside viewport\n *  6. position element above the control element, aligned to its right.\n *       done if element inside viewport\n *  7. position element at button right hand side, aligns element top with button top\n *       done if element inside viewport\n *  8. position element at button left hand side, aligns element top with button top\n *       done if element inside viewport\n *  9. position element inside viewport\n *     1. position element at viewport bottom\n *     2. position element at button right hand side\n *        done if element inside viewport\n *     3. position element at button left hand side\n *       done if element inside viewport\n *     4. position element at viewport right\n * 10. done\n *\n */\nconst tether = (controlledBy, element) => {\n  const controlRect = controlledBy.getBoundingClientRect();\n\n  // 1. will element height fit inside window viewport?\n  const { viewportWidth, viewportHeight } = getWindowViewport();\n\n  element.style.height = 'auto';\n  //element.style.overflowY = 'hidden';\n  if(element.offsetHeight > viewportHeight) {\n    element.style.height = `${viewportHeight}px`;\n    element.style.overflowY = 'auto';\n  }\n\n  // 2. will element width fit inside window viewport?\n  element.style.width = 'auto';\n  if(element.offsetWidth > viewportWidth) {\n    element.style.width = `${viewportWidth}px`;\n  }\n\n  const elementRect = element.getBoundingClientRect();\n\n  // element to control distance\n  const dy = controlRect.top - elementRect.top;\n  const dx = controlRect.left - elementRect.left;\n\n  // element rect, window coordinates relative to top,left of control\n  const top = elementRect.top + dy;\n  const left = elementRect.left + dx;\n  const bottom = top + elementRect.height;\n  const right = left + elementRect.width;\n\n  // Position relative to control\n  let ddy = dy;\n  let ddx = dx;\n\n  if(isRectInsideWindowViewport({\n    top: top + controlRect.height,\n    left: left,\n    bottom: bottom + controlRect.height,\n    right: right\n  })) {\n    // 3 position element below the control element, aligned to its left\n    ddy = controlRect.height + dy;\n    //console.log('***** 3');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top + controlRect.height,\n    left: left + controlRect.width - elementRect.width,\n    bottom: bottom + controlRect.height,\n    right: left + controlRect.width\n  })) {\n    // 4 position element below the control element, aligned to its right\n    ddy = controlRect.height + dy;\n    ddx = dx + controlRect.width - elementRect.width;\n    //console.log('***** 4');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top - elementRect.height,\n    left: left,\n    bottom: bottom - elementRect.height,\n    right: right\n  })) {\n    // 5. position element above the control element, aligned to its left.\n    ddy = dy - elementRect.height;\n    //console.log('***** 5');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top - elementRect.height,\n    left: left + controlRect.width - elementRect.width,\n    bottom: bottom - elementRect.height,\n    right: left + controlRect.width\n  })) {\n    // 6. position element above the control element, aligned to its right.\n    ddy = dy - elementRect.height;\n    ddx = dx + controlRect.width - elementRect.width;\n    //console.log('***** 6');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top,\n    left: left + controlRect.width,\n    bottom: bottom,\n    right: right + controlRect.width\n  })) {\n    // 7. position element at button right hand side\n    ddx = controlRect.width + dx;\n    //console.log('***** 7');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top,\n    left: left - controlRect.width,\n    bottom: bottom,\n    right: right - controlRect.width\n  })) {\n    // 8. position element at button left hand side\n    ddx = dx - elementRect.width;\n    //console.log('***** 8');\n  }\n  else {\n    // 9. position element inside viewport, near controlrect if possible\n    //console.log('***** 9');\n\n    // 9.1 position element near controlrect bottom\n    ddy =  dy - bottom + viewportHeight;\n    if(top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {\n      ddy = controlRect.height + dy;\n    }\n    else if(top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {\n      ddy = dy - elementRect.height;\n    }\n\n    if(left + elementRect.width + controlRect.width <= viewportWidth) {\n      // 9.2 Position element at button right hand side\n      ddx = controlRect.width + dx;\n      //console.log('***** 9.2');\n    }\n    else if(left - elementRect.width >= 0) {\n      // 9.3 Position element at button left hand side\n      ddx = dx - elementRect.width;\n      //console.log('***** 9.3');\n    }\n    else {\n      // 9.4 position element at (near) viewport right\n      const r = left + elementRect.width - viewportWidth;\n      ddx = dx - r;\n      //console.log('***** 9.4');\n    }\n  }\n\n  // 10. done\n  element.style.top = `${element.offsetTop + ddy}px`;\n  element.style.left = `${element.offsetLeft + ddx}px`;\n  //console.log('***** 10. done');\n};\n\n/**\n * Check if the given element can receive focus\n * @param {HTMLElement} element the element to check\n * @return {boolean} true if the element is focusable, otherwise false\n */\nconst isFocusable = (element) => {\n  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js\n  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus\n\n  if (element.hasAttribute('tabindex')) {\n    const tabindex = element.getAttribute('tabindex');\n    if (!Number.isNaN(tabindex)) {\n      return parseInt(tabindex) > -1;\n    }\n  }\n\n  if (element.hasAttribute('contenteditable') &&\n    element.getAttribute('contenteditable') !== 'false') {\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable\n    return true;\n  }\n\n  // natively focusable, but only when enabled\n  const selector = /input|select|textarea|button|details/i;\n  const name = element.nodeName;\n  if (selector.test(name)) {\n    return element.type.toLowerCase() !== 'hidden' && !element.disabled;\n  }\n\n  // anchors and area must have an href\n  if (name === 'A' || name === 'AREA') {\n    return !!element.href;\n  }\n\n  if (name === 'IFRAME') {\n    // Check visible iframe\n    const cs = window.getComputedStyle(element);\n    return cs.getPropertyValue('display').toLowerCase() !== 'none';\n  }\n\n  return false;\n};\n\n\n/**\n * Get a list of offset parents for given element\n * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n * @param el the element\n * @return {Array} a list of offset parents\n */\n/*\nconst offsetParents = (el) => {\n  const elements = [];\n  for (; el; el = el.offsetParent) {\n    elements.unshift(el);\n  }\n  if(!elements.find(e => e === document.body)) {\n    elements.unshift(document.body);\n  }\n  return elements;\n};\n*/\n\n/**\n * Finds the common offset ancestor of two DOM nodes\n * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n * @see https://gist.github.com/benpickles/4059636\n * @param a\n * @param b\n * @return {Element} The common offset ancestor of a and b\n */\n/*\nconst commonOffsetAncestor = (a, b) => {\n  const parentsA = offsetParents(a);\n  const parentsB = offsetParents(b);\n\n  for (let i = 0; i < parentsA.length; i++) {\n    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];\n  }\n};\n*/\n\n/**\n * Calculate position relative to a target element\n * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively\n * @param target\n * @param el\n * @return {{top: number, left: number}}\n */\n/*\nconst calcPositionRelativeToTarget = (target, el) => {\n  let top = 0;\n  let left = 0;\n\n  while(el) {\n    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;\n    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;\n    el = el.offsetParent;\n\n    if(el === target) {\n      break;\n    }\n  }\n  return { top: top, left: left };\n};\n*/\n\nexport {\n  getWindowViewport,\n  getParentElements,\n  getScrollParents,\n  isFocusable,\n  isRectInsideWindowViewport,\n  moveElements,\n  removeChildElements,\n  tether,\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dom-utils.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dom-utils.js","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 22\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 22\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 23\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 23\n// module chunks = 0 1","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_defined.js\n// module id = 24\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_defined.js\n// module id = 24\n// module chunks = 0 1","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_property-desc.js\n// module id = 25\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_property-desc.js\n// module id = 25\n// module chunks = 0 1","var shared = require('./_shared')('keys')\n  , uid    = require('./_uid');\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared-key.js\n// module id = 26\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared-key.js\n// module id = 26\n// module chunks = 0 1","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-integer.js\n// module id = 27\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-integer.js\n// module id = 27\n// module chunks = 0 1","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.string.iterator.js\n// module id = 28\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.string.iterator.js\n// module id = 28\n// module chunks = 0 1","'use strict';\n\n// See: http://robertpenner.com/easing/\n\nconst easeInOutQuad = (t, b, c, d) => {\n  t /= d / 2;\n  if(t < 1) return c / 2 * t * t + b;\n  t--;\n  return -c / 2 * (t * (t - 2) - 1) + b;\n};\n\nconst inOutQuintic = (t, b, c, d) => {\n  const ts = (t/=d)*t;\n  const tc = ts*t;\n  return b+c*(6*tc*ts + -15*ts*ts + 10*tc);\n};\n\nexport { easeInOutQuad, inOutQuintic };\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/easing.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/easing.js","const MIN_INERVAL = 1000/60;\n\n/**\n * Trigger a callback at a given interval\n * @param interval defaults to 1000/60 ms\n * @return {function()} reference to start, stop, immediate and started\n */\n\nconst intervalFunction = ( interval = MIN_INERVAL ) => {\n\n  let lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;\n  let cb = undefined;\n  let next = null;\n  let timeElapsed = 0;\n\n  const execute = () => {\n    const f = cb(timeElapsed);\n    if (!f) {\n      cancel();\n    }\n  };\n\n  const cancel = () => {\n    if(next) {\n      window.cancelAnimationFrame(next);\n    }\n    next = null;\n    timeElapsed = 0;\n  };\n\n  const start = () => {\n    let timeStart = Date.now();\n\n    const loop = now => {\n      if (next) {\n        next = window.requestAnimationFrame( () => loop( Date.now() ));\n\n        timeElapsed += now - timeStart;\n\n        if(timeElapsed >= lapse) {\n          execute();\n          if( (timeElapsed -= lapse) > lapse) {\n            // time elapsed - interval_ > interval_ , indicates inactivity\n            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on\n            timeElapsed = 0;\n          }\n        }\n        timeStart = now;\n      }\n    };\n\n    next = 1;  // a truthy value for first loop\n    loop( timeStart );\n  };\n\n  return {\n    get started() {\n      return next != null;\n    },\n    get interval() {\n      return lapse;\n    },\n    set interval(value) {\n      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;\n    },\n    start(callback) {\n      if(typeof callback !== 'function') {\n        throw new TypeError('callback parameter must be a function');\n      }\n      cb = callback;\n      start();\n    },\n    immediate() {\n      if(!cb) {\n        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');\n      }\n      execute();\n    },\n    stop: () => cancel(),\n  };\n};\n\nexport default intervalFunction;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/interval-function.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/interval-function.js","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 31\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 31\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/number/is-integer\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-integer.js\n// module id = 32\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-integer.js\n// module id = 32\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/assign.js\n// module id = 33\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/assign.js\n// module id = 33\n// module chunks = 0 1","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_a-function.js\n// module id = 34\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_a-function.js\n// module id = 34\n// module chunks = 0 1","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_classof.js\n// module id = 35\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_classof.js\n// module id = 35\n// module chunks = 0 1","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_cof.js\n// module id = 36\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_cof.js\n// module id = 36\n// module chunks = 0 1","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ctx.js\n// module id = 37\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ctx.js\n// module id = 37\n// module chunks = 0 1","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_dom-create.js\n// module id = 38\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_dom-create.js\n// module id = 38\n// module chunks = 0 1","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_enum-bug-keys.js\n// module id = 39\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_enum-bug-keys.js\n// module id = 39\n// module chunks = 0 1","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iobject.js\n// module id = 40\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iobject.js\n// module id = 40\n// module chunks = 0 1","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-define.js\n// module id = 41\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-define.js\n// module id = 41\n// module chunks = 0 1","exports.f = {}.propertyIsEnumerable;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-pie.js\n// module id = 42\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-pie.js\n// module id = 42\n// module chunks = 0 1","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_set-to-string-tag.js\n// module id = 43\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_set-to-string-tag.js\n// module id = 43\n// module chunks = 0 1","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared.js\n// module id = 44\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared.js\n// module id = 44\n// module chunks = 0 1","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-length.js\n// module id = 45\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-length.js\n// module id = 45\n// module chunks = 0 1","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_uid.js\n// module id = 46\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_uid.js\n// module id = 46\n// module chunks = 0 1","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator-method.js\n// module id = 47\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator-method.js\n// module id = 47\n// module chunks = 0 1","require('./es6.array.iterator');\nvar global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , TO_STRING_TAG = require('./_wks')('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/web.dom.iterable.js\n// module id = 48\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/web.dom.iterable.js\n// module id = 48\n// module chunks = 0 1","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A WAI-ARIA friendly accordion component.\n * An accordion is a collection of expandable panels associated with a common outer container. Panels consist\n * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections\n * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.\n * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates\n * and makes the contents of each panel visible (or not) by interacting with the Accordion Header\n */\n\nimport {\n  VK_ENTER,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_EXPANDED,\n  IS_UPGRADED,\n  ARIA_MULTISELECTABLE,\n  ARIA_EXPANDED,\n  ARIA_HIDDEN,\n  ARIA_SELECTED\n} from '../utils/constants';\n\n\n(function() {\n  'use strict';\n  const ACCORDION            = 'mdlext-accordion';\n  const ACCORDION_VERTICAL   = 'mdlext-accordion--vertical';\n  const ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';\n  const PANEL                = 'mdlext-accordion__panel';\n  const PANEL_ROLE           = 'presentation';\n  const TAB                  = 'mdlext-accordion__tab';\n  const TAB_CAPTION          = 'mdlext-accordion__tab__caption';\n  const TAB_ROLE             = 'tab';\n  const TABPANEL             = 'mdlext-accordion__tabpanel';\n  const TABPANEL_ROLE        = 'tabpanel';\n  const RIPPLE_EFFECT        = 'mdlext-js-ripple-effect';\n  const RIPPLE               = 'mdlext-accordion__tab--ripple';\n  const ANIMATION_EFFECT     = 'mdlext-js-animation-effect';\n  const ANIMATION            = 'mdlext-accordion__tabpanel--animation';\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtAccordion = function MaterialExtAccordion( element ) {\n\n    // Stores the Accordion HTML element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtAccordion'] = MaterialExtAccordion;\n\n\n  // Helpers\n  const accordionPanelElements = ( element ) => {\n    if(!element) {\n      return {\n        panel: null,\n        tab: null,\n        tabpanel: null\n      };\n    }\n    else if (element.classList.contains(PANEL)) {\n      return {\n        panel: element,\n        tab: element.querySelector(`.${TAB}`),\n        tabpanel: element.querySelector(`.${TABPANEL}`)\n      };\n    }\n    else {\n      return {\n        panel: element.parentNode,\n        tab: element.parentNode.querySelector(`.${TAB}`),\n        tabpanel: element.parentNode.querySelector(`.${TABPANEL}`)\n      };\n    }\n  };\n\n\n  // Private methods.\n\n  /**\n   * Handles custom command event, 'open', 'close', 'toggle' or upgrade\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtAccordion.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if(event && event.detail) {\n      this.command(event.detail);\n    }\n  };\n\n  /**\n   * Dispatch toggle event\n   * @param {string} state\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function ( state, tab, tabpanel ) {\n    const ce = new CustomEvent('toggle', {\n      bubbles: true,\n      cancelable: true,\n      detail: { state: state, tab: tab, tabpanel: tabpanel }\n    });\n    this.element_.dispatchEvent(ce);\n  };\n\n  /**\n   * Open tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.openTab_ = function( panel, tab, tabpanel ) {\n    panel.classList.add(IS_EXPANDED);\n    tab.setAttribute(ARIA_EXPANDED, 'true');\n    tabpanel.removeAttribute('hidden');\n    tabpanel.setAttribute(ARIA_HIDDEN, 'false');\n    this.dispatchToggleEvent_('open', tab, tabpanel);\n  };\n\n  /**\n   * Close tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.closeTab_ = function( panel, tab, tabpanel ) {\n    panel.classList.remove(IS_EXPANDED);\n    tab.setAttribute(ARIA_EXPANDED, 'false');\n    tabpanel.setAttribute('hidden', '');\n    tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n    this.dispatchToggleEvent_('close', tab, tabpanel);\n  };\n\n  /**\n   * Toggle tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.toggleTab_ = function( panel, tab, tabpanel ) {\n    if( !(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled')) ) {\n      if (tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n        this.closeTab_(panel, tab, tabpanel);\n      }\n      else {\n        if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {\n          this.closeTabs_();\n        }\n        this.openTab_(panel, tab, tabpanel);\n      }\n    }\n  };\n\n  /**\n   * Open tabs\n   * @private\n   */\n  MaterialExtAccordion.prototype.openTabs_ = function() {\n    if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() === 'true') {\n      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)]\n        .filter(panel => !panel.classList.contains(IS_EXPANDED))\n        .forEach(closedItem => {\n          const tab = closedItem.querySelector(`.${TAB}`);\n          if (!tab.hasAttribute('disabled')) {\n            this.openTab_(closedItem, tab, closedItem.querySelector(`.${TABPANEL}`));\n          }\n        });\n    }\n  };\n\n  /**\n   * Close tabs\n   * @private\n   */\n  MaterialExtAccordion.prototype.closeTabs_ = function() {\n    [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}.${IS_EXPANDED}`)]\n      .forEach( panel => {\n        const tab = panel.querySelector(`.${TAB}`);\n        if(!tab.hasAttribute('disabled')) {\n          this.closeTab_(panel, tab, panel.querySelector(`.${TABPANEL}`));\n        }\n      });\n  };\n\n\n  // Public methods.\n\n  /**\n   * Upgrade an individual accordion tab\n   * @public\n   * @param {Element} tabElement The HTML element for the accordion panel.\n   */\n  MaterialExtAccordion.prototype.upgradeTab = function( tabElement ) {\n\n    const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n\n    const disableTab = () => {\n      panel.classList.remove(IS_EXPANDED);\n      tab.setAttribute('tabindex', '-1');\n      tab.setAttribute(ARIA_EXPANDED, 'false');\n      tabpanel.setAttribute('hidden', '');\n      tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n    };\n\n    const enableTab = () => {\n      if(!tab.hasAttribute(ARIA_EXPANDED)) {\n        tab.setAttribute(ARIA_EXPANDED, 'false');\n      }\n\n      tab.setAttribute('tabindex', '0');\n\n      if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n        panel.classList.add(IS_EXPANDED);\n        tabpanel.removeAttribute('hidden');\n        tabpanel.setAttribute(ARIA_HIDDEN, 'false');\n      }\n      else {\n        panel.classList.remove(IS_EXPANDED);\n        tabpanel.setAttribute('hidden', '');\n        tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n      }\n    };\n\n    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.\n    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.\n    /* istanbul ignore next */\n    const calcMaxTabCaptionWidth = () => {\n\n      const tabCaption = tab.querySelector(`.${TAB_CAPTION}`);\n      if(tabCaption !== null) {\n        const w = [...tab.children]\n          .filter( el => el.classList && !el.classList.contains(TAB_CAPTION) )\n          .reduce( (v, el) => v + el.offsetWidth, 0 );\n\n        const maxWidth = tab.clientHeight - w;\n        if(maxWidth > 0) {\n          tabCaption.style['max-width'] = `${maxWidth}px`;\n        }\n      }\n    };\n\n    const selectTab = () => {\n      if( !tab.hasAttribute(ARIA_SELECTED) ) {\n        [...this.element_.querySelectorAll(`.${TAB}[aria-selected=\"true\"]`)].forEach(\n          selectedTab => selectedTab.removeAttribute(ARIA_SELECTED)\n        );\n        tab.setAttribute(ARIA_SELECTED, 'true');\n      }\n    };\n\n    const tabClickHandler = () => {\n      this.toggleTab_(panel, tab, tabpanel);\n      selectTab();\n    };\n\n    const tabFocusHandler = () => {\n      selectTab();\n    };\n\n    const tabpanelClickHandler = () => {\n      selectTab();\n    };\n\n    const tabpanelFocusHandler = () => {\n      selectTab();\n    };\n\n    const tabKeydownHandler = e => {\n\n      if(this.element_.hasAttribute('disabled')) {\n        return;\n      }\n\n      if ( e.keyCode === VK_END        || e.keyCode === VK_HOME\n        || e.keyCode === VK_ARROW_UP   || e.keyCode === VK_ARROW_LEFT\n        || e.keyCode === VK_ARROW_DOWN || e.keyCode === VK_ARROW_RIGHT ) {\n\n        let nextTab = null;\n        let keyCode = e.keyCode;\n\n        if (keyCode === VK_HOME) {\n          nextTab = this.element_.querySelector(`.${PANEL}:first-child > .${TAB}`);\n          if(nextTab && nextTab.hasAttribute('disabled')) {\n            nextTab = null;\n            keyCode = VK_ARROW_DOWN;\n          }\n        }\n        else if (keyCode === VK_END) {\n          nextTab = this.element_.querySelector(`.${PANEL}:last-child > .${TAB}`);\n          if(nextTab && nextTab.hasAttribute('disabled')) {\n            nextTab = null;\n            keyCode = VK_ARROW_UP;\n          }\n        }\n\n        if(!nextTab) {\n          let nextPanel = panel;\n\n          do {\n            if (keyCode === VK_ARROW_UP || keyCode === VK_ARROW_LEFT) {\n              nextPanel = nextPanel.previousElementSibling;\n              if(!nextPanel) {\n                nextPanel = this.element_.querySelector(`.${PANEL}:last-child`);\n              }\n              if (nextPanel) {\n                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);\n              }\n            }\n            else if (keyCode === VK_ARROW_DOWN || keyCode === VK_ARROW_RIGHT) {\n              nextPanel = nextPanel.nextElementSibling;\n              if(!nextPanel) {\n                nextPanel = this.element_.querySelector(`.${PANEL}:first-child`);\n              }\n              if (nextPanel) {\n                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);\n              }\n            }\n\n            if(nextTab && nextTab.hasAttribute('disabled')) {\n              nextTab = null;\n            }\n            else {\n              break;\n            }\n          }\n          while(nextPanel !== panel);\n        }\n\n        if (nextTab) {\n          e.preventDefault();\n          e.stopPropagation();\n          nextTab.focus();\n\n          // Workaround for JSDom testing:\n          // In JsDom 'element.focus()' does not trigger any focus event\n          if(!nextTab.hasAttribute(ARIA_SELECTED)) {\n\n            [...this.element_.querySelectorAll(`.${TAB}[aria-selected=\"true\"]`)]\n              .forEach( selectedTab => selectedTab.removeAttribute(ARIA_SELECTED) );\n\n            nextTab.setAttribute(ARIA_SELECTED, 'true');\n          }\n        }\n      }\n      else if (e.keyCode === VK_ENTER || e.keyCode === VK_SPACE) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.toggleTab_(panel, tab, tabpanel);\n      }\n    };\n\n    if(tab === null) {\n      throw new Error('There must be a tab element for each accordion panel.');\n    }\n\n    if(tabpanel === null) {\n      throw new Error('There must be a tabpanel element for each accordion panel.');\n    }\n\n    panel.setAttribute('role', PANEL_ROLE);\n    tab.setAttribute('role', TAB_ROLE);\n    tabpanel.setAttribute('role', TABPANEL_ROLE);\n\n    if(tab.hasAttribute('disabled')) {\n      disableTab();\n    }\n    else {\n      enableTab();\n    }\n\n    if( this.element_.classList.contains(ACCORDION_HORIZONTAL)) {\n      calcMaxTabCaptionWidth();\n    }\n\n    if (this.element_.classList.contains(RIPPLE_EFFECT)) {\n      tab.classList.add(RIPPLE);\n    }\n\n    if (this.element_.classList.contains(ANIMATION_EFFECT)) {\n      tabpanel.classList.add(ANIMATION);\n    }\n\n    // Remove listeners, just in case ...\n    tab.removeEventListener('click', tabClickHandler);\n    tab.removeEventListener('focus', tabFocusHandler);\n    tab.removeEventListener('keydown', tabKeydownHandler);\n    tabpanel.removeEventListener('click', tabpanelClickHandler);\n    tabpanel.removeEventListener('focus', tabpanelFocusHandler);\n\n    tab.addEventListener('click', tabClickHandler);\n    tab.addEventListener('focus', tabFocusHandler);\n    tab.addEventListener('keydown', tabKeydownHandler);\n    tabpanel.addEventListener('click', tabpanelClickHandler, true);\n    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);\n  };\n  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;\n\n\n  /**\n   * Execute command\n   * @param detail\n   */\n  MaterialExtAccordion.prototype.command = function( detail ) {\n\n    const openTab = tabElement => {\n\n      if(tabElement === undefined) {\n        this.openTabs_();\n      }\n      else if(tabElement !== null) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() !== 'true') {\n          this.toggleTab_(panel, tab, tabpanel);\n        }\n      }\n    };\n\n    const closeTab = tabElement => {\n      if(tabElement === undefined) {\n        this.closeTabs_();\n      }\n      else if(tabElement !== null) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n\n        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n          this.toggleTab_(panel, tab, tabpanel);\n        }\n      }\n    };\n\n    const toggleTab = tabElement => {\n      if(tabElement) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n        this.toggleTab_(panel, tab, tabpanel);\n      }\n    };\n\n\n    if(detail && detail.action) {\n      const { action, target } = detail;\n\n      switch (action.toLowerCase()) {\n        case 'open':\n          openTab(target);\n          break;\n        case 'close':\n          closeTab(target);\n          break;\n        case 'toggle':\n          toggleTab(target);\n          break;\n        case 'upgrade':\n          if(target) {\n            this.upgradeTab(target);\n          }\n          break;\n        default:\n          throw new Error(`Unknown action \"${action}\". Action must be one of \"open\", \"close\", \"toggle\" or \"upgrade\"`);\n      }\n    }\n  };\n  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtAccordion.prototype.init = function() {\n    if (this.element_) {\n      // Do the init required for this component to work\n      if( !(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {\n        throw new Error(`Accordion must have one of the classes \"${ACCORDION_HORIZONTAL}\" or \"${ACCORDION_VERTICAL}\"`);\n      }\n\n      this.element_.setAttribute('role', 'tablist');\n\n      if(!this.element_.hasAttribute(ARIA_MULTISELECTABLE)) {\n        this.element_.setAttribute(ARIA_MULTISELECTABLE, 'false');\n      }\n\n      this.element_.removeEventListener('command', this.commandHandler_);\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\n      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)].forEach( panel => this.upgradeTab(panel) );\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {\n     'use strict';\n     console.log('***** MaterialExtAccordion.mdlDowngrade');\n   };\n   */\n\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtAccordion,\n    classAsString: 'MaterialExtAccordion',\n    cssClass: 'mdlext-js-accordion',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/accordion/accordion.js\n\n\n// WEBPACK FOOTER //\n// ./src/accordion/accordion.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * Image carousel\n */\n\nimport intervalFunction from '../utils/interval-function';\nimport { inOutQuintic } from '../utils/easing';\nimport { jsonStringToObject} from '../utils/json-utils';\nimport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_PAGE_UP,\n  VK_PAGE_DOWN,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n  IS_FOCUSED,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n} from '../utils/constants';\n\nconst MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';\n\n\n(function() {\n  'use strict';\n\n  //const CAROUSEL = 'mdlext-carousel';\n  const SLIDE      = 'mdlext-carousel__slide';\n  const ROLE       = 'list';\n  const SLIDE_ROLE = 'listitem';\n\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtCarousel = function MaterialExtCarousel(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Default config\n    this.config_ = {\n      interactive  : true,\n      autostart    : false,\n      type         : 'slide',\n      interval     : 1000,\n      animationLoop: intervalFunction(1000)\n    };\n\n    this.scrollAnimation_ = intervalFunction(33);\n\n    // Initialize instance.\n    this.init();\n  };\n\n  window['MaterialExtCarousel'] = MaterialExtCarousel;\n\n\n  /**\n   * Start slideshow animation\n   * @private\n   */\n  MaterialExtCarousel.prototype.startSlideShow_ = function() {\n\n    const nextSlide = () => {\n      let slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);\n      if(slide) {\n        slide.removeAttribute('aria-selected');\n        slide = slide.nextElementSibling;\n      }\n      if(!slide) {\n        slide = this.element_.querySelector(`.${SLIDE}:first-child`);\n        this.animateScroll_(0);\n      }\n      if(slide) {\n        this.moveSlideIntoViewport_(slide);\n        slide.setAttribute('aria-selected', '');\n        this.emitSelectEvent_('next', null, slide);\n        return true;\n      }\n      return false;\n    };\n\n    const nextScroll = direction => {\n      let nextDirection = direction;\n\n      if('next' === direction &&  this.element_.scrollLeft === this.element_.scrollWidth - this.element_.clientWidth) {\n        nextDirection = 'prev';\n      }\n      else if(this.element_.scrollLeft === 0) {\n        nextDirection = 'next';\n      }\n      const x = 'next' === nextDirection\n        ?  Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth)\n        :  Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n\n      this.animateScroll_(x, 1000);\n      return nextDirection;\n    };\n\n\n    if(!this.config_.animationLoop.started) {\n      this.config_.animationLoop.interval = this.config_.interval;\n      let direction = 'next';\n\n      if('scroll' === this.config_.type) {\n        this.config_.animationLoop.start( () => {\n          direction = nextScroll(direction);\n          return true; // It runs until cancelSlideShow_ is triggered\n        });\n      }\n      else {\n        nextSlide();\n        this.config_.animationLoop.start( () => {\n          return nextSlide(); // It runs until cancelSlideShow_ is triggered\n        });\n      }\n    }\n\n    // TODO: Pause animation when carousel is not in browser viewport or user changes tab\n  };\n\n  /**\n   * Cancel slideshow if running. Emmits a 'pause' event\n   * @private\n   */\n  MaterialExtCarousel.prototype.cancelSlideShow_ = function() {\n    if(this.config_.animationLoop.started) {\n      this.config_.animationLoop.stop();\n      this.emitSelectEvent_('pause', VK_ESC, this.element_.querySelector(`.${SLIDE}[aria-selected]`));\n    }\n  };\n\n  /**\n   * Animate scroll\n   * @param newPosition\n   * @param newDuration\n   * @param completedCallback\n   * @private\n   */\n  MaterialExtCarousel.prototype.animateScroll_ = function( newPosition, newDuration, completedCallback ) {\n\n    const start = this.element_.scrollLeft;\n    const distance = newPosition - start;\n\n    if(distance !== 0) {\n      const duration = Math.max(Math.min(Math.abs(distance), newDuration||400), 100); // duration is between 100 and newDuration||400ms||distance\n      let t = 0;\n      this.scrollAnimation_.stop();\n      this.scrollAnimation_.start( timeElapsed => {\n        t += timeElapsed;\n        if(t < duration) {\n          this.element_.scrollLeft = inOutQuintic(t, start, distance, duration);\n          return true;\n        }\n        else {\n          this.element_.scrollLeft = newPosition;\n          if(completedCallback) {\n            completedCallback();\n          }\n          return false;\n        }\n      });\n    }\n    else {\n      if(completedCallback) {\n        completedCallback();\n      }\n    }\n  };\n\n  /**\n   * Execute commend\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.command_ = function( event ) {\n    let x = 0;\n    let slide = null;\n    const a = event.detail.action.toLowerCase();\n\n    // Cancel slideshow if running\n    this.cancelSlideShow_();\n\n    switch (a) {\n      case 'first':\n        slide = this.element_.querySelector(`.${SLIDE}:first-child`);\n        break;\n\n      case 'last':\n        x = this.element_.scrollWidth - this.element_.clientWidth;\n        slide = this.element_.querySelector(`.${SLIDE}:last-child`);\n        break;\n\n      case 'scroll-prev':\n        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n        break;\n\n      case 'scroll-next':\n        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);\n        break;\n\n      case 'next':\n      case 'prev':\n        slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);\n        if(slide) {\n          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;\n          this.setAriaSelected_(slide);\n          this.emitSelectEvent_(a, null,  slide);\n        }\n        return;\n\n      case 'play':\n        Object.assign(this.config_, event.detail);\n        this.startSlideShow_();\n        return;\n\n      case 'pause':\n        return;\n\n      default:\n        return;\n    }\n\n    this.animateScroll_(x, undefined, () => {\n      if ('scroll-next' === a || 'scroll-prev' === a) {\n        const slides = this.getSlidesInViewport_();\n        if (slides.length > 0) {\n          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];\n        }\n      }\n      this.setAriaSelected_(slide);\n      this.emitSelectEvent_(a, null, slide);\n    });\n  };\n\n  /**\n   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtCarousel.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n    if(event.detail && event.detail.action) {\n      this.command_(event);\n    }\n  };\n\n  /**\n   * Handle keypress\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.keyDownHandler_ = function(event) {\n\n    if (event && event.target && event.target !== this.element_) {\n\n      let action = 'first';\n\n      if ( event.keyCode === VK_HOME    || event.keyCode === VK_END\n        || event.keyCode === VK_PAGE_UP || event.keyCode === VK_PAGE_DOWN) {\n\n        event.preventDefault();\n        if (event.keyCode === VK_END) {\n          action = 'last';\n        }\n        else if (event.keyCode === VK_PAGE_UP) {\n          action = 'scroll-prev';\n        }\n        else if (event.keyCode === VK_PAGE_DOWN) {\n          action = 'scroll-next';\n        }\n\n        const cmd = new CustomEvent('select', {\n          detail: {\n            action: action,\n          }\n        });\n        this.command_(cmd);\n      }\n      else if ( event.keyCode === VK_TAB\n        || event.keyCode === VK_ENTER      || event.keyCode === VK_SPACE\n        || event.keyCode === VK_ARROW_UP   || event.keyCode === VK_ARROW_LEFT\n        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n\n        let slide = getSlide_(event.target);\n\n        if(!slide) {\n          return;\n        }\n\n        // Cancel slideshow if running\n        this.cancelSlideShow_();\n\n        switch (event.keyCode) {\n          case VK_ARROW_UP:\n          case VK_ARROW_LEFT:\n            action = 'prev';\n            slide = slide.previousElementSibling;\n            break;\n\n          case VK_ARROW_DOWN:\n          case VK_ARROW_RIGHT:\n            action = 'next';\n            slide = slide.nextElementSibling;\n            break;\n\n          case VK_TAB:\n            if (event.shiftKey) {\n              action = 'prev';\n              slide = slide.previousElementSibling;\n            }\n            else {\n              action = 'next';\n              slide = slide.nextElementSibling;\n            }\n            break;\n\n          case VK_SPACE:\n          case VK_ENTER:\n            action = 'select';\n            break;\n        }\n\n        if(slide) {\n          event.preventDefault();\n          setFocus_(slide);\n          this.emitSelectEvent_(action, event.keyCode, slide);\n        }\n      }\n    }\n  };\n\n  /**\n   * Handle dragging\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.dragHandler_ = function(event) {\n    event.preventDefault();\n\n    // Cancel slideshow if running\n    this.cancelSlideShow_();\n\n    let updating = false;\n    let rAFDragId = 0;\n\n    const startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n    let prevX = startX;\n    const targetElement = event.target;\n\n    const update = e => {\n      const currentX = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0));\n      const dx = prevX - currentX;\n\n      if(dx < 0) {\n        this.element_.scrollLeft = Math.max(this.element_.scrollLeft + dx, 0);\n      }\n      else if(dx > 0) {\n        this.element_.scrollLeft = Math.min(this.element_.scrollLeft + dx, this.element_.scrollWidth - this.element_.clientWidth);\n      }\n\n      prevX = currentX;\n      updating = false;\n    };\n\n    // drag handler\n    const drag = e => {\n      e.preventDefault();\n\n      if(!updating) {\n        rAFDragId = window.requestAnimationFrame( () => update(e));\n        updating = true;\n      }\n    };\n\n    // end drag handler\n    const endDrag = e => {\n      e.preventDefault();\n\n      this.element_.removeEventListener('mousemove', drag);\n      this.element_.removeEventListener('touchmove', drag);\n      window.removeEventListener('mouseup', endDrag);\n      window.removeEventListener('touchend', endDrag);\n\n      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/\n      window.cancelAnimationFrame(rAFDragId);\n\n      const slide = getSlide_(targetElement);\n      setFocus_(slide);\n      this.emitSelectEvent_('click', null,  slide);\n    };\n\n    this.element_.addEventListener('mousemove', drag);\n    this.element_.addEventListener('touchmove', drag);\n    window.addEventListener('mouseup', endDrag);\n    window.addEventListener('touchend',endDrag);\n  };\n\n  /**\n   * Handle click\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.clickHandler_ = function(event) {\n    // Click is handled by drag\n    event.preventDefault();\n  };\n\n  /**\n   * Handle focus\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.focusHandler_ = function(event) {\n    const slide = getSlide_(event.target);\n    if(slide) {\n      // The last focused/selected slide has 'aria-selected', even if focus is lost\n      this.setAriaSelected_(slide);\n      slide.classList.add(IS_FOCUSED);\n    }\n  };\n\n  /**\n   * Handle blur\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.blurHandler_ = function(event) {\n    const slide = getSlide_(event.target);\n    if(slide) {\n      slide.classList.remove(IS_FOCUSED);\n    }\n  };\n\n  /**\n   * Emits a custeom 'select' event\n   * @param command\n   * @param keyCode\n   * @param slide\n   * @private\n   */\n  MaterialExtCarousel.prototype.emitSelectEvent_ = function(command, keyCode, slide) {\n\n    if(slide) {\n      this.moveSlideIntoViewport_(slide);\n\n      const evt = new CustomEvent('select', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          command: command,\n          keyCode: keyCode,\n          source: slide\n        }\n      });\n      this.element_.dispatchEvent(evt);\n    }\n  };\n\n  /**\n   * Get the first visible slide in component viewport\n   * @private\n   */\n  MaterialExtCarousel.prototype.getSlidesInViewport_ = function() {\n    const carouselRect = this.element_.getBoundingClientRect();\n\n    const slidesInViewport = [...this.element_.querySelectorAll(`.${SLIDE}`)].filter( slide => {\n      const slideRect = slide.getBoundingClientRect();\n      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;\n    });\n    return slidesInViewport;\n  };\n\n  /**\n   * Move slide into component viewport - if needed\n   * @param slide\n   * @private\n   */\n  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function(slide) {\n    const carouselRect = this.element_.getBoundingClientRect();\n    const slideRect = slide.getBoundingClientRect();\n\n    if(slideRect.left < carouselRect.left) {\n      const x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);\n      this.animateScroll_(x);\n    }\n    else if(slideRect.right > carouselRect.right) {\n      const x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);\n      this.animateScroll_(x);\n    }\n  };\n\n\n  /**\n   * Removes 'aria-selected' from all slides in carousel\n   * @private\n   */\n  MaterialExtCarousel.prototype.setAriaSelected_ = function(slide) {\n    if(slide) {\n      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected]`)].forEach(\n        slide => slide.removeAttribute('aria-selected')\n      );\n      slide.setAttribute('aria-selected', '');\n    }\n  };\n\n  /**\n   * Removes event listeners\n   * @private\n   */\n  MaterialExtCarousel.prototype.removeListeners_ = function() {\n    this.element_.removeEventListener('focus', this.focusHandler_);\n    this.element_.removeEventListener('blur', this.blurHandler_);\n    this.element_.removeEventListener('keydown', this.keyDownHandler_);\n    this.element_.removeEventListener('mousedown', this.dragHandler_);\n    this.element_.removeEventListener('touchstart', this.dragHandler_);\n    this.element_.removeEventListener('click', this.clickHandler_, false);\n    this.element_.removeEventListener('command', this.commandHandler_);\n    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);\n  };\n\n\n  // Helpers\n  const getSlide_ = element => {\n    return element.closest(`.${SLIDE}`);\n  };\n\n  const setFocus_ = slide => {\n    if(slide) {\n      slide.focus();\n    }\n  };\n\n  const addRipple_ = slide => {\n    if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {\n      const rippleContainer = document.createElement('span');\n      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n      rippleContainer.classList.add(MDL_RIPPLE_EFFECT);\n      const ripple = document.createElement('span');\n      ripple.classList.add(MDL_RIPPLE);\n      rippleContainer.appendChild(ripple);\n\n      const img = slide.querySelector('img');\n      if (img) {\n        // rippleContainer blocks image title\n        rippleContainer.title = img.title;\n      }\n      slide.appendChild(rippleContainer);\n      componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);\n    }\n  };\n  // End helpers\n\n\n  // Public methods.\n\n  /**\n   * Cancel animation - if running.\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.stopAnimation = function() {\n    this.config_.animationLoop.stop();\n  };\n  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;\n\n\n  /**\n   * Upgrade slides\n   * Use if more list elements are added later (dynamically)\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.upgradeSlides = function() {\n\n    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n\n    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {\n\n      slide.setAttribute('role', SLIDE_ROLE);\n\n      if(this.config_.interactive) {\n        if(!slide.getAttribute('tabindex')) {\n          slide.setAttribute('tabindex', '0');\n        }\n        if (hasRippleEffect) {\n          addRipple_(slide);\n        }\n      }\n      else {\n        slide.setAttribute('tabindex', '-1');\n      }\n    });\n  };\n  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;\n\n\n  /**\n   * Get config object\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.getConfig = function() {\n    return this.config_;\n  };\n  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtCarousel.prototype.init = function() {\n\n    if (this.element_) {\n      // Config\n      if(this.element_.hasAttribute('data-config')) {\n        this.config_ = jsonStringToObject(this.element_.getAttribute('data-config'), this.config_);\n      }\n\n      // Wai-Aria\n      this.element_.setAttribute('role', ROLE);\n\n      // Prefer tabindex -1\n      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {\n        this.element_.setAttribute('tabindex', -1);\n      }\n\n      // Remove listeners, just in case ...\n      this.removeListeners_();\n\n      if(this.config_.interactive) {\n\n        // Ripple\n        const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n        if (hasRippleEffect) {\n          this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n        }\n\n        // Listen to focus/blur events\n        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);\n        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);\n\n        // Listen to keyboard events\n        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);\n\n        // Listen to drag events\n        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);\n        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);\n\n        // Listen to click events\n        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);\n      }\n\n      // Listen to custom 'command' event\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\n      // Slides collection\n      this.upgradeSlides();\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n\n      if(this.config_.autostart) {\n        // Start slideshow\n        this.startSlideShow_();\n      }\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtCarousel.prototype.mdlDowngrade_ = function() {\n    'use strict';\n    //console.log('***** MaterialExtCarousel.mdlDowngrade_');\n\n    // Stop animation - if any\n    this.stopAnimation();\n\n    // Remove listeners\n    this.removeListeners_();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtCarousel,\n    classAsString: 'MaterialExtCarousel',\n    cssClass: 'mdlext-js-carousel',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/carousel/carousel.js\n\n\n// WEBPACK FOOTER //\n// ./src/carousel/carousel.js","/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * A collapsible is a component to mark expandable and collapsible regions.\n * The component use the aria-expanded state to indicate whether regions of\n * the content are collapsible, and to expose whether a region is currently\n * expanded or collapsed.\n * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions\n */\n\nimport {\n  IS_UPGRADED,\n  VK_SPACE,\n  VK_ENTER,\n} from '../utils/constants';\n\nimport { randomString } from '../utils/string-utils';\nimport { getParentElements, isFocusable } from '../utils/dom-utils';\n\nconst JS_COLLAPSIBLE = 'mdlext-js-collapsible';\nconst COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';\nconst COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';\nconst COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';\n\n/**\n * The collapsible component\n */\n\nclass Collapsible {\n  element_ = null;\n  controlElement_ = null;\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that this component is connected to.\n   */\n  constructor(element) {\n    this.element_ = element;\n    this.init();\n  }\n\n  keyDownHandler = event => {\n    if (event.keyCode === VK_ENTER || event.keyCode === VK_SPACE) {\n      event.preventDefault();\n\n      // Trigger click\n      (event.target || this.controlElement).dispatchEvent(\n        new MouseEvent('click', {\n          bubbles: true,\n          cancelable: true,\n          view: window\n        })\n      );\n    }\n  };\n\n  clickHandler = event => {\n    if(!this.isDisabled) {\n      if(event.target !== this.controlElement) {\n        // Do not toggle if a focusable element inside the control element triggered the event\n        const p = getParentElements(event.target, this.controlElement);\n        p.push(event.target);\n        if(p.find( el => isFocusable(el))) {\n          return;\n        }\n      }\n      this.toggle();\n    }\n  };\n\n  get element() {\n    return this.element_;\n  }\n\n  get controlElement() {\n    return this.controlElement_;\n  }\n\n  get isDisabled() {\n    return (this.controlElement.hasAttribute('disabled') &&\n      this.controlElement.getAttribute('disabled').toLowerCase() !== 'false') ||\n      (this.controlElement.hasAttribute('aria-disabled') &&\n      this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false');\n  }\n\n  get isExpanded() {\n    return this.controlElement.hasAttribute('aria-expanded') &&\n      this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';\n  }\n\n  get regionIds() {\n    return this.controlElement.hasAttribute('aria-controls')\n      ? this.controlElement.getAttribute('aria-controls').split(' ')\n      : [];\n  }\n\n  get regionElements() {\n    return this.regionIds\n      .map(id => document.querySelector(`#${id}`))\n      .filter( el => el != null);\n  }\n\n  collapse() {\n    if(!this.isDisabled && this.isExpanded) {\n      if(this.dispatchToggleEvent('collapse')) {\n        this.controlElement.setAttribute('aria-expanded', 'false');\n        const regions = this.regionElements.slice(0);\n        for (let i = regions.length - 1; i >= 0; --i) {\n          regions[i].setAttribute('hidden', '');\n        }\n      }\n    }\n  }\n\n  expand() {\n    if(!this.isDisabled && !this.isExpanded) {\n      if(this.dispatchToggleEvent('expand')) {\n        this.controlElement.setAttribute('aria-expanded', 'true');\n        this.regionElements.forEach(region => region.removeAttribute('hidden'));\n      }\n    }\n  }\n\n  toggle() {\n    if (this.isExpanded) {\n      this.collapse();\n    }\n    else {\n      this.expand();\n    }\n  }\n\n  dispatchToggleEvent(action) {\n    return this.element.dispatchEvent(\n      new CustomEvent('toggle', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          action: action\n        }\n      })\n    );\n  }\n\n  disableToggle() {\n    this.controlElement.setAttribute('aria-disabled', true);\n  }\n\n  enableToggle() {\n    this.controlElement.removeAttribute('aria-disabled');\n  }\n\n  addRegionId(regionId) {\n    const ids = this.regionIds;\n    if(!ids.find(id => regionId === id)) {\n      ids.push(regionId);\n      this.controlElement.setAttribute('aria-controls', ids.join(' '));\n    }\n  }\n\n  addRegionElement(region) {\n    if(!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||\n      region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {\n      region.classList.add(COLLAPSIBLE_GROUP_CLASS);\n    }\n\n    if(!region.hasAttribute('role')) {\n      const role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';\n      region.setAttribute('role', role);\n    }\n\n    if(!region.hasAttribute('id')) {\n      region.id = `${region.getAttribute('role')}-${randomString()}`;\n    }\n\n    if(this.isExpanded) {\n      region.removeAttribute('hidden');\n    }\n    else {\n      region.setAttribute('hidden', '');\n    }\n    this.addRegionId(region.id);\n  }\n\n  removeRegionElement(region) {\n    if(region && region.id) {\n      const ids = this.regionIds.filter(id => id === region.id);\n      this.controlElement.setAttribute('aria-controls', ids.join(' '));\n    }\n  }\n\n  removeListeners() {\n    this.controlElement.removeEventListener('keydown', this.keyDownHandler);\n    this.controlElement.removeEventListener('click', this.clickHandler);\n  }\n\n  init() {\n    const initControl = () => {\n      // Find the button element\n      this.controlElement_ = this.element.querySelector(`.${COLLAPSIBLE_CONTROL_CLASS}`) || this.element;\n\n      // Add \"aria-expanded\" attribute if not present\n      if(!this.controlElement.hasAttribute('aria-expanded')) {\n        this.controlElement.setAttribute('aria-expanded', 'false');\n      }\n\n      // Add role=button if control != <button>\n      if(this.controlElement.nodeName.toLowerCase() !== 'button') {\n        this.controlElement.setAttribute('role', 'button');\n      }\n\n      // Add tabindex\n      if(!isFocusable(this.controlElement) && !this.controlElement.hasAttribute('tabindex')) {\n        this.controlElement.setAttribute('tabindex', '0');\n      }\n    };\n\n    const initRegions = () => {\n      let regions = [];\n      if(!this.controlElement.hasAttribute('aria-controls')) {\n        // Add siblings as collapsible region(s)\n        let r = this.element.nextElementSibling;\n        while(r) {\n          if(r.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||\n            r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {\n            regions.push(r);\n          }\n          else if(r.classList.contains(JS_COLLAPSIBLE)) {\n            // A new collapsible component\n            break;\n          }\n          r = r.nextElementSibling;\n        }\n      }\n      else {\n        regions = this.regionElements;\n      }\n      regions.forEach(region => this.addRegionElement(region));\n    };\n\n    const addListeners = () => {\n      this.controlElement.addEventListener('keydown', this.keyDownHandler);\n      this.controlElement.addEventListener('click', this.clickHandler);\n    };\n\n    initControl();\n    initRegions();\n    this.removeListeners();\n    addListeners();\n  }\n\n  downgrade() {\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtCollapsible = function MaterialExtCollapsible(element) {\n    this.element_ = element;\n    this.collapsible = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtCollapsible'] = MaterialExtCollapsible;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtCollapsible.prototype.init = function() {\n    if (this.element_) {\n      this.collapsible = new Collapsible(this.element_);\n      this.element_.classList.add(IS_UPGRADED);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtCollapsible.prototype.mdlDowngrade_ = function() {\n    this.collapsible.downgrade();\n  };\n\n\n  // Public methods.\n\n  /**\n   * Get control element.\n   * @return {HTMLElement} element The element that controls the collapsible region.\n   * @public\n   */\n  MaterialExtCollapsible.prototype.getControlElement = function() {\n    return this.collapsible.controlElement;\n  };\n  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;\n\n  /**\n   * Get region elements controlled by this collapsible\n   * @returns {Array<HTMLElement>} the collapsible region elements\n   * @public\n   */\n  MaterialExtCollapsible.prototype.getRegionElements = function() {\n    return this.collapsible.regionElements;\n  };\n  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;\n\n  /**\n   * Add region elements.\n   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.addRegionElements = function(...elements) {\n    elements.forEach(element => this.collapsible.addRegionElement(element));\n  };\n  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;\n\n  /**\n   * Remove collapsible region(s) from component.\n   * Note: This operation does not delete the element from the DOM tree.\n   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n   * @public\n   */\n  MaterialExtCollapsible.prototype.removeRegionElements = function(...elements) {\n    elements.forEach(element => this.collapsible.removeRegionElement(element));\n  };\n  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;\n\n  /**\n   * Expand collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.expand = function() {\n    this.collapsible.expand();\n  };\n  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;\n\n  /**\n   * Collapse collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.collapse = function() {\n    this.collapsible.collapse();\n  };\n  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;\n\n  /**\n   * Toggle collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.toggle = function() {\n    this.collapsible.toggle();\n  };\n  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;\n\n  /**\n   * Check whether component has aria-expanded state true\n   * @return {Boolean} true if aria-expanded=\"true\", otherwise false\n   */\n  MaterialExtCollapsible.prototype.isExpanded = function() {\n    return this.collapsible.isExpanded;\n  };\n  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;\n\n  /**\n   * Check whether component has aria-disabled state set to true\n   * @return {Boolean} true if aria-disabled=\"true\", otherwise false\n   */\n  MaterialExtCollapsible.prototype.isDisabled = function() {\n    return this.collapsible.isDisabled;\n  };\n  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;\n\n  /**\n   * Disables toggling of collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.disableToggle = function() {\n    this.collapsible.disableToggle();\n  };\n  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;\n\n  /**\n   * Enables toggling of collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.enableToggle = function() {\n    this.collapsible.enableToggle();\n  };\n  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtCollapsible,\n    classAsString: 'MaterialExtCollapsible',\n    cssClass: JS_COLLAPSIBLE,\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/collapsible/collapsible.js\n\n\n// WEBPACK FOOTER //\n// ./src/collapsible/collapsible.js","/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\nimport {jsonStringToObject} from '../utils/json-utils';\nimport {\n  IS_UPGRADED,\n} from '../utils/constants';\n\nconst JS_FORMAT_FIELD = 'mdlext-js-formatfield';\nconst FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';\n\n/**\n * Detect browser locale\n * @returns {string} the locale\n * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference\n */\nconst browserLanguage = () => {\n  return navigator.languages\n    ? navigator.languages[0]\n    : navigator.language || navigator.userLanguage;\n};\n\n/**\n * The formatfield  formats an input field  using language sensitive number formatting.\n */\n\nclass FormatField {\n  static timer = null;\n\n  element_;\n  input_;\n  options_ = {};\n  intlGroupSeparator_;\n  intlDecimalSeparator_;\n\n  constructor(element) {\n    this.element_ = element;\n    this.init();\n  }\n\n  clickHandler = () => {\n    clearTimeout(FormatField.timer);\n  };\n\n  focusInHandler = () => {\n    if(!(this.input.readOnly || this.input.disabled)) {\n      this.input.value = this.unformatInput();\n      //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);\n      FormatField.timer = setTimeout(() => this.input.select(), 200);\n    }\n  };\n\n  focusOutHandler = () => {\n    clearTimeout(FormatField.timer);\n\n    if(!(this.input.readOnly || this.input.disabled)) {\n      this.formatValue();\n    }\n  };\n\n  get element() {\n    return this.element_;\n  }\n\n  get input() {\n    return this.input_;\n  }\n\n  get options() {\n    return this.options_;\n  }\n\n  stripSeparatorsFromValue() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '')\n      .replace(this.options.decimalSeparator, '.');\n      //.replace(this.intlGroupSeparator_, ''),\n      //.replace(this.intlDecimalSeparator_, '.');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  fixSeparators(value) {\n    const doReplace = () => value\n      .replace(new RegExp(this.intlGroupSeparator_, 'g'), this.options.groupSeparator)\n      .replace(this.intlDecimalSeparator_, this.options.decimalSeparator);\n\n    return value ? doReplace() : value;\n  }\n\n  formatValue() {\n    if(this.input.value) {\n      const v = new Intl.NumberFormat(this.options.locales, this.options)\n        .format(this.stripSeparatorsFromValue());\n\n      if('NaN' !== v) {\n        this.input.value = this.fixSeparators(v);\n      }\n    }\n  }\n\n  unformat() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '')\n      .replace(this.options.decimalSeparator, '.');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  unformatInput() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  removeListeners() {\n    this.input.removeEventListener('click', this.clickHandler);\n    this.input.removeEventListener('focusin', this.focusInHandler);\n    this.input.removeEventListener('focusout', this.focusOutHandler);\n  }\n\n  init() {\n    const addListeners = () => {\n      this.input.addEventListener('click', this.clickHandler);\n      this.input.addEventListener('focusin', this.focusInHandler);\n      this.input.addEventListener('focusout', this.focusOutHandler);\n    };\n\n    const addOptions = () => {\n      const opts = this.element.getAttribute('data-formatfield-options') ||\n        this.input.getAttribute('data-formatfield-options');\n      if(opts) {\n        this.options_ = jsonStringToObject(opts, this.options);\n      }\n    };\n\n    const addLocale = () => {\n      if(!this.options.locales) {\n        this.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',\n      }\n    };\n\n    const addGrouping = () => {\n      const s = (1234.5).toLocaleString(this.options.locales, {\n        style: 'decimal',\n        useGrouping: true,\n        minimumFractionDigits: 1,\n        maximumFractionDigits: 1\n      });\n\n      this.intlGroupSeparator_ = s.charAt(1);\n      this.intlDecimalSeparator_ = s.charAt(s.length-2);\n      this.options.groupSeparator = this.options.groupSeparator || this.intlGroupSeparator_;\n      this.options.decimalSeparator = this.options.decimalSeparator || this.intlDecimalSeparator_;\n\n      if(this.options.groupSeparator === this.options.decimalSeparator) {\n        const e = `Error! options.groupSeparator, \"${this.options.groupSeparator}\" ` +\n          'and options.decimalSeparator, ' +\n          `\"${this.options.decimalSeparator}\" should not be equal`;\n        throw new Error(e);\n      }\n    };\n\n    this.input_ = this.element.querySelector('input') || this.element;\n\n    addOptions();\n    addLocale();\n    addGrouping();\n    this.formatValue();\n    addListeners();\n  }\n\n  downgrade() {\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtFormatfield = function MaterialExtFormatfield(element) {\n    this.element_ = element;\n    this.formatField_ = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtFormatfield'] = MaterialExtFormatfield;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtFormatfield.prototype.init = function() {\n    if (this.element_) {\n      this.element_.classList.add(IS_UPGRADED);\n      this.formatField_ = new FormatField(this.element_);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n    }\n  };\n\n  /**\n   * Get options object\n   *\n   * @public\n   *\n   * @returns {Object} the options object\n   */\n  MaterialExtFormatfield.prototype.getOptions = function() {\n    return this.formatField_.options;\n  };\n  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;\n\n\n  /**\n   * A unformatted value is a string value where the locale specific decimal separator\n   * is replaced with a '.' separator and group separators are stripped.\n   * The returned value is suitable for parsing to a JavaScript numerical value.\n   *\n   * @example\n   * input.value = '1 234,5';\n   * inputElement.MaterialExtFormatfield.getUnformattedValue();\n   * // Returns '1234.5'\n   *\n   * @public\n   *\n   * @returns {String} the unformatted value\n   */\n  MaterialExtFormatfield.prototype.getUnformattedValue = function() {\n    return this.formatField_.unformat();\n  };\n  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtFormatfield.prototype.mdlDowngrade_ = function() {\n    this.formatField_.downgrade();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtFormatfield,\n    classAsString: FORMAT_FIELD_COMPONENT,\n    cssClass: JS_FORMAT_FIELD,\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/formatfield/formatfield.js\n\n\n// WEBPACK FOOTER //\n// ./src/formatfield/formatfield.js","import './utils';\nimport './accordion/accordion';\nimport './collapsible/collapsible';\nimport './carousel/carousel';\nimport './lightboard/lightboard';\nimport './lightbox/lightbox';\nimport './menu-button/menu-button';\nimport './selectfield/selectfield';\nimport './formatfield/formatfield';\nimport './sticky-header/sticky-header';\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A lightboard is a translucent surface illuminated from behind, used for situations\n * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n */\n\nimport {\n  VK_ENTER,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n} from '../utils/constants';\n\nconst MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container';\n\n(function() {\n  'use strict';\n\n  //const LIGHTBOARD = 'mdlext-lightboard';\n  const LIGHTBOARD_ROLE = 'grid';\n  const SLIDE = 'mdlext-lightboard__slide';\n  const SLIDE_ROLE  = 'gridcell';\n  const SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtLightboard = function MaterialExtLightboard(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtLightboard'] = MaterialExtLightboard;\n\n\n  // Helpers\n  const getSlide = element => {\n    return element ? element.closest(`.${SLIDE}`) : null;\n  };\n\n\n\n  // Private methods.\n\n  /**\n   * Select a slide, i.e. set aria-selected=\"true\"\n   * @param element\n   * @private\n   */\n  MaterialExtLightboard.prototype.selectSlide_ = function(element) {\n    const slide = getSlide(element);\n    if( slide && !slide.hasAttribute('aria-selected') ) {\n      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected=\"true\"]`)]\n        .forEach(selectedSlide => selectedSlide.removeAttribute('aria-selected'));\n\n      slide.setAttribute('aria-selected', 'true');\n    }\n  };\n\n\n  /**\n   * Dispatch select event\n   * @param {Element} slide The slide that caused the event\n   * @private\n   */\n  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function ( slide ) {\n    this.element_.dispatchEvent(\n      new CustomEvent('select', {\n        bubbles: true,\n        cancelable: true,\n        detail: { source: slide }\n      })\n    );\n  };\n\n  /**\n   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtLightboard.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if(event && event.detail) {\n      this.command(event.detail);\n    }\n  };\n\n\n  // Public methods\n\n  /**\n   * Initialize lightboard slides\n   * @public\n   */\n  MaterialExtLightboard.prototype.upgradeSlides = function() {\n\n    const addRipple = slide => {\n      // Use slide frame as ripple container\n      if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {\n        const a = slide.querySelector(`.${SLIDE_TABSTOP}`);\n        if(a) {\n          const rippleContainer = a;\n          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n          rippleContainer.classList.add(MDL_RIPPLE_EFFECT);\n          const ripple = document.createElement('span');\n          ripple.classList.add(MDL_RIPPLE);\n          rippleContainer.appendChild(ripple);\n          componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);\n        }\n      }\n    };\n\n    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n\n    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {\n\n      slide.setAttribute('role', SLIDE_ROLE);\n\n      if(!slide.querySelector('a')) {\n        slide.setAttribute('tabindex', '0');\n      }\n      if(hasRippleEffect) {\n        addRipple(slide);\n      }\n    });\n  };\n  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;\n\n\n  /**\n   * Execute command\n   * @param detail\n   * @public\n   */\n  MaterialExtLightboard.prototype.command = function( detail ) {\n\n    const firstSlide = () => {\n      return this.element_.querySelector(`.${SLIDE}:first-child`);\n    };\n\n    const lastSlide = () => {\n      return this.element_.querySelector(`.${SLIDE}:last-child`);\n    };\n\n    const nextSlide = () => {\n      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected=\"true\"]`).nextElementSibling;\n      return slide ? slide : firstSlide();\n    };\n\n    const prevSlide = () => {\n      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected=\"true\"]`).previousElementSibling;\n      return slide ? slide : lastSlide();\n    };\n\n    if(detail && detail.action) {\n\n      const { action, target } = detail;\n\n      let slide;\n      switch (action.toLowerCase()) {\n        case 'select':\n          slide = getSlide(target);\n          this.dispatchSelectEvent_(slide);\n          break;\n        case 'first':\n          slide = firstSlide();\n          break;\n        case 'next':\n          slide = nextSlide();\n          break;\n        case 'prev':\n          slide = prevSlide();\n          break;\n        case 'last':\n          slide = lastSlide();\n          break;\n        case 'upgrade':\n          this.upgradeSlides();\n          break;\n        default:\n          throw new Error(`Unknown action \"${action}\". Action must be one of \"first\", \"next\", \"prev\", \"last\", \"select\" or \"upgrade\"`);\n      }\n\n      if (slide) {\n        const a = slide.querySelector('a');\n        if (a) {\n          a.focus();\n        }\n        else {\n          slide.focus();\n        }\n\n        // Workaround for JSDom testing:\n        // In JsDom 'element.focus()' does not trigger any focus event\n        if(!slide.hasAttribute('aria-selected')) {\n          this.selectSlide_(slide);\n        }\n\n      }\n    }\n  };\n  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtLightboard.prototype.init = function() {\n\n    const keydownHandler = event => {\n\n      if(event.target !== this.element_) {\n        let action;\n        let target;\n        switch (event.keyCode) {\n          case VK_HOME:\n            action = 'first';\n            break;\n          case VK_END:\n            action = 'last';\n            break;\n          case VK_ARROW_UP:\n          case VK_ARROW_LEFT:\n            action = 'prev';\n            break;\n          case VK_ARROW_DOWN:\n          case VK_ARROW_RIGHT:\n            action = 'next';\n            break;\n          case VK_ENTER:\n          case VK_SPACE:\n            action = 'select';\n            target = event.target;\n            break;\n        }\n        if(action)  {\n          event.preventDefault();\n          event.stopPropagation();\n          this.command( { action: action, target: target } );\n        }\n      }\n    };\n\n    const clickHandler = event => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if(event.target !== this.element_) {\n        this.command( { action: 'select', target: event.target } );\n      }\n    };\n\n    const focusHandler = event => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if(event.target !== this.element_) {\n        this.selectSlide_(event.target);\n      }\n    };\n\n\n    if (this.element_) {\n      this.element_.setAttribute('role', LIGHTBOARD_ROLE);\n\n      if (this.element_.classList.contains(MDL_RIPPLE_EFFECT)) {\n        this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n      }\n\n      // Remove listeners, just in case ...\n      this.element_.removeEventListener('command', this.commandHandler_);\n      this.element_.removeEventListener('keydown', keydownHandler);\n      this.element_.removeEventListener('click', clickHandler);\n      this.element_.removeEventListener('focus', focusHandler);\n\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n      this.element_.addEventListener('keydown', keydownHandler, true);\n      this.element_.addEventListener('click', clickHandler, true);\n      this.element_.addEventListener('focus', focusHandler, true);\n\n      this.upgradeSlides();\n\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  /* jshint undef:false */\n  componentHandler.register({\n    constructor: MaterialExtLightboard,\n    classAsString: 'MaterialExtLightboard',\n    cssClass: 'mdlext-js-lightboard',\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/lightboard/lightboard.js\n\n\n// WEBPACK FOOTER //\n// ./src/lightboard/lightboard.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * Responsive Lightbox\n */\n\nimport fullThrottle from '../utils/full-throttle';\nimport {\n  VK_ESC,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED\n} from '../utils/constants';\n\n(function() {\n  'use strict';\n\n  const LIGHTBOX = 'mdlext-lightbox';\n  const LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';\n  const LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';\n  const STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';\n  const BUTTON = 'mdl-button';\n\n  /**\n   * https://github.com/google/material-design-lite/issues/4205\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtLightbox = function MaterialExtLightbox(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtLightbox'] = MaterialExtLightbox;\n\n\n  /**\n   * Handle keypress\n   * @param event\n   * @private\n   */\n  MaterialExtLightbox.prototype.keyDownHandler_ = function(event) {\n\n    if (event) {\n      if ( event.keyCode === VK_ESC || event.keyCode === VK_SPACE\n        || event.keyCode === VK_END || event.keyCode === VK_HOME\n        || event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT\n        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n\n        if(event.keyCode !== VK_ESC) {\n          event.preventDefault();\n          event.stopPropagation();\n        }\n\n        let action = 'first';\n        if (event.keyCode === VK_END) {\n          action = 'last';\n        }\n        else if (event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT) {\n          action = 'prev';\n        }\n        else if (event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n          action = 'next';\n        }\n        else if (event.keyCode === VK_SPACE) {\n          action = 'select';\n        }\n        else if (event.keyCode === VK_ESC) {\n          action = 'cancel';\n        }\n\n        dispatchAction_(action, this);\n      }\n    }\n  };\n\n  /**\n   * Handle button clicks\n   * @param event\n   * @private\n   */\n  MaterialExtLightbox.prototype.buttonClickHandler_ = function(event) {\n\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      dispatchAction_(this.getAttribute('data-action') || '', this);\n\n      const n = this.closest(`.${LIGHTBOX}`);\n      if(n) {\n        n.focus();\n      }\n    }\n  };\n\n  /**\n   * Dispatches an action custom event\n   * @param action\n   * @param source\n   * @param target\n   * @private\n   */\n  const dispatchAction_ = (action, source, target = source) => {\n\n    target.dispatchEvent(new CustomEvent('action', {\n      bubbles: true,\n      cancelable: true,\n      detail: {\n        action: action || '',\n        source: source\n      }\n    }));\n  };\n\n  /**\n   * Reposition dialog if component parent element is \"DIALOG\"\n   * @param lightboxElement\n   * @private\n   */\n  const repositionDialog_ = lightboxElement => {\n    const footerHeight = (footer, isSticky) => isSticky && footer ? footer.offsetHeight : 0;\n\n    const reposition = (dialog, fh) => {\n      if (window.getComputedStyle(dialog).position === 'absolute') {\n        const scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n        const topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;\n        dialog.style.top = `${Math.max(scrollTop, topValue)}px`;\n      }\n    };\n\n    const p = lightboxElement.parentNode;\n    const dialog = p && p.nodeName === 'DIALOG' ? p : null;\n\n    if(dialog && dialog.hasAttribute('open')) {\n      lightboxElement.style.width = 'auto';\n      lightboxElement.style.maxWidth = '100%';\n      const img = lightboxElement.querySelector('img');\n      if(img) {\n        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? `${img.naturalWidth}px` : `${img.width}px` || '100%';\n      }\n\n      const fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));\n      const vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;\n      if (dialog.offsetHeight > vh) {\n        let n = 0;\n        while(dialog.offsetHeight > vh && ++n < 4) {\n          lightboxElement.style.width = `${lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight}px`;\n        }\n      }\n      reposition(dialog, fh);\n    }\n  };\n\n  /**\n   * Handle image load\n   * @param event\n   * @private\n   */\n\n  MaterialExtLightbox.prototype.imgLoadHandler_ = function( /*event*/ ) {\n    repositionDialog_(this);\n  };\n\n\n  /**\n   * Handle image drag\n   * @param event\n   * @private\n     */\n  MaterialExtLightbox.prototype.imgDragHandler_ = function(event ) {\n\n    const setStyles = ( element, properties ) => {\n      //noinspection JSAnnotator\n      for(const [key, value] of Object.entries(properties)) {\n        element.style[key] = value;\n      }\n      // ... or:\n      //for (const key in properties) {\n      //  element.style[key] = properties[key];\n      //}\n    };\n\n    event.preventDefault();\n    //event.stopPropagation();\n\n    const x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n\n    const img = this;\n    img.style.opacity = '0.2';\n\n    const slider = document.createElement('div');\n    slider.classList.add(LIGHTBOX_SLIDER);\n    setStyles(slider, {'width': `${img.offsetWidth}px`, 'height': `${img.offsetHeight}px`} );\n\n    let slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    slide.textContent = '>';\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'line-height'     : `${img.offsetHeight}px`,\n      'font-size'       : `${img.offsetHeight/4}px`,\n      'text-align'      : 'right',\n      'background-image': `url(\"${img.getAttribute('data-img-url-prev') || ''}\")`\n    });\n    slider.appendChild(slide);\n\n    slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'background-image': `url(\"${img.src}\")`\n    });\n    slider.appendChild(slide);\n\n    slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    slide.textContent = '<';\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'line-height'     : `${img.offsetHeight}px`,\n      'font-size'       : `${img.offsetHeight/4}px`,\n      'text-align'      : 'left',\n      'background-image': `url(\"${img.getAttribute('data-img-url-next') || ''}\")`\n    });\n    slider.appendChild(slide);\n\n    img.parentNode.appendChild(slider);\n\n\n    // drag handler\n    const drag = e => {\n      e.preventDefault();\n      const dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance\n\n      if(slider.offsetWidth - Math.abs(dx) > 19) {\n        slider.style.left = `${dx}px`;\n      }\n    };\n\n    // end drag handler\n    const endDrag = e => {\n      e.preventDefault();\n      //e.stopPropagation();\n\n      window.removeEventListener('mousemove', drag);\n      window.removeEventListener('touchmove', drag);\n      window.removeEventListener('mouseup', endDrag);\n      window.removeEventListener('touchend', endDrag);\n\n      const dx = slider.offsetLeft;\n      img.parentNode.removeChild(slider);\n      img.style.opacity = '1.0';\n\n      if(Math.abs(dx) > 19) {\n        dispatchAction_( (dx > 0 ? 'prev' : 'next') , img);\n      }\n    };\n\n    window.addEventListener('mousemove', drag);\n    window.addEventListener('touchmove', drag);\n    window.addEventListener('mouseup', endDrag);\n    window.addEventListener('touchend',endDrag);\n  };\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtLightbox.prototype.init = function() {\n\n    if (this.element_) {\n      // Do the init required for this component to work\n      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);\n\n      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {\n        this.element_.setAttribute('tabindex', 1);\n      }\n\n      [...this.element_.querySelectorAll(`.${BUTTON}`)].forEach( button =>\n        button.addEventListener('click', this.buttonClickHandler_.bind(button), false)\n      );\n\n      const figcaption = this.element_.querySelector('figcaption');\n      if(figcaption) {\n        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);\n      }\n\n      const footer = this.element_.querySelector('footer');\n      if(footer) {\n        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);\n      }\n\n      const img = this.element_.querySelector('img');\n      if(img) {\n        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);\n        img.addEventListener('click', e => e.preventDefault(), true);\n        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);\n        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);\n      }\n      window.addEventListener('resize', fullThrottle( () => repositionDialog_(this.element_) ));\n      window.addEventListener('orientationchange', () => repositionDialog_(this.element_));\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {\n  };\n  */\n\n  /**\n   * The component registers itself. It can assume componentHandler is available in the global scope.\n   */\n  /* jshint undef:false */\n  componentHandler.register({\n    constructor: MaterialExtLightbox,\n    classAsString: 'MaterialExtLightbox',\n    cssClass: 'mdlext-js-lightbox'\n  });\n\n})();\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/lightbox/lightbox.js\n\n\n// WEBPACK FOOTER //\n// ./src/lightbox/lightbox.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * A menu button is a button that opens a menu. It is often styled as a\n * typical push button with a downward pointing arrow or triangle to hint\n * that activating the button will display a menu.\n */\nimport { randomString } from '../utils/string-utils';\nimport fullThrottle from '../utils/full-throttle';\nimport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n} from '../utils/constants';\n\nimport { getScrollParents, tether } from '../utils/dom-utils';\n\nconst JS_MENU_BUTTON = 'mdlext-js-menu-button';\nconst MENU_BUTTON_MENU = 'mdlext-menu';\nconst MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';\nconst MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';\n//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';\n\n/**\n * Creates the menu controlled by the menu button\n * @param element\n * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}\n */\n\nconst menuFactory = element => {\n\n  let ariaControls = null;\n  let parentNode = null;\n\n  const removeAllSelected = () => {\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}[aria-selected=\"true\"]`)]\n      .forEach(selectedItem => selectedItem.removeAttribute('aria-selected'));\n  };\n\n  const setSelected = (item, force=false) => {\n    if(force || (item && !item.hasAttribute('aria-selected'))) {\n      removeAllSelected();\n      if(item) {\n        item.setAttribute('aria-selected', 'true');\n      }\n    }\n  };\n\n  const getSelected = () => {\n    return element.querySelector(`.${MENU_BUTTON_MENU_ITEM}[aria-selected=\"true\"]`);\n  };\n\n  const isDisabled = item => item && item.hasAttribute('disabled');\n\n  const isSeparator = item => item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);\n\n  const focus = item => {\n    if(item) {\n      item = item.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n    }\n    if(item) {\n      item.focus();\n    }\n  };\n\n  const nextItem = current => {\n    let n = current.nextElementSibling;\n    if(!n) {\n      n = element.firstElementChild;\n    }\n    if(!isDisabled(n) && !isSeparator(n)) {\n      focus(n);\n    }\n    else {\n      let i = element.children.length;\n      while(n && i-- > 0) {\n        if(isDisabled(n) || isSeparator(n)) {\n          n = n.nextElementSibling;\n          if(!n) {\n            n = element.firstElementChild;\n          }\n        }\n        else {\n          focus(n);\n          break;\n        }\n      }\n    }\n  };\n\n  const previousItem = current => {\n    let p = current.previousElementSibling;\n    if(!p) {\n      p = element.lastElementChild;\n    }\n    if(!isDisabled(p) && !isSeparator(p)) {\n      focus(p);\n    }\n    else {\n      let i = element.children.length;\n      while(p && i-- > 0) {\n        if(isDisabled(p) || isSeparator(p)) {\n          p = p.previousElementSibling;\n          if(!p) {\n            p = element.lastElementChild;\n          }\n        }\n        else {\n          focus(p);\n          break;\n        }\n      }\n    }\n  };\n\n  const firstItem = () => {\n    const item = element.firstElementChild;\n    if(isDisabled(item) || isSeparator(item) ) {\n      nextItem(item);\n    }\n    else {\n      focus(item);\n    }\n  };\n\n  const lastItem = () => {\n    const item = element.lastElementChild;\n    if(isDisabled(item) || isSeparator(item)) {\n      previousItem(item);\n    }\n    else {\n      focus(item);\n    }\n  };\n\n  const selectItem = item => {\n    if(item && !isDisabled(item) && !isSeparator(item)) {\n      setSelected(item);\n      close(true, item);\n    }\n  };\n\n  const keyDownHandler = event => {\n\n    const item = event.target.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n\n    switch (event.keyCode) {\n      case VK_ARROW_UP:\n      case VK_ARROW_LEFT:\n        if(item) {\n          previousItem(item);\n        }\n        else {\n          firstItem();\n        }\n        break;\n\n      case VK_ARROW_DOWN:\n      case VK_ARROW_RIGHT:\n        if(item) {\n          nextItem(item);\n        }\n        else {\n          lastItem();\n        }\n        break;\n\n      case VK_HOME:\n        firstItem();\n        break;\n\n      case VK_END:\n        lastItem();\n        break;\n\n      case VK_SPACE:\n      case VK_ENTER:\n        selectItem(item);\n        break;\n\n      case VK_ESC:\n        close(true);\n        break;\n\n      case VK_TAB:\n        // We do not have a \"natural\" tab order from menu, so the best we can do is to set focus back to the button\n        close(true);\n        break;\n\n      default:\n        return;\n    }\n    event.preventDefault();\n  };\n\n\n  const blurHandler = event => {\n\n    // See: https://github.com/facebook/react/issues/2011\n    const t = event.relatedTarget ||\n      event.explicitOriginalTarget || // FF\n      document.activeElement;         // IE11\n\n    //console.log('***** blur, target, relatedTarget', event.target, t);\n\n    try {\n      if (t) {\n        if (t.closest(`.${MENU_BUTTON_MENU}`) !== element && shouldClose(t)) {\n          close();\n        }\n      }\n      else {\n        close();\n      }\n    }\n    catch(err) {\n      // FF throws error: \"TypeError: n.closest is not a function\" if related target is a text node\n      close();\n    }\n  };\n\n  const clickHandler = event => {\n    //console.log('***** click, target', event.target);\n\n    event.preventDefault();\n    const t = event.target;\n    if (t && t.closest(`.${MENU_BUTTON_MENU}`) === element) {\n      const item = t.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n      if (item) {\n        selectItem(item);\n      }\n    }\n    else {\n      if (shouldClose(t)) {\n        close();\n      }\n    }\n  };\n\n  const touchStartHandler = event => {\n    //console.log('***** touchStart, target', event.target);\n\n    const t = event.target;\n    if(!(t && t.closest(`.${MENU_BUTTON_MENU}`) === element)) {\n      if (event.type === 'touchstart') {\n        event.preventDefault();\n      }\n      close();\n    }\n  };\n\n  const addListeners = () => {\n    element.addEventListener('keydown', keyDownHandler, false);\n    element.addEventListener('blur', blurHandler, true);\n    element.addEventListener('click', clickHandler, true);\n    document.documentElement.addEventListener('touchstart', touchStartHandler, true);\n  };\n\n  const removeListeners = () => {\n    element.removeEventListener('keydown', keyDownHandler, false);\n    element.removeEventListener('blur', blurHandler, true);\n    element.removeEventListener('click', clickHandler, true);\n    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);\n  };\n\n  const open = (controlElement, position='first') => {\n\n    ariaControls = controlElement.closest(`.${JS_MENU_BUTTON}`);\n\n    element.style['min-width'] = `${Math.max(124, controlElement.getBoundingClientRect().width)}px`;\n    element.removeAttribute('hidden');\n    tether(controlElement, element);\n\n    let item;\n    switch (position.toLowerCase()) {\n      case 'first':\n        firstItem();\n        break;\n\n      case 'last':\n        lastItem();\n        break;\n\n      case 'selected':\n        item = getSelected();\n        if(item && !item.hasAttribute('disabled')) {\n          focus(item);\n        }\n        else {\n          firstItem();\n        }\n        break;\n    }\n\n    addListeners();\n  };\n\n\n  const shouldClose = target => {\n    //console.log('***** shouldClose');\n\n    let result = false;\n    const btn = (target && target.closest(`.${JS_MENU_BUTTON}`)) || null;\n    if(!btn) {\n      result = true;\n    }\n    else if(btn.getAttribute('aria-controls') === element.id) {\n      if(btn !== ariaControls) {\n        result = true;\n      }\n    }\n    else {\n      result = true;\n    }\n    return result;\n  };\n\n  const close = (forceFocus = false, item = null) => {\n    removeListeners();\n\n    element.dispatchEvent(\n      new CustomEvent('_closemenu', {\n        bubbles: true,\n        cancelable: true,\n        detail: { forceFocus: forceFocus, item: item }\n      })\n    );\n  };\n\n  const addWaiAria = () => {\n    if (!element.hasAttribute('id')) {\n      // Generate a random id\n      element.id = `menu-button-${randomString()}`;\n    }\n    element.setAttribute('tabindex', '-1');\n    element.setAttribute('role', 'menu');\n    element.setAttribute('hidden', '');\n\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}`)].forEach( menuitem => {\n      menuitem.setAttribute('tabindex', '-1');\n      menuitem.setAttribute('role', 'menuitem');\n    });\n\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM_SEPARATOR}`)].forEach( menuitem => {\n      menuitem.setAttribute('role', 'separator');\n    });\n  };\n\n  const init = () => {\n    addWaiAria();\n    parentNode = element.parentNode;\n    element.classList.add('is-upgraded');\n  };\n\n  const downgrade = () => {\n    removeListeners();\n    if(element.parentNode !== parentNode) {\n      parentNode.appendChild(element);\n    }\n    element.classList.remove('is-upgraded');\n  };\n\n  init();\n\n  return {\n    /**\n     * Get the menu element\n     * @returns {Element} the menu element\n     */\n    get element() {\n      return element;\n    },\n\n    /**\n     * Set selected menu item\n     * @param item\n     */\n    set selected(item) {\n      setSelected(item, true);\n    },\n\n    /**\n     * Open menu\n     * @param {Element} controlElement the element where the menu should be aligned to\n     * @param {String} position menuElement item to receive focus after menu element is opened\n     */\n    open: (controlElement, position='first') => open(controlElement, position),\n\n    /**\n     * Remove event listeners.\n     */\n    removeListeners: () => removeListeners(),\n\n    /**\n     * Downgrade menu\n     */\n    downgrade: () => downgrade(),\n  };\n};\n\n\n/**\n * The menubutton component\n */\n\nclass MenuButton {\n\n  constructor(element) {\n    this.element = element;\n    this.focusElement = undefined;\n    this.focusElementLastScrollPosition = undefined;\n    this.scrollElements = [];\n    this.menu = undefined;\n    this.selectedItem = null;\n    this.init();\n  }\n\n  keyDownHandler = event => {\n    if(!this.isDisabled()) {\n      switch (event.keyCode) {\n        case VK_ARROW_UP:\n          this.openMenu('last');\n          break;\n\n        case VK_ARROW_DOWN:\n          this.openMenu();\n          break;\n\n        case VK_SPACE:\n        case VK_ENTER:\n          this.openMenu('selected');\n          break;\n\n        case VK_ESC:\n          this.closeMenu();\n          break;\n\n        case VK_TAB:\n          this.closeMenu();\n          return;\n\n        default:\n          return;\n      }\n    }\n    //event.stopPropagation();\n    event.preventDefault();\n  };\n\n  clickHandler = () => {\n    if(!this.isDisabled()) {\n      if(this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {\n        this.closeMenu(true);\n      }\n      else {\n        this.openMenu('selected');\n      }\n    }\n  };\n\n  /**\n   * Re-position menu if content is scrolled, window is resized or orientation change\n   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/\n   */\n  recalcMenuPosition = fullThrottle( () => {\n    const c = this.focusElement.getBoundingClientRect();\n    const dx = this.focusElementLastScrollPosition.left - c.left;\n    const dy = this.focusElementLastScrollPosition.top - c.top;\n    const left = (parseFloat(this.menu.element.style.left) || 0) - dx;\n    const top = (parseFloat(this.menu.element.style.top) || 0) - dy;\n\n    this.menu.element.style.left = `${left}px`;\n    this.menu.element.style.top = `${top}px`;\n    this.focusElementLastScrollPosition = c;\n  });\n\n\n  positionChangeHandler = () => {\n    this.recalcMenuPosition(this);\n  };\n\n  closeMenuHandler = event => {\n    if(event && event.detail) {\n      if(event.detail.item && event.detail.item !== this.selectedItem) {\n        this.selectedItem = event.detail.item;\n        this.dispatchMenuSelect();\n      }\n      this.closeMenu(event.detail.forceFocus);\n    }\n  };\n\n  dispatchMenuSelect() {\n    this.element.dispatchEvent(\n      new CustomEvent('menuselect', {\n        bubbles: true,\n        cancelable: true,\n        detail: { source: this.selectedItem }\n      })\n    );\n  }\n\n  isDisabled() {\n    return this.element.hasAttribute('disabled');\n  }\n\n  removeListeners() {\n    this.element.removeEventListener('keydown', this.keyDownHandler);\n    this.element.removeEventListener('click', this.clickHandler);\n  }\n\n  openMenu(position='first') {\n\n    if(!this.isDisabled() && this.menu) {\n\n      // Close the menu if button position change\n      this.scrollElements = getScrollParents(this.element);\n      this.scrollElements.forEach(el => el.addEventListener('scroll', this.positionChangeHandler));\n\n      window.addEventListener('resize', this.positionChangeHandler);\n      window.addEventListener('orientationchange', this.positionChangeHandler);\n      this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);\n\n      this.menu.selected = this.selectedItem;\n      this.menu.open(this.focusElement, position);\n      this.element.setAttribute('aria-expanded', 'true');\n\n      this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();\n    }\n  }\n\n  closeMenu(forceFocus = false) {\n    if(this.menu) {\n      this.menu.removeListeners();\n      this.scrollElements.forEach(el => el.removeEventListener('scroll', this.positionChangeHandler));\n      window.removeEventListener('resize', this.positionChangeHandler);\n      window.removeEventListener('orientationchange', this.positionChangeHandler);\n      this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);\n\n      if (forceFocus) {\n        this.focus();\n      }\n      this.element.setAttribute('aria-expanded', 'false');\n      this.menu.element.setAttribute('hidden', '');\n    }\n  }\n\n  focus() {\n    if(!this.isDisabled()) {\n      this.focusElement.focus();\n    }\n  }\n\n  init() {\n    const addListeners = () => {\n      this.element.addEventListener('keydown', this.keyDownHandler);\n      this.element.addEventListener('click', this.clickHandler);\n    };\n\n    const addWaiAria = () => {\n      this.element.setAttribute('role', 'button');\n      this.element.setAttribute('aria-expanded', 'false');\n      this.element.setAttribute('aria-haspopup', 'true');\n    };\n\n    const addFocusElement = () => {\n      this.focusElement = this.element.querySelector('input[type=\"text\"]');\n      if(!this.focusElement) {\n        this.focusElement = this.element;\n\n        if(!(this.focusElement.tagName.toLowerCase() === 'button' || this.focusElement.tagName.toLowerCase() === 'input')) {\n          if (!this.focusElement.hasAttribute('tabindex')) {\n            this.focusElement.setAttribute('tabindex', '0');\n          }\n        }\n      }\n    };\n\n    const moveElementToDocumentBody = (element) => {\n      // To position an element on top of all other z-indexed elements, the element should be moved to document.body\n      //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/\n\n      if(element.parentNode !== document.body) {\n        return document.body.appendChild(element);\n      }\n      return element;\n    };\n\n    const findMenuElement = () => {\n      let menuElement;\n      const menuElementId = this.element.getAttribute('aria-controls');\n      if(menuElementId !== null) {\n        menuElement = document.querySelector(`#${menuElementId }`);\n      }\n      else {\n        menuElement = this.element.parentNode.querySelector(`.${MENU_BUTTON_MENU}`);\n      }\n      return menuElement;\n    };\n\n    const addMenu = () => {\n      const menuElement = findMenuElement();\n      if(menuElement) {\n        if(menuElement.componentInstance) {\n          this.menu = menuElement.componentInstance;\n        }\n        else {\n          this.menu = menuFactory(menuElement);\n          menuElement.componentInstance = this.menu;\n          moveElementToDocumentBody(menuElement);\n        }\n        this.element.setAttribute('aria-controls', this.menu.element.id);\n      }\n    };\n\n    addFocusElement();\n    addWaiAria();\n    addMenu();\n    this.removeListeners();\n    addListeners();\n  }\n\n  downgrade() {\n    if(this.menu) {\n      // Do not downgrade menu if there are other buttons sharing this menu\n      const related = [...document.querySelectorAll(`.${JS_MENU_BUTTON}[aria-controls=\"${this.element.getAttribute('aria-controls')}\"]`)];\n      if(related.filter( c => c !== this.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0).length === 0) {\n        this.menu.downgrade();\n      }\n    }\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * https://github.com/google/material-design-lite/issues/4205\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtMenuButton = function MaterialExtMenuButton(element) {\n    this.element_ = element;\n    this.menuButton_ = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtMenuButton'] = MaterialExtMenuButton;\n\n\n  // Public methods.\n\n  /**\n   * Get the menu element controlled by this button, null if no menu is controlled by this button\n   * @public\n   */\n  MaterialExtMenuButton.prototype.getMenuElement = function() {\n    return this.menuButton_.menu ? this.menuButton_.menu.element : null;\n  };\n  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;\n\n  /**\n   * Open menu\n   * @public\n   * @param {String} position one of \"first\", \"last\" or \"selected\"\n   */\n  MaterialExtMenuButton.prototype.openMenu = function(position) {\n    this.menuButton_.openMenu(position);\n  };\n  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;\n\n  /**\n   * Close menu\n   * @public\n   */\n  MaterialExtMenuButton.prototype.closeMenu = function() {\n    this.menuButton_.closeMenu(true);\n  };\n  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;\n\n  /**\n   * Get selected menu item\n   * @public\n   * @returns {Element} The selected menu item or null if no item selected\n   */\n  MaterialExtMenuButton.prototype.getSelectedMenuItem = function() {\n    return this.menuButton_.selectedItem;\n  };\n  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;\n\n\n  /**\n   * Set (default) selected menu item\n   * @param {Element} item\n   */\n  MaterialExtMenuButton.prototype.setSelectedMenuItem = function(item) {\n    this.menuButton_.selectedItem = item;\n  };\n  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtMenuButton.prototype.init = function() {\n    if (this.element_) {\n      this.menuButton_ = new MenuButton(this.element_);\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  /**\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtMenuButton.prototype.mdlDowngrade_ = function() {\n    this.menuButton_.downgrade();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtMenuButton,\n    classAsString: 'MaterialExtMenuButton',\n    cssClass: JS_MENU_BUTTON,\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/menu-button/menu-button.js\n\n\n// WEBPACK FOOTER //\n// ./src/menu-button/menu-button.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/*\n * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield\n */\n\nimport { randomString } from '../utils/string-utils';\nimport {\n  IS_DIRTY,\n  IS_FOCUSED,\n  IS_DISABLED,\n  IS_INVALID,\n  IS_UPGRADED\n} from '../utils/constants';\n\n(function() {\n  'use strict';\n  const LABEL = 'mdlext-selectfield__label';\n  const INPUT = 'mdlext-selectfield__select';\n\n  /**\n   * Class constructor for Selectfield MDLEXT component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtSelectfield = function MaterialExtSelectfield(element) {\n    this.element_ = element;\n    this.init(); // Initialize instance.\n  };\n\n  window['MaterialExtSelectfield'] = MaterialExtSelectfield;\n\n  /**\n   * Handle focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  /*eslint no-unused-vars: 0*/\n  MaterialExtSelectfield.prototype.onFocus_ = function( /*event*/ ) {\n    this.element_.classList.add(IS_FOCUSED);\n  };\n\n  /**\n   * Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  /*eslint no-unused-vars: 0*/\n  MaterialExtSelectfield.prototype.onBlur_ = function( /*event*/ ) {\n    this.element_.classList.remove(IS_FOCUSED);\n  };\n\n  /**\n   * Handle reset event from out side.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  MaterialExtSelectfield.prototype.onReset_ = function( /*event*/ ) {\n    this.updateClasses_();\n  };\n\n  /**\n   * Handle class updates.\n   *\n   * @private\n   */\n  MaterialExtSelectfield.prototype.updateClasses_ = function() {\n    this.checkDisabled();\n    this.checkValidity();\n    this.checkDirty();\n    this.checkFocus();\n  };\n\n  // Public methods.\n\n  /**\n   * Check the disabled state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkDisabled = function() {\n    if (this.select_.disabled) {\n      this.element_.classList.add(IS_DISABLED);\n    } else {\n      this.element_.classList.remove(IS_DISABLED);\n    }\n  };\n  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;\n\n\n  /**\n   * Check the focus state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkFocus = function() {\n    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus\n    /*eslint no-extra-boolean-cast: 0*/\n    if (Boolean(this.element_.querySelector(':focus'))) {\n      this.element_.classList.add(IS_FOCUSED);\n    } else {\n      this.element_.classList.remove(IS_FOCUSED);\n    }\n  };\n\n  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;\n\n\n  /**\n   * Check the validity state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkValidity = function() {\n\n    /* Don't think it makes any sense to check validity.\n       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0\n\n    if (this.select_.validity) {\n      if (this.select_.validity.valid) {\n        this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n      } else {\n        this.element_.classList.add(this.CssClasses_.IS_INVALID);\n      }\n    }\n    */\n  };\n\n  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;\n\n  /**\n   * Check the dirty state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkDirty = function() {\n    if (this.select_.value && this.select_.value.length > 0) {\n      this.element_.classList.add(IS_DIRTY);\n    } else {\n      this.element_.classList.remove(IS_DIRTY);\n    }\n  };\n\n  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;\n\n  /**\n   * Disable select field.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.disable = function() {\n    this.select_.disabled = true;\n    this.updateClasses_();\n  };\n\n  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;\n\n  /**\n   * Enable select field.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.enable = function() {\n    this.select_.disabled = false;\n    this.updateClasses_();\n  };\n\n  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;\n\n  /**\n   * Update select field value.\n   *\n   * @param {string} value The value to which to set the control (optional).\n   * @public\n   */\n  MaterialExtSelectfield.prototype.change = function(value) {\n    this.select_.value = value || '';\n    this.updateClasses_();\n  };\n  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;\n\n  /**\n   * Initialize element.\n   */\n  MaterialExtSelectfield.prototype.init = function() {\n    if (this.element_) {\n      this.label_ = this.element_.querySelector(`.${LABEL}`);\n      this.select_ = this.element_.querySelector(`.${INPUT}`);\n\n      if (this.select_) {\n        // Remove listeners, just in case ...\n        this.select_.removeEventListener('change', this.updateClasses_);\n        this.select_.removeEventListener('focus', this.onFocus_);\n        this.select_.removeEventListener('blur', this.onBlur_);\n        this.select_.removeEventListener('reset', this.onReset_);\n\n        this.select_.addEventListener('change', this.updateClasses_.bind(this));\n        this.select_.addEventListener('focus', this.onFocus_.bind(this));\n        this.select_.addEventListener('blur', this.onBlur_.bind(this));\n        this.select_.addEventListener('reset', this.onReset_.bind(this));\n\n        if(this.label_) {\n          let id;\n          if(!this.select_.hasAttribute('id')) {\n            id = `select-${randomString()}`;\n            this.select_.id = id;\n          }\n          else {\n            id = this.select_.id;\n          }\n\n          if(!this.label_.hasAttribute('for')) {\n            this.label_.setAttribute('for', id);\n          }\n        }\n\n        const invalid = this.element_.classList.contains(IS_INVALID);\n        this.updateClasses_();\n        this.element_.classList.add(IS_UPGRADED);\n\n        if (invalid) {\n          this.element_.classList.add(IS_INVALID);\n        }\n        if (this.select_.hasAttribute('autofocus')) {\n          this.element_.focus();\n          this.checkFocus();\n        }\n      }\n    }\n  };\n\n  /**\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {\n    'use strict';\n    console.log('***** MaterialExtSelectfield.mdlDowngrade ');\n  };\n  */\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /*eslint no-undef: 0*/\n  componentHandler.register({\n    constructor: MaterialExtSelectfield,\n    classAsString: 'MaterialExtSelectfield',\n    cssClass: 'mdlext-js-selectfield',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/selectfield/selectfield.js\n\n\n// WEBPACK FOOTER //\n// ./src/selectfield/selectfield.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.\n * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and\n * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.\n */\n\nimport fullThrottle from '../utils/full-throttle';\nimport { jsonStringToObject } from '../utils/json-utils';\nimport {\n  IS_UPGRADED\n} from '../utils/constants';\n\n\n(function() {\n  'use strict';\n  const MDL_LAYOUT_CONTENT  = 'mdl-layout__content';\n  const IS_SCROLL_CLASS  = 'mdlext-is-scroll';\n\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {\n    // Stores the element.\n    this.header_ = element;\n\n    // Heder listens to scroll events from content\n    this.content_ = null;\n    this.lastScrollTop_ = 0;\n\n    // Default config\n    this.config_ = {\n      visibleAtScrollEnd: false\n    };\n\n    this.mutationObserver_ = null;\n\n    this.drawing_ = false;\n\n    // Initialize instance.\n    this.init();\n  };\n\n  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;\n\n\n  /**\n   * Update header width\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.recalcWidth_ = function() {\n    this.header_.style.width = `${this.content_.clientWidth}px`;\n  };\n\n  const throttleResize = fullThrottle(self => self.recalcWidth_() );\n\n  /**\n   * Adjust header width when window resizes or oreientation changes\n   * @param event\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.resizeHandler_ = function( /* event */ ) {\n    throttleResize(this);\n  };\n\n\n  /**\n   * Update header position\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.reposition_ = function() {\n\n    const currentContentScrollTop = this.content_.scrollTop;\n    const scrollDiff = this.lastScrollTop_ - currentContentScrollTop;\n\n    if(currentContentScrollTop <= 0) {\n      // Scrolled to the top. Header sticks to the top\n      this.header_.style.top = '0';\n      this.header_.classList.remove(IS_SCROLL_CLASS);\n    }\n    else if(scrollDiff > 0) {\n\n      if(scrollDiff >= this.header_.offsetHeight) {\n\n        // Scrolled up. Header slides in\n        const headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);\n        if(headerTop != 0) {\n          this.header_.style.top = '0';\n          this.header_.classList.add(IS_SCROLL_CLASS);\n        }\n        this.lastScrollTop_ = currentContentScrollTop;\n      }\n      return;\n    }\n    else if(scrollDiff < 0) {\n      // Scrolled down\n      this.header_.classList.add(IS_SCROLL_CLASS);\n      let headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);\n\n      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {\n        // Bottom of content\n        if(headerTop != 0) {\n          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : `-${this.header_.offsetHeight}px`;\n        }\n      }\n      else {\n        headerTop += scrollDiff;\n        const offsetHeight = this.header_.offsetHeight;\n        this.header_.style.top = `${( Math.abs( headerTop ) > offsetHeight ? -offsetHeight : headerTop )}px`;\n      }\n    }\n\n    this.lastScrollTop_ = currentContentScrollTop;\n  };\n\n\n  const throttleScroll = fullThrottle((self) => self.reposition_());\n\n  /**\n   * Scroll header when content scrolls\n   * @param event\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.scrollHandler_ = function( /* event */ ) {\n    throttleScroll(this);\n  };\n\n  /**\n   * Init header position\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.updatePosition_ = function( /* event */ ) {\n    this.recalcWidth_();\n    this.reposition_();\n  };\n\n  /**\n   * Add mutation observer\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.addMutationObserver_ = function() {\n\n    // jsdom does not support MutationObserver - so this is not testable\n    /* istanbul ignore next */\n    this.mutationObserver_ = new MutationObserver( ( /*mutations*/ ) => {\n      // Adjust header width if content changes (e.g. in a SPA)\n      this.updatePosition_();\n    });\n\n    this.mutationObserver_.observe( this.content_, {\n      attributes: false,\n      childList: true,\n      characterData: false,\n      subtree: true\n    });\n  };\n\n    /**\n   * Removes event listeners\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.removeListeners_ = function() {\n\n    window.removeEventListener('resize', this.resizeHandler_);\n    window.removeEventListener('orientationchange', this.resizeHandler_);\n\n    if(this.content_) {\n      this.content_.removeEventListener('scroll', this.scrollHandler_);\n    }\n\n    if(this.mutationObserver_) {\n      this.mutationObserver_.disconnect();\n      this.mutationObserver_ = null;\n    }\n  };\n\n  /**\n   * Initialize component\n   */\n  MaterialExtStickyHeader.prototype.init = function() {\n\n    if (this.header_) {\n\n      this.removeListeners_();\n\n      if(this.header_.hasAttribute('data-config')) {\n        this.config_ = jsonStringToObject(this.header_.getAttribute('data-config'));\n      }\n\n      this.content_ = this.header_.parentNode.querySelector(`.${MDL_LAYOUT_CONTENT}`) || null;\n\n      if(this.content_) {\n        this.content_.style.paddingTop = `${this.header_.offsetHeight}px`;  // Make room for sticky header\n        this.lastScrollTop_ = this.content_.scrollTop;\n\n        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));\n        window.addEventListener('resize', this.resizeHandler_.bind(this));\n        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));\n\n        this.addMutationObserver_();\n        this.updatePosition_();\n\n        // Set upgraded flag\n        this.header_.classList.add(IS_UPGRADED);\n      }\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to clean\n   *\n   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {\n     'use strict';\n     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');\n   };\n   */\n\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtStickyHeader,\n    classAsString: 'MaterialExtStickyHeader',\n    cssClass: 'mdlext-js-sticky-header'\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/sticky-header/sticky-header.js\n\n\n// WEBPACK FOOTER //\n// ./src/sticky-header/sticky-header.js","import './constants';\nimport './dom-utils';\nimport './string-utils';\nimport './json-utils';\nimport './full-throttle';\nimport './easing';\nimport './interval-function';\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/index.js\n\n\n// WEBPACK FOOTER //\n// ./src/utils/index.js","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/array/from.js\n// module id = 60\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/array/from.js\n// module id = 60\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/is-iterable\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/is-iterable.js\n// module id = 61\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/is-iterable.js\n// module id = 61\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/number/is-nan\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-nan.js\n// module id = 62\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-nan.js\n// module id = 62\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 63\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 63\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/entries\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/entries.js\n// module id = 64\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/entries.js\n// module id = 64\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/keys.js\n// module id = 65\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/keys.js\n// module id = 65\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/reflect/apply\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/reflect/apply.js\n// module id = 66\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/reflect/apply.js\n// module id = 66\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/slicedToArray.js\n// module id = 67\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/slicedToArray.js\n// module id = 67\n// module chunks = 0 1","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/array/from.js\n// module id = 68\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/array/from.js\n// module id = 68\n// module chunks = 0 1","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/get-iterator.js\n// module id = 69\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/get-iterator.js\n// module id = 69\n// module chunks = 0 1","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/is-iterable.js\n// module id = 70\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/is-iterable.js\n// module id = 70\n// module chunks = 0 1","require('../../modules/es6.number.is-integer');\nmodule.exports = require('../../modules/_core').Number.isInteger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-integer.js\n// module id = 71\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-integer.js\n// module id = 71\n// module chunks = 0 1","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-nan.js\n// module id = 72\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-nan.js\n// module id = 72\n// module chunks = 0 1","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/assign.js\n// module id = 73\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/assign.js\n// module id = 73\n// module chunks = 0 1","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/define-property.js\n// module id = 74\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/define-property.js\n// module id = 74\n// module chunks = 0 1","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/entries.js\n// module id = 75\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/entries.js\n// module id = 75\n// module chunks = 0 1","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/keys.js\n// module id = 76\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/keys.js\n// module id = 76\n// module chunks = 0 1","require('../../modules/es6.reflect.apply');\nmodule.exports = require('../../modules/_core').Reflect.apply;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/reflect/apply.js\n// module id = 77\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/reflect/apply.js\n// module id = 77\n// module chunks = 0 1","module.exports = function(){ /* empty */ };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_add-to-unscopables.js\n// module id = 78\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_add-to-unscopables.js\n// module id = 78\n// module chunks = 0 1","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_array-includes.js\n// module id = 79\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_array-includes.js\n// module id = 79\n// module chunks = 0 1","'use strict';\nvar $defineProperty = require('./_object-dp')\n  , createDesc      = require('./_property-desc');\n\nmodule.exports = function(object, index, value){\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_create-property.js\n// module id = 80\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_create-property.js\n// module id = 80\n// module chunks = 0 1","module.exports = require('./_global').document && document.documentElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_html.js\n// module id = 81\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_html.js\n// module id = 81\n// module chunks = 0 1","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ie8-dom-define.js\n// module id = 82\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ie8-dom-define.js\n// module id = 82\n// module chunks = 0 1","// check on default Array iterator\nvar Iterators  = require('./_iterators')\n  , ITERATOR   = require('./_wks')('iterator')\n  , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-array-iter.js\n// module id = 83\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-array-iter.js\n// module id = 83\n// module chunks = 0 1","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object')\n  , floor    = Math.floor;\nmodule.exports = function isInteger(it){\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-integer.js\n// module id = 84\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-integer.js\n// module id = 84\n// module chunks = 0 1","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function(iterator, fn, value, entries){\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch(e){\n    var ret = iterator['return'];\n    if(ret !== undefined)anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-call.js\n// module id = 85\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-call.js\n// module id = 85\n// module chunks = 0 1","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-create.js\n// module id = 86\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-create.js\n// module id = 86\n// module chunks = 0 1","var ITERATOR     = require('./_wks')('iterator')\n  , SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function(){ SAFE_CLOSING = true; };\n  Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n  if(!skipClosing && !SAFE_CLOSING)return false;\n  var safe = false;\n  try {\n    var arr  = [7]\n      , iter = arr[ITERATOR]();\n    iter.next = function(){ return {done: safe = true}; };\n    arr[ITERATOR] = function(){ return iter; };\n    exec(arr);\n  } catch(e){ /* empty */ }\n  return safe;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-detect.js\n// module id = 87\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-detect.js\n// module id = 87\n// module chunks = 0 1","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-step.js\n// module id = 88\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-step.js\n// module id = 88\n// module chunks = 0 1","module.exports = true;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_library.js\n// module id = 89\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_library.js\n// module id = 89\n// module chunks = 0 1","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-assign.js\n// module id = 90\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-assign.js\n// module id = 90\n// module chunks = 0 1","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = require('./_an-object')\n  , dPs         = require('./_object-dps')\n  , enumBugKeys = require('./_enum-bug-keys')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-create.js\n// module id = 91\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-create.js\n// module id = 91\n// module chunks = 0 1","var dP       = require('./_object-dp')\n  , anObject = require('./_an-object')\n  , getKeys  = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dps.js\n// module id = 92\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dps.js\n// module id = 92\n// module chunks = 0 1","exports.f = Object.getOwnPropertySymbols;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gops.js\n// module id = 93\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gops.js\n// module id = 93\n// module chunks = 0 1","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = require('./_has')\n  , toObject    = require('./_to-object')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gpo.js\n// module id = 94\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gpo.js\n// module id = 94\n// module chunks = 0 1","var has          = require('./_has')\n  , toIObject    = require('./_to-iobject')\n  , arrayIndexOf = require('./_array-includes')(false)\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys-internal.js\n// module id = 95\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys-internal.js\n// module id = 95\n// module chunks = 0 1","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-sap.js\n// module id = 96\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-sap.js\n// module id = 96\n// module chunks = 0 1","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject')\n  , isEnum    = require('./_object-pie').f;\nmodule.exports = function(isEntries){\n  return function(it){\n    var O      = toIObject(it)\n      , keys   = getKeys(O)\n      , length = keys.length\n      , i      = 0\n      , result = []\n      , key;\n    while(length > i)if(isEnum.call(O, key = keys[i++])){\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-to-array.js\n// module id = 97\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-to-array.js\n// module id = 97\n// module chunks = 0 1","module.exports = require('./_hide');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_redefine.js\n// module id = 98\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_redefine.js\n// module id = 98\n// module chunks = 0 1","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_string-at.js\n// module id = 99\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_string-at.js\n// module id = 99\n// module chunks = 0 1","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-index.js\n// module id = 100\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-index.js\n// module id = 100\n// module chunks = 0 1","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-primitive.js\n// module id = 101\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-primitive.js\n// module id = 101\n// module chunks = 0 1","var anObject = require('./_an-object')\n  , get      = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function(it){\n  var iterFn = get(it);\n  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator.js\n// module id = 102\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator.js\n// module id = 102\n// module chunks = 0 1","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.is-iterable.js\n// module id = 103\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.is-iterable.js\n// module id = 103\n// module chunks = 0 1","'use strict';\nvar ctx            = require('./_ctx')\n  , $export        = require('./_export')\n  , toObject       = require('./_to-object')\n  , call           = require('./_iter-call')\n  , isArrayIter    = require('./_is-array-iter')\n  , toLength       = require('./_to-length')\n  , createProperty = require('./_create-property')\n  , getIterFn      = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n    var O       = toObject(arrayLike)\n      , C       = typeof this == 'function' ? this : Array\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , index   = 0\n      , iterFn  = getIterFn(O)\n      , length, result, step, iterator;\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for(result = new C(length); length > index; index++){\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.from.js\n// module id = 104\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.from.js\n// module id = 104\n// module chunks = 0 1","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.iterator.js\n// module id = 105\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.iterator.js\n// module id = 105\n// module chunks = 0 1","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-integer.js\n// module id = 106\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-integer.js\n// module id = 106\n// module chunks = 0 1","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number){\n    return number != number;\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-nan.js\n// module id = 107\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-nan.js\n// module id = 107\n// module chunks = 0 1","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.assign.js\n// module id = 108\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.assign.js\n// module id = 108\n// module chunks = 0 1","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js\n// module id = 109\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js\n// module id = 109\n// module chunks = 0 1","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.keys.js\n// module id = 110\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.keys.js\n// module id = 110\n// module chunks = 0 1","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , rApply    = (require('./_global').Reflect || {}).apply\n  , fApply    = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function(){\n  rApply(function(){});\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList){\n    var T = aFunction(target)\n      , L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.reflect.apply.js\n// module id = 111\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.reflect.apply.js\n// module id = 111\n// module chunks = 0 1","// https://github.com/tc39/proposal-object-values-entries\nvar $export  = require('./_export')\n  , $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it){\n    return $entries(it);\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es7.object.entries.js\n// module id = 112\n// module chunks = 0 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es7.object.entries.js\n// module id = 112\n// module chunks = 0 1","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mdl-ext-build.scss\n// module id = 113\n// module chunks = 1\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mdl-ext-build.scss\n// module id = 113\n// module chunks = 1"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.min.css b/node_modules/mdl-ext/lib/mdl-ext.min.css
new file mode 100644
index 0000000..742083f
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.min.css
@@ -0,0 +1,2 @@
+.mdlext-aria-expanded-plus-minus{font-family:inherit;font-weight:inherit;font-style:inherit;font-size:24px;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-expanded-plus-minus:after{content:"+";margin-left:0}[aria-expanded=true]>.mdlext-aria-expanded-plus-minus:after{content:"-";margin-left:0}.mdlext-aria-expanded-more-less{font-family:Material Icons;font-weight:inherit;font-style:inherit;font-size:24px;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-expanded-more-less:after{content:"expand_more";margin-left:0}[aria-expanded=true]>.mdlext-aria-expanded-more-less:after{content:"expand_less";margin-left:0}.mdlext-layout__sticky-header{position:absolute;overflow:visible;background:transparent linear-gradient(180deg,#3f51b5 0,#3f51b5);transition:.1s ease-in-out}.mdlext-layout__sticky-header.mdlext-is-scroll{background:transparent linear-gradient(180deg,rgba(63,81,181,.98) 100%,rgba(63,81,181,.95) 0)}:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__drawer-button{visibility:hidden}:not(.is-small-screen) .mdlext-layout__sticky-header .mdl-layout__header-row{padding-left:16px}.is-small-screen.has-drawer .mdlext-layout__sticky-header,:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header{display:-ms-flexbox;display:flex}.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button,:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__drawer-button{visibility:visible}.is-small-screen.has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row,:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header .mdl-layout__header-row{padding-left:64px}dialog.mdlext-dialog{position:absolute;border:0;opacity:0;padding:0;background-color:transparent}dialog.mdlext-dialog[open]{animation:mdlext-open-dialog .5s .2s forwards}dialog.mdlext-dialog[open]::-webkit-backdrop{animation:mdlext-darken-backdrop .2s forwards}dialog.mdlext-dialog[open]::backdrop{animation:mdlext-darken-backdrop .2s forwards}dialog.mdlext-dialog[open]+.backdrop{animation:mdlext-darken-backdrop .2s forwards}@keyframes mdlext-darken-backdrop{to{background:rgba(0,0,0,.86)}}@keyframes mdlext-open-dialog{to{opacity:1}}.mdlext-grid{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-ms-flex-align:stretch;align-items:stretch}.mdlext-grid.mdlext-grid--no-spacing{padding:0}.mdlext-cell{box-sizing:border-box}.mdlext-cell--top{-ms-flex-item-align:start;align-self:flex-start}.mdlext-cell--middle{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.mdlext-cell--bottom{-ms-flex-item-align:end;align-self:flex-end}.mdlext-cell--stretch{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell{margin:0}.mdlext-cell--order-1{-ms-flex-order:1;order:1}.mdlext-cell--order-2{-ms-flex-order:2;order:2}.mdlext-cell--order-3{-ms-flex-order:3;order:3}.mdlext-cell--order-4{-ms-flex-order:4;order:4}.mdlext-cell--order-5{-ms-flex-order:5;order:5}.mdlext-cell--order-6{-ms-flex-order:6;order:6}.mdlext-cell--order-7{-ms-flex-order:7;order:7}.mdlext-cell--order-8{-ms-flex-order:8;order:8}.mdlext-cell--order-9{-ms-flex-order:9;order:9}.mdlext-cell--order-10{-ms-flex-order:10;order:10}.mdlext-cell--order-11{-ms-flex-order:11;order:11}.mdlext-cell--order-12{-ms-flex-order:12;order:12}@media (max-width:479px){.mdlext-grid{padding:8px}.mdlext-cell{margin:8px;width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell{width:100%}.mdlext-cell--hide-phone{display:none!important}.mdlext-cell--order-1-phone.mdlext-cell--order-1-phone{-ms-flex-order:1;order:1}.mdlext-cell--order-2-phone.mdlext-cell--order-2-phone{-ms-flex-order:2;order:2}.mdlext-cell--order-3-phone.mdlext-cell--order-3-phone{-ms-flex-order:3;order:3}.mdlext-cell--order-4-phone.mdlext-cell--order-4-phone{-ms-flex-order:4;order:4}.mdlext-cell--order-5-phone.mdlext-cell--order-5-phone{-ms-flex-order:5;order:5}.mdlext-cell--order-6-phone.mdlext-cell--order-6-phone{-ms-flex-order:6;order:6}.mdlext-cell--order-7-phone.mdlext-cell--order-7-phone{-ms-flex-order:7;order:7}.mdlext-cell--order-8-phone.mdlext-cell--order-8-phone{-ms-flex-order:8;order:8}.mdlext-cell--order-9-phone.mdlext-cell--order-9-phone{-ms-flex-order:9;order:9}.mdlext-cell--order-10-phone.mdlext-cell--order-10-phone{-ms-flex-order:10;order:10}.mdlext-cell--order-11-phone.mdlext-cell--order-11-phone{-ms-flex-order:11;order:11}.mdlext-cell--order-12-phone.mdlext-cell--order-12-phone{-ms-flex-order:12;order:12}.mdlext-cell--1-col,.mdlext-cell--1-col-phone.mdlext-cell--1-col-phone{width:calc(25% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--1-col,.mdlext-grid--no-spacing>.mdlext-cell--1-col-phone.mdlext-cell--1-col-phone{width:25%}.mdlext-cell--2-col,.mdlext-cell--2-col-phone.mdlext-cell--2-col-phone{width:calc(50% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--2-col,.mdlext-grid--no-spacing>.mdlext-cell--2-col-phone.mdlext-cell--2-col-phone{width:50%}.mdlext-cell--3-col,.mdlext-cell--3-col-phone.mdlext-cell--3-col-phone{width:calc(75% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--3-col,.mdlext-grid--no-spacing>.mdlext-cell--3-col-phone.mdlext-cell--3-col-phone{width:75%}.mdlext-cell--4-col,.mdlext-cell--4-col-phone.mdlext-cell--4-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--4-col,.mdlext-grid--no-spacing>.mdlext-cell--4-col-phone.mdlext-cell--4-col-phone{width:100%}.mdlext-cell--5-col,.mdlext-cell--5-col-phone.mdlext-cell--5-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--5-col,.mdlext-grid--no-spacing>.mdlext-cell--5-col-phone.mdlext-cell--5-col-phone{width:100%}.mdlext-cell--6-col,.mdlext-cell--6-col-phone.mdlext-cell--6-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--6-col,.mdlext-grid--no-spacing>.mdlext-cell--6-col-phone.mdlext-cell--6-col-phone{width:100%}.mdlext-cell--7-col,.mdlext-cell--7-col-phone.mdlext-cell--7-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--7-col,.mdlext-grid--no-spacing>.mdlext-cell--7-col-phone.mdlext-cell--7-col-phone{width:100%}.mdlext-cell--8-col,.mdlext-cell--8-col-phone.mdlext-cell--8-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--8-col,.mdlext-grid--no-spacing>.mdlext-cell--8-col-phone.mdlext-cell--8-col-phone{width:100%}.mdlext-cell--9-col,.mdlext-cell--9-col-phone.mdlext-cell--9-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--9-col,.mdlext-grid--no-spacing>.mdlext-cell--9-col-phone.mdlext-cell--9-col-phone{width:100%}.mdlext-cell--10-col,.mdlext-cell--10-col-phone.mdlext-cell--10-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--10-col,.mdlext-grid--no-spacing>.mdlext-cell--10-col-phone.mdlext-cell--10-col-phone{width:100%}.mdlext-cell--11-col,.mdlext-cell--11-col-phone.mdlext-cell--11-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--11-col,.mdlext-grid--no-spacing>.mdlext-cell--11-col-phone.mdlext-cell--11-col-phone{width:100%}.mdlext-cell--12-col,.mdlext-cell--12-col-phone.mdlext-cell--12-col-phone{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--12-col,.mdlext-grid--no-spacing>.mdlext-cell--12-col-phone.mdlext-cell--12-col-phone{width:100%}.mdlext-cell--1-offset,.mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone{margin-left:calc(25% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--1-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--1-offset-phone.mdlext-cell--1-offset-phone{margin-left:25%}.mdlext-cell--2-offset,.mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone{margin-left:calc(50% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--2-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--2-offset-phone.mdlext-cell--2-offset-phone{margin-left:50%}.mdlext-cell--3-offset,.mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone{margin-left:calc(75% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--3-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--3-offset-phone.mdlext-cell--3-offset-phone{margin-left:75%}}@media (min-width:480px) and (max-width:839px){.mdlext-grid{padding:8px}.mdlext-cell{margin:8px;width:calc(50% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell{width:50%}.mdlext-cell--hide-tablet{display:none!important}.mdlext-cell--order-1-tablet.mdlext-cell--order-1-tablet{-ms-flex-order:1;order:1}.mdlext-cell--order-2-tablet.mdlext-cell--order-2-tablet{-ms-flex-order:2;order:2}.mdlext-cell--order-3-tablet.mdlext-cell--order-3-tablet{-ms-flex-order:3;order:3}.mdlext-cell--order-4-tablet.mdlext-cell--order-4-tablet{-ms-flex-order:4;order:4}.mdlext-cell--order-5-tablet.mdlext-cell--order-5-tablet{-ms-flex-order:5;order:5}.mdlext-cell--order-6-tablet.mdlext-cell--order-6-tablet{-ms-flex-order:6;order:6}.mdlext-cell--order-7-tablet.mdlext-cell--order-7-tablet{-ms-flex-order:7;order:7}.mdlext-cell--order-8-tablet.mdlext-cell--order-8-tablet{-ms-flex-order:8;order:8}.mdlext-cell--order-9-tablet.mdlext-cell--order-9-tablet{-ms-flex-order:9;order:9}.mdlext-cell--order-10-tablet.mdlext-cell--order-10-tablet{-ms-flex-order:10;order:10}.mdlext-cell--order-11-tablet.mdlext-cell--order-11-tablet{-ms-flex-order:11;order:11}.mdlext-cell--order-12-tablet.mdlext-cell--order-12-tablet{-ms-flex-order:12;order:12}.mdlext-cell--1-col,.mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--1-col,.mdlext-grid--no-spacing>.mdlext-cell--1-col-tablet.mdlext-cell--1-col-tablet{width:12.5%}.mdlext-cell--2-col,.mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet{width:calc(25% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--2-col,.mdlext-grid--no-spacing>.mdlext-cell--2-col-tablet.mdlext-cell--2-col-tablet{width:25%}.mdlext-cell--3-col,.mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--3-col,.mdlext-grid--no-spacing>.mdlext-cell--3-col-tablet.mdlext-cell--3-col-tablet{width:37.5%}.mdlext-cell--4-col,.mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet{width:calc(50% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--4-col,.mdlext-grid--no-spacing>.mdlext-cell--4-col-tablet.mdlext-cell--4-col-tablet{width:50%}.mdlext-cell--5-col,.mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--5-col,.mdlext-grid--no-spacing>.mdlext-cell--5-col-tablet.mdlext-cell--5-col-tablet{width:62.5%}.mdlext-cell--6-col,.mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet{width:calc(75% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--6-col,.mdlext-grid--no-spacing>.mdlext-cell--6-col-tablet.mdlext-cell--6-col-tablet{width:75%}.mdlext-cell--7-col,.mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--7-col,.mdlext-grid--no-spacing>.mdlext-cell--7-col-tablet.mdlext-cell--7-col-tablet{width:87.5%}.mdlext-cell--8-col,.mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--8-col,.mdlext-grid--no-spacing>.mdlext-cell--8-col-tablet.mdlext-cell--8-col-tablet{width:100%}.mdlext-cell--9-col,.mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--9-col,.mdlext-grid--no-spacing>.mdlext-cell--9-col-tablet.mdlext-cell--9-col-tablet{width:100%}.mdlext-cell--10-col,.mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--10-col,.mdlext-grid--no-spacing>.mdlext-cell--10-col-tablet.mdlext-cell--10-col-tablet{width:100%}.mdlext-cell--11-col,.mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--11-col,.mdlext-grid--no-spacing>.mdlext-cell--11-col-tablet.mdlext-cell--11-col-tablet{width:100%}.mdlext-cell--12-col,.mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--12-col,.mdlext-grid--no-spacing>.mdlext-cell--12-col-tablet.mdlext-cell--12-col-tablet{width:100%}.mdlext-cell--1-offset,.mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet{margin-left:calc(12.5% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--1-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--1-offset-tablet.mdlext-cell--1-offset-tablet{margin-left:12.5%}.mdlext-cell--2-offset,.mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet{margin-left:calc(25% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--2-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--2-offset-tablet.mdlext-cell--2-offset-tablet{margin-left:25%}.mdlext-cell--3-offset,.mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet{margin-left:calc(37.5% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--3-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--3-offset-tablet.mdlext-cell--3-offset-tablet{margin-left:37.5%}.mdlext-cell--4-offset,.mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet{margin-left:calc(50% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--4-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--4-offset-tablet.mdlext-cell--4-offset-tablet{margin-left:50%}.mdlext-cell--5-offset,.mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet{margin-left:calc(62.5% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--5-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--5-offset-tablet.mdlext-cell--5-offset-tablet{margin-left:62.5%}.mdlext-cell--6-offset,.mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet{margin-left:calc(75% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--6-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--6-offset-tablet.mdlext-cell--6-offset-tablet{margin-left:75%}.mdlext-cell--7-offset,.mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet{margin-left:calc(87.5% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--7-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--7-offset-tablet.mdlext-cell--7-offset-tablet{margin-left:87.5%}}@media (min-width:840px){.mdlext-grid{padding:8px}.mdlext-cell{margin:8px;width:calc(33.33333% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell{width:33.33333%}.mdlext-cell--hide-desktop{display:none!important}.mdlext-cell--order-1-desktop.mdlext-cell--order-1-desktop{-ms-flex-order:1;order:1}.mdlext-cell--order-2-desktop.mdlext-cell--order-2-desktop{-ms-flex-order:2;order:2}.mdlext-cell--order-3-desktop.mdlext-cell--order-3-desktop{-ms-flex-order:3;order:3}.mdlext-cell--order-4-desktop.mdlext-cell--order-4-desktop{-ms-flex-order:4;order:4}.mdlext-cell--order-5-desktop.mdlext-cell--order-5-desktop{-ms-flex-order:5;order:5}.mdlext-cell--order-6-desktop.mdlext-cell--order-6-desktop{-ms-flex-order:6;order:6}.mdlext-cell--order-7-desktop.mdlext-cell--order-7-desktop{-ms-flex-order:7;order:7}.mdlext-cell--order-8-desktop.mdlext-cell--order-8-desktop{-ms-flex-order:8;order:8}.mdlext-cell--order-9-desktop.mdlext-cell--order-9-desktop{-ms-flex-order:9;order:9}.mdlext-cell--order-10-desktop.mdlext-cell--order-10-desktop{-ms-flex-order:10;order:10}.mdlext-cell--order-11-desktop.mdlext-cell--order-11-desktop{-ms-flex-order:11;order:11}.mdlext-cell--order-12-desktop.mdlext-cell--order-12-desktop{-ms-flex-order:12;order:12}.mdlext-cell--1-col,.mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop{width:calc(8.33333% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--1-col,.mdlext-grid--no-spacing>.mdlext-cell--1-col-desktop.mdlext-cell--1-col-desktop{width:8.33333%}.mdlext-cell--2-col,.mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop{width:calc(16.66667% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--2-col,.mdlext-grid--no-spacing>.mdlext-cell--2-col-desktop.mdlext-cell--2-col-desktop{width:16.66667%}.mdlext-cell--3-col,.mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop{width:calc(25% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--3-col,.mdlext-grid--no-spacing>.mdlext-cell--3-col-desktop.mdlext-cell--3-col-desktop{width:25%}.mdlext-cell--4-col,.mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop{width:calc(33.33333% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--4-col,.mdlext-grid--no-spacing>.mdlext-cell--4-col-desktop.mdlext-cell--4-col-desktop{width:33.33333%}.mdlext-cell--5-col,.mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop{width:calc(41.66667% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--5-col,.mdlext-grid--no-spacing>.mdlext-cell--5-col-desktop.mdlext-cell--5-col-desktop{width:41.66667%}.mdlext-cell--6-col,.mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop{width:calc(50% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--6-col,.mdlext-grid--no-spacing>.mdlext-cell--6-col-desktop.mdlext-cell--6-col-desktop{width:50%}.mdlext-cell--7-col,.mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop{width:calc(58.33333% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--7-col,.mdlext-grid--no-spacing>.mdlext-cell--7-col-desktop.mdlext-cell--7-col-desktop{width:58.33333%}.mdlext-cell--8-col,.mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop{width:calc(66.66667% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--8-col,.mdlext-grid--no-spacing>.mdlext-cell--8-col-desktop.mdlext-cell--8-col-desktop{width:66.66667%}.mdlext-cell--9-col,.mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop{width:calc(75% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--9-col,.mdlext-grid--no-spacing>.mdlext-cell--9-col-desktop.mdlext-cell--9-col-desktop{width:75%}.mdlext-cell--10-col,.mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop{width:calc(83.33333% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--10-col,.mdlext-grid--no-spacing>.mdlext-cell--10-col-desktop.mdlext-cell--10-col-desktop{width:83.33333%}.mdlext-cell--11-col,.mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop{width:calc(91.66667% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--11-col,.mdlext-grid--no-spacing>.mdlext-cell--11-col-desktop.mdlext-cell--11-col-desktop{width:91.66667%}.mdlext-cell--12-col,.mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop{width:calc(100% - 16px)}.mdlext-grid--no-spacing>.mdlext-cell--12-col,.mdlext-grid--no-spacing>.mdlext-cell--12-col-desktop.mdlext-cell--12-col-desktop{width:100%}.mdlext-cell--1-offset,.mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop{margin-left:calc(8.33333% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--1-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--1-offset-desktop.mdlext-cell--1-offset-desktop{margin-left:8.33333%}.mdlext-cell--2-offset,.mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop{margin-left:calc(16.66667% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--2-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--2-offset-desktop.mdlext-cell--2-offset-desktop{margin-left:16.66667%}.mdlext-cell--3-offset,.mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop{margin-left:calc(25% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--3-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--3-offset-desktop.mdlext-cell--3-offset-desktop{margin-left:25%}.mdlext-cell--4-offset,.mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop{margin-left:calc(33.33333% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--4-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--4-offset-desktop.mdlext-cell--4-offset-desktop{margin-left:33.33333%}.mdlext-cell--5-offset,.mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop{margin-left:calc(41.66667% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--5-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--5-offset-desktop.mdlext-cell--5-offset-desktop{margin-left:41.66667%}.mdlext-cell--6-offset,.mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop{margin-left:calc(50% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--6-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--6-offset-desktop.mdlext-cell--6-offset-desktop{margin-left:50%}.mdlext-cell--7-offset,.mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop{margin-left:calc(58.33333% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--7-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--7-offset-desktop.mdlext-cell--7-offset-desktop{margin-left:58.33333%}.mdlext-cell--8-offset,.mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop{margin-left:calc(66.66667% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--8-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--8-offset-desktop.mdlext-cell--8-offset-desktop{margin-left:66.66667%}.mdlext-cell--9-offset,.mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop{margin-left:calc(75% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--9-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--9-offset-desktop.mdlext-cell--9-offset-desktop{margin-left:75%}.mdlext-cell--10-offset,.mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop{margin-left:calc(83.33333% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--10-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--10-offset-desktop.mdlext-cell--10-offset-desktop{margin-left:83.33333%}.mdlext-cell--11-offset,.mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop{margin-left:calc(91.66667% + 8px)}.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--11-offset,.mdlext-grid.mdlext-grid--no-spacing>.mdlext-cell--11-offset-desktop.mdlext-cell--11-offset-desktop{margin-left:91.66667%}}ul.mdlext-lightboard{list-style:none}.mdlext-lightboard{margin:0 auto;padding:0;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:stretch;align-items:stretch}.mdlext-lightboard,.mdlext-lightboard *,.mdlext-lightboard :after,.mdlext-lightboard :before,.mdlext-lightboard input[type=search]{box-sizing:border-box}.mdlext-lightboard .mdlext-lightboard__slide{background-color:#f8f8f8;border:1px solid #d8d8d8;border-radius:5px;box-shadow:2px 2px 6px -1px hsla(300,5%,85%,.5);position:relative;display:block;max-width:250px}.mdlext-lightboard .mdlext-lightboard__slide:before{content:"";display:block;padding-top:100%}.mdlext-lightboard .mdlext-lightboard__slide:active,.mdlext-lightboard .mdlext-lightboard__slide:focus,.mdlext-lightboard .mdlext-lightboard__slide:hover{border-color:#b8b8b8;background-color:#e8e8e8;box-shadow:2px 2px 12px -1px #dbd7db}.mdlext-lightboard .mdlext-lightboard__slide:active figcaption,.mdlext-lightboard .mdlext-lightboard__slide:focus figcaption,.mdlext-lightboard .mdlext-lightboard__slide:hover figcaption{color:#000!important;background-color:hsla(0,0%,100%,.2)}.mdlext-lightboard .mdlext-lightboard__slide:focus{outline-offset:-2px;outline-color:inherit}.mdlext-lightboard .mdlext-lightboard__slide[aria-selected=true]{background-color:#e8e8e8}.mdlext-lightboard .mdlext-lightboard__slide[aria-selected=true] figcaption{color:#000!important;background-color:hsla(0,0%,100%,.2)}.mdlext-lightboard .mdlext-lightboard__slide__frame,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container{text-decoration:none;display:block;overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0}.mdlext-lightboard .mdlext-lightboard__slide__frame:focus,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:focus{outline-offset:-2px;outline-color:inherit}.mdlext-lightboard .mdlext-lightboard__slide__frame .mdl-ripple,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container .mdl-ripple{background:#3f51b5}.mdlext-lightboard .mdlext-lightboard__slide__frame figure,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure{display:block;position:absolute;top:0;left:0;right:0;bottom:0}.mdlext-lightboard .mdlext-lightboard__slide__frame figure img,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure img{position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;max-width:100%;max-height:100%;border-width:0;border-radius:3px}.mdlext-lightboard .mdlext-lightboard__slide__frame figure figcaption,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container figure figcaption{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1;letter-spacing:0;color:#bdbdbd;position:absolute;bottom:-2px;white-space:nowrap;overflow:hidden;max-width:100%;width:100%;text-align:center;text-overflow:ellipsis;padding:4px 0}.mdlext-lightboard .mdlext-lightboard__slide__frame:hover figcaption,.mdlext-lightboard .mdlext-lightboard__slide__ripple-container:hover figcaption{color:#000!important;background-color:hsla(0,0%,100%,.2)}.mdlext-lightboard{padding:-1px}.mdlext-lightboard .mdlext-lightboard__slide{margin:1px;width:calc(1 / 2 * 100% - 2px)}.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:8px}.mdlext-lightboard.mdlext-lightboard--no-spacing{padding:0}.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide{margin:0;width:50%}@media (min-width:480px) and (max-width:659px){.mdlext-lightboard{padding:-2px}.mdlext-lightboard .mdlext-lightboard__slide{margin:2px;width:calc(1 / 4 * 100% - 4px)}.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:8px}.mdlext-lightboard.mdlext-lightboard--no-spacing{padding:0}.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide{margin:0;width:25%}}@media (min-width:660px) and (max-width:839px){.mdlext-lightboard{padding:-2px}.mdlext-lightboard .mdlext-lightboard__slide{margin:2px;width:calc(1 / 5 * 100% - 4px)}.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:8px}.mdlext-lightboard.mdlext-lightboard--no-spacing{padding:0}.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide{margin:0;width:20%}}@media (min-width:840px) and (max-width:1199px){.mdlext-lightboard{padding:-4px}.mdlext-lightboard .mdlext-lightboard__slide{margin:4px;width:calc(1 / 6 * 100% - 8px)}.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:12px}.mdlext-lightboard.mdlext-lightboard--no-spacing{padding:0}.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide{margin:0;width:16.66667%}}@media (min-width:1200px){.mdlext-lightboard{padding:-4px}.mdlext-lightboard .mdlext-lightboard__slide{margin:4px;width:calc(1 / 7 * 100% - 8px)}.mdlext-lightboard .mdlext-lightboard__slide .mdlext-lightboard__slide__frame figure{margin:12px}.mdlext-lightboard.mdlext-lightboard--no-spacing{padding:0}.mdlext-lightboard.mdlext-lightboard--no-spacing .mdlext-lightboard__slide{margin:0;width:14.28571%}}.mdlext-lightbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;position:relative;width:auto;max-width:100%;margin:0 auto;border:0;border-radius:0;background-color:#fff;outline:0;display:block}.mdlext-lightbox,.mdlext-lightbox *,.mdlext-lightbox :after,.mdlext-lightbox :before,.mdlext-lightbox input[type=search]{box-sizing:border-box}.mdlext-lightbox .mdlext-lightbox__slider{position:absolute;top:0;left:0;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.mdlext-lightbox .mdlext-lightbox__slider .mdlext-lightbox__slider__slide{-ms-flex-negative:0;flex-shrink:0;display:block;text-align:left;color:#7f7f7f;background-size:cover;background-position:50%;background-repeat:no-repeat}.mdlext-lightbox figure{margin:0;padding:0;position:relative}.mdlext-lightbox figure img{width:100%;max-width:100%;height:auto;border:0;outline:0}.mdlext-lightbox figure figcaption{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1;letter-spacing:0;display:block;position:absolute;bottom:0;left:0;right:0;max-width:100%;height:auto;max-height:50%;overflow:auto;padding:8px;background-color:hsla(0,0%,100%,.76);transform-origin:bottom;transform:scaleY(0);transition:.2s ease-in-out}.mdlext-lightbox figure figcaption.mdlext-lightbox__show-figcaption{transform:scaleY(1)}.mdlext-lightbox figure figcaption tbody th{text-align:left}.mdlext-lightbox figure figcaption tbody td,.mdlext-lightbox figure figcaption tbody th{vertical-align:text-top}.mdlext-lightbox .mdl-card__menu{color:#fff;z-index:1}.mdlext-lightbox footer{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;background-color:hsla(0,0%,100%,.86)}.mdlext-lightbox footer .mdl-card__supporting-text{-ms-flex:1;flex:1;overflow:hidden;padding:0;height:18px;width:100%}.mdlext-lightbox footer nav{display:-ms-flexbox;display:flex}.mdlext-lightbox.mdlext-lightbox--sticky-footer footer{position:fixed;bottom:0;left:0}ul.mdlext-carousel{list-style:none}.mdlext-carousel{overflow:hidden;width:100%;display:block;white-space:nowrap;font-size:0;background-color:transparent}.mdlext-carousel,.mdlext-carousel__slide{box-sizing:border-box;margin:0;padding:0;height:100%}.mdlext-carousel__slide{display:inline-block;position:relative;outline:0;border-top:2px solid transparent}.mdlext-carousel__slide[aria-selected=true] figcaption,.mdlext-carousel__slide[aria-selected] figcaption{color:#000!important;background-color:hsla(0,0%,100%,.25)}.mdlext-carousel__slide[aria-selected=true]:after,.mdlext-carousel__slide[aria-selected]:after{height:2px;width:100%;display:block;content:" ";top:-2px;left:0;position:absolute;background:#ff4081;animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;transition:all 1s cubic-bezier(.4,0,1,1)}.mdlext-carousel__slide a{text-decoration:none}.mdlext-carousel__slide figure{box-sizing:border-box;position:relative;height:100%;margin:0;padding:0}.mdlext-carousel__slide figure img{box-sizing:border-box;max-height:100%}.mdlext-carousel__slide figure figcaption{box-sizing:border-box;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1;letter-spacing:0;color:#bdbdbd;position:absolute;bottom:0;left:0;white-space:nowrap;overflow:hidden;max-width:100%;width:100%;text-align:center;text-overflow:ellipsis;padding:4px 0}.mdlext-carousel__slide figure:hover figcaption{color:#000!important;background-color:hsla(0,0%,100%,.25)}.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container{text-decoration:none;display:block;overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0;outline:0}.mdlext-carousel__slide .mdlext-carousel__slide__ripple-container .mdl-ripple{background:#3f51b5}.mdlext-selectfield{box-sizing:border-box;position:relative;font-size:16px;display:inline-block;width:300px;max-width:100%;margin:0;padding:20px 0}.mdlext-selectfield .mdl-button{bottom:20px;position:absolute}.mdlext-selectfield:after{border-top:.5em solid inherit;border-top-width:.5em;border-top-style:solid;border-top-color:inherit;border-left:.35em solid transparent;border-right:.35em solid transparent;position:absolute;right:.5em;top:50%;transform:translateY(-50%);pointer-events:none}.mdlext-selectfield.is-disabled:after,.mdlext-selectfield:after{content:"";width:0;height:0;font-size:inherit;line-height:inherit}.mdlext-selectfield.is-disabled:after{color:rgba(0,0,0,.12);border-top:.5em solid rgba(0,0,0,.12);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-selectfield--align-right{text-align:right}.mdlext-selectfield--full-width{width:100%}.mdlext-selectfield--expandable{min-height:32px;min-width:32px;width:auto}.mdlext-selectfield__select{box-sizing:border-box;border:0;border-radius:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;text-indent:.01px;text-overflow:"";outline:none;box-shadow:none;font-size:16px;font-family:Helvetica,Arial,sans-serif;padding:4px calc(1.2em + 4px) 4px 0;width:100%;border-bottom:1px solid rgba(0,0,0,.12);display:block;margin:0;background:none;text-align:left;color:inherit}.mdlext-selectfield__select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.mdlext-selectfield__select:focus::-ms-value{background-color:inherit;color:inherit}.mdlext-selectfield__select::-ms-expand{display:none}.mdlext-selectfield.is-focused .mdlext-selectfield__select{outline:none}.mdlext-selectfield.is-invalid .mdlext-selectfield__select{border-color:#d50000;box-shadow:none}.mdlext-selectfield.is-disabled .mdlext-selectfield__select,fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{border-bottom:1px dotted rgba(0,0,0,.12);color:rgba(0,0,0,.26);background-color:transparent}.mdlext-selectfield__select option{color:rgba(0,0,0,.87);box-sizing:border-box;background-color:inherit}.mdlext-selectfield__label{box-sizing:border-box;color:rgba(0,0,0,.26);font-size:16px;top:24px;bottom:0;left:0;right:0;pointer-events:none;position:absolute;display:block;width:100%;overflow:hidden;white-space:nowrap;text-align:left}.mdlext-selectfield.has-placeholder .mdlext-selectfield__label,.mdlext-selectfield.is-dirty .mdlext-selectfield__label{visibility:hidden}.mdlext-selectfield--floating-label .mdlext-selectfield__label{transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label{transition:none}.mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label,fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.26)}.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label{color:#3f51b5;font-size:12px;top:4px;visibility:visible}.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder .mdlext-selectfield__label,.mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder .mdlext-selectfield__label{top:-16px}.mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label{color:#d50000;font-size:12px}.mdlext-selectfield__label:after{background-color:#3f51b5;bottom:20px;content:"";height:2px;left:45%;position:absolute;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdlext-selectfield.is-focused .mdlext-selectfield__label:after{left:0;visibility:visible;width:100%}.mdlext-selectfield.is-invalid .mdlext-selectfield__label:after{background-color:#d50000}.mdlext-selectfield__error{color:#d50000;font-size:12px;position:absolute;margin-top:3px;visibility:hidden;display:block}.mdlext-selectfield.is-invalid .mdlext-selectfield__error{visibility:visible}.mdlext-selectfield__expandable-holder{display:inline-block;position:relative;margin-left:32px;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);max-width:.1px}.mdlext-selectfield.is-dirty .mdlext-selectfield__expandable-holder,.mdlext-selectfield.is-focused .mdlext-selectfield__expandable-holder{max-width:600px}.mdlext-selectfield__expandable-holder .mdlext-selectfield__label:after{bottom:0}.mdlext-menu-button{box-sizing:border-box;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:1;letter-spacing:0;text-transform:none;position:relative;height:36px;padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch}.mdlext-menu-button>*{margin:0;padding:0 0 0 8px}.mdlext-menu-button>:first-child{padding-left:0}.mdlext-menu-button>:last-child:not(:only-child):not(.mdlext-menu__item__caption){margin-left:auto}.mdlext-menu-button__caption{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.mdlext-menu,.mdlext-menu__item{box-sizing:border-box;margin:0;padding:0;list-style:none;display:-ms-flexbox;display:flex}.mdlext-menu{position:absolute;background:#fff;z-index:1000;min-width:124px;border-radius:2px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;padding:0;overflow:hidden;overflow-y:auto}.mdlext-menu:focus{outline-offset:-1px;outline-width:1px}.mdlext-menu[hidden]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;pointer-events:none}.mdlext-menu__item{font-size:14px;font-weight:400;line-height:24px;letter-spacing:0;color:rgba(0,0,0,.87);background-color:#fff;position:relative;padding:0 16px 0 24px;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;text-decoration:none;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:40px;overflow:hidden}.mdlext-menu__item[aria-selected=true]{background-color:#e0e0e0}.mdlext-menu__item[aria-selected=true]:before{content:"\2713";position:absolute;font-size:1.4em;left:4px;top:50%;transform:translateY(-50%);pointer-events:none}.mdlext-menu__item:hover:not([disabled]){background-color:#eee}.mdlext-menu__item:focus{outline-offset:-2px;outline-width:1px;outline-color:#bdbdbd;background-color:#eee}.mdlext-menu__item::-moz-focus-inner{border:0}.mdlext-menu__item[disabled]{color:#bdbdbd;background-color:transparent;cursor:auto;pointer-events:none}.mdlext-menu__item[disabled]>*{color:#bdbdbd}.mdlext-menu__item__caption{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mdlext-menu__item>*{margin:0;padding:0 0 0 8px}.mdlext-menu__item>:first-child{padding-left:0}.mdlext-menu__item>:last-child:not(:only-child):not(.mdlext-menu__item__caption){margin-left:auto}.mdlext-menu__item-separator{margin:0;padding:0;border-bottom:1px solid rgba(0,0,0,.12)}.mdlext-bordered-fields,.mdlext-bordered-fields *{box-sizing:border-box}.mdlext-bordered-fields .mdl-textfield,.mdlext-bordered-fields .mdlext-selectfield{padding:0;margin:0 0 20px}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{height:46px;background-color:hsla(0,0%,100%,.2);border:1px solid rgba(0,0,0,.26);border-radius:3px;padding:20px 8px 4px;font-size:16px;font-weight:400;color:inherit}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled{color:rgba(0,0,0,.12);background-color:hsla(0,0%,100%,.2);border-color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus{background-color:hsla(0,0%,93%,.2);border-color:#3f51b5}.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{padding-right:calc(1em + 8px)}.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select{color:inherit;border-color:#d50000;background-color:hsla(0,100%,92%,.5)}.mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,.mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,.mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus{border-color:#a20000;background-color:hsla(0,100%,92%,.5)}.mdlext-bordered-fields .mdlext-selectfield:after{top:auto;bottom:4px}.mdlext-bordered-fields .mdlext-selectfield.is-disabled:after,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield:after{color:rgba(0,0,0,.12);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid rgba(0,0,0,.12);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{color:rgba(0,0,0,.12);background-color:hsla(0,0%,100%,.2);border-color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.is-dirty .mdlext-selectfield__label{visibility:hidden}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.26);font-size:16px;font-weight:400;padding-left:8px;top:auto;bottom:4px}.mdlext-bordered-fields .mdl-textfield .mdl-textfield__label:after,.mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label:after,.mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label:after,.mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label:after{background-color:transparent!important;visibility:hidden!important}.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label{color:#3f51b5;font-size:12px;font-weight:400;top:auto;bottom:24px;visibility:visible}.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label{color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label{color:#d50000}.mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label,.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:rgba(0,0,0,.12)}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>.mdl-button,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>.mdl-button,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>i{position:absolute;bottom:2px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>i{bottom:6px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button:first-child,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i:first-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button:first-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i:first-child{left:4px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__select,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__input,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__select,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__select{padding-left:32px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__label,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>.mdl-button~.mdlext-selectfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdl-textfield__label,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-left>i~.mdlext-selectfield__label{left:24px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>.mdl-textfield__input,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>.mdl-textfield__input{padding-right:32px}.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>.mdl-button:last-child,.mdlext-bordered-fields .mdl-textfield.mdlext-bordered-fields__icon-right>i:last-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>.mdl-button:last-child,.mdlext-bordered-fields .mdlext-selectfield.mdlext-bordered-fields__icon-right>i:last-child{left:auto;right:4px}.mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,.mdlext-bordered-fields .mdl-textfield.is-disabled i,.mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button,.mdlext-bordered-fields .mdlext-selectfield.is-disabled i,.mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,.mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button,.mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i{color:rgba(0,0,0,.12);pointer-events:none}.mdlext-collapsible{cursor:pointer}.mdlext-collapsible,.mdlext-collapsible-group,.mdlext-collapsible-region{box-sizing:border-box}.mdlext-collapsible-group[hidden],.mdlext-collapsible-region[hidden]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;pointer-events:none}.mdlext-aria-toggle-plus-minus{font-family:inherit;font-weight:inherit;font-style:inherit;font-size:1.4em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-toggle-plus-minus:after{content:"+";margin-left:0}[aria-expanded=true]>.mdlext-aria-toggle-plus-minus:after{content:"-";margin-left:0}.mdlext-aria-toggle-material-icons{font-family:Material Icons;font-weight:inherit;font-style:inherit;font-size:1.3em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;vertical-align:middle;-webkit-font-smoothing:antialiased;-webkit-font-feature-settings:"liga";text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdlext-aria-toggle-material-icons:after{content:"expand_more";margin-left:-8px}[aria-expanded=true]>.mdlext-aria-toggle-material-icons:after{content:"expand_less";margin-left:-8px}.mdlext-accordion{margin:0;padding:0;list-style:none;display:-ms-flexbox;display:flex}.mdlext-accordion,.mdlext-accordion *{box-sizing:border-box}.mdlext-accordion__panel{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.mdlext-accordion__panel,.mdlext-accordion__tab{box-sizing:border-box;position:relative;overflow:hidden;display:-ms-flexbox;display:flex}.mdlext-accordion__tab{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em;font-weight:400;line-height:1.1;margin:0;padding:0;min-width:56px;min-height:56px;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#000;background-color:hsla(0,0%,62%,.2);cursor:pointer}.mdlext-accordion__tab:focus{outline-offset:-2px;outline-color:invert;outline-width:2px}.mdlext-accordion__tab[aria-expanded=true]{background-color:hsla(0,0%,62%,.3)}.mdlext-accordion__tab[aria-selected=true]{background-color:hsla(0,0%,62%,.4)}.mdlext-accordion__tab[disabled]{background-color:hsla(0,0%,62%,.12);color:rgba(0,0,0,.26);pointer-events:none}.mdlext-accordion__tab[disabled]>*{color:rgba(0,0,0,.26)}.mdlext-accordion__tab:hover:not([disabled]){background-color:hsla(0,0%,62%,.4)}.mdlext-accordion__tab>*{margin:0;padding:0}.mdlext-accordion__tab__caption{padding-left:8px;padding-right:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mdlext-accordion__tab>:first-child{padding-left:0}.mdlext-accordion__tab--ripple[aria-selected=true]:before{content:"";position:absolute;top:50%;left:50%;background:hsla(0,0%,100%,.5);opacity:0;border-radius:100%;transform:scale(1) translate(-50%);transform-origin:50% 50%}.mdlext-accordion__tab--ripple[aria-selected=true]:focus:not(:active):before{animation:mdlext-accordion-tab-ripple 1s cubic-bezier(.4,0,.4,1) .01s alternate forwards}.mdlext-accordion__tabpanel{box-sizing:border-box;margin:0;padding:0 8px;color:inherit;background-color:transparent;display:block;overflow:auto;-ms-flex-positive:1;flex-grow:1}.mdlext-accordion__tabpanel[hidden]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.mdlext-accordion--vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.mdlext-accordion--vertical .mdlext-accordion__panel{min-height:56px;-ms-flex-direction:column;flex-direction:column}.mdlext-accordion--vertical .mdlext-accordion__tab{height:56px;border-top:1px solid hsla(0,0%,62%,.5);padding-left:8px;padding-right:8px}.mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected=true]:after{position:absolute;bottom:0;left:0;height:1px;width:100%;display:block;content:" ";background-color:hsla(0,0%,59%,.5);animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;transition:all 1s cubic-bezier(.4,0,1,1)}.mdlext-accordion--vertical .mdlext-accordion__tab>*{padding-left:8px}.mdlext-accordion--vertical .mdlext-accordion__tab>:first-child{padding-left:0}.mdlext-accordion--vertical .mdlext-accordion__tab>:last-child:not(:only-child):not(.mdlext-accordion__tab__caption){margin-left:auto}.mdlext-accordion--vertical .mdlext-accordion__tab--ripple[aria-selected=true]:before{width:5%;height:10%}.mdlext-accordion--vertical .mdlext-accordion__tabpanel{border-top:1px solid hsla(0,0%,62%,.5)}.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation{transform:scaleY(1);animation:mdlext-accordion-show-tabpanel-y .2s ease-in-out}.mdlext-accordion--vertical .mdlext-accordion__tabpanel--animation[hidden]{transform:scaleY(0);animation:mdlext-accordion-hide-tabpanel-y .2s ease-out;animation-delay:.1s}.mdlext-accordion--horizontal .mdlext-accordion__panel{min-width:56px;width:56px}.mdlext-accordion--horizontal[aria-multiselectable=true] .mdlext-accordion__panel.is-expanded{width:100%}.mdlext-accordion--horizontal .mdlext-accordion__tab{-ms-flex-direction:column-reverse;flex-direction:column-reverse;width:56px;white-space:nowrap;border-left:1px solid hsla(0,0%,62%,.5)}.mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected=true]:after{position:absolute;top:0;right:0;height:100%;width:1px;display:block;content:" ";background-color:hsla(0,0%,59%,.5)}.mdlext-accordion--horizontal .mdlext-accordion__tab>*{transform:rotate(-90deg) translateX(8px)}.mdlext-accordion--horizontal .mdlext-accordion__tab>:last-child:not(:only-child):not(.mdlext-accordion__tab__caption){margin-bottom:auto;transform:rotate(-90deg) translateX(0)}.mdlext-accordion--horizontal .mdlext-accordion__tab__caption{transform:rotate(-90deg) translateX(50%);padding-right:16px}.mdlext-accordion--horizontal .mdlext-accordion__tab--ripple[aria-selected=true]:before{width:10%;height:5%}.mdlext-accordion--horizontal .mdlext-accordion__tabpanel{border-left:1px solid hsla(0,0%,62%,.5)}.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation{transform:scaleX(1);animation:mdlext-accordion-show-tabpanel-x .2s ease-in-out}.mdlext-accordion--horizontal .mdlext-accordion__tabpanel--animation[hidden]{transform:scaleX(0);animation:mdlext-accordion-hide-tabpanel-x .2s ease-out}.mdlext-accordion__panel:first-child>.mdlext-accordion__tab{border-top-color:transparent;border-left-color:transparent}.mdlext-accordion[aria-multiselectable=false] .mdlext-accordion__panel.is-expanded{-ms-flex-positive:1;flex-grow:1}.mdlext-accordion[disabled] *{pointer-events:none}.mdlext-accordion[disabled] .mdlext-accordion__tab{background-color:hsla(0,0%,62%,.12);color:rgba(0,0,0,.26)}.mdlext-accordion[disabled] .mdlext-accordion__tab>*{color:rgba(0,0,0,.26)}.mdlext-accordion[disabled] .mdlext-accordion__tabpanel{opacity:.8;filter:blur(1px) grayscale(80%)}@keyframes mdlext-accordion-tab-ripple{0%{transform:scale(0);opacity:1}20%{transform:scale(25);opacity:1}to{opacity:0;transform:scale(40)}}@keyframes mdlext-accordion-show-tabpanel-y{0%{transform:scaleY(0)}60%{transform:scaleY(1.01)}80%{transform:scaleY(.98)}to{transform:scaleY(1)}}@keyframes mdlext-accordion-hide-tabpanel-y{0%{transform:scaleY(1)}60%{transform:scaleY(.98)}80%{transform:scaleY(1.01)}to{transform:scaleY(0)}}@keyframes mdlext-accordion-show-tabpanel-x{0%{transform:scaleX(0)}60%{transform:scaleX(1.01)}80%{transform:scaleX(.98)}to{transform:scaleX(1)}}@keyframes mdlext-accordion-hide-tabpanel-x{0%{transform:scaleX(1)}60%{transform:scaleX(.98)}80%{transform:scaleX(1.01)}to{transform:scaleX(0)}}.mdlext-light-color-theme{background-color:#fafafa;color:rgba(0,0,0,.87)}.mdlext-light-color-theme a{outline-color:inherit}.mdlext-light-color-theme .mdl-color--primary{background-color:#4caf50!important}.mdlext-light-color-theme .mdl-color--primary-contrast{background-color:#c8e6c9!important}.mdlext-light-color-theme .mdl-color--primary-dark{background-color:#388e3c!important}.mdlext-light-color-theme .mdl-color--accent{background-color:#e040fb!important}.mdlext-light-color-theme .mdl-color--accent-contrast{background-color:#fafafa!important}.mdlext-light-color-theme .mdl-color-text--primary{color:#4caf50!important}.mdlext-light-color-theme .mdl-color-text--primary-contrast{color:#c8e6c9!important}.mdlext-light-color-theme .mdl-color-text--primary-dark{color:#388e3c!important}.mdlext-light-color-theme .mdl-color-text--accent{color:#e040fb!important}.mdlext-light-color-theme .mdl-color-text--accent-contrast{color:#fafafa!important}.mdlext-light-color-theme a{color:#e040fb}.mdlext-light-color-theme .mdl-badge[data-badge]:after{background:#e040fb;color:#fafafa}.mdlext-light-color-theme .mdl-badge.mdl-badge--no-background[data-badge]:after{color:#e040fb;background:#fafafa}.mdlext-light-color-theme .mdl-button{background:transparent;color:#000}.mdlext-light-color-theme .mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdlext-light-color-theme .mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdlext-light-color-theme .mdl-button.mdl-button--colored{color:#4caf50}.mdlext-light-color-theme .mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-button--raised{background:hsla(0,0%,62%,.2)}.mdlext-light-color-theme .mdl-button--raised:active,.mdlext-light-color-theme .mdl-button--raised:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored{background:#4caf50;color:#c8e6c9}.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:active,.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active),.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored:hover{background-color:#3d8b40}.mdlext-light-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple{background:#c8e6c9}.mdlext-light-color-theme .mdl-button--fab{background:hsla(0,0%,62%,.2)}.mdlext-light-color-theme .mdl-button--fab:active,.mdlext-light-color-theme .mdl-button--fab:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored{background:#e040fb;color:#fafafa}.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:active,.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active),.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored:hover{background-color:#e040fb}.mdlext-light-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fafafa}.mdlext-light-color-theme .mdl-button--icon{color:inherit}.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary{color:#4caf50}.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple{background:#c8e6c9}.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdlext-light-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#c8e6c9;background-color:#4caf50}.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent{color:#e040fb}.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fafafa}.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdlext-light-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fafafa;background-color:#e040fb}.mdlext-light-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);background-color:transparent}.mdlext-light-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button--fab[disabled][disabled],.mdlext-light-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdlext-light-color-theme .mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded{background:transparent;color:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-track{background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-track{background:none;color:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 16px,#e040fb 0,#e040fb 0)}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-fill-upper{background:linear-gradient(270deg,transparent,transparent 16px,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 0)}.mdlext-light-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded::-moz-range-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded::-ms-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,#e040fb 0,#e040fb 37.5%,rgba(224,64,251,.26) 0,rgba(224,64,251,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded:active::-ms-thumb{background:#e040fb}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border-color:#e040fb;background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border-color:rgba(0,0,0,.26);background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 66.67%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12) 0,rgba(0,0,0,.12) 25%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 37.5%,rgba(0,0,0,.12) 0,rgba(0,0,0,.12) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 77.78%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled+.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb{border-color:rgba(0,0,0,.26);background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb{border-color:rgba(0,0,0,.26);background:transparent}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdlext-light-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 50%,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 100%)}.mdlext-light-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 25px,rgba(0,0,0,.26) 0,rgba(0,0,0,.26) 0)}.mdlext-light-color-theme .mdl-slider__background-flex{background:transparent}.mdlext-light-color-theme .mdl-slider__background-lower{background:#e040fb}.mdlext-light-color-theme .mdl-slider__background-upper{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield__input{border-bottom-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__input{border-color:#d32f2f}.mdlext-light-color-theme .mdl-textfield.is-disabled .mdl-textfield__input,.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input{background-color:transparent;border-bottom-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield__label{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-textfield__label:after{background-color:#e040fb}.mdlext-light-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label{color:#e040fb}.mdlext-light-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#d32f2f}.mdlext-light-color-theme .mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#d32f2f}.mdlext-light-color-theme .mdl-textfield__error{color:#d32f2f}.mdlext-light-color-theme .mdl-checkbox__box-outline{border-color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline{border-color:#e040fb}.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-checkbox__focus-helper{background-color:transparent}.mdlext-light-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(224,64,251,.26);background-color:rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-checkbox__tick-outline{background:transparent}.mdlext-light-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:#e040fb}.mdlext-light-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-checkbox__ripple-container .mdl-ripple{background:#e040fb}.mdlext-light-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple,.mdlext-light-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-radio__outer-circle{border-color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle{border-color:#e040fb}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle,.mdlext-light-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio{border-color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-radio__inner-circle{background:#e040fb}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle,.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__label,.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-radio__ripple-container .mdl-ripple{background:#e040fb}.mdlext-light-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple,.mdlext-light-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-icon-toggle__label{color:#616161}.mdlext-light-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:#e040fb}.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdlext-light-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-switch__track{background:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__track{background:rgba(224,64,251,.54)}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__track,.mdlext-light-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch{background:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-switch__thumb{background:#fafafa}.mdlext-light-color-theme .mdl-switch.is-checked .mdl-switch__thumb{background:#e040fb}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__thumb,.mdlext-light-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch{background:#bdbdbd}.mdlext-light-color-theme .mdl-switch__focus-helper{background-color:transparent}.mdlext-light-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper{background-color:rgba(0,0,0,.1)}.mdlext-light-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(224,64,251,.26);background-color:rgba(224,64,251,.26)}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__label,.mdlext-light-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch{color:#bdbdbd}.mdlext-light-color-theme .mdl-switch__ripple-container .mdl-ripple{background:#e040fb}.mdlext-light-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple,.mdlext-light-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-data-table{border-color:rgba(0,0,0,.12);background-color:#fafafa}.mdlext-light-color-theme .mdl-data-table tbody tr.is-selected,.mdlext-light-color-theme .mdl-data-table tbody tr:hover{background-color:#eee}.mdlext-light-color-theme .mdl-data-table th{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdlext-light-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdl-menu__outline{background:#fff}.mdlext-light-color-theme .mdl-menu__item{color:rgba(0,0,0,.87);background-color:transparent;outline-color:#bdbdbd}.mdlext-light-color-theme .mdl-menu__item--full-bleed-divider{border-bottom-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled],.mdlext-light-color-theme .mdl-menu__item[disabled]{color:#bdbdbd;background-color:transparent}.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:focus,.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled]:hover,.mdlext-light-color-theme .mdl-menu__item[disabled]:focus,.mdlext-light-color-theme .mdl-menu__item[disabled]:hover{background-color:transparent}.mdlext-light-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple,.mdlext-light-color-theme .mdl-menu__item[disabled] .mdl-ripple{background:transparent}.mdlext-light-color-theme .mdl-menu__item:focus,.mdlext-light-color-theme .mdl-menu__item:hover{background-color:#eee}.mdlext-light-color-theme .mdl-menu__item:active{background-color:#e0e0e0}.mdlext-light-color-theme .mdl-card{background:#fafafa}.mdlext-light-color-theme .mdl-card__media{background-color:#e040fb}.mdlext-light-color-theme .mdl-card__title{color:rgba(0,0,0,.87)}.mdlext-light-color-theme .mdl-card__title.mdl-card--border{border-bottom-color:rgba(0,0,0,.1)}.mdlext-light-color-theme .mdl-card__title-text{color:inherit}.mdlext-light-color-theme .mdl-card__subtitle-text,.mdlext-light-color-theme .mdl-card__supporting-text{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdl-card__actions{background-color:transparent}.mdlext-light-color-theme .mdl-card__actions.mdl-card--border{border-top-color:rgba(0,0,0,.1)}.mdlext-light-color-theme .mdlext-selectfield.is-disabled:after{color:rgba(0,0,0,.12);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid rgba(0,0,0,.12);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-light-color-theme .mdlext-selectfield__select{border-bottom-color:rgba(0,0,0,.26);color:inherit}.mdlext-light-color-theme .mdlext-selectfield__select option{background-color:#fafafa;color:rgba(0,0,0,.87)}.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select{border-color:#d32f2f}.mdlext-light-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select,.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{background-color:transparent;border-bottom-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-selectfield__label{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label{color:#e040fb}.mdlext-light-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label{color:#d32f2f}.mdlext-light-color-theme .mdlext-selectfield__label:after{background-color:#e040fb}.mdlext-light-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label:after{background-color:#d32f2f}.mdlext-light-color-theme .mdlext-selectfield__error{color:#d32f2f}.mdlext-light-color-theme .mdlext-menu,.mdlext-menu.mdlext-light-color-theme{background:#fff}.mdlext-light-color-theme .mdlext-menu__item{color:rgba(0,0,0,.87);background-color:#fff}.mdlext-light-color-theme .mdlext-menu__item:active,.mdlext-light-color-theme .mdlext-menu__item[aria-selected=true]{background-color:#e0e0e0}.mdlext-light-color-theme .mdlext-menu__item:hover:not([disabled]){background-color:#eee}.mdlext-light-color-theme .mdlext-menu__item:focus{outline-color:#bdbdbd;background-color:#eee}.mdlext-light-color-theme .mdlext-menu__item[disabled],.mdlext-light-color-theme .mdlext-menu__item[disabled]>*{color:#bdbdbd}.mdlext-light-color-theme .mdlext-menu__item-separator{border-bottom:1px solid rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{background-color:hsla(0,0%,98%,.1);border-color:rgba(0,0,0,.26);color:inherit}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled{color:rgba(0,0,0,.26);background-color:hsla(0,0%,98%,.1);border-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus{background-color:hsla(0,0%,88%,.1);border-color:#e040fb}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select{color:inherit;border-color:#d32f2f;background-color:hsla(0,0%,100%,.5)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus{border-color:#ab2424;background-color:hsla(0,0%,100%,.5)}.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled:after,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield:after{color:rgba(0,0,0,.26);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid rgba(0,0,0,.26);border-top-width:.5em;border-top-style:solid;border-top-color:rgba(0,0,0,.26);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{color:rgba(0,0,0,.26);background-color:hsla(0,0%,98%,.1);border-color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label{color:rgba(0,0,0,.54)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label{color:#e040fb}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label{color:#d32f2f}.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button,.mdlext-light-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i{color:rgba(0,0,0,.12)}.mdlext-light-color-theme .mdlext-accordion__tab{color:#000;background-color:hsla(0,0%,46%,.2)}.mdlext-light-color-theme .mdlext-accordion__tab:focus{outline-color:hsla(0,0%,43%,.5)}.mdlext-light-color-theme .mdlext-accordion__tab[aria-expanded=true]{background-color:hsla(0,0%,46%,.3)}.mdlext-light-color-theme .mdlext-accordion__tab[aria-selected=true]{background-color:hsla(0,0%,46%,.4)}.mdlext-light-color-theme .mdlext-accordion__tab[disabled]{background-color:hsla(0,0%,46%,.12);color:rgba(0,0,0,.26);pointer-events:none}.mdlext-light-color-theme .mdlext-accordion__tab[disabled]>*{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-accordion__tab:hover:not([disabled]){background-color:hsla(0,0%,46%,.4)}.mdlext-light-color-theme .mdlext-accordion__tab--ripple[aria-selected=true]:before{background:hsla(0,0%,46%,.4)}.mdlext-light-color-theme .mdlext-accordion__tabpanel{color:inherit;background-color:transparent}.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab{border-top:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected=true]:after{background-color:hsla(0,0%,40%,.5)}.mdlext-light-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel{border-top:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab{border-left:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected=true]:after{background-color:hsla(0,0%,40%,.5)}.mdlext-light-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel{border-left:1px solid hsla(0,0%,46%,.5)}.mdlext-light-color-theme .mdlext-accordion__panel:first-child>.mdlext-light-color-theme .mdlext-accordion__tab{border-top-color:transparent;border-left-color:transparent}.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab{background-color:hsla(0,0%,46%,.12);color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab>*{color:rgba(0,0,0,.26)}.mdlext-light-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel{opacity:.8;filter:blur(1px) grayscale(80%)}.mdlext-dark-color-theme{background-color:#303030;color:#fff}.mdlext-dark-color-theme a{outline-color:inherit}.mdlext-dark-color-theme .mdl-color--primary{background-color:#ffc107!important}.mdlext-dark-color-theme .mdl-color--primary-contrast{background-color:#fff8e1!important}.mdlext-dark-color-theme .mdl-color--primary-dark{background-color:#ffa000!important}.mdlext-dark-color-theme .mdl-color--accent{background-color:#536dfe!important}.mdlext-dark-color-theme .mdl-color--accent-contrast{background-color:#fff!important}.mdlext-dark-color-theme .mdl-color-text--primary{color:#ffc107!important}.mdlext-dark-color-theme .mdl-color-text--primary-contrast{color:#fff8e1!important}.mdlext-dark-color-theme .mdl-color-text--primary-dark{color:#ffa000!important}.mdlext-dark-color-theme .mdl-color-text--accent{color:#536dfe!important}.mdlext-dark-color-theme .mdl-color-text--accent-contrast{color:#fff!important}.mdlext-dark-color-theme a{color:#536dfe}.mdlext-dark-color-theme .mdl-badge[data-badge]:after{background:#536dfe;color:#fff}.mdlext-dark-color-theme .mdl-badge.mdl-badge--no-background[data-badge]:after{color:#536dfe;background:#fff}.mdlext-dark-color-theme .mdl-button{background:transparent;color:#fff}.mdlext-dark-color-theme .mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdlext-dark-color-theme .mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-dark-color-theme .mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdlext-dark-color-theme .mdl-button.mdl-button--colored{color:#ffc107}.mdlext-dark-color-theme .mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdlext-dark-color-theme .mdl-button--raised{background:hsla(0,0%,62%,.2)}.mdlext-dark-color-theme .mdl-button--raised:active,.mdlext-dark-color-theme .mdl-button--raised:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored{background:#ffc107;color:#fff8e1}.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:active,.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:focus:not(:active),.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored:hover{background-color:#d39e00}.mdlext-dark-color-theme .mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff8e1}.mdlext-dark-color-theme .mdl-button--fab{background:hsla(0,0%,62%,.2)}.mdlext-dark-color-theme .mdl-button--fab:active,.mdlext-dark-color-theme .mdl-button--fab:focus:not(:active){background-color:hsla(0,0%,62%,.4)}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored{background:#536dfe;color:#fff}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:active,.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:focus:not(:active),.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored:hover{background-color:#536dfe}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdlext-dark-color-theme .mdl-button--icon{color:inherit}.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary{color:#ffc107}.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff8e1}.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdlext-dark-color-theme .mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff8e1;background-color:#ffc107}.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent{color:#536dfe}.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdlext-dark-color-theme .mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#536dfe}.mdlext-dark-color-theme .mdl-button.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button[disabled][disabled]{color:hsla(0,0%,100%,.26);background-color:transparent}.mdlext-dark-color-theme .mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button--fab[disabled][disabled],.mdlext-dark-color-theme .mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button--raised[disabled][disabled]{background-color:hsla(0,0%,100%,.12);color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdlext-dark-color-theme .mdl-button--colored[disabled][disabled]{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-slider.is-upgraded{background:transparent;color:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-track{background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-track{background:none;color:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 16px,#536dfe 0,#536dfe 0)}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-fill-upper{background:linear-gradient(270deg,transparent,transparent 16px,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 0)}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-webkit-slider-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-moz-range-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(83,109,254,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(83,109,254,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-webkit-slider-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-moz-range-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded::-ms-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,#536dfe 0,#536dfe 37.5%,rgba(83,109,254,.5) 0,rgba(83,109,254,.5) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:active::-ms-thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border-color:#536dfe;background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border-color:hsla(0,0%,100%,.87);background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px hsla(0,0%,100%,.5);background:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px hsla(0,0%,100%,.5);background:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border-color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border-color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 66.67%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 25%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 37.5%,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 77.78%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled+.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb{border-color:hsla(0,0%,100%,.87);background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb{border-color:hsla(0,0%,100%,.87);background:transparent}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled:focus::-ms-thumb{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdlext-dark-color-theme .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 50%,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 100%)}.mdlext-dark-color-theme .mdl-slider.is-upgraded:disabled::-ms-fill-lower{background:linear-gradient(90deg,transparent,transparent 25px,hsla(0,0%,100%,.87) 0,hsla(0,0%,100%,.87) 0)}.mdlext-dark-color-theme .mdl-slider__background-flex{background:transparent}.mdlext-dark-color-theme .mdl-slider__background-lower{background:#536dfe}.mdlext-dark-color-theme .mdl-slider__background-upper{background:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-textfield__input{border-bottom-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__input{border-color:#ff1744}.mdlext-dark-color-theme .mdl-textfield.is-disabled .mdl-textfield__input,.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__input{background-color:transparent;border-bottom-color:hsla(0,0%,100%,.12);color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-textfield__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-textfield__label:after{background-color:#536dfe}.mdlext-dark-color-theme .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdl-textfield--floating-label.is-focused .mdl-textfield__label{color:#536dfe}.mdlext-dark-color-theme .mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#ff1744}.mdlext-dark-color-theme .mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#ff1744}.mdlext-dark-color-theme .mdl-textfield__error{color:#ff1744}.mdlext-dark-color-theme .mdl-checkbox__box-outline{border-color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__box-outline{border-color:#536dfe}.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__box-outline,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline{border-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-checkbox__focus-helper{background-color:transparent}.mdlext-dark-color-theme .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(83,109,254,.26);background-color:rgba(83,109,254,.26)}.mdlext-dark-color-theme .mdl-checkbox__tick-outline{background:transparent}.mdlext-dark-color-theme .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:#536dfe}.mdlext-dark-color-theme .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__label,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-checkbox__ripple-container .mdl-ripple{background:#536dfe}.mdlext-dark-color-theme .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple,.mdlext-dark-color-theme fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-radio__outer-circle{border-color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-radio.is-checked .mdl-radio__outer-circle{border-color:#536dfe}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__outer-circle,.mdlext-dark-color-theme .mdl-radio__outer-circle fieldset[disabled] .mdl-radio{border-color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-radio__inner-circle{background:#536dfe}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__inner-circle,.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__inner-circle{background:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__label,.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-radio__ripple-container .mdl-ripple{background:#536dfe}.mdlext-dark-color-theme .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple,.mdlext-dark-color-theme fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-icon-toggle__label{color:#616161}.mdlext-dark-color-theme .mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:#536dfe}.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdlext-dark-color-theme .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(83,109,254,.26)}.mdlext-dark-color-theme .mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdlext-dark-color-theme .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-switch__track{background:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__track{background:rgba(83,109,254,.5)}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__track,.mdlext-dark-color-theme .mdl-switch__track fieldset[disabled] .mdl-switch{background:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdl-switch__thumb{background:#fafafa}.mdlext-dark-color-theme .mdl-switch.is-checked .mdl-switch__thumb{background:#536dfe}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__thumb,.mdlext-dark-color-theme .mdl-switch__thumb fieldset[disabled] .mdl-switch{background:#fafafa}.mdlext-dark-color-theme .mdl-switch__focus-helper{background-color:transparent}.mdlext-dark-color-theme .mdl-switch.is-focused .mdl-switch__focus-helper{background-color:rgba(0,0,0,.1)}.mdlext-dark-color-theme .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(83,109,254,.26);background-color:rgba(83,109,254,.26)}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__label,.mdlext-dark-color-theme .mdl-switch__label fieldset[disabled] .mdl-switch{color:#fafafa}.mdlext-dark-color-theme .mdl-switch__ripple-container .mdl-ripple{background:#536dfe}.mdlext-dark-color-theme .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple,.mdlext-dark-color-theme fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-data-table{border-color:hsla(0,0%,100%,.12);background-color:#303030}.mdlext-dark-color-theme .mdl-data-table tbody tr.is-selected{background-color:#424242}.mdlext-dark-color-theme .mdl-data-table tbody tr:hover{background-color:#212121}.mdlext-dark-color-theme .mdl-data-table th,.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending{color:hsla(0,0%,100%,.87)}.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdlext-dark-color-theme .mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdl-menu__outline{background:#000}.mdlext-dark-color-theme .mdl-menu__item{color:hsla(0,0%,100%,.87);background-color:transparent;outline-color:#616161}.mdlext-dark-color-theme .mdl-menu__item--full-bleed-divider{border-bottom-color:hsla(0,0%,100%,.2)}.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled],.mdlext-dark-color-theme .mdl-menu__item[disabled]{color:#9e9e9e;background-color:transparent}.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:focus,.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled]:hover,.mdlext-dark-color-theme .mdl-menu__item[disabled]:focus,.mdlext-dark-color-theme .mdl-menu__item[disabled]:hover{background-color:transparent}.mdlext-dark-color-theme .mdl-menu__item[data-mdl-disabled] .mdl-ripple,.mdlext-dark-color-theme .mdl-menu__item[disabled] .mdl-ripple{background:transparent}.mdlext-dark-color-theme .mdl-menu__item:focus,.mdlext-dark-color-theme .mdl-menu__item:hover{background-color:#212121}.mdlext-dark-color-theme .mdl-menu__item:active{background-color:#424242}.mdlext-dark-color-theme .mdl-card{background:#303030}.mdlext-dark-color-theme .mdl-card__media{background-color:#536dfe}.mdlext-dark-color-theme .mdl-card__title{color:#fff}.mdlext-dark-color-theme .mdl-card__title.mdl-card--border{border-bottom-color:rgba(0,0,0,.1)}.mdlext-dark-color-theme .mdl-card__title-text{color:inherit}.mdlext-dark-color-theme .mdl-card__subtitle-text{color:rgba(0,0,0,.7)}.mdlext-dark-color-theme .mdl-card__supporting-text{color:hsla(0,0%,100%,.7)}.mdlext-dark-color-theme .mdl-card__actions{background-color:hsla(0,0%,100%,0)}.mdlext-dark-color-theme .mdl-card__actions.mdl-card--border{border-top-color:rgba(0,0,0,.1)}.mdlext-dark-color-theme .mdlext-selectfield.is-disabled:after{color:hsla(0,0%,100%,.12);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid hsla(0,0%,100%,.12);border-top-width:.5em;border-top-style:solid;border-top-color:hsla(0,0%,100%,.12);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-dark-color-theme .mdlext-selectfield__select{border-bottom-color:hsla(0,0%,100%,.26);color:inherit}.mdlext-dark-color-theme .mdlext-selectfield__select option{background-color:#303030;color:#fff}.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__select{border-color:#ff1744}.mdlext-dark-color-theme .mdlext-selectfield.is-disabled .mdlext-selectfield__select,.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{background-color:transparent;border-bottom-color:hsla(0,0%,100%,.12);color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-selectfield__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label{color:#536dfe}.mdlext-dark-color-theme .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label{color:#ff1744}.mdlext-dark-color-theme .mdlext-selectfield__label:after{background-color:#536dfe}.mdlext-dark-color-theme .mdlext-selectfield.is-invalid .mdlext-selectfield__label:after{background-color:#ff1744}.mdlext-dark-color-theme .mdlext-selectfield__error{color:#ff1744}.mdlext-dark-color-theme .mdlext-menu,.mdlext-menu.mdlext-dark-color-theme{background:#000}.mdlext-dark-color-theme .mdlext-menu__item{color:hsla(0,0%,100%,.87);background-color:#000}.mdlext-dark-color-theme .mdlext-menu__item:active,.mdlext-dark-color-theme .mdlext-menu__item[aria-selected=true]{background-color:#424242}.mdlext-dark-color-theme .mdlext-menu__item:hover:not([disabled]){background-color:#212121}.mdlext-dark-color-theme .mdlext-menu__item:focus{outline-color:#616161;background-color:#212121}.mdlext-dark-color-theme .mdlext-menu__item[disabled],.mdlext-dark-color-theme .mdlext-menu__item[disabled]>*{color:#9e9e9e}.mdlext-dark-color-theme .mdlext-menu__item-separator{border-bottom:1px solid hsla(0,0%,100%,.2)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select{background-color:rgba(48,48,48,.1);border-color:hsla(0,0%,100%,.26);color:inherit}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:disabled,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:disabled,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:disabled,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:disabled{color:hsla(0,0%,100%,.26);background-color:rgba(48,48,48,.1);border-color:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__select:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__select:focus{background-color:hsla(0,0%,9%,.1);border-color:#536dfe}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select{color:inherit;border-color:#ff1744;background-color:rgba(255,23,68,.1)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-invalid .mdlext-selectfield__select:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdl-textfield__input:focus,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-invalid .mdlext-selectfield__select:focus{border-color:#e3002c;background-color:rgba(255,23,68,.1)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled:after,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield:after{color:hsla(0,0%,100%,.26);content:"";width:0;height:0;font-size:inherit;line-height:inherit;border-top:.5em solid hsla(0,0%,100%,.26);border-top-width:.5em;border-top-style:solid;border-top-color:hsla(0,0%,100%,.26);border-left:.35em solid transparent;border-right:.35em solid transparent}.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__input,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select{color:hsla(0,0%,100%,.26);background-color:rgba(48,48,48,.1);border-color:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield .mdlext-selectfield__label{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-focused.is-focused .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-focused.is-focused .mdlext-selectfield__label{color:#536dfe}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-disabled.is-disabled .mdlext-selectfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdl-textfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdl-textfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.mdlext-selectfield--floating-label.is-invalid.is-invalid .mdlext-selectfield__label{color:#ff1744}.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-selectfield .mdl-selectfield__label,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-textfield__label{color:hsla(0,0%,100%,.26)}.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields .mdl-textfield.is-disabled i,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields .mdlext-selectfield.is-disabled i,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdl-textfield i,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield .mdl-button,.mdlext-dark-color-theme .mdlext-bordered-fields fieldset[disabled] .mdlext-selectfield i{color:hsla(0,0%,100%,.12)}.mdlext-dark-color-theme .mdlext-accordion__tab{color:#fff;background-color:#000}.mdlext-dark-color-theme .mdlext-accordion__tab:focus{outline-color:#a8a8a8}.mdlext-dark-color-theme .mdlext-accordion__tab[aria-expanded=true]{background-color:rgba(0,0,0,.9)}.mdlext-dark-color-theme .mdlext-accordion__tab[aria-selected=true]{background-color:rgba(0,0,0,.6)}.mdlext-dark-color-theme .mdlext-accordion__tab[disabled]{background-color:rgba(0,0,0,.4);color:hsla(0,0%,100%,.5);pointer-events:none}.mdlext-dark-color-theme .mdlext-accordion__tab[disabled]>*{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-accordion__tab:hover:not([disabled]){background-color:rgba(0,0,0,.5)}.mdlext-dark-color-theme .mdlext-accordion__tab--ripple[aria-selected=true]:before{background:rgba(0,0,0,.3)}.mdlext-dark-color-theme .mdlext-accordion__tabpanel{color:inherit;background-color:transparent}.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab{border-top:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tab[aria-selected=true]:after{background-color:#a8a8a8}.mdlext-dark-color-theme .mdlext-accordion--vertical .mdlext-accordion__tabpanel{border-top:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab{border-left:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tab[aria-selected=true]:after{background-color:#a8a8a8}.mdlext-dark-color-theme .mdlext-accordion--horizontal .mdlext-accordion__tabpanel{border-left:1px solid #424242}.mdlext-dark-color-theme .mdlext-accordion__panel:first-child>.mdlext-dark-color-theme .mdlext-accordion__tab{border-top-color:transparent;border-left-color:transparent}.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab{background-color:rgba(0,0,0,.4);color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tab>*{color:hsla(0,0%,100%,.5)}.mdlext-dark-color-theme .mdlext-accordion[disabled] .mdlext-accordion__tabpanel{opacity:.8;filter:blur(1px) grayscale(80%)}
+/*# sourceMappingURL=mdl-ext.min.css.map*/
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.min.css.map b/node_modules/mdl-ext/lib/mdl-ext.min.css.map
new file mode 100644
index 0000000..c9b79f3
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss?d01f","webpack:///webpack:///src/_mixins.scss?c723","webpack:///webpack:///src/mdl-ext-build.scss","webpack:///webpack:///src/sticky-header/_sticky-header.scss?721e","webpack:///webpack:///src/dialog/dialog.scss?6dd1","webpack:///webpack:///src/grid/_grid-media-queries.scss","webpack:///webpack:///src/lightboard/_lightboard.scss?79ea","webpack:///webpack:///~/material-design-lite/src/_mixins.scss?572c","webpack:///webpack:///src/lightboard/_lightboard-media-queries.scss","webpack:///webpack:///src/lightbox/_lightbox.scss?bce5","webpack:///webpack:///src/carousel/_carousel.scss?ab9b","webpack:///webpack:///src/selectfield/_selectfield.scss?910a","webpack:///webpack:///src/menu-button/_menu-button.scss?610a","webpack:///webpack:///src/bordered-fields/_bordered-fields.scss?3072","webpack:///webpack:///src/collapsible/_collapsible.scss?5cb7","webpack:///webpack:///src/accordion/_accordion.scss?b350","webpack:///webpack:///src/color-themes/_light-color-theme.scss?77e1","webpack:///webpack:///src/color-themes/_dark-color-theme.scss?a990"],"names":[],"mappings":"AAwBA,iCCiDE,oBACA,oBACA,mBACA,eACA,qBACA,UACA,WACA,cACA,oBACA,sBACA,iBACA,mBACA,cACA,sBAGA,mCACA,qCAGA,kCAGA,kCAGA,6BC/ED,uCDkFG,YACA,cC9EH,4DDmFK,YACA,cC/EL,gCD2CC,2BACA,oBACA,mBACA,eACA,qBACA,UACA,WACA,cACA,oBACA,sBACA,iBACA,mBACA,cACA,sBAGA,mCACA,qCAGA,kCAGA,kCAGA,6BC/CD,sCDkDG,sBACA,cC9CH,2DDmDK,sBACA,cExFN,8BACE,kBACA,iBACA,iEACA,2BAJF,+CAOI,8FACD,gFAKC,kBACD,6EAEC,kBACD,mIAKD,iCAEA,yLACE,mBACD,mLAEC,kBC3BJ,qBACE,kBACA,SACA,UACA,UACA,6BALF,2BAQI,8CACD,6CAEC,8CAFD,qCAEC,8CAXJ,qCAcI,8CACD,kCAID,GAAK,2BFgFJ,CE9EH,8BACE,GAAK,UFmFJ,CGjGH,aACE,iCACA,0CACA,cACA,2CAJF,qCAOI,UAIJ,aACE,sBAIF,kBACE,gDACD,qBAGC,uEAGF,qBACE,4CACD,sBAGC,0EAGF,kDACE,SAKA,sBACE,yBADF,sBACE,yBADF,sBACE,yBADF,sBACE,yBADF,sBACE,yBADF,sBACE,yBADF,sBACE,yBACD,sBADC,yBACD,sBADC,yBADF,uBACE,2BADF,uBACE,2BADF,uBACE,2BACD,yBAgCD,aACE,YACD,aAGC,kCA/BF,CAE2B,sCACzB,WAgCF,yBACE,uBACD,uDAKG,yBADF,uDACE,yBADF,uDACE,yBADF,uDACE,yBADF,uDACE,yBADF,uDACE,yBADF,uDACE,yBADF,uDACE,yBADF,uDACE,yBADF,yDACE,2BADF,yDACE,2BADF,yDACE,2BAMF,uEAhDF,uBAE2B,yHACzB,UA6CA,uEAhDF,uBAmDG,yHAhDD,UACD,uEAJD,uBAEA,yHACE,UAqDA,uEAxDF,wBAEA,yHACE,WAqDA,uEAxDF,wBA2DG,yHAxDD,WAqDA,uEAxDF,wBAE2B,yHACzB,WAqDA,uEAxDF,wBAE2B,yHACzB,WAqDA,uEAxDF,wBAEA,yH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aADF,6CAII,WACA,+BAEiC,qFAC/B,WACD,iDAGD,UAMD,2EAHG,SACA,UN0mCL,CMlmCH,gDACE,mBACE,aAEA,6CACE,WACA,+BALJ,qFAQM,YARN,iDAYI,UAEA,2EACE,SACA,gBNymCL,CMlmCH,0BACE,mBACE,aADF,6CAII,WACA,+BAEiC,qFAC/B,YACD,iDAGD,UAZJ,2EAeM,SACA,gBNymCL,CO7rCH,iBACE,qFACA,eACA,kBACA,WACA,eACA,cACA,SACA,gBACA,sBAEA,UACA,cAEA,yHAJA,sBAVF,0CAwBI,kBACA,MACA,OACA,iCACA,4CA5BJ,0EA+BM,kCACA,cACA,gBACA,cACA,sBACA,wBACA,4BASJ,wBACE,SACA,UACA,kBAjDJ,4BAoDM,WACA,eACA,YACA,SACA,UAxDN,mCFHI,8CAgIF,eACA,gBACA,cACA,iBEnEI,cACA,kBACA,SACA,OACA,QACA,eACA,YACA,eACA,cACA,YACA,qCACA,wBACA,oBACA,2BAhBF,oEAmBI,oBA7ER,4CAiFU,gBAjFV,wFAqFU,wBACD,iCAKL,WACA,UACD,wBAEC,iCACA,oDACA,yCACA,qCAYD,mDATG,kBACA,gBACA,UACA,YACA,WACD,4BAEC,iCA5GN,uDAiHI,eACA,SACA,OChHJ,mBACE,gBACD,iBAMC,gBAEA,WACA,cACA,mBACA,YACA,6BAGF,yCAZE,sBACA,SACA,UAEA,YAQF,wBAEE,qBACA,kBACA,UAIA,iCAKE,yGAIE,qBACA,qCACD,+FAKD,WACA,WACA,cACA,YACA,SACA,OACA,kBACA,mBACA,4EACA,yCAjCJ,0BAsCI,qBAGF,+BACE,sBACA,kBACA,YACA,SACA,UAEA,mCACE,sBACA,gBACD,0CAGC,oEHmDJ,eACA,gBACA,cACA,iBGnDI,cACA,kBACA,SACA,OACA,mBACA,gBACA,eACA,WACA,kBACA,uBACA,cACD,gDAMG,qBACA,qCACD,kEAKH,qBACA,cACA,gBACA,kBACA,MACA,OACA,QACA,SACA,UAEE,8EACA,mBCtGN,oBACE,sBACA,kBACA,eACA,qBACA,YACA,eACA,SACA,eAGE,gCACA,YACA,kBAbJ,0BVnBE,8BACA,sBACA,uBACA,yBAKE,oCACA,qCU8BA,kBACA,WACA,QACA,2BACA,oBAIJ,gEVpDE,WACA,QACA,SACA,kBACA,oBUgDF,sCAEI,4DVhDF,sBACA,uBACA,iCAKE,oCACA,qCU8CJ,iCACE,iBACD,gCAIC,WAIF,gCACE,gBACA,eACA,WAIF,4BAGE,sBACA,SACA,gBACA,wBACA,qBACA,oBACA,gBACA,kBACA,iBACA,aACA,gBAGA,eACA,uCACA,oCACA,WACA,wCACA,cACA,SACA,gBACA,gBACA,cAzBF,2CA6BI,kBACA,uBACD,6CAIC,yBACA,cACD,wCAGC,aACD,2DAGC,aAGF,2DACE,qBACA,gBAGF,+HAEE,yCACA,sBACA,6BACD,mCAGC,sBACA,sBACA,yBAKJ,2BACE,sBACA,sBACA,eACA,SACA,SACA,OACA,QACA,oBACA,kBACA,cACA,WACA,gBACA,mBACA,gBAE6B,uHAE3B,kBACD,+DJkHD,wBACA,mDI9GC,+EAGC,gBACD,yIAIC,sBAG6C,0OAG7C,cACA,eACA,QACA,mBACD,sVAKC,UACD,0EAGC,cACA,eAIF,iCACE,yBACA,YACA,WACA,WACA,SACA,0CJwEF,mDIrEE,kBACA,WAGF,gEACE,OACA,mBACA,WACD,gEAGC,yBAKJ,2BACE,cACA,eACA,kBACA,eACA,kBACA,cAEA,0DACE,mBAKJ,uCACE,qBACA,kBACA,yCJoCA,mDI5BA,eAE+B,0IAM7B,gBACD,wEAEC,SC7OJ,oBACE,oELuJA,eACA,gBACA,cACA,iBKxJA,oBACA,kBACA,YACA,eACA,iCACA,yCACA,+CATF,sBAYI,SACA,kBAbJ,iCAiBI,eACD,kFAGC,iBACD,6BAKD,mBACA,gBACA,uBACA,gBAGF,gCAEE,sBACA,SACA,UACA,gBACA,iCAGF,aACE,kBACA,gBACA,aACA,gBACA,mHAEA,+CACA,gDACA,UACA,gBACA,gBA8FD,mBA3FG,oBACA,kBAGF,qBX1DA,SACA,mBACA,WACA,YACA,gBACA,UACA,kBACA,UWqDE,oBAGF,mBLsCA,eACA,gBACA,iBACA,iBKvCE,sBACA,sBACA,kBACA,sBACA,yCACA,0EACA,qBACA,eACA,mBACA,qFACA,gBACA,gBAEA,uCACE,yBACD,8CAIC,gBACA,kBACA,gBACA,SACA,QACA,2BACA,oBACD,yCAGC,sBAGF,yBACE,oBACA,kBACA,sBACA,sBACD,qCAGC,SAGF,6BACE,cACA,6BACA,YACA,oBAEE,+BACA,cACD,4BAID,mBACA,gBACA,uBA3DJ,qBA+DI,SACA,kBAGA,gCACA,eACD,iFAGC,iBACD,6BAID,SACA,UACA,wCCpJJ,kDAII,sBAJJ,mFAUI,UACA,gBAEA,0QAEE,YACA,oCACA,iCACA,kBACA,qBACA,eACA,gBACA,cAwBD,8SArBG,sBACA,oCACA,6BAdJ,kSAwBI,mCACA,qBASJ,2IACE,8BAYA,sTAEE,cACA,qBACA,qCAJF,8UAQI,qBACA,qCArEV,kDA4EI,SACA,WAGiB,mIAEjB,iCZrGF,QACA,SACA,kBACA,oBACA,sCACA,sBACA,uBACA,iCAKE,oCACA,qCYMJ,2KAyFI,sBACA,oCACA,6BACD,onBAWK,kBAGJ,wQAEE,sBACA,eACA,gBACA,iBACA,SACA,WAOD,gSAHG,uCACA,4BACD,4vFAWC,cACA,eACA,gBACA,SACA,YACA,mBAMF,o9BAEE,sBA/IR,o8BAuJQ,cACD,oKAMH,sBACD,wpBASK,kBACA,WACD,wTAEC,WAIE,0XAEF,SACD,41BAKC,kBAMM,w1BAEN,UAhMR,qMAqMQ,mBArMR,0XAyMQ,UACA,UAOH,ggBAOC,sBACA,oBChON,oBAEE,eACD,yEAFC,sBAQA,qEbIA,SACA,mBACA,WACA,YACA,gBACA,UACA,kBACA,UaTE,oBCXJ,+BdmDE,oBACA,oBACA,mBACA,gBACA,qBACA,UACA,WACA,cACA,oBACA,sBACA,iBACA,mBACA,cACA,sBAGA,mCACA,qCAGA,kCAGA,kCAGA,6Bc7EF,qCdgFI,YACA,cCohEH,0DD/gEK,YACA,ccnFN,mCd+CE,2BACA,oBACA,mBACA,gBACA,qBACA,UACA,WACA,cACA,oBACA,sBACA,iBACA,mBACA,cACA,sBAGA,mCACA,qCAGA,kCAGA,kCAGA,6BCmjED,yCDhjEG,sBACA,iBCojEH,8DD/iEK,sBACA,iBc/EN,kBAEE,SACA,UACA,gBACA,iCALF,sCACE,sBAUA,yBAKE,sCACD,gDALC,sBACA,kBACA,gBACA,iCAED,uBR3BC,8CAgEF,eACA,gBACA,cACA,qBQnCE,gBACA,gBAGA,SACA,UACA,eACA,gBAEA,yCACA,+CACA,qFACA,WACA,mCACA,eAjBF,6BAqBI,oBACA,qBACA,kBAvBJ,2CA2BI,mCACD,2CAGC,mCA/BJ,iCAmCI,oCACA,sBACA,oBAKD,mCAFG,sBACD,6CAID,mCAGA,yBACA,SACA,UAGF,gCACE,iBACA,kBACA,mBACA,gBACA,uBACD,oCAGC,eACD,0DAIG,WACA,kBACA,QACA,SACA,8BACA,UACA,mBACA,mCACA,yBAVJ,6EAcI,yFACD,4BAKH,sBACA,SACA,cACA,cACA,6BACA,cACA,cACA,gCAEA,oCd5GF,SACA,mBACA,WACA,YACA,gBACA,UACA,kBACA,Uc8GA,4BACE,gDACA,sCAEA,qDACE,gBACA,gDACD,mDAGC,YACA,uCACA,iBACA,kBAJF,6EAOI,kBACA,SACA,OACA,WACA,WACA,cACA,YACA,mCACA,4EACA,yCACD,qDAGC,iBACD,gEAGC,eAjCN,qHAqCM,iBArCN,sFA0CQ,SACA,WACD,wDAMH,uCADF,mEAII,oBACA,2DAtDN,2EAyDQ,oBACA,wDACA,oBAUR,uDAGI,eACA,WAJJ,8FAQI,WACD,qDAGC,gEACA,WACA,mBACA,wCAfJ,+EAkBM,kBACA,MACA,QACA,YACA,UACA,cACA,YACA,mCAKD,uDAIC,yCACD,uHAIC,mBACA,uCA7BJ,8DAiCI,yCACA,mBA7CN,wFAkDQ,UACA,UAnDR,0DAyDI,wCADF,qEAII,oBACA,2DALJ,6EAQM,oBACA,wDACD,4DAUL,6BACA,8BAIA,mFACE,gCACD,8BAQD,oBAEF,mDACE,oCACA,sBAKD,qDAFG,sBACD,wDAGD,WACA,gCACD,uCAKD,GACE,mBACA,UAEF,IACE,oBACA,UAEF,GACE,UACA,oBb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","file":"mdl-ext.min.css","sourcesContent":["@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n@import \"../mixins\";\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/aria-expanded-toggle/_aria-expanded-toggle.scss","@import \"functions\";\n\n/// Triangle helper mixin\n/// Modified from: http://blustemy.io/drawing-pure-css-arrows-with-mixins/\n///                https://css-tricks.com/snippets/sass/css-triangle-mixin/\n/// @param {Direction} $direction - Triangle direction, either `top`, `right`, `bottom` or `left`\n/// @param {Color} $color [currentcolor] - Triangle color\n/// @param {Length} $size [1em] - Triangle size\n@mixin mdlext-arrow($direction: bottom, $base-width: 15px, $length: 10px, $color: inherit, $font-size: inherit) {\n  content: '';\n  width: 0;\n  height: 0;\n  font-size: $font-size;\n  line-height: $font-size;\n  border-#{mdlext-opposite-direction($direction)}: $length solid $color;\n  border-#{mdlext-opposite-direction($direction)}-width: $length;\n  border-#{mdlext-opposite-direction($direction)}-style: solid;\n  border-#{mdlext-opposite-direction($direction)}-color: $color;\n\n  $perpendicular-borders: ($base-width / 2) solid transparent;\n\n  @if $direction == top or $direction == bottom {\n    border-left: $perpendicular-borders;\n    border-right: $perpendicular-borders;\n  }\n  @else if $direction == right or $direction == left {\n    border-bottom: $perpendicular-borders;\n    border-top: $perpendicular-borders;\n  }\n}\n\n/// Hide element while making it readable for screen readers\n/// Copied from HTML5Boilerplate:\n/// https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css#L119-L133\n@mixin mdlext-visually-hidden() {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n\n/// Toggle for aria-expanded attribute\n///\n/// @author Leif Olsen\n/// @param {Font} $font-family ['Material Icons'] - Font family\n/// @param {Length} $font-size [24px] - Font size\n/// @param {string} $icon ['+'] - icon to display when 'aria-expanded=\"false\"'\n/// @param {string} $icon-expanded ['-'] - icon to display when 'aria-expanded=\"true\"'\n/// @link https://github.com/google/material-design-icons Modified from '.material-icons' class\n/// @param {Length} $icon-offset [0] - Icon offset\n///\n/// @example - +/- toggle\n///   .plus-minus {\n///     @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: inherit);\n///   }\n///   <div aria-expanded=\"false\">\n///     <i class=\"plus-minus\"></i>\n///   </div>\n///\n/// @example - Material Icons, expand-more/expand_less\n///   .more-less {\n///     @include mdlext-aria-expanded-toggle($content: 'expand_more', $content-expanded: 'expand_less');\n///   }\n///   <div aria-expanded=\"true\">\n///     <i class=\"more-less\"></i>\n///   </div>\n\n@mixin mdlext-aria-expanded-toggle($font-family: 'Material Icons', $font-size: 24px, $icon: '+', $icon-expanded: '-', $icon-offset: 0) {\n  font-family: $font-family;\n  font-weight: inherit;\n  font-style: inherit;\n  font-size: $font-size;  // Preferred icon size\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1;\n  text-transform: none;\n  letter-spacing: normal;\n  word-wrap: normal;\n  white-space: nowrap;\n  direction: ltr;\n  vertical-align: middle;\n\n  // Support for all WebKit browsers.\n  -webkit-font-smoothing: antialiased;\n  -webkit-font-feature-settings: 'liga';\n\n  // Support for Safari and Chrome.\n  text-rendering: optimizeLegibility;\n\n  // Support for Firefox.\n  -moz-osx-font-smoothing: grayscale;\n\n  // Support for IE.\n  font-feature-settings: 'liga';\n\n  &::after {\n    content: $icon;\n    margin-left: $icon-offset;\n  }\n\n  [aria-expanded='true'] > & {\n    &::after {\n      content: $icon-expanded;\n      margin-left: $icon-offset;\n    }\n  }\n}\n\n\n/// Keyframe mixin\n/// Modified from: http://sassbreak.com/nested-keyframe-rules-sass/\n/// Modified from: http://sassbreak.com/sass-tools-and-snippets/\n///\n/// @example\n///\n/// .some-element {\n///   animation: 10s linear infinite;\n///\n///   @include mdlext-animation-keyframes {\n///     from {\n///       background-position: 0% 0%;\n///     }\n///     to {\n///       background-position: 114.2857% 0%;\n///     }\n///   }\n/// }\n\n@mixin mdlext-animation-keyframes {\n  $animation-name: unique-id();\n  animation-name: $animation-name;\n\n  @keyframes #{$animation-name} {\n    @content;\n  }\n}\n\n\n/// Flexible title mixin\n/// A flexible title consists of three regions, left, middle and right.\n/// The left and right regions are optional and will typically contain state icons\n/// or act as a toolbar. The middle region should contain the title text.\n///\n/// @author Leif Olsen\n/// @param {String} $class - class name\n/// @gutter {Length} [8px] - horizontal spacing between title elements\n///\n/// @example\n///\n/// @include mdlext-flexible-title(my-title) {\n///   overflow: hidden;\n///   background-color: yellow;\n///   &__text {\n///     font-size: 20px;\n///     letter-spacing: 0.02em;\n///     font-weight: 400;\n///     line-height: 1.1;\n///   }\n/// }\n///\n/// <header class=\"my-title\">\n///   <i class=\"material-icons\" role=\"presentation\" style=\"font-size: 28px;\">info</i>\n///   <h2 class=\"my-title__text\">A title</h2>\n///   <span class=\"my-title__spacer\"></span>\n///   <i class=\"mdlext-aria-expanded-more-less\" role=\"presentation\" style=\"font-size: 28px;\"></i>\n/// </header>\n\n@mixin mdlext-flexible-title($class, $gutter: 8px) {\n  .#{$class} {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    display: flex;\n    align-self: stretch;\n    align-items: center;\n    margin: 0;\n    padding: 0 $gutter;\n\n    &__text,\n    &__text > * {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0 $gutter 0 0;\n    }\n\n    > *:last-child {\n      padding-right: 0;\n    }\n\n    // Used to align elements inside a header or drawer, by growing to fill\n    // remaining space. Commonly used for aligning elements to the right.\n    &__spacer {\n      flex: 1;\n    }\n\n    @content;\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/_mixins.scss","@charset \"UTF-8\";\n\n// Material Design Lite\n@import '~material-design-lite/src/variables';\n@import '~material-design-lite/src/mixins';\n\n// mdl-ext\n@import 'mdl-ext';\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/mdl-ext-build.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-layout__sticky-header {\n  position: absolute;\n  overflow: visible;\n  background: $mdlext-sticky-header-background;\n  transition: 0.1s ease-in-out;\n\n  &.mdlext-is-scroll {\n    background: $mdlext-sticky-header-background-scroll;\n  }\n}\n\n*:not(.is-small-screen) .mdlext-layout__sticky-header {\n  .mdl-layout__drawer-button {\n    visibility: hidden;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding;\n  }\n}\n\n*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header,\n.is-small-screen.has-drawer .mdlext-layout__sticky-header {\n  display: flex;\n\n  .mdl-layout__drawer-button {\n    visibility: visible;\n  }\n  .mdl-layout__header-row {\n    padding-left: $padding + $layout-drawer-button-desktop-size;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/sticky-header/_sticky-header.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SASS based on css from Google Chrome Dialog polyfill, https://github.com/GoogleChrome/dialog-polyfill\n * @include 'node_modules/dialog-polyfill/dialog-polyfill.css' before using this\n */\n\n@import \"../variables\";\n\ndialog.mdlext-dialog {\n  position: absolute;\n  border: 0;\n  opacity: 0;\n  padding: $mdlext-dialog-padding;\n  background-color: $mdlext-dialog-background-color;\n\n  &[open] {\n    animation: mdlext-open-dialog $mdlext-dialog-open-animation;\n  }\n  &[open]::backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n  &[open] + .backdrop {\n    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;\n  }\n}\n\n@keyframes mdlext-darken-backdrop {\n  to { background: $mdlext-dialog-backdrop-color; }\n}\n@keyframes mdlext-open-dialog {\n  to { opacity: 1; }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/dialog/dialog.scss","@charset \"UTF-8\";\n\n/**\n * This code is modified from Material Design Lite _grid.sass,\n * which is Licensed under the Apache License, Version 2.0\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n///////////////////////////////////////////////////////////////////////\n//\n// Grid media queries, modified from Material Design Lite _grid.sass\n//\n///////////////////////////////////////////////////////////////////////\n// Use of this module requires the user to include variables from material-design-lite in hers/his main SASS module\n//@import \"../../node_modules/material-design-lite/src/variables\";\n\n\n.mdlext-grid {\n  display: flex;\n  flex-flow: row wrap;\n  margin: 0 auto;\n  align-items: stretch;\n\n  &.mdlext-grid--no-spacing {\n    padding: 0;\n  }\n}\n\n.mdlext-cell {\n  box-sizing: border-box;\n}\n\n\n.mdlext-cell--top {\n  align-self: flex-start;\n}\n\n.mdlext-cell--middle {\n  align-self: center;\n}\n\n.mdlext-cell--bottom {\n  align-self: flex-end;\n}\n\n.mdlext-cell--stretch {\n  align-self: stretch;\n}\n\n.mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell {\n  margin: 0;\n}\n\n// Define order override classes.\n@for $i from 1 through $grid-max-columns {\n  .mdlext-cell--order-#{$i} {\n    order: $i;\n  }\n}\n\n\n// Mixins for width calculation.\n@mixin partial-size($size, $columns, $gutter) {\n  width: calc(#{(($size / $columns) * 100) + \"%\"} - #{$gutter});\n\n  .mdlext-grid--no-spacing > & {\n    width: #{(($size / $columns) * 100) + \"%\"};\n  }\n}\n\n@mixin full-size($gutter) {\n  @include partial-size(1, 1, $gutter);\n}\n\n@mixin offset-size($size, $columns, $gutter) {\n  margin-left: calc(#{(($size / $columns) * 100) + \"%\"} + #{$gutter / 2});\n\n  .mdlext-grid.mdlext-grid--no-spacing > & {\n    margin-left: #{(($size / $columns) * 100) + \"%\"};\n  }\n}\n\n\n\n////////// Phone //////////\n\n/* stylelint-disable */\n@media (max-width: $grid-tablet-breakpoint - 1) {\n/* stylelint-enable */\n  .mdlext-grid {\n    padding: $grid-phone-margin - ($grid-phone-gutter / 2);\n  }\n\n  .mdlext-cell {\n    margin: $grid-phone-gutter / 2;\n    @include partial-size($grid-cell-default-columns, $grid-phone-columns, $grid-phone-gutter);\n  }\n\n  .mdlext-cell--hide-phone {\n    display: none !important;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    .mdlext-cell--order-#{$i}-phone.mdlext-cell--order-#{$i}-phone {\n      order: $i;\n    }\n  }\n\n  // Define partial sizes for columnNumber < totalColumns.\n  @for $i from 1 through ($grid-phone-columns - 1) {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n      @include partial-size($i, $grid-phone-columns, $grid-phone-gutter);\n    }\n  }\n\n  // Define 100% for everything else.\n  @for $i from $grid-phone-columns through $grid-desktop-columns {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {\n      @include full-size($grid-phone-gutter);\n    }\n  }\n\n  // Define valid phone offsets.\n  @for $i from 1 through ($grid-phone-columns - 1) {\n    .mdlext-cell--#{$i}-offset,\n    .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {\n      @include offset-size($i, $grid-phone-columns, $grid-phone-gutter);\n    }\n  }\n}\n\n\n////////// Tablet //////////\n\n/* stylelint-disable */\n@media (min-width: $grid-tablet-breakpoint) and (max-width: $grid-desktop-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-grid {\n    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);\n  }\n\n  .mdlext-cell {\n    margin: $grid-tablet-gutter / 2;\n    @include partial-size($grid-cell-default-columns, $grid-tablet-columns, $grid-tablet-gutter);\n  }\n\n  .mdlext-cell--hide-tablet {\n    display: none !important;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    .mdlext-cell--order-#{$i}-tablet.mdlext-cell--order-#{$i}-tablet {\n      order: $i;\n    }\n  }\n\n  // Define partial sizes for columnNumber < totalColumns.\n  @for $i from 1 through ($grid-tablet-columns - 1) {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n      @include partial-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n    }\n  }\n\n  // Define 100% for everything else.\n  @for $i from $grid-tablet-columns through $grid-desktop-columns {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {\n      @include full-size($grid-tablet-gutter);\n    }\n  }\n\n  // Define valid tablet offsets.\n  @for $i from 1 through ($grid-tablet-columns - 1) {\n    .mdlext-cell--#{$i}-offset,\n    .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {\n      @include offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);\n    }\n  }\n}\n\n\n////////// Desktop //////////\n\n@media (min-width: $grid-desktop-breakpoint) {\n  .mdlext-grid {\n    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);\n  }\n\n  .mdlext-cell {\n    margin: $grid-desktop-gutter / 2;\n    @include partial-size($grid-cell-default-columns, $grid-desktop-columns, $grid-desktop-gutter);\n  }\n\n  .mdlext-cell--hide-desktop {\n    display: none !important;\n  }\n\n  // Define order override classes.\n  @for $i from 1 through $grid-max-columns {\n    .mdlext-cell--order-#{$i}-desktop.mdlext-cell--order-#{$i}-desktop {\n      order: $i;\n    }\n  }\n\n  // Define partial sizes for all numbers of columns.\n  @for $i from 1 through $grid-desktop-columns {\n    .mdlext-cell--#{$i}-col,\n    .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {\n      @include partial-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n    }\n  }\n\n  // Define valid desktop offsets.\n  @for $i from 1 through ($grid-desktop-columns - 1) {\n    .mdlext-cell--#{$i}-offset,\n    .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {\n      @include offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/grid/_grid-media-queries.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A lightboard is a translucent surface illuminated from behind, used for situations\n * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\nul.mdlext-lightboard {\n  list-style: none;\n}\n\n.mdlext-lightboard {\n  box-sizing: border-box;\n  margin: 0 auto;\n  padding: 0;\n  display: flex;\n  flex-flow:row wrap;\n  align-items: stretch;\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightboard__slide {\n    background-color: $mdlext-lightboard-slide-background-color;\n    border: 1px solid $mdlext-lightboard-slide-border-color;\n    border-radius: $mdlext-lightboard-slide-border-radius;\n    box-shadow: $mdlext-lightboard-slide-box-shadow;\n    position: relative;\n    display: block;\n    max-width: $mdlext-lightboard-slide-max-size;\n\n    &::before {\n      // 1:1 ratio\n      // TODO: Use a class for ratio so the grid can display slides with different ratios (16:9, 16:10, 4:3 ...)\n      content: '';\n      display: block;\n      padding-top: 100%;\n    }\n    &:hover,\n    &:active,\n    &:focus {\n      border-color: $mdlext-lightboard-slide-border-color-hover;\n      background-color: $mdlext-lightboard-slide-background-color-hover;\n      box-shadow: $mdlext-lightboard-slide-box-shadow-hover;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-lightboard-focus-outline-color;\n    }\n    &[aria-selected='true'] {\n      background-color: $mdlext-lightboard-slide-active-bacground-color;\n\n      figcaption {\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.2);\n      }\n    }\n    &__frame,\n    &__ripple-container {\n      text-decoration: none;\n      display: block;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n\n      &:focus {\n        outline-offset: -2px;\n        outline-color: $mdlext-lightboard-focus-outline-color;\n      }\n      & .mdl-ripple {\n        background: $mdlext-lightboard-ripple-color;\n      }\n      figure {\n        display: block;\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n\n        img {\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n          margin: auto;\n          max-width: 100%;\n          max-height: 100%;\n          border-width: 0;\n          border-radius: $mdlext-lightboard-slide-inner-border-radius;\n        }\n        figcaption {\n          @include typo-caption($colorContrast: false, $usePreferred: true);\n\n          color: $mdlext-lightboard-figcaption-text-color;\n          position: absolute;\n          bottom: -2px;\n          white-space: nowrap;\n          overflow: hidden;\n          max-width: 100%;\n          width: 100%;\n          text-align: center;\n          text-overflow: ellipsis;\n          padding: 4px 0;\n        }\n      }\n      &:hover {\n        figcaption {\n          // As far as I can see there is no way to darken/lighten a text color\n          // defined by MDL, due to the \"unqote\" functions.\n          // So this is a hack\n          color: rgba(0, 0, 0, 1) !important;\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      }\n    }\n  }\n}\n\n////// Media / Element queries default, Small //////\n.mdlext-lightboard {\n  padding: calc((#{$mdlext-lightboard-small-margin} - #{$mdlext-lightboard-small-gutter}) / 2);\n\n  .mdlext-lightboard__slide {\n    margin: calc(#{$mdlext-lightboard-small-gutter} / 2);\n    width: calc(1 / #{$mdlext-lightboard-small-columns} * 100% - #{$mdlext-lightboard-small-gutter});\n\n    .mdlext-lightboard__slide__frame figure {\n      margin: $mdlext-lightboard-small-frame-width;\n    }\n  }\n  &.mdlext-lightboard--no-spacing {\n    padding: 0;\n\n    .mdlext-lightboard__slide {\n      margin: 0;\n      width: calc(1 / #{$mdlext-lightboard-small-columns} * 100%);\n    }\n  }\n}\n\n// Import one of _lightboard-media-queries.scss or _lightboard-eq-js.scss to complete SASS\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard.scss","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n  @if $usePreferred {\n    font-family: $preferred_font;\n  }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 112px;\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: -0.04em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 56px;\n  font-weight: 400;\n  line-height: 1.35;\n  letter-spacing: -0.02em;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 45px;\n  font-weight: 400;\n  line-height: 48px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 34px;\n  font-weight: 400;\n  line-height: 40px;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 24px;\n  font-weight: 400;\n  line-height: 32px;\n  -moz-osx-font-smoothing: grayscale;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 20px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0.02em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 16px;\n  font-weight: 400;\n  line-height: 28px;\n  letter-spacing: 0.04em;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  @if $usePreferred {\n    font-weight: 500;\n  } @else {\n    font-weight: bold;\n  }\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 24px;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  position: relative;\n  font-size: 24px;\n  font-weight: 300;\n  font-style: italic;\n  line-height: 1.35;\n  letter-spacing: 0.08em;\n\n  &:before {\n    position: absolute;\n    left: -0.5em;\n    content: '“';\n  }\n\n  &:after {\n    content: '”';\n    margin-left: -0.05em;\n  }\n\n  @if $colorContrast {\n    opacity: 0.54;\n  }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n  @include typo-preferred-font($usePreferred);\n  font-size: 14px;\n  font-weight: 500;\n  text-transform: uppercase;\n  line-height: 1;\n  letter-spacing: 0;\n\n  @if $colorContrast {\n    opacity: 0.87;\n  }\n}\n\n@mixin typo-icon() {\n  font-family: 'Material Icons';\n  font-weight: normal;\n  font-style: normal;\n  font-size: 24px;\n  line-height: 1;\n  letter-spacing: normal;\n  text-transform: none;\n  display: inline-block;\n  word-wrap: normal;\n  font-feature-settings: 'liga';\n  -webkit-font-feature-settings: 'liga';\n  -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n  box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n              0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0  6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0  8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n  box-shadow: 0  9px 46px  8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n              0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n              0 24px 38px  3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n  transition-duration: $duration;\n  transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n  @if(type_of($units) != 'number') {\n    @error \"The unit given to dialog-width should be a number.\";\n  }\n  // 56dp is the base unit width for Dialogs.\n  // With 5 units being the number of units for a mobile device.\n  // https://goo.gl/sK2O5o\n  width: $units * 56px;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///~/material-design-lite/src/_mixins.scss","@charset \"UTF-8\";\n\n//////////////////////////////\n//\n// Lightboard media queries\n//\n//////////////////////////////\n@import \"../variables\";\n\n////////// Small /////////////\n//@media (max-width: $mdlext-lightboard-medium-small-breakpoint - 1) {\n//  // This is the default, see: _lightboard.scss\n//}\n\n////////// Medium small //////////\n/* stylelint-disable */\n@media (min-width: $mdlext-lightboard-medium-small-breakpoint) and (max-width: $mdlext-lightboard-medium-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-medium-small-margin} - #{$mdlext-lightboard-medium-small-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-small-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100% - #{$mdlext-lightboard-medium-small-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-small-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100%);\n      }\n    }\n  }\n}\n\n////////// Medium //////////\n/* stylelint-disable */\n@media (min-width: $mdlext-lightboard-medium-breakpoint) and (max-width: $mdlext-lightboard-medium-large-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-medium-margin} - #{$mdlext-lightboard-medium-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100% - #{$mdlext-lightboard-medium-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100%);\n      }\n    }\n  }\n}\n\n////////// Medium large //////////\n/* stylelint-disable */\n@media (min-width: $mdlext-lightboard-medium-large-breakpoint)  and (max-width: $mdlext-lightboard-large-breakpoint - 1) { /* stylelint-enable */\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-medium-large-margin} - #{$mdlext-lightboard-medium-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-medium-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100% - #{$mdlext-lightboard-medium-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-medium-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100%);\n      }\n    }\n  }\n}\n\n////////// Large //////////\n@media (min-width: $mdlext-lightboard-large-breakpoint) {\n  .mdlext-lightboard {\n    padding: calc((#{$mdlext-lightboard-large-margin} - #{$mdlext-lightboard-large-gutter}) / 2);\n\n    .mdlext-lightboard__slide {\n      margin: calc(#{$mdlext-lightboard-large-gutter} / 2);\n      width: calc(1 / #{$mdlext-lightboard-large-columns} * 100% - #{$mdlext-lightboard-large-gutter});\n\n      .mdlext-lightboard__slide__frame figure {\n        margin: $mdlext-lightboard-large-frame-width;\n      }\n    }\n    &.mdlext-lightboard--no-spacing {\n      padding: 0;\n\n      .mdlext-lightboard__slide {\n        margin: 0;\n        width: calc(1 / #{$mdlext-lightboard-large-columns} * 100%);\n      }\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightboard/_lightboard-media-queries.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n@import \"../variables\";\n\n.mdlext-lightbox {\n  user-select: none;\n  cursor: default;\n  position: relative;\n  width: auto;\n  max-width: 100%;\n  margin: 0 auto;\n  border: $mdlext-lightbox-border;\n  border-radius: $mdlext-lightbox-border-radius;\n  background-color: $mdlext-lightbox-background-color;\n  box-sizing: border-box;\n  outline: 0;\n  display: block; // display: flex and IE11 has issues with reposition. Set display:block for now.\n\n  *,\n  *::before,\n  *::after,\n  input[type=\"search\"] {\n    box-sizing: border-box;\n  }\n\n  .mdlext-lightbox__slider {\n    // Displays prevvious, current and next image while dragging\n    // Elements are created by lightbox component when dragging starts\n    position: absolute;\n    top: 0;\n    left: 0;\n    display: flex;\n    justify-content: center;\n\n    .mdlext-lightbox__slider__slide {\n      flex-shrink: 0;\n      display: block;\n      text-align: left;\n      color: #7f7f7f;\n      background-size: cover;\n      background-position: center;\n      background-repeat: no-repeat;\n\n      //&:nth-child(1),\n      //&:nth-child(3) {\n      //  filter: blur(1px);\n      //}\n    }\n  }\n\n  figure {\n    margin: $mdlext-lightbox-figure-margin;\n    padding: $mdlext-lightbox-figure-padding;\n    position: relative;\n\n    img {\n      width: 100%;\n      max-width: 100%;\n      height: auto;\n      border: 0;\n      outline: 0;\n    }\n    figcaption {\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      display: block;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      max-width: 100%;\n      height: auto;\n      max-height: 50%;\n      overflow: auto;\n      padding: 8px;\n      background-color: $mdlext-lightbox-figcaption-background-color;\n      transform-origin: bottom;\n      transform: scaleY(0);\n      transition: 0.2s ease-in-out;\n\n      &.mdlext-lightbox__show-figcaption {\n        transform: scaleY(1);\n      }\n      tbody {\n        th {\n          text-align: left;\n        }\n        th,\n        td {\n          vertical-align: text-top;\n        }\n      }\n    }\n  }\n  .mdl-card__menu {\n    color: #ffffff;\n    z-index: 1;\n  }\n  footer {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    background-color: $mdlext-lightbox-footer-background-color;\n\n    .mdl-card__supporting-text {\n      flex: 1;\n      overflow: hidden;\n      padding: 0;\n      height: $card-supporting-text-line-height;\n      width: 100%;\n    }\n    nav {\n      display: flex;\n    }\n  }\n\n  &.mdlext-lightbox--sticky-footer footer {\n    position: fixed;\n    bottom: 0;\n    left: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/lightbox/_lightbox.scss","@charset \"UTF-8\";\n\n/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * A carousel ...\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\nul.mdlext-carousel {\n  list-style: none;\n}\n\n.mdlext-carousel {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  height: 100%;  // Use a container to constrain height and width\n  width: 100%;\n  display: block;\n  white-space: nowrap;\n  font-size: 0;\n  background-color: transparent;\n}\n\n.mdlext-carousel__slide {\n  box-sizing: border-box;\n  display: inline-block;\n  position: relative;\n  outline: 0;\n  margin: 0 $mdlext-carousel-slide-margin-horizontal;\n  padding:0;\n  height: 100%;\n  border-top: $mdlext-carousel-slide-border-top-width solid transparent; // Makes room for the animated select/focus line\n\n  //&:focus,\n  &[aria-selected],\n  &[aria-selected='true'] {\n    figcaption {\n      // As far as I can see there is no way to darken/lighten a text color\n      // defined by MDL, due to the \"unqote\" functions.\n      // So this is a hack\n      color: rgba(0, 0, 0, 1) !important;\n      background-color: rgba(255, 255, 255, 0.25);\n    }\n  }\n\n  &[aria-selected]::after,\n  &[aria-selected='true']::after {\n    height: $mdlext-carousel-slide-border-top-width;\n    width: 100%;\n    display: block;\n    content: ' ';\n    top: (-$mdlext-carousel-slide-border-top-width);\n    left: 0;\n    position: absolute;\n    background: $mdlext-carousel-slide-border-top-color;\n    animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n    transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n  }\n\n\n  a {\n    text-decoration: none;\n  }\n\n  figure {\n    box-sizing: border-box;\n    position: relative;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n\n    img {\n      box-sizing: border-box;\n      max-height: 100%;\n    }\n\n    figcaption {\n      box-sizing: border-box;\n      @include typo-caption($colorContrast: false, $usePreferred: true);\n\n      color: $mdlext-carousel-slide-figcaption-color;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      white-space: nowrap;\n      overflow: hidden;\n      max-width: 100%;\n      width: 100%;\n      text-align: center;\n      text-overflow: ellipsis;\n      padding: 4px 0;\n    }\n    &:hover {\n      figcaption {\n        // As far as I can see there is no way to darken/lighten a text color\n        // defined by MDL, due to the \"unqote\" functions.\n        // So this is a hack\n        color: rgba(0, 0, 0, 1) !important;\n        background-color: rgba(255, 255, 255, 0.25);\n      }\n    }\n  }\n\n  .mdlext-carousel__slide__ripple-container {\n    text-decoration: none;\n    display: block;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    outline: 0;\n\n    & .mdl-ripple {\n      background: $mdlext-carousel-slide-ripple-color;\n    }\n  }\n}\n\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/carousel/_carousel.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Copied/Modified/Inspired from/by:\n *   https://github.com/google/material-design-lite/tree/master/src/textfield\n *   http://red-team-design.com/making-html-dropdowns-not-suck/\n *   http://codepen.io/etcpe9/pen/PqyOye,\n *   http://codepen.io/pudgereyem/pen/PqBxQx\n *   https://github.com/MEYVN-digital/mdl-selectfield\n *   https://github.com/mebibou/mdl-selectfield\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../mixins\";\n\n// The container for the selectfield.\n.mdlext-selectfield {\n  box-sizing: border-box;\n  position: relative;\n  font-size: $input-text-font-size;\n  display: inline-block;\n  width: 300px;\n  max-width: 100%;\n  margin: 0;\n  padding: $input-text-vertical-spacing 0;\n\n  // Align buttons, if used.\n  & .mdl-button {\n    bottom: $input-text-vertical-spacing;\n    position: absolute;\n  }\n\n  // Styling the down arrow\n  &::after {\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length);\n\n    position: absolute;\n    right: 0.5em;\n    top: 50%;\n    transform: translateY(-50%);\n    pointer-events: none;\n  }\n}\n\n.mdlext-selectfield.is-disabled {\n  &::after {\n    color: $input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $input-text-disabled-color);\n  }\n}\n\n// Optional class to align right.\n.mdlext-selectfield--align-right {\n  text-align: right;\n}\n\n// Optional class to display at full width.\n.mdlext-selectfield--full-width {\n  width: 100%;\n}\n\n// Optional class to make the select field expandable.\n.mdlext-selectfield--expandable {\n  min-height: $input-text-button-size;\n  min-width: $input-text-button-size;\n  width: auto;\n}\n\n// Styling for the select element.\n.mdlext-selectfield__select {\n\n  // Reset select\n  box-sizing: border-box;\n  border: 0;\n  border-radius: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  appearance: none;\n  text-indent: 0.01px; // Removes default arrow from firefox\n  text-overflow: '';   // Removes default arrow from firefox\n  outline: none;\n  box-shadow: none;\n  // End Reset select\n\n  font-size: $input-text-font-size;\n  font-family: $performance_font;\n  padding: $input-text-padding calc(1.2em + #{$input-text-padding}) $input-text-padding 0;\n  width: $input-text-width;\n  border-bottom: 1px solid $input-text-bottom-border-color;\n  display: block;\n  margin: 0;\n  background: none;\n  text-align: left;\n  color: inherit;\n\n  // Mozilla, remove focusring\n  &:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 #000000;\n  }\n\n  // MS, remove selected option background color\n  &:focus::-ms-value {\n    background-color: inherit;\n    color: inherit;\n  }\n\n  &::-ms-expand {\n    display: none;\n  }\n\n  .mdlext-selectfield.is-focused & {\n    outline: none;\n  }\n\n  .mdlext-selectfield.is-invalid & {\n    border-color: $input-text-error-color;\n    box-shadow: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled & {\n    border-bottom: 1px dotted $input-text-disabled-color;\n    color: $input-text-disabled-text-color;\n    background-color: transparent;\n  }\n\n  option {\n    color: $text-color-primary;\n    box-sizing: border-box;\n    background-color: inherit;\n  }\n}\n\n// Styling for the label / floating label.\n.mdlext-selectfield__label {\n  box-sizing: border-box;\n  color: $input-text-label-color;\n  font-size: $input-text-font-size;\n  top: ($input-text-padding + $input-text-vertical-spacing);\n  bottom: 0;\n  left: 0;\n  right: 0;\n  pointer-events: none;\n  position: absolute;\n  display: block;\n  width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-align: left;\n\n  .mdlext-selectfield.is-dirty &,\n  .mdlext-selectfield.has-placeholder & {\n    visibility: hidden;\n  }\n\n  // Floating Label\n  .mdlext-selectfield--floating-label & {\n    @include material-animation-default();\n  }\n\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    transition: none;\n  }\n\n  fieldset[disabled] .mdlext-selectfield &,\n  .mdlext-selectfield.is-disabled.is-disabled & {\n    color: $input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused &,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty &,\n  .mdlext-selectfield--floating-label.has-placeholder & {\n    color: $input-text-highlight-color;\n    font-size: $input-text-floating-label-fontsize;\n    top: $input-text-vertical-spacing - ($input-text-floating-label-fontsize + $input-text-padding);\n    visibility: visible;\n  }\n\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder &,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder & {\n    top: -($input-text-floating-label-fontsize + $input-text-padding);\n  }\n\n  .mdlext-selectfield--floating-label.is-invalid & {\n    color: $input-text-error-color;\n    font-size: $input-text-floating-label-fontsize;\n  }\n\n  // The after label is the colored underline for the Selectfield.\n  &::after {\n    background-color: $input-text-highlight-color;\n    bottom: $input-text-vertical-spacing;\n    content: '';\n    height: 2px;\n    left: 45%;\n    position: absolute;\n    @include material-animation-default();\n\n    visibility: hidden;\n    width: 10px;\n  }\n\n  .mdlext-selectfield.is-focused &::after {\n    left: 0;\n    visibility: visible;\n    width: 100%;\n  }\n\n  .mdlext-selectfield.is-invalid &::after {\n    background-color: $input-text-error-color;\n  }\n}\n\n// SelectField Error.\n.mdlext-selectfield__error {\n  color: $input-text-error-color;\n  font-size: $input-text-floating-label-fontsize;\n  position: absolute;\n  margin-top: 3px;\n  visibility: hidden;\n  display: block;\n\n  .mdlext-selectfield.is-invalid & {\n    visibility: visible;\n  }\n}\n\n// Expandable Holder.\n.mdlext-selectfield__expandable-holder {\n  display: inline-block;\n  position: relative;\n  margin-left: $input-text-button-size;\n\n  @include material-animation-default();\n\n  // Safari (possibly others) need to be convinced that this field is actually\n  // visible, otherwise it cannot be tabbed to nor focused via a <label>.\n  // TODO: In some cases (Retina displays), this is big enough to render the\n  // inner element :(\n  max-width: 0.1px;\n\n  .mdlext-selectfield.is-focused &,\n  .mdlext-selectfield.is-dirty & {\n    // This is an unfortunate hack. Animating between widths in percent (%)\n    // in many browsers (Chrome, Firefox) only animates the inner visual style\n    // of the input - the outer bounding box still 'jumps'.\n    // Thus assume a sensible maximum, and animate to/from that value.\n    max-width: 600px;\n  }\n  .mdlext-selectfield__label::after {\n    bottom: 0;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/selectfield/_selectfield.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/* Moved to aria-expanded-toggle.scss\n\n.mdlext-aria-expanded-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit);\n}\n\n.mdlext-aria-expanded-more-less {\n  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');\n}\n*/\n\n.mdlext-menu-button {\n  box-sizing: border-box;\n  @include typo-menu();\n  text-transform: none;\n  position: relative;\n  height: $button-height;\n  padding: 0 $button-padding;\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n\n  > * {\n    margin: 0;\n    padding: 0 0 0 8px;\n  }\n\n  > *:first-child {\n    padding-left: 0;\n  }\n\n  > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n    margin-left: auto; // If more than one element, push last element to the right\n  }\n\n}\n\n.mdlext-menu-button__caption {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  line-height: 1.2;\n}\n\n.mdlext-menu,\n.mdlext-menu__item {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n}\n\n.mdlext-menu {\n  position: absolute; //fixed;\n  background: $default-dropdown-bg-color;\n  z-index: 1000;\n  min-width: 124px;\n  border-radius: 2px;\n  @include shadow-3dp();\n  display: inline-flex;\n  flex-direction: column;\n  padding: 0;\n  overflow: hidden;\n  overflow-y: auto;\n\n  &:focus {\n    outline-offset: -1px;\n    outline-width: 1px;\n  }\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n\n  &__item {\n    @include typo-body-1();\n    color: $default-item-text-color;\n    background-color: $default-dropdown-bg-color;\n    position: relative;\n    padding: 0 16px 0 24px;\n    align-items: center;\n    align-self: stretch;\n    text-decoration: none;\n    cursor: pointer;\n    white-space: nowrap;\n    user-select: none;\n    min-height: 40px;\n    overflow: hidden;\n\n    &[aria-selected='true'] {\n      background-color: $default-item-active-bg-color;\n    }\n\n    // checkmark\n    &[aria-selected='true']::before {\n      content:'\\2713';\n      position: absolute;\n      font-size: 1.4em;\n      left: 4px;\n      top: 50%;\n      transform: translateY(-50%);\n      pointer-events: none;\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $default-item-hover-bg-color;\n    }\n\n    &:focus {\n      outline-offset: -2px;\n      outline-width: 1px;\n      outline-color: $default-item-outline-color;\n      background-color: $default-item-focus-bg-color;\n    }\n\n    &::-moz-focus-inner {\n      border: 0;\n    }\n\n    &[disabled] {\n      color: $disabled-item-text-color;\n      background-color: transparent;\n      cursor: auto;\n      pointer-events: none;\n\n      > * {\n        color: $disabled-item-text-color;\n      }\n    }\n\n    &__caption {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0 0 0 8px;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {\n      margin-left: auto; // If more than one element, push last element to the right\n    }\n\n  }\n  &__item-separator {\n    margin: 0;\n    padding: 0;\n    border-bottom: 1px solid $default-item-divider-color;\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/menu-button/_menu-button.scss","/**\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * The bordered fields are based on / inspired by this CodePen: http://codepen.io/prajwal078/pen/LVJZXz?editors=010\n */\n\n// Use of this module requires the user to include variables from material-design-lite\n//@import \"../../node_modules/material-design-lite/src/variables\";\n//@import \"../../node_modules/material-design-lite/src/mixins\";\n\n@import \"../variables\";\n@import \"../functions\";\n\n\n// \"Theme\" for this styling\n.mdlext-bordered-fields {\n  box-sizing: border-box;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  // Styling for textfield and selectfield.\n  .mdl-textfield,\n  .mdlext-selectfield {\n    padding: 0;\n    margin: $mdlext-bordered-field-vertical-spacing-top 0 $mdlext-bordered-field-vertical-spacing-bottom 0;\n\n    .mdl-textfield__input,\n    .mdlext-selectfield__select {\n      height: $mdlext-bordered-field-height;\n      background-color: $mdlext-bordered-field-background-color;\n      border: $mdlext-bordered-field-border-width solid $mdlext-bordered-field-border-color;\n      border-radius: $mdlext-bordered-field-border-radius;\n      padding: $mdlext-bordered-field-padding-top $mdlext-bordered-field-padding $mdlext-bordered-field-padding-bottom $mdlext-bordered-field-padding;\n      font-size: $mdlext-bordered-field-input-text-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      color: $mdlext-bordered-field-input-text-color;\n\n      &:disabled {\n        color: $mdlext-bordered-field-input-text-disabled-text-color;\n        background-color: $mdlext-bordered-field-disabled-background-color;\n        border-color: $mdlext-bordered-field-disabled-border-color;\n      }\n\n      // MDL can not handle required attribute properly. Planned for MDL-v2\n      //&:required {\n      //  background-color: $mdlext-bordered-field-required-background-color;\n      //  border-color: $mdlext-bordered-field-required-border-color;\n      //}\n\n      &:focus {\n        background-color: $mdlext-bordered-field-focus-background-color;\n        border-color: $mdlext-bordered-field-focus-border-color;\n      }\n\n      // MDL can not handle required. Planned for MDL-v2\n      //&:required:focus {\n      //  background-color: $mdlext-bordered-field-required-focus-background-color;\n      //  border-color: $mdlext-bordered-field-required-focus-border-color;\n      //}\n    }\n    .mdlext-selectfield__select {\n      padding-right: calc(1em + #{$mdlext-bordered-field-padding});  // space for down arrow\n    }\n\n    /*\n    &.is-dirty {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n      }\n    }\n    */\n\n    &.is-invalid {\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        color: $mdlext-bordered-field-input-text-error-color;\n        border-color: $mdlext-bordered-field-error-border-color;\n        background-color: $mdlext-bordered-field-error-background-color;\n\n        &:focus {\n          //&:required:focus {\n          border-color: $mdlext-bordered-field-error-focus-border-color;\n          background-color: $mdlext-bordered-field-error-focus-background-color;\n        }\n      }\n    }\n  }\n\n  .mdlext-selectfield::after {\n    top: auto;\n    bottom: $mdlext-bordered-field-padding-bottom;  // Position of down arrow\n  }\n\n  fieldset[disabled] .mdlext-selectfield::after,\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-bordered-field-input-text-disabled-text-color);\n  }\n\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n    color: $mdlext-bordered-field-input-text-disabled-text-color;\n    background-color: $mdlext-bordered-field-disabled-background-color;\n    border-color: $mdlext-bordered-field-disabled-border-color;\n  }\n\n\n  // Styling for the label / floating label.\n  .mdl-textfield,\n  .mdlext-selectfield {\n\n    &.is-dirty,\n    &.has-placeholder {\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        visibility: hidden;\n      }\n    }\n    .mdl-textfield__label,\n    .mdlext-selectfield__label {\n      color: $mdlext-bordered-field-input-text-label-color;\n      font-size: $mdlext-bordered-field-label-font-size;\n      font-weight: $mdlext-bordered-field-font-weight;\n      padding-left: $mdlext-bordered-field-padding;\n      top: auto;\n      bottom: $mdlext-bordered-field-padding-bottom;\n\n      // Hides the colored underline for the textField/selectfield.\n      &::after {\n        background-color: transparent !important;\n        visibility: hidden !important;\n      }\n    }\n    &.mdl-textfield--floating-label.is-focused.is-focused,\n    &.mdl-textfield--floating-label.is-dirty.is-dirty,\n    &.mdl-textfield--floating-label.has-placeholder,\n    &.mdlext-selectfield--floating-label.is-focused.is-focused,\n    &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n    &.mdlext-selectfield--floating-label.has-placeholder {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-focus-color;\n        font-size: $mdlext-bordered-field-floating-label-font-size;\n        font-weight: $mdlext-bordered-field-floating-label-font-weight;\n        top: auto;\n        bottom: $mdlext-bordered-field-floating-label-focus-bottom;\n        visibility: visible;\n      }\n    }\n    &.mdl-textfield--floating-label.is-disabled.is-disabled,\n    &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-disabled-color;\n      }\n    }\n    &.mdl-textfield--floating-label.is-invalid.is-invalid,\n    &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-bordered-field-input-text-label-error-color;\n      }\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n    color: $mdlext-bordered-field-input-text-label-disabled-color;\n  }\n\n  // Icon(s) and/or button(s) inside textfield\n  .mdl-textfield,\n  .mdlext-selectfield {\n    &.mdlext-bordered-fields__icon-left,\n    &.mdlext-bordered-fields__icon-right {\n      & > i,\n      & > .mdl-button {\n        position: absolute;\n        bottom: $mdlext-bordered-field-padding-bottom - 2px;\n      }\n      & > i {\n        bottom: $mdlext-bordered-field-padding-bottom + 2px;\n      }\n    }\n    &.mdlext-bordered-fields__icon-left {\n      & > i:first-child,\n      & > .mdl-button:first-child {\n        left: $mdlext-bordered-field-padding/2;\n      }\n      & > i ~ .mdl-textfield__input,\n      & > .mdl-button ~ .mdl-textfield__input,\n      & > i ~ .mdlext-selectfield__select,\n      & > .mdl-button ~ .mdlext-selectfield__select {\n        padding-left: $input-text-button-size;\n      }\n      & > i ~ .mdl-textfield__label,\n      & > .mdl-button ~ .mdl-textfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n      & > i ~ .mdlext-selectfield__label,\n      & > .mdl-button ~ .mdlext-selectfield__label {\n        left: $input-text-button-size - $mdlext-bordered-field-padding;\n      }\n    }\n    &.mdlext-bordered-fields__icon-right {\n      & > .mdl-textfield__input {\n        padding-right: $input-text-button-size;\n      }\n      & > i:last-child,\n      & > .mdl-button:last-child {\n        left: auto;\n        right: $mdlext-bordered-field-padding/2;\n      }\n    }\n    &.is-disabled i,\n    &.is-disabled .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n\n  fieldset[disabled] .mdl-textfield,\n  fieldset[disabled] .mdlext-selectfield {\n    i,\n    .mdl-button {\n      color: $mdlext-bordered-field-disabled-border-color;\n      pointer-events: none;\n    }\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/bordered-fields/_bordered-fields.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-collapsible {\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.mdlext-collapsible-group,\n.mdlext-collapsible-region {\n  box-sizing: border-box;\n\n  &[hidden] {\n    @include mdlext-visually-hidden;\n    pointer-events: none;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/collapsible/_collapsible.scss","@charset \"UTF-8\";\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n.mdlext-aria-toggle-plus-minus {\n  @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: 1.4em);\n}\n\n.mdlext-aria-toggle-material-icons {\n  @include mdlext-aria-expanded-toggle($font-size: 1.3em, $icon: 'expand_more', $icon-expanded: 'expand_less', $icon-offset: -$mdlext-accordion-header-padding);\n}\n\n.mdlext-accordion {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  &__panel {\n    box-sizing: border-box;\n    position: relative;\n    overflow: hidden;\n    display: flex;\n    flex-wrap: nowrap;\n  }\n\n  &__tab {\n    @include typo-title();\n\n    font-weight: 400;\n    line-height: 1.1;\n    box-sizing: border-box;\n    position: relative;\n    margin: 0;\n    padding: 0; // $mdlext-accordion-header-padding;\n    min-width: $mdlext-accordion-header-height;\n    min-height: $mdlext-accordion-header-height;\n    display: flex;\n    align-items: center;\n    align-self: stretch;\n    user-select: none;\n    color: $mdlext-accordion-header-secondary-color;\n    background-color: $mdlext-accordion-header-background-color;\n    cursor: pointer;\n    overflow: hidden;\n\n    &:focus {\n      outline-offset: -2px;\n      outline-color: $mdlext-accordion-header-focus-outline-color;\n      outline-width: 2px;\n    }\n\n    &[aria-expanded='true'] {\n      background-color: $mdlext-accordion-header-background-open-color;\n    }\n\n    &[aria-selected='true'] {\n      background-color: $mdlext-accordion-header-background-active-color;\n    }\n\n    &[disabled] {\n      background-color: $mdlext-accordion-header-disabled-color;\n      color: $mdlext-accordion-header-secondary-color-disabled;\n      pointer-events: none;\n\n      > * {\n        color: $mdlext-accordion-header-secondary-color-disabled;\n      }\n    }\n\n    &:hover:not([disabled]) {\n      background-color: $mdlext-accordion-header-background-hover-color;\n    }\n\n    > * {\n      margin: 0;\n      padding: 0;\n    }\n\n    &__caption {\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    > *:first-child {\n      padding-left: 0;\n    }\n\n    &--ripple {\n      &[aria-selected='true']::before {\n        content: '';\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        background: $mdlext-accordion-ripple-color;\n        opacity: 0;\n        border-radius: 100%;\n        transform: scale(1, 1) translate(-50%);\n        transform-origin: 50% 50%;\n      }\n      &[aria-selected='true']:focus:not(:active)::before {\n        // http://easings.net/\n        animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; // cubic-bezier(0.4, 0.0, 1, 1); //cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; //ease-out;\n      }\n    }\n  }\n\n  &__tabpanel {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0 $mdlext-accordion-content-padding;\n    color: $mdlext-accordion-content-color;\n    background-color: $mdlext-accordion-content-background-color;\n    display: block;\n    overflow: auto;\n    flex-grow: 1;\n\n    &[hidden] {\n      @include mdlext-visually-hidden;\n    }\n  }\n}\n\n// Vertical layout\n.mdlext-accordion {\n\n  &--vertical {\n    flex-direction: column;\n    flex-wrap: nowrap;\n\n    .mdlext-accordion__panel {\n      min-height: $mdlext-accordion-header-height;\n      flex-direction: column;\n    }\n\n    .mdlext-accordion__tab {\n      height: $mdlext-accordion-header-height;\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n      padding-left: $mdlext-accordion-header-padding;\n      padding-right: $mdlext-accordion-header-padding;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        height: 1px;\n        width: 100%;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n        animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        padding-left: $mdlext-accordion-header-padding;\n      }\n\n      > *:first-child {\n        padding-left: 0;\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        margin-left: auto; // If more than one element, push last element to the right\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 5%;\n          height: 10%;\n        }\n      }\n\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-top: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleY(1);\n        animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleY(0);\n          animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;\n          animation-delay: 0.1s;\n        }\n      }\n    }\n  }\n}\n\n// Horizontal layout\n.mdlext-accordion {\n\n  &--horizontal {\n\n    .mdlext-accordion__panel {\n      min-width: $mdlext-accordion-header-height;\n      width: $mdlext-accordion-header-height;\n    }\n\n    &[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {\n      width: 100%;\n    }\n\n    .mdlext-accordion__tab {\n      flex-direction: column-reverse;\n      width: $mdlext-accordion-header-height;\n      white-space: nowrap;\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &[aria-selected='true']::after {\n        position: absolute;\n        top: 0;\n        right: 0;\n        height: 100%;\n        width: 1px;\n        display: block;\n        content: \" \";\n        background-color: $mdlext-accordion-header-highlight-color;\n\n        // Figure out how to animate a vertical line\n        //animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;\n        //transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);\n      }\n\n      > * {\n        //transform: rotate(-90deg) translateX(50%);\n        transform: rotate(-90deg) translateX($mdlext-accordion-header-padding);\n      }\n\n      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {\n        // If more than one element, push last element to top\n        margin-bottom: auto;\n        transform: rotate(-90deg) translateX(0);\n      }\n\n      &__caption {\n        transform: rotate(-90deg) translateX(50%);\n        padding-right: $mdlext-accordion-header-padding + 8px;\n      }\n\n      &--ripple {\n        &[aria-selected='true']::before {\n          width: 10%;\n          height: 5%;\n        }\n      }\n    }\n\n    .mdlext-accordion__tabpanel {\n      border-left: 1px solid $mdlext-accordion-header-border-color;\n\n      &--animation {\n        transform: scaleX(1);\n        animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;\n\n        &[hidden] {\n          transform: scaleX(0);\n          animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;\n        }\n      }\n    }\n  }\n}\n\n.mdlext-accordion {\n\n  &__panel:first-child > &__tab {\n    // Use container to set outer borders\n    border-top-color: transparent;\n    border-left-color: transparent;\n  }\n\n  &[aria-multiselectable=\"false\"] {\n    .mdlext-accordion__panel.is-expanded {\n      flex-grow: 1;\n    }\n  }\n}\n\n// Making accordion appear disabled.\n// Note: does not prevent tabbing into a disabled accordion\n.mdlext-accordion[disabled] {\n  * {\n    pointer-events: none;\n  }\n  .mdlext-accordion__tab {\n    background-color: $mdlext-accordion-header-disabled-color;\n    color: $mdlext-accordion-header-secondary-color-disabled;\n\n    > * {\n      color: $mdlext-accordion-header-secondary-color-disabled;\n    }\n  }\n  .mdlext-accordion__tabpanel {\n    opacity: 0.8;\n    filter: blur(1px) grayscale(80%);\n  }\n}\n\n\n@keyframes mdlext-accordion-tab-ripple {\n  0% {\n    transform: scale(0, 0);\n    opacity: 1;\n  }\n  20% {\n    transform: scale(25, 25);\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n    transform: scale(40, 40);\n  }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0.1); }\n  40% { transform: scaleY(1.03); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.03); }\n  100% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-y {\n  0% { transform: scaleY(0); }\n  60% { transform: scaleY(1.01); }\n  80% { transform: scaleY(0.98); }\n  100% { transform: scaleY(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-y {\n  0% { transform: scaleY(1); }\n  60% { transform: scaleY(0.98); }\n  80% { transform: scaleY(1.01); }\n  100% { transform: scaleY(0); }\n}\n\n/*\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0.1); }\n  40% { transform: scaleX(1.03); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.03); }\n  100% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(1); }\n}\n*/\n\n@keyframes mdlext-accordion-show-tabpanel-x {\n  0% { transform: scaleX(0); }\n  60% { transform: scaleX(1.01); }\n  80% { transform: scaleX(0.98); }\n  100% { transform: scaleX(1); }\n}\n\n@keyframes mdlext-accordion-hide-tabpanel-x {\n  0% { transform: scaleX(1); }\n  60% { transform: scaleX(0.98); }\n  80% { transform: scaleX(1.01); }\n  100% { transform: scaleX(0); }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/accordion/_accordion.scss","@import \"color-themes\";\n\n.mdlext-light-color-theme {\n  background-color: $mdlext-light-content-background-color;\n  color: $mdlext-light-text-color-primary;\n\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n// -----------------------------\n.mdlext-light-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-light-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-light-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-light-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-light-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-light-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-light-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  a {\n    color: $mdlext-light-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-light-badge-background;\n      color: $mdlext-light-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-light-badge-color-inverse;\n        background: $mdlext-light-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-light-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-light-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-light-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-light-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-primary-color-alt;\n      color: $mdlext-light-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-light-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-light-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-light-button-fab-color-alt;\n      color: $mdlext-light-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-light-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-light-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-light-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-light-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-secondary-color-alt;\n      background-color: $mdlext-light-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-light-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-light-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-light-button-fab-text-color-alt;\n      background-color: $mdlext-light-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-light-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-light-button-primary-color-disabled;\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-light-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-light-color-theme {\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-light-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-color 16px,\n          $mdlext-light-range-color 0);\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(to left,\n          transparent,\n          transparent 16px,\n          $mdlext-light-range-bg-color 16px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n\n      /**************************** Thumbs ****************************/\n      &::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-color 0%,\n          $mdlext-light-range-color 37.5%,\n          $mdlext-light-range-faded-color 37.5%,\n          $mdlext-light-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-light-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;\n        background: $mdlext-light-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-light-range-bg-color 66.67%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-light-range-bg-focus-color 0%,\n          $mdlext-light-range-bg-focus-color 25%,\n          $mdlext-light-range-bg-color 25%,\n          $mdlext-light-range-bg-color 37.5%,\n          $mdlext-light-range-bg-focus-color 37.5%,\n          $mdlext-light-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-light-range-bg-color 77.78%,\n          $mdlext-light-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-light-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-light-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-light-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-light-range-bg-color 50%,\n          $mdlext-light-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-light-range-bg-color 25px,\n          $mdlext-light-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-light-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-light-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-light-checkbox-focus-color;\n    background-color: $mdlext-light-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-light-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-light-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-light-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-light-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-light-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-light-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-light-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-light-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-light-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-light-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-light-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-light-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-light-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-light-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-light-switch-faded-color;\n    background-color: $mdlext-light-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-light-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-light-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-light-data-table-divider-color;\n    background-color: $mdlext-light-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-light-data-table-selection-color;\n        }\n        &:hover {\n          background-color: $mdlext-light-data-table-hover-color;\n        }\n      }\n    }\n    th {\n      color: $data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-light-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-light-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-light-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-light-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-light-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-light-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-light-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-light-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-light-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-light-default-item-active-bg-color;\n    }\n  }\n}\n\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdl-card {\n    background: $mdlext-light-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-light-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-light-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-light-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-light-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-light-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(0, 0, 0, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-light-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-light-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-light-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-light-content-background-color;\n      color: $mdlext-light-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-light-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-light-input-text-disabled-color;\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-light-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-light-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-light-input-text-error-color;\n  }\n}\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-light-color-theme {\n  background: $mdlext-light-default-dropdown-bg-color;\n}\n\n.mdlext-light-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-light-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-light-default-item-text-color;\n      background-color: $mdlext-light-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-light-default-item-outline-color;\n        background-color: $mdlext-light-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-light-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-light-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-light-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-light-bordered-field-background-color;\n        border-color: $mdlext-light-bordered-field-border-color;\n        color: $mdlext-light-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-light-bordered-field-disabled-background-color;\n          border-color: $mdlext-light-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-light-bordered-field-focus-background-color;\n          border-color: $mdlext-light-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-light-bordered-field-input-text-error-color;\n          border-color: $mdlext-light-bordered-field-error-border-color;\n          background-color: $mdlext-light-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-light-bordered-field-error-focus-border-color;\n            background-color: $mdlext-light-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-light-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-light-bordered-field-disabled-background-color;\n      border-color: $mdlext-light-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-light-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-light-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-light-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-light-bordered-field-disabled-border-color;\n      }\n    }\n  }\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-light-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-light-accordion-header-secondary-color;\n      background-color: $mdlext-light-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-light-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-light-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-light-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-light-accordion-header-disabled-color;\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-light-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-light-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-light-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-light-accordion-content-color;\n      background-color: $mdlext-light-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-light-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-light-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-light-accordion-header-disabled-color;\n      color: $mdlext-light-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-light-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_light-color-theme.scss","@import \"color-themes\";\n\n.mdlext-dark-color-theme {\n  background-color: $mdlext-dark-content-background-color;\n  color: $mdlext-dark-text-color-primary;\n  a {\n    outline-color: inherit;\n  }\n}\n\n// mdl/src/palette/_palette.scss\n.mdlext-dark-color-theme {\n\n  .mdl-color--primary {\n    background-color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color--primary-contrast {\n    background-color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color--primary-dark {\n    background-color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color--accent {\n    background-color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color--accent-contrast {\n    background-color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n  .mdl-color-text--primary {\n    color: $mdlext-dark-color-primary !important;\n  }\n\n  .mdl-color-text--primary-contrast {\n    color: $mdlext-dark-color-primary-contrast !important;\n  }\n\n  .mdl-color-text--primary-dark {\n    color: $mdlext-dark-color-primary-dark !important;\n  }\n\n  .mdl-color-text--accent {\n    color: $mdlext-dark-color-accent !important;\n  }\n\n  .mdl-color-text--accent-contrast {\n    color: $mdlext-dark-color-accent-contrast !important;\n  }\n\n}\n\n// mdl/src/typography/_typography.scss\n.mdlext-dark-color-theme {\n  a {\n    color: $mdlext-dark-text-link-color;\n  }\n}\n\n\n// mdl/src/badge/_badge.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n  .mdl-badge {\n\n    &[data-badge]::after {\n      background: $mdlext-dark-badge-background;\n      color: $mdlext-dark-badge-color;\n    }\n\n    &.mdl-badge--no-background {\n      &[data-badge]::after {\n        color: $mdlext-dark-badge-color-inverse;\n        background: $mdlext-dark-badge-background-inverse;\n      }\n    }\n  }\n}\n\n\n// mdl/src/button/_button.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-button {\n    background: transparent;\n    color: $mdlext-dark-button-secondary-color;\n\n    &:hover {\n      background-color: $mdlext-dark-button-hover-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-focus-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      color: $mdlext-dark-button-primary-color-alt;\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-focus-color-alt;\n      }\n    }\n  }\n\n  // Raised buttons\n  .mdl-button--raised {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-primary-color-alt;\n      color: $mdlext-dark-button-secondary-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-hover-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // FABs\n  .mdl-button--fab {\n    background: $mdlext-dark-button-primary-color;\n\n    &:active {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &:focus:not(:active) {\n      background-color: $mdlext-dark-button-active-color;\n    }\n\n    &.mdl-button--colored {\n      background: $mdlext-dark-button-fab-color-alt;\n      color: $mdlext-dark-button-fab-text-color-alt;\n\n      &:hover {\n        background-color: $mdlext-dark-button-fab-hover-color-alt;\n      }\n\n      &:focus:not(:active) {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      &:active {\n        background-color: $mdlext-dark-button-fab-active-color-alt;\n      }\n\n      & .mdl-ripple {\n        background: $mdlext-dark-button-fab-ripple-color-alt;\n      }\n    }\n  }\n\n\n  // Icon buttons\n  .mdl-button--icon {\n    color: inherit;\n  }\n\n  // Colorized buttons\n\n  .mdl-button--primary.mdl-button--primary {\n    color: $mdlext-dark-button-primary-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-secondary-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-secondary-color-alt;\n      background-color: $mdlext-dark-button-primary-color-alt;\n    }\n  }\n\n  .mdl-button--accent.mdl-button--accent {\n    color: $mdlext-dark-button-fab-color-alt;\n\n    & .mdl-ripple {\n      background: $mdlext-dark-button-fab-text-color-alt;\n    }\n    &.mdl-button--raised,\n    &.mdl-button--fab {\n      color: $mdlext-dark-button-fab-text-color-alt;\n      background-color: $mdlext-dark-button-fab-color-alt;\n    }\n  }\n\n  // Disabled buttons\n\n  .mdl-button {\n    // Bump up specificity by using [disabled] twice.\n    &[disabled][disabled],\n    &.mdl-button--disabled.mdl-button--disabled {\n      color: $mdlext-dark-button-secondary-color-disabled;\n      background-color: transparent;\n    }\n\n    &--fab {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n\n    &--raised {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        background-color: $mdlext-dark-button-primary-color-disabled;\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n    &--colored {\n      // Bump up specificity by using [disabled] twice.\n      &[disabled][disabled],\n      &.mdl-button--disabled.mdl-button--disabled {\n        color: $mdlext-dark-button-secondary-color-disabled;\n      }\n    }\n  }\n}\n\n\n// mdl/src/slider/_slider.scss\n// ---------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-slider {\n\n    &.is-upgraded {\n      background: transparent;\n      color: $mdlext-dark-range-color;\n\n      &::-webkit-slider-runnable-track {\n        background: transparent;\n      }\n\n      &::-moz-range-track {\n        background: transparent;\n      }\n\n      &::-ms-track {\n        background: none;\n        color: transparent;\n      }\n\n      /* stylelint-disable */\n      &::-ms-fill-lower {\n        background: linear-gradient(\n          to right,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-color 16px,\n          $mdlext-dark-range-color 0\n        );\n      }\n\n      &::-ms-fill-upper {\n        background: linear-gradient(\n          to left,\n          transparent,\n          transparent 16px,\n          $mdlext-dark-range-bg-color 16px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n      &::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;\n      }\n\n      &:active::-webkit-slider-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &:active::-moz-range-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      &::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n      /* stylelint-disable */\n      &:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-color 0%,\n          $mdlext-dark-range-color 37.5%,\n          $mdlext-dark-range-faded-color 37.5%,\n          $mdlext-dark-range-faded-color 100%);\n      }\n      /* stylelint-enable */\n\n      &:active::-ms-thumb {\n        background: $mdlext-dark-range-color;\n      }\n\n\n      /**************************** 0-value ****************************/\n\n      &.is-lowest-value::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {\n        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;\n        background: $mdlext-dark-range-bg-focus-color;\n      }\n\n      &.is-lowest-value:active::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:active::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 66.67%,\n          $mdlext-dark-range-bg-color 66.67%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &.is-lowest-value:focus:not(:active)::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          $mdlext-dark-range-bg-focus-color 0%,\n          $mdlext-dark-range-bg-focus-color 25%,\n          $mdlext-dark-range-bg-color 25%,\n          $mdlext-dark-range-bg-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 37.5%,\n          $mdlext-dark-range-bg-focus-color 100%);\n      }\n\n      &.is-lowest-value:active::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 77.78%,\n          $mdlext-dark-range-bg-color 77.78%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n      /* stylelint-enable */\n\n      &.is-lowest-value::-ms-fill-lower {\n        background: transparent;\n      }\n\n      /**************************** Disabled ****************************/\n\n      &:disabled:focus::-webkit-slider-thumb,\n      &:disabled:active::-webkit-slider-thumb,\n      &:disabled::-webkit-slider-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled:focus::-moz-range-thumb,\n      &:disabled:active::-moz-range-thumb,\n      &:disabled::-moz-range-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {\n        background-color: $mdlext-dark-range-bg-color;\n      }\n\n      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,\n      &.is-lowest-value:disabled:active::-webkit-slider-thumb,\n      &.is-lowest-value:disabled::-webkit-slider-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &.is-lowest-value:disabled:focus::-moz-range-thumb,\n      &.is-lowest-value:disabled:active::-moz-range-thumb,\n      &.is-lowest-value:disabled::-moz-range-thumb {\n        border-color: $mdlext-dark-range-bg-color;\n        background: transparent;\n      }\n\n      &:disabled:focus::-ms-thumb,\n      &:disabled:active::-ms-thumb,\n      &:disabled::-ms-thumb {\n        background: $mdlext-dark-range-bg-color;\n      }\n\n      /* stylelint-disable */\n      &.is-lowest-value:disabled:focus::-ms-thumb,\n      &.is-lowest-value:disabled:active::-ms-thumb,\n      &.is-lowest-value:disabled::-ms-thumb {\n        background: radial-gradient(circle closest-side,\n          transparent 0%,\n          transparent 50%,\n          $mdlext-dark-range-bg-color 50%,\n          $mdlext-dark-range-bg-color 100%);\n      }\n\n      &:disabled::-ms-fill-lower {\n        background: linear-gradient(to right,\n          transparent,\n          transparent 25px,\n          $mdlext-dark-range-bg-color 25px,\n          $mdlext-dark-range-bg-color 0);\n      }\n      /* stylelint-enable */\n\n    }\n  }\n\n  .mdl-slider__background-flex {\n    background: transparent;\n  }\n\n  .mdl-slider__background-lower {\n    background: $mdlext-dark-range-color;\n  }\n\n  // This one styles the upper part of the slider track.\n  .mdl-slider__background-upper {\n    background: $mdlext-dark-range-bg-color;\n  }\n}\n\n\n// mdl/src/textfield/_textfield.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-textfield__input {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__input {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n  .mdl-textfield.is-disabled .mdl-textfield__input {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,\n  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,\n  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield.is-invalid .mdl-textfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n  .mdl-textfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdl/src/checkbox/_checkbox.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-off-color;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,\n  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {\n    border-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {\n    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-dark-checkbox-focus-color;\n    background-color: $mdlext-dark-checkbox-focus-color;\n  }\n\n  .mdl-checkbox__tick-outline {\n    background: transparent;\n  }\n  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,\n  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {\n    background-color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,\n  .mdl-checkbox.is-disabled .mdl-checkbox__label {\n    color: $mdlext-dark-checkbox-disabled-color;\n  }\n\n  .mdl-checkbox__ripple-container .mdl-ripple {\n    background: $mdlext-dark-checkbox-color;\n  }\n  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,\n  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n// mdl/src/radio/_radio.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n  .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-off-color;\n  }\n  .mdl-radio.is-checked .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-color;\n  }\n  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,\n  .mdl-radio.is-disabled .mdl-radio__outer-circle {\n    border-color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,\n  .mdl-radio.is-disabled .mdl-radio__inner-circle {\n    background: $mdlext-dark-radio-disabled-color;\n  }\n\n  fieldset[disabled] .mdl-radio .mdl-radio__label,\n  .mdl-radio.is-disabled .mdl-radio__label {\n    color: $mdlext-dark-radio-disabled-color;\n  }\n\n  .mdl-radio__ripple-container .mdl-ripple {\n    background: $mdlext-dark-radio-color;\n  }\n  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,\n  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n// mdl/src/icon-togglr/_icon-toggle.scss\n// ---------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-checked-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {\n    color: $mdlext-dark-icon-toggle-disabled-color;\n  }\n  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-focus-color;\n  }\n  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {\n    background-color: $mdlext-dark-icon-toggle-checked-focus-color;\n  }\n  .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: $mdlext-dark-icon-toggle-color;\n  }\n  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n}\n\n\n// mdl/src/switch/_switch.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-switch__track {\n    background: $mdlext-dark-switch-off-track-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__track {\n    background: $mdlext-dark-switch-track-color;\n  }\n  .mdl-switch__track fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__track {\n    background: $mdlext-dark-switch-disabled-track-color;\n  }\n\n  .mdl-switch__thumb {\n    background: $mdlext-dark-switch-off-thumb-color;\n  }\n  .mdl-switch.is-checked .mdl-switch__thumb {\n    background: $mdlext-dark-switch-thumb-color;\n  }\n  .mdl-switch__thumb fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__thumb {\n    background: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__focus-helper {\n    background-color: transparent;\n  }\n  .mdl-switch.is-focused .mdl-switch__focus-helper {\n    background-color: rgba(0, 0, 0, 0.1);\n  }\n  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {\n    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-dark-switch-faded-color;\n    background-color: $mdlext-dark-switch-faded-color;\n  }\n\n  .mdl-switch__label fieldset[disabled] .mdl-switch,\n  .mdl-switch.is-disabled .mdl-switch__label {\n    color: $mdlext-dark-switch-disabled-thumb-color;\n  }\n\n  .mdl-switch__ripple-container .mdl-ripple {\n    background: $mdlext-dark-switch-color;\n  }\n  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,\n  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {\n    background: transparent;\n  }\n\n}\n\n\n// mdl/src/data-table/_data-table.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-data-table {\n    border-color: $mdlext-dark-data-table-divider-color;\n    background-color: $mdlext-dark-data-table-background-color;\n\n    tbody {\n      tr {\n        &.is-selected {\n          background-color: $mdlext-dark-data-table-selection-color;\n        }\n\n        &:hover {\n          background-color: $mdlext-dark-data-table-hover-color;\n        }\n      }\n    }\n\n    th {\n      color: $mdlext-dark-data-table-header-color;\n\n      &.mdl-data-table__header--sorted-ascending,\n      &.mdl-data-table__header--sorted-descending {\n        color: $mdlext-dark-data-table-header-sorted-color;\n\n        &:hover {\n          &::before {\n            color: $mdlext-dark-data-table-header-sorted-icon-hover-color;\n          }\n        }\n      }\n    }\n  }\n}\n\n// mdl/src/menu/_menu.scss\n// -----------------------------------\n.mdlext-dark-color-theme {\n\n  .mdl-menu__outline {\n    background: $mdlext-dark-default-dropdown-bg-color;\n  }\n\n  .mdl-menu__item {\n    color: $mdlext-dark-default-item-text-color;\n    background-color: transparent;\n    outline-color: $mdlext-dark-default-item-outline-color;\n\n    &--full-bleed-divider {\n      border-bottom-color: $mdlext-dark-default-item-divider-color;\n    }\n\n    &[disabled],\n    &[data-mdl-disabled] {\n      color: $mdlext-dark-disabled-item-text-color;\n      background-color: transparent;\n\n      &:hover {\n        background-color: transparent;\n      }\n\n      &:focus {\n        background-color: transparent;\n      }\n\n      & .mdl-ripple {\n        background: transparent;\n      }\n    }\n\n    &:hover {\n      background-color: $mdlext-dark-default-item-hover-bg-color;\n    }\n\n    &:focus {\n      background-color: $mdlext-dark-default-item-focus-bg-color;\n    }\n\n    &:active {\n      background-color: $mdlext-dark-default-item-active-bg-color;\n    }\n  }\n}\n\n// mdl/src/card/_card.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n  .mdl-card {\n    background: $mdlext-dark-card-background-color;\n  }\n\n  .mdl-card__media {\n    background-color: $mdlext-dark-card-image-placeholder-color;\n  }\n\n  .mdl-card__title {\n    color: $mdlext-dark-card-text-color;\n\n    &.mdl-card--border {\n      border-bottom-color: $mdlext-dark-card-border-color;\n    }\n  }\n\n  .mdl-card__title-text {\n    color: inherit;\n  }\n\n  .mdl-card__subtitle-text {\n    color: $mdlext-dark-card-subtitle-color;\n  }\n\n  .mdl-card__supporting-text {\n    color: $mdlext-dark-card-supporting-text-text-color;\n  }\n\n  .mdl-card__actions {\n    background-color: rgba(255, 255, 255, 0);\n\n    &.mdl-card--border {\n      border-top-color: $mdlext-dark-card-border-color;\n    }\n  }\n}\n\n\n// mdlext/src/selectfield/_selectfield.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-selectfield.is-disabled::after {\n    color: $mdlext-dark-input-text-disabled-color;\n    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-input-text-disabled-color);\n  }\n\n  .mdlext-selectfield__select {\n    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;\n    color: inherit;\n\n    option {\n      background-color: $mdlext-dark-content-background-color;\n      color: $mdlext-dark-text-color-primary;\n    }\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {\n    border-color: $mdlext-dark-input-text-error-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,\n  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {\n    background-color: transparent;\n    border-bottom-color: $mdlext-dark-input-text-disabled-color;\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n\n  .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-label-color;\n  }\n  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,\n  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-disabled-text-color;\n  }\n  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,\n  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {\n    color: $mdlext-dark-input-text-error-color;\n  }\n  .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-highlight-color;\n  }\n  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {\n    background-color: $mdlext-dark-input-text-error-color;\n  }\n\n  .mdlext-selectfield__error {\n    color: $mdlext-dark-input-text-error-color;\n  }\n}\n\n\n// mdlext/src/menu-button/_menu-button.scss\n// ----------------------------------------\n.mdlext-menu.mdlext-dark-color-theme {\n  background: $mdlext-dark-default-dropdown-bg-color;\n}\n\n.mdlext-dark-color-theme {\n\n  .mdlext-menu {\n    background: $mdlext-dark-default-dropdown-bg-color;\n\n    &__item {\n      color: $mdlext-dark-default-item-text-color;\n      background-color: $mdlext-dark-default-dropdown-bg-color;\n\n      &:active,\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-default-item-active-bg-color;\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-default-item-hover-bg-color;\n      }\n      &:focus {\n        outline-color: $mdlext-dark-default-item-outline-color;\n        background-color: $mdlext-dark-default-item-focus-bg-color;\n      }\n      &[disabled] {\n        color: $mdlext-dark-disabled-item-text-color;\n\n        > * {\n          color: $mdlext-dark-disabled-item-text-color;\n        }\n      }\n    }\n    &__item-separator {\n      border-bottom: 1px solid $mdlext-dark-default-item-divider-color;\n    }\n  }\n}\n\n\n// mdlext/src/bordered-fields/_bordered-fields.scss\n// -------------------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-bordered-fields {\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__input,\n      .mdlext-selectfield__select {\n        background-color: $mdlext-dark-bordered-field-background-color;\n        border-color: $mdlext-dark-bordered-field-border-color;\n        color: $mdlext-dark-bordered-field-input-text-color;\n\n        &:disabled {\n          color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n          background-color: $mdlext-dark-bordered-field-disabled-background-color;\n          border-color: $mdlext-dark-bordered-field-disabled-border-color;\n        }\n        &:focus {\n          background-color: $mdlext-dark-bordered-field-focus-background-color;\n          border-color: $mdlext-dark-bordered-field-focus-border-color;\n        }\n      }\n      &.is-invalid {\n        .mdl-textfield__input,\n        .mdlext-selectfield__select {\n          color: $mdlext-dark-bordered-field-input-text-error-color;\n          border-color: $mdlext-dark-bordered-field-error-border-color;\n          background-color: $mdlext-dark-bordered-field-error-background-color;\n\n          &:focus {\n            border-color: $mdlext-dark-bordered-field-error-focus-border-color;\n            background-color: $mdlext-dark-bordered-field-error-focus-background-color;\n          }\n        }\n      }\n    }\n\n    fieldset[disabled] .mdlext-selectfield::after,\n    .mdlext-selectfield.is-disabled::after {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-bordered-field-input-text-disabled-text-color);\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__input,\n    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {\n      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;\n      background-color: $mdlext-dark-bordered-field-disabled-background-color;\n      border-color: $mdlext-dark-bordered-field-disabled-border-color;\n    }\n\n    .mdl-textfield,\n    .mdlext-selectfield {\n\n      .mdl-textfield__label,\n      .mdlext-selectfield__label {\n        color: $mdlext-dark-bordered-field-input-text-label-color;\n      }\n      &.mdl-textfield--floating-label.is-focused.is-focused,\n      &.mdl-textfield--floating-label.is-dirty.is-dirty,\n      &.mdl-textfield--floating-label.has-placeholder,\n      &.mdlext-selectfield--floating-label.is-focused.is-focused,\n      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,\n      &.mdlext-selectfield--floating-label.has-placeholder {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-focus-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-disabled.is-disabled,\n      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n        }\n      }\n      &.mdl-textfield--floating-label.is-invalid.is-invalid,\n      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {\n\n        .mdl-textfield__label,\n        .mdlext-selectfield__label {\n          color: $mdlext-dark-bordered-field-input-text-label-error-color;\n        }\n      }\n    }\n\n    fieldset[disabled] .mdl-textfield .mdl-textfield__label,\n    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {\n      color: $mdlext-dark-bordered-field-input-text-label-disabled-color;\n    }\n\n    // Icon(s) and/or button(s) inside textfield\n    .mdl-textfield,\n    .mdlext-selectfield {\n      &.is-disabled i,\n      &.is-disabled .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n    fieldset[disabled] .mdl-textfield,\n    fieldset[disabled] .mdlext-selectfield {\n      i,\n      .mdl-button {\n        color: $mdlext-dark-bordered-field-disabled-border-color;\n      }\n    }\n  }\n\n}\n\n\n// mdlext/src/accordion/_accordion.scss\n// ----------------------------------------\n.mdlext-dark-color-theme {\n\n  .mdlext-accordion {\n\n    &__tab {\n      color: $mdlext-dark-accordion-header-secondary-color;\n      background-color: $mdlext-dark-accordion-header-background-color;\n\n      &:focus {\n        outline-color: $mdlext-dark-accordion-header-focus-outline-color;\n      }\n      &[aria-expanded='true'] {\n        background-color: $mdlext-dark-accordion-header-background-open-color;\n      }\n      &[aria-selected='true'] {\n        background-color: $mdlext-dark-accordion-header-background-active-color;\n      }\n      &[disabled] {\n        background-color: $mdlext-dark-accordion-header-disabled-color;\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        pointer-events: none;\n\n        > * {\n          color: $mdlext-dark-accordion-header-secondary-color-disabled;\n        }\n      }\n      &:hover:not([disabled]) {\n        background-color: $mdlext-dark-accordion-header-background-hover-color;\n      }\n      &--ripple {\n        &[aria-selected='true']::before {\n          background: $mdlext-dark-accordion-ripple-color;\n        }\n      }\n    }\n\n    &__tabpanel {\n      color: $mdlext-dark-accordion-content-color;\n      background-color: $mdlext-dark-accordion-content-background-color;\n    }\n  }\n\n  // Vertical layout\n  .mdlext-accordion {\n\n    &--vertical {\n\n      .mdlext-accordion__tab {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-top: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  // Horizontal layout\n  .mdlext-accordion {\n\n    &--horizontal {\n\n      .mdlext-accordion__tab {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n\n        &[aria-selected='true']::after {\n          background-color: $mdlext-dark-accordion-header-highlight-color;\n        }\n      }\n      .mdlext-accordion__tabpanel {\n        border-left: 1px solid $mdlext-dark-accordion-header-border-color;\n      }\n    }\n  }\n\n  .mdlext-accordion {\n\n    &__panel:first-child > &__tab {\n      // Use container to set outer borders\n      border-top-color: transparent;\n      border-left-color: transparent;\n    }\n  }\n\n  // Making accordion appear disabled.\n  // Note: does not prevent tabbing into a disabled accordion\n  .mdlext-accordion[disabled] {\n    .mdlext-accordion__tab {\n      background-color: $mdlext-dark-accordion-header-disabled-color;\n      color: $mdlext-dark-accordion-header-secondary-color-disabled;\n\n      > * {\n        color: $mdlext-dark-accordion-header-secondary-color-disabled;\n      }\n    }\n    .mdlext-accordion__tabpanel {\n      opacity: 0.8;\n      filter: blur(1px) grayscale(80%);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/color-themes/_dark-color-theme.scss"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.min.js b/node_modules/mdl-ext/lib/mdl-ext.min.js
new file mode 100644
index 0000000..c972548
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.min.js
@@ -0,0 +1,4 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("mdl-ext",[],t):"object"==typeof exports?exports["mdl-ext"]=t():e["mdl-ext"]=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return e[i].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){n(113),e.exports=n(53)},function(e,t){var n=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=9,i=13,r=27,o=32,s=33,a=34,l=35,c=36,u=37,d=38,f=39,h=40,p="aria-expanded",m="aria-hidden",_="aria-multiselectable",v="aria-selected",g="is-dirty",b="is-disabled",E="is-expanded",y="is-focused",A="is-invalid",w="is-upgraded",L="data-upgraded",S="mdl-ripple",x="MaterialRipple",k="mdl-js-ripple-effect",D="mdl-js-ripple-effect--ignore-events";t.VK_TAB=n,t.VK_ENTER=i,t.VK_ESC=r,t.VK_SPACE=o,t.VK_PAGE_UP=s,t.VK_PAGE_DOWN=a,t.VK_END=l,t.VK_HOME=c,t.VK_ARROW_LEFT=u,t.VK_ARROW_UP=d,t.VK_ARROW_RIGHT=f,t.VK_ARROW_DOWN=h,t.ARIA_EXPANDED=p,t.ARIA_HIDDEN=m,t.ARIA_MULTISELECTABLE=_,t.ARIA_SELECTED=v,t.IS_DIRTY=g,t.IS_DISABLED=b,t.IS_EXPANDED=E,t.IS_FOCUSED=y,t.IS_INVALID=A,t.IS_UPGRADED=w,t.DATA_UPGRADED=L,t.MDL_RIPPLE=S,t.MDL_RIPPLE_COMPONENT=x,t.MDL_RIPPLE_EFFECT=k,t.MDL_RIPPLE_EFFECT_IGNORE_EVENTS=D},function(e,t,n){var i=n(5),r=n(1),o=n(37),s=n(11),a="prototype",l=function(e,t,n){var c,u,d,f=e&l.F,h=e&l.G,p=e&l.S,m=e&l.P,_=e&l.B,v=e&l.W,g=h?r:r[t]||(r[t]={}),b=g[a],E=h?i:p?i[t]:(i[t]||{})[a];h&&(n=t);for(c in n)u=!f&&E&&void 0!==E[c],u&&c in g||(d=u?E[c]:n[c],g[c]=h&&"function"!=typeof E[c]?n[c]:_&&u?o(d,i):v&&E[c]==d?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t[a]=e[a],t}(d):m&&"function"==typeof d?o(Function.call,d):d,m&&((g.virtual||(g.virtual={}))[c]=d,e&l.R&&b&&!b[c]&&s(b,c,d)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,n){var i=n(44)("wks"),r=n(46),o=n(5).Symbol,s="function"==typeof o,a=e.exports=function(e){return i[e]||(i[e]=s&&o[e]||(s?o:r)("Symbol."+e))};a.store=i},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,n){var i=n(17);e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports={}},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(60),o=i(r);t.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return(0,o.default)(e)}},function(e,t,n){e.exports=!n(10)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(12),r=n(25);e.exports=n(9)?function(e,t,n){return i.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var i=n(6),r=n(82),o=n(101),s=Object.defineProperty;t.f=n(9)?Object.defineProperty:function(e,t,n){if(i(e),t=o(t,!0),i(n),r)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(66),o=i(r),s=function(e,t){t||(t=window);var n=!1;return function(){for(var i=arguments.length,r=Array(i),s=0;s<i;s++)r[s]=arguments[s];n||(n=!0,window.requestAnimationFrame(function(){return n=!1,(0,o.default)(e,t,r)}))}};t.default=s,e.exports=t.default},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.jsonStringToObject=void 0;var r=n(33),o=i(r),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.replace(/'/g,'"');try{return(0,o.default)(t,JSON.parse(n))}catch(e){throw new Error("Failed to parse json string: "+n+". Error: "+e.message)}};t.jsonStringToObject=s},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.stringList=t.randomString=t.joinStrings=void 0;var r=n(65),o=i(r),s=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=function(e){return null!=e&&"string"==typeof e},r=function e(t){return t.reduce(function(t,n){return t.concat(Array.isArray(n)?e(n):n)},[])},s=function(e){return(0,o.default)(e).filter(function(t){return e[t]}).map(function(e){return e})};return t.filter(function(e){return!!e}).map(function(e){return i(e)?e:s(e)}).reduce(function(e,t){return e.concat(Array.isArray(t)?r(t):t)},[])},a=function(){for(var e=arguments.length,t=Array(e>1?e-1:0),n=1;n<e;n++)t[n-1]=arguments[n];var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:" ";return s.apply(void 0,t).join(i)},l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:12;return Array(e+1).join((Math.random().toString(36)+"00000000000000000").slice(2,18)).slice(0,e)};t.joinStrings=a,t.randomString=l,t.stringList=s},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var i=n(95),r=n(39);e.exports=Object.keys||function(e){return i(e,r)}},function(e,t,n){var i=n(40),r=n(24);e.exports=function(e){return i(r(e))}},function(e,t,n){var i=n(24);e.exports=function(e){return Object(i(e))}},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.tether=t.removeChildElements=t.moveElements=t.isRectInsideWindowViewport=t.isFocusable=t.getScrollParents=t.getParentElements=t.getWindowViewport=void 0;var r=n(62),o=i(r),s=function(e){for(var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.lastChild;)e.removeChild(e.lastChild);if(t){var n=e.style.display;e.style.display="none",e.style.display=n}},a=function(e,t){for(t||(t=e.ownerDocument.createDocumentFragment());e.firstChild;)t.appendChild(e.firstChild);return t},l=function(){return{viewportWidth:Math.max(document.documentElement.clientWidth||0,window.innerWidth||0),viewportHeight:Math.max(document.documentElement.clientHeight||0,window.innerHeight||0)}},c=function(e){var t=e.top,n=e.left,i=e.bottom,r=e.right,o=l(),s=o.viewportWidth,a=o.viewportHeight;return t>=0&&n>=0&&i<=a&&r<=s},u=function(e){for(var t=[],n=e.parentNode;n;){var i=window.getComputedStyle(n);if("hidden"===i.overflowY&&"hidden"===i.overflowX||t.unshift(n),n===document.body)break;n=n.parentNode}return t},d=function(e,t){for(var n=[],i=e.parentNode;i&&i!==t;)n.unshift(i),i=i.parentNode;return n},f=function(e,t){var n=e.getBoundingClientRect(),i=l(),r=i.viewportWidth,o=i.viewportHeight;t.style.height="auto",t.offsetHeight>o&&(t.style.height=o+"px",t.style.overflowY="auto"),t.style.width="auto",t.offsetWidth>r&&(t.style.width=r+"px");var s=t.getBoundingClientRect(),a=n.top-s.top,u=n.left-s.left,d=s.top+a,f=s.left+u,h=d+s.height,p=f+s.width,m=a,_=u;if(c({top:d+n.height,left:f,bottom:h+n.height,right:p}))m=n.height+a;else if(c({top:d+n.height,left:f+n.width-s.width,bottom:h+n.height,right:f+n.width}))m=n.height+a,_=u+n.width-s.width;else if(c({top:d-s.height,left:f,bottom:h-s.height,right:p}))m=a-s.height;else if(c({top:d-s.height,left:f+n.width-s.width,bottom:h-s.height,right:f+n.width}))m=a-s.height,_=u+n.width-s.width;else if(c({top:d,left:f+n.width,bottom:h,right:p+n.width}))_=n.width+u;else if(c({top:d,left:f-n.width,bottom:h,right:p-n.width}))_=u-s.width;else if(m=a-h+o,d+n.height>=0&&h+n.height<=o?m=n.height+a:d-s.height>=0&&h-s.height<=o&&(m=a-s.height),f+s.width+n.width<=r)_=n.width+u;else if(f-s.width>=0)_=u-s.width;else{var v=f+s.width-r;_=u-v}t.style.top=t.offsetTop+m+"px",t.style.left=t.offsetLeft+_+"px"},h=function(e){if(e.hasAttribute("tabindex")){var t=e.getAttribute("tabindex");if(!(0,o.default)(t))return parseInt(t)>-1}if(e.hasAttribute("contenteditable")&&"false"!==e.getAttribute("contenteditable"))return!0;var n=/input|select|textarea|button|details/i,i=e.nodeName;if(n.test(i))return"hidden"!==e.type.toLowerCase()&&!e.disabled;if("A"===i||"AREA"===i)return!!e.href;if("IFRAME"===i){var r=window.getComputedStyle(e);return"none"!==r.getPropertyValue("display").toLowerCase()}return!1};t.getWindowViewport=l,t.getParentElements=d,t.getScrollParents=u,t.isFocusable=h,t.isRectInsideWindowViewport=c,t.moveElements=a,t.removeChildElements=s,t.tether=f},function(e,t){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(63),o=i(r);t.default=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),(0,o.default)(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}()},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var i=n(44)("keys"),r=n(46);e.exports=function(e){return i[e]||(i[e]=r(e))}},function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},function(e,t,n){"use strict";var i=n(99)(!0);n(41)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=i(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n,i){return e/=i/2,e<1?n/2*e*e+t:(e--,-n/2*(e*(e-2)-1)+t)},i=function(e,t,n,i){var r=(e/=i)*e,o=r*e;return t+n*(6*o*r+-15*r*r+10*o)};t.easeInOutQuad=n,t.inOutQuintic=i},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=1e3/60,i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n,t=e<n?n:e,i=void 0,r=null,o=0,s=function(){var e=i(o);e||a()},a=function(){r&&window.cancelAnimationFrame(r),r=null,o=0},l=function(){var e=Date.now(),n=function n(i){r&&(r=window.requestAnimationFrame(function(){return n(Date.now())}),o+=i-e,o>=t&&(s(),(o-=t)>t&&(o=0)),e=i)};r=1,n(e)};return{get started(){return null!=r},get interval(){return t},set interval(e){t=e<n?n:e},start:function(e){if("function"!=typeof e)throw new TypeError("callback parameter must be a function");i=e,l()},immediate:function(){if(!i)throw new ReferenceError("callback parameter is not defined. Call start before immediate.");s()},stop:function(){return a()}}};t.default=i,e.exports=t.default},function(e,t,n){e.exports={default:n(69),__esModule:!0}},function(e,t,n){e.exports={default:n(71),__esModule:!0}},function(e,t,n){e.exports={default:n(73),__esModule:!0}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var i=n(36),r=n(4)("toStringTag"),o="Arguments"==i(function(){return arguments}()),s=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=s(t=Object(e),r))?n:o?i(t):"Object"==(a=i(t))&&"function"==typeof t.callee?"Arguments":a}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var i=n(34);e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){var i=n(17),r=n(5).document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var i=n(36);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var i=n(89),r=n(3),o=n(98),s=n(11),a=n(16),l=n(7),c=n(86),u=n(43),d=n(94),f=n(4)("iterator"),h=!([].keys&&"next"in[].keys()),p="@@iterator",m="keys",_="values",v=function(){return this};e.exports=function(e,t,n,g,b,E,y){c(n,t,g);var A,w,L,S=function(e){if(!h&&e in C)return C[e];switch(e){case m:return function(){return new n(this,e)};case _:return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",k=b==_,D=!1,C=e.prototype,R=C[f]||C[p]||b&&C[b],I=R||S(b),O=b?k?S("entries"):I:void 0,M="Array"==t?C.entries||R:R;if(M&&(L=d(M.call(new e)),L!==Object.prototype&&(u(L,x,!0),i||a(L,f)||s(L,f,v))),k&&R&&R.name!==_&&(D=!0,I=function(){return R.call(this)}),i&&!y||!h&&!D&&C[f]||s(C,f,I),l[t]=I,l[x]=v,b)if(A={values:k?I:S(_),keys:E?I:S(m),entries:O},y)for(w in A)w in C||o(C,w,A[w]);else r(r.P+r.F*(h||D),t,A);return A}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var i=n(12).f,r=n(16),o=n(4)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},function(e,t,n){var i=n(5),r="__core-js_shared__",o=i[r]||(i[r]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t,n){var i=n(27),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},function(e,t,n){var i=n(35),r=n(4)("iterator"),o=n(7);e.exports=n(1).getIteratorMethod=function(e){if(void 0!=e)return e[r]||e["@@iterator"]||o[i(e)]}},function(e,t,n){n(105);for(var i=n(5),r=n(11),o=n(7),s=n(4)("toStringTag"),a=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],l=0;l<5;l++){var c=a[l],u=i[c],d=u&&u.prototype;d&&!d[s]&&r(d,s,c),o[c]=o.Array}},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(8),o=i(r),s=n(2);!function(){var e="mdlext-accordion",t="mdlext-accordion--vertical",n="mdlext-accordion--horizontal",i="mdlext-accordion__panel",r="presentation",a="mdlext-accordion__tab",l="mdlext-accordion__tab__caption",c="tab",u="mdlext-accordion__tabpanel",d="tabpanel",f="mdlext-js-ripple-effect",h="mdlext-accordion__tab--ripple",p="mdlext-js-animation-effect",m="mdlext-accordion__tabpanel--animation",_=function(e){this.element_=e,this.init()};window.MaterialExtAccordion=_;var v=function(e){return e?e.classList.contains(i)?{panel:e,tab:e.querySelector("."+a),tabpanel:e.querySelector("."+u)}:{panel:e.parentNode,tab:e.parentNode.querySelector("."+a),tabpanel:e.parentNode.querySelector("."+u)}:{panel:null,tab:null,tabpanel:null}};_.prototype.commandHandler_=function(e){e.preventDefault(),e.stopPropagation(),e&&e.detail&&this.command(e.detail)},_.prototype.dispatchToggleEvent_=function(e,t,n){var i=new CustomEvent("toggle",{bubbles:!0,cancelable:!0,detail:{state:e,tab:t,tabpanel:n}});this.element_.dispatchEvent(i)},_.prototype.openTab_=function(e,t,n){e.classList.add(s.IS_EXPANDED),t.setAttribute(s.ARIA_EXPANDED,"true"),n.removeAttribute("hidden"),n.setAttribute(s.ARIA_HIDDEN,"false"),this.dispatchToggleEvent_("open",t,n)},_.prototype.closeTab_=function(e,t,n){e.classList.remove(s.IS_EXPANDED),t.setAttribute(s.ARIA_EXPANDED,"false"),n.setAttribute("hidden",""),n.setAttribute(s.ARIA_HIDDEN,"true"),this.dispatchToggleEvent_("close",t,n)},_.prototype.toggleTab_=function(e,t,n){this.element_.hasAttribute("disabled")||t.hasAttribute("disabled")||("true"===t.getAttribute(s.ARIA_EXPANDED).toLowerCase()?this.closeTab_(e,t,n):("true"!==this.element_.getAttribute(s.ARIA_MULTISELECTABLE).toLowerCase()&&this.closeTabs_(),this.openTab_(e,t,n)))},_.prototype.openTabs_=function(){var t=this;"true"===this.element_.getAttribute(s.ARIA_MULTISELECTABLE).toLowerCase()&&[].concat((0,o.default)(this.element_.querySelectorAll("."+e+" > ."+i))).filter(function(e){return!e.classList.contains(s.IS_EXPANDED)}).forEach(function(e){var n=e.querySelector("."+a);n.hasAttribute("disabled")||t.openTab_(e,n,e.querySelector("."+u))})},_.prototype.closeTabs_=function(){var t=this;[].concat((0,o.default)(this.element_.querySelectorAll("."+e+" > ."+i+"."+s.IS_EXPANDED))).forEach(function(e){var n=e.querySelector("."+a);n.hasAttribute("disabled")||t.closeTab_(e,n,e.querySelector("."+u))})},_.prototype.upgradeTab=function(e){var t=this,u=v(e),_=u.panel,g=u.tab,b=u.tabpanel,E=function(){_.classList.remove(s.IS_EXPANDED),g.setAttribute("tabindex","-1"),g.setAttribute(s.ARIA_EXPANDED,"false"),b.setAttribute("hidden",""),b.setAttribute(s.ARIA_HIDDEN,"true")},y=function(){g.hasAttribute(s.ARIA_EXPANDED)||g.setAttribute(s.ARIA_EXPANDED,"false"),g.setAttribute("tabindex","0"),"true"===g.getAttribute(s.ARIA_EXPANDED).toLowerCase()?(_.classList.add(s.IS_EXPANDED),b.removeAttribute("hidden"),b.setAttribute(s.ARIA_HIDDEN,"false")):(_.classList.remove(s.IS_EXPANDED),b.setAttribute("hidden",""),b.setAttribute(s.ARIA_HIDDEN,"true"))},A=function(){var e=g.querySelector("."+l);if(null!==e){var t=[].concat((0,o.default)(g.children)).filter(function(e){return e.classList&&!e.classList.contains(l)}).reduce(function(e,t){return e+t.offsetWidth},0),n=g.clientHeight-t;n>0&&(e.style["max-width"]=n+"px")}},w=function(){g.hasAttribute(s.ARIA_SELECTED)||([].concat((0,o.default)(t.element_.querySelectorAll("."+a+'[aria-selected="true"]'))).forEach(function(e){return e.removeAttribute(s.ARIA_SELECTED)}),g.setAttribute(s.ARIA_SELECTED,"true"))},L=function(){t.toggleTab_(_,g,b),w()},S=function(){w()},x=function(){w()},k=function(){w()},D=function(e){if(!t.element_.hasAttribute("disabled"))if(e.keyCode===s.VK_END||e.keyCode===s.VK_HOME||e.keyCode===s.VK_ARROW_UP||e.keyCode===s.VK_ARROW_LEFT||e.keyCode===s.VK_ARROW_DOWN||e.keyCode===s.VK_ARROW_RIGHT){var n=null,r=e.keyCode;if(r===s.VK_HOME?(n=t.element_.querySelector("."+i+":first-child > ."+a),n&&n.hasAttribute("disabled")&&(n=null,r=s.VK_ARROW_DOWN)):r===s.VK_END&&(n=t.element_.querySelector("."+i+":last-child > ."+a),n&&n.hasAttribute("disabled")&&(n=null,r=s.VK_ARROW_UP)),!n){var l=_;do{if(r===s.VK_ARROW_UP||r===s.VK_ARROW_LEFT?(l=l.previousElementSibling,l||(l=t.element_.querySelector("."+i+":last-child")),l&&(n=l.querySelector("."+i+" > ."+a))):r!==s.VK_ARROW_DOWN&&r!==s.VK_ARROW_RIGHT||(l=l.nextElementSibling,l||(l=t.element_.querySelector("."+i+":first-child")),l&&(n=l.querySelector("."+i+" > ."+a))),!n||!n.hasAttribute("disabled"))break;n=null}while(l!==_)}n&&(e.preventDefault(),e.stopPropagation(),n.focus(),n.hasAttribute(s.ARIA_SELECTED)||([].concat((0,o.default)(t.element_.querySelectorAll("."+a+'[aria-selected="true"]'))).forEach(function(e){return e.removeAttribute(s.ARIA_SELECTED)}),n.setAttribute(s.ARIA_SELECTED,"true")))}else e.keyCode!==s.VK_ENTER&&e.keyCode!==s.VK_SPACE||(e.preventDefault(),e.stopPropagation(),t.toggleTab_(_,g,b))};if(null===g)throw new Error("There must be a tab element for each accordion panel.");if(null===b)throw new Error("There must be a tabpanel element for each accordion panel.");_.setAttribute("role",r),g.setAttribute("role",c),b.setAttribute("role",d),g.hasAttribute("disabled")?E():y(),this.element_.classList.contains(n)&&A(),this.element_.classList.contains(f)&&g.classList.add(h),this.element_.classList.contains(p)&&b.classList.add(m),g.removeEventListener("click",L),g.removeEventListener("focus",S),g.removeEventListener("keydown",D),b.removeEventListener("click",x),b.removeEventListener("focus",k),g.addEventListener("click",L),g.addEventListener("focus",S),g.addEventListener("keydown",D),b.addEventListener("click",x,!0),b.addEventListener("focus",k,!0)},_.prototype.upgradeTab=_.prototype.upgradeTab,_.prototype.command=function(e){var t=this,n=function(e){if(void 0===e)t.openTabs_();else if(null!==e){var n=v(e),i=n.panel,r=n.tab,o=n.tabpanel;"true"!==r.getAttribute(s.ARIA_EXPANDED).toLowerCase()&&t.toggleTab_(i,r,o)}},i=function(e){if(void 0===e)t.closeTabs_();else if(null!==e){var n=v(e),i=n.panel,r=n.tab,o=n.tabpanel;"true"===r.getAttribute(s.ARIA_EXPANDED).toLowerCase()&&t.toggleTab_(i,r,o)}},r=function(e){if(e){var n=v(e),i=n.panel,r=n.tab,o=n.tabpanel;t.toggleTab_(i,r,o)}};if(e&&e.action){var o=e.action,a=e.target;switch(o.toLowerCase()){case"open":n(a);break;case"close":i(a);break;case"toggle":r(a);break;case"upgrade":a&&this.upgradeTab(a);break;default:throw new Error('Unknown action "'+o+'". Action must be one of "open", "close", "toggle" or "upgrade"')}}},_.prototype.command=_.prototype.command,_.prototype.init=function(){var r=this;if(this.element_){if(!this.element_.classList.contains(n)&&!this.element_.classList.contains(t))throw new Error('Accordion must have one of the classes "'+n+'" or "'+t+'"');this.element_.setAttribute("role","tablist"),this.element_.hasAttribute(s.ARIA_MULTISELECTABLE)||this.element_.setAttribute(s.ARIA_MULTISELECTABLE,"false"),this.element_.removeEventListener("command",this.commandHandler_),this.element_.addEventListener("command",this.commandHandler_.bind(this),!1),[].concat((0,o.default)(this.element_.querySelectorAll("."+e+" > ."+i))).forEach(function(e){return r.upgradeTab(e)}),this.element_.classList.add(s.IS_UPGRADED)}},componentHandler.register({constructor:_,classAsString:"MaterialExtAccordion",cssClass:"mdlext-js-accordion",widget:!0})}()},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(32),o=i(r),s=n(8),a=i(s),l=n(33),c=i(l),u=n(30),d=i(u),f=n(29),h=n(14),p=n(2),m="mdlext-carousel__slide__ripple-container";!function(){var e="mdlext-carousel__slide",t="list",n="listitem",i=function(e){this.element_=e,this.config_={interactive:!0,autostart:!1,type:"slide",interval:1e3,animationLoop:(0,d.default)(1e3)},this.scrollAnimation_=(0,d.default)(33),this.init()};window.MaterialExtCarousel=i,i.prototype.startSlideShow_=function(){var t=this,n=function(){var n=t.element_.querySelector("."+e+"[aria-selected]");return n&&(n.removeAttribute("aria-selected"),n=n.nextElementSibling),n||(n=t.element_.querySelector("."+e+":first-child"),t.animateScroll_(0)),!!n&&(t.moveSlideIntoViewport_(n),n.setAttribute("aria-selected",""),t.emitSelectEvent_("next",null,n),!0)},i=function(e){var n=e;"next"===e&&t.element_.scrollLeft===t.element_.scrollWidth-t.element_.clientWidth?n="prev":0===t.element_.scrollLeft&&(n="next");var i="next"===n?Math.min(t.element_.scrollLeft+t.element_.clientWidth,t.element_.scrollWidth-t.element_.clientWidth):Math.max(t.element_.scrollLeft-t.element_.clientWidth,0);return t.animateScroll_(i,1e3),n};this.config_.animationLoop.started||!function(){t.config_.animationLoop.interval=t.config_.interval;var e="next";"scroll"===t.config_.type?t.config_.animationLoop.start(function(){return e=i(e),!0}):(n(),t.config_.animationLoop.start(function(){return n()}))}()},i.prototype.cancelSlideShow_=function(){this.config_.animationLoop.started&&(this.config_.animationLoop.stop(),this.emitSelectEvent_("pause",p.VK_ESC,this.element_.querySelector("."+e+"[aria-selected]")))},i.prototype.animateScroll_=function(e,t,n){var i=this,r=this.element_.scrollLeft,o=e-r;0!==o?!function(){var s=Math.max(Math.min(Math.abs(o),t||400),100),a=0;i.scrollAnimation_.stop(),i.scrollAnimation_.start(function(t){return a+=t,a<s?(i.element_.scrollLeft=(0,f.inOutQuintic)(a,r,o,s),!0):(i.element_.scrollLeft=e,n&&n(),!1)})}():n&&n()},i.prototype.command_=function(t){var n=this,i=0,r=null,o=t.detail.action.toLowerCase();switch(this.cancelSlideShow_(),o){case"first":r=this.element_.querySelector("."+e+":first-child");break;case"last":i=this.element_.scrollWidth-this.element_.clientWidth,r=this.element_.querySelector("."+e+":last-child");break;case"scroll-prev":i=Math.max(this.element_.scrollLeft-this.element_.clientWidth,0);break;case"scroll-next":i=Math.min(this.element_.scrollLeft+this.element_.clientWidth,this.element_.scrollWidth-this.element_.clientWidth);break;case"next":case"prev":return r=this.element_.querySelector("."+e+"[aria-selected]"),void(r&&(r="next"===o?r.nextElementSibling:r.previousElementSibling,this.setAriaSelected_(r),this.emitSelectEvent_(o,null,r)));case"play":return(0,c.default)(this.config_,t.detail),void this.startSlideShow_();case"pause":return;default:return}this.animateScroll_(i,void 0,function(){if("scroll-next"===o||"scroll-prev"===o){var e=n.getSlidesInViewport_();e.length>0&&(r="scroll-next"===o?e[0]:e[e.length-1])}n.setAriaSelected_(r),n.emitSelectEvent_(o,null,r)})},i.prototype.commandHandler_=function(e){e.preventDefault(),e.stopPropagation(),e.detail&&e.detail.action&&this.command_(e)},i.prototype.keyDownHandler_=function(e){if(e&&e.target&&e.target!==this.element_){var t="first";if(e.keyCode===p.VK_HOME||e.keyCode===p.VK_END||e.keyCode===p.VK_PAGE_UP||e.keyCode===p.VK_PAGE_DOWN){e.preventDefault(),e.keyCode===p.VK_END?t="last":e.keyCode===p.VK_PAGE_UP?t="scroll-prev":e.keyCode===p.VK_PAGE_DOWN&&(t="scroll-next");var n=new CustomEvent("select",{detail:{action:t}});this.command_(n)}else if(e.keyCode===p.VK_TAB||e.keyCode===p.VK_ENTER||e.keyCode===p.VK_SPACE||e.keyCode===p.VK_ARROW_UP||e.keyCode===p.VK_ARROW_LEFT||e.keyCode===p.VK_ARROW_DOWN||e.keyCode===p.VK_ARROW_RIGHT){var i=r(e.target);if(!i)return;switch(this.cancelSlideShow_(),e.keyCode){case p.VK_ARROW_UP:case p.VK_ARROW_LEFT:t="prev",i=i.previousElementSibling;break;case p.VK_ARROW_DOWN:case p.VK_ARROW_RIGHT:t="next",i=i.nextElementSibling;break;case p.VK_TAB:e.shiftKey?(t="prev",i=i.previousElementSibling):(t="next",i=i.nextElementSibling);break;case p.VK_SPACE:case p.VK_ENTER:t="select"}i&&(e.preventDefault(),s(i),this.emitSelectEvent_(t,e.keyCode,i))}}},i.prototype.dragHandler_=function(e){var t=this;e.preventDefault(),this.cancelSlideShow_();var n=!1,i=0,o=e.clientX||(void 0!==e.touches?e.touches[0].clientX:0),a=o,l=e.target,c=function(e){var i=e.clientX||(void 0!==e.touches?e.touches[0].clientX:0),r=a-i;r<0?t.element_.scrollLeft=Math.max(t.element_.scrollLeft+r,0):r>0&&(t.element_.scrollLeft=Math.min(t.element_.scrollLeft+r,t.element_.scrollWidth-t.element_.clientWidth)),a=i,n=!1},u=function(e){e.preventDefault(),n||(i=window.requestAnimationFrame(function(){return c(e)}),n=!0)},d=function e(n){n.preventDefault(),t.element_.removeEventListener("mousemove",u),t.element_.removeEventListener("touchmove",u),window.removeEventListener("mouseup",e),window.removeEventListener("touchend",e),window.cancelAnimationFrame(i);var o=r(l);s(o),t.emitSelectEvent_("click",null,o)};this.element_.addEventListener("mousemove",u),this.element_.addEventListener("touchmove",u),window.addEventListener("mouseup",d),window.addEventListener("touchend",d)},i.prototype.clickHandler_=function(e){e.preventDefault()},i.prototype.focusHandler_=function(e){var t=r(e.target);t&&(this.setAriaSelected_(t),t.classList.add(p.IS_FOCUSED))},i.prototype.blurHandler_=function(e){var t=r(e.target);t&&t.classList.remove(p.IS_FOCUSED)},i.prototype.emitSelectEvent_=function(e,t,n){if(n){this.moveSlideIntoViewport_(n);var i=new CustomEvent("select",{bubbles:!0,cancelable:!0,detail:{command:e,keyCode:t,source:n}});this.element_.dispatchEvent(i)}},i.prototype.getSlidesInViewport_=function(){var t=this.element_.getBoundingClientRect(),n=[].concat((0,a.default)(this.element_.querySelectorAll("."+e))).filter(function(e){var n=e.getBoundingClientRect();return n.left>=t.left&&n.right<=t.right});return n},i.prototype.moveSlideIntoViewport_=function(e){var t=this.element_.getBoundingClientRect(),n=e.getBoundingClientRect();if(n.left<t.left){var i=this.element_.scrollLeft-(t.left-n.left);this.animateScroll_(i)}else if(n.right>t.right){var r=this.element_.scrollLeft-(t.right-n.right);this.animateScroll_(r)}},i.prototype.setAriaSelected_=function(t){t&&([].concat((0,a.default)(this.element_.querySelectorAll("."+e+"[aria-selected]"))).forEach(function(e){return e.removeAttribute("aria-selected")}),t.setAttribute("aria-selected",""))},i.prototype.removeListeners_=function(){this.element_.removeEventListener("focus",this.focusHandler_),this.element_.removeEventListener("blur",this.blurHandler_),this.element_.removeEventListener("keydown",this.keyDownHandler_),this.element_.removeEventListener("mousedown",this.dragHandler_),this.element_.removeEventListener("touchstart",this.dragHandler_),this.element_.removeEventListener("click",this.clickHandler_,!1),this.element_.removeEventListener("command",this.commandHandler_),this.element_.removeEventListener("mdl-componentdowngraded",this.mdlDowngrade_)};var r=function(t){return t.closest("."+e)},s=function(e){e&&e.focus()},l=function(e){if(!e.querySelector("."+m)){var t=document.createElement("span");t.classList.add(m),t.classList.add(p.MDL_RIPPLE_EFFECT);var n=document.createElement("span");n.classList.add(p.MDL_RIPPLE),t.appendChild(n);var i=e.querySelector("img");i&&(t.title=i.title),e.appendChild(t),componentHandler.upgradeElement(t,p.MDL_RIPPLE_COMPONENT)}};i.prototype.stopAnimation=function(){this.config_.animationLoop.stop()},i.prototype.stopAnimation=i.prototype.stopAnimation,i.prototype.upgradeSlides=function(){var t=this,i=this.element_.classList.contains(p.MDL_RIPPLE_EFFECT);[].concat((0,a.default)(this.element_.querySelectorAll("."+e))).forEach(function(e){e.setAttribute("role",n),t.config_.interactive?(e.getAttribute("tabindex")||e.setAttribute("tabindex","0"),i&&l(e)):e.setAttribute("tabindex","-1")})},i.prototype.upgradeSlides=i.prototype.upgradeSlides,i.prototype.getConfig=function(){return this.config_},i.prototype.getConfig=i.prototype.getConfig,i.prototype.init=function(){if(this.element_){if(this.element_.hasAttribute("data-config")&&(this.config_=(0,h.jsonStringToObject)(this.element_.getAttribute("data-config"),this.config_)),this.element_.setAttribute("role",t),(0,o.default)(this.element_.getAttribute("tabindex"))||this.element_.setAttribute("tabindex",-1),this.removeListeners_(),this.config_.interactive){var e=this.element_.classList.contains(p.MDL_RIPPLE_EFFECT);e&&this.element_.classList.add(p.MDL_RIPPLE_EFFECT_IGNORE_EVENTS),this.element_.addEventListener("focus",this.focusHandler_.bind(this),!0),this.element_.addEventListener("blur",this.blurHandler_.bind(this),!0),this.element_.addEventListener("keydown",this.keyDownHandler_.bind(this),!1),this.element_.addEventListener("mousedown",this.dragHandler_.bind(this),!1),this.element_.addEventListener("touchstart",this.dragHandler_.bind(this),!1),this.element_.addEventListener("click",this.clickHandler_.bind(this),!1)}this.element_.addEventListener("command",this.commandHandler_.bind(this),!1),this.element_.addEventListener("mdl-componentdowngraded",this.mdlDowngrade_.bind(this)),this.upgradeSlides(),this.element_.classList.add(p.IS_UPGRADED),this.config_.autostart&&this.startSlideShow_()}},i.prototype.mdlDowngrade_=function(){this.stopAnimation(),this.removeListeners_()},componentHandler.register({constructor:i,classAsString:"MaterialExtCarousel",cssClass:"mdlext-js-carousel",widget:!0})}()},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(22),o=i(r),s=n(23),a=i(s),l=n(2),c=n(15),u=n(21),d="mdlext-js-collapsible",f="mdlext-collapsible",h="mdlext-collapsible-group",p="mdlext-collapsible-region",m=function(){function e(t){var n=this;(0,o.default)(this,e),this.element_=null,this.controlElement_=null,this.keyDownHandler=function(e){e.keyCode!==l.VK_ENTER&&e.keyCode!==l.VK_SPACE||(e.preventDefault(),(e.target||n.controlElement).dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})))},this.clickHandler=function(e){if(!n.isDisabled){if(e.target!==n.controlElement){var t=(0,u.getParentElements)(e.target,n.controlElement);if(t.push(e.target),
+t.find(function(e){return(0,u.isFocusable)(e)}))return}n.toggle()}},this.element_=t,this.init()}return(0,a.default)(e,[{key:"collapse",value:function(){if(!this.isDisabled&&this.isExpanded&&this.dispatchToggleEvent("collapse")){this.controlElement.setAttribute("aria-expanded","false");for(var e=this.regionElements.slice(0),t=e.length-1;t>=0;--t)e[t].setAttribute("hidden","")}}},{key:"expand",value:function(){this.isDisabled||this.isExpanded||this.dispatchToggleEvent("expand")&&(this.controlElement.setAttribute("aria-expanded","true"),this.regionElements.forEach(function(e){return e.removeAttribute("hidden")}))}},{key:"toggle",value:function(){this.isExpanded?this.collapse():this.expand()}},{key:"dispatchToggleEvent",value:function(e){return this.element.dispatchEvent(new CustomEvent("toggle",{bubbles:!0,cancelable:!0,detail:{action:e}}))}},{key:"disableToggle",value:function(){this.controlElement.setAttribute("aria-disabled",!0)}},{key:"enableToggle",value:function(){this.controlElement.removeAttribute("aria-disabled")}},{key:"addRegionId",value:function(e){var t=this.regionIds;t.find(function(t){return e===t})||(t.push(e),this.controlElement.setAttribute("aria-controls",t.join(" ")))}},{key:"addRegionElement",value:function(e){if(e.classList.contains(h)||e.classList.contains(p)||e.classList.add(h),!e.hasAttribute("role")){var t=e.classList.contains(h)?"group":"region";e.setAttribute("role",t)}e.hasAttribute("id")||(e.id=e.getAttribute("role")+"-"+(0,c.randomString)()),this.isExpanded?e.removeAttribute("hidden"):e.setAttribute("hidden",""),this.addRegionId(e.id)}},{key:"removeRegionElement",value:function(e){if(e&&e.id){var t=this.regionIds.filter(function(t){return t===e.id});this.controlElement.setAttribute("aria-controls",t.join(" "))}}},{key:"removeListeners",value:function(){this.controlElement.removeEventListener("keydown",this.keyDownHandler),this.controlElement.removeEventListener("click",this.clickHandler)}},{key:"init",value:function(){var e=this,t=function(){e.controlElement_=e.element.querySelector("."+f)||e.element,e.controlElement.hasAttribute("aria-expanded")||e.controlElement.setAttribute("aria-expanded","false"),"button"!==e.controlElement.nodeName.toLowerCase()&&e.controlElement.setAttribute("role","button"),(0,u.isFocusable)(e.controlElement)||e.controlElement.hasAttribute("tabindex")||e.controlElement.setAttribute("tabindex","0")},n=function(){var t=[];if(e.controlElement.hasAttribute("aria-controls"))t=e.regionElements;else for(var n=e.element.nextElementSibling;n;){if(n.classList.contains(h)||n.classList.contains(p))t.push(n);else if(n.classList.contains(d))break;n=n.nextElementSibling}t.forEach(function(t){return e.addRegionElement(t)})},i=function(){e.controlElement.addEventListener("keydown",e.keyDownHandler),e.controlElement.addEventListener("click",e.clickHandler)};t(),n(),this.removeListeners(),i()}},{key:"downgrade",value:function(){this.removeListeners()}},{key:"element",get:function(){return this.element_}},{key:"controlElement",get:function(){return this.controlElement_}},{key:"isDisabled",get:function(){return this.controlElement.hasAttribute("disabled")&&"false"!==this.controlElement.getAttribute("disabled").toLowerCase()||this.controlElement.hasAttribute("aria-disabled")&&"false"!==this.controlElement.getAttribute("aria-disabled").toLowerCase()}},{key:"isExpanded",get:function(){return this.controlElement.hasAttribute("aria-expanded")&&"true"===this.controlElement.getAttribute("aria-expanded").toLowerCase()}},{key:"regionIds",get:function(){return this.controlElement.hasAttribute("aria-controls")?this.controlElement.getAttribute("aria-controls").split(" "):[]}},{key:"regionElements",get:function(){return this.regionIds.map(function(e){return document.querySelector("#"+e)}).filter(function(e){return null!=e})}}]),e}();!function(){var e=function(e){this.element_=e,this.collapsible=null,this.init()};window.MaterialExtCollapsible=e,e.prototype.init=function(){this.element_&&(this.collapsible=new m(this.element_),this.element_.classList.add(l.IS_UPGRADED),this.element_.addEventListener("mdl-componentdowngraded",this.mdlDowngrade_.bind(this)))},e.prototype.mdlDowngrade_=function(){this.collapsible.downgrade()},e.prototype.getControlElement=function(){return this.collapsible.controlElement},e.prototype.getControlElement=e.prototype.getControlElement,e.prototype.getRegionElements=function(){return this.collapsible.regionElements},e.prototype.getRegionElements=e.prototype.getRegionElements,e.prototype.addRegionElements=function(){for(var e=this,t=arguments.length,n=Array(t),i=0;i<t;i++)n[i]=arguments[i];n.forEach(function(t){return e.collapsible.addRegionElement(t)})},e.prototype.addRegionElements=e.prototype.addRegionElements,e.prototype.removeRegionElements=function(){for(var e=this,t=arguments.length,n=Array(t),i=0;i<t;i++)n[i]=arguments[i];n.forEach(function(t){return e.collapsible.removeRegionElement(t)})},e.prototype.removeRegionElements=e.prototype.removeRegionElements,e.prototype.expand=function(){this.collapsible.expand()},e.prototype.expand=e.prototype.expand,e.prototype.collapse=function(){this.collapsible.collapse()},e.prototype.collapse=e.prototype.collapse,e.prototype.toggle=function(){this.collapsible.toggle()},e.prototype.toggle=e.prototype.toggle,e.prototype.isExpanded=function(){return this.collapsible.isExpanded},e.prototype.isExpanded=e.prototype.isExpanded,e.prototype.isDisabled=function(){return this.collapsible.isDisabled},e.prototype.isDisabled=e.prototype.isDisabled,e.prototype.disableToggle=function(){this.collapsible.disableToggle()},e.prototype.disableToggle=e.prototype.disableToggle,e.prototype.enableToggle=function(){this.collapsible.enableToggle()},e.prototype.enableToggle=e.prototype.enableToggle,componentHandler.register({constructor:e,classAsString:"MaterialExtCollapsible",cssClass:d,widget:!0})}()},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r,o,s=n(22),a=i(s),l=n(23),c=i(l),u=n(14),d=n(2),f="mdlext-js-formatfield",h="MaterialExtFormatfield",p=function(){return navigator.languages?navigator.languages[0]:navigator.language||navigator.userLanguage},m=(o=r=function(){function e(t){var n=this;(0,a.default)(this,e),this.options_={},this.clickHandler=function(){clearTimeout(e.timer)},this.focusInHandler=function(){n.input.readOnly||n.input.disabled||(n.input.value=n.unformatInput(),e.timer=setTimeout(function(){return n.input.select()},200))},this.focusOutHandler=function(){clearTimeout(e.timer),n.input.readOnly||n.input.disabled||n.formatValue()},this.element_=t,this.init()}return(0,c.default)(e,[{key:"stripSeparatorsFromValue",value:function(){var e=this,t=function(){return e.input.value.replace(/\s/g,"").replace(new RegExp(e.options.groupSeparator,"g"),"").replace(e.options.decimalSeparator,".")};return this.input.value?t():this.input.value}},{key:"fixSeparators",value:function(e){var t=this,n=function(){return e.replace(new RegExp(t.intlGroupSeparator_,"g"),t.options.groupSeparator).replace(t.intlDecimalSeparator_,t.options.decimalSeparator)};return e?n():e}},{key:"formatValue",value:function(){if(this.input.value){var e=new Intl.NumberFormat(this.options.locales,this.options).format(this.stripSeparatorsFromValue());"NaN"!==e&&(this.input.value=this.fixSeparators(e))}}},{key:"unformat",value:function(){var e=this,t=function(){return e.input.value.replace(/\s/g,"").replace(new RegExp(e.options.groupSeparator,"g"),"").replace(e.options.decimalSeparator,".")};return this.input.value?t():this.input.value}},{key:"unformatInput",value:function(){var e=this,t=function(){return e.input.value.replace(/\s/g,"").replace(new RegExp(e.options.groupSeparator,"g"),"")};return this.input.value?t():this.input.value}},{key:"removeListeners",value:function(){this.input.removeEventListener("click",this.clickHandler),this.input.removeEventListener("focusin",this.focusInHandler),this.input.removeEventListener("focusout",this.focusOutHandler)}},{key:"init",value:function(){var e=this,t=function(){e.input.addEventListener("click",e.clickHandler),e.input.addEventListener("focusin",e.focusInHandler),e.input.addEventListener("focusout",e.focusOutHandler)},n=function(){var t=e.element.getAttribute("data-formatfield-options")||e.input.getAttribute("data-formatfield-options");t&&(e.options_=(0,u.jsonStringToObject)(t,e.options))},i=function(){e.options.locales||(e.options.locales=p()||"en-US")},r=function(){var t=1234.5.toLocaleString(e.options.locales,{style:"decimal",useGrouping:!0,minimumFractionDigits:1,maximumFractionDigits:1});if(e.intlGroupSeparator_=t.charAt(1),e.intlDecimalSeparator_=t.charAt(t.length-2),e.options.groupSeparator=e.options.groupSeparator||e.intlGroupSeparator_,e.options.decimalSeparator=e.options.decimalSeparator||e.intlDecimalSeparator_,e.options.groupSeparator===e.options.decimalSeparator){var n='Error! options.groupSeparator, "'+e.options.groupSeparator+'" and options.decimalSeparator, '+('"'+e.options.decimalSeparator+'" should not be equal');throw new Error(n)}};this.input_=this.element.querySelector("input")||this.element,n(),i(),r(),this.formatValue(),t()}},{key:"downgrade",value:function(){this.removeListeners()}},{key:"element",get:function(){return this.element_}},{key:"input",get:function(){return this.input_}},{key:"options",get:function(){return this.options_}}]),e}(),r.timer=null,o);!function(){var e=function(e){this.element_=e,this.formatField_=null,this.init()};window.MaterialExtFormatfield=e,e.prototype.init=function(){this.element_&&(this.element_.classList.add(d.IS_UPGRADED),this.formatField_=new m(this.element_),this.element_.addEventListener("mdl-componentdowngraded",this.mdlDowngrade_.bind(this)))},e.prototype.getOptions=function(){return this.formatField_.options},e.prototype.getOptions=e.prototype.getOptions,e.prototype.getUnformattedValue=function(){return this.formatField_.unformat()},e.prototype.getUnformattedValue=e.prototype.getUnformattedValue,e.prototype.mdlDowngrade_=function(){this.formatField_.downgrade()},componentHandler.register({constructor:e,classAsString:h,cssClass:f,widget:!0})}()},function(e,t,n){"use strict";n(59),n(49),n(51),n(50),n(54),n(55),n(56),n(57),n(52),n(58)},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(8),o=i(r),s=n(2),a="mdlext-lightboard__slide__ripple-container";!function(){var e="grid",t="mdlext-lightboard__slide",n="gridcell",i="mdlext-lightboard__slide__frame",r=function(e){this.element_=e,this.init()};window.MaterialExtLightboard=r;var l=function(e){return e?e.closest("."+t):null};r.prototype.selectSlide_=function(e){var n=l(e);n&&!n.hasAttribute("aria-selected")&&([].concat((0,o.default)(this.element_.querySelectorAll("."+t+'[aria-selected="true"]'))).forEach(function(e){return e.removeAttribute("aria-selected")}),n.setAttribute("aria-selected","true"))},r.prototype.dispatchSelectEvent_=function(e){this.element_.dispatchEvent(new CustomEvent("select",{bubbles:!0,cancelable:!0,detail:{source:e}}))},r.prototype.commandHandler_=function(e){e.preventDefault(),e.stopPropagation(),e&&e.detail&&this.command(e.detail)},r.prototype.upgradeSlides=function(){var e=function(e){if(!e.querySelector("."+a)){var t=e.querySelector("."+i);if(t){var n=t;n.classList.add(a),n.classList.add(s.MDL_RIPPLE_EFFECT);var r=document.createElement("span");r.classList.add(s.MDL_RIPPLE),n.appendChild(r),componentHandler.upgradeElement(n,s.MDL_RIPPLE_COMPONENT)}}},r=this.element_.classList.contains(s.MDL_RIPPLE_EFFECT);[].concat((0,o.default)(this.element_.querySelectorAll("."+t))).forEach(function(t){t.setAttribute("role",n),t.querySelector("a")||t.setAttribute("tabindex","0"),r&&e(t)})},r.prototype.upgradeSlides=r.prototype.upgradeSlides,r.prototype.command=function(e){var n=this,i=function(){return n.element_.querySelector("."+t+":first-child")},r=function(){return n.element_.querySelector("."+t+":last-child")},o=function(){var e=n.element_.querySelector("."+t+'[aria-selected="true"]').nextElementSibling;return e?e:i()},s=function(){var e=n.element_.querySelector("."+t+'[aria-selected="true"]').previousElementSibling;return e?e:r()};if(e&&e.action){var a=e.action,c=e.target,u=void 0;switch(a.toLowerCase()){case"select":u=l(c),this.dispatchSelectEvent_(u);break;case"first":u=i();break;case"next":u=o();break;case"prev":u=s();break;case"last":u=r();break;case"upgrade":this.upgradeSlides();break;default:throw new Error('Unknown action "'+a+'". Action must be one of "first", "next", "prev", "last", "select" or "upgrade"')}if(u){var d=u.querySelector("a");d?d.focus():u.focus(),u.hasAttribute("aria-selected")||this.selectSlide_(u)}}},r.prototype.command=r.prototype.command,r.prototype.init=function(){var t=this,n=function(e){if(e.target!==t.element_){var n=void 0,i=void 0;switch(e.keyCode){case s.VK_HOME:n="first";break;case s.VK_END:n="last";break;case s.VK_ARROW_UP:case s.VK_ARROW_LEFT:n="prev";break;case s.VK_ARROW_DOWN:case s.VK_ARROW_RIGHT:n="next";break;case s.VK_ENTER:case s.VK_SPACE:n="select",i=e.target}n&&(e.preventDefault(),e.stopPropagation(),t.command({action:n,target:i}))}},i=function(e){e.preventDefault(),e.stopPropagation(),e.target!==t.element_&&t.command({action:"select",target:e.target})},r=function(e){e.preventDefault(),e.stopPropagation(),e.target!==t.element_&&t.selectSlide_(e.target)};this.element_&&(this.element_.setAttribute("role",e),this.element_.classList.contains(s.MDL_RIPPLE_EFFECT)&&this.element_.classList.add(s.MDL_RIPPLE_EFFECT_IGNORE_EVENTS),this.element_.removeEventListener("command",this.commandHandler_),this.element_.removeEventListener("keydown",n),this.element_.removeEventListener("click",i),this.element_.removeEventListener("focus",r),this.element_.addEventListener("command",this.commandHandler_.bind(this),!1),this.element_.addEventListener("keydown",n,!0),this.element_.addEventListener("click",i,!0),this.element_.addEventListener("focus",r,!0),this.upgradeSlides(),this.element_.classList.add(s.IS_UPGRADED))},componentHandler.register({constructor:r,classAsString:"MaterialExtLightboard",cssClass:"mdlext-js-lightboard",widget:!0})}()},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(8),o=i(r),s=n(32),a=i(s),l=n(67),c=i(l),u=n(64),d=i(u),f=n(31),h=i(f),p=n(13),m=i(p),_=n(2);!function(){var e="mdlext-lightbox",t="mdlext-lightbox__slider",n="mdlext-lightbox__slider__slide",i="mdlext-lightbox--sticky-footer",r="mdl-button",s=function(e){this.element_=e,this.init()};window.MaterialExtLightbox=s,s.prototype.keyDownHandler_=function(e){if(e&&(e.keyCode===_.VK_ESC||e.keyCode===_.VK_SPACE||e.keyCode===_.VK_END||e.keyCode===_.VK_HOME||e.keyCode===_.VK_ARROW_UP||e.keyCode===_.VK_ARROW_LEFT||e.keyCode===_.VK_ARROW_DOWN||e.keyCode===_.VK_ARROW_RIGHT)){e.keyCode!==_.VK_ESC&&(e.preventDefault(),e.stopPropagation());var t="first";e.keyCode===_.VK_END?t="last":e.keyCode===_.VK_ARROW_UP||e.keyCode===_.VK_ARROW_LEFT?t="prev":e.keyCode===_.VK_ARROW_DOWN||e.keyCode===_.VK_ARROW_RIGHT?t="next":e.keyCode===_.VK_SPACE?t="select":e.keyCode===_.VK_ESC&&(t="cancel"),l(t,this)}},s.prototype.buttonClickHandler_=function(t){if(t){t.preventDefault(),t.stopPropagation(),l(this.getAttribute("data-action")||"",this);var n=this.closest("."+e);n&&n.focus()}};var l=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;n.dispatchEvent(new CustomEvent("action",{bubbles:!0,cancelable:!0,detail:{action:e||"",source:t}}))},u=function(e){var t=function(e,t){return t&&e?e.offsetHeight:0},n=function(e,t){if("absolute"===window.getComputedStyle(e).position){var n=document.body.scrollTop||document.documentElement.scrollTop,i=n+(window.innerHeight-e.offsetHeight-t)/2;e.style.top=Math.max(n,i)+"px"}},r=e.parentNode,o=r&&"DIALOG"===r.nodeName?r:null;if(o&&o.hasAttribute("open")){e.style.width="auto",e.style.maxWidth="100%";var s=e.querySelector("img");s&&(e.style.maxWidth=void 0!==s.naturalWidth?s.naturalWidth+"px":s.width+"px"||"100%");var a=t(e.querySelector("footer"),e.classList.contains(i)),l=Math.max(document.documentElement.clientHeight,window.innerHeight||0)-a;if(o.offsetHeight>l)for(var c=0;o.offsetHeight>l&&++c<4;)e.style.width=e.offsetWidth*l/e.offsetHeight+"px";n(o,a)}};s.prototype.imgLoadHandler_=function(){u(this)},s.prototype.imgDragHandler_=function(e){var i=function(e,t){var n=!0,i=!1,r=void 0;try{for(var o,s=(0,h.default)((0,d.default)(t));!(n=(o=s.next()).done);n=!0){var a=(0,c.default)(o.value,2),l=a[0],u=a[1];e.style[l]=u}}catch(e){i=!0,r=e}finally{try{!n&&s.return&&s.return()}finally{if(i)throw r}}};e.preventDefault();var r=e.clientX||(void 0!==e.touches?e.touches[0].clientX:0),o=this;o.style.opacity="0.2";var s=document.createElement("div");s.classList.add(t),i(s,{width:o.offsetWidth+"px",height:o.offsetHeight+"px"});var a=document.createElement("div");a.classList.add(n),a.textContent=">",i(a,{width:o.offsetWidth+"px",height:o.offsetHeight+"px","line-height":o.offsetHeight+"px","font-size":o.offsetHeight/4+"px","text-align":"right","background-image":'url("'+(o.getAttribute("data-img-url-prev")||"")+'")'}),s.appendChild(a),a=document.createElement("div"),a.classList.add(n),i(a,{width:o.offsetWidth+"px",height:o.offsetHeight+"px","background-image":'url("'+o.src+'")'}),s.appendChild(a),a=document.createElement("div"),a.classList.add(n),a.textContent="<",i(a,{width:o.offsetWidth+"px",height:o.offsetHeight+"px","line-height":o.offsetHeight+"px","font-size":o.offsetHeight/4+"px","text-align":"left","background-image":'url("'+(o.getAttribute("data-img-url-next")||"")+'")'}),s.appendChild(a),o.parentNode.appendChild(s);var u=function(e){e.preventDefault();var t=(e.clientX||(void 0!==e.touches?e.touches[0].clientX:0))-r;s.offsetWidth-Math.abs(t)>19&&(s.style.left=t+"px")},f=function e(t){t.preventDefault(),window.removeEventListener("mousemove",u),window.removeEventListener("touchmove",u),window.removeEventListener("mouseup",e),window.removeEventListener("touchend",e);var n=s.offsetLeft;o.parentNode.removeChild(s),o.style.opacity="1.0",Math.abs(n)>19&&l(n>0?"prev":"next",o)};window.addEventListener("mousemove",u),window.addEventListener("touchmove",u),window.addEventListener("mouseup",f),window.addEventListener("touchend",f)},s.prototype.init=function(){var e=this;if(this.element_){this.element_.addEventListener("keydown",this.keyDownHandler_.bind(this.element_),!0),(0,a.default)(this.element_.getAttribute("tabindex"))||this.element_.setAttribute("tabindex",1),[].concat((0,o.default)(this.element_.querySelectorAll("."+r))).forEach(function(t){return t.addEventListener("click",e.buttonClickHandler_.bind(t),!1)});var t=this.element_.querySelector("figcaption");t&&t.addEventListener("click",this.buttonClickHandler_.bind(t),!1);var n=this.element_.querySelector("footer");n&&n.addEventListener("click",this.buttonClickHandler_.bind(n),!1);var i=this.element_.querySelector("img");i&&(i.addEventListener("load",this.imgLoadHandler_.bind(this.element_),!1),i.addEventListener("click",function(e){return e.preventDefault()},!0),i.addEventListener("mousedown",this.imgDragHandler_.bind(i),!0),i.addEventListener("touchstart",this.imgDragHandler_.bind(i),!0)),window.addEventListener("resize",(0,m.default)(function(){return u(e.element_)})),window.addEventListener("orientationchange",function(){return u(e.element_)}),this.element_.classList.add(_.IS_UPGRADED)}},componentHandler.register({constructor:s,classAsString:"MaterialExtLightbox",cssClass:"mdlext-js-lightbox"})}()},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(22),o=i(r),s=n(23),a=i(s),l=n(8),c=i(l),u=n(15),d=n(13),f=i(d),h=n(2),p=n(21),m="mdlext-js-menu-button",_="mdlext-menu",v="mdlext-menu__item",g="mdlext-menu__item-separator",b=function(e){var t=null,n=null,i=function(){[].concat((0,c.default)(e.querySelectorAll("."+v+'[aria-selected="true"]'))).forEach(function(e){return e.removeAttribute("aria-selected")})},r=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(t||e&&!e.hasAttribute("aria-selected"))&&(i(),e&&e.setAttribute("aria-selected","true"))},o=function(){return e.querySelector("."+v+'[aria-selected="true"]')},s=function(e){return e&&e.hasAttribute("disabled")},a=function(e){return e&&e.classList.contains(g)},l=function(e){e&&(e=e.closest("."+v)),e&&e.focus()},d=function(t){var n=t.nextElementSibling;if(n||(n=e.firstElementChild),s(n)||a(n))for(var i=e.children.length;n&&i-- >0;){if(!s(n)&&!a(n)){l(n);break}n=n.nextElementSibling,n||(n=e.firstElementChild)}else l(n)},f=function(t){var n=t.previousElementSibling;if(n||(n=e.lastElementChild),s(n)||a(n))for(var i=e.children.length;n&&i-- >0;){if(!s(n)&&!a(n)){l(n);break}n=n.previousElementSibling,n||(n=e.lastElementChild)}else l(n)},b=function(){var t=e.firstElementChild;s(t)||a(t)?d(t):l(t)},E=function(){var t=e.lastElementChild;s(t)||a(t)?f(t):l(t)},y=function(e){!e||s(e)||a(e)||(r(e),R(!0,e))},A=function(e){var t=e.target.closest("."+v);switch(e.keyCode){case h.VK_ARROW_UP:case h.VK_ARROW_LEFT:t?f(t):b();break;case h.VK_ARROW_DOWN:case h.VK_ARROW_RIGHT:t?d(t):E();break;case h.VK_HOME:b();break;case h.VK_END:E();break;case h.VK_SPACE:case h.VK_ENTER:y(t);break;case h.VK_ESC:R(!0);break;case h.VK_TAB:R(!0);break;default:return}e.preventDefault()},w=function(t){var n=t.relatedTarget||t.explicitOriginalTarget||document.activeElement;try{n?n.closest("."+_)!==e&&C(n)&&R():R()}catch(e){R()}},L=function(t){t.preventDefault();var n=t.target;if(n&&n.closest("."+_)===e){var i=n.closest("."+v);i&&y(i)}else C(n)&&R()},S=function(t){var n=t.target;n&&n.closest("."+_)===e||("touchstart"===t.type&&t.preventDefault(),R())},x=function(){e.addEventListener("keydown",A,!1),e.addEventListener("blur",w,!0),e.addEventListener("click",L,!0),document.documentElement.addEventListener("touchstart",S,!0)},k=function(){e.removeEventListener("keydown",A,!1),e.removeEventListener("blur",w,!0),e.removeEventListener("click",L,!0),document.documentElement.removeEventListener("touchstart",S,!0)},D=function(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"first";t=n.closest("."+m),e.style["min-width"]=Math.max(124,n.getBoundingClientRect().width)+"px",e.removeAttribute("hidden"),(0,p.tether)(n,e);var r=void 0;switch(i.toLowerCase()){case"first":b();break;case"last":E();break;case"selected":r=o(),r&&!r.hasAttribute("disabled")?l(r):b()}x()},C=function(n){var i=!1,r=n&&n.closest("."+m)||null;return r&&r.getAttribute("aria-controls")===e.id?r!==t&&(i=!0):i=!0,i},R=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;k(),e.dispatchEvent(new CustomEvent("_closemenu",{bubbles:!0,cancelable:!0,detail:{forceFocus:t,item:n}}))},I=function(){e.hasAttribute("id")||(e.id="menu-button-"+(0,u.randomString)()),e.setAttribute("tabindex","-1"),e.setAttribute("role","menu"),e.setAttribute("hidden",""),[].concat((0,c.default)(e.querySelectorAll("."+v))).forEach(function(e){e.setAttribute("tabindex","-1"),e.setAttribute("role","menuitem")}),[].concat((0,c.default)(e.querySelectorAll("."+g))).forEach(function(e){e.setAttribute("role","separator")})},O=function(){I(),n=e.parentNode,e.classList.add("is-upgraded")},M=function(){k(),e.parentNode!==n&&n.appendChild(e),e.classList.remove("is-upgraded")};return O(),{get element(){return e},set selected(e){r(e,!0)},open:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"first";return D(e,t)},removeListeners:function(){return k()},downgrade:function(){return M()}}},E=function(){function e(t){var n=this;(0,o.default)(this,e),this.keyDownHandler=function(e){if(!n.isDisabled())switch(e.keyCode){case h.VK_ARROW_UP:n.openMenu("last");break;case h.VK_ARROW_DOWN:n.openMenu();break;case h.VK_SPACE:case h.VK_ENTER:n.openMenu("selected");break;case h.VK_ESC:n.closeMenu();break;case h.VK_TAB:return void n.closeMenu();default:return}e.preventDefault()},this.clickHandler=function(){n.isDisabled()||("true"===n.element.getAttribute("aria-expanded").toLowerCase()?n.closeMenu(!0):n.openMenu("selected"))},this.recalcMenuPosition=(0,f.default)(function(){var e=n.focusElement.getBoundingClientRect(),t=n.focusElementLastScrollPosition.left-e.left,i=n.focusElementLastScrollPosition.top-e.top,r=(parseFloat(n.menu.element.style.left)||0)-t,o=(parseFloat(n.menu.element.style.top)||0)-i;n.menu.element.style.left=r+"px",n.menu.element.style.top=o+"px",n.focusElementLastScrollPosition=e}),this.positionChangeHandler=function(){n.recalcMenuPosition(n)},this.closeMenuHandler=function(e){e&&e.detail&&(e.detail.item&&e.detail.item!==n.selectedItem&&(n.selectedItem=e.detail.item,n.dispatchMenuSelect()),n.closeMenu(e.detail.forceFocus))},this.element=t,this.focusElement=void 0,this.focusElementLastScrollPosition=void 0,this.scrollElements=[],this.menu=void 0,this.selectedItem=null,this.init()}return(0,a.default)(e,[{key:"dispatchMenuSelect",value:function(){this.element.dispatchEvent(new CustomEvent("menuselect",{bubbles:!0,cancelable:!0,detail:{source:this.selectedItem}}))}},{key:"isDisabled",value:function(){return this.element.hasAttribute("disabled")}},{key:"removeListeners",value:function(){this.element.removeEventListener("keydown",this.keyDownHandler),this.element.removeEventListener("click",this.clickHandler)}},{key:"openMenu",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"first";!this.isDisabled()&&this.menu&&(this.scrollElements=(0,p.getScrollParents)(this.element),this.scrollElements.forEach(function(t){return t.addEventListener("scroll",e.positionChangeHandler)}),window.addEventListener("resize",this.positionChangeHandler),window.addEventListener("orientationchange",this.positionChangeHandler),this.menu.element.addEventListener("_closemenu",this.closeMenuHandler),this.menu.selected=this.selectedItem,this.menu.open(this.focusElement,t),this.element.setAttribute("aria-expanded","true"),this.focusElementLastScrollPosition=this.focusElement.getBoundingClientRect())}},{key:"closeMenu",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.menu&&(this.menu.removeListeners(),this.scrollElements.forEach(function(t){return t.removeEventListener("scroll",e.positionChangeHandler)}),window.removeEventListener("resize",this.positionChangeHandler),window.removeEventListener("orientationchange",this.positionChangeHandler),this.menu.element.removeEventListener("_closemenu",this.closeMenuHandler),t&&this.focus(),this.element.setAttribute("aria-expanded","false"),this.menu.element.setAttribute("hidden",""))}},{key:"focus",value:function(){this.isDisabled()||this.focusElement.focus()}},{key:"init",value:function(){var e=this,t=function(){e.element.addEventListener("keydown",e.keyDownHandler),e.element.addEventListener("click",e.clickHandler)},n=function(){e.element.setAttribute("role","button"),e.element.setAttribute("aria-expanded","false"),e.element.setAttribute("aria-haspopup","true")},i=function(){e.focusElement=e.element.querySelector('input[type="text"]'),e.focusElement||(e.focusElement=e.element,"button"!==e.focusElement.tagName.toLowerCase()&&"input"!==e.focusElement.tagName.toLowerCase()&&(e.focusElement.hasAttribute("tabindex")||e.focusElement.setAttribute("tabindex","0")))},r=function(e){return e.parentNode!==document.body?document.body.appendChild(e):e},o=function(){var t=void 0,n=e.element.getAttribute("aria-controls");return t=null!==n?document.querySelector("#"+n):e.element.parentNode.querySelector("."+_)},s=function(){var t=o();t&&(t.componentInstance?e.menu=t.componentInstance:(e.menu=b(t),t.componentInstance=e.menu,r(t)),e.element.setAttribute("aria-controls",e.menu.element.id))};i(),n(),s(),this.removeListeners(),t()}},{key:"downgrade",value:function(){var e=this;if(this.menu){var t=[].concat((0,c.default)(document.querySelectorAll("."+m+'[aria-controls="'+this.element.getAttribute("aria-controls")+'"]')));0===t.filter(function(t){return t!==e.element&&t.getAttribute("data-upgraded").indexOf("MaterialExtMenuButton")>=0}).length&&this.menu.downgrade()}this.removeListeners()}}]),e}();!function(){var e=function(e){this.element_=e,this.menuButton_=null,this.init()};window.MaterialExtMenuButton=e,e.prototype.getMenuElement=function(){return this.menuButton_.menu?this.menuButton_.menu.element:null},e.prototype.getMenuElement=e.prototype.getMenuElement,e.prototype.openMenu=function(e){this.menuButton_.openMenu(e)},e.prototype.openMenu=e.prototype.openMenu,e.prototype.closeMenu=function(){this.menuButton_.closeMenu(!0)},e.prototype.closeMenu=e.prototype.closeMenu,e.prototype.getSelectedMenuItem=function(){return this.menuButton_.selectedItem},e.prototype.getSelectedMenuItem=e.prototype.getSelectedMenuItem,e.prototype.setSelectedMenuItem=function(e){this.menuButton_.selectedItem=e},e.prototype.setSelectedMenuItem=e.prototype.setSelectedMenuItem,e.prototype.init=function(){this.element_&&(this.menuButton_=new E(this.element_),this.element_.addEventListener("mdl-componentdowngraded",this.mdlDowngrade_.bind(this)),this.element_.classList.add(h.IS_UPGRADED))},e.prototype.mdlDowngrade_=function(){this.menuButton_.downgrade()},componentHandler.register({constructor:e,classAsString:"MaterialExtMenuButton",cssClass:m,widget:!0})}()},function(e,t,n){"use strict";var i=n(15),r=n(2);!function(){var e="mdlext-selectfield__label",t="mdlext-selectfield__select",n=function(e){this.element_=e,this.init()};window.MaterialExtSelectfield=n,n.prototype.onFocus_=function(){this.element_.classList.add(r.IS_FOCUSED)},n.prototype.onBlur_=function(){this.element_.classList.remove(r.IS_FOCUSED)},n.prototype.onReset_=function(){this.updateClasses_()},n.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty(),this.checkFocus()},n.prototype.checkDisabled=function(){this.select_.disabled?this.element_.classList.add(r.IS_DISABLED):this.element_.classList.remove(r.IS_DISABLED)},n.prototype.checkDisabled=n.prototype.checkDisabled,n.prototype.checkFocus=function(){Boolean(this.element_.querySelector(":focus"))?this.element_.classList.add(r.IS_FOCUSED):this.element_.classList.remove(r.IS_FOCUSED)},n.prototype.checkFocus=n.prototype.checkFocus,n.prototype.checkValidity=function(){},n.prototype.checkValidity=n.prototype.checkValidity,n.prototype.checkDirty=function(){this.select_.value&&this.select_.value.length>0?this.element_.classList.add(r.IS_DIRTY):this.element_.classList.remove(r.IS_DIRTY)},n.prototype.checkDirty=n.prototype.checkDirty,n.prototype.disable=function(){this.select_.disabled=!0,this.updateClasses_()},n.prototype.disable=n.prototype.disable,n.prototype.enable=function(){this.select_.disabled=!1,this.updateClasses_()},n.prototype.enable=n.prototype.enable,n.prototype.change=function(e){this.select_.value=e||"",this.updateClasses_()},n.prototype.change=n.prototype.change,n.prototype.init=function(){if(this.element_&&(this.label_=this.element_.querySelector("."+e),this.select_=this.element_.querySelector("."+t))){if(this.select_.removeEventListener("change",this.updateClasses_),this.select_.removeEventListener("focus",this.onFocus_),this.select_.removeEventListener("blur",this.onBlur_),this.select_.removeEventListener("reset",this.onReset_),this.select_.addEventListener("change",this.updateClasses_.bind(this)),this.select_.addEventListener("focus",this.onFocus_.bind(this)),this.select_.addEventListener("blur",this.onBlur_.bind(this)),this.select_.addEventListener("reset",this.onReset_.bind(this)),this.label_){var n=void 0;this.select_.hasAttribute("id")?n=this.select_.id:(n="select-"+(0,i.randomString)(),this.select_.id=n),this.label_.hasAttribute("for")||this.label_.setAttribute("for",n)}var o=this.element_.classList.contains(r.IS_INVALID);this.updateClasses_(),this.element_.classList.add(r.IS_UPGRADED),o&&this.element_.classList.add(r.IS_INVALID),this.select_.hasAttribute("autofocus")&&(this.element_.focus(),this.checkFocus())}},componentHandler.register({constructor:n,classAsString:"MaterialExtSelectfield",cssClass:"mdlext-js-selectfield",
+widget:!0})}()},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(13),o=i(r),s=n(14),a=n(2);!function(){var e="mdl-layout__content",t="mdlext-is-scroll",n=function(e){this.header_=e,this.content_=null,this.lastScrollTop_=0,this.config_={visibleAtScrollEnd:!1},this.mutationObserver_=null,this.drawing_=!1,this.init()};window.MaterialExtStickyHeader=n,n.prototype.recalcWidth_=function(){this.header_.style.width=this.content_.clientWidth+"px"};var i=(0,o.default)(function(e){return e.recalcWidth_()});n.prototype.resizeHandler_=function(){i(this)},n.prototype.reposition_=function(){var e=this.content_.scrollTop,n=this.lastScrollTop_-e;if(e<=0)this.header_.style.top="0",this.header_.classList.remove(t);else{if(n>0){if(n>=this.header_.offsetHeight){var i=parseInt(window.getComputedStyle(this.header_).getPropertyValue("top"))||0;0!=i&&(this.header_.style.top="0",this.header_.classList.add(t)),this.lastScrollTop_=e}return}if(n<0){this.header_.classList.add(t);var r=parseInt(window.getComputedStyle(this.header_).getPropertyValue("top"))||0;if(this.content_.scrollHeight-this.content_.scrollTop<=this.content_.offsetHeight)0!=r&&(this.header_.style.top=this.config_.visibleAtScrollEnd?"0":"-"+this.header_.offsetHeight+"px");else{r+=n;var o=this.header_.offsetHeight;this.header_.style.top=(Math.abs(r)>o?-o:r)+"px"}}}this.lastScrollTop_=e};var r=(0,o.default)(function(e){return e.reposition_()});n.prototype.scrollHandler_=function(){r(this)},n.prototype.updatePosition_=function(){this.recalcWidth_(),this.reposition_()},n.prototype.addMutationObserver_=function(){var e=this;this.mutationObserver_=new MutationObserver(function(){e.updatePosition_()}),this.mutationObserver_.observe(this.content_,{attributes:!1,childList:!0,characterData:!1,subtree:!0})},n.prototype.removeListeners_=function(){window.removeEventListener("resize",this.resizeHandler_),window.removeEventListener("orientationchange",this.resizeHandler_),this.content_&&this.content_.removeEventListener("scroll",this.scrollHandler_),this.mutationObserver_&&(this.mutationObserver_.disconnect(),this.mutationObserver_=null)},n.prototype.init=function(){this.header_&&(this.removeListeners_(),this.header_.hasAttribute("data-config")&&(this.config_=(0,s.jsonStringToObject)(this.header_.getAttribute("data-config"))),this.content_=this.header_.parentNode.querySelector("."+e)||null,this.content_&&(this.content_.style.paddingTop=this.header_.offsetHeight+"px",this.lastScrollTop_=this.content_.scrollTop,this.content_.addEventListener("scroll",this.scrollHandler_.bind(this)),window.addEventListener("resize",this.resizeHandler_.bind(this)),window.addEventListener("orientationchange",this.resizeHandler_.bind(this)),this.addMutationObserver_(),this.updatePosition_(),this.header_.classList.add(a.IS_UPGRADED)))},componentHandler.register({constructor:n,classAsString:"MaterialExtStickyHeader",cssClass:"mdlext-js-sticky-header"})}()},function(e,t,n){"use strict";n(2),n(21),n(15),n(14),n(13),n(29),n(30)},function(e,t,n){e.exports={default:n(68),__esModule:!0}},function(e,t,n){e.exports={default:n(70),__esModule:!0}},function(e,t,n){e.exports={default:n(72),__esModule:!0}},function(e,t,n){e.exports={default:n(74),__esModule:!0}},function(e,t,n){e.exports={default:n(75),__esModule:!0}},function(e,t,n){e.exports={default:n(76),__esModule:!0}},function(e,t,n){e.exports={default:n(77),__esModule:!0}},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(61),o=i(r),s=n(31),a=i(s);t.default=function(){function e(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,l=(0,a.default)(e);!(i=(s=l.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&l.return&&l.return()}finally{if(r)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,o.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(e,t,n){n(28),n(104),e.exports=n(1).Array.from},function(e,t,n){n(48),n(28),e.exports=n(102)},function(e,t,n){n(48),n(28),e.exports=n(103)},function(e,t,n){n(106),e.exports=n(1).Number.isInteger},function(e,t,n){n(107),e.exports=n(1).Number.isNaN},function(e,t,n){n(108),e.exports=n(1).Object.assign},function(e,t,n){n(109);var i=n(1).Object;e.exports=function(e,t,n){return i.defineProperty(e,t,n)}},function(e,t,n){n(112),e.exports=n(1).Object.entries},function(e,t,n){n(110),e.exports=n(1).Object.keys},function(e,t,n){n(111),e.exports=n(1).Reflect.apply},function(e,t){e.exports=function(){}},function(e,t,n){var i=n(19),r=n(45),o=n(100);e.exports=function(e){return function(t,n,s){var a,l=i(t),c=r(l.length),u=o(s,c);if(e&&n!=n){for(;c>u;)if(a=l[u++],a!=a)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},function(e,t,n){"use strict";var i=n(12),r=n(25);e.exports=function(e,t,n){t in e?i.f(e,t,r(0,n)):e[t]=n}},function(e,t,n){e.exports=n(5).document&&document.documentElement},function(e,t,n){e.exports=!n(9)&&!n(10)(function(){return 7!=Object.defineProperty(n(38)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(7),r=n(4)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||o[r]===e)}},function(e,t,n){var i=n(17),r=Math.floor;e.exports=function(e){return!i(e)&&isFinite(e)&&r(e)===e}},function(e,t,n){var i=n(6);e.exports=function(e,t,n,r){try{return r?t(i(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&i(o.call(e)),t}}},function(e,t,n){"use strict";var i=n(91),r=n(25),o=n(43),s={};n(11)(s,n(4)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=i(s,{next:r(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var i=n(4)("iterator"),r=!1;try{var o=[7][i]();o.return=function(){r=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!r)return!1;var n=!1;try{var o=[7],s=o[i]();s.next=function(){return{done:n=!0}},o[i]=function(){return s},e(o)}catch(e){}return n}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t){e.exports=!0},function(e,t,n){"use strict";var i=n(18),r=n(93),o=n(42),s=n(20),a=n(40),l=Object.assign;e.exports=!l||n(10)(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=i})?function(e,t){for(var n=s(e),l=arguments.length,c=1,u=r.f,d=o.f;l>c;)for(var f,h=a(arguments[c++]),p=u?i(h).concat(u(h)):i(h),m=p.length,_=0;m>_;)d.call(h,f=p[_++])&&(n[f]=h[f]);return n}:l},function(e,t,n){var i=n(6),r=n(92),o=n(39),s=n(26)("IE_PROTO"),a=function(){},l="prototype",c=function(){var e,t=n(38)("iframe"),i=o.length,r="<",s=">";for(t.style.display="none",n(81).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+s+"document.F=Object"+r+"/script"+s),e.close(),c=e.F;i--;)delete c[l][o[i]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(a[l]=i(e),n=new a,a[l]=null,n[s]=e):n=c(),void 0===t?n:r(n,t)}},function(e,t,n){var i=n(12),r=n(6),o=n(18);e.exports=n(9)?Object.defineProperties:function(e,t){r(e);for(var n,s=o(t),a=s.length,l=0;a>l;)i.f(e,n=s[l++],t[n]);return e}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var i=n(16),r=n(20),o=n(26)("IE_PROTO"),s=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),i(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},function(e,t,n){var i=n(16),r=n(19),o=n(79)(!1),s=n(26)("IE_PROTO");e.exports=function(e,t){var n,a=r(e),l=0,c=[];for(n in a)n!=s&&i(a,n)&&c.push(n);for(;t.length>l;)i(a,n=t[l++])&&(~o(c,n)||c.push(n));return c}},function(e,t,n){var i=n(3),r=n(1),o=n(10);e.exports=function(e,t){var n=(r.Object||{})[e]||Object[e],s={};s[e]=t(n),i(i.S+i.F*o(function(){n(1)}),"Object",s)}},function(e,t,n){var i=n(18),r=n(19),o=n(42).f;e.exports=function(e){return function(t){for(var n,s=r(t),a=i(s),l=a.length,c=0,u=[];l>c;)o.call(s,n=a[c++])&&u.push(e?[n,s[n]]:s[n]);return u}}},function(e,t,n){e.exports=n(11)},function(e,t,n){var i=n(27),r=n(24);e.exports=function(e){return function(t,n){var o,s,a=String(r(t)),l=i(n),c=a.length;return l<0||l>=c?e?"":void 0:(o=a.charCodeAt(l),o<55296||o>56319||l+1===c||(s=a.charCodeAt(l+1))<56320||s>57343?e?a.charAt(l):o:e?a.slice(l,l+2):(o-55296<<10)+(s-56320)+65536)}}},function(e,t,n){var i=n(27),r=Math.max,o=Math.min;e.exports=function(e,t){return e=i(e),e<0?r(e+t,0):o(e,t)}},function(e,t,n){var i=n(17);e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var i=n(6),r=n(47);e.exports=n(1).getIterator=function(e){var t=r(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return i(t.call(e))}},function(e,t,n){var i=n(35),r=n(4)("iterator"),o=n(7);e.exports=n(1).isIterable=function(e){var t=Object(e);return void 0!==t[r]||"@@iterator"in t||o.hasOwnProperty(i(t))}},function(e,t,n){"use strict";var i=n(37),r=n(3),o=n(20),s=n(85),a=n(83),l=n(45),c=n(80),u=n(47);r(r.S+r.F*!n(87)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,r,d,f=o(e),h="function"==typeof this?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,_=void 0!==m,v=0,g=u(f);if(_&&(m=i(m,p>2?arguments[2]:void 0,2)),void 0==g||h==Array&&a(g))for(t=l(f.length),n=new h(t);t>v;v++)c(n,v,_?m(f[v],v):f[v]);else for(d=g.call(f),n=new h;!(r=d.next()).done;v++)c(n,v,_?s(d,m,[r.value,v],!0):r.value);return n.length=v,n}})},function(e,t,n){"use strict";var i=n(78),r=n(88),o=n(7),s=n(19);e.exports=n(41)(Array,"Array",function(e,t){this._t=s(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,r(1)):"keys"==t?r(0,n):"values"==t?r(0,e[n]):r(0,[n,e[n]])},"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(e,t,n){var i=n(3);i(i.S,"Number",{isInteger:n(84)})},function(e,t,n){var i=n(3);i(i.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,n){var i=n(3);i(i.S+i.F,"Object",{assign:n(90)})},function(e,t,n){var i=n(3);i(i.S+i.F*!n(9),"Object",{defineProperty:n(12).f})},function(e,t,n){var i=n(20),r=n(18);n(96)("keys",function(){return function(e){return r(i(e))}})},function(e,t,n){var i=n(3),r=n(34),o=n(6),s=(n(5).Reflect||{}).apply,a=Function.apply;i(i.S+i.F*!n(10)(function(){s(function(){})}),"Reflect",{apply:function(e,t,n){var i=r(e),l=o(n);return s?s(i,t,l):a.call(i,t,l)}})},function(e,t,n){var i=n(3),r=n(97)(!0);i(i.S,"Object",{entries:function(e){return r(e)}})},function(e,t){}])});
+//# sourceMappingURL=mdl-ext.min.js.map
\ No newline at end of file
diff --git a/node_modules/mdl-ext/lib/mdl-ext.min.js.map b/node_modules/mdl-ext/lib/mdl-ext.min.js.map
new file mode 100644
index 0000000..9290e8e
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition?5ca6","webpack:///mdl-ext.min.js?c961","webpack:///webpack/bootstrap 82005ea981e272a97aa0?b88c","webpack:///./~/babel-runtime/~/core-js/library/modules/_core.js?d611","webpack:///./src/utils/constants.js?14df","webpack:///./~/babel-runtime/~/core-js/library/modules/_export.js?8e40","webpack:///./~/babel-runtime/~/core-js/library/modules/_wks.js?2014","webpack:///./~/babel-runtime/~/core-js/library/modules/_global.js?3c52","webpack:///./~/babel-runtime/~/core-js/library/modules/_an-object.js?3af2","webpack:///./~/babel-runtime/~/core-js/library/modules/_iterators.js?f3f3","webpack:///./~/babel-runtime/helpers/toConsumableArray.js?1825","webpack:///./~/babel-runtime/~/core-js/library/modules/_descriptors.js?c0f5","webpack:///./~/babel-runtime/~/core-js/library/modules/_fails.js?c6dd","webpack:///./~/babel-runtime/~/core-js/library/modules/_hide.js?0d2e","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-dp.js?5986","webpack:///./src/utils/full-throttle.js?dc07","webpack:///./src/utils/json-utils.js?45f0","webpack:///./src/utils/string-utils.js?37f8","webpack:///./~/babel-runtime/~/core-js/library/modules/_has.js?ddd0","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-object.js?cfda","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-keys.js?5d2e","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-iobject.js?527c","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-object.js?ca4f","webpack:///./src/utils/dom-utils.js?0816","webpack:///./~/babel-runtime/helpers/classCallCheck.js?21af","webpack:///./~/babel-runtime/helpers/createClass.js?1dfe","webpack:///./~/babel-runtime/~/core-js/library/modules/_defined.js?932b","webpack:///./~/babel-runtime/~/core-js/library/modules/_property-desc.js?256b","webpack:///./~/babel-runtime/~/core-js/library/modules/_shared-key.js?5602","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-integer.js?09ce","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.string.iterator.js?ae27","webpack:///./src/utils/easing.js?f6e9","webpack:///./src/utils/interval-function.js?c7e7","webpack:///./~/babel-runtime/core-js/get-iterator.js?1b08","webpack:///./~/babel-runtime/core-js/number/is-integer.js?14ca","webpack:///./~/babel-runtime/core-js/object/assign.js?e6ca","webpack:///./~/babel-runtime/~/core-js/library/modules/_a-function.js?0699","webpack:///./~/babel-runtime/~/core-js/library/modules/_classof.js?4e04","webpack:///./~/babel-runtime/~/core-js/library/modules/_cof.js?7381","webpack:///./~/babel-runtime/~/core-js/library/modules/_ctx.js?4e59","webpack:///./~/babel-runtime/~/core-js/library/modules/_dom-create.js?612f","webpack:///./~/babel-runtime/~/core-js/library/modules/_enum-bug-keys.js?3254","webpack:///./~/babel-runtime/~/core-js/library/modules/_iobject.js?34ed","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-define.js?4272","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-pie.js?a26b","webpack:///./~/babel-runtime/~/core-js/library/modules/_set-to-string-tag.js?57a7","webpack:///./~/babel-runtime/~/core-js/library/modules/_shared.js?f1ee","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-length.js?f510","webpack:///./~/babel-runtime/~/core-js/library/modules/_uid.js?c10a","webpack:///./~/babel-runtime/~/core-js/library/modules/core.get-iterator-method.js?8a45","webpack:///./~/babel-runtime/~/core-js/library/modules/web.dom.iterable.js?7e82","webpack:///./src/accordion/accordion.js?021c","webpack:///./src/carousel/carousel.js?7189","webpack:///./src/collapsible/collapsible.js?8da8","webpack:///./src/formatfield/formatfield.js?602e","webpack:///./src/index.js?9552","webpack:///./src/lightboard/lightboard.js?4a51","webpack:///./src/lightbox/lightbox.js?4a9b","webpack:///./src/menu-button/menu-button.js?292f","webpack:///./src/selectfield/selectfield.js?4310","webpack:///./src/sticky-header/sticky-header.js?0ce9","webpack:///./src/utils/index.js?d310","webpack:///./~/babel-runtime/core-js/array/from.js?efc2","webpack:///./~/babel-runtime/core-js/is-iterable.js?350e","webpack:///./~/babel-runtime/core-js/number/is-nan.js?f039","webpack:///./~/babel-runtime/core-js/object/define-property.js?5f70","webpack:///./~/babel-runtime/core-js/object/entries.js?41f9","webpack:///./~/babel-runtime/core-js/object/keys.js?fe06","webpack:///./~/babel-runtime/core-js/reflect/apply.js?a3c1","webpack:///./~/babel-runtime/helpers/slicedToArray.js?39c4","webpack:///./~/babel-runtime/~/core-js/library/fn/array/from.js?56e0","webpack:///./~/babel-runtime/~/core-js/library/fn/get-iterator.js?cf7c","webpack:///./~/babel-runtime/~/core-js/library/fn/is-iterable.js?f64a","webpack:///./~/babel-runtime/~/core-js/library/fn/number/is-integer.js?17db","webpack:///./~/babel-runtime/~/core-js/library/fn/number/is-nan.js?e8e9","webpack:///./~/babel-runtime/~/core-js/library/fn/object/assign.js?2fc7","webpack:///./~/babel-runtime/~/core-js/library/fn/object/define-property.js?4d33","webpack:///./~/babel-runtime/~/core-js/library/fn/object/entries.js?eb23","webpack:///./~/babel-runtime/~/core-js/library/fn/object/keys.js?0e2b","webpack:///./~/babel-runtime/~/core-js/library/fn/reflect/apply.js?1fe6","webpack:///./~/babel-runtime/~/core-js/library/modules/_add-to-unscopables.js?7da3","webpack:///./~/babel-runtime/~/core-js/library/modules/_array-includes.js?3a79","webpack:///./~/babel-runtime/~/core-js/library/modules/_create-property.js?f892","webpack:///./~/babel-runtime/~/core-js/library/modules/_html.js?8916","webpack:///./~/babel-runtime/~/core-js/library/modules/_ie8-dom-define.js?b102","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-array-iter.js?a9d0","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-integer.js?9053","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-call.js?45cd","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-create.js?0359","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-detect.js?e400","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-step.js?8944","webpack:///./~/babel-runtime/~/core-js/library/modules/_library.js?08a9","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-assign.js?82ff","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-create.js?9175","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-dps.js?73bc","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-gops.js?a865","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-gpo.js?5ec8","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-keys-internal.js?6fa8","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-sap.js?2605","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-to-array.js?205b","webpack:///./~/babel-runtime/~/core-js/library/modules/_redefine.js?350a","webpack:///./~/babel-runtime/~/core-js/library/modules/_string-at.js?8678","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-index.js?7bea","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-primitive.js?1a65","webpack:///./~/babel-runtime/~/core-js/library/modules/core.get-iterator.js?74ea","webpack:///./~/babel-runtime/~/core-js/library/modules/core.is-iterable.js?be30","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.array.from.js?f8ab","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.array.iterator.js?8359","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.number.is-integer.js?a48c","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.number.is-nan.js?7944","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.assign.js?07f0","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js?8bde","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.keys.js?dfa4","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.reflect.apply.js?2b77","webpack:///./~/babel-runtime/~/core-js/library/modules/es7.object.entries.js?872a"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","core","version","__e","Object","defineProperty","value","VK_TAB","VK_ENTER","VK_ESC","VK_SPACE","VK_PAGE_UP","VK_PAGE_DOWN","VK_END","VK_HOME","VK_ARROW_LEFT","VK_ARROW_UP","VK_ARROW_RIGHT","VK_ARROW_DOWN","ARIA_EXPANDED","ARIA_HIDDEN","ARIA_MULTISELECTABLE","ARIA_SELECTED","IS_DIRTY","IS_DISABLED","IS_EXPANDED","IS_FOCUSED","IS_INVALID","IS_UPGRADED","DATA_UPGRADED","MDL_RIPPLE","MDL_RIPPLE_COMPONENT","MDL_RIPPLE_EFFECT","MDL_RIPPLE_EFFECT_IGNORE_EVENTS","global","ctx","hide","PROTOTYPE","$export","type","name","source","key","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","target","undefined","C","a","b","arguments","length","apply","Function","virtual","R","U","store","uid","Symbol","USE_SYMBOL","$exports","window","Math","self","__g","isObject","it","TypeError","_interopRequireDefault","obj","__esModule","default","_from","_from2","arr","Array","isArray","i","arr2","get","exec","e","dP","createDesc","object","f","anObject","IE8_DOM_DEFINE","toPrimitive","O","Attributes","_apply","_apply2","fullThrottle","callback","context","throttling","_len","args","_key","requestAnimationFrame","jsonStringToObject","_assign","_assign2","jsonString","s","replace","JSON","parse","Error","message","stringList","randomString","joinStrings","_keys","_keys2","isString","str","flatten","list","reduce","concat","objectToStrings","arg","filter","map","result","_len2","_key2","delimiter","join","n","random","toString","slice","hasOwnProperty","$keys","enumBugKeys","keys","IObject","defined","tether","removeChildElements","moveElements","isRectInsideWindowViewport","isFocusable","getScrollParents","getParentElements","getWindowViewport","_isNan","_isNan2","element","forceReflow","lastChild","removeChild","d","style","display","ownerDocument","createDocumentFragment","firstChild","appendChild","viewportWidth","max","document","documentElement","clientWidth","innerWidth","viewportHeight","clientHeight","innerHeight","_ref","top","left","bottom","right","_getWindowViewport","el","elements","parentNode","cs","getComputedStyle","overflowY","overflowX","unshift","body","from","to","controlledBy","controlRect","getBoundingClientRect","_getWindowViewport2","height","offsetHeight","width","offsetWidth","elementRect","dy","dx","ddy","ddx","r","offsetTop","offsetLeft","hasAttribute","tabindex","getAttribute","parseInt","selector","nodeName","test","toLowerCase","disabled","href","getPropertyValue","instance","Constructor","_defineProperty","_defineProperty2","defineProperties","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","prototype","bitmap","shared","ceil","floor","isNaN","$at","String","iterated","_t","_i","point","index","done","easeInOutQuad","t","inOutQuintic","ts","tc","MIN_INERVAL","intervalFunction","interval","lapse","cb","next","timeElapsed","execute","cancel","cancelAnimationFrame","start","timeStart","Date","now","loop","started","immediate","ReferenceError","stop","cof","TAG","ARG","tryGet","T","callee","aFunction","fn","that","is","createElement","split","propertyIsEnumerable","LIBRARY","redefine","has","Iterators","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","FF_ITERATOR","KEYS","VALUES","returnThis","Base","NAME","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","def","tag","stat","SHARED","toInteger","min","px","classof","getIteratorMethod","TO_STRING_TAG","collections","Collection","_toConsumableArray2","_toConsumableArray3","_constants","ACCORDION","ACCORDION_VERTICAL","ACCORDION_HORIZONTAL","PANEL","PANEL_ROLE","TAB","TAB_CAPTION","TAB_ROLE","TABPANEL","TABPANEL_ROLE","RIPPLE_EFFECT","RIPPLE","ANIMATION_EFFECT","ANIMATION","MaterialExtAccordion","element_","init","accordionPanelElements","classList","contains","panel","tab","querySelector","tabpanel","commandHandler_","event","preventDefault","stopPropagation","detail","command","dispatchToggleEvent_","state","ce","CustomEvent","bubbles","cancelable","dispatchEvent","openTab_","add","setAttribute","removeAttribute","closeTab_","remove","toggleTab_","closeTabs_","openTabs_","_this","querySelectorAll","forEach","closedItem","_this2","upgradeTab","tabElement","_this3","_accordionPanelElemen","disableTab","enableTab","calcMaxTabCaptionWidth","tabCaption","w","children","v","maxWidth","selectTab","selectedTab","tabClickHandler","tabFocusHandler","tabpanelClickHandler","tabpanelFocusHandler","tabKeydownHandler","keyCode","nextTab","nextPanel","previousElementSibling","nextElementSibling","focus","removeEventListener","addEventListener","_this4","openTab","_accordionPanelElemen2","closeTab","_accordionPanelElemen3","toggleTab","_accordionPanelElemen4","action","_this5","bind","componentHandler","register","constructor","classAsString","cssClass","widget","_isInteger","_isInteger2","_intervalFunction","_intervalFunction2","_easing","_jsonUtils","MDL_RIPPLE_CONTAINER","SLIDE","ROLE","SLIDE_ROLE","MaterialExtCarousel","config_","interactive","autostart","animationLoop","scrollAnimation_","startSlideShow_","nextSlide","slide","animateScroll_","moveSlideIntoViewport_","emitSelectEvent_","nextScroll","direction","nextDirection","scrollLeft","scrollWidth","x","cancelSlideShow_","newPosition","newDuration","completedCallback","distance","duration","abs","command_","setAriaSelected_","slides","getSlidesInViewport_","keyDownHandler_","cmd","getSlide_","shiftKey","setFocus_","dragHandler_","updating","rAFDragId","startX","clientX","touches","prevX","targetElement","update","currentX","drag","endDrag","clickHandler_","focusHandler_","blurHandler_","evt","carouselRect","slidesInViewport","slideRect","removeListeners_","mdlDowngrade_","closest","addRipple_","rippleContainer","ripple","img","title","upgradeElement","stopAnimation","upgradeSlides","hasRippleEffect","getConfig","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","_stringUtils","_domUtils","JS_COLLAPSIBLE","COLLAPSIBLE_CONTROL_CLASS","COLLAPSIBLE_GROUP_CLASS","COLLAPSIBLE_REGION_CLASS","Collapsible","controlElement_","keyDownHandler","controlElement","MouseEvent","view","clickHandler","isDisabled","push","find","toggle","isExpanded","dispatchToggleEvent","regions","regionElements","region","collapse","expand","regionId","ids","regionIds","role","addRegionId","initControl","initRegions","addRegionElement","addListeners","removeListeners","MaterialExtCollapsible","collapsible","downgrade","getControlElement","getRegionElements","addRegionElements","removeRegionElements","removeRegionElement","disableToggle","enableToggle","_class","_temp","JS_FORMAT_FIELD","FORMAT_FIELD_COMPONENT","browserLanguage","navigator","languages","language","userLanguage","FormatField","options_","clearTimeout","timer","focusInHandler","input","readOnly","unformatInput","setTimeout","select","focusOutHandler","formatValue","doReplace","RegExp","options","groupSeparator","decimalSeparator","intlGroupSeparator_","intlDecimalSeparator_","Intl","NumberFormat","locales","format","stripSeparatorsFromValue","fixSeparators","_this6","addOptions","opts","addLocale","addGrouping","toLocaleString","useGrouping","minimumFractionDigits","maximumFractionDigits","charAt","input_","MaterialExtFormatfield","formatField_","getOptions","getUnformattedValue","unformat","LIGHTBOARD_ROLE","SLIDE_TABSTOP","MaterialExtLightboard","getSlide","selectSlide_","selectedSlide","dispatchSelectEvent_","addRipple","firstSlide","lastSlide","prevSlide","keydownHandler","focusHandler","_slicedToArray2","_slicedToArray3","_entries","_entries2","_getIterator2","_getIterator3","_fullThrottle","_fullThrottle2","LIGHTBOX","LIGHTBOX_SLIDER","LIGHTBOX_SLIDER_SLIDE","STICKY_FOOTER","BUTTON","MaterialExtLightbox","dispatchAction_","buttonClickHandler_","repositionDialog_","lightboxElement","footerHeight","footer","isSticky","reposition","dialog","fh","position","scrollTop","topValue","naturalWidth","vh","imgLoadHandler_","imgDragHandler_","setStyles","properties","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_step$value","err","return","opacity","slider","textContent","line-height","font-size","text-align","background-image","src","button","figcaption","JS_MENU_BUTTON","MENU_BUTTON_MENU","MENU_BUTTON_MENU_ITEM","MENU_BUTTON_MENU_ITEM_SEPARATOR","menuFactory","ariaControls","removeAllSelected","selectedItem","setSelected","item","force","getSelected","isSeparator","nextItem","current","firstElementChild","previousItem","lastElementChild","firstItem","lastItem","selectItem","close","blurHandler","relatedTarget","explicitOriginalTarget","activeElement","shouldClose","touchStartHandler","open","btn","forceFocus","addWaiAria","menuitem","selected","MenuButton","openMenu","closeMenu","recalcMenuPosition","focusElement","focusElementLastScrollPosition","parseFloat","menu","positionChangeHandler","closeMenuHandler","dispatchMenuSelect","scrollElements","addFocusElement","tagName","moveElementToDocumentBody","findMenuElement","menuElement","menuElementId","addMenu","componentInstance","related","indexOf","MaterialExtMenuButton","menuButton_","getMenuElement","getSelectedMenuItem","setSelectedMenuItem","LABEL","INPUT","MaterialExtSelectfield","onFocus_","onBlur_","onReset_","updateClasses_","checkDisabled","checkValidity","checkDirty","checkFocus","select_","Boolean","disable","enable","change","label_","invalid","MDL_LAYOUT_CONTENT","IS_SCROLL_CLASS","MaterialExtStickyHeader","header_","content_","lastScrollTop_","visibleAtScrollEnd","mutationObserver_","drawing_","recalcWidth_","throttleResize","resizeHandler_","reposition_","currentContentScrollTop","scrollDiff","headerTop","scrollHeight","throttleScroll","scrollHandler_","updatePosition_","addMutationObserver_","MutationObserver","observe","attributes","childList","characterData","subtree","disconnect","paddingTop","_isIterable2","_isIterable3","sliceIterator","_arr","_n","_d","_e","_s","Number","isInteger","assign","$Object","desc","Reflect","toIObject","toLength","toIndex","IS_INCLUDES","$this","fromIndex","$defineProperty","ArrayProto","isFinite","iterator","ret","create","SAFE_CLOSING","riter","skipClosing","safe","iter","getKeys","gOPS","pIE","toObject","$assign","A","K","k","aLen","getSymbols","isEnum","j","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","lt","gt","contentWindow","write","Properties","getOwnPropertySymbols","ObjectProto","arrayIndexOf","names","fails","KEY","exp","isEntries","TO_STRING","pos","l","charCodeAt","val","valueOf","getIterator","iterFn","isIterable","isArrayIter","createProperty","getIterFn","arrayLike","step","mapfn","mapping","addToUnscopables","_k","Arguments","number","rApply","fApply","thisArgument","argumentsList","L"],"mappings":"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","file":"mdl-ext.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"mdl-ext\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mdl-ext\"] = factory();\n\telse\n\t\troot[\"mdl-ext\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"mdl-ext\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mdl-ext\"] = factory();\n\telse\n\t\troot[\"mdl-ext\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(113);\n\tmodule.exports = __webpack_require__(53);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tvar core = module.exports = {version: '2.4.0'};\n\tif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar VK_TAB = 9;\n\tvar VK_ENTER = 13;\n\tvar VK_ESC = 27;\n\tvar VK_SPACE = 32;\n\tvar VK_PAGE_UP = 33;\n\tvar VK_PAGE_DOWN = 34;\n\tvar VK_END = 35;\n\tvar VK_HOME = 36;\n\tvar VK_ARROW_LEFT = 37;\n\tvar VK_ARROW_UP = 38;\n\tvar VK_ARROW_RIGHT = 39;\n\tvar VK_ARROW_DOWN = 40;\n\t\n\tvar ARIA_EXPANDED = 'aria-expanded';\n\tvar ARIA_HIDDEN = 'aria-hidden';\n\tvar ARIA_MULTISELECTABLE = 'aria-multiselectable';\n\tvar ARIA_SELECTED = 'aria-selected';\n\t\n\tvar IS_DIRTY = 'is-dirty';\n\tvar IS_DISABLED = 'is-disabled';\n\tvar IS_EXPANDED = 'is-expanded';\n\tvar IS_FOCUSED = 'is-focused';\n\tvar IS_INVALID = 'is-invalid';\n\tvar IS_UPGRADED = 'is-upgraded';\n\tvar DATA_UPGRADED = 'data-upgraded';\n\t\n\tvar MDL_RIPPLE = 'mdl-ripple';\n\tvar MDL_RIPPLE_COMPONENT = 'MaterialRipple';\n\tvar MDL_RIPPLE_EFFECT = 'mdl-js-ripple-effect';\n\tvar MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';\n\t\n\texports.VK_TAB = VK_TAB;\n\texports.VK_ENTER = VK_ENTER;\n\texports.VK_ESC = VK_ESC;\n\texports.VK_SPACE = VK_SPACE;\n\texports.VK_PAGE_UP = VK_PAGE_UP;\n\texports.VK_PAGE_DOWN = VK_PAGE_DOWN;\n\texports.VK_END = VK_END;\n\texports.VK_HOME = VK_HOME;\n\texports.VK_ARROW_LEFT = VK_ARROW_LEFT;\n\texports.VK_ARROW_UP = VK_ARROW_UP;\n\texports.VK_ARROW_RIGHT = VK_ARROW_RIGHT;\n\texports.VK_ARROW_DOWN = VK_ARROW_DOWN;\n\texports.ARIA_EXPANDED = ARIA_EXPANDED;\n\texports.ARIA_HIDDEN = ARIA_HIDDEN;\n\texports.ARIA_MULTISELECTABLE = ARIA_MULTISELECTABLE;\n\texports.ARIA_SELECTED = ARIA_SELECTED;\n\texports.IS_DIRTY = IS_DIRTY;\n\texports.IS_DISABLED = IS_DISABLED;\n\texports.IS_EXPANDED = IS_EXPANDED;\n\texports.IS_FOCUSED = IS_FOCUSED;\n\texports.IS_INVALID = IS_INVALID;\n\texports.IS_UPGRADED = IS_UPGRADED;\n\texports.DATA_UPGRADED = DATA_UPGRADED;\n\texports.MDL_RIPPLE = MDL_RIPPLE;\n\texports.MDL_RIPPLE_COMPONENT = MDL_RIPPLE_COMPONENT;\n\texports.MDL_RIPPLE_EFFECT = MDL_RIPPLE_EFFECT;\n\texports.MDL_RIPPLE_EFFECT_IGNORE_EVENTS = MDL_RIPPLE_EFFECT_IGNORE_EVENTS;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global    = __webpack_require__(5)\n\t  , core      = __webpack_require__(1)\n\t  , ctx       = __webpack_require__(37)\n\t  , hide      = __webpack_require__(11)\n\t  , PROTOTYPE = 'prototype';\n\t\n\tvar $export = function(type, name, source){\n\t  var IS_FORCED = type & $export.F\n\t    , IS_GLOBAL = type & $export.G\n\t    , IS_STATIC = type & $export.S\n\t    , IS_PROTO  = type & $export.P\n\t    , IS_BIND   = type & $export.B\n\t    , IS_WRAP   = type & $export.W\n\t    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n\t    , expProto  = exports[PROTOTYPE]\n\t    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n\t    , key, own, out;\n\t  if(IS_GLOBAL)source = name;\n\t  for(key in source){\n\t    // contains in native\n\t    own = !IS_FORCED && target && target[key] !== undefined;\n\t    if(own && key in exports)continue;\n\t    // export native or passed\n\t    out = own ? target[key] : source[key];\n\t    // prevent global pollution for namespaces\n\t    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n\t    // bind timers to global for call from export context\n\t    : IS_BIND && own ? ctx(out, global)\n\t    // wrap global constructors for prevent change them in library\n\t    : IS_WRAP && target[key] == out ? (function(C){\n\t      var F = function(a, b, c){\n\t        if(this instanceof C){\n\t          switch(arguments.length){\n\t            case 0: return new C;\n\t            case 1: return new C(a);\n\t            case 2: return new C(a, b);\n\t          } return new C(a, b, c);\n\t        } return C.apply(this, arguments);\n\t      };\n\t      F[PROTOTYPE] = C[PROTOTYPE];\n\t      return F;\n\t    // make static versions for prototype methods\n\t    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n\t    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n\t    if(IS_PROTO){\n\t      (exports.virtual || (exports.virtual = {}))[key] = out;\n\t      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n\t      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n\t    }\n\t  }\n\t};\n\t// type bitmap\n\t$export.F = 1;   // forced\n\t$export.G = 2;   // global\n\t$export.S = 4;   // static\n\t$export.P = 8;   // proto\n\t$export.B = 16;  // bind\n\t$export.W = 32;  // wrap\n\t$export.U = 64;  // safe\n\t$export.R = 128; // real proto method for `library` \n\tmodule.exports = $export;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar store      = __webpack_require__(44)('wks')\n\t  , uid        = __webpack_require__(46)\n\t  , Symbol     = __webpack_require__(5).Symbol\n\t  , USE_SYMBOL = typeof Symbol == 'function';\n\t\n\tvar $exports = module.exports = function(name){\n\t  return store[name] || (store[name] =\n\t    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n\t};\n\t\n\t$exports.store = store;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\tif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(17);\n\tmodule.exports = function(it){\n\t  if(!isObject(it))throw TypeError(it + ' is not an object!');\n\t  return it;\n\t};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _from = __webpack_require__(60);\n\t\n\tvar _from2 = _interopRequireDefault(_from);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function (arr) {\n\t  if (Array.isArray(arr)) {\n\t    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n\t      arr2[i] = arr[i];\n\t    }\n\t\n\t    return arr2;\n\t  } else {\n\t    return (0, _from2.default)(arr);\n\t  }\n\t};\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Thank's IE8 for his funny defineProperty\n\tmodule.exports = !__webpack_require__(10)(function(){\n\t  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n\t});\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(exec){\n\t  try {\n\t    return !!exec();\n\t  } catch(e){\n\t    return true;\n\t  }\n\t};\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP         = __webpack_require__(12)\n\t  , createDesc = __webpack_require__(25);\n\tmodule.exports = __webpack_require__(9) ? function(object, key, value){\n\t  return dP.f(object, key, createDesc(1, value));\n\t} : function(object, key, value){\n\t  object[key] = value;\n\t  return object;\n\t};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar anObject       = __webpack_require__(6)\n\t  , IE8_DOM_DEFINE = __webpack_require__(82)\n\t  , toPrimitive    = __webpack_require__(101)\n\t  , dP             = Object.defineProperty;\n\t\n\texports.f = __webpack_require__(9) ? Object.defineProperty : function defineProperty(O, P, Attributes){\n\t  anObject(O);\n\t  P = toPrimitive(P, true);\n\t  anObject(Attributes);\n\t  if(IE8_DOM_DEFINE)try {\n\t    return dP(O, P, Attributes);\n\t  } catch(e){ /* empty */ }\n\t  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n\t  if('value' in Attributes)O[P] = Attributes.value;\n\t  return O;\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _apply = __webpack_require__(66);\n\t\n\tvar _apply2 = _interopRequireDefault(_apply);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Since some events can fire at a high rate, the event handler should be limited to execute computationally\n\t * expensive operations, such as DOM modifications, inside a single rendered frame.\n\t * When listening to e.g. scroll and resize events, the browser tends to fire off more events per\n\t * second than are actually useful. For instance, if your event listener sets some element positions, then it\n\t * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of\n\t * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that\n\t * it runs immediately prior to the browser rendering the updated layout to the screen.\n\t * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page\n\t * is rendered to the screen.\n\t * *\n\t * @param callback the function to throttle\n\t * @param context  optional context of this, default to global\n\t * @return {function(...[*])}\n\t */\n\tvar fullThrottle = function fullThrottle(callback, context) {\n\t\n\t  if (!context) {\n\t    context = undefined || window;\n\t  }\n\t\n\t  var throttling = false;\n\t\n\t  return function () {\n\t    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t      args[_key] = arguments[_key];\n\t    }\n\t\n\t    if (!throttling) {\n\t      throttling = true;\n\t      window.requestAnimationFrame(function () {\n\t        throttling = false;\n\t        return (0, _apply2.default)(callback, context, args);\n\t      });\n\t    }\n\t  };\n\t};\n\t\n\texports.default = fullThrottle;\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Converts a JSON string to object\n\t * @param jsonString\n\t * @param source\n\t */\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.jsonStringToObject = undefined;\n\t\n\tvar _assign = __webpack_require__(33);\n\t\n\tvar _assign2 = _interopRequireDefault(_assign);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar jsonStringToObject = function jsonStringToObject(jsonString) {\n\t  var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\n\t  var s = jsonString.replace(/'/g, '\"');\n\t  try {\n\t    return (0, _assign2.default)(source, JSON.parse(s));\n\t  } catch (e) {\n\t    throw new Error('Failed to parse json string: ' + s + '. Error: ' + e.message);\n\t  }\n\t};\n\t\n\texports.jsonStringToObject = jsonStringToObject;\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\t/**\n\t * A javascript utility for conditionally creating a list of strings.\n\t * The function takes any number of arguments which can be a string or object.\n\t * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames\n\t *\n\t * @param  {*} args the strings and/or objects to\n\t * @return {Array} a list of strings\n\t * @example\n\t * // Returns ['foo', 'bar', 'baz', 'quux']\n\t * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n\t * @example see the tests for more examples\n\t */\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.stringList = exports.randomString = exports.joinStrings = undefined;\n\t\n\tvar _keys = __webpack_require__(65);\n\t\n\tvar _keys2 = _interopRequireDefault(_keys);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar stringList = function stringList() {\n\t  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t    args[_key] = arguments[_key];\n\t  }\n\t\n\t  var isString = function isString(str) {\n\t    return str != null && typeof str === 'string';\n\t  };\n\t\n\t  var flatten = function flatten(list) {\n\t    return list.reduce(function (a, b) {\n\t      return a.concat(Array.isArray(b) ? flatten(b) : b);\n\t    }, []);\n\t  };\n\t\n\t  var objectToStrings = function objectToStrings(arg) {\n\t    return (0, _keys2.default)(arg).filter(function (key) {\n\t      return arg[key];\n\t    }).map(function (key) {\n\t      return key;\n\t    });\n\t  };\n\t\n\t  return args.filter(function (arg) {\n\t    return !!arg;\n\t  }).map(function (arg) {\n\t    return isString(arg) ? arg : objectToStrings(arg);\n\t  }).reduce(function (result, arg) {\n\t    return result.concat(Array.isArray(arg) ? flatten(arg) : arg);\n\t  }, []);\n\t};\n\t\n\t/**\n\t * A simple javascript utility for conditionally joining strings together.\n\t * The function takes a delimiter string and any number of arguments which can be a string or object.\n\t *\n\t * @param delimiter delimiter to separate joined strings\n\t * @param  {*} args the strings and/or objects to join\n\t * @return {String} the joined strings\n\t * @example\n\t * // Returns 'foo, bar, baz, quux'\n\t * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n\t * @example see the tests for more examples\n\t */\n\tvar joinStrings = function joinStrings() {\n\t  for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n\t    args[_key2 - 1] = arguments[_key2];\n\t  }\n\t\n\t  var delimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ' ';\n\t  return stringList.apply(undefined, args).join(delimiter);\n\t};\n\t\n\t/**\n\t * Generates a random string with a given length\n\t * @param n {Integer} length of generated string\n\t * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\n\t * @return {String} the random string\n\t * @example\n\t * // Returns e.g. 'pd781w0y'\n\t * randomString(8);\n\t * @example see the tests for more examples\n\t */\n\tvar randomString = function randomString() {\n\t  var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12;\n\t  return Array(n + 1).join((Math.random().toString(36) + '00000000000000000').slice(2, 18)).slice(0, n);\n\t};\n\t\n\texports.joinStrings = joinStrings;\n\texports.randomString = randomString;\n\texports.stringList = stringList;\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tmodule.exports = function(it, key){\n\t  return hasOwnProperty.call(it, key);\n\t};\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(it){\n\t  return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\tvar $keys       = __webpack_require__(95)\n\t  , enumBugKeys = __webpack_require__(39);\n\t\n\tmodule.exports = Object.keys || function keys(O){\n\t  return $keys(O, enumBugKeys);\n\t};\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// to indexed object, toObject with fallback for non-array-like ES3 strings\n\tvar IObject = __webpack_require__(40)\n\t  , defined = __webpack_require__(24);\n\tmodule.exports = function(it){\n\t  return IObject(defined(it));\n\t};\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.13 ToObject(argument)\n\tvar defined = __webpack_require__(24);\n\tmodule.exports = function(it){\n\t  return Object(defined(it));\n\t};\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.tether = exports.removeChildElements = exports.moveElements = exports.isRectInsideWindowViewport = exports.isFocusable = exports.getScrollParents = exports.getParentElements = exports.getWindowViewport = undefined;\n\t\n\tvar _isNan = __webpack_require__(62);\n\t\n\tvar _isNan2 = _interopRequireDefault(_isNan);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Remove child element(s)\n\t * element.innerHTNL = '' has a performance penality!\n\t * @see http://jsperf.com/empty-an-element/16\n\t * @see http://jsperf.com/force-reflow\n\t * @param element\n\t * @param forceReflow\n\t */\n\tvar removeChildElements = function removeChildElements(element) {\n\t  var forceReflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\t\n\t\n\t  // See: http://jsperf.com/empty-an-element/16\n\t  while (element.lastChild) {\n\t    element.removeChild(element.lastChild);\n\t  }\n\t  if (forceReflow) {\n\t    // See: http://jsperf.com/force-reflow\n\t    var d = element.style.display;\n\t\n\t    element.style.display = 'none';\n\t    element.style.display = d;\n\t  }\n\t};\n\t\n\t/**\n\t * Moves child elements from a DOM node to another dom node.\n\t * @param source {HTMLElement}\n\t * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created\n\t * @return {HTMLElement} The target node\n\t *\n\t * @example\n\t * // Moves child elements from a DOM node to another dom node.\n\t * moveElements(source, destination);\n\t *\n\t * @example\n\t * // If the second parameter is ommited, a document fragment is created:\n\t * let fragment = moveElements(source);\n\t *\n\t * @See: https://github.com/webmodules/dom-move\n\t */\n\tvar moveElements = function moveElements(source, target) {\n\t  if (!target) {\n\t    target = source.ownerDocument.createDocumentFragment();\n\t  }\n\t  while (source.firstChild) {\n\t    target.appendChild(source.firstChild);\n\t  }\n\t  return target;\n\t};\n\t\n\t/**\n\t * Get the browser viewport dimensions\n\t * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript\n\t * @return {{windowWidth: number, windowHeight: number}}\n\t */\n\tvar getWindowViewport = function getWindowViewport() {\n\t  return {\n\t    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\n\t  };\n\t};\n\t\n\t/**\n\t * Check whether an element is in the window viewport\n\t * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/\n\t * @param top\n\t * @param left\n\t * @param bottom\n\t * @param right\n\t * @return {boolean} true if rectangle is inside window viewport, otherwise false\n\t */\n\tvar isRectInsideWindowViewport = function isRectInsideWindowViewport(_ref) {\n\t  var top = _ref.top,\n\t      left = _ref.left,\n\t      bottom = _ref.bottom,\n\t      right = _ref.right;\n\t\n\t  var _getWindowViewport = getWindowViewport(),\n\t      viewportWidth = _getWindowViewport.viewportWidth,\n\t      viewportHeight = _getWindowViewport.viewportHeight;\n\t\n\t  return top >= 0 && left >= 0 && bottom <= viewportHeight && right <= viewportWidth;\n\t};\n\t\n\t/**\n\t * Get a list of parent elements that can possibly scroll\n\t * @param el the element to get parents for\n\t * @returns {Array}\n\t */\n\tvar getScrollParents = function getScrollParents(el) {\n\t  var elements = [];\n\t\n\t  /*\n\t  for (el = el.parentNode; el; el = el.parentNode) {\n\t    const cs = window.getComputedStyle(el);\n\t    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n\t      elements.unshift(el);\n\t    }\n\t    if(el === document.body) {\n\t      break;\n\t    }\n\t  }\n\t  */\n\t\n\t  var element = el.parentNode;\n\t  while (element) {\n\t    var cs = window.getComputedStyle(element);\n\t    if (!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n\t      elements.unshift(element);\n\t    }\n\t    if (element === document.body) {\n\t      break;\n\t    }\n\t    element = element.parentNode;\n\t  }\n\t\n\t  return elements;\n\t};\n\t\n\t/**\n\t * Get a list of parent elements, from a given element to a given element\n\t * @param {HTMLElement} from\n\t * @param {HTMLElement} to\n\t * @return {Array<HTMLElement>} the parent elements, not including from and to\n\t */\n\tvar getParentElements = function getParentElements(from, to) {\n\t  var result = [];\n\t  var element = from.parentNode;\n\t  while (element) {\n\t    if (element === to) {\n\t      break;\n\t    }\n\t    result.unshift(element);\n\t    element = element.parentNode;\n\t  }\n\t  return result;\n\t};\n\t\n\t/**\n\t * Position element next to button\n\t *\n\t * Positioning strategy\n\t *  1. element.height > viewport.height\n\t *     let element.height = viewport.heigt\n\t *     let element.overflow-y = auto\n\t *  2. element.width > viewport.width\n\t *     let element.width = viewport.width\n\t *  3. position element below button, align left edge of element with button left\n\t *       done if element inside viewport\n\t *  4. position element below button, align right edge of element with button right\n\t *       done if element inside viewport\n\t *  5. positions element above button, aligns left edge of element with button left\n\t *       done if element inside viewport\n\t *  6. position element above the control element, aligned to its right.\n\t *       done if element inside viewport\n\t *  7. position element at button right hand side, aligns element top with button top\n\t *       done if element inside viewport\n\t *  8. position element at button left hand side, aligns element top with button top\n\t *       done if element inside viewport\n\t *  9. position element inside viewport\n\t *     1. position element at viewport bottom\n\t *     2. position element at button right hand side\n\t *        done if element inside viewport\n\t *     3. position element at button left hand side\n\t *       done if element inside viewport\n\t *     4. position element at viewport right\n\t * 10. done\n\t *\n\t */\n\tvar tether = function tether(controlledBy, element) {\n\t  var controlRect = controlledBy.getBoundingClientRect();\n\t\n\t  // 1. will element height fit inside window viewport?\n\t\n\t  var _getWindowViewport2 = getWindowViewport(),\n\t      viewportWidth = _getWindowViewport2.viewportWidth,\n\t      viewportHeight = _getWindowViewport2.viewportHeight;\n\t\n\t  element.style.height = 'auto';\n\t  //element.style.overflowY = 'hidden';\n\t  if (element.offsetHeight > viewportHeight) {\n\t    element.style.height = viewportHeight + 'px';\n\t    element.style.overflowY = 'auto';\n\t  }\n\t\n\t  // 2. will element width fit inside window viewport?\n\t  element.style.width = 'auto';\n\t  if (element.offsetWidth > viewportWidth) {\n\t    element.style.width = viewportWidth + 'px';\n\t  }\n\t\n\t  var elementRect = element.getBoundingClientRect();\n\t\n\t  // element to control distance\n\t  var dy = controlRect.top - elementRect.top;\n\t  var dx = controlRect.left - elementRect.left;\n\t\n\t  // element rect, window coordinates relative to top,left of control\n\t  var top = elementRect.top + dy;\n\t  var left = elementRect.left + dx;\n\t  var bottom = top + elementRect.height;\n\t  var right = left + elementRect.width;\n\t\n\t  // Position relative to control\n\t  var ddy = dy;\n\t  var ddx = dx;\n\t\n\t  if (isRectInsideWindowViewport({\n\t    top: top + controlRect.height,\n\t    left: left,\n\t    bottom: bottom + controlRect.height,\n\t    right: right\n\t  })) {\n\t    // 3 position element below the control element, aligned to its left\n\t    ddy = controlRect.height + dy;\n\t    //console.log('***** 3');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top + controlRect.height,\n\t    left: left + controlRect.width - elementRect.width,\n\t    bottom: bottom + controlRect.height,\n\t    right: left + controlRect.width\n\t  })) {\n\t    // 4 position element below the control element, aligned to its right\n\t    ddy = controlRect.height + dy;\n\t    ddx = dx + controlRect.width - elementRect.width;\n\t    //console.log('***** 4');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top - elementRect.height,\n\t    left: left,\n\t    bottom: bottom - elementRect.height,\n\t    right: right\n\t  })) {\n\t    // 5. position element above the control element, aligned to its left.\n\t    ddy = dy - elementRect.height;\n\t    //console.log('***** 5');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top - elementRect.height,\n\t    left: left + controlRect.width - elementRect.width,\n\t    bottom: bottom - elementRect.height,\n\t    right: left + controlRect.width\n\t  })) {\n\t    // 6. position element above the control element, aligned to its right.\n\t    ddy = dy - elementRect.height;\n\t    ddx = dx + controlRect.width - elementRect.width;\n\t    //console.log('***** 6');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top,\n\t    left: left + controlRect.width,\n\t    bottom: bottom,\n\t    right: right + controlRect.width\n\t  })) {\n\t    // 7. position element at button right hand side\n\t    ddx = controlRect.width + dx;\n\t    //console.log('***** 7');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top,\n\t    left: left - controlRect.width,\n\t    bottom: bottom,\n\t    right: right - controlRect.width\n\t  })) {\n\t    // 8. position element at button left hand side\n\t    ddx = dx - elementRect.width;\n\t    //console.log('***** 8');\n\t  } else {\n\t    // 9. position element inside viewport, near controlrect if possible\n\t    //console.log('***** 9');\n\t\n\t    // 9.1 position element near controlrect bottom\n\t    ddy = dy - bottom + viewportHeight;\n\t    if (top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {\n\t      ddy = controlRect.height + dy;\n\t    } else if (top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {\n\t      ddy = dy - elementRect.height;\n\t    }\n\t\n\t    if (left + elementRect.width + controlRect.width <= viewportWidth) {\n\t      // 9.2 Position element at button right hand side\n\t      ddx = controlRect.width + dx;\n\t      //console.log('***** 9.2');\n\t    } else if (left - elementRect.width >= 0) {\n\t      // 9.3 Position element at button left hand side\n\t      ddx = dx - elementRect.width;\n\t      //console.log('***** 9.3');\n\t    } else {\n\t      // 9.4 position element at (near) viewport right\n\t      var r = left + elementRect.width - viewportWidth;\n\t      ddx = dx - r;\n\t      //console.log('***** 9.4');\n\t    }\n\t  }\n\t\n\t  // 10. done\n\t  element.style.top = element.offsetTop + ddy + 'px';\n\t  element.style.left = element.offsetLeft + ddx + 'px';\n\t  //console.log('***** 10. done');\n\t};\n\t\n\t/**\n\t * Check if the given element can receive focus\n\t * @param {HTMLElement} element the element to check\n\t * @return {boolean} true if the element is focusable, otherwise false\n\t */\n\tvar isFocusable = function isFocusable(element) {\n\t  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js\n\t  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus\n\t\n\t  if (element.hasAttribute('tabindex')) {\n\t    var tabindex = element.getAttribute('tabindex');\n\t    if (!(0, _isNan2.default)(tabindex)) {\n\t      return parseInt(tabindex) > -1;\n\t    }\n\t  }\n\t\n\t  if (element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') !== 'false') {\n\t    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable\n\t    return true;\n\t  }\n\t\n\t  // natively focusable, but only when enabled\n\t  var selector = /input|select|textarea|button|details/i;\n\t  var name = element.nodeName;\n\t  if (selector.test(name)) {\n\t    return element.type.toLowerCase() !== 'hidden' && !element.disabled;\n\t  }\n\t\n\t  // anchors and area must have an href\n\t  if (name === 'A' || name === 'AREA') {\n\t    return !!element.href;\n\t  }\n\t\n\t  if (name === 'IFRAME') {\n\t    // Check visible iframe\n\t    var cs = window.getComputedStyle(element);\n\t    return cs.getPropertyValue('display').toLowerCase() !== 'none';\n\t  }\n\t\n\t  return false;\n\t};\n\t\n\t/**\n\t * Get a list of offset parents for given element\n\t * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n\t * @param el the element\n\t * @return {Array} a list of offset parents\n\t */\n\t/*\n\tconst offsetParents = (el) => {\n\t  const elements = [];\n\t  for (; el; el = el.offsetParent) {\n\t    elements.unshift(el);\n\t  }\n\t  if(!elements.find(e => e === document.body)) {\n\t    elements.unshift(document.body);\n\t  }\n\t  return elements;\n\t};\n\t*/\n\t\n\t/**\n\t * Finds the common offset ancestor of two DOM nodes\n\t * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n\t * @see https://gist.github.com/benpickles/4059636\n\t * @param a\n\t * @param b\n\t * @return {Element} The common offset ancestor of a and b\n\t */\n\t/*\n\tconst commonOffsetAncestor = (a, b) => {\n\t  const parentsA = offsetParents(a);\n\t  const parentsB = offsetParents(b);\n\t\n\t  for (let i = 0; i < parentsA.length; i++) {\n\t    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];\n\t  }\n\t};\n\t*/\n\t\n\t/**\n\t * Calculate position relative to a target element\n\t * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively\n\t * @param target\n\t * @param el\n\t * @return {{top: number, left: number}}\n\t */\n\t/*\n\tconst calcPositionRelativeToTarget = (target, el) => {\n\t  let top = 0;\n\t  let left = 0;\n\t\n\t  while(el) {\n\t    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;\n\t    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;\n\t    el = el.offsetParent;\n\t\n\t    if(el === target) {\n\t      break;\n\t    }\n\t  }\n\t  return { top: top, left: left };\n\t};\n\t*/\n\t\n\texports.getWindowViewport = getWindowViewport;\n\texports.getParentElements = getParentElements;\n\texports.getScrollParents = getScrollParents;\n\texports.isFocusable = isFocusable;\n\texports.isRectInsideWindowViewport = isRectInsideWindowViewport;\n\texports.moveElements = moveElements;\n\texports.removeChildElements = removeChildElements;\n\texports.tether = tether;\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\texports.default = function (instance, Constructor) {\n\t  if (!(instance instanceof Constructor)) {\n\t    throw new TypeError(\"Cannot call a class as a function\");\n\t  }\n\t};\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _defineProperty = __webpack_require__(63);\n\t\n\tvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function () {\n\t  function defineProperties(target, props) {\n\t    for (var i = 0; i < props.length; i++) {\n\t      var descriptor = props[i];\n\t      descriptor.enumerable = descriptor.enumerable || false;\n\t      descriptor.configurable = true;\n\t      if (\"value\" in descriptor) descriptor.writable = true;\n\t      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n\t    }\n\t  }\n\t\n\t  return function (Constructor, protoProps, staticProps) {\n\t    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t    if (staticProps) defineProperties(Constructor, staticProps);\n\t    return Constructor;\n\t  };\n\t}();\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n\t// 7.2.1 RequireObjectCoercible(argument)\n\tmodule.exports = function(it){\n\t  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n\t  return it;\n\t};\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(bitmap, value){\n\t  return {\n\t    enumerable  : !(bitmap & 1),\n\t    configurable: !(bitmap & 2),\n\t    writable    : !(bitmap & 4),\n\t    value       : value\n\t  };\n\t};\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar shared = __webpack_require__(44)('keys')\n\t  , uid    = __webpack_require__(46);\n\tmodule.exports = function(key){\n\t  return shared[key] || (shared[key] = uid(key));\n\t};\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\t// 7.1.4 ToInteger\n\tvar ceil  = Math.ceil\n\t  , floor = Math.floor;\n\tmodule.exports = function(it){\n\t  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n\t};\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar $at  = __webpack_require__(99)(true);\n\t\n\t// 21.1.3.27 String.prototype[@@iterator]()\n\t__webpack_require__(41)(String, 'String', function(iterated){\n\t  this._t = String(iterated); // target\n\t  this._i = 0;                // next index\n\t// 21.1.5.2.1 %StringIteratorPrototype%.next()\n\t}, function(){\n\t  var O     = this._t\n\t    , index = this._i\n\t    , point;\n\t  if(index >= O.length)return {value: undefined, done: true};\n\t  point = $at(O, index);\n\t  this._i += point.length;\n\t  return {value: point, done: false};\n\t});\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// See: http://robertpenner.com/easing/\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n\t  t /= d / 2;\n\t  if (t < 1) return c / 2 * t * t + b;\n\t  t--;\n\t  return -c / 2 * (t * (t - 2) - 1) + b;\n\t};\n\t\n\tvar inOutQuintic = function inOutQuintic(t, b, c, d) {\n\t  var ts = (t /= d) * t;\n\t  var tc = ts * t;\n\t  return b + c * (6 * tc * ts + -15 * ts * ts + 10 * tc);\n\t};\n\t\n\texports.easeInOutQuad = easeInOutQuad;\n\texports.inOutQuintic = inOutQuintic;\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar MIN_INERVAL = 1000 / 60;\n\t\n\t/**\n\t * Trigger a callback at a given interval\n\t * @param interval defaults to 1000/60 ms\n\t * @return {function()} reference to start, stop, immediate and started\n\t */\n\t\n\tvar intervalFunction = function intervalFunction() {\n\t  var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : MIN_INERVAL;\n\t\n\t\n\t  var lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;\n\t  var cb = undefined;\n\t  var next = null;\n\t  var timeElapsed = 0;\n\t\n\t  var execute = function execute() {\n\t    var f = cb(timeElapsed);\n\t    if (!f) {\n\t      cancel();\n\t    }\n\t  };\n\t\n\t  var cancel = function cancel() {\n\t    if (next) {\n\t      window.cancelAnimationFrame(next);\n\t    }\n\t    next = null;\n\t    timeElapsed = 0;\n\t  };\n\t\n\t  var _start = function _start() {\n\t    var timeStart = Date.now();\n\t\n\t    var loop = function loop(now) {\n\t      if (next) {\n\t        next = window.requestAnimationFrame(function () {\n\t          return loop(Date.now());\n\t        });\n\t\n\t        timeElapsed += now - timeStart;\n\t\n\t        if (timeElapsed >= lapse) {\n\t          execute();\n\t          if ((timeElapsed -= lapse) > lapse) {\n\t            // time elapsed - interval_ > interval_ , indicates inactivity\n\t            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on\n\t            timeElapsed = 0;\n\t          }\n\t        }\n\t        timeStart = now;\n\t      }\n\t    };\n\t\n\t    next = 1; // a truthy value for first loop\n\t    loop(timeStart);\n\t  };\n\t\n\t  return {\n\t    get started() {\n\t      return next != null;\n\t    },\n\t    get interval() {\n\t      return lapse;\n\t    },\n\t    set interval(value) {\n\t      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;\n\t    },\n\t    start: function start(callback) {\n\t      if (typeof callback !== 'function') {\n\t        throw new TypeError('callback parameter must be a function');\n\t      }\n\t      cb = callback;\n\t      _start();\n\t    },\n\t    immediate: function immediate() {\n\t      if (!cb) {\n\t        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');\n\t      }\n\t      execute();\n\t    },\n\t\n\t    stop: function stop() {\n\t      return cancel();\n\t    }\n\t  };\n\t};\n\t\n\texports.default = intervalFunction;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(69), __esModule: true };\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(71), __esModule: true };\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(73), __esModule: true };\n\n/***/ },\n/* 34 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(it){\n\t  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n\t  return it;\n\t};\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// getting tag from 19.1.3.6 Object.prototype.toString()\n\tvar cof = __webpack_require__(36)\n\t  , TAG = __webpack_require__(4)('toStringTag')\n\t  // ES3 wrong here\n\t  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\t\n\t// fallback for IE11 Script Access Denied error\n\tvar tryGet = function(it, key){\n\t  try {\n\t    return it[key];\n\t  } catch(e){ /* empty */ }\n\t};\n\t\n\tmodule.exports = function(it){\n\t  var O, T, B;\n\t  return it === undefined ? 'Undefined' : it === null ? 'Null'\n\t    // @@toStringTag case\n\t    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n\t    // builtinTag case\n\t    : ARG ? cof(O)\n\t    // ES3 arguments fallback\n\t    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n\t};\n\n/***/ },\n/* 36 */\n/***/ function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = function(it){\n\t  return toString.call(it).slice(8, -1);\n\t};\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// optional / simple context binding\n\tvar aFunction = __webpack_require__(34);\n\tmodule.exports = function(fn, that, length){\n\t  aFunction(fn);\n\t  if(that === undefined)return fn;\n\t  switch(length){\n\t    case 1: return function(a){\n\t      return fn.call(that, a);\n\t    };\n\t    case 2: return function(a, b){\n\t      return fn.call(that, a, b);\n\t    };\n\t    case 3: return function(a, b, c){\n\t      return fn.call(that, a, b, c);\n\t    };\n\t  }\n\t  return function(/* ...args */){\n\t    return fn.apply(that, arguments);\n\t  };\n\t};\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(17)\n\t  , document = __webpack_require__(5).document\n\t  // in old IE typeof document.createElement is 'object'\n\t  , is = isObject(document) && isObject(document.createElement);\n\tmodule.exports = function(it){\n\t  return is ? document.createElement(it) : {};\n\t};\n\n/***/ },\n/* 39 */\n/***/ function(module, exports) {\n\n\t// IE 8- don't enum bug keys\n\tmodule.exports = (\n\t  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n\t).split(',');\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\tvar cof = __webpack_require__(36);\n\tmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n\t  return cof(it) == 'String' ? it.split('') : Object(it);\n\t};\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar LIBRARY        = __webpack_require__(89)\n\t  , $export        = __webpack_require__(3)\n\t  , redefine       = __webpack_require__(98)\n\t  , hide           = __webpack_require__(11)\n\t  , has            = __webpack_require__(16)\n\t  , Iterators      = __webpack_require__(7)\n\t  , $iterCreate    = __webpack_require__(86)\n\t  , setToStringTag = __webpack_require__(43)\n\t  , getPrototypeOf = __webpack_require__(94)\n\t  , ITERATOR       = __webpack_require__(4)('iterator')\n\t  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n\t  , FF_ITERATOR    = '@@iterator'\n\t  , KEYS           = 'keys'\n\t  , VALUES         = 'values';\n\t\n\tvar returnThis = function(){ return this; };\n\t\n\tmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n\t  $iterCreate(Constructor, NAME, next);\n\t  var getMethod = function(kind){\n\t    if(!BUGGY && kind in proto)return proto[kind];\n\t    switch(kind){\n\t      case KEYS: return function keys(){ return new Constructor(this, kind); };\n\t      case VALUES: return function values(){ return new Constructor(this, kind); };\n\t    } return function entries(){ return new Constructor(this, kind); };\n\t  };\n\t  var TAG        = NAME + ' Iterator'\n\t    , DEF_VALUES = DEFAULT == VALUES\n\t    , VALUES_BUG = false\n\t    , proto      = Base.prototype\n\t    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n\t    , $default   = $native || getMethod(DEFAULT)\n\t    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n\t    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n\t    , methods, key, IteratorPrototype;\n\t  // Fix native\n\t  if($anyNative){\n\t    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n\t    if(IteratorPrototype !== Object.prototype){\n\t      // Set @@toStringTag to native iterators\n\t      setToStringTag(IteratorPrototype, TAG, true);\n\t      // fix for some old engines\n\t      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n\t    }\n\t  }\n\t  // fix Array#{values, @@iterator}.name in V8 / FF\n\t  if(DEF_VALUES && $native && $native.name !== VALUES){\n\t    VALUES_BUG = true;\n\t    $default = function values(){ return $native.call(this); };\n\t  }\n\t  // Define iterator\n\t  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n\t    hide(proto, ITERATOR, $default);\n\t  }\n\t  // Plug for library\n\t  Iterators[NAME] = $default;\n\t  Iterators[TAG]  = returnThis;\n\t  if(DEFAULT){\n\t    methods = {\n\t      values:  DEF_VALUES ? $default : getMethod(VALUES),\n\t      keys:    IS_SET     ? $default : getMethod(KEYS),\n\t      entries: $entries\n\t    };\n\t    if(FORCED)for(key in methods){\n\t      if(!(key in proto))redefine(proto, key, methods[key]);\n\t    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n\t  }\n\t  return methods;\n\t};\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\texports.f = {}.propertyIsEnumerable;\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar def = __webpack_require__(12).f\n\t  , has = __webpack_require__(16)\n\t  , TAG = __webpack_require__(4)('toStringTag');\n\t\n\tmodule.exports = function(it, tag, stat){\n\t  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n\t};\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global = __webpack_require__(5)\n\t  , SHARED = '__core-js_shared__'\n\t  , store  = global[SHARED] || (global[SHARED] = {});\n\tmodule.exports = function(key){\n\t  return store[key] || (store[key] = {});\n\t};\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.15 ToLength\n\tvar toInteger = __webpack_require__(27)\n\t  , min       = Math.min;\n\tmodule.exports = function(it){\n\t  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n\t};\n\n/***/ },\n/* 46 */\n/***/ function(module, exports) {\n\n\tvar id = 0\n\t  , px = Math.random();\n\tmodule.exports = function(key){\n\t  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n\t};\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar classof   = __webpack_require__(35)\n\t  , ITERATOR  = __webpack_require__(4)('iterator')\n\t  , Iterators = __webpack_require__(7);\n\tmodule.exports = __webpack_require__(1).getIteratorMethod = function(it){\n\t  if(it != undefined)return it[ITERATOR]\n\t    || it['@@iterator']\n\t    || Iterators[classof(it)];\n\t};\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(105);\n\tvar global        = __webpack_require__(5)\n\t  , hide          = __webpack_require__(11)\n\t  , Iterators     = __webpack_require__(7)\n\t  , TO_STRING_TAG = __webpack_require__(4)('toStringTag');\n\t\n\tfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n\t  var NAME       = collections[i]\n\t    , Collection = global[NAME]\n\t    , proto      = Collection && Collection.prototype;\n\t  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n\t  Iterators[NAME] = Iterators.Array;\n\t}\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var ACCORDION = 'mdlext-accordion';\n\t  var ACCORDION_VERTICAL = 'mdlext-accordion--vertical';\n\t  var ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';\n\t  var PANEL = 'mdlext-accordion__panel';\n\t  var PANEL_ROLE = 'presentation';\n\t  var TAB = 'mdlext-accordion__tab';\n\t  var TAB_CAPTION = 'mdlext-accordion__tab__caption';\n\t  var TAB_ROLE = 'tab';\n\t  var TABPANEL = 'mdlext-accordion__tabpanel';\n\t  var TABPANEL_ROLE = 'tabpanel';\n\t  var RIPPLE_EFFECT = 'mdlext-js-ripple-effect';\n\t  var RIPPLE = 'mdlext-accordion__tab--ripple';\n\t  var ANIMATION_EFFECT = 'mdlext-js-animation-effect';\n\t  var ANIMATION = 'mdlext-accordion__tabpanel--animation';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtAccordion = function MaterialExtAccordion(element) {\n\t\n\t    // Stores the Accordion HTML element.\n\t    this.element_ = element;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtAccordion'] = MaterialExtAccordion;\n\t\n\t  // Helpers\n\t  var accordionPanelElements = function accordionPanelElements(element) {\n\t    if (!element) {\n\t      return {\n\t        panel: null,\n\t        tab: null,\n\t        tabpanel: null\n\t      };\n\t    } else if (element.classList.contains(PANEL)) {\n\t      return {\n\t        panel: element,\n\t        tab: element.querySelector('.' + TAB),\n\t        tabpanel: element.querySelector('.' + TABPANEL)\n\t      };\n\t    } else {\n\t      return {\n\t        panel: element.parentNode,\n\t        tab: element.parentNode.querySelector('.' + TAB),\n\t        tabpanel: element.parentNode.querySelector('.' + TABPANEL)\n\t      };\n\t    }\n\t  };\n\t\n\t  // Private methods.\n\t\n\t  /**\n\t   * Handles custom command event, 'open', 'close', 'toggle' or upgrade\n\t   * @param event. A custom event\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.commandHandler_ = function (event) {\n\t    event.preventDefault();\n\t    event.stopPropagation();\n\t\n\t    if (event && event.detail) {\n\t      this.command(event.detail);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Dispatch toggle event\n\t   * @param {string} state\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function (state, tab, tabpanel) {\n\t    var ce = new CustomEvent('toggle', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: { state: state, tab: tab, tabpanel: tabpanel }\n\t    });\n\t    this.element_.dispatchEvent(ce);\n\t  };\n\t\n\t  /**\n\t   * Open tab\n\t   * @param {Element} panel\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.openTab_ = function (panel, tab, tabpanel) {\n\t    panel.classList.add(_constants.IS_EXPANDED);\n\t    tab.setAttribute(_constants.ARIA_EXPANDED, 'true');\n\t    tabpanel.removeAttribute('hidden');\n\t    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');\n\t    this.dispatchToggleEvent_('open', tab, tabpanel);\n\t  };\n\t\n\t  /**\n\t   * Close tab\n\t   * @param {Element} panel\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.closeTab_ = function (panel, tab, tabpanel) {\n\t    panel.classList.remove(_constants.IS_EXPANDED);\n\t    tab.setAttribute(_constants.ARIA_EXPANDED, 'false');\n\t    tabpanel.setAttribute('hidden', '');\n\t    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');\n\t    this.dispatchToggleEvent_('close', tab, tabpanel);\n\t  };\n\t\n\t  /**\n\t   * Toggle tab\n\t   * @param {Element} panel\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.toggleTab_ = function (panel, tab, tabpanel) {\n\t    if (!(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled'))) {\n\t      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {\n\t        this.closeTab_(panel, tab, tabpanel);\n\t      } else {\n\t        if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {\n\t          this.closeTabs_();\n\t        }\n\t        this.openTab_(panel, tab, tabpanel);\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Open tabs\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.openTabs_ = function () {\n\t    var _this = this;\n\t\n\t    if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() === 'true') {\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).filter(function (panel) {\n\t        return !panel.classList.contains(_constants.IS_EXPANDED);\n\t      }).forEach(function (closedItem) {\n\t        var tab = closedItem.querySelector('.' + TAB);\n\t        if (!tab.hasAttribute('disabled')) {\n\t          _this.openTab_(closedItem, tab, closedItem.querySelector('.' + TABPANEL));\n\t        }\n\t      });\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Close tabs\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.closeTabs_ = function () {\n\t    var _this2 = this;\n\t\n\t    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL + '.' + _constants.IS_EXPANDED))).forEach(function (panel) {\n\t      var tab = panel.querySelector('.' + TAB);\n\t      if (!tab.hasAttribute('disabled')) {\n\t        _this2.closeTab_(panel, tab, panel.querySelector('.' + TABPANEL));\n\t      }\n\t    });\n\t  };\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Upgrade an individual accordion tab\n\t   * @public\n\t   * @param {Element} tabElement The HTML element for the accordion panel.\n\t   */\n\t  MaterialExtAccordion.prototype.upgradeTab = function (tabElement) {\n\t    var _this3 = this;\n\t\n\t    var _accordionPanelElemen = accordionPanelElements(tabElement),\n\t        panel = _accordionPanelElemen.panel,\n\t        tab = _accordionPanelElemen.tab,\n\t        tabpanel = _accordionPanelElemen.tabpanel;\n\t\n\t    var disableTab = function disableTab() {\n\t      panel.classList.remove(_constants.IS_EXPANDED);\n\t      tab.setAttribute('tabindex', '-1');\n\t      tab.setAttribute(_constants.ARIA_EXPANDED, 'false');\n\t      tabpanel.setAttribute('hidden', '');\n\t      tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');\n\t    };\n\t\n\t    var enableTab = function enableTab() {\n\t      if (!tab.hasAttribute(_constants.ARIA_EXPANDED)) {\n\t        tab.setAttribute(_constants.ARIA_EXPANDED, 'false');\n\t      }\n\t\n\t      tab.setAttribute('tabindex', '0');\n\t\n\t      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {\n\t        panel.classList.add(_constants.IS_EXPANDED);\n\t        tabpanel.removeAttribute('hidden');\n\t        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');\n\t      } else {\n\t        panel.classList.remove(_constants.IS_EXPANDED);\n\t        tabpanel.setAttribute('hidden', '');\n\t        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');\n\t      }\n\t    };\n\t\n\t    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.\n\t    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.\n\t    /* istanbul ignore next */\n\t    var calcMaxTabCaptionWidth = function calcMaxTabCaptionWidth() {\n\t\n\t      var tabCaption = tab.querySelector('.' + TAB_CAPTION);\n\t      if (tabCaption !== null) {\n\t        var w = [].concat((0, _toConsumableArray3.default)(tab.children)).filter(function (el) {\n\t          return el.classList && !el.classList.contains(TAB_CAPTION);\n\t        }).reduce(function (v, el) {\n\t          return v + el.offsetWidth;\n\t        }, 0);\n\t\n\t        var maxWidth = tab.clientHeight - w;\n\t        if (maxWidth > 0) {\n\t          tabCaption.style['max-width'] = maxWidth + 'px';\n\t        }\n\t      }\n\t    };\n\t\n\t    var selectTab = function selectTab() {\n\t      if (!tab.hasAttribute(_constants.ARIA_SELECTED)) {\n\t        [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected=\"true\"]'))).forEach(function (selectedTab) {\n\t          return selectedTab.removeAttribute(_constants.ARIA_SELECTED);\n\t        });\n\t        tab.setAttribute(_constants.ARIA_SELECTED, 'true');\n\t      }\n\t    };\n\t\n\t    var tabClickHandler = function tabClickHandler() {\n\t      _this3.toggleTab_(panel, tab, tabpanel);\n\t      selectTab();\n\t    };\n\t\n\t    var tabFocusHandler = function tabFocusHandler() {\n\t      selectTab();\n\t    };\n\t\n\t    var tabpanelClickHandler = function tabpanelClickHandler() {\n\t      selectTab();\n\t    };\n\t\n\t    var tabpanelFocusHandler = function tabpanelFocusHandler() {\n\t      selectTab();\n\t    };\n\t\n\t    var tabKeydownHandler = function tabKeydownHandler(e) {\n\t\n\t      if (_this3.element_.hasAttribute('disabled')) {\n\t        return;\n\t      }\n\t\n\t      if (e.keyCode === _constants.VK_END || e.keyCode === _constants.VK_HOME || e.keyCode === _constants.VK_ARROW_UP || e.keyCode === _constants.VK_ARROW_LEFT || e.keyCode === _constants.VK_ARROW_DOWN || e.keyCode === _constants.VK_ARROW_RIGHT) {\n\t\n\t        var nextTab = null;\n\t        var keyCode = e.keyCode;\n\t\n\t        if (keyCode === _constants.VK_HOME) {\n\t          nextTab = _this3.element_.querySelector('.' + PANEL + ':first-child > .' + TAB);\n\t          if (nextTab && nextTab.hasAttribute('disabled')) {\n\t            nextTab = null;\n\t            keyCode = _constants.VK_ARROW_DOWN;\n\t          }\n\t        } else if (keyCode === _constants.VK_END) {\n\t          nextTab = _this3.element_.querySelector('.' + PANEL + ':last-child > .' + TAB);\n\t          if (nextTab && nextTab.hasAttribute('disabled')) {\n\t            nextTab = null;\n\t            keyCode = _constants.VK_ARROW_UP;\n\t          }\n\t        }\n\t\n\t        if (!nextTab) {\n\t          var nextPanel = panel;\n\t\n\t          do {\n\t            if (keyCode === _constants.VK_ARROW_UP || keyCode === _constants.VK_ARROW_LEFT) {\n\t              nextPanel = nextPanel.previousElementSibling;\n\t              if (!nextPanel) {\n\t                nextPanel = _this3.element_.querySelector('.' + PANEL + ':last-child');\n\t              }\n\t              if (nextPanel) {\n\t                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);\n\t              }\n\t            } else if (keyCode === _constants.VK_ARROW_DOWN || keyCode === _constants.VK_ARROW_RIGHT) {\n\t              nextPanel = nextPanel.nextElementSibling;\n\t              if (!nextPanel) {\n\t                nextPanel = _this3.element_.querySelector('.' + PANEL + ':first-child');\n\t              }\n\t              if (nextPanel) {\n\t                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);\n\t              }\n\t            }\n\t\n\t            if (nextTab && nextTab.hasAttribute('disabled')) {\n\t              nextTab = null;\n\t            } else {\n\t              break;\n\t            }\n\t          } while (nextPanel !== panel);\n\t        }\n\t\n\t        if (nextTab) {\n\t          e.preventDefault();\n\t          e.stopPropagation();\n\t          nextTab.focus();\n\t\n\t          // Workaround for JSDom testing:\n\t          // In JsDom 'element.focus()' does not trigger any focus event\n\t          if (!nextTab.hasAttribute(_constants.ARIA_SELECTED)) {\n\t\n\t            [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected=\"true\"]'))).forEach(function (selectedTab) {\n\t              return selectedTab.removeAttribute(_constants.ARIA_SELECTED);\n\t            });\n\t\n\t            nextTab.setAttribute(_constants.ARIA_SELECTED, 'true');\n\t          }\n\t        }\n\t      } else if (e.keyCode === _constants.VK_ENTER || e.keyCode === _constants.VK_SPACE) {\n\t        e.preventDefault();\n\t        e.stopPropagation();\n\t        _this3.toggleTab_(panel, tab, tabpanel);\n\t      }\n\t    };\n\t\n\t    if (tab === null) {\n\t      throw new Error('There must be a tab element for each accordion panel.');\n\t    }\n\t\n\t    if (tabpanel === null) {\n\t      throw new Error('There must be a tabpanel element for each accordion panel.');\n\t    }\n\t\n\t    panel.setAttribute('role', PANEL_ROLE);\n\t    tab.setAttribute('role', TAB_ROLE);\n\t    tabpanel.setAttribute('role', TABPANEL_ROLE);\n\t\n\t    if (tab.hasAttribute('disabled')) {\n\t      disableTab();\n\t    } else {\n\t      enableTab();\n\t    }\n\t\n\t    if (this.element_.classList.contains(ACCORDION_HORIZONTAL)) {\n\t      calcMaxTabCaptionWidth();\n\t    }\n\t\n\t    if (this.element_.classList.contains(RIPPLE_EFFECT)) {\n\t      tab.classList.add(RIPPLE);\n\t    }\n\t\n\t    if (this.element_.classList.contains(ANIMATION_EFFECT)) {\n\t      tabpanel.classList.add(ANIMATION);\n\t    }\n\t\n\t    // Remove listeners, just in case ...\n\t    tab.removeEventListener('click', tabClickHandler);\n\t    tab.removeEventListener('focus', tabFocusHandler);\n\t    tab.removeEventListener('keydown', tabKeydownHandler);\n\t    tabpanel.removeEventListener('click', tabpanelClickHandler);\n\t    tabpanel.removeEventListener('focus', tabpanelFocusHandler);\n\t\n\t    tab.addEventListener('click', tabClickHandler);\n\t    tab.addEventListener('focus', tabFocusHandler);\n\t    tab.addEventListener('keydown', tabKeydownHandler);\n\t    tabpanel.addEventListener('click', tabpanelClickHandler, true);\n\t    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);\n\t  };\n\t  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;\n\t\n\t  /**\n\t   * Execute command\n\t   * @param detail\n\t   */\n\t  MaterialExtAccordion.prototype.command = function (detail) {\n\t    var _this4 = this;\n\t\n\t    var openTab = function openTab(tabElement) {\n\t\n\t      if (tabElement === undefined) {\n\t        _this4.openTabs_();\n\t      } else if (tabElement !== null) {\n\t        var _accordionPanelElemen2 = accordionPanelElements(tabElement),\n\t            panel = _accordionPanelElemen2.panel,\n\t            tab = _accordionPanelElemen2.tab,\n\t            tabpanel = _accordionPanelElemen2.tabpanel;\n\t\n\t        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() !== 'true') {\n\t          _this4.toggleTab_(panel, tab, tabpanel);\n\t        }\n\t      }\n\t    };\n\t\n\t    var closeTab = function closeTab(tabElement) {\n\t      if (tabElement === undefined) {\n\t        _this4.closeTabs_();\n\t      } else if (tabElement !== null) {\n\t        var _accordionPanelElemen3 = accordionPanelElements(tabElement),\n\t            panel = _accordionPanelElemen3.panel,\n\t            tab = _accordionPanelElemen3.tab,\n\t            tabpanel = _accordionPanelElemen3.tabpanel;\n\t\n\t        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {\n\t          _this4.toggleTab_(panel, tab, tabpanel);\n\t        }\n\t      }\n\t    };\n\t\n\t    var toggleTab = function toggleTab(tabElement) {\n\t      if (tabElement) {\n\t        var _accordionPanelElemen4 = accordionPanelElements(tabElement),\n\t            panel = _accordionPanelElemen4.panel,\n\t            tab = _accordionPanelElemen4.tab,\n\t            tabpanel = _accordionPanelElemen4.tabpanel;\n\t\n\t        _this4.toggleTab_(panel, tab, tabpanel);\n\t      }\n\t    };\n\t\n\t    if (detail && detail.action) {\n\t      var action = detail.action,\n\t          target = detail.target;\n\t\n\t\n\t      switch (action.toLowerCase()) {\n\t        case 'open':\n\t          openTab(target);\n\t          break;\n\t        case 'close':\n\t          closeTab(target);\n\t          break;\n\t        case 'toggle':\n\t          toggleTab(target);\n\t          break;\n\t        case 'upgrade':\n\t          if (target) {\n\t            this.upgradeTab(target);\n\t          }\n\t          break;\n\t        default:\n\t          throw new Error('Unknown action \"' + action + '\". Action must be one of \"open\", \"close\", \"toggle\" or \"upgrade\"');\n\t      }\n\t    }\n\t  };\n\t  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtAccordion.prototype.init = function () {\n\t    var _this5 = this;\n\t\n\t    if (this.element_) {\n\t      // Do the init required for this component to work\n\t      if (!(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {\n\t        throw new Error('Accordion must have one of the classes \"' + ACCORDION_HORIZONTAL + '\" or \"' + ACCORDION_VERTICAL + '\"');\n\t      }\n\t\n\t      this.element_.setAttribute('role', 'tablist');\n\t\n\t      if (!this.element_.hasAttribute(_constants.ARIA_MULTISELECTABLE)) {\n\t        this.element_.setAttribute(_constants.ARIA_MULTISELECTABLE, 'false');\n\t      }\n\t\n\t      this.element_.removeEventListener('command', this.commandHandler_);\n\t      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\t\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).forEach(function (panel) {\n\t        return _this5.upgradeTab(panel);\n\t      });\n\t\n\t      // Set upgraded flag\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to downgrade\n\t   *\n\t   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {\n\t     'use strict';\n\t     console.log('***** MaterialExtAccordion.mdlDowngrade');\n\t   };\n\t   */\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtAccordion,\n\t    classAsString: 'MaterialExtAccordion',\n\t    cssClass: 'mdlext-js-accordion',\n\t    widget: true\n\t  });\n\t})(); /**\n\t       * @license\n\t       * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t       *\n\t       * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t       * you may not use this file except in compliance with the License.\n\t       * You may obtain a copy of the License at\n\t       *\n\t       *      http://www.apache.org/licenses/LICENSE-2.0\n\t       *\n\t       * Unless required by applicable law or agreed to in writing, software\n\t       * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t       * See the License for the specific language governing permissions and\n\t       * limitations under the License.\n\t       *\n\t       * This code is built with Google Material Design Lite,\n\t       * which is Licensed under the Apache License, Version 2.0\n\t       */\n\t\n\t/**\n\t * A WAI-ARIA friendly accordion component.\n\t * An accordion is a collection of expandable panels associated with a common outer container. Panels consist\n\t * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections\n\t * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.\n\t * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates\n\t * and makes the contents of each panel visible (or not) by interacting with the Accordion Header\n\t */\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _isInteger = __webpack_require__(32);\n\t\n\tvar _isInteger2 = _interopRequireDefault(_isInteger);\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _assign = __webpack_require__(33);\n\t\n\tvar _assign2 = _interopRequireDefault(_assign);\n\t\n\tvar _intervalFunction = __webpack_require__(30);\n\t\n\tvar _intervalFunction2 = _interopRequireDefault(_intervalFunction);\n\t\n\tvar _easing = __webpack_require__(29);\n\t\n\tvar _jsonUtils = __webpack_require__(14);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/**\n\t * Image carousel\n\t */\n\t\n\tvar MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  //const CAROUSEL = 'mdlext-carousel';\n\t\n\t  var SLIDE = 'mdlext-carousel__slide';\n\t  var ROLE = 'list';\n\t  var SLIDE_ROLE = 'listitem';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtCarousel = function MaterialExtCarousel(element) {\n\t    // Stores the element.\n\t    this.element_ = element;\n\t\n\t    // Default config\n\t    this.config_ = {\n\t      interactive: true,\n\t      autostart: false,\n\t      type: 'slide',\n\t      interval: 1000,\n\t      animationLoop: (0, _intervalFunction2.default)(1000)\n\t    };\n\t\n\t    this.scrollAnimation_ = (0, _intervalFunction2.default)(33);\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t\n\t  window['MaterialExtCarousel'] = MaterialExtCarousel;\n\t\n\t  /**\n\t   * Start slideshow animation\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.startSlideShow_ = function () {\n\t    var _this = this;\n\t\n\t    var nextSlide = function nextSlide() {\n\t      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected]');\n\t      if (slide) {\n\t        slide.removeAttribute('aria-selected');\n\t        slide = slide.nextElementSibling;\n\t      }\n\t      if (!slide) {\n\t        slide = _this.element_.querySelector('.' + SLIDE + ':first-child');\n\t        _this.animateScroll_(0);\n\t      }\n\t      if (slide) {\n\t        _this.moveSlideIntoViewport_(slide);\n\t        slide.setAttribute('aria-selected', '');\n\t        _this.emitSelectEvent_('next', null, slide);\n\t        return true;\n\t      }\n\t      return false;\n\t    };\n\t\n\t    var nextScroll = function nextScroll(direction) {\n\t      var nextDirection = direction;\n\t\n\t      if ('next' === direction && _this.element_.scrollLeft === _this.element_.scrollWidth - _this.element_.clientWidth) {\n\t        nextDirection = 'prev';\n\t      } else if (_this.element_.scrollLeft === 0) {\n\t        nextDirection = 'next';\n\t      }\n\t      var x = 'next' === nextDirection ? Math.min(_this.element_.scrollLeft + _this.element_.clientWidth, _this.element_.scrollWidth - _this.element_.clientWidth) : Math.max(_this.element_.scrollLeft - _this.element_.clientWidth, 0);\n\t\n\t      _this.animateScroll_(x, 1000);\n\t      return nextDirection;\n\t    };\n\t\n\t    if (!this.config_.animationLoop.started) {\n\t      (function () {\n\t        _this.config_.animationLoop.interval = _this.config_.interval;\n\t        var direction = 'next';\n\t\n\t        if ('scroll' === _this.config_.type) {\n\t          _this.config_.animationLoop.start(function () {\n\t            direction = nextScroll(direction);\n\t            return true; // It runs until cancelSlideShow_ is triggered\n\t          });\n\t        } else {\n\t          nextSlide();\n\t          _this.config_.animationLoop.start(function () {\n\t            return nextSlide(); // It runs until cancelSlideShow_ is triggered\n\t          });\n\t        }\n\t      })();\n\t    }\n\t\n\t    // TODO: Pause animation when carousel is not in browser viewport or user changes tab\n\t  };\n\t\n\t  /**\n\t   * Cancel slideshow if running. Emmits a 'pause' event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.cancelSlideShow_ = function () {\n\t    if (this.config_.animationLoop.started) {\n\t      this.config_.animationLoop.stop();\n\t      this.emitSelectEvent_('pause', _constants.VK_ESC, this.element_.querySelector('.' + SLIDE + '[aria-selected]'));\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Animate scroll\n\t   * @param newPosition\n\t   * @param newDuration\n\t   * @param completedCallback\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.animateScroll_ = function (newPosition, newDuration, completedCallback) {\n\t    var _this2 = this;\n\t\n\t    var start = this.element_.scrollLeft;\n\t    var distance = newPosition - start;\n\t\n\t    if (distance !== 0) {\n\t      (function () {\n\t        var duration = Math.max(Math.min(Math.abs(distance), newDuration || 400), 100); // duration is between 100 and newDuration||400ms||distance\n\t        var t = 0;\n\t        _this2.scrollAnimation_.stop();\n\t        _this2.scrollAnimation_.start(function (timeElapsed) {\n\t          t += timeElapsed;\n\t          if (t < duration) {\n\t            _this2.element_.scrollLeft = (0, _easing.inOutQuintic)(t, start, distance, duration);\n\t            return true;\n\t          } else {\n\t            _this2.element_.scrollLeft = newPosition;\n\t            if (completedCallback) {\n\t              completedCallback();\n\t            }\n\t            return false;\n\t          }\n\t        });\n\t      })();\n\t    } else {\n\t      if (completedCallback) {\n\t        completedCallback();\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Execute commend\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.command_ = function (event) {\n\t    var _this3 = this;\n\t\n\t    var x = 0;\n\t    var slide = null;\n\t    var a = event.detail.action.toLowerCase();\n\t\n\t    // Cancel slideshow if running\n\t    this.cancelSlideShow_();\n\t\n\t    switch (a) {\n\t      case 'first':\n\t        slide = this.element_.querySelector('.' + SLIDE + ':first-child');\n\t        break;\n\t\n\t      case 'last':\n\t        x = this.element_.scrollWidth - this.element_.clientWidth;\n\t        slide = this.element_.querySelector('.' + SLIDE + ':last-child');\n\t        break;\n\t\n\t      case 'scroll-prev':\n\t        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n\t        break;\n\t\n\t      case 'scroll-next':\n\t        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);\n\t        break;\n\t\n\t      case 'next':\n\t      case 'prev':\n\t        slide = this.element_.querySelector('.' + SLIDE + '[aria-selected]');\n\t        if (slide) {\n\t          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;\n\t          this.setAriaSelected_(slide);\n\t          this.emitSelectEvent_(a, null, slide);\n\t        }\n\t        return;\n\t\n\t      case 'play':\n\t        (0, _assign2.default)(this.config_, event.detail);\n\t        this.startSlideShow_();\n\t        return;\n\t\n\t      case 'pause':\n\t        return;\n\t\n\t      default:\n\t        return;\n\t    }\n\t\n\t    this.animateScroll_(x, undefined, function () {\n\t      if ('scroll-next' === a || 'scroll-prev' === a) {\n\t        var slides = _this3.getSlidesInViewport_();\n\t        if (slides.length > 0) {\n\t          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];\n\t        }\n\t      }\n\t      _this3.setAriaSelected_(slide);\n\t      _this3.emitSelectEvent_(a, null, slide);\n\t    });\n\t  };\n\t\n\t  /**\n\t   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause\n\t   * @param event. A custom event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.commandHandler_ = function (event) {\n\t    event.preventDefault();\n\t    event.stopPropagation();\n\t    if (event.detail && event.detail.action) {\n\t      this.command_(event);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle keypress\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.keyDownHandler_ = function (event) {\n\t\n\t    if (event && event.target && event.target !== this.element_) {\n\t\n\t      var action = 'first';\n\t\n\t      if (event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_PAGE_UP || event.keyCode === _constants.VK_PAGE_DOWN) {\n\t\n\t        event.preventDefault();\n\t        if (event.keyCode === _constants.VK_END) {\n\t          action = 'last';\n\t        } else if (event.keyCode === _constants.VK_PAGE_UP) {\n\t          action = 'scroll-prev';\n\t        } else if (event.keyCode === _constants.VK_PAGE_DOWN) {\n\t          action = 'scroll-next';\n\t        }\n\t\n\t        var cmd = new CustomEvent('select', {\n\t          detail: {\n\t            action: action\n\t          }\n\t        });\n\t        this.command_(cmd);\n\t      } else if (event.keyCode === _constants.VK_TAB || event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {\n\t\n\t        var slide = getSlide_(event.target);\n\t\n\t        if (!slide) {\n\t          return;\n\t        }\n\t\n\t        // Cancel slideshow if running\n\t        this.cancelSlideShow_();\n\t\n\t        switch (event.keyCode) {\n\t          case _constants.VK_ARROW_UP:\n\t          case _constants.VK_ARROW_LEFT:\n\t            action = 'prev';\n\t            slide = slide.previousElementSibling;\n\t            break;\n\t\n\t          case _constants.VK_ARROW_DOWN:\n\t          case _constants.VK_ARROW_RIGHT:\n\t            action = 'next';\n\t            slide = slide.nextElementSibling;\n\t            break;\n\t\n\t          case _constants.VK_TAB:\n\t            if (event.shiftKey) {\n\t              action = 'prev';\n\t              slide = slide.previousElementSibling;\n\t            } else {\n\t              action = 'next';\n\t              slide = slide.nextElementSibling;\n\t            }\n\t            break;\n\t\n\t          case _constants.VK_SPACE:\n\t          case _constants.VK_ENTER:\n\t            action = 'select';\n\t            break;\n\t        }\n\t\n\t        if (slide) {\n\t          event.preventDefault();\n\t          setFocus_(slide);\n\t          this.emitSelectEvent_(action, event.keyCode, slide);\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle dragging\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.dragHandler_ = function (event) {\n\t    var _this4 = this;\n\t\n\t    event.preventDefault();\n\t\n\t    // Cancel slideshow if running\n\t    this.cancelSlideShow_();\n\t\n\t    var updating = false;\n\t    var rAFDragId = 0;\n\t\n\t    var startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n\t    var prevX = startX;\n\t    var targetElement = event.target;\n\t\n\t    var update = function update(e) {\n\t      var currentX = e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0);\n\t      var dx = prevX - currentX;\n\t\n\t      if (dx < 0) {\n\t        _this4.element_.scrollLeft = Math.max(_this4.element_.scrollLeft + dx, 0);\n\t      } else if (dx > 0) {\n\t        _this4.element_.scrollLeft = Math.min(_this4.element_.scrollLeft + dx, _this4.element_.scrollWidth - _this4.element_.clientWidth);\n\t      }\n\t\n\t      prevX = currentX;\n\t      updating = false;\n\t    };\n\t\n\t    // drag handler\n\t    var drag = function drag(e) {\n\t      e.preventDefault();\n\t\n\t      if (!updating) {\n\t        rAFDragId = window.requestAnimationFrame(function () {\n\t          return update(e);\n\t        });\n\t        updating = true;\n\t      }\n\t    };\n\t\n\t    // end drag handler\n\t    var endDrag = function endDrag(e) {\n\t      e.preventDefault();\n\t\n\t      _this4.element_.removeEventListener('mousemove', drag);\n\t      _this4.element_.removeEventListener('touchmove', drag);\n\t      window.removeEventListener('mouseup', endDrag);\n\t      window.removeEventListener('touchend', endDrag);\n\t\n\t      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/\n\t      window.cancelAnimationFrame(rAFDragId);\n\t\n\t      var slide = getSlide_(targetElement);\n\t      setFocus_(slide);\n\t      _this4.emitSelectEvent_('click', null, slide);\n\t    };\n\t\n\t    this.element_.addEventListener('mousemove', drag);\n\t    this.element_.addEventListener('touchmove', drag);\n\t    window.addEventListener('mouseup', endDrag);\n\t    window.addEventListener('touchend', endDrag);\n\t  };\n\t\n\t  /**\n\t   * Handle click\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.clickHandler_ = function (event) {\n\t    // Click is handled by drag\n\t    event.preventDefault();\n\t  };\n\t\n\t  /**\n\t   * Handle focus\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.focusHandler_ = function (event) {\n\t    var slide = getSlide_(event.target);\n\t    if (slide) {\n\t      // The last focused/selected slide has 'aria-selected', even if focus is lost\n\t      this.setAriaSelected_(slide);\n\t      slide.classList.add(_constants.IS_FOCUSED);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle blur\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.blurHandler_ = function (event) {\n\t    var slide = getSlide_(event.target);\n\t    if (slide) {\n\t      slide.classList.remove(_constants.IS_FOCUSED);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Emits a custeom 'select' event\n\t   * @param command\n\t   * @param keyCode\n\t   * @param slide\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.emitSelectEvent_ = function (command, keyCode, slide) {\n\t\n\t    if (slide) {\n\t      this.moveSlideIntoViewport_(slide);\n\t\n\t      var evt = new CustomEvent('select', {\n\t        bubbles: true,\n\t        cancelable: true,\n\t        detail: {\n\t          command: command,\n\t          keyCode: keyCode,\n\t          source: slide\n\t        }\n\t      });\n\t      this.element_.dispatchEvent(evt);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Get the first visible slide in component viewport\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.getSlidesInViewport_ = function () {\n\t    var carouselRect = this.element_.getBoundingClientRect();\n\t\n\t    var slidesInViewport = [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).filter(function (slide) {\n\t      var slideRect = slide.getBoundingClientRect();\n\t      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;\n\t    });\n\t    return slidesInViewport;\n\t  };\n\t\n\t  /**\n\t   * Move slide into component viewport - if needed\n\t   * @param slide\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function (slide) {\n\t    var carouselRect = this.element_.getBoundingClientRect();\n\t    var slideRect = slide.getBoundingClientRect();\n\t\n\t    if (slideRect.left < carouselRect.left) {\n\t      var x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);\n\t      this.animateScroll_(x);\n\t    } else if (slideRect.right > carouselRect.right) {\n\t      var _x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);\n\t      this.animateScroll_(_x);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Removes 'aria-selected' from all slides in carousel\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.setAriaSelected_ = function (slide) {\n\t    if (slide) {\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected]'))).forEach(function (slide) {\n\t        return slide.removeAttribute('aria-selected');\n\t      });\n\t      slide.setAttribute('aria-selected', '');\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Removes event listeners\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.removeListeners_ = function () {\n\t    this.element_.removeEventListener('focus', this.focusHandler_);\n\t    this.element_.removeEventListener('blur', this.blurHandler_);\n\t    this.element_.removeEventListener('keydown', this.keyDownHandler_);\n\t    this.element_.removeEventListener('mousedown', this.dragHandler_);\n\t    this.element_.removeEventListener('touchstart', this.dragHandler_);\n\t    this.element_.removeEventListener('click', this.clickHandler_, false);\n\t    this.element_.removeEventListener('command', this.commandHandler_);\n\t    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);\n\t  };\n\t\n\t  // Helpers\n\t  var getSlide_ = function getSlide_(element) {\n\t    return element.closest('.' + SLIDE);\n\t  };\n\t\n\t  var setFocus_ = function setFocus_(slide) {\n\t    if (slide) {\n\t      slide.focus();\n\t    }\n\t  };\n\t\n\t  var addRipple_ = function addRipple_(slide) {\n\t    if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {\n\t      var rippleContainer = document.createElement('span');\n\t      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n\t      rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);\n\t      var ripple = document.createElement('span');\n\t      ripple.classList.add(_constants.MDL_RIPPLE);\n\t      rippleContainer.appendChild(ripple);\n\t\n\t      var img = slide.querySelector('img');\n\t      if (img) {\n\t        // rippleContainer blocks image title\n\t        rippleContainer.title = img.title;\n\t      }\n\t      slide.appendChild(rippleContainer);\n\t      componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);\n\t    }\n\t  };\n\t  // End helpers\n\t\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Cancel animation - if running.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtCarousel.prototype.stopAnimation = function () {\n\t    this.config_.animationLoop.stop();\n\t  };\n\t  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;\n\t\n\t  /**\n\t   * Upgrade slides\n\t   * Use if more list elements are added later (dynamically)\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtCarousel.prototype.upgradeSlides = function () {\n\t    var _this5 = this;\n\t\n\t    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);\n\t\n\t    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {\n\t\n\t      slide.setAttribute('role', SLIDE_ROLE);\n\t\n\t      if (_this5.config_.interactive) {\n\t        if (!slide.getAttribute('tabindex')) {\n\t          slide.setAttribute('tabindex', '0');\n\t        }\n\t        if (hasRippleEffect) {\n\t          addRipple_(slide);\n\t        }\n\t      } else {\n\t        slide.setAttribute('tabindex', '-1');\n\t      }\n\t    });\n\t  };\n\t  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;\n\t\n\t  /**\n\t   * Get config object\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtCarousel.prototype.getConfig = function () {\n\t    return this.config_;\n\t  };\n\t  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtCarousel.prototype.init = function () {\n\t\n\t    if (this.element_) {\n\t      // Config\n\t      if (this.element_.hasAttribute('data-config')) {\n\t        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.element_.getAttribute('data-config'), this.config_);\n\t      }\n\t\n\t      // Wai-Aria\n\t      this.element_.setAttribute('role', ROLE);\n\t\n\t      // Prefer tabindex -1\n\t      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {\n\t        this.element_.setAttribute('tabindex', -1);\n\t      }\n\t\n\t      // Remove listeners, just in case ...\n\t      this.removeListeners_();\n\t\n\t      if (this.config_.interactive) {\n\t\n\t        // Ripple\n\t        var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);\n\t        if (hasRippleEffect) {\n\t          this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n\t        }\n\t\n\t        // Listen to focus/blur events\n\t        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);\n\t        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);\n\t\n\t        // Listen to keyboard events\n\t        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);\n\t\n\t        // Listen to drag events\n\t        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);\n\t        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);\n\t\n\t        // Listen to click events\n\t        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);\n\t      }\n\t\n\t      // Listen to custom 'command' event\n\t      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\t\n\t      // Listen to 'mdl-componentdowngraded' event\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t\n\t      // Slides collection\n\t      this.upgradeSlides();\n\t\n\t      // Set upgraded flag\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t\n\t      if (this.config_.autostart) {\n\t        // Start slideshow\n\t        this.startSlideShow_();\n\t      }\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtCarousel.prototype.mdlDowngrade_ = function () {\n\t    'use strict';\n\t    //console.log('***** MaterialExtCarousel.mdlDowngrade_');\n\t\n\t    // Stop animation - if any\n\t\n\t    this.stopAnimation();\n\t\n\t    // Remove listeners\n\t    this.removeListeners_();\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtCarousel,\n\t    classAsString: 'MaterialExtCarousel',\n\t    cssClass: 'mdlext-js-carousel',\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _classCallCheck2 = __webpack_require__(22);\n\t\n\tvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\t\n\tvar _createClass2 = __webpack_require__(23);\n\t\n\tvar _createClass3 = _interopRequireDefault(_createClass2);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _stringUtils = __webpack_require__(15);\n\t\n\tvar _domUtils = __webpack_require__(21);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar JS_COLLAPSIBLE = 'mdlext-js-collapsible'; /**\n\t                                               * @license\n\t                                               * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n\t                                               *\n\t                                               * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t                                               * you may not use this file except in compliance with the License.\n\t                                               * You may obtain a copy of the License at\n\t                                               *\n\t                                               *      http://www.apache.org/licenses/LICENSE-2.0\n\t                                               *\n\t                                               * Unless required by applicable law or agreed to in writing, software\n\t                                               * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t                                               * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t                                               * See the License for the specific language governing permissions and\n\t                                               * limitations under the License.\n\t                                               *\n\t                                               * This code is built with Google Material Design Lite,\n\t                                               * which is Licensed under the Apache License, Version 2.0\n\t                                               */\n\t\n\t/**\n\t * A collapsible is a component to mark expandable and collapsible regions.\n\t * The component use the aria-expanded state to indicate whether regions of\n\t * the content are collapsible, and to expose whether a region is currently\n\t * expanded or collapsed.\n\t * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions\n\t */\n\t\n\tvar COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';\n\tvar COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';\n\tvar COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';\n\t\n\t/**\n\t * The collapsible component\n\t */\n\t\n\tvar Collapsible = function () {\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that this component is connected to.\n\t   */\n\t  function Collapsible(element) {\n\t    var _this = this;\n\t\n\t    (0, _classCallCheck3.default)(this, Collapsible);\n\t    this.element_ = null;\n\t    this.controlElement_ = null;\n\t\n\t    this.keyDownHandler = function (event) {\n\t      if (event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE) {\n\t        event.preventDefault();\n\t\n\t        // Trigger click\n\t        (event.target || _this.controlElement).dispatchEvent(new MouseEvent('click', {\n\t          bubbles: true,\n\t          cancelable: true,\n\t          view: window\n\t        }));\n\t      }\n\t    };\n\t\n\t    this.clickHandler = function (event) {\n\t      if (!_this.isDisabled) {\n\t        if (event.target !== _this.controlElement) {\n\t          // Do not toggle if a focusable element inside the control element triggered the event\n\t          var p = (0, _domUtils.getParentElements)(event.target, _this.controlElement);\n\t          p.push(event.target);\n\t          if (p.find(function (el) {\n\t            return (0, _domUtils.isFocusable)(el);\n\t          })) {\n\t            return;\n\t          }\n\t        }\n\t        _this.toggle();\n\t      }\n\t    };\n\t\n\t    this.element_ = element;\n\t    this.init();\n\t  }\n\t\n\t  (0, _createClass3.default)(Collapsible, [{\n\t    key: 'collapse',\n\t    value: function collapse() {\n\t      if (!this.isDisabled && this.isExpanded) {\n\t        if (this.dispatchToggleEvent('collapse')) {\n\t          this.controlElement.setAttribute('aria-expanded', 'false');\n\t          var regions = this.regionElements.slice(0);\n\t          for (var i = regions.length - 1; i >= 0; --i) {\n\t            regions[i].setAttribute('hidden', '');\n\t          }\n\t        }\n\t      }\n\t    }\n\t  }, {\n\t    key: 'expand',\n\t    value: function expand() {\n\t      if (!this.isDisabled && !this.isExpanded) {\n\t        if (this.dispatchToggleEvent('expand')) {\n\t          this.controlElement.setAttribute('aria-expanded', 'true');\n\t          this.regionElements.forEach(function (region) {\n\t            return region.removeAttribute('hidden');\n\t          });\n\t        }\n\t      }\n\t    }\n\t  }, {\n\t    key: 'toggle',\n\t    value: function toggle() {\n\t      if (this.isExpanded) {\n\t        this.collapse();\n\t      } else {\n\t        this.expand();\n\t      }\n\t    }\n\t  }, {\n\t    key: 'dispatchToggleEvent',\n\t    value: function dispatchToggleEvent(action) {\n\t      return this.element.dispatchEvent(new CustomEvent('toggle', {\n\t        bubbles: true,\n\t        cancelable: true,\n\t        detail: {\n\t          action: action\n\t        }\n\t      }));\n\t    }\n\t  }, {\n\t    key: 'disableToggle',\n\t    value: function disableToggle() {\n\t      this.controlElement.setAttribute('aria-disabled', true);\n\t    }\n\t  }, {\n\t    key: 'enableToggle',\n\t    value: function enableToggle() {\n\t      this.controlElement.removeAttribute('aria-disabled');\n\t    }\n\t  }, {\n\t    key: 'addRegionId',\n\t    value: function addRegionId(regionId) {\n\t      var ids = this.regionIds;\n\t      if (!ids.find(function (id) {\n\t        return regionId === id;\n\t      })) {\n\t        ids.push(regionId);\n\t        this.controlElement.setAttribute('aria-controls', ids.join(' '));\n\t      }\n\t    }\n\t  }, {\n\t    key: 'addRegionElement',\n\t    value: function addRegionElement(region) {\n\t      if (!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) || region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {\n\t        region.classList.add(COLLAPSIBLE_GROUP_CLASS);\n\t      }\n\t\n\t      if (!region.hasAttribute('role')) {\n\t        var role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';\n\t        region.setAttribute('role', role);\n\t      }\n\t\n\t      if (!region.hasAttribute('id')) {\n\t        region.id = region.getAttribute('role') + '-' + (0, _stringUtils.randomString)();\n\t      }\n\t\n\t      if (this.isExpanded) {\n\t        region.removeAttribute('hidden');\n\t      } else {\n\t        region.setAttribute('hidden', '');\n\t      }\n\t      this.addRegionId(region.id);\n\t    }\n\t  }, {\n\t    key: 'removeRegionElement',\n\t    value: function removeRegionElement(region) {\n\t      if (region && region.id) {\n\t        var ids = this.regionIds.filter(function (id) {\n\t          return id === region.id;\n\t        });\n\t        this.controlElement.setAttribute('aria-controls', ids.join(' '));\n\t      }\n\t    }\n\t  }, {\n\t    key: 'removeListeners',\n\t    value: function removeListeners() {\n\t      this.controlElement.removeEventListener('keydown', this.keyDownHandler);\n\t      this.controlElement.removeEventListener('click', this.clickHandler);\n\t    }\n\t  }, {\n\t    key: 'init',\n\t    value: function init() {\n\t      var _this2 = this;\n\t\n\t      var initControl = function initControl() {\n\t        // Find the button element\n\t        _this2.controlElement_ = _this2.element.querySelector('.' + COLLAPSIBLE_CONTROL_CLASS) || _this2.element;\n\t\n\t        // Add \"aria-expanded\" attribute if not present\n\t        if (!_this2.controlElement.hasAttribute('aria-expanded')) {\n\t          _this2.controlElement.setAttribute('aria-expanded', 'false');\n\t        }\n\t\n\t        // Add role=button if control != <button>\n\t        if (_this2.controlElement.nodeName.toLowerCase() !== 'button') {\n\t          _this2.controlElement.setAttribute('role', 'button');\n\t        }\n\t\n\t        // Add tabindex\n\t        if (!(0, _domUtils.isFocusable)(_this2.controlElement) && !_this2.controlElement.hasAttribute('tabindex')) {\n\t          _this2.controlElement.setAttribute('tabindex', '0');\n\t        }\n\t      };\n\t\n\t      var initRegions = function initRegions() {\n\t        var regions = [];\n\t        if (!_this2.controlElement.hasAttribute('aria-controls')) {\n\t          // Add siblings as collapsible region(s)\n\t          var r = _this2.element.nextElementSibling;\n\t          while (r) {\n\t            if (r.classList.contains(COLLAPSIBLE_GROUP_CLASS) || r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {\n\t              regions.push(r);\n\t            } else if (r.classList.contains(JS_COLLAPSIBLE)) {\n\t              // A new collapsible component\n\t              break;\n\t            }\n\t            r = r.nextElementSibling;\n\t          }\n\t        } else {\n\t          regions = _this2.regionElements;\n\t        }\n\t        regions.forEach(function (region) {\n\t          return _this2.addRegionElement(region);\n\t        });\n\t      };\n\t\n\t      var addListeners = function addListeners() {\n\t        _this2.controlElement.addEventListener('keydown', _this2.keyDownHandler);\n\t        _this2.controlElement.addEventListener('click', _this2.clickHandler);\n\t      };\n\t\n\t      initControl();\n\t      initRegions();\n\t      this.removeListeners();\n\t      addListeners();\n\t    }\n\t  }, {\n\t    key: 'downgrade',\n\t    value: function downgrade() {\n\t      this.removeListeners();\n\t    }\n\t  }, {\n\t    key: 'element',\n\t    get: function get() {\n\t      return this.element_;\n\t    }\n\t  }, {\n\t    key: 'controlElement',\n\t    get: function get() {\n\t      return this.controlElement_;\n\t    }\n\t  }, {\n\t    key: 'isDisabled',\n\t    get: function get() {\n\t      return this.controlElement.hasAttribute('disabled') && this.controlElement.getAttribute('disabled').toLowerCase() !== 'false' || this.controlElement.hasAttribute('aria-disabled') && this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false';\n\t    }\n\t  }, {\n\t    key: 'isExpanded',\n\t    get: function get() {\n\t      return this.controlElement.hasAttribute('aria-expanded') && this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';\n\t    }\n\t  }, {\n\t    key: 'regionIds',\n\t    get: function get() {\n\t      return this.controlElement.hasAttribute('aria-controls') ? this.controlElement.getAttribute('aria-controls').split(' ') : [];\n\t    }\n\t  }, {\n\t    key: 'regionElements',\n\t    get: function get() {\n\t      return this.regionIds.map(function (id) {\n\t        return document.querySelector('#' + id);\n\t      }).filter(function (el) {\n\t        return el != null;\n\t      });\n\t    }\n\t  }]);\n\t  return Collapsible;\n\t}();\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that will be upgraded.\n\t   */\n\t\n\t  var MaterialExtCollapsible = function MaterialExtCollapsible(element) {\n\t    this.element_ = element;\n\t    this.collapsible = null;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtCollapsible'] = MaterialExtCollapsible;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtCollapsible.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.collapsible = new Collapsible(this.element_);\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t\n\t      // Listen to 'mdl-componentdowngraded' event\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtCollapsible.prototype.mdlDowngrade_ = function () {\n\t    this.collapsible.downgrade();\n\t  };\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Get control element.\n\t   * @return {HTMLElement} element The element that controls the collapsible region.\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.getControlElement = function () {\n\t    return this.collapsible.controlElement;\n\t  };\n\t  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;\n\t\n\t  /**\n\t   * Get region elements controlled by this collapsible\n\t   * @returns {Array<HTMLElement>} the collapsible region elements\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.getRegionElements = function () {\n\t    return this.collapsible.regionElements;\n\t  };\n\t  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;\n\t\n\t  /**\n\t   * Add region elements.\n\t   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.addRegionElements = function () {\n\t    var _this3 = this;\n\t\n\t    for (var _len = arguments.length, elements = Array(_len), _key = 0; _key < _len; _key++) {\n\t      elements[_key] = arguments[_key];\n\t    }\n\t\n\t    elements.forEach(function (element) {\n\t      return _this3.collapsible.addRegionElement(element);\n\t    });\n\t  };\n\t  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;\n\t\n\t  /**\n\t   * Remove collapsible region(s) from component.\n\t   * Note: This operation does not delete the element from the DOM tree.\n\t   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.removeRegionElements = function () {\n\t    var _this4 = this;\n\t\n\t    for (var _len2 = arguments.length, elements = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t      elements[_key2] = arguments[_key2];\n\t    }\n\t\n\t    elements.forEach(function (element) {\n\t      return _this4.collapsible.removeRegionElement(element);\n\t    });\n\t  };\n\t  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;\n\t\n\t  /**\n\t   * Expand collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.expand = function () {\n\t    this.collapsible.expand();\n\t  };\n\t  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;\n\t\n\t  /**\n\t   * Collapse collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.collapse = function () {\n\t    this.collapsible.collapse();\n\t  };\n\t  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;\n\t\n\t  /**\n\t   * Toggle collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.toggle = function () {\n\t    this.collapsible.toggle();\n\t  };\n\t  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;\n\t\n\t  /**\n\t   * Check whether component has aria-expanded state true\n\t   * @return {Boolean} true if aria-expanded=\"true\", otherwise false\n\t   */\n\t  MaterialExtCollapsible.prototype.isExpanded = function () {\n\t    return this.collapsible.isExpanded;\n\t  };\n\t  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;\n\t\n\t  /**\n\t   * Check whether component has aria-disabled state set to true\n\t   * @return {Boolean} true if aria-disabled=\"true\", otherwise false\n\t   */\n\t  MaterialExtCollapsible.prototype.isDisabled = function () {\n\t    return this.collapsible.isDisabled;\n\t  };\n\t  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;\n\t\n\t  /**\n\t   * Disables toggling of collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.disableToggle = function () {\n\t    this.collapsible.disableToggle();\n\t  };\n\t  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;\n\t\n\t  /**\n\t   * Enables toggling of collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.enableToggle = function () {\n\t    this.collapsible.enableToggle();\n\t  };\n\t  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtCollapsible,\n\t    classAsString: 'MaterialExtCollapsible',\n\t    cssClass: JS_COLLAPSIBLE,\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _classCallCheck2 = __webpack_require__(22);\n\t\n\tvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\t\n\tvar _createClass2 = __webpack_require__(23);\n\t\n\tvar _createClass3 = _interopRequireDefault(_createClass2);\n\t\n\tvar _class, _temp; /**\n\t                    * @license\n\t                    * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n\t                    *\n\t                    * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t                    * you may not use this file except in compliance with the License.\n\t                    * You may obtain a copy of the License at\n\t                    *\n\t                    *      http://www.apache.org/licenses/LICENSE-2.0\n\t                    *\n\t                    * Unless required by applicable law or agreed to in writing, software\n\t                    * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t                    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t                    * See the License for the specific language governing permissions and\n\t                    * limitations under the License.\n\t                    *\n\t                    * This code is built with Google Material Design Lite,\n\t                    * which is Licensed under the Apache License, Version 2.0\n\t                    */\n\t\n\tvar _jsonUtils = __webpack_require__(14);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar JS_FORMAT_FIELD = 'mdlext-js-formatfield';\n\tvar FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';\n\t\n\t/**\n\t * Detect browser locale\n\t * @returns {string} the locale\n\t * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference\n\t */\n\tvar browserLanguage = function browserLanguage() {\n\t  return navigator.languages ? navigator.languages[0] : navigator.language || navigator.userLanguage;\n\t};\n\t\n\t/**\n\t * The formatfield  formats an input field  using language sensitive number formatting.\n\t */\n\t\n\tvar FormatField = (_temp = _class = function () {\n\t  function FormatField(element) {\n\t    var _this = this;\n\t\n\t    (0, _classCallCheck3.default)(this, FormatField);\n\t    this.options_ = {};\n\t\n\t    this.clickHandler = function () {\n\t      clearTimeout(FormatField.timer);\n\t    };\n\t\n\t    this.focusInHandler = function () {\n\t      if (!(_this.input.readOnly || _this.input.disabled)) {\n\t        _this.input.value = _this.unformatInput();\n\t        //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);\n\t        FormatField.timer = setTimeout(function () {\n\t          return _this.input.select();\n\t        }, 200);\n\t      }\n\t    };\n\t\n\t    this.focusOutHandler = function () {\n\t      clearTimeout(FormatField.timer);\n\t\n\t      if (!(_this.input.readOnly || _this.input.disabled)) {\n\t        _this.formatValue();\n\t      }\n\t    };\n\t\n\t    this.element_ = element;\n\t    this.init();\n\t  }\n\t\n\t  (0, _createClass3.default)(FormatField, [{\n\t    key: 'stripSeparatorsFromValue',\n\t    value: function stripSeparatorsFromValue() {\n\t      var _this2 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return _this2.input.value.replace(/\\s/g, '').replace(new RegExp(_this2.options.groupSeparator, 'g'), '').replace(_this2.options.decimalSeparator, '.');\n\t      };\n\t      //.replace(this.intlGroupSeparator_, ''),\n\t      //.replace(this.intlDecimalSeparator_, '.');\n\t\n\t      return this.input.value ? doReplace() : this.input.value;\n\t    }\n\t  }, {\n\t    key: 'fixSeparators',\n\t    value: function fixSeparators(value) {\n\t      var _this3 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return value.replace(new RegExp(_this3.intlGroupSeparator_, 'g'), _this3.options.groupSeparator).replace(_this3.intlDecimalSeparator_, _this3.options.decimalSeparator);\n\t      };\n\t\n\t      return value ? doReplace() : value;\n\t    }\n\t  }, {\n\t    key: 'formatValue',\n\t    value: function formatValue() {\n\t      if (this.input.value) {\n\t        var v = new Intl.NumberFormat(this.options.locales, this.options).format(this.stripSeparatorsFromValue());\n\t\n\t        if ('NaN' !== v) {\n\t          this.input.value = this.fixSeparators(v);\n\t        }\n\t      }\n\t    }\n\t  }, {\n\t    key: 'unformat',\n\t    value: function unformat() {\n\t      var _this4 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return _this4.input.value.replace(/\\s/g, '').replace(new RegExp(_this4.options.groupSeparator, 'g'), '').replace(_this4.options.decimalSeparator, '.');\n\t      };\n\t\n\t      return this.input.value ? doReplace() : this.input.value;\n\t    }\n\t  }, {\n\t    key: 'unformatInput',\n\t    value: function unformatInput() {\n\t      var _this5 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return _this5.input.value.replace(/\\s/g, '').replace(new RegExp(_this5.options.groupSeparator, 'g'), '');\n\t      };\n\t\n\t      return this.input.value ? doReplace() : this.input.value;\n\t    }\n\t  }, {\n\t    key: 'removeListeners',\n\t    value: function removeListeners() {\n\t      this.input.removeEventListener('click', this.clickHandler);\n\t      this.input.removeEventListener('focusin', this.focusInHandler);\n\t      this.input.removeEventListener('focusout', this.focusOutHandler);\n\t    }\n\t  }, {\n\t    key: 'init',\n\t    value: function init() {\n\t      var _this6 = this;\n\t\n\t      var addListeners = function addListeners() {\n\t        _this6.input.addEventListener('click', _this6.clickHandler);\n\t        _this6.input.addEventListener('focusin', _this6.focusInHandler);\n\t        _this6.input.addEventListener('focusout', _this6.focusOutHandler);\n\t      };\n\t\n\t      var addOptions = function addOptions() {\n\t        var opts = _this6.element.getAttribute('data-formatfield-options') || _this6.input.getAttribute('data-formatfield-options');\n\t        if (opts) {\n\t          _this6.options_ = (0, _jsonUtils.jsonStringToObject)(opts, _this6.options);\n\t        }\n\t      };\n\t\n\t      var addLocale = function addLocale() {\n\t        if (!_this6.options.locales) {\n\t          _this6.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',\n\t        }\n\t      };\n\t\n\t      var addGrouping = function addGrouping() {\n\t        var s = 1234.5.toLocaleString(_this6.options.locales, {\n\t          style: 'decimal',\n\t          useGrouping: true,\n\t          minimumFractionDigits: 1,\n\t          maximumFractionDigits: 1\n\t        });\n\t\n\t        _this6.intlGroupSeparator_ = s.charAt(1);\n\t        _this6.intlDecimalSeparator_ = s.charAt(s.length - 2);\n\t        _this6.options.groupSeparator = _this6.options.groupSeparator || _this6.intlGroupSeparator_;\n\t        _this6.options.decimalSeparator = _this6.options.decimalSeparator || _this6.intlDecimalSeparator_;\n\t\n\t        if (_this6.options.groupSeparator === _this6.options.decimalSeparator) {\n\t          var e = 'Error! options.groupSeparator, \"' + _this6.options.groupSeparator + '\" ' + 'and options.decimalSeparator, ' + ('\"' + _this6.options.decimalSeparator + '\" should not be equal');\n\t          throw new Error(e);\n\t        }\n\t      };\n\t\n\t      this.input_ = this.element.querySelector('input') || this.element;\n\t\n\t      addOptions();\n\t      addLocale();\n\t      addGrouping();\n\t      this.formatValue();\n\t      addListeners();\n\t    }\n\t  }, {\n\t    key: 'downgrade',\n\t    value: function downgrade() {\n\t      this.removeListeners();\n\t    }\n\t  }, {\n\t    key: 'element',\n\t    get: function get() {\n\t      return this.element_;\n\t    }\n\t  }, {\n\t    key: 'input',\n\t    get: function get() {\n\t      return this.input_;\n\t    }\n\t  }, {\n\t    key: 'options',\n\t    get: function get() {\n\t      return this.options_;\n\t    }\n\t  }]);\n\t  return FormatField;\n\t}(), _class.timer = null, _temp);\n\t\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that will be upgraded.\n\t   */\n\t\n\t  var MaterialExtFormatfield = function MaterialExtFormatfield(element) {\n\t    this.element_ = element;\n\t    this.formatField_ = null;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtFormatfield'] = MaterialExtFormatfield;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtFormatfield.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t      this.formatField_ = new FormatField(this.element_);\n\t\n\t      // Listen to 'mdl-componentdowngraded' event\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Get options object\n\t   *\n\t   * @public\n\t   *\n\t   * @returns {Object} the options object\n\t   */\n\t  MaterialExtFormatfield.prototype.getOptions = function () {\n\t    return this.formatField_.options;\n\t  };\n\t  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;\n\t\n\t  /**\n\t   * A unformatted value is a string value where the locale specific decimal separator\n\t   * is replaced with a '.' separator and group separators are stripped.\n\t   * The returned value is suitable for parsing to a JavaScript numerical value.\n\t   *\n\t   * @example\n\t   * input.value = '1 234,5';\n\t   * inputElement.MaterialExtFormatfield.getUnformattedValue();\n\t   * // Returns '1234.5'\n\t   *\n\t   * @public\n\t   *\n\t   * @returns {String} the unformatted value\n\t   */\n\t  MaterialExtFormatfield.prototype.getUnformattedValue = function () {\n\t    return this.formatField_.unformat();\n\t  };\n\t  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtFormatfield.prototype.mdlDowngrade_ = function () {\n\t    this.formatField_.downgrade();\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtFormatfield,\n\t    classAsString: FORMAT_FIELD_COMPONENT,\n\t    cssClass: JS_FORMAT_FIELD,\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t__webpack_require__(59);\n\t\n\t__webpack_require__(49);\n\t\n\t__webpack_require__(51);\n\t\n\t__webpack_require__(50);\n\t\n\t__webpack_require__(54);\n\t\n\t__webpack_require__(55);\n\t\n\t__webpack_require__(56);\n\t\n\t__webpack_require__(57);\n\t\n\t__webpack_require__(52);\n\t\n\t__webpack_require__(58);\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container'; /**\n\t                                                                          * @license\n\t                                                                          * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t                                                                          *\n\t                                                                          * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t                                                                          * you may not use this file except in compliance with the License.\n\t                                                                          * You may obtain a copy of the License at\n\t                                                                          *\n\t                                                                          *      http://www.apache.org/licenses/LICENSE-2.0\n\t                                                                          *\n\t                                                                          * Unless required by applicable law or agreed to in writing, software\n\t                                                                          * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t                                                                          * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t                                                                          * See the License for the specific language governing permissions and\n\t                                                                          * limitations under the License.\n\t                                                                          *\n\t                                                                          * This code is built with Google Material Design Lite,\n\t                                                                          * which is Licensed under the Apache License, Version 2.0\n\t                                                                          */\n\t\n\t/**\n\t * A lightboard is a translucent surface illuminated from behind, used for situations\n\t * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n\t * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n\t * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n\t */\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  //const LIGHTBOARD = 'mdlext-lightboard';\n\t\n\t  var LIGHTBOARD_ROLE = 'grid';\n\t  var SLIDE = 'mdlext-lightboard__slide';\n\t  var SLIDE_ROLE = 'gridcell';\n\t  var SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtLightboard = function MaterialExtLightboard(element) {\n\t    // Stores the element.\n\t    this.element_ = element;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtLightboard'] = MaterialExtLightboard;\n\t\n\t  // Helpers\n\t  var getSlide = function getSlide(element) {\n\t    return element ? element.closest('.' + SLIDE) : null;\n\t  };\n\t\n\t  // Private methods.\n\t\n\t  /**\n\t   * Select a slide, i.e. set aria-selected=\"true\"\n\t   * @param element\n\t   * @private\n\t   */\n\t  MaterialExtLightboard.prototype.selectSlide_ = function (element) {\n\t    var slide = getSlide(element);\n\t    if (slide && !slide.hasAttribute('aria-selected')) {\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected=\"true\"]'))).forEach(function (selectedSlide) {\n\t        return selectedSlide.removeAttribute('aria-selected');\n\t      });\n\t\n\t      slide.setAttribute('aria-selected', 'true');\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Dispatch select event\n\t   * @param {Element} slide The slide that caused the event\n\t   * @private\n\t   */\n\t  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function (slide) {\n\t    this.element_.dispatchEvent(new CustomEvent('select', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: { source: slide }\n\t    }));\n\t  };\n\t\n\t  /**\n\t   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade\n\t   * @param event. A custom event\n\t   * @private\n\t   */\n\t  MaterialExtLightboard.prototype.commandHandler_ = function (event) {\n\t    event.preventDefault();\n\t    event.stopPropagation();\n\t\n\t    if (event && event.detail) {\n\t      this.command(event.detail);\n\t    }\n\t  };\n\t\n\t  // Public methods\n\t\n\t  /**\n\t   * Initialize lightboard slides\n\t   * @public\n\t   */\n\t  MaterialExtLightboard.prototype.upgradeSlides = function () {\n\t\n\t    var addRipple = function addRipple(slide) {\n\t      // Use slide frame as ripple container\n\t      if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {\n\t        var a = slide.querySelector('.' + SLIDE_TABSTOP);\n\t        if (a) {\n\t          var rippleContainer = a;\n\t          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n\t          rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);\n\t          var ripple = document.createElement('span');\n\t          ripple.classList.add(_constants.MDL_RIPPLE);\n\t          rippleContainer.appendChild(ripple);\n\t          componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);\n\t        }\n\t      }\n\t    };\n\t\n\t    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);\n\t\n\t    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {\n\t\n\t      slide.setAttribute('role', SLIDE_ROLE);\n\t\n\t      if (!slide.querySelector('a')) {\n\t        slide.setAttribute('tabindex', '0');\n\t      }\n\t      if (hasRippleEffect) {\n\t        addRipple(slide);\n\t      }\n\t    });\n\t  };\n\t  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;\n\t\n\t  /**\n\t   * Execute command\n\t   * @param detail\n\t   * @public\n\t   */\n\t  MaterialExtLightboard.prototype.command = function (detail) {\n\t    var _this = this;\n\t\n\t    var firstSlide = function firstSlide() {\n\t      return _this.element_.querySelector('.' + SLIDE + ':first-child');\n\t    };\n\t\n\t    var lastSlide = function lastSlide() {\n\t      return _this.element_.querySelector('.' + SLIDE + ':last-child');\n\t    };\n\t\n\t    var nextSlide = function nextSlide() {\n\t      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected=\"true\"]').nextElementSibling;\n\t      return slide ? slide : firstSlide();\n\t    };\n\t\n\t    var prevSlide = function prevSlide() {\n\t      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected=\"true\"]').previousElementSibling;\n\t      return slide ? slide : lastSlide();\n\t    };\n\t\n\t    if (detail && detail.action) {\n\t      var action = detail.action,\n\t          target = detail.target;\n\t\n\t\n\t      var slide = void 0;\n\t      switch (action.toLowerCase()) {\n\t        case 'select':\n\t          slide = getSlide(target);\n\t          this.dispatchSelectEvent_(slide);\n\t          break;\n\t        case 'first':\n\t          slide = firstSlide();\n\t          break;\n\t        case 'next':\n\t          slide = nextSlide();\n\t          break;\n\t        case 'prev':\n\t          slide = prevSlide();\n\t          break;\n\t        case 'last':\n\t          slide = lastSlide();\n\t          break;\n\t        case 'upgrade':\n\t          this.upgradeSlides();\n\t          break;\n\t        default:\n\t          throw new Error('Unknown action \"' + action + '\". Action must be one of \"first\", \"next\", \"prev\", \"last\", \"select\" or \"upgrade\"');\n\t      }\n\t\n\t      if (slide) {\n\t        var a = slide.querySelector('a');\n\t        if (a) {\n\t          a.focus();\n\t        } else {\n\t          slide.focus();\n\t        }\n\t\n\t        // Workaround for JSDom testing:\n\t        // In JsDom 'element.focus()' does not trigger any focus event\n\t        if (!slide.hasAttribute('aria-selected')) {\n\t          this.selectSlide_(slide);\n\t        }\n\t      }\n\t    }\n\t  };\n\t  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtLightboard.prototype.init = function () {\n\t    var _this2 = this;\n\t\n\t    var keydownHandler = function keydownHandler(event) {\n\t\n\t      if (event.target !== _this2.element_) {\n\t        var action = void 0;\n\t        var target = void 0;\n\t        switch (event.keyCode) {\n\t          case _constants.VK_HOME:\n\t            action = 'first';\n\t            break;\n\t          case _constants.VK_END:\n\t            action = 'last';\n\t            break;\n\t          case _constants.VK_ARROW_UP:\n\t          case _constants.VK_ARROW_LEFT:\n\t            action = 'prev';\n\t            break;\n\t          case _constants.VK_ARROW_DOWN:\n\t          case _constants.VK_ARROW_RIGHT:\n\t            action = 'next';\n\t            break;\n\t          case _constants.VK_ENTER:\n\t          case _constants.VK_SPACE:\n\t            action = 'select';\n\t            target = event.target;\n\t            break;\n\t        }\n\t        if (action) {\n\t          event.preventDefault();\n\t          event.stopPropagation();\n\t          _this2.command({ action: action, target: target });\n\t        }\n\t      }\n\t    };\n\t\n\t    var clickHandler = function clickHandler(event) {\n\t      event.preventDefault();\n\t      event.stopPropagation();\n\t\n\t      if (event.target !== _this2.element_) {\n\t        _this2.command({ action: 'select', target: event.target });\n\t      }\n\t    };\n\t\n\t    var focusHandler = function focusHandler(event) {\n\t      event.preventDefault();\n\t      event.stopPropagation();\n\t\n\t      if (event.target !== _this2.element_) {\n\t        _this2.selectSlide_(event.target);\n\t      }\n\t    };\n\t\n\t    if (this.element_) {\n\t      this.element_.setAttribute('role', LIGHTBOARD_ROLE);\n\t\n\t      if (this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT)) {\n\t        this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n\t      }\n\t\n\t      // Remove listeners, just in case ...\n\t      this.element_.removeEventListener('command', this.commandHandler_);\n\t      this.element_.removeEventListener('keydown', keydownHandler);\n\t      this.element_.removeEventListener('click', clickHandler);\n\t      this.element_.removeEventListener('focus', focusHandler);\n\t\n\t      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\t      this.element_.addEventListener('keydown', keydownHandler, true);\n\t      this.element_.addEventListener('click', clickHandler, true);\n\t      this.element_.addEventListener('focus', focusHandler, true);\n\t\n\t      this.upgradeSlides();\n\t\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  /* jshint undef:false */\n\t  componentHandler.register({\n\t    constructor: MaterialExtLightboard,\n\t    classAsString: 'MaterialExtLightboard',\n\t    cssClass: 'mdlext-js-lightboard',\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _isInteger = __webpack_require__(32);\n\t\n\tvar _isInteger2 = _interopRequireDefault(_isInteger);\n\t\n\tvar _slicedToArray2 = __webpack_require__(67);\n\t\n\tvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\t\n\tvar _entries = __webpack_require__(64);\n\t\n\tvar _entries2 = _interopRequireDefault(_entries);\n\t\n\tvar _getIterator2 = __webpack_require__(31);\n\t\n\tvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\t\n\tvar _fullThrottle = __webpack_require__(13);\n\t\n\tvar _fullThrottle2 = _interopRequireDefault(_fullThrottle);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/**\n\t * Responsive Lightbox\n\t */\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var LIGHTBOX = 'mdlext-lightbox';\n\t  var LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';\n\t  var LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';\n\t  var STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';\n\t  var BUTTON = 'mdl-button';\n\t\n\t  /**\n\t   * https://github.com/google/material-design-lite/issues/4205\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtLightbox = function MaterialExtLightbox(element) {\n\t    // Stores the element.\n\t    this.element_ = element;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtLightbox'] = MaterialExtLightbox;\n\t\n\t  /**\n\t   * Handle keypress\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtLightbox.prototype.keyDownHandler_ = function (event) {\n\t\n\t    if (event) {\n\t      if (event.keyCode === _constants.VK_ESC || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {\n\t\n\t        if (event.keyCode !== _constants.VK_ESC) {\n\t          event.preventDefault();\n\t          event.stopPropagation();\n\t        }\n\t\n\t        var action = 'first';\n\t        if (event.keyCode === _constants.VK_END) {\n\t          action = 'last';\n\t        } else if (event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT) {\n\t          action = 'prev';\n\t        } else if (event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {\n\t          action = 'next';\n\t        } else if (event.keyCode === _constants.VK_SPACE) {\n\t          action = 'select';\n\t        } else if (event.keyCode === _constants.VK_ESC) {\n\t          action = 'cancel';\n\t        }\n\t\n\t        dispatchAction_(action, this);\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle button clicks\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtLightbox.prototype.buttonClickHandler_ = function (event) {\n\t\n\t    if (event) {\n\t      event.preventDefault();\n\t      event.stopPropagation();\n\t\n\t      dispatchAction_(this.getAttribute('data-action') || '', this);\n\t\n\t      var n = this.closest('.' + LIGHTBOX);\n\t      if (n) {\n\t        n.focus();\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Dispatches an action custom event\n\t   * @param action\n\t   * @param source\n\t   * @param target\n\t   * @private\n\t   */\n\t  var dispatchAction_ = function dispatchAction_(action, source) {\n\t    var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source;\n\t\n\t\n\t    target.dispatchEvent(new CustomEvent('action', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: {\n\t        action: action || '',\n\t        source: source\n\t      }\n\t    }));\n\t  };\n\t\n\t  /**\n\t   * Reposition dialog if component parent element is \"DIALOG\"\n\t   * @param lightboxElement\n\t   * @private\n\t   */\n\t  var repositionDialog_ = function repositionDialog_(lightboxElement) {\n\t    var footerHeight = function footerHeight(footer, isSticky) {\n\t      return isSticky && footer ? footer.offsetHeight : 0;\n\t    };\n\t\n\t    var reposition = function reposition(dialog, fh) {\n\t      if (window.getComputedStyle(dialog).position === 'absolute') {\n\t        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n\t        var topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;\n\t        dialog.style.top = Math.max(scrollTop, topValue) + 'px';\n\t      }\n\t    };\n\t\n\t    var p = lightboxElement.parentNode;\n\t    var dialog = p && p.nodeName === 'DIALOG' ? p : null;\n\t\n\t    if (dialog && dialog.hasAttribute('open')) {\n\t      lightboxElement.style.width = 'auto';\n\t      lightboxElement.style.maxWidth = '100%';\n\t      var img = lightboxElement.querySelector('img');\n\t      if (img) {\n\t        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? img.naturalWidth + 'px' : img.width + 'px' || '100%';\n\t      }\n\t\n\t      var fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));\n\t      var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;\n\t      if (dialog.offsetHeight > vh) {\n\t        var n = 0;\n\t        while (dialog.offsetHeight > vh && ++n < 4) {\n\t          lightboxElement.style.width = lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight + 'px';\n\t        }\n\t      }\n\t      reposition(dialog, fh);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle image load\n\t   * @param event\n\t   * @private\n\t   */\n\t\n\t  MaterialExtLightbox.prototype.imgLoadHandler_ = function () /*event*/{\n\t    repositionDialog_(this);\n\t  };\n\t\n\t  /**\n\t   * Handle image drag\n\t   * @param event\n\t   * @private\n\t     */\n\t  MaterialExtLightbox.prototype.imgDragHandler_ = function (event) {\n\t\n\t    var setStyles = function setStyles(element, properties) {\n\t      //noinspection JSAnnotator\n\t      var _iteratorNormalCompletion = true;\n\t      var _didIteratorError = false;\n\t      var _iteratorError = undefined;\n\t\n\t      try {\n\t        for (var _iterator = (0, _getIterator3.default)((0, _entries2.default)(properties)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t          var _step$value = (0, _slicedToArray3.default)(_step.value, 2),\n\t              key = _step$value[0],\n\t              value = _step$value[1];\n\t\n\t          element.style[key] = value;\n\t        }\n\t        // ... or:\n\t        //for (const key in properties) {\n\t        //  element.style[key] = properties[key];\n\t        //}\n\t      } catch (err) {\n\t        _didIteratorError = true;\n\t        _iteratorError = err;\n\t      } finally {\n\t        try {\n\t          if (!_iteratorNormalCompletion && _iterator.return) {\n\t            _iterator.return();\n\t          }\n\t        } finally {\n\t          if (_didIteratorError) {\n\t            throw _iteratorError;\n\t          }\n\t        }\n\t      }\n\t    };\n\t\n\t    event.preventDefault();\n\t    //event.stopPropagation();\n\t\n\t    var x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n\t\n\t    var img = this;\n\t    img.style.opacity = '0.2';\n\t\n\t    var slider = document.createElement('div');\n\t    slider.classList.add(LIGHTBOX_SLIDER);\n\t    setStyles(slider, { 'width': img.offsetWidth + 'px', 'height': img.offsetHeight + 'px' });\n\t\n\t    var slide = document.createElement('div');\n\t    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n\t    slide.textContent = '>';\n\t    setStyles(slide, {\n\t      'width': img.offsetWidth + 'px',\n\t      'height': img.offsetHeight + 'px',\n\t      'line-height': img.offsetHeight + 'px',\n\t      'font-size': img.offsetHeight / 4 + 'px',\n\t      'text-align': 'right',\n\t      'background-image': 'url(\"' + (img.getAttribute('data-img-url-prev') || '') + '\")'\n\t    });\n\t    slider.appendChild(slide);\n\t\n\t    slide = document.createElement('div');\n\t    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n\t    setStyles(slide, {\n\t      'width': img.offsetWidth + 'px',\n\t      'height': img.offsetHeight + 'px',\n\t      'background-image': 'url(\"' + img.src + '\")'\n\t    });\n\t    slider.appendChild(slide);\n\t\n\t    slide = document.createElement('div');\n\t    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n\t    slide.textContent = '<';\n\t    setStyles(slide, {\n\t      'width': img.offsetWidth + 'px',\n\t      'height': img.offsetHeight + 'px',\n\t      'line-height': img.offsetHeight + 'px',\n\t      'font-size': img.offsetHeight / 4 + 'px',\n\t      'text-align': 'left',\n\t      'background-image': 'url(\"' + (img.getAttribute('data-img-url-next') || '') + '\")'\n\t    });\n\t    slider.appendChild(slide);\n\t\n\t    img.parentNode.appendChild(slider);\n\t\n\t    // drag handler\n\t    var drag = function drag(e) {\n\t      e.preventDefault();\n\t      var dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance\n\t\n\t      if (slider.offsetWidth - Math.abs(dx) > 19) {\n\t        slider.style.left = dx + 'px';\n\t      }\n\t    };\n\t\n\t    // end drag handler\n\t    var endDrag = function endDrag(e) {\n\t      e.preventDefault();\n\t      //e.stopPropagation();\n\t\n\t      window.removeEventListener('mousemove', drag);\n\t      window.removeEventListener('touchmove', drag);\n\t      window.removeEventListener('mouseup', endDrag);\n\t      window.removeEventListener('touchend', endDrag);\n\t\n\t      var dx = slider.offsetLeft;\n\t      img.parentNode.removeChild(slider);\n\t      img.style.opacity = '1.0';\n\t\n\t      if (Math.abs(dx) > 19) {\n\t        dispatchAction_(dx > 0 ? 'prev' : 'next', img);\n\t      }\n\t    };\n\t\n\t    window.addEventListener('mousemove', drag);\n\t    window.addEventListener('touchmove', drag);\n\t    window.addEventListener('mouseup', endDrag);\n\t    window.addEventListener('touchend', endDrag);\n\t  };\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtLightbox.prototype.init = function () {\n\t    var _this = this;\n\t\n\t    if (this.element_) {\n\t      // Do the init required for this component to work\n\t      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);\n\t\n\t      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {\n\t        this.element_.setAttribute('tabindex', 1);\n\t      }\n\t\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + BUTTON))).forEach(function (button) {\n\t        return button.addEventListener('click', _this.buttonClickHandler_.bind(button), false);\n\t      });\n\t\n\t      var figcaption = this.element_.querySelector('figcaption');\n\t      if (figcaption) {\n\t        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);\n\t      }\n\t\n\t      var footer = this.element_.querySelector('footer');\n\t      if (footer) {\n\t        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);\n\t      }\n\t\n\t      var img = this.element_.querySelector('img');\n\t      if (img) {\n\t        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);\n\t        img.addEventListener('click', function (e) {\n\t          return e.preventDefault();\n\t        }, true);\n\t        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);\n\t        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);\n\t      }\n\t      window.addEventListener('resize', (0, _fullThrottle2.default)(function () {\n\t        return repositionDialog_(_this.element_);\n\t      }));\n\t      window.addEventListener('orientationchange', function () {\n\t        return repositionDialog_(_this.element_);\n\t      });\n\t\n\t      // Set upgraded flag\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to downgrade\n\t   *\n\t  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {\n\t  };\n\t  */\n\t\n\t  /**\n\t   * The component registers itself. It can assume componentHandler is available in the global scope.\n\t   */\n\t  /* jshint undef:false */\n\t  componentHandler.register({\n\t    constructor: MaterialExtLightbox,\n\t    classAsString: 'MaterialExtLightbox',\n\t    cssClass: 'mdlext-js-lightbox'\n\t  });\n\t})();\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _classCallCheck2 = __webpack_require__(22);\n\t\n\tvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\t\n\tvar _createClass2 = __webpack_require__(23);\n\t\n\tvar _createClass3 = _interopRequireDefault(_createClass2);\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _stringUtils = __webpack_require__(15);\n\t\n\tvar _fullThrottle = __webpack_require__(13);\n\t\n\tvar _fullThrottle2 = _interopRequireDefault(_fullThrottle);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _domUtils = __webpack_require__(21);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/**\n\t * A menu button is a button that opens a menu. It is often styled as a\n\t * typical push button with a downward pointing arrow or triangle to hint\n\t * that activating the button will display a menu.\n\t */\n\tvar JS_MENU_BUTTON = 'mdlext-js-menu-button';\n\tvar MENU_BUTTON_MENU = 'mdlext-menu';\n\tvar MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';\n\tvar MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';\n\t//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';\n\t\n\t/**\n\t * Creates the menu controlled by the menu button\n\t * @param element\n\t * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}\n\t */\n\t\n\tvar menuFactory = function menuFactory(element) {\n\t\n\t  var ariaControls = null;\n\t  var parentNode = null;\n\t\n\t  var removeAllSelected = function removeAllSelected() {\n\t    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected=\"true\"]'))).forEach(function (selectedItem) {\n\t      return selectedItem.removeAttribute('aria-selected');\n\t    });\n\t  };\n\t\n\t  var setSelected = function setSelected(item) {\n\t    var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\t\n\t    if (force || item && !item.hasAttribute('aria-selected')) {\n\t      removeAllSelected();\n\t      if (item) {\n\t        item.setAttribute('aria-selected', 'true');\n\t      }\n\t    }\n\t  };\n\t\n\t  var getSelected = function getSelected() {\n\t    return element.querySelector('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected=\"true\"]');\n\t  };\n\t\n\t  var isDisabled = function isDisabled(item) {\n\t    return item && item.hasAttribute('disabled');\n\t  };\n\t\n\t  var isSeparator = function isSeparator(item) {\n\t    return item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);\n\t  };\n\t\n\t  var focus = function focus(item) {\n\t    if (item) {\n\t      item = item.closest('.' + MENU_BUTTON_MENU_ITEM);\n\t    }\n\t    if (item) {\n\t      item.focus();\n\t    }\n\t  };\n\t\n\t  var nextItem = function nextItem(current) {\n\t    var n = current.nextElementSibling;\n\t    if (!n) {\n\t      n = element.firstElementChild;\n\t    }\n\t    if (!isDisabled(n) && !isSeparator(n)) {\n\t      focus(n);\n\t    } else {\n\t      var i = element.children.length;\n\t      while (n && i-- > 0) {\n\t        if (isDisabled(n) || isSeparator(n)) {\n\t          n = n.nextElementSibling;\n\t          if (!n) {\n\t            n = element.firstElementChild;\n\t          }\n\t        } else {\n\t          focus(n);\n\t          break;\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  var previousItem = function previousItem(current) {\n\t    var p = current.previousElementSibling;\n\t    if (!p) {\n\t      p = element.lastElementChild;\n\t    }\n\t    if (!isDisabled(p) && !isSeparator(p)) {\n\t      focus(p);\n\t    } else {\n\t      var i = element.children.length;\n\t      while (p && i-- > 0) {\n\t        if (isDisabled(p) || isSeparator(p)) {\n\t          p = p.previousElementSibling;\n\t          if (!p) {\n\t            p = element.lastElementChild;\n\t          }\n\t        } else {\n\t          focus(p);\n\t          break;\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  var firstItem = function firstItem() {\n\t    var item = element.firstElementChild;\n\t    if (isDisabled(item) || isSeparator(item)) {\n\t      nextItem(item);\n\t    } else {\n\t      focus(item);\n\t    }\n\t  };\n\t\n\t  var lastItem = function lastItem() {\n\t    var item = element.lastElementChild;\n\t    if (isDisabled(item) || isSeparator(item)) {\n\t      previousItem(item);\n\t    } else {\n\t      focus(item);\n\t    }\n\t  };\n\t\n\t  var selectItem = function selectItem(item) {\n\t    if (item && !isDisabled(item) && !isSeparator(item)) {\n\t      setSelected(item);\n\t      close(true, item);\n\t    }\n\t  };\n\t\n\t  var keyDownHandler = function keyDownHandler(event) {\n\t\n\t    var item = event.target.closest('.' + MENU_BUTTON_MENU_ITEM);\n\t\n\t    switch (event.keyCode) {\n\t      case _constants.VK_ARROW_UP:\n\t      case _constants.VK_ARROW_LEFT:\n\t        if (item) {\n\t          previousItem(item);\n\t        } else {\n\t          firstItem();\n\t        }\n\t        break;\n\t\n\t      case _constants.VK_ARROW_DOWN:\n\t      case _constants.VK_ARROW_RIGHT:\n\t        if (item) {\n\t          nextItem(item);\n\t        } else {\n\t          lastItem();\n\t        }\n\t        break;\n\t\n\t      case _constants.VK_HOME:\n\t        firstItem();\n\t        break;\n\t\n\t      case _constants.VK_END:\n\t        lastItem();\n\t        break;\n\t\n\t      case _constants.VK_SPACE:\n\t      case _constants.VK_ENTER:\n\t        selectItem(item);\n\t        break;\n\t\n\t      case _constants.VK_ESC:\n\t        close(true);\n\t        break;\n\t\n\t      case _constants.VK_TAB:\n\t        // We do not have a \"natural\" tab order from menu, so the best we can do is to set focus back to the button\n\t        close(true);\n\t        break;\n\t\n\t      default:\n\t        return;\n\t    }\n\t    event.preventDefault();\n\t  };\n\t\n\t  var blurHandler = function blurHandler(event) {\n\t\n\t    // See: https://github.com/facebook/react/issues/2011\n\t    var t = event.relatedTarget || event.explicitOriginalTarget || // FF\n\t    document.activeElement; // IE11\n\t\n\t    //console.log('***** blur, target, relatedTarget', event.target, t);\n\t\n\t    try {\n\t      if (t) {\n\t        if (t.closest('.' + MENU_BUTTON_MENU) !== element && shouldClose(t)) {\n\t          close();\n\t        }\n\t      } else {\n\t        close();\n\t      }\n\t    } catch (err) {\n\t      // FF throws error: \"TypeError: n.closest is not a function\" if related target is a text node\n\t      close();\n\t    }\n\t  };\n\t\n\t  var clickHandler = function clickHandler(event) {\n\t    //console.log('***** click, target', event.target);\n\t\n\t    event.preventDefault();\n\t    var t = event.target;\n\t    if (t && t.closest('.' + MENU_BUTTON_MENU) === element) {\n\t      var item = t.closest('.' + MENU_BUTTON_MENU_ITEM);\n\t      if (item) {\n\t        selectItem(item);\n\t      }\n\t    } else {\n\t      if (shouldClose(t)) {\n\t        close();\n\t      }\n\t    }\n\t  };\n\t\n\t  var touchStartHandler = function touchStartHandler(event) {\n\t    //console.log('***** touchStart, target', event.target);\n\t\n\t    var t = event.target;\n\t    if (!(t && t.closest('.' + MENU_BUTTON_MENU) === element)) {\n\t      if (event.type === 'touchstart') {\n\t        event.preventDefault();\n\t      }\n\t      close();\n\t    }\n\t  };\n\t\n\t  var addListeners = function addListeners() {\n\t    element.addEventListener('keydown', keyDownHandler, false);\n\t    element.addEventListener('blur', blurHandler, true);\n\t    element.addEventListener('click', clickHandler, true);\n\t    document.documentElement.addEventListener('touchstart', touchStartHandler, true);\n\t  };\n\t\n\t  var _removeListeners = function _removeListeners() {\n\t    element.removeEventListener('keydown', keyDownHandler, false);\n\t    element.removeEventListener('blur', blurHandler, true);\n\t    element.removeEventListener('click', clickHandler, true);\n\t    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);\n\t  };\n\t\n\t  var _open = function _open(controlElement) {\n\t    var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';\n\t\n\t\n\t    ariaControls = controlElement.closest('.' + JS_MENU_BUTTON);\n\t\n\t    element.style['min-width'] = Math.max(124, controlElement.getBoundingClientRect().width) + 'px';\n\t    element.removeAttribute('hidden');\n\t    (0, _domUtils.tether)(controlElement, element);\n\t\n\t    var item = void 0;\n\t    switch (position.toLowerCase()) {\n\t      case 'first':\n\t        firstItem();\n\t        break;\n\t\n\t      case 'last':\n\t        lastItem();\n\t        break;\n\t\n\t      case 'selected':\n\t        item = getSelected();\n\t        if (item && !item.hasAttribute('disabled')) {\n\t          focus(item);\n\t        } else {\n\t          firstItem();\n\t        }\n\t        break;\n\t    }\n\t\n\t    addListeners();\n\t  };\n\t\n\t  var shouldClose = function shouldClose(target) {\n\t    //console.log('***** shouldClose');\n\t\n\t    var result = false;\n\t    var btn = target && target.closest('.' + JS_MENU_BUTTON) || null;\n\t    if (!btn) {\n\t      result = true;\n\t    } else if (btn.getAttribute('aria-controls') === element.id) {\n\t      if (btn !== ariaControls) {\n\t        result = true;\n\t      }\n\t    } else {\n\t      result = true;\n\t    }\n\t    return result;\n\t  };\n\t\n\t  var close = function close() {\n\t    var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\t    var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\n\t    _removeListeners();\n\t\n\t    element.dispatchEvent(new CustomEvent('_closemenu', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: { forceFocus: forceFocus, item: item }\n\t    }));\n\t  };\n\t\n\t  var addWaiAria = function addWaiAria() {\n\t    if (!element.hasAttribute('id')) {\n\t      // Generate a random id\n\t      element.id = 'menu-button-' + (0, _stringUtils.randomString)();\n\t    }\n\t    element.setAttribute('tabindex', '-1');\n\t    element.setAttribute('role', 'menu');\n\t    element.setAttribute('hidden', '');\n\t\n\t    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM))).forEach(function (menuitem) {\n\t      menuitem.setAttribute('tabindex', '-1');\n\t      menuitem.setAttribute('role', 'menuitem');\n\t    });\n\t\n\t    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM_SEPARATOR))).forEach(function (menuitem) {\n\t      menuitem.setAttribute('role', 'separator');\n\t    });\n\t  };\n\t\n\t  var init = function init() {\n\t    addWaiAria();\n\t    parentNode = element.parentNode;\n\t    element.classList.add('is-upgraded');\n\t  };\n\t\n\t  var _downgrade = function _downgrade() {\n\t    _removeListeners();\n\t    if (element.parentNode !== parentNode) {\n\t      parentNode.appendChild(element);\n\t    }\n\t    element.classList.remove('is-upgraded');\n\t  };\n\t\n\t  init();\n\t\n\t  return {\n\t    /**\n\t     * Get the menu element\n\t     * @returns {Element} the menu element\n\t     */\n\t    get element() {\n\t      return element;\n\t    },\n\t\n\t    /**\n\t     * Set selected menu item\n\t     * @param item\n\t     */\n\t    set selected(item) {\n\t      setSelected(item, true);\n\t    },\n\t\n\t    /**\n\t     * Open menu\n\t     * @param {Element} controlElement the element where the menu should be aligned to\n\t     * @param {String} position menuElement item to receive focus after menu element is opened\n\t     */\n\t    open: function open(controlElement) {\n\t      var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';\n\t      return _open(controlElement, position);\n\t    },\n\t\n\t    /**\n\t     * Remove event listeners.\n\t     */\n\t    removeListeners: function removeListeners() {\n\t      return _removeListeners();\n\t    },\n\t\n\t    /**\n\t     * Downgrade menu\n\t     */\n\t    downgrade: function downgrade() {\n\t      return _downgrade();\n\t    }\n\t  };\n\t};\n\t\n\t/**\n\t * The menubutton component\n\t */\n\t\n\tvar MenuButton = function () {\n\t  function MenuButton(element) {\n\t    var _this = this;\n\t\n\t    (0, _classCallCheck3.default)(this, MenuButton);\n\t\n\t    this.keyDownHandler = function (event) {\n\t      if (!_this.isDisabled()) {\n\t        switch (event.keyCode) {\n\t          case _constants.VK_ARROW_UP:\n\t            _this.openMenu('last');\n\t            break;\n\t\n\t          case _constants.VK_ARROW_DOWN:\n\t            _this.openMenu();\n\t            break;\n\t\n\t          case _constants.VK_SPACE:\n\t          case _constants.VK_ENTER:\n\t            _this.openMenu('selected');\n\t            break;\n\t\n\t          case _constants.VK_ESC:\n\t            _this.closeMenu();\n\t            break;\n\t\n\t          case _constants.VK_TAB:\n\t            _this.closeMenu();\n\t            return;\n\t\n\t          default:\n\t            return;\n\t        }\n\t      }\n\t      //event.stopPropagation();\n\t      event.preventDefault();\n\t    };\n\t\n\t    this.clickHandler = function () {\n\t      if (!_this.isDisabled()) {\n\t        if (_this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {\n\t          _this.closeMenu(true);\n\t        } else {\n\t          _this.openMenu('selected');\n\t        }\n\t      }\n\t    };\n\t\n\t    this.recalcMenuPosition = (0, _fullThrottle2.default)(function () {\n\t      var c = _this.focusElement.getBoundingClientRect();\n\t      var dx = _this.focusElementLastScrollPosition.left - c.left;\n\t      var dy = _this.focusElementLastScrollPosition.top - c.top;\n\t      var left = (parseFloat(_this.menu.element.style.left) || 0) - dx;\n\t      var top = (parseFloat(_this.menu.element.style.top) || 0) - dy;\n\t\n\t      _this.menu.element.style.left = left + 'px';\n\t      _this.menu.element.style.top = top + 'px';\n\t      _this.focusElementLastScrollPosition = c;\n\t    });\n\t\n\t    this.positionChangeHandler = function () {\n\t      _this.recalcMenuPosition(_this);\n\t    };\n\t\n\t    this.closeMenuHandler = function (event) {\n\t      if (event && event.detail) {\n\t        if (event.detail.item && event.detail.item !== _this.selectedItem) {\n\t          _this.selectedItem = event.detail.item;\n\t          _this.dispatchMenuSelect();\n\t        }\n\t        _this.closeMenu(event.detail.forceFocus);\n\t      }\n\t    };\n\t\n\t    this.element = element;\n\t    this.focusElement = undefined;\n\t    this.focusElementLastScrollPosition = undefined;\n\t    this.scrollElements = [];\n\t    this.menu = undefined;\n\t    this.selectedItem = null;\n\t    this.init();\n\t  }\n\t\n\t  /**\n\t   * Re-position menu if content is scrolled, window is resized or orientation change\n\t   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/\n\t   */\n\t\n\t\n\t  (0, _createClass3.default)(MenuButton, [{\n\t    key: 'dispatchMenuSelect',\n\t    value: function dispatchMenuSelect() {\n\t      this.element.dispatchEvent(new CustomEvent('menuselect', {\n\t        bubbles: true,\n\t        cancelable: true,\n\t        detail: { source: this.selectedItem }\n\t      }));\n\t    }\n\t  }, {\n\t    key: 'isDisabled',\n\t    value: function isDisabled() {\n\t      return this.element.hasAttribute('disabled');\n\t    }\n\t  }, {\n\t    key: 'removeListeners',\n\t    value: function removeListeners() {\n\t      this.element.removeEventListener('keydown', this.keyDownHandler);\n\t      this.element.removeEventListener('click', this.clickHandler);\n\t    }\n\t  }, {\n\t    key: 'openMenu',\n\t    value: function openMenu() {\n\t      var _this2 = this;\n\t\n\t      var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n\t\n\t\n\t      if (!this.isDisabled() && this.menu) {\n\t\n\t        // Close the menu if button position change\n\t        this.scrollElements = (0, _domUtils.getScrollParents)(this.element);\n\t        this.scrollElements.forEach(function (el) {\n\t          return el.addEventListener('scroll', _this2.positionChangeHandler);\n\t        });\n\t\n\t        window.addEventListener('resize', this.positionChangeHandler);\n\t        window.addEventListener('orientationchange', this.positionChangeHandler);\n\t        this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);\n\t\n\t        this.menu.selected = this.selectedItem;\n\t        this.menu.open(this.focusElement, position);\n\t        this.element.setAttribute('aria-expanded', 'true');\n\t\n\t        this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();\n\t      }\n\t    }\n\t  }, {\n\t    key: 'closeMenu',\n\t    value: function closeMenu() {\n\t      var _this3 = this;\n\t\n\t      var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\t\n\t      if (this.menu) {\n\t        this.menu.removeListeners();\n\t        this.scrollElements.forEach(function (el) {\n\t          return el.removeEventListener('scroll', _this3.positionChangeHandler);\n\t        });\n\t        window.removeEventListener('resize', this.positionChangeHandler);\n\t        window.removeEventListener('orientationchange', this.positionChangeHandler);\n\t        this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);\n\t\n\t        if (forceFocus) {\n\t          this.focus();\n\t        }\n\t        this.element.setAttribute('aria-expanded', 'false');\n\t        this.menu.element.setAttribute('hidden', '');\n\t      }\n\t    }\n\t  }, {\n\t    key: 'focus',\n\t    value: function focus() {\n\t      if (!this.isDisabled()) {\n\t        this.focusElement.focus();\n\t      }\n\t    }\n\t  }, {\n\t    key: 'init',\n\t    value: function init() {\n\t      var _this4 = this;\n\t\n\t      var addListeners = function addListeners() {\n\t        _this4.element.addEventListener('keydown', _this4.keyDownHandler);\n\t        _this4.element.addEventListener('click', _this4.clickHandler);\n\t      };\n\t\n\t      var addWaiAria = function addWaiAria() {\n\t        _this4.element.setAttribute('role', 'button');\n\t        _this4.element.setAttribute('aria-expanded', 'false');\n\t        _this4.element.setAttribute('aria-haspopup', 'true');\n\t      };\n\t\n\t      var addFocusElement = function addFocusElement() {\n\t        _this4.focusElement = _this4.element.querySelector('input[type=\"text\"]');\n\t        if (!_this4.focusElement) {\n\t          _this4.focusElement = _this4.element;\n\t\n\t          if (!(_this4.focusElement.tagName.toLowerCase() === 'button' || _this4.focusElement.tagName.toLowerCase() === 'input')) {\n\t            if (!_this4.focusElement.hasAttribute('tabindex')) {\n\t              _this4.focusElement.setAttribute('tabindex', '0');\n\t            }\n\t          }\n\t        }\n\t      };\n\t\n\t      var moveElementToDocumentBody = function moveElementToDocumentBody(element) {\n\t        // To position an element on top of all other z-indexed elements, the element should be moved to document.body\n\t        //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/\n\t\n\t        if (element.parentNode !== document.body) {\n\t          return document.body.appendChild(element);\n\t        }\n\t        return element;\n\t      };\n\t\n\t      var findMenuElement = function findMenuElement() {\n\t        var menuElement = void 0;\n\t        var menuElementId = _this4.element.getAttribute('aria-controls');\n\t        if (menuElementId !== null) {\n\t          menuElement = document.querySelector('#' + menuElementId);\n\t        } else {\n\t          menuElement = _this4.element.parentNode.querySelector('.' + MENU_BUTTON_MENU);\n\t        }\n\t        return menuElement;\n\t      };\n\t\n\t      var addMenu = function addMenu() {\n\t        var menuElement = findMenuElement();\n\t        if (menuElement) {\n\t          if (menuElement.componentInstance) {\n\t            _this4.menu = menuElement.componentInstance;\n\t          } else {\n\t            _this4.menu = menuFactory(menuElement);\n\t            menuElement.componentInstance = _this4.menu;\n\t            moveElementToDocumentBody(menuElement);\n\t          }\n\t          _this4.element.setAttribute('aria-controls', _this4.menu.element.id);\n\t        }\n\t      };\n\t\n\t      addFocusElement();\n\t      addWaiAria();\n\t      addMenu();\n\t      this.removeListeners();\n\t      addListeners();\n\t    }\n\t  }, {\n\t    key: 'downgrade',\n\t    value: function downgrade() {\n\t      var _this5 = this;\n\t\n\t      if (this.menu) {\n\t        // Do not downgrade menu if there are other buttons sharing this menu\n\t        var related = [].concat((0, _toConsumableArray3.default)(document.querySelectorAll('.' + JS_MENU_BUTTON + '[aria-controls=\"' + this.element.getAttribute('aria-controls') + '\"]')));\n\t        if (related.filter(function (c) {\n\t          return c !== _this5.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0;\n\t        }).length === 0) {\n\t          this.menu.downgrade();\n\t        }\n\t      }\n\t      this.removeListeners();\n\t    }\n\t  }]);\n\t  return MenuButton;\n\t}();\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  /**\n\t   * https://github.com/google/material-design-lite/issues/4205\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t\n\t  var MaterialExtMenuButton = function MaterialExtMenuButton(element) {\n\t    this.element_ = element;\n\t    this.menuButton_ = null;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtMenuButton'] = MaterialExtMenuButton;\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Get the menu element controlled by this button, null if no menu is controlled by this button\n\t   * @public\n\t   */\n\t  MaterialExtMenuButton.prototype.getMenuElement = function () {\n\t    return this.menuButton_.menu ? this.menuButton_.menu.element : null;\n\t  };\n\t  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;\n\t\n\t  /**\n\t   * Open menu\n\t   * @public\n\t   * @param {String} position one of \"first\", \"last\" or \"selected\"\n\t   */\n\t  MaterialExtMenuButton.prototype.openMenu = function (position) {\n\t    this.menuButton_.openMenu(position);\n\t  };\n\t  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;\n\t\n\t  /**\n\t   * Close menu\n\t   * @public\n\t   */\n\t  MaterialExtMenuButton.prototype.closeMenu = function () {\n\t    this.menuButton_.closeMenu(true);\n\t  };\n\t  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;\n\t\n\t  /**\n\t   * Get selected menu item\n\t   * @public\n\t   * @returns {Element} The selected menu item or null if no item selected\n\t   */\n\t  MaterialExtMenuButton.prototype.getSelectedMenuItem = function () {\n\t    return this.menuButton_.selectedItem;\n\t  };\n\t  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;\n\t\n\t  /**\n\t   * Set (default) selected menu item\n\t   * @param {Element} item\n\t   */\n\t  MaterialExtMenuButton.prototype.setSelectedMenuItem = function (item) {\n\t    this.menuButton_.selectedItem = item;\n\t  };\n\t  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtMenuButton.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.menuButton_ = new MenuButton(this.element_);\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtMenuButton.prototype.mdlDowngrade_ = function () {\n\t    this.menuButton_.downgrade();\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtMenuButton,\n\t    classAsString: 'MaterialExtMenuButton',\n\t    cssClass: JS_MENU_BUTTON,\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _stringUtils = __webpack_require__(15);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/*\n\t * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield\n\t */\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var LABEL = 'mdlext-selectfield__label';\n\t  var INPUT = 'mdlext-selectfield__select';\n\t\n\t  /**\n\t   * Class constructor for Selectfield MDLEXT component.\n\t   * Implements MDL component design pattern defined at:\n\t   * https://github.com/jasonmayes/mdl-component-design-pattern\n\t   *\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtSelectfield = function MaterialExtSelectfield(element) {\n\t    this.element_ = element;\n\t    this.init(); // Initialize instance.\n\t  };\n\t\n\t  window['MaterialExtSelectfield'] = MaterialExtSelectfield;\n\t\n\t  /**\n\t   * Handle focus.\n\t   *\n\t   * @param {Event} event The event that fired.\n\t   * @private\n\t   */\n\t  /*eslint no-unused-vars: 0*/\n\t  MaterialExtSelectfield.prototype.onFocus_ = function () /*event*/{\n\t    this.element_.classList.add(_constants.IS_FOCUSED);\n\t  };\n\t\n\t  /**\n\t   * Handle lost focus.\n\t   *\n\t   * @param {Event} event The event that fired.\n\t   * @private\n\t   */\n\t  /*eslint no-unused-vars: 0*/\n\t  MaterialExtSelectfield.prototype.onBlur_ = function () /*event*/{\n\t    this.element_.classList.remove(_constants.IS_FOCUSED);\n\t  };\n\t\n\t  /**\n\t   * Handle reset event from out side.\n\t   *\n\t   * @param {Event} event The event that fired.\n\t   * @private\n\t   */\n\t  MaterialExtSelectfield.prototype.onReset_ = function () /*event*/{\n\t    this.updateClasses_();\n\t  };\n\t\n\t  /**\n\t   * Handle class updates.\n\t   *\n\t   * @private\n\t   */\n\t  MaterialExtSelectfield.prototype.updateClasses_ = function () {\n\t    this.checkDisabled();\n\t    this.checkValidity();\n\t    this.checkDirty();\n\t    this.checkFocus();\n\t  };\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Check the disabled state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkDisabled = function () {\n\t    if (this.select_.disabled) {\n\t      this.element_.classList.add(_constants.IS_DISABLED);\n\t    } else {\n\t      this.element_.classList.remove(_constants.IS_DISABLED);\n\t    }\n\t  };\n\t  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;\n\t\n\t  /**\n\t   * Check the focus state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkFocus = function () {\n\t    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus\n\t    /*eslint no-extra-boolean-cast: 0*/\n\t    if (Boolean(this.element_.querySelector(':focus'))) {\n\t      this.element_.classList.add(_constants.IS_FOCUSED);\n\t    } else {\n\t      this.element_.classList.remove(_constants.IS_FOCUSED);\n\t    }\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;\n\t\n\t  /**\n\t   * Check the validity state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkValidity = function () {\n\t\n\t    /* Don't think it makes any sense to check validity.\n\t       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0\n\t     if (this.select_.validity) {\n\t      if (this.select_.validity.valid) {\n\t        this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n\t      } else {\n\t        this.element_.classList.add(this.CssClasses_.IS_INVALID);\n\t      }\n\t    }\n\t    */\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;\n\t\n\t  /**\n\t   * Check the dirty state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkDirty = function () {\n\t    if (this.select_.value && this.select_.value.length > 0) {\n\t      this.element_.classList.add(_constants.IS_DIRTY);\n\t    } else {\n\t      this.element_.classList.remove(_constants.IS_DIRTY);\n\t    }\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;\n\t\n\t  /**\n\t   * Disable select field.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.disable = function () {\n\t    this.select_.disabled = true;\n\t    this.updateClasses_();\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;\n\t\n\t  /**\n\t   * Enable select field.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.enable = function () {\n\t    this.select_.disabled = false;\n\t    this.updateClasses_();\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;\n\t\n\t  /**\n\t   * Update select field value.\n\t   *\n\t   * @param {string} value The value to which to set the control (optional).\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.change = function (value) {\n\t    this.select_.value = value || '';\n\t    this.updateClasses_();\n\t  };\n\t  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;\n\t\n\t  /**\n\t   * Initialize element.\n\t   */\n\t  MaterialExtSelectfield.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.label_ = this.element_.querySelector('.' + LABEL);\n\t      this.select_ = this.element_.querySelector('.' + INPUT);\n\t\n\t      if (this.select_) {\n\t        // Remove listeners, just in case ...\n\t        this.select_.removeEventListener('change', this.updateClasses_);\n\t        this.select_.removeEventListener('focus', this.onFocus_);\n\t        this.select_.removeEventListener('blur', this.onBlur_);\n\t        this.select_.removeEventListener('reset', this.onReset_);\n\t\n\t        this.select_.addEventListener('change', this.updateClasses_.bind(this));\n\t        this.select_.addEventListener('focus', this.onFocus_.bind(this));\n\t        this.select_.addEventListener('blur', this.onBlur_.bind(this));\n\t        this.select_.addEventListener('reset', this.onReset_.bind(this));\n\t\n\t        if (this.label_) {\n\t          var id = void 0;\n\t          if (!this.select_.hasAttribute('id')) {\n\t            id = 'select-' + (0, _stringUtils.randomString)();\n\t            this.select_.id = id;\n\t          } else {\n\t            id = this.select_.id;\n\t          }\n\t\n\t          if (!this.label_.hasAttribute('for')) {\n\t            this.label_.setAttribute('for', id);\n\t          }\n\t        }\n\t\n\t        var invalid = this.element_.classList.contains(_constants.IS_INVALID);\n\t        this.updateClasses_();\n\t        this.element_.classList.add(_constants.IS_UPGRADED);\n\t\n\t        if (invalid) {\n\t          this.element_.classList.add(_constants.IS_INVALID);\n\t        }\n\t        if (this.select_.hasAttribute('autofocus')) {\n\t          this.element_.focus();\n\t          this.checkFocus();\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to downgrade\n\t   *\n\t  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {\n\t    'use strict';\n\t    console.log('***** MaterialExtSelectfield.mdlDowngrade ');\n\t  };\n\t  */\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /*eslint no-undef: 0*/\n\t  componentHandler.register({\n\t    constructor: MaterialExtSelectfield,\n\t    classAsString: 'MaterialExtSelectfield',\n\t    cssClass: 'mdlext-js-selectfield',\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _fullThrottle = __webpack_require__(13);\n\t\n\tvar _fullThrottle2 = _interopRequireDefault(_fullThrottle);\n\t\n\tvar _jsonUtils = __webpack_require__(14);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var MDL_LAYOUT_CONTENT = 'mdl-layout__content';\n\t  var IS_SCROLL_CLASS = 'mdlext-is-scroll';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {\n\t    // Stores the element.\n\t    this.header_ = element;\n\t\n\t    // Heder listens to scroll events from content\n\t    this.content_ = null;\n\t    this.lastScrollTop_ = 0;\n\t\n\t    // Default config\n\t    this.config_ = {\n\t      visibleAtScrollEnd: false\n\t    };\n\t\n\t    this.mutationObserver_ = null;\n\t\n\t    this.drawing_ = false;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t\n\t  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;\n\t\n\t  /**\n\t   * Update header width\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.recalcWidth_ = function () {\n\t    this.header_.style.width = this.content_.clientWidth + 'px';\n\t  };\n\t\n\t  var throttleResize = (0, _fullThrottle2.default)(function (self) {\n\t    return self.recalcWidth_();\n\t  });\n\t\n\t  /**\n\t   * Adjust header width when window resizes or oreientation changes\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.resizeHandler_ = function () /* event */{\n\t    throttleResize(this);\n\t  };\n\t\n\t  /**\n\t   * Update header position\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.reposition_ = function () {\n\t\n\t    var currentContentScrollTop = this.content_.scrollTop;\n\t    var scrollDiff = this.lastScrollTop_ - currentContentScrollTop;\n\t\n\t    if (currentContentScrollTop <= 0) {\n\t      // Scrolled to the top. Header sticks to the top\n\t      this.header_.style.top = '0';\n\t      this.header_.classList.remove(IS_SCROLL_CLASS);\n\t    } else if (scrollDiff > 0) {\n\t\n\t      if (scrollDiff >= this.header_.offsetHeight) {\n\t\n\t        // Scrolled up. Header slides in\n\t        var headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;\n\t        if (headerTop != 0) {\n\t          this.header_.style.top = '0';\n\t          this.header_.classList.add(IS_SCROLL_CLASS);\n\t        }\n\t        this.lastScrollTop_ = currentContentScrollTop;\n\t      }\n\t      return;\n\t    } else if (scrollDiff < 0) {\n\t      // Scrolled down\n\t      this.header_.classList.add(IS_SCROLL_CLASS);\n\t      var _headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;\n\t\n\t      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {\n\t        // Bottom of content\n\t        if (_headerTop != 0) {\n\t          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : '-' + this.header_.offsetHeight + 'px';\n\t        }\n\t      } else {\n\t        _headerTop += scrollDiff;\n\t        var offsetHeight = this.header_.offsetHeight;\n\t        this.header_.style.top = (Math.abs(_headerTop) > offsetHeight ? -offsetHeight : _headerTop) + 'px';\n\t      }\n\t    }\n\t\n\t    this.lastScrollTop_ = currentContentScrollTop;\n\t  };\n\t\n\t  var throttleScroll = (0, _fullThrottle2.default)(function (self) {\n\t    return self.reposition_();\n\t  });\n\t\n\t  /**\n\t   * Scroll header when content scrolls\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.scrollHandler_ = function () /* event */{\n\t    throttleScroll(this);\n\t  };\n\t\n\t  /**\n\t   * Init header position\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.updatePosition_ = function () /* event */{\n\t    this.recalcWidth_();\n\t    this.reposition_();\n\t  };\n\t\n\t  /**\n\t   * Add mutation observer\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.addMutationObserver_ = function () {\n\t    var _this = this;\n\t\n\t    // jsdom does not support MutationObserver - so this is not testable\n\t    /* istanbul ignore next */\n\t    this.mutationObserver_ = new MutationObserver(function () /*mutations*/{\n\t      // Adjust header width if content changes (e.g. in a SPA)\n\t      _this.updatePosition_();\n\t    });\n\t\n\t    this.mutationObserver_.observe(this.content_, {\n\t      attributes: false,\n\t      childList: true,\n\t      characterData: false,\n\t      subtree: true\n\t    });\n\t  };\n\t\n\t  /**\n\t  * Removes event listeners\n\t  * @private\n\t  */\n\t  MaterialExtStickyHeader.prototype.removeListeners_ = function () {\n\t\n\t    window.removeEventListener('resize', this.resizeHandler_);\n\t    window.removeEventListener('orientationchange', this.resizeHandler_);\n\t\n\t    if (this.content_) {\n\t      this.content_.removeEventListener('scroll', this.scrollHandler_);\n\t    }\n\t\n\t    if (this.mutationObserver_) {\n\t      this.mutationObserver_.disconnect();\n\t      this.mutationObserver_ = null;\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtStickyHeader.prototype.init = function () {\n\t\n\t    if (this.header_) {\n\t\n\t      this.removeListeners_();\n\t\n\t      if (this.header_.hasAttribute('data-config')) {\n\t        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.header_.getAttribute('data-config'));\n\t      }\n\t\n\t      this.content_ = this.header_.parentNode.querySelector('.' + MDL_LAYOUT_CONTENT) || null;\n\t\n\t      if (this.content_) {\n\t        this.content_.style.paddingTop = this.header_.offsetHeight + 'px'; // Make room for sticky header\n\t        this.lastScrollTop_ = this.content_.scrollTop;\n\t\n\t        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));\n\t        window.addEventListener('resize', this.resizeHandler_.bind(this));\n\t        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));\n\t\n\t        this.addMutationObserver_();\n\t        this.updatePosition_();\n\t\n\t        // Set upgraded flag\n\t        this.header_.classList.add(_constants.IS_UPGRADED);\n\t      }\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to clean\n\t   *\n\t   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {\n\t     'use strict';\n\t     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');\n\t   };\n\t   */\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtStickyHeader,\n\t    classAsString: 'MaterialExtStickyHeader',\n\t    cssClass: 'mdlext-js-sticky-header'\n\t  });\n\t})(); /**\n\t       * @license\n\t       * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t       *\n\t       * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t       * you may not use this file except in compliance with the License.\n\t       * You may obtain a copy of the License at\n\t       *\n\t       *      http://www.apache.org/licenses/LICENSE-2.0\n\t       *\n\t       * Unless required by applicable law or agreed to in writing, software\n\t       * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t       * See the License for the specific language governing permissions and\n\t       * limitations under the License.\n\t       *\n\t       * This code is built with Google Material Design Lite,\n\t       * which is Licensed under the Apache License, Version 2.0\n\t       */\n\t\n\t/**\n\t * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.\n\t * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and\n\t * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.\n\t */\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t__webpack_require__(2);\n\t\n\t__webpack_require__(21);\n\t\n\t__webpack_require__(15);\n\t\n\t__webpack_require__(14);\n\t\n\t__webpack_require__(13);\n\t\n\t__webpack_require__(29);\n\t\n\t__webpack_require__(30);\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(68), __esModule: true };\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(70), __esModule: true };\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(72), __esModule: true };\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(74), __esModule: true };\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(75), __esModule: true };\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(76), __esModule: true };\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(77), __esModule: true };\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _isIterable2 = __webpack_require__(61);\n\t\n\tvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\t\n\tvar _getIterator2 = __webpack_require__(31);\n\t\n\tvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function () {\n\t  function sliceIterator(arr, i) {\n\t    var _arr = [];\n\t    var _n = true;\n\t    var _d = false;\n\t    var _e = undefined;\n\t\n\t    try {\n\t      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n\t        _arr.push(_s.value);\n\t\n\t        if (i && _arr.length === i) break;\n\t      }\n\t    } catch (err) {\n\t      _d = true;\n\t      _e = err;\n\t    } finally {\n\t      try {\n\t        if (!_n && _i[\"return\"]) _i[\"return\"]();\n\t      } finally {\n\t        if (_d) throw _e;\n\t      }\n\t    }\n\t\n\t    return _arr;\n\t  }\n\t\n\t  return function (arr, i) {\n\t    if (Array.isArray(arr)) {\n\t      return arr;\n\t    } else if ((0, _isIterable3.default)(Object(arr))) {\n\t      return sliceIterator(arr, i);\n\t    } else {\n\t      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n\t    }\n\t  };\n\t}();\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(28);\n\t__webpack_require__(104);\n\tmodule.exports = __webpack_require__(1).Array.from;\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(48);\n\t__webpack_require__(28);\n\tmodule.exports = __webpack_require__(102);\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(48);\n\t__webpack_require__(28);\n\tmodule.exports = __webpack_require__(103);\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(106);\n\tmodule.exports = __webpack_require__(1).Number.isInteger;\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(107);\n\tmodule.exports = __webpack_require__(1).Number.isNaN;\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(108);\n\tmodule.exports = __webpack_require__(1).Object.assign;\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(109);\n\tvar $Object = __webpack_require__(1).Object;\n\tmodule.exports = function defineProperty(it, key, desc){\n\t  return $Object.defineProperty(it, key, desc);\n\t};\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(112);\n\tmodule.exports = __webpack_require__(1).Object.entries;\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(110);\n\tmodule.exports = __webpack_require__(1).Object.keys;\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(111);\n\tmodule.exports = __webpack_require__(1).Reflect.apply;\n\n/***/ },\n/* 78 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(){ /* empty */ };\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// false -> Array#indexOf\n\t// true  -> Array#includes\n\tvar toIObject = __webpack_require__(19)\n\t  , toLength  = __webpack_require__(45)\n\t  , toIndex   = __webpack_require__(100);\n\tmodule.exports = function(IS_INCLUDES){\n\t  return function($this, el, fromIndex){\n\t    var O      = toIObject($this)\n\t      , length = toLength(O.length)\n\t      , index  = toIndex(fromIndex, length)\n\t      , value;\n\t    // Array#includes uses SameValueZero equality algorithm\n\t    if(IS_INCLUDES && el != el)while(length > index){\n\t      value = O[index++];\n\t      if(value != value)return true;\n\t    // Array#toIndex ignores holes, Array#includes - not\n\t    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n\t      if(O[index] === el)return IS_INCLUDES || index || 0;\n\t    } return !IS_INCLUDES && -1;\n\t  };\n\t};\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar $defineProperty = __webpack_require__(12)\n\t  , createDesc      = __webpack_require__(25);\n\t\n\tmodule.exports = function(object, index, value){\n\t  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n\t  else object[index] = value;\n\t};\n\n/***/ },\n/* 81 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(5).document && document.documentElement;\n\n/***/ },\n/* 82 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = !__webpack_require__(9) && !__webpack_require__(10)(function(){\n\t  return Object.defineProperty(__webpack_require__(38)('div'), 'a', {get: function(){ return 7; }}).a != 7;\n\t});\n\n/***/ },\n/* 83 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// check on default Array iterator\n\tvar Iterators  = __webpack_require__(7)\n\t  , ITERATOR   = __webpack_require__(4)('iterator')\n\t  , ArrayProto = Array.prototype;\n\t\n\tmodule.exports = function(it){\n\t  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n\t};\n\n/***/ },\n/* 84 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 20.1.2.3 Number.isInteger(number)\n\tvar isObject = __webpack_require__(17)\n\t  , floor    = Math.floor;\n\tmodule.exports = function isInteger(it){\n\t  return !isObject(it) && isFinite(it) && floor(it) === it;\n\t};\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// call something on iterator step with safe closing on error\n\tvar anObject = __webpack_require__(6);\n\tmodule.exports = function(iterator, fn, value, entries){\n\t  try {\n\t    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n\t  // 7.4.6 IteratorClose(iterator, completion)\n\t  } catch(e){\n\t    var ret = iterator['return'];\n\t    if(ret !== undefined)anObject(ret.call(iterator));\n\t    throw e;\n\t  }\n\t};\n\n/***/ },\n/* 86 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar create         = __webpack_require__(91)\n\t  , descriptor     = __webpack_require__(25)\n\t  , setToStringTag = __webpack_require__(43)\n\t  , IteratorPrototype = {};\n\t\n\t// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n\t__webpack_require__(11)(IteratorPrototype, __webpack_require__(4)('iterator'), function(){ return this; });\n\t\n\tmodule.exports = function(Constructor, NAME, next){\n\t  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n\t  setToStringTag(Constructor, NAME + ' Iterator');\n\t};\n\n/***/ },\n/* 87 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar ITERATOR     = __webpack_require__(4)('iterator')\n\t  , SAFE_CLOSING = false;\n\t\n\ttry {\n\t  var riter = [7][ITERATOR]();\n\t  riter['return'] = function(){ SAFE_CLOSING = true; };\n\t  Array.from(riter, function(){ throw 2; });\n\t} catch(e){ /* empty */ }\n\t\n\tmodule.exports = function(exec, skipClosing){\n\t  if(!skipClosing && !SAFE_CLOSING)return false;\n\t  var safe = false;\n\t  try {\n\t    var arr  = [7]\n\t      , iter = arr[ITERATOR]();\n\t    iter.next = function(){ return {done: safe = true}; };\n\t    arr[ITERATOR] = function(){ return iter; };\n\t    exec(arr);\n\t  } catch(e){ /* empty */ }\n\t  return safe;\n\t};\n\n/***/ },\n/* 88 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(done, value){\n\t  return {value: value, done: !!done};\n\t};\n\n/***/ },\n/* 89 */\n/***/ function(module, exports) {\n\n\tmodule.exports = true;\n\n/***/ },\n/* 90 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t// 19.1.2.1 Object.assign(target, source, ...)\n\tvar getKeys  = __webpack_require__(18)\n\t  , gOPS     = __webpack_require__(93)\n\t  , pIE      = __webpack_require__(42)\n\t  , toObject = __webpack_require__(20)\n\t  , IObject  = __webpack_require__(40)\n\t  , $assign  = Object.assign;\n\t\n\t// should work with symbols and should have deterministic property order (V8 bug)\n\tmodule.exports = !$assign || __webpack_require__(10)(function(){\n\t  var A = {}\n\t    , B = {}\n\t    , S = Symbol()\n\t    , K = 'abcdefghijklmnopqrst';\n\t  A[S] = 7;\n\t  K.split('').forEach(function(k){ B[k] = k; });\n\t  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n\t}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n\t  var T     = toObject(target)\n\t    , aLen  = arguments.length\n\t    , index = 1\n\t    , getSymbols = gOPS.f\n\t    , isEnum     = pIE.f;\n\t  while(aLen > index){\n\t    var S      = IObject(arguments[index++])\n\t      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n\t      , length = keys.length\n\t      , j      = 0\n\t      , key;\n\t    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n\t  } return T;\n\t} : $assign;\n\n/***/ },\n/* 91 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\tvar anObject    = __webpack_require__(6)\n\t  , dPs         = __webpack_require__(92)\n\t  , enumBugKeys = __webpack_require__(39)\n\t  , IE_PROTO    = __webpack_require__(26)('IE_PROTO')\n\t  , Empty       = function(){ /* empty */ }\n\t  , PROTOTYPE   = 'prototype';\n\t\n\t// Create object with fake `null` prototype: use iframe Object with cleared prototype\n\tvar createDict = function(){\n\t  // Thrash, waste and sodomy: IE GC bug\n\t  var iframe = __webpack_require__(38)('iframe')\n\t    , i      = enumBugKeys.length\n\t    , lt     = '<'\n\t    , gt     = '>'\n\t    , iframeDocument;\n\t  iframe.style.display = 'none';\n\t  __webpack_require__(81).appendChild(iframe);\n\t  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n\t  // createDict = iframe.contentWindow.Object;\n\t  // html.removeChild(iframe);\n\t  iframeDocument = iframe.contentWindow.document;\n\t  iframeDocument.open();\n\t  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n\t  iframeDocument.close();\n\t  createDict = iframeDocument.F;\n\t  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n\t  return createDict();\n\t};\n\t\n\tmodule.exports = Object.create || function create(O, Properties){\n\t  var result;\n\t  if(O !== null){\n\t    Empty[PROTOTYPE] = anObject(O);\n\t    result = new Empty;\n\t    Empty[PROTOTYPE] = null;\n\t    // add \"__proto__\" for Object.getPrototypeOf polyfill\n\t    result[IE_PROTO] = O;\n\t  } else result = createDict();\n\t  return Properties === undefined ? result : dPs(result, Properties);\n\t};\n\n\n/***/ },\n/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP       = __webpack_require__(12)\n\t  , anObject = __webpack_require__(6)\n\t  , getKeys  = __webpack_require__(18);\n\t\n\tmodule.exports = __webpack_require__(9) ? Object.defineProperties : function defineProperties(O, Properties){\n\t  anObject(O);\n\t  var keys   = getKeys(Properties)\n\t    , length = keys.length\n\t    , i = 0\n\t    , P;\n\t  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n\t  return O;\n\t};\n\n/***/ },\n/* 93 */\n/***/ function(module, exports) {\n\n\texports.f = Object.getOwnPropertySymbols;\n\n/***/ },\n/* 94 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\tvar has         = __webpack_require__(16)\n\t  , toObject    = __webpack_require__(20)\n\t  , IE_PROTO    = __webpack_require__(26)('IE_PROTO')\n\t  , ObjectProto = Object.prototype;\n\t\n\tmodule.exports = Object.getPrototypeOf || function(O){\n\t  O = toObject(O);\n\t  if(has(O, IE_PROTO))return O[IE_PROTO];\n\t  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n\t    return O.constructor.prototype;\n\t  } return O instanceof Object ? ObjectProto : null;\n\t};\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar has          = __webpack_require__(16)\n\t  , toIObject    = __webpack_require__(19)\n\t  , arrayIndexOf = __webpack_require__(79)(false)\n\t  , IE_PROTO     = __webpack_require__(26)('IE_PROTO');\n\t\n\tmodule.exports = function(object, names){\n\t  var O      = toIObject(object)\n\t    , i      = 0\n\t    , result = []\n\t    , key;\n\t  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n\t  // Don't enum bug & hidden keys\n\t  while(names.length > i)if(has(O, key = names[i++])){\n\t    ~arrayIndexOf(result, key) || result.push(key);\n\t  }\n\t  return result;\n\t};\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// most Object methods by ES6 should accept primitives\n\tvar $export = __webpack_require__(3)\n\t  , core    = __webpack_require__(1)\n\t  , fails   = __webpack_require__(10);\n\tmodule.exports = function(KEY, exec){\n\t  var fn  = (core.Object || {})[KEY] || Object[KEY]\n\t    , exp = {};\n\t  exp[KEY] = exec(fn);\n\t  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n\t};\n\n/***/ },\n/* 97 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar getKeys   = __webpack_require__(18)\n\t  , toIObject = __webpack_require__(19)\n\t  , isEnum    = __webpack_require__(42).f;\n\tmodule.exports = function(isEntries){\n\t  return function(it){\n\t    var O      = toIObject(it)\n\t      , keys   = getKeys(O)\n\t      , length = keys.length\n\t      , i      = 0\n\t      , result = []\n\t      , key;\n\t    while(length > i)if(isEnum.call(O, key = keys[i++])){\n\t      result.push(isEntries ? [key, O[key]] : O[key]);\n\t    } return result;\n\t  };\n\t};\n\n/***/ },\n/* 98 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(11);\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(27)\n\t  , defined   = __webpack_require__(24);\n\t// true  -> String#at\n\t// false -> String#codePointAt\n\tmodule.exports = function(TO_STRING){\n\t  return function(that, pos){\n\t    var s = String(defined(that))\n\t      , i = toInteger(pos)\n\t      , l = s.length\n\t      , a, b;\n\t    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n\t    a = s.charCodeAt(i);\n\t    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n\t      ? TO_STRING ? s.charAt(i) : a\n\t      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n\t  };\n\t};\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(27)\n\t  , max       = Math.max\n\t  , min       = Math.min;\n\tmodule.exports = function(index, length){\n\t  index = toInteger(index);\n\t  return index < 0 ? max(index + length, 0) : min(index, length);\n\t};\n\n/***/ },\n/* 101 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.1 ToPrimitive(input [, PreferredType])\n\tvar isObject = __webpack_require__(17);\n\t// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n\t// and the second argument - flag - preferred type is a string\n\tmodule.exports = function(it, S){\n\t  if(!isObject(it))return it;\n\t  var fn, val;\n\t  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  throw TypeError(\"Can't convert object to primitive value\");\n\t};\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar anObject = __webpack_require__(6)\n\t  , get      = __webpack_require__(47);\n\tmodule.exports = __webpack_require__(1).getIterator = function(it){\n\t  var iterFn = get(it);\n\t  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n\t  return anObject(iterFn.call(it));\n\t};\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar classof   = __webpack_require__(35)\n\t  , ITERATOR  = __webpack_require__(4)('iterator')\n\t  , Iterators = __webpack_require__(7);\n\tmodule.exports = __webpack_require__(1).isIterable = function(it){\n\t  var O = Object(it);\n\t  return O[ITERATOR] !== undefined\n\t    || '@@iterator' in O\n\t    || Iterators.hasOwnProperty(classof(O));\n\t};\n\n/***/ },\n/* 104 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar ctx            = __webpack_require__(37)\n\t  , $export        = __webpack_require__(3)\n\t  , toObject       = __webpack_require__(20)\n\t  , call           = __webpack_require__(85)\n\t  , isArrayIter    = __webpack_require__(83)\n\t  , toLength       = __webpack_require__(45)\n\t  , createProperty = __webpack_require__(80)\n\t  , getIterFn      = __webpack_require__(47);\n\t\n\t$export($export.S + $export.F * !__webpack_require__(87)(function(iter){ Array.from(iter); }), 'Array', {\n\t  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n\t  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n\t    var O       = toObject(arrayLike)\n\t      , C       = typeof this == 'function' ? this : Array\n\t      , aLen    = arguments.length\n\t      , mapfn   = aLen > 1 ? arguments[1] : undefined\n\t      , mapping = mapfn !== undefined\n\t      , index   = 0\n\t      , iterFn  = getIterFn(O)\n\t      , length, result, step, iterator;\n\t    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n\t    // if object isn't iterable or it's array with default iterator - use simple case\n\t    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n\t      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n\t        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n\t      }\n\t    } else {\n\t      length = toLength(O.length);\n\t      for(result = new C(length); length > index; index++){\n\t        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n\t      }\n\t    }\n\t    result.length = index;\n\t    return result;\n\t  }\n\t});\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar addToUnscopables = __webpack_require__(78)\n\t  , step             = __webpack_require__(88)\n\t  , Iterators        = __webpack_require__(7)\n\t  , toIObject        = __webpack_require__(19);\n\t\n\t// 22.1.3.4 Array.prototype.entries()\n\t// 22.1.3.13 Array.prototype.keys()\n\t// 22.1.3.29 Array.prototype.values()\n\t// 22.1.3.30 Array.prototype[@@iterator]()\n\tmodule.exports = __webpack_require__(41)(Array, 'Array', function(iterated, kind){\n\t  this._t = toIObject(iterated); // target\n\t  this._i = 0;                   // next index\n\t  this._k = kind;                // kind\n\t// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n\t}, function(){\n\t  var O     = this._t\n\t    , kind  = this._k\n\t    , index = this._i++;\n\t  if(!O || index >= O.length){\n\t    this._t = undefined;\n\t    return step(1);\n\t  }\n\t  if(kind == 'keys'  )return step(0, index);\n\t  if(kind == 'values')return step(0, O[index]);\n\t  return step(0, [index, O[index]]);\n\t}, 'values');\n\t\n\t// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n\tIterators.Arguments = Iterators.Array;\n\t\n\taddToUnscopables('keys');\n\taddToUnscopables('values');\n\taddToUnscopables('entries');\n\n/***/ },\n/* 106 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 20.1.2.3 Number.isInteger(number)\n\tvar $export = __webpack_require__(3);\n\t\n\t$export($export.S, 'Number', {isInteger: __webpack_require__(84)});\n\n/***/ },\n/* 107 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 20.1.2.4 Number.isNaN(number)\n\tvar $export = __webpack_require__(3);\n\t\n\t$export($export.S, 'Number', {\n\t  isNaN: function isNaN(number){\n\t    return number != number;\n\t  }\n\t});\n\n/***/ },\n/* 108 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.3.1 Object.assign(target, source)\n\tvar $export = __webpack_require__(3);\n\t\n\t$export($export.S + $export.F, 'Object', {assign: __webpack_require__(90)});\n\n/***/ },\n/* 109 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar $export = __webpack_require__(3);\n\t// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n\t$export($export.S + $export.F * !__webpack_require__(9), 'Object', {defineProperty: __webpack_require__(12).f});\n\n/***/ },\n/* 110 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 Object.keys(O)\n\tvar toObject = __webpack_require__(20)\n\t  , $keys    = __webpack_require__(18);\n\t\n\t__webpack_require__(96)('keys', function(){\n\t  return function keys(it){\n\t    return $keys(toObject(it));\n\t  };\n\t});\n\n/***/ },\n/* 111 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\n\tvar $export   = __webpack_require__(3)\n\t  , aFunction = __webpack_require__(34)\n\t  , anObject  = __webpack_require__(6)\n\t  , rApply    = (__webpack_require__(5).Reflect || {}).apply\n\t  , fApply    = Function.apply;\n\t// MS Edge argumentsList argument is optional\n\t$export($export.S + $export.F * !__webpack_require__(10)(function(){\n\t  rApply(function(){});\n\t}), 'Reflect', {\n\t  apply: function apply(target, thisArgument, argumentsList){\n\t    var T = aFunction(target)\n\t      , L = anObject(argumentsList);\n\t    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n\t  }\n\t});\n\n/***/ },\n/* 112 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://github.com/tc39/proposal-object-values-entries\n\tvar $export  = __webpack_require__(3)\n\t  , $entries = __webpack_require__(97)(true);\n\t\n\t$export($export.S, 'Object', {\n\t  entries: function entries(it){\n\t    return $entries(it);\n\t  }\n\t});\n\n/***/ },\n/* 113 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ }\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// mdl-ext.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 82005ea981e272a97aa0","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_core.js\n// module id = 1\n// module chunks = 0 1","'use strict';\n\nconst VK_TAB         = 9;\nconst VK_ENTER       = 13;\nconst VK_ESC         = 27;\nconst VK_SPACE       = 32;\nconst VK_PAGE_UP     = 33;\nconst VK_PAGE_DOWN   = 34;\nconst VK_END         = 35;\nconst VK_HOME        = 36;\nconst VK_ARROW_LEFT  = 37;\nconst VK_ARROW_UP    = 38;\nconst VK_ARROW_RIGHT = 39;\nconst VK_ARROW_DOWN  = 40;\n\nconst ARIA_EXPANDED        = 'aria-expanded';\nconst ARIA_HIDDEN          = 'aria-hidden';\nconst ARIA_MULTISELECTABLE = 'aria-multiselectable';\nconst ARIA_SELECTED        = 'aria-selected';\n\nconst IS_DIRTY      = 'is-dirty';\nconst IS_DISABLED   = 'is-disabled';\nconst IS_EXPANDED   = 'is-expanded';\nconst IS_FOCUSED    = 'is-focused';\nconst IS_INVALID    = 'is-invalid';\nconst IS_UPGRADED   = 'is-upgraded';\nconst DATA_UPGRADED = 'data-upgraded';\n\nconst MDL_RIPPLE                      = 'mdl-ripple';\nconst MDL_RIPPLE_COMPONENT            = 'MaterialRipple';\nconst MDL_RIPPLE_EFFECT               = 'mdl-js-ripple-effect';\nconst MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';\n\nexport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_PAGE_UP,\n  VK_PAGE_DOWN ,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN ,\n  ARIA_EXPANDED,\n  ARIA_HIDDEN,\n  ARIA_MULTISELECTABLE,\n  ARIA_SELECTED,\n  IS_DIRTY,\n  IS_DISABLED,\n  IS_EXPANDED,\n  IS_FOCUSED,\n  IS_INVALID,\n  IS_UPGRADED,\n  DATA_UPGRADED ,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/constants.js","var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_export.js\n// module id = 3\n// module chunks = 0 1","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_wks.js\n// module id = 4\n// module chunks = 0 1","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_global.js\n// module id = 5\n// module chunks = 0 1","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_an-object.js\n// module id = 6\n// module chunks = 0 1","module.exports = {};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iterators.js\n// module id = 7\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  } else {\n    return (0, _from2.default)(arr);\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/toConsumableArray.js\n// module id = 8\n// module chunks = 0 1","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_descriptors.js\n// module id = 9\n// module chunks = 0 1","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_fails.js\n// module id = 10\n// module chunks = 0 1","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_hide.js\n// module id = 11\n// module chunks = 0 1","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dp.js\n// module id = 12\n// module chunks = 0 1","/**\n * Since some events can fire at a high rate, the event handler should be limited to execute computationally\n * expensive operations, such as DOM modifications, inside a single rendered frame.\n * When listening to e.g. scroll and resize events, the browser tends to fire off more events per\n * second than are actually useful. For instance, if your event listener sets some element positions, then it\n * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of\n * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that\n * it runs immediately prior to the browser rendering the updated layout to the screen.\n * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page\n * is rendered to the screen.\n * *\n * @param callback the function to throttle\n * @param context  optional context of this, default to global\n * @return {function(...[*])}\n */\nconst fullThrottle = (callback, context) => {\n\n  if (!context) {\n    context = this || window;\n  }\n\n  let throttling = false;\n\n  return (...args) => {\n    if(!throttling) {\n      throttling = true;\n      window.requestAnimationFrame( () => {\n        throttling = false;\n        return Reflect.apply(callback, context, args);\n      });\n    }\n  };\n};\n\nexport default fullThrottle;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/full-throttle.js","'use strict';\n\n/**\n * Converts a JSON string to object\n * @param jsonString\n * @param source\n */\nconst jsonStringToObject = (jsonString, source = {} ) => {\n  const s = jsonString.replace(/'/g, '\"');\n  try {\n    return Object.assign(source, JSON.parse(s));\n  }\n  catch (e) {\n    throw new Error(`Failed to parse json string: ${s}. Error: ${e.message}`);\n  }\n};\n\nexport { jsonStringToObject };\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/json-utils.js","'use strict';\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A javascript utility for conditionally creating a list of strings.\n * The function takes any number of arguments which can be a string or object.\n * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames\n *\n * @param  {*} args the strings and/or objects to\n * @return {Array} a list of strings\n * @example\n * // Returns ['foo', 'bar', 'baz', 'quux']\n * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n * @example see the tests for more examples\n */\nconst stringList = (...args) => {\n\n  const isString = str => str != null && typeof str === 'string';\n\n  const flatten = list => list.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);\n\n  const objectToStrings = arg =>\n    Object.keys(arg)\n      .filter(key => arg[key])\n      .map(key => key);\n\n  return args\n    .filter(arg => !!arg)\n    .map(arg => isString(arg) ? arg : objectToStrings(arg))\n    .reduce((result, arg) => result.concat(Array.isArray(arg) ? flatten(arg) : arg), []);\n};\n\n/**\n * A simple javascript utility for conditionally joining strings together.\n * The function takes a delimiter string and any number of arguments which can be a string or object.\n *\n * @param delimiter delimiter to separate joined strings\n * @param  {*} args the strings and/or objects to join\n * @return {String} the joined strings\n * @example\n * // Returns 'foo, bar, baz, quux'\n * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n * @example see the tests for more examples\n */\nconst joinStrings = (delimiter = ' ', ...args) => stringList(...args).join(delimiter);\n\n/**\n * Generates a random string with a given length\n * @param n {Integer} length of generated string\n * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\n * @return {String} the random string\n * @example\n * // Returns e.g. 'pd781w0y'\n * randomString(8);\n * @example see the tests for more examples\n */\nconst randomString = ( n=12 ) => Array( n+1 ).join((`${Math.random().toString(36)}00000000000000000`).slice(2, 18)).slice(0, n);\n\nexport { joinStrings, randomString, stringList };\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/string-utils.js","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_has.js\n// module id = 16\n// module chunks = 0 1","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-object.js\n// module id = 17\n// module chunks = 0 1","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = require('./_object-keys-internal')\n  , enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys.js\n// module id = 18\n// module chunks = 0 1","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-iobject.js\n// module id = 19\n// module chunks = 0 1","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-object.js\n// module id = 20\n// module chunks = 0 1","/**\n * Remove child element(s)\n * element.innerHTNL = '' has a performance penality!\n * @see http://jsperf.com/empty-an-element/16\n * @see http://jsperf.com/force-reflow\n * @param element\n * @param forceReflow\n */\nconst removeChildElements = (element, forceReflow = true) => {\n\n  // See: http://jsperf.com/empty-an-element/16\n  while (element.lastChild) {\n    element.removeChild(element.lastChild);\n  }\n  if(forceReflow) {\n    // See: http://jsperf.com/force-reflow\n    const d = element.style.display;\n\n    element.style.display = 'none';\n    element.style.display = d;\n  }\n};\n\n/**\n * Moves child elements from a DOM node to another dom node.\n * @param source {HTMLElement}\n * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created\n * @return {HTMLElement} The target node\n *\n * @example\n * // Moves child elements from a DOM node to another dom node.\n * moveElements(source, destination);\n *\n * @example\n * // If the second parameter is ommited, a document fragment is created:\n * let fragment = moveElements(source);\n *\n * @See: https://github.com/webmodules/dom-move\n */\nconst moveElements = (source, target) => {\n  if (!target) {\n    target = source.ownerDocument.createDocumentFragment();\n  }\n  while (source.firstChild) {\n    target.appendChild(source.firstChild);\n  }\n  return target;\n};\n\n\n/**\n * Get the browser viewport dimensions\n * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript\n * @return {{windowWidth: number, windowHeight: number}}\n */\nconst getWindowViewport = () => {\n  return {\n    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\n  };\n};\n\n\n/**\n * Check whether an element is in the window viewport\n * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/\n * @param top\n * @param left\n * @param bottom\n * @param right\n * @return {boolean} true if rectangle is inside window viewport, otherwise false\n */\nconst isRectInsideWindowViewport = ({ top, left, bottom, right }) => {\n  const { viewportWidth, viewportHeight } = getWindowViewport();\n  return top >= 0 &&\n    left >= 0 &&\n    bottom <= viewportHeight &&\n    right <= viewportWidth;\n};\n\n\n/**\n * Get a list of parent elements that can possibly scroll\n * @param el the element to get parents for\n * @returns {Array}\n */\nconst getScrollParents = el => {\n  const elements = [];\n\n  /*\n  for (el = el.parentNode; el; el = el.parentNode) {\n    const cs = window.getComputedStyle(el);\n    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n      elements.unshift(el);\n    }\n    if(el === document.body) {\n      break;\n    }\n  }\n  */\n\n  let element = el.parentNode;\n  while (element) {\n    const cs = window.getComputedStyle(element);\n    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n      elements.unshift(element);\n    }\n    if(element === document.body) {\n      break;\n    }\n    element = element.parentNode;\n  }\n\n  return elements;\n};\n\n/**\n * Get a list of parent elements, from a given element to a given element\n * @param {HTMLElement} from\n * @param {HTMLElement} to\n * @return {Array<HTMLElement>} the parent elements, not including from and to\n */\nconst getParentElements = (from, to) => {\n  const result = [];\n  let element = from.parentNode;\n  while (element) {\n    if(element === to) {\n      break;\n    }\n    result.unshift(element);\n    element = element.parentNode;\n  }\n  return result;\n};\n\n/**\n * Position element next to button\n *\n * Positioning strategy\n *  1. element.height > viewport.height\n *     let element.height = viewport.heigt\n *     let element.overflow-y = auto\n *  2. element.width > viewport.width\n *     let element.width = viewport.width\n *  3. position element below button, align left edge of element with button left\n *       done if element inside viewport\n *  4. position element below button, align right edge of element with button right\n *       done if element inside viewport\n *  5. positions element above button, aligns left edge of element with button left\n *       done if element inside viewport\n *  6. position element above the control element, aligned to its right.\n *       done if element inside viewport\n *  7. position element at button right hand side, aligns element top with button top\n *       done if element inside viewport\n *  8. position element at button left hand side, aligns element top with button top\n *       done if element inside viewport\n *  9. position element inside viewport\n *     1. position element at viewport bottom\n *     2. position element at button right hand side\n *        done if element inside viewport\n *     3. position element at button left hand side\n *       done if element inside viewport\n *     4. position element at viewport right\n * 10. done\n *\n */\nconst tether = (controlledBy, element) => {\n  const controlRect = controlledBy.getBoundingClientRect();\n\n  // 1. will element height fit inside window viewport?\n  const { viewportWidth, viewportHeight } = getWindowViewport();\n\n  element.style.height = 'auto';\n  //element.style.overflowY = 'hidden';\n  if(element.offsetHeight > viewportHeight) {\n    element.style.height = `${viewportHeight}px`;\n    element.style.overflowY = 'auto';\n  }\n\n  // 2. will element width fit inside window viewport?\n  element.style.width = 'auto';\n  if(element.offsetWidth > viewportWidth) {\n    element.style.width = `${viewportWidth}px`;\n  }\n\n  const elementRect = element.getBoundingClientRect();\n\n  // element to control distance\n  const dy = controlRect.top - elementRect.top;\n  const dx = controlRect.left - elementRect.left;\n\n  // element rect, window coordinates relative to top,left of control\n  const top = elementRect.top + dy;\n  const left = elementRect.left + dx;\n  const bottom = top + elementRect.height;\n  const right = left + elementRect.width;\n\n  // Position relative to control\n  let ddy = dy;\n  let ddx = dx;\n\n  if(isRectInsideWindowViewport({\n    top: top + controlRect.height,\n    left: left,\n    bottom: bottom + controlRect.height,\n    right: right\n  })) {\n    // 3 position element below the control element, aligned to its left\n    ddy = controlRect.height + dy;\n    //console.log('***** 3');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top + controlRect.height,\n    left: left + controlRect.width - elementRect.width,\n    bottom: bottom + controlRect.height,\n    right: left + controlRect.width\n  })) {\n    // 4 position element below the control element, aligned to its right\n    ddy = controlRect.height + dy;\n    ddx = dx + controlRect.width - elementRect.width;\n    //console.log('***** 4');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top - elementRect.height,\n    left: left,\n    bottom: bottom - elementRect.height,\n    right: right\n  })) {\n    // 5. position element above the control element, aligned to its left.\n    ddy = dy - elementRect.height;\n    //console.log('***** 5');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top - elementRect.height,\n    left: left + controlRect.width - elementRect.width,\n    bottom: bottom - elementRect.height,\n    right: left + controlRect.width\n  })) {\n    // 6. position element above the control element, aligned to its right.\n    ddy = dy - elementRect.height;\n    ddx = dx + controlRect.width - elementRect.width;\n    //console.log('***** 6');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top,\n    left: left + controlRect.width,\n    bottom: bottom,\n    right: right + controlRect.width\n  })) {\n    // 7. position element at button right hand side\n    ddx = controlRect.width + dx;\n    //console.log('***** 7');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top,\n    left: left - controlRect.width,\n    bottom: bottom,\n    right: right - controlRect.width\n  })) {\n    // 8. position element at button left hand side\n    ddx = dx - elementRect.width;\n    //console.log('***** 8');\n  }\n  else {\n    // 9. position element inside viewport, near controlrect if possible\n    //console.log('***** 9');\n\n    // 9.1 position element near controlrect bottom\n    ddy =  dy - bottom + viewportHeight;\n    if(top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {\n      ddy = controlRect.height + dy;\n    }\n    else if(top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {\n      ddy = dy - elementRect.height;\n    }\n\n    if(left + elementRect.width + controlRect.width <= viewportWidth) {\n      // 9.2 Position element at button right hand side\n      ddx = controlRect.width + dx;\n      //console.log('***** 9.2');\n    }\n    else if(left - elementRect.width >= 0) {\n      // 9.3 Position element at button left hand side\n      ddx = dx - elementRect.width;\n      //console.log('***** 9.3');\n    }\n    else {\n      // 9.4 position element at (near) viewport right\n      const r = left + elementRect.width - viewportWidth;\n      ddx = dx - r;\n      //console.log('***** 9.4');\n    }\n  }\n\n  // 10. done\n  element.style.top = `${element.offsetTop + ddy}px`;\n  element.style.left = `${element.offsetLeft + ddx}px`;\n  //console.log('***** 10. done');\n};\n\n/**\n * Check if the given element can receive focus\n * @param {HTMLElement} element the element to check\n * @return {boolean} true if the element is focusable, otherwise false\n */\nconst isFocusable = (element) => {\n  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js\n  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus\n\n  if (element.hasAttribute('tabindex')) {\n    const tabindex = element.getAttribute('tabindex');\n    if (!Number.isNaN(tabindex)) {\n      return parseInt(tabindex) > -1;\n    }\n  }\n\n  if (element.hasAttribute('contenteditable') &&\n    element.getAttribute('contenteditable') !== 'false') {\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable\n    return true;\n  }\n\n  // natively focusable, but only when enabled\n  const selector = /input|select|textarea|button|details/i;\n  const name = element.nodeName;\n  if (selector.test(name)) {\n    return element.type.toLowerCase() !== 'hidden' && !element.disabled;\n  }\n\n  // anchors and area must have an href\n  if (name === 'A' || name === 'AREA') {\n    return !!element.href;\n  }\n\n  if (name === 'IFRAME') {\n    // Check visible iframe\n    const cs = window.getComputedStyle(element);\n    return cs.getPropertyValue('display').toLowerCase() !== 'none';\n  }\n\n  return false;\n};\n\n\n/**\n * Get a list of offset parents for given element\n * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n * @param el the element\n * @return {Array} a list of offset parents\n */\n/*\nconst offsetParents = (el) => {\n  const elements = [];\n  for (; el; el = el.offsetParent) {\n    elements.unshift(el);\n  }\n  if(!elements.find(e => e === document.body)) {\n    elements.unshift(document.body);\n  }\n  return elements;\n};\n*/\n\n/**\n * Finds the common offset ancestor of two DOM nodes\n * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n * @see https://gist.github.com/benpickles/4059636\n * @param a\n * @param b\n * @return {Element} The common offset ancestor of a and b\n */\n/*\nconst commonOffsetAncestor = (a, b) => {\n  const parentsA = offsetParents(a);\n  const parentsB = offsetParents(b);\n\n  for (let i = 0; i < parentsA.length; i++) {\n    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];\n  }\n};\n*/\n\n/**\n * Calculate position relative to a target element\n * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively\n * @param target\n * @param el\n * @return {{top: number, left: number}}\n */\n/*\nconst calcPositionRelativeToTarget = (target, el) => {\n  let top = 0;\n  let left = 0;\n\n  while(el) {\n    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;\n    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;\n    el = el.offsetParent;\n\n    if(el === target) {\n      break;\n    }\n  }\n  return { top: top, left: left };\n};\n*/\n\nexport {\n  getWindowViewport,\n  getParentElements,\n  getScrollParents,\n  isFocusable,\n  isRectInsideWindowViewport,\n  moveElements,\n  removeChildElements,\n  tether,\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dom-utils.js","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 22\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 23\n// module chunks = 0 1","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_defined.js\n// module id = 24\n// module chunks = 0 1","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_property-desc.js\n// module id = 25\n// module chunks = 0 1","var shared = require('./_shared')('keys')\n  , uid    = require('./_uid');\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared-key.js\n// module id = 26\n// module chunks = 0 1","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-integer.js\n// module id = 27\n// module chunks = 0 1","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.string.iterator.js\n// module id = 28\n// module chunks = 0 1","'use strict';\n\n// See: http://robertpenner.com/easing/\n\nconst easeInOutQuad = (t, b, c, d) => {\n  t /= d / 2;\n  if(t < 1) return c / 2 * t * t + b;\n  t--;\n  return -c / 2 * (t * (t - 2) - 1) + b;\n};\n\nconst inOutQuintic = (t, b, c, d) => {\n  const ts = (t/=d)*t;\n  const tc = ts*t;\n  return b+c*(6*tc*ts + -15*ts*ts + 10*tc);\n};\n\nexport { easeInOutQuad, inOutQuintic };\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/easing.js","const MIN_INERVAL = 1000/60;\n\n/**\n * Trigger a callback at a given interval\n * @param interval defaults to 1000/60 ms\n * @return {function()} reference to start, stop, immediate and started\n */\n\nconst intervalFunction = ( interval = MIN_INERVAL ) => {\n\n  let lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;\n  let cb = undefined;\n  let next = null;\n  let timeElapsed = 0;\n\n  const execute = () => {\n    const f = cb(timeElapsed);\n    if (!f) {\n      cancel();\n    }\n  };\n\n  const cancel = () => {\n    if(next) {\n      window.cancelAnimationFrame(next);\n    }\n    next = null;\n    timeElapsed = 0;\n  };\n\n  const start = () => {\n    let timeStart = Date.now();\n\n    const loop = now => {\n      if (next) {\n        next = window.requestAnimationFrame( () => loop( Date.now() ));\n\n        timeElapsed += now - timeStart;\n\n        if(timeElapsed >= lapse) {\n          execute();\n          if( (timeElapsed -= lapse) > lapse) {\n            // time elapsed - interval_ > interval_ , indicates inactivity\n            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on\n            timeElapsed = 0;\n          }\n        }\n        timeStart = now;\n      }\n    };\n\n    next = 1;  // a truthy value for first loop\n    loop( timeStart );\n  };\n\n  return {\n    get started() {\n      return next != null;\n    },\n    get interval() {\n      return lapse;\n    },\n    set interval(value) {\n      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;\n    },\n    start(callback) {\n      if(typeof callback !== 'function') {\n        throw new TypeError('callback parameter must be a function');\n      }\n      cb = callback;\n      start();\n    },\n    immediate() {\n      if(!cb) {\n        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');\n      }\n      execute();\n    },\n    stop: () => cancel(),\n  };\n};\n\nexport default intervalFunction;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/interval-function.js","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 31\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/number/is-integer\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-integer.js\n// module id = 32\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/assign.js\n// module id = 33\n// module chunks = 0 1","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_a-function.js\n// module id = 34\n// module chunks = 0 1","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_classof.js\n// module id = 35\n// module chunks = 0 1","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_cof.js\n// module id = 36\n// module chunks = 0 1","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ctx.js\n// module id = 37\n// module chunks = 0 1","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_dom-create.js\n// module id = 38\n// module chunks = 0 1","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_enum-bug-keys.js\n// module id = 39\n// module chunks = 0 1","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iobject.js\n// module id = 40\n// module chunks = 0 1","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-define.js\n// module id = 41\n// module chunks = 0 1","exports.f = {}.propertyIsEnumerable;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-pie.js\n// module id = 42\n// module chunks = 0 1","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_set-to-string-tag.js\n// module id = 43\n// module chunks = 0 1","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared.js\n// module id = 44\n// module chunks = 0 1","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-length.js\n// module id = 45\n// module chunks = 0 1","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_uid.js\n// module id = 46\n// module chunks = 0 1","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator-method.js\n// module id = 47\n// module chunks = 0 1","require('./es6.array.iterator');\nvar global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , TO_STRING_TAG = require('./_wks')('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/web.dom.iterable.js\n// module id = 48\n// module chunks = 0 1","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A WAI-ARIA friendly accordion component.\n * An accordion is a collection of expandable panels associated with a common outer container. Panels consist\n * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections\n * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.\n * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates\n * and makes the contents of each panel visible (or not) by interacting with the Accordion Header\n */\n\nimport {\n  VK_ENTER,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_EXPANDED,\n  IS_UPGRADED,\n  ARIA_MULTISELECTABLE,\n  ARIA_EXPANDED,\n  ARIA_HIDDEN,\n  ARIA_SELECTED\n} from '../utils/constants';\n\n\n(function() {\n  'use strict';\n  const ACCORDION            = 'mdlext-accordion';\n  const ACCORDION_VERTICAL   = 'mdlext-accordion--vertical';\n  const ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';\n  const PANEL                = 'mdlext-accordion__panel';\n  const PANEL_ROLE           = 'presentation';\n  const TAB                  = 'mdlext-accordion__tab';\n  const TAB_CAPTION          = 'mdlext-accordion__tab__caption';\n  const TAB_ROLE             = 'tab';\n  const TABPANEL             = 'mdlext-accordion__tabpanel';\n  const TABPANEL_ROLE        = 'tabpanel';\n  const RIPPLE_EFFECT        = 'mdlext-js-ripple-effect';\n  const RIPPLE               = 'mdlext-accordion__tab--ripple';\n  const ANIMATION_EFFECT     = 'mdlext-js-animation-effect';\n  const ANIMATION            = 'mdlext-accordion__tabpanel--animation';\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtAccordion = function MaterialExtAccordion( element ) {\n\n    // Stores the Accordion HTML element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtAccordion'] = MaterialExtAccordion;\n\n\n  // Helpers\n  const accordionPanelElements = ( element ) => {\n    if(!element) {\n      return {\n        panel: null,\n        tab: null,\n        tabpanel: null\n      };\n    }\n    else if (element.classList.contains(PANEL)) {\n      return {\n        panel: element,\n        tab: element.querySelector(`.${TAB}`),\n        tabpanel: element.querySelector(`.${TABPANEL}`)\n      };\n    }\n    else {\n      return {\n        panel: element.parentNode,\n        tab: element.parentNode.querySelector(`.${TAB}`),\n        tabpanel: element.parentNode.querySelector(`.${TABPANEL}`)\n      };\n    }\n  };\n\n\n  // Private methods.\n\n  /**\n   * Handles custom command event, 'open', 'close', 'toggle' or upgrade\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtAccordion.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if(event && event.detail) {\n      this.command(event.detail);\n    }\n  };\n\n  /**\n   * Dispatch toggle event\n   * @param {string} state\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function ( state, tab, tabpanel ) {\n    const ce = new CustomEvent('toggle', {\n      bubbles: true,\n      cancelable: true,\n      detail: { state: state, tab: tab, tabpanel: tabpanel }\n    });\n    this.element_.dispatchEvent(ce);\n  };\n\n  /**\n   * Open tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.openTab_ = function( panel, tab, tabpanel ) {\n    panel.classList.add(IS_EXPANDED);\n    tab.setAttribute(ARIA_EXPANDED, 'true');\n    tabpanel.removeAttribute('hidden');\n    tabpanel.setAttribute(ARIA_HIDDEN, 'false');\n    this.dispatchToggleEvent_('open', tab, tabpanel);\n  };\n\n  /**\n   * Close tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.closeTab_ = function( panel, tab, tabpanel ) {\n    panel.classList.remove(IS_EXPANDED);\n    tab.setAttribute(ARIA_EXPANDED, 'false');\n    tabpanel.setAttribute('hidden', '');\n    tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n    this.dispatchToggleEvent_('close', tab, tabpanel);\n  };\n\n  /**\n   * Toggle tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.toggleTab_ = function( panel, tab, tabpanel ) {\n    if( !(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled')) ) {\n      if (tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n        this.closeTab_(panel, tab, tabpanel);\n      }\n      else {\n        if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {\n          this.closeTabs_();\n        }\n        this.openTab_(panel, tab, tabpanel);\n      }\n    }\n  };\n\n  /**\n   * Open tabs\n   * @private\n   */\n  MaterialExtAccordion.prototype.openTabs_ = function() {\n    if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() === 'true') {\n      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)]\n        .filter(panel => !panel.classList.contains(IS_EXPANDED))\n        .forEach(closedItem => {\n          const tab = closedItem.querySelector(`.${TAB}`);\n          if (!tab.hasAttribute('disabled')) {\n            this.openTab_(closedItem, tab, closedItem.querySelector(`.${TABPANEL}`));\n          }\n        });\n    }\n  };\n\n  /**\n   * Close tabs\n   * @private\n   */\n  MaterialExtAccordion.prototype.closeTabs_ = function() {\n    [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}.${IS_EXPANDED}`)]\n      .forEach( panel => {\n        const tab = panel.querySelector(`.${TAB}`);\n        if(!tab.hasAttribute('disabled')) {\n          this.closeTab_(panel, tab, panel.querySelector(`.${TABPANEL}`));\n        }\n      });\n  };\n\n\n  // Public methods.\n\n  /**\n   * Upgrade an individual accordion tab\n   * @public\n   * @param {Element} tabElement The HTML element for the accordion panel.\n   */\n  MaterialExtAccordion.prototype.upgradeTab = function( tabElement ) {\n\n    const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n\n    const disableTab = () => {\n      panel.classList.remove(IS_EXPANDED);\n      tab.setAttribute('tabindex', '-1');\n      tab.setAttribute(ARIA_EXPANDED, 'false');\n      tabpanel.setAttribute('hidden', '');\n      tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n    };\n\n    const enableTab = () => {\n      if(!tab.hasAttribute(ARIA_EXPANDED)) {\n        tab.setAttribute(ARIA_EXPANDED, 'false');\n      }\n\n      tab.setAttribute('tabindex', '0');\n\n      if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n        panel.classList.add(IS_EXPANDED);\n        tabpanel.removeAttribute('hidden');\n        tabpanel.setAttribute(ARIA_HIDDEN, 'false');\n      }\n      else {\n        panel.classList.remove(IS_EXPANDED);\n        tabpanel.setAttribute('hidden', '');\n        tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n      }\n    };\n\n    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.\n    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.\n    /* istanbul ignore next */\n    const calcMaxTabCaptionWidth = () => {\n\n      const tabCaption = tab.querySelector(`.${TAB_CAPTION}`);\n      if(tabCaption !== null) {\n        const w = [...tab.children]\n          .filter( el => el.classList && !el.classList.contains(TAB_CAPTION) )\n          .reduce( (v, el) => v + el.offsetWidth, 0 );\n\n        const maxWidth = tab.clientHeight - w;\n        if(maxWidth > 0) {\n          tabCaption.style['max-width'] = `${maxWidth}px`;\n        }\n      }\n    };\n\n    const selectTab = () => {\n      if( !tab.hasAttribute(ARIA_SELECTED) ) {\n        [...this.element_.querySelectorAll(`.${TAB}[aria-selected=\"true\"]`)].forEach(\n          selectedTab => selectedTab.removeAttribute(ARIA_SELECTED)\n        );\n        tab.setAttribute(ARIA_SELECTED, 'true');\n      }\n    };\n\n    const tabClickHandler = () => {\n      this.toggleTab_(panel, tab, tabpanel);\n      selectTab();\n    };\n\n    const tabFocusHandler = () => {\n      selectTab();\n    };\n\n    const tabpanelClickHandler = () => {\n      selectTab();\n    };\n\n    const tabpanelFocusHandler = () => {\n      selectTab();\n    };\n\n    const tabKeydownHandler = e => {\n\n      if(this.element_.hasAttribute('disabled')) {\n        return;\n      }\n\n      if ( e.keyCode === VK_END        || e.keyCode === VK_HOME\n        || e.keyCode === VK_ARROW_UP   || e.keyCode === VK_ARROW_LEFT\n        || e.keyCode === VK_ARROW_DOWN || e.keyCode === VK_ARROW_RIGHT ) {\n\n        let nextTab = null;\n        let keyCode = e.keyCode;\n\n        if (keyCode === VK_HOME) {\n          nextTab = this.element_.querySelector(`.${PANEL}:first-child > .${TAB}`);\n          if(nextTab && nextTab.hasAttribute('disabled')) {\n            nextTab = null;\n            keyCode = VK_ARROW_DOWN;\n          }\n        }\n        else if (keyCode === VK_END) {\n          nextTab = this.element_.querySelector(`.${PANEL}:last-child > .${TAB}`);\n          if(nextTab && nextTab.hasAttribute('disabled')) {\n            nextTab = null;\n            keyCode = VK_ARROW_UP;\n          }\n        }\n\n        if(!nextTab) {\n          let nextPanel = panel;\n\n          do {\n            if (keyCode === VK_ARROW_UP || keyCode === VK_ARROW_LEFT) {\n              nextPanel = nextPanel.previousElementSibling;\n              if(!nextPanel) {\n                nextPanel = this.element_.querySelector(`.${PANEL}:last-child`);\n              }\n              if (nextPanel) {\n                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);\n              }\n            }\n            else if (keyCode === VK_ARROW_DOWN || keyCode === VK_ARROW_RIGHT) {\n              nextPanel = nextPanel.nextElementSibling;\n              if(!nextPanel) {\n                nextPanel = this.element_.querySelector(`.${PANEL}:first-child`);\n              }\n              if (nextPanel) {\n                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);\n              }\n            }\n\n            if(nextTab && nextTab.hasAttribute('disabled')) {\n              nextTab = null;\n            }\n            else {\n              break;\n            }\n          }\n          while(nextPanel !== panel);\n        }\n\n        if (nextTab) {\n          e.preventDefault();\n          e.stopPropagation();\n          nextTab.focus();\n\n          // Workaround for JSDom testing:\n          // In JsDom 'element.focus()' does not trigger any focus event\n          if(!nextTab.hasAttribute(ARIA_SELECTED)) {\n\n            [...this.element_.querySelectorAll(`.${TAB}[aria-selected=\"true\"]`)]\n              .forEach( selectedTab => selectedTab.removeAttribute(ARIA_SELECTED) );\n\n            nextTab.setAttribute(ARIA_SELECTED, 'true');\n          }\n        }\n      }\n      else if (e.keyCode === VK_ENTER || e.keyCode === VK_SPACE) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.toggleTab_(panel, tab, tabpanel);\n      }\n    };\n\n    if(tab === null) {\n      throw new Error('There must be a tab element for each accordion panel.');\n    }\n\n    if(tabpanel === null) {\n      throw new Error('There must be a tabpanel element for each accordion panel.');\n    }\n\n    panel.setAttribute('role', PANEL_ROLE);\n    tab.setAttribute('role', TAB_ROLE);\n    tabpanel.setAttribute('role', TABPANEL_ROLE);\n\n    if(tab.hasAttribute('disabled')) {\n      disableTab();\n    }\n    else {\n      enableTab();\n    }\n\n    if( this.element_.classList.contains(ACCORDION_HORIZONTAL)) {\n      calcMaxTabCaptionWidth();\n    }\n\n    if (this.element_.classList.contains(RIPPLE_EFFECT)) {\n      tab.classList.add(RIPPLE);\n    }\n\n    if (this.element_.classList.contains(ANIMATION_EFFECT)) {\n      tabpanel.classList.add(ANIMATION);\n    }\n\n    // Remove listeners, just in case ...\n    tab.removeEventListener('click', tabClickHandler);\n    tab.removeEventListener('focus', tabFocusHandler);\n    tab.removeEventListener('keydown', tabKeydownHandler);\n    tabpanel.removeEventListener('click', tabpanelClickHandler);\n    tabpanel.removeEventListener('focus', tabpanelFocusHandler);\n\n    tab.addEventListener('click', tabClickHandler);\n    tab.addEventListener('focus', tabFocusHandler);\n    tab.addEventListener('keydown', tabKeydownHandler);\n    tabpanel.addEventListener('click', tabpanelClickHandler, true);\n    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);\n  };\n  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;\n\n\n  /**\n   * Execute command\n   * @param detail\n   */\n  MaterialExtAccordion.prototype.command = function( detail ) {\n\n    const openTab = tabElement => {\n\n      if(tabElement === undefined) {\n        this.openTabs_();\n      }\n      else if(tabElement !== null) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() !== 'true') {\n          this.toggleTab_(panel, tab, tabpanel);\n        }\n      }\n    };\n\n    const closeTab = tabElement => {\n      if(tabElement === undefined) {\n        this.closeTabs_();\n      }\n      else if(tabElement !== null) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n\n        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n          this.toggleTab_(panel, tab, tabpanel);\n        }\n      }\n    };\n\n    const toggleTab = tabElement => {\n      if(tabElement) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n        this.toggleTab_(panel, tab, tabpanel);\n      }\n    };\n\n\n    if(detail && detail.action) {\n      const { action, target } = detail;\n\n      switch (action.toLowerCase()) {\n        case 'open':\n          openTab(target);\n          break;\n        case 'close':\n          closeTab(target);\n          break;\n        case 'toggle':\n          toggleTab(target);\n          break;\n        case 'upgrade':\n          if(target) {\n            this.upgradeTab(target);\n          }\n          break;\n        default:\n          throw new Error(`Unknown action \"${action}\". Action must be one of \"open\", \"close\", \"toggle\" or \"upgrade\"`);\n      }\n    }\n  };\n  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtAccordion.prototype.init = function() {\n    if (this.element_) {\n      // Do the init required for this component to work\n      if( !(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {\n        throw new Error(`Accordion must have one of the classes \"${ACCORDION_HORIZONTAL}\" or \"${ACCORDION_VERTICAL}\"`);\n      }\n\n      this.element_.setAttribute('role', 'tablist');\n\n      if(!this.element_.hasAttribute(ARIA_MULTISELECTABLE)) {\n        this.element_.setAttribute(ARIA_MULTISELECTABLE, 'false');\n      }\n\n      this.element_.removeEventListener('command', this.commandHandler_);\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\n      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)].forEach( panel => this.upgradeTab(panel) );\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {\n     'use strict';\n     console.log('***** MaterialExtAccordion.mdlDowngrade');\n   };\n   */\n\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtAccordion,\n    classAsString: 'MaterialExtAccordion',\n    cssClass: 'mdlext-js-accordion',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/accordion/accordion.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * Image carousel\n */\n\nimport intervalFunction from '../utils/interval-function';\nimport { inOutQuintic } from '../utils/easing';\nimport { jsonStringToObject} from '../utils/json-utils';\nimport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_PAGE_UP,\n  VK_PAGE_DOWN,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n  IS_FOCUSED,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n} from '../utils/constants';\n\nconst MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';\n\n\n(function() {\n  'use strict';\n\n  //const CAROUSEL = 'mdlext-carousel';\n  const SLIDE      = 'mdlext-carousel__slide';\n  const ROLE       = 'list';\n  const SLIDE_ROLE = 'listitem';\n\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtCarousel = function MaterialExtCarousel(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Default config\n    this.config_ = {\n      interactive  : true,\n      autostart    : false,\n      type         : 'slide',\n      interval     : 1000,\n      animationLoop: intervalFunction(1000)\n    };\n\n    this.scrollAnimation_ = intervalFunction(33);\n\n    // Initialize instance.\n    this.init();\n  };\n\n  window['MaterialExtCarousel'] = MaterialExtCarousel;\n\n\n  /**\n   * Start slideshow animation\n   * @private\n   */\n  MaterialExtCarousel.prototype.startSlideShow_ = function() {\n\n    const nextSlide = () => {\n      let slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);\n      if(slide) {\n        slide.removeAttribute('aria-selected');\n        slide = slide.nextElementSibling;\n      }\n      if(!slide) {\n        slide = this.element_.querySelector(`.${SLIDE}:first-child`);\n        this.animateScroll_(0);\n      }\n      if(slide) {\n        this.moveSlideIntoViewport_(slide);\n        slide.setAttribute('aria-selected', '');\n        this.emitSelectEvent_('next', null, slide);\n        return true;\n      }\n      return false;\n    };\n\n    const nextScroll = direction => {\n      let nextDirection = direction;\n\n      if('next' === direction &&  this.element_.scrollLeft === this.element_.scrollWidth - this.element_.clientWidth) {\n        nextDirection = 'prev';\n      }\n      else if(this.element_.scrollLeft === 0) {\n        nextDirection = 'next';\n      }\n      const x = 'next' === nextDirection\n        ?  Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth)\n        :  Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n\n      this.animateScroll_(x, 1000);\n      return nextDirection;\n    };\n\n\n    if(!this.config_.animationLoop.started) {\n      this.config_.animationLoop.interval = this.config_.interval;\n      let direction = 'next';\n\n      if('scroll' === this.config_.type) {\n        this.config_.animationLoop.start( () => {\n          direction = nextScroll(direction);\n          return true; // It runs until cancelSlideShow_ is triggered\n        });\n      }\n      else {\n        nextSlide();\n        this.config_.animationLoop.start( () => {\n          return nextSlide(); // It runs until cancelSlideShow_ is triggered\n        });\n      }\n    }\n\n    // TODO: Pause animation when carousel is not in browser viewport or user changes tab\n  };\n\n  /**\n   * Cancel slideshow if running. Emmits a 'pause' event\n   * @private\n   */\n  MaterialExtCarousel.prototype.cancelSlideShow_ = function() {\n    if(this.config_.animationLoop.started) {\n      this.config_.animationLoop.stop();\n      this.emitSelectEvent_('pause', VK_ESC, this.element_.querySelector(`.${SLIDE}[aria-selected]`));\n    }\n  };\n\n  /**\n   * Animate scroll\n   * @param newPosition\n   * @param newDuration\n   * @param completedCallback\n   * @private\n   */\n  MaterialExtCarousel.prototype.animateScroll_ = function( newPosition, newDuration, completedCallback ) {\n\n    const start = this.element_.scrollLeft;\n    const distance = newPosition - start;\n\n    if(distance !== 0) {\n      const duration = Math.max(Math.min(Math.abs(distance), newDuration||400), 100); // duration is between 100 and newDuration||400ms||distance\n      let t = 0;\n      this.scrollAnimation_.stop();\n      this.scrollAnimation_.start( timeElapsed => {\n        t += timeElapsed;\n        if(t < duration) {\n          this.element_.scrollLeft = inOutQuintic(t, start, distance, duration);\n          return true;\n        }\n        else {\n          this.element_.scrollLeft = newPosition;\n          if(completedCallback) {\n            completedCallback();\n          }\n          return false;\n        }\n      });\n    }\n    else {\n      if(completedCallback) {\n        completedCallback();\n      }\n    }\n  };\n\n  /**\n   * Execute commend\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.command_ = function( event ) {\n    let x = 0;\n    let slide = null;\n    const a = event.detail.action.toLowerCase();\n\n    // Cancel slideshow if running\n    this.cancelSlideShow_();\n\n    switch (a) {\n      case 'first':\n        slide = this.element_.querySelector(`.${SLIDE}:first-child`);\n        break;\n\n      case 'last':\n        x = this.element_.scrollWidth - this.element_.clientWidth;\n        slide = this.element_.querySelector(`.${SLIDE}:last-child`);\n        break;\n\n      case 'scroll-prev':\n        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n        break;\n\n      case 'scroll-next':\n        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);\n        break;\n\n      case 'next':\n      case 'prev':\n        slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);\n        if(slide) {\n          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;\n          this.setAriaSelected_(slide);\n          this.emitSelectEvent_(a, null,  slide);\n        }\n        return;\n\n      case 'play':\n        Object.assign(this.config_, event.detail);\n        this.startSlideShow_();\n        return;\n\n      case 'pause':\n        return;\n\n      default:\n        return;\n    }\n\n    this.animateScroll_(x, undefined, () => {\n      if ('scroll-next' === a || 'scroll-prev' === a) {\n        const slides = this.getSlidesInViewport_();\n        if (slides.length > 0) {\n          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];\n        }\n      }\n      this.setAriaSelected_(slide);\n      this.emitSelectEvent_(a, null, slide);\n    });\n  };\n\n  /**\n   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtCarousel.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n    if(event.detail && event.detail.action) {\n      this.command_(event);\n    }\n  };\n\n  /**\n   * Handle keypress\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.keyDownHandler_ = function(event) {\n\n    if (event && event.target && event.target !== this.element_) {\n\n      let action = 'first';\n\n      if ( event.keyCode === VK_HOME    || event.keyCode === VK_END\n        || event.keyCode === VK_PAGE_UP || event.keyCode === VK_PAGE_DOWN) {\n\n        event.preventDefault();\n        if (event.keyCode === VK_END) {\n          action = 'last';\n        }\n        else if (event.keyCode === VK_PAGE_UP) {\n          action = 'scroll-prev';\n        }\n        else if (event.keyCode === VK_PAGE_DOWN) {\n          action = 'scroll-next';\n        }\n\n        const cmd = new CustomEvent('select', {\n          detail: {\n            action: action,\n          }\n        });\n        this.command_(cmd);\n      }\n      else if ( event.keyCode === VK_TAB\n        || event.keyCode === VK_ENTER      || event.keyCode === VK_SPACE\n        || event.keyCode === VK_ARROW_UP   || event.keyCode === VK_ARROW_LEFT\n        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n\n        let slide = getSlide_(event.target);\n\n        if(!slide) {\n          return;\n        }\n\n        // Cancel slideshow if running\n        this.cancelSlideShow_();\n\n        switch (event.keyCode) {\n          case VK_ARROW_UP:\n          case VK_ARROW_LEFT:\n            action = 'prev';\n            slide = slide.previousElementSibling;\n            break;\n\n          case VK_ARROW_DOWN:\n          case VK_ARROW_RIGHT:\n            action = 'next';\n            slide = slide.nextElementSibling;\n            break;\n\n          case VK_TAB:\n            if (event.shiftKey) {\n              action = 'prev';\n              slide = slide.previousElementSibling;\n            }\n            else {\n              action = 'next';\n              slide = slide.nextElementSibling;\n            }\n            break;\n\n          case VK_SPACE:\n          case VK_ENTER:\n            action = 'select';\n            break;\n        }\n\n        if(slide) {\n          event.preventDefault();\n          setFocus_(slide);\n          this.emitSelectEvent_(action, event.keyCode, slide);\n        }\n      }\n    }\n  };\n\n  /**\n   * Handle dragging\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.dragHandler_ = function(event) {\n    event.preventDefault();\n\n    // Cancel slideshow if running\n    this.cancelSlideShow_();\n\n    let updating = false;\n    let rAFDragId = 0;\n\n    const startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n    let prevX = startX;\n    const targetElement = event.target;\n\n    const update = e => {\n      const currentX = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0));\n      const dx = prevX - currentX;\n\n      if(dx < 0) {\n        this.element_.scrollLeft = Math.max(this.element_.scrollLeft + dx, 0);\n      }\n      else if(dx > 0) {\n        this.element_.scrollLeft = Math.min(this.element_.scrollLeft + dx, this.element_.scrollWidth - this.element_.clientWidth);\n      }\n\n      prevX = currentX;\n      updating = false;\n    };\n\n    // drag handler\n    const drag = e => {\n      e.preventDefault();\n\n      if(!updating) {\n        rAFDragId = window.requestAnimationFrame( () => update(e));\n        updating = true;\n      }\n    };\n\n    // end drag handler\n    const endDrag = e => {\n      e.preventDefault();\n\n      this.element_.removeEventListener('mousemove', drag);\n      this.element_.removeEventListener('touchmove', drag);\n      window.removeEventListener('mouseup', endDrag);\n      window.removeEventListener('touchend', endDrag);\n\n      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/\n      window.cancelAnimationFrame(rAFDragId);\n\n      const slide = getSlide_(targetElement);\n      setFocus_(slide);\n      this.emitSelectEvent_('click', null,  slide);\n    };\n\n    this.element_.addEventListener('mousemove', drag);\n    this.element_.addEventListener('touchmove', drag);\n    window.addEventListener('mouseup', endDrag);\n    window.addEventListener('touchend',endDrag);\n  };\n\n  /**\n   * Handle click\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.clickHandler_ = function(event) {\n    // Click is handled by drag\n    event.preventDefault();\n  };\n\n  /**\n   * Handle focus\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.focusHandler_ = function(event) {\n    const slide = getSlide_(event.target);\n    if(slide) {\n      // The last focused/selected slide has 'aria-selected', even if focus is lost\n      this.setAriaSelected_(slide);\n      slide.classList.add(IS_FOCUSED);\n    }\n  };\n\n  /**\n   * Handle blur\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.blurHandler_ = function(event) {\n    const slide = getSlide_(event.target);\n    if(slide) {\n      slide.classList.remove(IS_FOCUSED);\n    }\n  };\n\n  /**\n   * Emits a custeom 'select' event\n   * @param command\n   * @param keyCode\n   * @param slide\n   * @private\n   */\n  MaterialExtCarousel.prototype.emitSelectEvent_ = function(command, keyCode, slide) {\n\n    if(slide) {\n      this.moveSlideIntoViewport_(slide);\n\n      const evt = new CustomEvent('select', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          command: command,\n          keyCode: keyCode,\n          source: slide\n        }\n      });\n      this.element_.dispatchEvent(evt);\n    }\n  };\n\n  /**\n   * Get the first visible slide in component viewport\n   * @private\n   */\n  MaterialExtCarousel.prototype.getSlidesInViewport_ = function() {\n    const carouselRect = this.element_.getBoundingClientRect();\n\n    const slidesInViewport = [...this.element_.querySelectorAll(`.${SLIDE}`)].filter( slide => {\n      const slideRect = slide.getBoundingClientRect();\n      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;\n    });\n    return slidesInViewport;\n  };\n\n  /**\n   * Move slide into component viewport - if needed\n   * @param slide\n   * @private\n   */\n  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function(slide) {\n    const carouselRect = this.element_.getBoundingClientRect();\n    const slideRect = slide.getBoundingClientRect();\n\n    if(slideRect.left < carouselRect.left) {\n      const x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);\n      this.animateScroll_(x);\n    }\n    else if(slideRect.right > carouselRect.right) {\n      const x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);\n      this.animateScroll_(x);\n    }\n  };\n\n\n  /**\n   * Removes 'aria-selected' from all slides in carousel\n   * @private\n   */\n  MaterialExtCarousel.prototype.setAriaSelected_ = function(slide) {\n    if(slide) {\n      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected]`)].forEach(\n        slide => slide.removeAttribute('aria-selected')\n      );\n      slide.setAttribute('aria-selected', '');\n    }\n  };\n\n  /**\n   * Removes event listeners\n   * @private\n   */\n  MaterialExtCarousel.prototype.removeListeners_ = function() {\n    this.element_.removeEventListener('focus', this.focusHandler_);\n    this.element_.removeEventListener('blur', this.blurHandler_);\n    this.element_.removeEventListener('keydown', this.keyDownHandler_);\n    this.element_.removeEventListener('mousedown', this.dragHandler_);\n    this.element_.removeEventListener('touchstart', this.dragHandler_);\n    this.element_.removeEventListener('click', this.clickHandler_, false);\n    this.element_.removeEventListener('command', this.commandHandler_);\n    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);\n  };\n\n\n  // Helpers\n  const getSlide_ = element => {\n    return element.closest(`.${SLIDE}`);\n  };\n\n  const setFocus_ = slide => {\n    if(slide) {\n      slide.focus();\n    }\n  };\n\n  const addRipple_ = slide => {\n    if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {\n      const rippleContainer = document.createElement('span');\n      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n      rippleContainer.classList.add(MDL_RIPPLE_EFFECT);\n      const ripple = document.createElement('span');\n      ripple.classList.add(MDL_RIPPLE);\n      rippleContainer.appendChild(ripple);\n\n      const img = slide.querySelector('img');\n      if (img) {\n        // rippleContainer blocks image title\n        rippleContainer.title = img.title;\n      }\n      slide.appendChild(rippleContainer);\n      componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);\n    }\n  };\n  // End helpers\n\n\n  // Public methods.\n\n  /**\n   * Cancel animation - if running.\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.stopAnimation = function() {\n    this.config_.animationLoop.stop();\n  };\n  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;\n\n\n  /**\n   * Upgrade slides\n   * Use if more list elements are added later (dynamically)\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.upgradeSlides = function() {\n\n    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n\n    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {\n\n      slide.setAttribute('role', SLIDE_ROLE);\n\n      if(this.config_.interactive) {\n        if(!slide.getAttribute('tabindex')) {\n          slide.setAttribute('tabindex', '0');\n        }\n        if (hasRippleEffect) {\n          addRipple_(slide);\n        }\n      }\n      else {\n        slide.setAttribute('tabindex', '-1');\n      }\n    });\n  };\n  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;\n\n\n  /**\n   * Get config object\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.getConfig = function() {\n    return this.config_;\n  };\n  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtCarousel.prototype.init = function() {\n\n    if (this.element_) {\n      // Config\n      if(this.element_.hasAttribute('data-config')) {\n        this.config_ = jsonStringToObject(this.element_.getAttribute('data-config'), this.config_);\n      }\n\n      // Wai-Aria\n      this.element_.setAttribute('role', ROLE);\n\n      // Prefer tabindex -1\n      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {\n        this.element_.setAttribute('tabindex', -1);\n      }\n\n      // Remove listeners, just in case ...\n      this.removeListeners_();\n\n      if(this.config_.interactive) {\n\n        // Ripple\n        const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n        if (hasRippleEffect) {\n          this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n        }\n\n        // Listen to focus/blur events\n        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);\n        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);\n\n        // Listen to keyboard events\n        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);\n\n        // Listen to drag events\n        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);\n        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);\n\n        // Listen to click events\n        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);\n      }\n\n      // Listen to custom 'command' event\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\n      // Slides collection\n      this.upgradeSlides();\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n\n      if(this.config_.autostart) {\n        // Start slideshow\n        this.startSlideShow_();\n      }\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtCarousel.prototype.mdlDowngrade_ = function() {\n    'use strict';\n    //console.log('***** MaterialExtCarousel.mdlDowngrade_');\n\n    // Stop animation - if any\n    this.stopAnimation();\n\n    // Remove listeners\n    this.removeListeners_();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtCarousel,\n    classAsString: 'MaterialExtCarousel',\n    cssClass: 'mdlext-js-carousel',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/carousel/carousel.js","/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * A collapsible is a component to mark expandable and collapsible regions.\n * The component use the aria-expanded state to indicate whether regions of\n * the content are collapsible, and to expose whether a region is currently\n * expanded or collapsed.\n * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions\n */\n\nimport {\n  IS_UPGRADED,\n  VK_SPACE,\n  VK_ENTER,\n} from '../utils/constants';\n\nimport { randomString } from '../utils/string-utils';\nimport { getParentElements, isFocusable } from '../utils/dom-utils';\n\nconst JS_COLLAPSIBLE = 'mdlext-js-collapsible';\nconst COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';\nconst COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';\nconst COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';\n\n/**\n * The collapsible component\n */\n\nclass Collapsible {\n  element_ = null;\n  controlElement_ = null;\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that this component is connected to.\n   */\n  constructor(element) {\n    this.element_ = element;\n    this.init();\n  }\n\n  keyDownHandler = event => {\n    if (event.keyCode === VK_ENTER || event.keyCode === VK_SPACE) {\n      event.preventDefault();\n\n      // Trigger click\n      (event.target || this.controlElement).dispatchEvent(\n        new MouseEvent('click', {\n          bubbles: true,\n          cancelable: true,\n          view: window\n        })\n      );\n    }\n  };\n\n  clickHandler = event => {\n    if(!this.isDisabled) {\n      if(event.target !== this.controlElement) {\n        // Do not toggle if a focusable element inside the control element triggered the event\n        const p = getParentElements(event.target, this.controlElement);\n        p.push(event.target);\n        if(p.find( el => isFocusable(el))) {\n          return;\n        }\n      }\n      this.toggle();\n    }\n  };\n\n  get element() {\n    return this.element_;\n  }\n\n  get controlElement() {\n    return this.controlElement_;\n  }\n\n  get isDisabled() {\n    return (this.controlElement.hasAttribute('disabled') &&\n      this.controlElement.getAttribute('disabled').toLowerCase() !== 'false') ||\n      (this.controlElement.hasAttribute('aria-disabled') &&\n      this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false');\n  }\n\n  get isExpanded() {\n    return this.controlElement.hasAttribute('aria-expanded') &&\n      this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';\n  }\n\n  get regionIds() {\n    return this.controlElement.hasAttribute('aria-controls')\n      ? this.controlElement.getAttribute('aria-controls').split(' ')\n      : [];\n  }\n\n  get regionElements() {\n    return this.regionIds\n      .map(id => document.querySelector(`#${id}`))\n      .filter( el => el != null);\n  }\n\n  collapse() {\n    if(!this.isDisabled && this.isExpanded) {\n      if(this.dispatchToggleEvent('collapse')) {\n        this.controlElement.setAttribute('aria-expanded', 'false');\n        const regions = this.regionElements.slice(0);\n        for (let i = regions.length - 1; i >= 0; --i) {\n          regions[i].setAttribute('hidden', '');\n        }\n      }\n    }\n  }\n\n  expand() {\n    if(!this.isDisabled && !this.isExpanded) {\n      if(this.dispatchToggleEvent('expand')) {\n        this.controlElement.setAttribute('aria-expanded', 'true');\n        this.regionElements.forEach(region => region.removeAttribute('hidden'));\n      }\n    }\n  }\n\n  toggle() {\n    if (this.isExpanded) {\n      this.collapse();\n    }\n    else {\n      this.expand();\n    }\n  }\n\n  dispatchToggleEvent(action) {\n    return this.element.dispatchEvent(\n      new CustomEvent('toggle', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          action: action\n        }\n      })\n    );\n  }\n\n  disableToggle() {\n    this.controlElement.setAttribute('aria-disabled', true);\n  }\n\n  enableToggle() {\n    this.controlElement.removeAttribute('aria-disabled');\n  }\n\n  addRegionId(regionId) {\n    const ids = this.regionIds;\n    if(!ids.find(id => regionId === id)) {\n      ids.push(regionId);\n      this.controlElement.setAttribute('aria-controls', ids.join(' '));\n    }\n  }\n\n  addRegionElement(region) {\n    if(!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||\n      region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {\n      region.classList.add(COLLAPSIBLE_GROUP_CLASS);\n    }\n\n    if(!region.hasAttribute('role')) {\n      const role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';\n      region.setAttribute('role', role);\n    }\n\n    if(!region.hasAttribute('id')) {\n      region.id = `${region.getAttribute('role')}-${randomString()}`;\n    }\n\n    if(this.isExpanded) {\n      region.removeAttribute('hidden');\n    }\n    else {\n      region.setAttribute('hidden', '');\n    }\n    this.addRegionId(region.id);\n  }\n\n  removeRegionElement(region) {\n    if(region && region.id) {\n      const ids = this.regionIds.filter(id => id === region.id);\n      this.controlElement.setAttribute('aria-controls', ids.join(' '));\n    }\n  }\n\n  removeListeners() {\n    this.controlElement.removeEventListener('keydown', this.keyDownHandler);\n    this.controlElement.removeEventListener('click', this.clickHandler);\n  }\n\n  init() {\n    const initControl = () => {\n      // Find the button element\n      this.controlElement_ = this.element.querySelector(`.${COLLAPSIBLE_CONTROL_CLASS}`) || this.element;\n\n      // Add \"aria-expanded\" attribute if not present\n      if(!this.controlElement.hasAttribute('aria-expanded')) {\n        this.controlElement.setAttribute('aria-expanded', 'false');\n      }\n\n      // Add role=button if control != <button>\n      if(this.controlElement.nodeName.toLowerCase() !== 'button') {\n        this.controlElement.setAttribute('role', 'button');\n      }\n\n      // Add tabindex\n      if(!isFocusable(this.controlElement) && !this.controlElement.hasAttribute('tabindex')) {\n        this.controlElement.setAttribute('tabindex', '0');\n      }\n    };\n\n    const initRegions = () => {\n      let regions = [];\n      if(!this.controlElement.hasAttribute('aria-controls')) {\n        // Add siblings as collapsible region(s)\n        let r = this.element.nextElementSibling;\n        while(r) {\n          if(r.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||\n            r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {\n            regions.push(r);\n          }\n          else if(r.classList.contains(JS_COLLAPSIBLE)) {\n            // A new collapsible component\n            break;\n          }\n          r = r.nextElementSibling;\n        }\n      }\n      else {\n        regions = this.regionElements;\n      }\n      regions.forEach(region => this.addRegionElement(region));\n    };\n\n    const addListeners = () => {\n      this.controlElement.addEventListener('keydown', this.keyDownHandler);\n      this.controlElement.addEventListener('click', this.clickHandler);\n    };\n\n    initControl();\n    initRegions();\n    this.removeListeners();\n    addListeners();\n  }\n\n  downgrade() {\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtCollapsible = function MaterialExtCollapsible(element) {\n    this.element_ = element;\n    this.collapsible = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtCollapsible'] = MaterialExtCollapsible;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtCollapsible.prototype.init = function() {\n    if (this.element_) {\n      this.collapsible = new Collapsible(this.element_);\n      this.element_.classList.add(IS_UPGRADED);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtCollapsible.prototype.mdlDowngrade_ = function() {\n    this.collapsible.downgrade();\n  };\n\n\n  // Public methods.\n\n  /**\n   * Get control element.\n   * @return {HTMLElement} element The element that controls the collapsible region.\n   * @public\n   */\n  MaterialExtCollapsible.prototype.getControlElement = function() {\n    return this.collapsible.controlElement;\n  };\n  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;\n\n  /**\n   * Get region elements controlled by this collapsible\n   * @returns {Array<HTMLElement>} the collapsible region elements\n   * @public\n   */\n  MaterialExtCollapsible.prototype.getRegionElements = function() {\n    return this.collapsible.regionElements;\n  };\n  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;\n\n  /**\n   * Add region elements.\n   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.addRegionElements = function(...elements) {\n    elements.forEach(element => this.collapsible.addRegionElement(element));\n  };\n  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;\n\n  /**\n   * Remove collapsible region(s) from component.\n   * Note: This operation does not delete the element from the DOM tree.\n   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n   * @public\n   */\n  MaterialExtCollapsible.prototype.removeRegionElements = function(...elements) {\n    elements.forEach(element => this.collapsible.removeRegionElement(element));\n  };\n  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;\n\n  /**\n   * Expand collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.expand = function() {\n    this.collapsible.expand();\n  };\n  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;\n\n  /**\n   * Collapse collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.collapse = function() {\n    this.collapsible.collapse();\n  };\n  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;\n\n  /**\n   * Toggle collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.toggle = function() {\n    this.collapsible.toggle();\n  };\n  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;\n\n  /**\n   * Check whether component has aria-expanded state true\n   * @return {Boolean} true if aria-expanded=\"true\", otherwise false\n   */\n  MaterialExtCollapsible.prototype.isExpanded = function() {\n    return this.collapsible.isExpanded;\n  };\n  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;\n\n  /**\n   * Check whether component has aria-disabled state set to true\n   * @return {Boolean} true if aria-disabled=\"true\", otherwise false\n   */\n  MaterialExtCollapsible.prototype.isDisabled = function() {\n    return this.collapsible.isDisabled;\n  };\n  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;\n\n  /**\n   * Disables toggling of collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.disableToggle = function() {\n    this.collapsible.disableToggle();\n  };\n  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;\n\n  /**\n   * Enables toggling of collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.enableToggle = function() {\n    this.collapsible.enableToggle();\n  };\n  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtCollapsible,\n    classAsString: 'MaterialExtCollapsible',\n    cssClass: JS_COLLAPSIBLE,\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/collapsible/collapsible.js","/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\nimport {jsonStringToObject} from '../utils/json-utils';\nimport {\n  IS_UPGRADED,\n} from '../utils/constants';\n\nconst JS_FORMAT_FIELD = 'mdlext-js-formatfield';\nconst FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';\n\n/**\n * Detect browser locale\n * @returns {string} the locale\n * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference\n */\nconst browserLanguage = () => {\n  return navigator.languages\n    ? navigator.languages[0]\n    : navigator.language || navigator.userLanguage;\n};\n\n/**\n * The formatfield  formats an input field  using language sensitive number formatting.\n */\n\nclass FormatField {\n  static timer = null;\n\n  element_;\n  input_;\n  options_ = {};\n  intlGroupSeparator_;\n  intlDecimalSeparator_;\n\n  constructor(element) {\n    this.element_ = element;\n    this.init();\n  }\n\n  clickHandler = () => {\n    clearTimeout(FormatField.timer);\n  };\n\n  focusInHandler = () => {\n    if(!(this.input.readOnly || this.input.disabled)) {\n      this.input.value = this.unformatInput();\n      //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);\n      FormatField.timer = setTimeout(() => this.input.select(), 200);\n    }\n  };\n\n  focusOutHandler = () => {\n    clearTimeout(FormatField.timer);\n\n    if(!(this.input.readOnly || this.input.disabled)) {\n      this.formatValue();\n    }\n  };\n\n  get element() {\n    return this.element_;\n  }\n\n  get input() {\n    return this.input_;\n  }\n\n  get options() {\n    return this.options_;\n  }\n\n  stripSeparatorsFromValue() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '')\n      .replace(this.options.decimalSeparator, '.');\n      //.replace(this.intlGroupSeparator_, ''),\n      //.replace(this.intlDecimalSeparator_, '.');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  fixSeparators(value) {\n    const doReplace = () => value\n      .replace(new RegExp(this.intlGroupSeparator_, 'g'), this.options.groupSeparator)\n      .replace(this.intlDecimalSeparator_, this.options.decimalSeparator);\n\n    return value ? doReplace() : value;\n  }\n\n  formatValue() {\n    if(this.input.value) {\n      const v = new Intl.NumberFormat(this.options.locales, this.options)\n        .format(this.stripSeparatorsFromValue());\n\n      if('NaN' !== v) {\n        this.input.value = this.fixSeparators(v);\n      }\n    }\n  }\n\n  unformat() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '')\n      .replace(this.options.decimalSeparator, '.');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  unformatInput() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  removeListeners() {\n    this.input.removeEventListener('click', this.clickHandler);\n    this.input.removeEventListener('focusin', this.focusInHandler);\n    this.input.removeEventListener('focusout', this.focusOutHandler);\n  }\n\n  init() {\n    const addListeners = () => {\n      this.input.addEventListener('click', this.clickHandler);\n      this.input.addEventListener('focusin', this.focusInHandler);\n      this.input.addEventListener('focusout', this.focusOutHandler);\n    };\n\n    const addOptions = () => {\n      const opts = this.element.getAttribute('data-formatfield-options') ||\n        this.input.getAttribute('data-formatfield-options');\n      if(opts) {\n        this.options_ = jsonStringToObject(opts, this.options);\n      }\n    };\n\n    const addLocale = () => {\n      if(!this.options.locales) {\n        this.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',\n      }\n    };\n\n    const addGrouping = () => {\n      const s = (1234.5).toLocaleString(this.options.locales, {\n        style: 'decimal',\n        useGrouping: true,\n        minimumFractionDigits: 1,\n        maximumFractionDigits: 1\n      });\n\n      this.intlGroupSeparator_ = s.charAt(1);\n      this.intlDecimalSeparator_ = s.charAt(s.length-2);\n      this.options.groupSeparator = this.options.groupSeparator || this.intlGroupSeparator_;\n      this.options.decimalSeparator = this.options.decimalSeparator || this.intlDecimalSeparator_;\n\n      if(this.options.groupSeparator === this.options.decimalSeparator) {\n        const e = `Error! options.groupSeparator, \"${this.options.groupSeparator}\" ` +\n          'and options.decimalSeparator, ' +\n          `\"${this.options.decimalSeparator}\" should not be equal`;\n        throw new Error(e);\n      }\n    };\n\n    this.input_ = this.element.querySelector('input') || this.element;\n\n    addOptions();\n    addLocale();\n    addGrouping();\n    this.formatValue();\n    addListeners();\n  }\n\n  downgrade() {\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtFormatfield = function MaterialExtFormatfield(element) {\n    this.element_ = element;\n    this.formatField_ = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtFormatfield'] = MaterialExtFormatfield;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtFormatfield.prototype.init = function() {\n    if (this.element_) {\n      this.element_.classList.add(IS_UPGRADED);\n      this.formatField_ = new FormatField(this.element_);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n    }\n  };\n\n  /**\n   * Get options object\n   *\n   * @public\n   *\n   * @returns {Object} the options object\n   */\n  MaterialExtFormatfield.prototype.getOptions = function() {\n    return this.formatField_.options;\n  };\n  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;\n\n\n  /**\n   * A unformatted value is a string value where the locale specific decimal separator\n   * is replaced with a '.' separator and group separators are stripped.\n   * The returned value is suitable for parsing to a JavaScript numerical value.\n   *\n   * @example\n   * input.value = '1 234,5';\n   * inputElement.MaterialExtFormatfield.getUnformattedValue();\n   * // Returns '1234.5'\n   *\n   * @public\n   *\n   * @returns {String} the unformatted value\n   */\n  MaterialExtFormatfield.prototype.getUnformattedValue = function() {\n    return this.formatField_.unformat();\n  };\n  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtFormatfield.prototype.mdlDowngrade_ = function() {\n    this.formatField_.downgrade();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtFormatfield,\n    classAsString: FORMAT_FIELD_COMPONENT,\n    cssClass: JS_FORMAT_FIELD,\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/formatfield/formatfield.js","import './utils';\nimport './accordion/accordion';\nimport './collapsible/collapsible';\nimport './carousel/carousel';\nimport './lightboard/lightboard';\nimport './lightbox/lightbox';\nimport './menu-button/menu-button';\nimport './selectfield/selectfield';\nimport './formatfield/formatfield';\nimport './sticky-header/sticky-header';\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A lightboard is a translucent surface illuminated from behind, used for situations\n * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n */\n\nimport {\n  VK_ENTER,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n} from '../utils/constants';\n\nconst MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container';\n\n(function() {\n  'use strict';\n\n  //const LIGHTBOARD = 'mdlext-lightboard';\n  const LIGHTBOARD_ROLE = 'grid';\n  const SLIDE = 'mdlext-lightboard__slide';\n  const SLIDE_ROLE  = 'gridcell';\n  const SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtLightboard = function MaterialExtLightboard(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtLightboard'] = MaterialExtLightboard;\n\n\n  // Helpers\n  const getSlide = element => {\n    return element ? element.closest(`.${SLIDE}`) : null;\n  };\n\n\n\n  // Private methods.\n\n  /**\n   * Select a slide, i.e. set aria-selected=\"true\"\n   * @param element\n   * @private\n   */\n  MaterialExtLightboard.prototype.selectSlide_ = function(element) {\n    const slide = getSlide(element);\n    if( slide && !slide.hasAttribute('aria-selected') ) {\n      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected=\"true\"]`)]\n        .forEach(selectedSlide => selectedSlide.removeAttribute('aria-selected'));\n\n      slide.setAttribute('aria-selected', 'true');\n    }\n  };\n\n\n  /**\n   * Dispatch select event\n   * @param {Element} slide The slide that caused the event\n   * @private\n   */\n  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function ( slide ) {\n    this.element_.dispatchEvent(\n      new CustomEvent('select', {\n        bubbles: true,\n        cancelable: true,\n        detail: { source: slide }\n      })\n    );\n  };\n\n  /**\n   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtLightboard.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if(event && event.detail) {\n      this.command(event.detail);\n    }\n  };\n\n\n  // Public methods\n\n  /**\n   * Initialize lightboard slides\n   * @public\n   */\n  MaterialExtLightboard.prototype.upgradeSlides = function() {\n\n    const addRipple = slide => {\n      // Use slide frame as ripple container\n      if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {\n        const a = slide.querySelector(`.${SLIDE_TABSTOP}`);\n        if(a) {\n          const rippleContainer = a;\n          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n          rippleContainer.classList.add(MDL_RIPPLE_EFFECT);\n          const ripple = document.createElement('span');\n          ripple.classList.add(MDL_RIPPLE);\n          rippleContainer.appendChild(ripple);\n          componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);\n        }\n      }\n    };\n\n    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n\n    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {\n\n      slide.setAttribute('role', SLIDE_ROLE);\n\n      if(!slide.querySelector('a')) {\n        slide.setAttribute('tabindex', '0');\n      }\n      if(hasRippleEffect) {\n        addRipple(slide);\n      }\n    });\n  };\n  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;\n\n\n  /**\n   * Execute command\n   * @param detail\n   * @public\n   */\n  MaterialExtLightboard.prototype.command = function( detail ) {\n\n    const firstSlide = () => {\n      return this.element_.querySelector(`.${SLIDE}:first-child`);\n    };\n\n    const lastSlide = () => {\n      return this.element_.querySelector(`.${SLIDE}:last-child`);\n    };\n\n    const nextSlide = () => {\n      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected=\"true\"]`).nextElementSibling;\n      return slide ? slide : firstSlide();\n    };\n\n    const prevSlide = () => {\n      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected=\"true\"]`).previousElementSibling;\n      return slide ? slide : lastSlide();\n    };\n\n    if(detail && detail.action) {\n\n      const { action, target } = detail;\n\n      let slide;\n      switch (action.toLowerCase()) {\n        case 'select':\n          slide = getSlide(target);\n          this.dispatchSelectEvent_(slide);\n          break;\n        case 'first':\n          slide = firstSlide();\n          break;\n        case 'next':\n          slide = nextSlide();\n          break;\n        case 'prev':\n          slide = prevSlide();\n          break;\n        case 'last':\n          slide = lastSlide();\n          break;\n        case 'upgrade':\n          this.upgradeSlides();\n          break;\n        default:\n          throw new Error(`Unknown action \"${action}\". Action must be one of \"first\", \"next\", \"prev\", \"last\", \"select\" or \"upgrade\"`);\n      }\n\n      if (slide) {\n        const a = slide.querySelector('a');\n        if (a) {\n          a.focus();\n        }\n        else {\n          slide.focus();\n        }\n\n        // Workaround for JSDom testing:\n        // In JsDom 'element.focus()' does not trigger any focus event\n        if(!slide.hasAttribute('aria-selected')) {\n          this.selectSlide_(slide);\n        }\n\n      }\n    }\n  };\n  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtLightboard.prototype.init = function() {\n\n    const keydownHandler = event => {\n\n      if(event.target !== this.element_) {\n        let action;\n        let target;\n        switch (event.keyCode) {\n          case VK_HOME:\n            action = 'first';\n            break;\n          case VK_END:\n            action = 'last';\n            break;\n          case VK_ARROW_UP:\n          case VK_ARROW_LEFT:\n            action = 'prev';\n            break;\n          case VK_ARROW_DOWN:\n          case VK_ARROW_RIGHT:\n            action = 'next';\n            break;\n          case VK_ENTER:\n          case VK_SPACE:\n            action = 'select';\n            target = event.target;\n            break;\n        }\n        if(action)  {\n          event.preventDefault();\n          event.stopPropagation();\n          this.command( { action: action, target: target } );\n        }\n      }\n    };\n\n    const clickHandler = event => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if(event.target !== this.element_) {\n        this.command( { action: 'select', target: event.target } );\n      }\n    };\n\n    const focusHandler = event => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if(event.target !== this.element_) {\n        this.selectSlide_(event.target);\n      }\n    };\n\n\n    if (this.element_) {\n      this.element_.setAttribute('role', LIGHTBOARD_ROLE);\n\n      if (this.element_.classList.contains(MDL_RIPPLE_EFFECT)) {\n        this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n      }\n\n      // Remove listeners, just in case ...\n      this.element_.removeEventListener('command', this.commandHandler_);\n      this.element_.removeEventListener('keydown', keydownHandler);\n      this.element_.removeEventListener('click', clickHandler);\n      this.element_.removeEventListener('focus', focusHandler);\n\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n      this.element_.addEventListener('keydown', keydownHandler, true);\n      this.element_.addEventListener('click', clickHandler, true);\n      this.element_.addEventListener('focus', focusHandler, true);\n\n      this.upgradeSlides();\n\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  /* jshint undef:false */\n  componentHandler.register({\n    constructor: MaterialExtLightboard,\n    classAsString: 'MaterialExtLightboard',\n    cssClass: 'mdlext-js-lightboard',\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/lightboard/lightboard.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * Responsive Lightbox\n */\n\nimport fullThrottle from '../utils/full-throttle';\nimport {\n  VK_ESC,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED\n} from '../utils/constants';\n\n(function() {\n  'use strict';\n\n  const LIGHTBOX = 'mdlext-lightbox';\n  const LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';\n  const LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';\n  const STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';\n  const BUTTON = 'mdl-button';\n\n  /**\n   * https://github.com/google/material-design-lite/issues/4205\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtLightbox = function MaterialExtLightbox(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtLightbox'] = MaterialExtLightbox;\n\n\n  /**\n   * Handle keypress\n   * @param event\n   * @private\n   */\n  MaterialExtLightbox.prototype.keyDownHandler_ = function(event) {\n\n    if (event) {\n      if ( event.keyCode === VK_ESC || event.keyCode === VK_SPACE\n        || event.keyCode === VK_END || event.keyCode === VK_HOME\n        || event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT\n        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n\n        if(event.keyCode !== VK_ESC) {\n          event.preventDefault();\n          event.stopPropagation();\n        }\n\n        let action = 'first';\n        if (event.keyCode === VK_END) {\n          action = 'last';\n        }\n        else if (event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT) {\n          action = 'prev';\n        }\n        else if (event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n          action = 'next';\n        }\n        else if (event.keyCode === VK_SPACE) {\n          action = 'select';\n        }\n        else if (event.keyCode === VK_ESC) {\n          action = 'cancel';\n        }\n\n        dispatchAction_(action, this);\n      }\n    }\n  };\n\n  /**\n   * Handle button clicks\n   * @param event\n   * @private\n   */\n  MaterialExtLightbox.prototype.buttonClickHandler_ = function(event) {\n\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      dispatchAction_(this.getAttribute('data-action') || '', this);\n\n      const n = this.closest(`.${LIGHTBOX}`);\n      if(n) {\n        n.focus();\n      }\n    }\n  };\n\n  /**\n   * Dispatches an action custom event\n   * @param action\n   * @param source\n   * @param target\n   * @private\n   */\n  const dispatchAction_ = (action, source, target = source) => {\n\n    target.dispatchEvent(new CustomEvent('action', {\n      bubbles: true,\n      cancelable: true,\n      detail: {\n        action: action || '',\n        source: source\n      }\n    }));\n  };\n\n  /**\n   * Reposition dialog if component parent element is \"DIALOG\"\n   * @param lightboxElement\n   * @private\n   */\n  const repositionDialog_ = lightboxElement => {\n    const footerHeight = (footer, isSticky) => isSticky && footer ? footer.offsetHeight : 0;\n\n    const reposition = (dialog, fh) => {\n      if (window.getComputedStyle(dialog).position === 'absolute') {\n        const scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n        const topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;\n        dialog.style.top = `${Math.max(scrollTop, topValue)}px`;\n      }\n    };\n\n    const p = lightboxElement.parentNode;\n    const dialog = p && p.nodeName === 'DIALOG' ? p : null;\n\n    if(dialog && dialog.hasAttribute('open')) {\n      lightboxElement.style.width = 'auto';\n      lightboxElement.style.maxWidth = '100%';\n      const img = lightboxElement.querySelector('img');\n      if(img) {\n        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? `${img.naturalWidth}px` : `${img.width}px` || '100%';\n      }\n\n      const fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));\n      const vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;\n      if (dialog.offsetHeight > vh) {\n        let n = 0;\n        while(dialog.offsetHeight > vh && ++n < 4) {\n          lightboxElement.style.width = `${lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight}px`;\n        }\n      }\n      reposition(dialog, fh);\n    }\n  };\n\n  /**\n   * Handle image load\n   * @param event\n   * @private\n   */\n\n  MaterialExtLightbox.prototype.imgLoadHandler_ = function( /*event*/ ) {\n    repositionDialog_(this);\n  };\n\n\n  /**\n   * Handle image drag\n   * @param event\n   * @private\n     */\n  MaterialExtLightbox.prototype.imgDragHandler_ = function(event ) {\n\n    const setStyles = ( element, properties ) => {\n      //noinspection JSAnnotator\n      for(const [key, value] of Object.entries(properties)) {\n        element.style[key] = value;\n      }\n      // ... or:\n      //for (const key in properties) {\n      //  element.style[key] = properties[key];\n      //}\n    };\n\n    event.preventDefault();\n    //event.stopPropagation();\n\n    const x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n\n    const img = this;\n    img.style.opacity = '0.2';\n\n    const slider = document.createElement('div');\n    slider.classList.add(LIGHTBOX_SLIDER);\n    setStyles(slider, {'width': `${img.offsetWidth}px`, 'height': `${img.offsetHeight}px`} );\n\n    let slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    slide.textContent = '>';\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'line-height'     : `${img.offsetHeight}px`,\n      'font-size'       : `${img.offsetHeight/4}px`,\n      'text-align'      : 'right',\n      'background-image': `url(\"${img.getAttribute('data-img-url-prev') || ''}\")`\n    });\n    slider.appendChild(slide);\n\n    slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'background-image': `url(\"${img.src}\")`\n    });\n    slider.appendChild(slide);\n\n    slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    slide.textContent = '<';\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'line-height'     : `${img.offsetHeight}px`,\n      'font-size'       : `${img.offsetHeight/4}px`,\n      'text-align'      : 'left',\n      'background-image': `url(\"${img.getAttribute('data-img-url-next') || ''}\")`\n    });\n    slider.appendChild(slide);\n\n    img.parentNode.appendChild(slider);\n\n\n    // drag handler\n    const drag = e => {\n      e.preventDefault();\n      const dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance\n\n      if(slider.offsetWidth - Math.abs(dx) > 19) {\n        slider.style.left = `${dx}px`;\n      }\n    };\n\n    // end drag handler\n    const endDrag = e => {\n      e.preventDefault();\n      //e.stopPropagation();\n\n      window.removeEventListener('mousemove', drag);\n      window.removeEventListener('touchmove', drag);\n      window.removeEventListener('mouseup', endDrag);\n      window.removeEventListener('touchend', endDrag);\n\n      const dx = slider.offsetLeft;\n      img.parentNode.removeChild(slider);\n      img.style.opacity = '1.0';\n\n      if(Math.abs(dx) > 19) {\n        dispatchAction_( (dx > 0 ? 'prev' : 'next') , img);\n      }\n    };\n\n    window.addEventListener('mousemove', drag);\n    window.addEventListener('touchmove', drag);\n    window.addEventListener('mouseup', endDrag);\n    window.addEventListener('touchend',endDrag);\n  };\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtLightbox.prototype.init = function() {\n\n    if (this.element_) {\n      // Do the init required for this component to work\n      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);\n\n      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {\n        this.element_.setAttribute('tabindex', 1);\n      }\n\n      [...this.element_.querySelectorAll(`.${BUTTON}`)].forEach( button =>\n        button.addEventListener('click', this.buttonClickHandler_.bind(button), false)\n      );\n\n      const figcaption = this.element_.querySelector('figcaption');\n      if(figcaption) {\n        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);\n      }\n\n      const footer = this.element_.querySelector('footer');\n      if(footer) {\n        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);\n      }\n\n      const img = this.element_.querySelector('img');\n      if(img) {\n        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);\n        img.addEventListener('click', e => e.preventDefault(), true);\n        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);\n        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);\n      }\n      window.addEventListener('resize', fullThrottle( () => repositionDialog_(this.element_) ));\n      window.addEventListener('orientationchange', () => repositionDialog_(this.element_));\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {\n  };\n  */\n\n  /**\n   * The component registers itself. It can assume componentHandler is available in the global scope.\n   */\n  /* jshint undef:false */\n  componentHandler.register({\n    constructor: MaterialExtLightbox,\n    classAsString: 'MaterialExtLightbox',\n    cssClass: 'mdlext-js-lightbox'\n  });\n\n})();\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/lightbox/lightbox.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * A menu button is a button that opens a menu. It is often styled as a\n * typical push button with a downward pointing arrow or triangle to hint\n * that activating the button will display a menu.\n */\nimport { randomString } from '../utils/string-utils';\nimport fullThrottle from '../utils/full-throttle';\nimport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n} from '../utils/constants';\n\nimport { getScrollParents, tether } from '../utils/dom-utils';\n\nconst JS_MENU_BUTTON = 'mdlext-js-menu-button';\nconst MENU_BUTTON_MENU = 'mdlext-menu';\nconst MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';\nconst MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';\n//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';\n\n/**\n * Creates the menu controlled by the menu button\n * @param element\n * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}\n */\n\nconst menuFactory = element => {\n\n  let ariaControls = null;\n  let parentNode = null;\n\n  const removeAllSelected = () => {\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}[aria-selected=\"true\"]`)]\n      .forEach(selectedItem => selectedItem.removeAttribute('aria-selected'));\n  };\n\n  const setSelected = (item, force=false) => {\n    if(force || (item && !item.hasAttribute('aria-selected'))) {\n      removeAllSelected();\n      if(item) {\n        item.setAttribute('aria-selected', 'true');\n      }\n    }\n  };\n\n  const getSelected = () => {\n    return element.querySelector(`.${MENU_BUTTON_MENU_ITEM}[aria-selected=\"true\"]`);\n  };\n\n  const isDisabled = item => item && item.hasAttribute('disabled');\n\n  const isSeparator = item => item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);\n\n  const focus = item => {\n    if(item) {\n      item = item.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n    }\n    if(item) {\n      item.focus();\n    }\n  };\n\n  const nextItem = current => {\n    let n = current.nextElementSibling;\n    if(!n) {\n      n = element.firstElementChild;\n    }\n    if(!isDisabled(n) && !isSeparator(n)) {\n      focus(n);\n    }\n    else {\n      let i = element.children.length;\n      while(n && i-- > 0) {\n        if(isDisabled(n) || isSeparator(n)) {\n          n = n.nextElementSibling;\n          if(!n) {\n            n = element.firstElementChild;\n          }\n        }\n        else {\n          focus(n);\n          break;\n        }\n      }\n    }\n  };\n\n  const previousItem = current => {\n    let p = current.previousElementSibling;\n    if(!p) {\n      p = element.lastElementChild;\n    }\n    if(!isDisabled(p) && !isSeparator(p)) {\n      focus(p);\n    }\n    else {\n      let i = element.children.length;\n      while(p && i-- > 0) {\n        if(isDisabled(p) || isSeparator(p)) {\n          p = p.previousElementSibling;\n          if(!p) {\n            p = element.lastElementChild;\n          }\n        }\n        else {\n          focus(p);\n          break;\n        }\n      }\n    }\n  };\n\n  const firstItem = () => {\n    const item = element.firstElementChild;\n    if(isDisabled(item) || isSeparator(item) ) {\n      nextItem(item);\n    }\n    else {\n      focus(item);\n    }\n  };\n\n  const lastItem = () => {\n    const item = element.lastElementChild;\n    if(isDisabled(item) || isSeparator(item)) {\n      previousItem(item);\n    }\n    else {\n      focus(item);\n    }\n  };\n\n  const selectItem = item => {\n    if(item && !isDisabled(item) && !isSeparator(item)) {\n      setSelected(item);\n      close(true, item);\n    }\n  };\n\n  const keyDownHandler = event => {\n\n    const item = event.target.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n\n    switch (event.keyCode) {\n      case VK_ARROW_UP:\n      case VK_ARROW_LEFT:\n        if(item) {\n          previousItem(item);\n        }\n        else {\n          firstItem();\n        }\n        break;\n\n      case VK_ARROW_DOWN:\n      case VK_ARROW_RIGHT:\n        if(item) {\n          nextItem(item);\n        }\n        else {\n          lastItem();\n        }\n        break;\n\n      case VK_HOME:\n        firstItem();\n        break;\n\n      case VK_END:\n        lastItem();\n        break;\n\n      case VK_SPACE:\n      case VK_ENTER:\n        selectItem(item);\n        break;\n\n      case VK_ESC:\n        close(true);\n        break;\n\n      case VK_TAB:\n        // We do not have a \"natural\" tab order from menu, so the best we can do is to set focus back to the button\n        close(true);\n        break;\n\n      default:\n        return;\n    }\n    event.preventDefault();\n  };\n\n\n  const blurHandler = event => {\n\n    // See: https://github.com/facebook/react/issues/2011\n    const t = event.relatedTarget ||\n      event.explicitOriginalTarget || // FF\n      document.activeElement;         // IE11\n\n    //console.log('***** blur, target, relatedTarget', event.target, t);\n\n    try {\n      if (t) {\n        if (t.closest(`.${MENU_BUTTON_MENU}`) !== element && shouldClose(t)) {\n          close();\n        }\n      }\n      else {\n        close();\n      }\n    }\n    catch(err) {\n      // FF throws error: \"TypeError: n.closest is not a function\" if related target is a text node\n      close();\n    }\n  };\n\n  const clickHandler = event => {\n    //console.log('***** click, target', event.target);\n\n    event.preventDefault();\n    const t = event.target;\n    if (t && t.closest(`.${MENU_BUTTON_MENU}`) === element) {\n      const item = t.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n      if (item) {\n        selectItem(item);\n      }\n    }\n    else {\n      if (shouldClose(t)) {\n        close();\n      }\n    }\n  };\n\n  const touchStartHandler = event => {\n    //console.log('***** touchStart, target', event.target);\n\n    const t = event.target;\n    if(!(t && t.closest(`.${MENU_BUTTON_MENU}`) === element)) {\n      if (event.type === 'touchstart') {\n        event.preventDefault();\n      }\n      close();\n    }\n  };\n\n  const addListeners = () => {\n    element.addEventListener('keydown', keyDownHandler, false);\n    element.addEventListener('blur', blurHandler, true);\n    element.addEventListener('click', clickHandler, true);\n    document.documentElement.addEventListener('touchstart', touchStartHandler, true);\n  };\n\n  const removeListeners = () => {\n    element.removeEventListener('keydown', keyDownHandler, false);\n    element.removeEventListener('blur', blurHandler, true);\n    element.removeEventListener('click', clickHandler, true);\n    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);\n  };\n\n  const open = (controlElement, position='first') => {\n\n    ariaControls = controlElement.closest(`.${JS_MENU_BUTTON}`);\n\n    element.style['min-width'] = `${Math.max(124, controlElement.getBoundingClientRect().width)}px`;\n    element.removeAttribute('hidden');\n    tether(controlElement, element);\n\n    let item;\n    switch (position.toLowerCase()) {\n      case 'first':\n        firstItem();\n        break;\n\n      case 'last':\n        lastItem();\n        break;\n\n      case 'selected':\n        item = getSelected();\n        if(item && !item.hasAttribute('disabled')) {\n          focus(item);\n        }\n        else {\n          firstItem();\n        }\n        break;\n    }\n\n    addListeners();\n  };\n\n\n  const shouldClose = target => {\n    //console.log('***** shouldClose');\n\n    let result = false;\n    const btn = (target && target.closest(`.${JS_MENU_BUTTON}`)) || null;\n    if(!btn) {\n      result = true;\n    }\n    else if(btn.getAttribute('aria-controls') === element.id) {\n      if(btn !== ariaControls) {\n        result = true;\n      }\n    }\n    else {\n      result = true;\n    }\n    return result;\n  };\n\n  const close = (forceFocus = false, item = null) => {\n    removeListeners();\n\n    element.dispatchEvent(\n      new CustomEvent('_closemenu', {\n        bubbles: true,\n        cancelable: true,\n        detail: { forceFocus: forceFocus, item: item }\n      })\n    );\n  };\n\n  const addWaiAria = () => {\n    if (!element.hasAttribute('id')) {\n      // Generate a random id\n      element.id = `menu-button-${randomString()}`;\n    }\n    element.setAttribute('tabindex', '-1');\n    element.setAttribute('role', 'menu');\n    element.setAttribute('hidden', '');\n\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}`)].forEach( menuitem => {\n      menuitem.setAttribute('tabindex', '-1');\n      menuitem.setAttribute('role', 'menuitem');\n    });\n\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM_SEPARATOR}`)].forEach( menuitem => {\n      menuitem.setAttribute('role', 'separator');\n    });\n  };\n\n  const init = () => {\n    addWaiAria();\n    parentNode = element.parentNode;\n    element.classList.add('is-upgraded');\n  };\n\n  const downgrade = () => {\n    removeListeners();\n    if(element.parentNode !== parentNode) {\n      parentNode.appendChild(element);\n    }\n    element.classList.remove('is-upgraded');\n  };\n\n  init();\n\n  return {\n    /**\n     * Get the menu element\n     * @returns {Element} the menu element\n     */\n    get element() {\n      return element;\n    },\n\n    /**\n     * Set selected menu item\n     * @param item\n     */\n    set selected(item) {\n      setSelected(item, true);\n    },\n\n    /**\n     * Open menu\n     * @param {Element} controlElement the element where the menu should be aligned to\n     * @param {String} position menuElement item to receive focus after menu element is opened\n     */\n    open: (controlElement, position='first') => open(controlElement, position),\n\n    /**\n     * Remove event listeners.\n     */\n    removeListeners: () => removeListeners(),\n\n    /**\n     * Downgrade menu\n     */\n    downgrade: () => downgrade(),\n  };\n};\n\n\n/**\n * The menubutton component\n */\n\nclass MenuButton {\n\n  constructor(element) {\n    this.element = element;\n    this.focusElement = undefined;\n    this.focusElementLastScrollPosition = undefined;\n    this.scrollElements = [];\n    this.menu = undefined;\n    this.selectedItem = null;\n    this.init();\n  }\n\n  keyDownHandler = event => {\n    if(!this.isDisabled()) {\n      switch (event.keyCode) {\n        case VK_ARROW_UP:\n          this.openMenu('last');\n          break;\n\n        case VK_ARROW_DOWN:\n          this.openMenu();\n          break;\n\n        case VK_SPACE:\n        case VK_ENTER:\n          this.openMenu('selected');\n          break;\n\n        case VK_ESC:\n          this.closeMenu();\n          break;\n\n        case VK_TAB:\n          this.closeMenu();\n          return;\n\n        default:\n          return;\n      }\n    }\n    //event.stopPropagation();\n    event.preventDefault();\n  };\n\n  clickHandler = () => {\n    if(!this.isDisabled()) {\n      if(this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {\n        this.closeMenu(true);\n      }\n      else {\n        this.openMenu('selected');\n      }\n    }\n  };\n\n  /**\n   * Re-position menu if content is scrolled, window is resized or orientation change\n   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/\n   */\n  recalcMenuPosition = fullThrottle( () => {\n    const c = this.focusElement.getBoundingClientRect();\n    const dx = this.focusElementLastScrollPosition.left - c.left;\n    const dy = this.focusElementLastScrollPosition.top - c.top;\n    const left = (parseFloat(this.menu.element.style.left) || 0) - dx;\n    const top = (parseFloat(this.menu.element.style.top) || 0) - dy;\n\n    this.menu.element.style.left = `${left}px`;\n    this.menu.element.style.top = `${top}px`;\n    this.focusElementLastScrollPosition = c;\n  });\n\n\n  positionChangeHandler = () => {\n    this.recalcMenuPosition(this);\n  };\n\n  closeMenuHandler = event => {\n    if(event && event.detail) {\n      if(event.detail.item && event.detail.item !== this.selectedItem) {\n        this.selectedItem = event.detail.item;\n        this.dispatchMenuSelect();\n      }\n      this.closeMenu(event.detail.forceFocus);\n    }\n  };\n\n  dispatchMenuSelect() {\n    this.element.dispatchEvent(\n      new CustomEvent('menuselect', {\n        bubbles: true,\n        cancelable: true,\n        detail: { source: this.selectedItem }\n      })\n    );\n  }\n\n  isDisabled() {\n    return this.element.hasAttribute('disabled');\n  }\n\n  removeListeners() {\n    this.element.removeEventListener('keydown', this.keyDownHandler);\n    this.element.removeEventListener('click', this.clickHandler);\n  }\n\n  openMenu(position='first') {\n\n    if(!this.isDisabled() && this.menu) {\n\n      // Close the menu if button position change\n      this.scrollElements = getScrollParents(this.element);\n      this.scrollElements.forEach(el => el.addEventListener('scroll', this.positionChangeHandler));\n\n      window.addEventListener('resize', this.positionChangeHandler);\n      window.addEventListener('orientationchange', this.positionChangeHandler);\n      this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);\n\n      this.menu.selected = this.selectedItem;\n      this.menu.open(this.focusElement, position);\n      this.element.setAttribute('aria-expanded', 'true');\n\n      this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();\n    }\n  }\n\n  closeMenu(forceFocus = false) {\n    if(this.menu) {\n      this.menu.removeListeners();\n      this.scrollElements.forEach(el => el.removeEventListener('scroll', this.positionChangeHandler));\n      window.removeEventListener('resize', this.positionChangeHandler);\n      window.removeEventListener('orientationchange', this.positionChangeHandler);\n      this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);\n\n      if (forceFocus) {\n        this.focus();\n      }\n      this.element.setAttribute('aria-expanded', 'false');\n      this.menu.element.setAttribute('hidden', '');\n    }\n  }\n\n  focus() {\n    if(!this.isDisabled()) {\n      this.focusElement.focus();\n    }\n  }\n\n  init() {\n    const addListeners = () => {\n      this.element.addEventListener('keydown', this.keyDownHandler);\n      this.element.addEventListener('click', this.clickHandler);\n    };\n\n    const addWaiAria = () => {\n      this.element.setAttribute('role', 'button');\n      this.element.setAttribute('aria-expanded', 'false');\n      this.element.setAttribute('aria-haspopup', 'true');\n    };\n\n    const addFocusElement = () => {\n      this.focusElement = this.element.querySelector('input[type=\"text\"]');\n      if(!this.focusElement) {\n        this.focusElement = this.element;\n\n        if(!(this.focusElement.tagName.toLowerCase() === 'button' || this.focusElement.tagName.toLowerCase() === 'input')) {\n          if (!this.focusElement.hasAttribute('tabindex')) {\n            this.focusElement.setAttribute('tabindex', '0');\n          }\n        }\n      }\n    };\n\n    const moveElementToDocumentBody = (element) => {\n      // To position an element on top of all other z-indexed elements, the element should be moved to document.body\n      //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/\n\n      if(element.parentNode !== document.body) {\n        return document.body.appendChild(element);\n      }\n      return element;\n    };\n\n    const findMenuElement = () => {\n      let menuElement;\n      const menuElementId = this.element.getAttribute('aria-controls');\n      if(menuElementId !== null) {\n        menuElement = document.querySelector(`#${menuElementId }`);\n      }\n      else {\n        menuElement = this.element.parentNode.querySelector(`.${MENU_BUTTON_MENU}`);\n      }\n      return menuElement;\n    };\n\n    const addMenu = () => {\n      const menuElement = findMenuElement();\n      if(menuElement) {\n        if(menuElement.componentInstance) {\n          this.menu = menuElement.componentInstance;\n        }\n        else {\n          this.menu = menuFactory(menuElement);\n          menuElement.componentInstance = this.menu;\n          moveElementToDocumentBody(menuElement);\n        }\n        this.element.setAttribute('aria-controls', this.menu.element.id);\n      }\n    };\n\n    addFocusElement();\n    addWaiAria();\n    addMenu();\n    this.removeListeners();\n    addListeners();\n  }\n\n  downgrade() {\n    if(this.menu) {\n      // Do not downgrade menu if there are other buttons sharing this menu\n      const related = [...document.querySelectorAll(`.${JS_MENU_BUTTON}[aria-controls=\"${this.element.getAttribute('aria-controls')}\"]`)];\n      if(related.filter( c => c !== this.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0).length === 0) {\n        this.menu.downgrade();\n      }\n    }\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * https://github.com/google/material-design-lite/issues/4205\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtMenuButton = function MaterialExtMenuButton(element) {\n    this.element_ = element;\n    this.menuButton_ = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtMenuButton'] = MaterialExtMenuButton;\n\n\n  // Public methods.\n\n  /**\n   * Get the menu element controlled by this button, null if no menu is controlled by this button\n   * @public\n   */\n  MaterialExtMenuButton.prototype.getMenuElement = function() {\n    return this.menuButton_.menu ? this.menuButton_.menu.element : null;\n  };\n  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;\n\n  /**\n   * Open menu\n   * @public\n   * @param {String} position one of \"first\", \"last\" or \"selected\"\n   */\n  MaterialExtMenuButton.prototype.openMenu = function(position) {\n    this.menuButton_.openMenu(position);\n  };\n  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;\n\n  /**\n   * Close menu\n   * @public\n   */\n  MaterialExtMenuButton.prototype.closeMenu = function() {\n    this.menuButton_.closeMenu(true);\n  };\n  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;\n\n  /**\n   * Get selected menu item\n   * @public\n   * @returns {Element} The selected menu item or null if no item selected\n   */\n  MaterialExtMenuButton.prototype.getSelectedMenuItem = function() {\n    return this.menuButton_.selectedItem;\n  };\n  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;\n\n\n  /**\n   * Set (default) selected menu item\n   * @param {Element} item\n   */\n  MaterialExtMenuButton.prototype.setSelectedMenuItem = function(item) {\n    this.menuButton_.selectedItem = item;\n  };\n  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtMenuButton.prototype.init = function() {\n    if (this.element_) {\n      this.menuButton_ = new MenuButton(this.element_);\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  /**\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtMenuButton.prototype.mdlDowngrade_ = function() {\n    this.menuButton_.downgrade();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtMenuButton,\n    classAsString: 'MaterialExtMenuButton',\n    cssClass: JS_MENU_BUTTON,\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/menu-button/menu-button.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/*\n * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield\n */\n\nimport { randomString } from '../utils/string-utils';\nimport {\n  IS_DIRTY,\n  IS_FOCUSED,\n  IS_DISABLED,\n  IS_INVALID,\n  IS_UPGRADED\n} from '../utils/constants';\n\n(function() {\n  'use strict';\n  const LABEL = 'mdlext-selectfield__label';\n  const INPUT = 'mdlext-selectfield__select';\n\n  /**\n   * Class constructor for Selectfield MDLEXT component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtSelectfield = function MaterialExtSelectfield(element) {\n    this.element_ = element;\n    this.init(); // Initialize instance.\n  };\n\n  window['MaterialExtSelectfield'] = MaterialExtSelectfield;\n\n  /**\n   * Handle focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  /*eslint no-unused-vars: 0*/\n  MaterialExtSelectfield.prototype.onFocus_ = function( /*event*/ ) {\n    this.element_.classList.add(IS_FOCUSED);\n  };\n\n  /**\n   * Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  /*eslint no-unused-vars: 0*/\n  MaterialExtSelectfield.prototype.onBlur_ = function( /*event*/ ) {\n    this.element_.classList.remove(IS_FOCUSED);\n  };\n\n  /**\n   * Handle reset event from out side.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  MaterialExtSelectfield.prototype.onReset_ = function( /*event*/ ) {\n    this.updateClasses_();\n  };\n\n  /**\n   * Handle class updates.\n   *\n   * @private\n   */\n  MaterialExtSelectfield.prototype.updateClasses_ = function() {\n    this.checkDisabled();\n    this.checkValidity();\n    this.checkDirty();\n    this.checkFocus();\n  };\n\n  // Public methods.\n\n  /**\n   * Check the disabled state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkDisabled = function() {\n    if (this.select_.disabled) {\n      this.element_.classList.add(IS_DISABLED);\n    } else {\n      this.element_.classList.remove(IS_DISABLED);\n    }\n  };\n  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;\n\n\n  /**\n   * Check the focus state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkFocus = function() {\n    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus\n    /*eslint no-extra-boolean-cast: 0*/\n    if (Boolean(this.element_.querySelector(':focus'))) {\n      this.element_.classList.add(IS_FOCUSED);\n    } else {\n      this.element_.classList.remove(IS_FOCUSED);\n    }\n  };\n\n  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;\n\n\n  /**\n   * Check the validity state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkValidity = function() {\n\n    /* Don't think it makes any sense to check validity.\n       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0\n\n    if (this.select_.validity) {\n      if (this.select_.validity.valid) {\n        this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n      } else {\n        this.element_.classList.add(this.CssClasses_.IS_INVALID);\n      }\n    }\n    */\n  };\n\n  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;\n\n  /**\n   * Check the dirty state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkDirty = function() {\n    if (this.select_.value && this.select_.value.length > 0) {\n      this.element_.classList.add(IS_DIRTY);\n    } else {\n      this.element_.classList.remove(IS_DIRTY);\n    }\n  };\n\n  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;\n\n  /**\n   * Disable select field.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.disable = function() {\n    this.select_.disabled = true;\n    this.updateClasses_();\n  };\n\n  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;\n\n  /**\n   * Enable select field.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.enable = function() {\n    this.select_.disabled = false;\n    this.updateClasses_();\n  };\n\n  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;\n\n  /**\n   * Update select field value.\n   *\n   * @param {string} value The value to which to set the control (optional).\n   * @public\n   */\n  MaterialExtSelectfield.prototype.change = function(value) {\n    this.select_.value = value || '';\n    this.updateClasses_();\n  };\n  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;\n\n  /**\n   * Initialize element.\n   */\n  MaterialExtSelectfield.prototype.init = function() {\n    if (this.element_) {\n      this.label_ = this.element_.querySelector(`.${LABEL}`);\n      this.select_ = this.element_.querySelector(`.${INPUT}`);\n\n      if (this.select_) {\n        // Remove listeners, just in case ...\n        this.select_.removeEventListener('change', this.updateClasses_);\n        this.select_.removeEventListener('focus', this.onFocus_);\n        this.select_.removeEventListener('blur', this.onBlur_);\n        this.select_.removeEventListener('reset', this.onReset_);\n\n        this.select_.addEventListener('change', this.updateClasses_.bind(this));\n        this.select_.addEventListener('focus', this.onFocus_.bind(this));\n        this.select_.addEventListener('blur', this.onBlur_.bind(this));\n        this.select_.addEventListener('reset', this.onReset_.bind(this));\n\n        if(this.label_) {\n          let id;\n          if(!this.select_.hasAttribute('id')) {\n            id = `select-${randomString()}`;\n            this.select_.id = id;\n          }\n          else {\n            id = this.select_.id;\n          }\n\n          if(!this.label_.hasAttribute('for')) {\n            this.label_.setAttribute('for', id);\n          }\n        }\n\n        const invalid = this.element_.classList.contains(IS_INVALID);\n        this.updateClasses_();\n        this.element_.classList.add(IS_UPGRADED);\n\n        if (invalid) {\n          this.element_.classList.add(IS_INVALID);\n        }\n        if (this.select_.hasAttribute('autofocus')) {\n          this.element_.focus();\n          this.checkFocus();\n        }\n      }\n    }\n  };\n\n  /**\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {\n    'use strict';\n    console.log('***** MaterialExtSelectfield.mdlDowngrade ');\n  };\n  */\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /*eslint no-undef: 0*/\n  componentHandler.register({\n    constructor: MaterialExtSelectfield,\n    classAsString: 'MaterialExtSelectfield',\n    cssClass: 'mdlext-js-selectfield',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/selectfield/selectfield.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.\n * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and\n * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.\n */\n\nimport fullThrottle from '../utils/full-throttle';\nimport { jsonStringToObject } from '../utils/json-utils';\nimport {\n  IS_UPGRADED\n} from '../utils/constants';\n\n\n(function() {\n  'use strict';\n  const MDL_LAYOUT_CONTENT  = 'mdl-layout__content';\n  const IS_SCROLL_CLASS  = 'mdlext-is-scroll';\n\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {\n    // Stores the element.\n    this.header_ = element;\n\n    // Heder listens to scroll events from content\n    this.content_ = null;\n    this.lastScrollTop_ = 0;\n\n    // Default config\n    this.config_ = {\n      visibleAtScrollEnd: false\n    };\n\n    this.mutationObserver_ = null;\n\n    this.drawing_ = false;\n\n    // Initialize instance.\n    this.init();\n  };\n\n  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;\n\n\n  /**\n   * Update header width\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.recalcWidth_ = function() {\n    this.header_.style.width = `${this.content_.clientWidth}px`;\n  };\n\n  const throttleResize = fullThrottle(self => self.recalcWidth_() );\n\n  /**\n   * Adjust header width when window resizes or oreientation changes\n   * @param event\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.resizeHandler_ = function( /* event */ ) {\n    throttleResize(this);\n  };\n\n\n  /**\n   * Update header position\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.reposition_ = function() {\n\n    const currentContentScrollTop = this.content_.scrollTop;\n    const scrollDiff = this.lastScrollTop_ - currentContentScrollTop;\n\n    if(currentContentScrollTop <= 0) {\n      // Scrolled to the top. Header sticks to the top\n      this.header_.style.top = '0';\n      this.header_.classList.remove(IS_SCROLL_CLASS);\n    }\n    else if(scrollDiff > 0) {\n\n      if(scrollDiff >= this.header_.offsetHeight) {\n\n        // Scrolled up. Header slides in\n        const headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);\n        if(headerTop != 0) {\n          this.header_.style.top = '0';\n          this.header_.classList.add(IS_SCROLL_CLASS);\n        }\n        this.lastScrollTop_ = currentContentScrollTop;\n      }\n      return;\n    }\n    else if(scrollDiff < 0) {\n      // Scrolled down\n      this.header_.classList.add(IS_SCROLL_CLASS);\n      let headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);\n\n      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {\n        // Bottom of content\n        if(headerTop != 0) {\n          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : `-${this.header_.offsetHeight}px`;\n        }\n      }\n      else {\n        headerTop += scrollDiff;\n        const offsetHeight = this.header_.offsetHeight;\n        this.header_.style.top = `${( Math.abs( headerTop ) > offsetHeight ? -offsetHeight : headerTop )}px`;\n      }\n    }\n\n    this.lastScrollTop_ = currentContentScrollTop;\n  };\n\n\n  const throttleScroll = fullThrottle((self) => self.reposition_());\n\n  /**\n   * Scroll header when content scrolls\n   * @param event\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.scrollHandler_ = function( /* event */ ) {\n    throttleScroll(this);\n  };\n\n  /**\n   * Init header position\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.updatePosition_ = function( /* event */ ) {\n    this.recalcWidth_();\n    this.reposition_();\n  };\n\n  /**\n   * Add mutation observer\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.addMutationObserver_ = function() {\n\n    // jsdom does not support MutationObserver - so this is not testable\n    /* istanbul ignore next */\n    this.mutationObserver_ = new MutationObserver( ( /*mutations*/ ) => {\n      // Adjust header width if content changes (e.g. in a SPA)\n      this.updatePosition_();\n    });\n\n    this.mutationObserver_.observe( this.content_, {\n      attributes: false,\n      childList: true,\n      characterData: false,\n      subtree: true\n    });\n  };\n\n    /**\n   * Removes event listeners\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.removeListeners_ = function() {\n\n    window.removeEventListener('resize', this.resizeHandler_);\n    window.removeEventListener('orientationchange', this.resizeHandler_);\n\n    if(this.content_) {\n      this.content_.removeEventListener('scroll', this.scrollHandler_);\n    }\n\n    if(this.mutationObserver_) {\n      this.mutationObserver_.disconnect();\n      this.mutationObserver_ = null;\n    }\n  };\n\n  /**\n   * Initialize component\n   */\n  MaterialExtStickyHeader.prototype.init = function() {\n\n    if (this.header_) {\n\n      this.removeListeners_();\n\n      if(this.header_.hasAttribute('data-config')) {\n        this.config_ = jsonStringToObject(this.header_.getAttribute('data-config'));\n      }\n\n      this.content_ = this.header_.parentNode.querySelector(`.${MDL_LAYOUT_CONTENT}`) || null;\n\n      if(this.content_) {\n        this.content_.style.paddingTop = `${this.header_.offsetHeight}px`;  // Make room for sticky header\n        this.lastScrollTop_ = this.content_.scrollTop;\n\n        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));\n        window.addEventListener('resize', this.resizeHandler_.bind(this));\n        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));\n\n        this.addMutationObserver_();\n        this.updatePosition_();\n\n        // Set upgraded flag\n        this.header_.classList.add(IS_UPGRADED);\n      }\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to clean\n   *\n   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {\n     'use strict';\n     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');\n   };\n   */\n\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtStickyHeader,\n    classAsString: 'MaterialExtStickyHeader',\n    cssClass: 'mdlext-js-sticky-header'\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/sticky-header/sticky-header.js","import './constants';\nimport './dom-utils';\nimport './string-utils';\nimport './json-utils';\nimport './full-throttle';\nimport './easing';\nimport './interval-function';\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/index.js","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/array/from.js\n// module id = 60\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/is-iterable\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/is-iterable.js\n// module id = 61\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/number/is-nan\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-nan.js\n// module id = 62\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 63\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/entries\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/entries.js\n// module id = 64\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/keys.js\n// module id = 65\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/reflect/apply\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/reflect/apply.js\n// module id = 66\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/slicedToArray.js\n// module id = 67\n// module chunks = 0 1","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/array/from.js\n// module id = 68\n// module chunks = 0 1","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/get-iterator.js\n// module id = 69\n// module chunks = 0 1","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/is-iterable.js\n// module id = 70\n// module chunks = 0 1","require('../../modules/es6.number.is-integer');\nmodule.exports = require('../../modules/_core').Number.isInteger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-integer.js\n// module id = 71\n// module chunks = 0 1","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-nan.js\n// module id = 72\n// module chunks = 0 1","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/assign.js\n// module id = 73\n// module chunks = 0 1","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/define-property.js\n// module id = 74\n// module chunks = 0 1","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/entries.js\n// module id = 75\n// module chunks = 0 1","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/keys.js\n// module id = 76\n// module chunks = 0 1","require('../../modules/es6.reflect.apply');\nmodule.exports = require('../../modules/_core').Reflect.apply;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/reflect/apply.js\n// module id = 77\n// module chunks = 0 1","module.exports = function(){ /* empty */ };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_add-to-unscopables.js\n// module id = 78\n// module chunks = 0 1","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_array-includes.js\n// module id = 79\n// module chunks = 0 1","'use strict';\nvar $defineProperty = require('./_object-dp')\n  , createDesc      = require('./_property-desc');\n\nmodule.exports = function(object, index, value){\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_create-property.js\n// module id = 80\n// module chunks = 0 1","module.exports = require('./_global').document && document.documentElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_html.js\n// module id = 81\n// module chunks = 0 1","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ie8-dom-define.js\n// module id = 82\n// module chunks = 0 1","// check on default Array iterator\nvar Iterators  = require('./_iterators')\n  , ITERATOR   = require('./_wks')('iterator')\n  , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-array-iter.js\n// module id = 83\n// module chunks = 0 1","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object')\n  , floor    = Math.floor;\nmodule.exports = function isInteger(it){\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-integer.js\n// module id = 84\n// module chunks = 0 1","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function(iterator, fn, value, entries){\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch(e){\n    var ret = iterator['return'];\n    if(ret !== undefined)anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-call.js\n// module id = 85\n// module chunks = 0 1","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-create.js\n// module id = 86\n// module chunks = 0 1","var ITERATOR     = require('./_wks')('iterator')\n  , SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function(){ SAFE_CLOSING = true; };\n  Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n  if(!skipClosing && !SAFE_CLOSING)return false;\n  var safe = false;\n  try {\n    var arr  = [7]\n      , iter = arr[ITERATOR]();\n    iter.next = function(){ return {done: safe = true}; };\n    arr[ITERATOR] = function(){ return iter; };\n    exec(arr);\n  } catch(e){ /* empty */ }\n  return safe;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-detect.js\n// module id = 87\n// module chunks = 0 1","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-step.js\n// module id = 88\n// module chunks = 0 1","module.exports = true;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_library.js\n// module id = 89\n// module chunks = 0 1","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-assign.js\n// module id = 90\n// module chunks = 0 1","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = require('./_an-object')\n  , dPs         = require('./_object-dps')\n  , enumBugKeys = require('./_enum-bug-keys')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-create.js\n// module id = 91\n// module chunks = 0 1","var dP       = require('./_object-dp')\n  , anObject = require('./_an-object')\n  , getKeys  = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dps.js\n// module id = 92\n// module chunks = 0 1","exports.f = Object.getOwnPropertySymbols;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gops.js\n// module id = 93\n// module chunks = 0 1","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = require('./_has')\n  , toObject    = require('./_to-object')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gpo.js\n// module id = 94\n// module chunks = 0 1","var has          = require('./_has')\n  , toIObject    = require('./_to-iobject')\n  , arrayIndexOf = require('./_array-includes')(false)\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys-internal.js\n// module id = 95\n// module chunks = 0 1","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-sap.js\n// module id = 96\n// module chunks = 0 1","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject')\n  , isEnum    = require('./_object-pie').f;\nmodule.exports = function(isEntries){\n  return function(it){\n    var O      = toIObject(it)\n      , keys   = getKeys(O)\n      , length = keys.length\n      , i      = 0\n      , result = []\n      , key;\n    while(length > i)if(isEnum.call(O, key = keys[i++])){\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-to-array.js\n// module id = 97\n// module chunks = 0 1","module.exports = require('./_hide');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_redefine.js\n// module id = 98\n// module chunks = 0 1","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_string-at.js\n// module id = 99\n// module chunks = 0 1","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-index.js\n// module id = 100\n// module chunks = 0 1","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-primitive.js\n// module id = 101\n// module chunks = 0 1","var anObject = require('./_an-object')\n  , get      = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function(it){\n  var iterFn = get(it);\n  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator.js\n// module id = 102\n// module chunks = 0 1","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.is-iterable.js\n// module id = 103\n// module chunks = 0 1","'use strict';\nvar ctx            = require('./_ctx')\n  , $export        = require('./_export')\n  , toObject       = require('./_to-object')\n  , call           = require('./_iter-call')\n  , isArrayIter    = require('./_is-array-iter')\n  , toLength       = require('./_to-length')\n  , createProperty = require('./_create-property')\n  , getIterFn      = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n    var O       = toObject(arrayLike)\n      , C       = typeof this == 'function' ? this : Array\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , index   = 0\n      , iterFn  = getIterFn(O)\n      , length, result, step, iterator;\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for(result = new C(length); length > index; index++){\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.from.js\n// module id = 104\n// module chunks = 0 1","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.iterator.js\n// module id = 105\n// module chunks = 0 1","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-integer.js\n// module id = 106\n// module chunks = 0 1","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number){\n    return number != number;\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-nan.js\n// module id = 107\n// module chunks = 0 1","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.assign.js\n// module id = 108\n// module chunks = 0 1","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js\n// module id = 109\n// module chunks = 0 1","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.keys.js\n// module id = 110\n// module chunks = 0 1","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , rApply    = (require('./_global').Reflect || {}).apply\n  , fApply    = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function(){\n  rApply(function(){});\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList){\n    var T = aFunction(target)\n      , L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.reflect.apply.js\n// module id = 111\n// module chunks = 0 1","// https://github.com/tc39/proposal-object-values-entries\nvar $export  = require('./_export')\n  , $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it){\n    return $entries(it);\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es7.object.entries.js\n// module id = 112\n// module chunks = 0 1"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/mdl-ext/package.json b/node_modules/mdl-ext/package.json
new file mode 100644
index 0000000..77ebb0b
--- /dev/null
+++ b/node_modules/mdl-ext/package.json
@@ -0,0 +1,167 @@
+{
+  "_from": "mdl-ext",
+  "_id": "mdl-ext@0.17.1",
+  "_inBundle": false,
+  "_integrity": "sha1-89iHLFUsLdkA9wdXAL1OFv9KWeM=",
+  "_location": "/mdl-ext",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "mdl-ext",
+    "name": "mdl-ext",
+    "escapedName": "mdl-ext",
+    "rawSpec": "",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/mdl-ext/-/mdl-ext-0.17.1.tgz",
+  "_shasum": "f3d8872c552c2dd900f7075700bd4e16ff4a59e3",
+  "_spec": "mdl-ext",
+  "_where": "/var/www/html/hores",
+  "author": {
+    "name": "Leif Olsen",
+    "url": "https://github.com/leifoolsen"
+  },
+  "bugs": {
+    "url": "https://github.com/leifoolsen/mdl-ext/issues"
+  },
+  "bundleDependencies": false,
+  "config": {
+    "commitizen": {
+      "path": "./node_modules/cz-conventional-changelog"
+    }
+  },
+  "czConfig": {
+    "path": "./node_modules/cz-conventional-changelog"
+  },
+  "deprecated": false,
+  "description": "Components based on the Google Material Design Lite framework",
+  "devDependencies": {
+    "autoprefixer": "6.7.6",
+    "babel-cli": "6.23.0",
+    "babel-core": "6.23.1",
+    "babel-eslint": "7.1.1",
+    "babel-loader": "6.3.2",
+    "babel-plugin-add-module-exports": "0.2.1",
+    "babel-plugin-syntax-decorators": "6.13.0",
+    "babel-plugin-transform-decorators-legacy": "1.3.4",
+    "babel-plugin-transform-object-rest-spread": "6.23.0",
+    "babel-plugin-transform-runtime": "6.23.0",
+    "babel-polyfill": "6.23.0",
+    "babel-preset-es2015": "6.22.0",
+    "babel-preset-stage-0": "6.22.0",
+    "babel-register": "6.23.0",
+    "babel-runtime": "6.23.0",
+    "chai": "3.5.0",
+    "chalk": "1.1.3",
+    "codecov.io": "0.1.6",
+    "commitizen": "2.9.6",
+    "css-loader": "0.26.2",
+    "cz-conventional-changelog": "2.0.0",
+    "dialog-polyfill": "0.4.7",
+    "doctrine": "2.0.0",
+    "eq.js": "1.9.0",
+    "es6-promise": "4.0.5",
+    "eslint": "3.16.1",
+    "eslint-loader": "1.6.3",
+    "extract-text-webpack-plugin": "1.0.1",
+    "file-loader": "0.10.1",
+    "gulp": "3.9.1",
+    "gulp-git": "2.0.0",
+    "gulp-posthtml": "2.0.0",
+    "ignore-styles": "5.0.1",
+    "istanbul": "1.0.0-alpha.2",
+    "jsdom": "9.11.0",
+    "jsdomify": "2.1.0",
+    "material-design-lite": "1.3.0",
+    "mocha": "3.2.0",
+    "mutation-observer": "1.0.2",
+    "node-sass": "4.5.0",
+    "null-loader": "0.1.1",
+    "object-assign": "4.1.1",
+    "postcss-loader": "1.3.2",
+    "posthtml-include": "1.1.0",
+    "require-uncached": "1.0.3",
+    "resolve-url-loader": "2.0.0",
+    "rimraf": "2.6.1",
+    "roboto-fontface": "0.7.0",
+    "sass-loader": "4.1.1",
+    "semantic-release": "6.3.5",
+    "sinon": "1.17.7",
+    "style-loader": "0.13.2",
+    "stylelint": "7.9.0",
+    "stylelint-config-standard": "16.0.0",
+    "stylelint-webpack-plugin": "0.7.0",
+    "url-loader": "0.5.8",
+    "webpack": "1.14.0",
+    "yargs": "6.6.0"
+  },
+  "files": [
+    "*.md",
+    "es",
+    "lib",
+    "src"
+  ],
+  "homepage": "https://github.com/leifoolsen/mdl-ext#readme",
+  "keywords": [
+    "JavaScript",
+    "es6",
+    "es7",
+    "EcmaScript 2015",
+    "EcmaScript 2016",
+    "css",
+    "sass",
+    "webpack",
+    "element queries",
+    "responsive design",
+    "mdl",
+    "material design",
+    "material-design-lite",
+    "mdl components",
+    "accordion",
+    "grid",
+    "lightboard",
+    "lightbox",
+    "selectfield",
+    "material-color-themes",
+    "menu-button"
+  ],
+  "license": "Apache-2.0",
+  "main": "lib/mdl-ext.js",
+  "module": "es/index.js",
+  "name": "mdl-ext",
+  "peerDependencies": {
+    "material-design-lite": ">= 1.2"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/leifoolsen/mdl-ext.git"
+  },
+  "scripts": {
+    "build": "webpack --mode=build",
+    "build-demo": "gulp build-demo",
+    "build-es": "rimraf es && NODE_ENV=es babel ./src -d es --ignore ./src/demo",
+    "check-coverage": "istanbul check-coverage --statements 75 --branches 75 --functions 75 --lines 75",
+    "clean": "rimraf lib && mkdir lib && rimraf es",
+    "commit": "git-cz",
+    "dev": "webpack --progress --colors --watch --mode=dev",
+    "eslint": "eslint ./src ./test",
+    "lint": "npm run stylelint && npm run eslint",
+    "prebuild": "npm run clean && npm run build-es && webpack",
+    "precommit": "npm run lint && npm run test:coverage && npm run check-coverage",
+    "report-coverage": "cat ./coverage/lcov.info | ./node_modules/.bin/codecov",
+    "semantic-release": "semantic-release pre && npm publish && semantic-release post",
+    "start": "npm run dev",
+    "stylelint": "stylelint './src/**/*.s?(a|c)ss' --syntax scss",
+    "test": "mocha  -w --opts ./mocha.opts './test/**/*.spec.js'",
+    "test:coverage": "istanbul cover --root ./src ./node_modules/.bin/_mocha -- --opts ./mocha.opts  -r .istanbul-mocha.config.js './test/**/*.spec.js'",
+    "test:pattern": "mocha  -w --opts ./mocha.opts './test/**/*.spec.js' --grep $pattern",
+    "test:single": "mocha  -w --opts ./mocha.opts"
+  },
+  "version": "0.17.1"
+}
diff --git a/node_modules/mdl-ext/src/_functions.scss b/node_modules/mdl-ext/src/_functions.scss
new file mode 100644
index 0000000..2571fec
--- /dev/null
+++ b/node_modules/mdl-ext/src/_functions.scss
@@ -0,0 +1,302 @@
+///
+/// Returns the opposite direction of each direction in a list
+/// Modified from: https://css-tricks.com/snippets/sass/opposite-direction-function/
+/// @author Hugo Giraudel
+/// @param {List} $directions - List of initial directions
+/// @return {List} - List of opposite directions
+@function mdlext-opposite-direction($directions) {
+  $opposite-directions: ();
+  $direction-map: (
+    'top':    'bottom',
+    'right':  'left',
+    'bottom': 'top',
+    'left':   'right',
+    'center': 'center',
+    'ltr':    'rtl',
+    'rtl':    'ltr'
+  );
+
+  @each $direction in $directions {
+    $direction: to-lower-case($direction);
+
+    @if map-has-key($direction-map, $direction) {
+      $opposite-directions: append($opposite-directions, unquote(map-get($direction-map, $direction)));
+    }
+    @else {
+      @warn "No opposite direction can be found for `#{$direction}`. Direction omitted.";
+    }
+  }
+
+  @return $opposite-directions;
+}
+
+///
+/// Strip unit from value
+/// @author Hugo Giraudel
+/// http://hugogiraudel.com/2013/08/12/sass-functions/
+/// https://css-tricks.com/snippets/sass/strip-unit-function/
+/// @param {Number} $number - Number to remove unit from
+/// @return {Number} - Unitless number
+
+@function strip-unit($number) {
+  @return if(type-of($number) == 'number' and not unitless($number), $number / ($number * 0 + 1), $number);
+}
+
+///
+/// Clamping a number means restricting it between min and max values.
+///    4 clamped to 1-3 equals 3.
+///   -5 clamped to 1-10 equals 1.
+///   42 clamped to 10-100 equals 42.
+/// @author Hugo Giraudel
+/// http://hugogiraudel.com/2013/08/12/sass-functions/
+/// @param {Number} $value - The value to clamp
+/// @param {Number} $min - min value in range
+/// @param {Number} $max - Max value in range
+/// @return {Number} - The clamped value
+
+@function clamp($value, $min, $max) {
+  @return if($value > $max, $max, if($value < $min, $min, $value));
+}
+
+///
+/// Convert one unit into another
+/// @author Hugo Giraudel
+/// http://www.sitepoint.com/understanding-sass-units/
+/// @param {Number} $value - Initial value
+/// @param {String} $unit - Desired unit
+/// @return {Number}
+/// @throw Error if `$unit` does not exist or if units are incompatible.
+
+/* stylelint-disable */
+@function convert-unit($value, $unit) {
+  $units: (
+    'px'  : 0px,
+    'cm'  : 0cm,
+    'mm'  : 0mm,
+    '%'   : 0%,
+    'ch'  : 0ch,
+    'in'  : 0in,
+    'em'  : 0em,
+    'rem' : 0rem,
+    'pt'  : 0pt,
+    'pc'  : 0pc,
+    'ex'  : 0ex,
+    'vw'  : 0vw,
+    'vh'  : 0vh,
+    'vmin': 0vmin,
+    'vmax': 0vmax,
+    'deg' : 0deg,
+    'turn': 0turn,
+    'rad' : 0rad,
+    'grad': 0grad,
+    's'   : 0s,
+    'ms'  : 0ms,
+    'Hz'  : 0Hz,
+    'kHz' : 0kHz,
+    'dppx': 0dppx,
+    'dpcm': 0dpcm,
+    'dpi' : 0dpi,
+  );
+
+  @if map-has-key($units, $unit) {
+    @return map-get($units, $unit) + $value;
+  }
+
+  @error "Unknown unit `#{$unit}`.";
+}
+/* stylelint-enable */
+
+
+///
+/// Replace `$search` with `$replace` in `$string`
+/// @author Hugo Giraudel, http://hugogiraudel.com/2014/01/13/sass-string-replacement-function/
+/// @param {String} $string - Initial string
+/// @param {String} $search - Substring to replace
+/// @param {String} $replace ('') - New value
+/// @return {String} - Updated string
+@function str-replace($string, $search, $replace: '') {
+  $index: str-index($string, $search);
+
+  @if $index {
+    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
+  }
+  @return $string;
+}
+
+///
+/// @function explode() -- split a string into a list of strings
+/// @author https://gist.github.com/danielpchen/3677421ea15dcf2579ff
+///  {string} $string: the string to be split
+///  {string} $delimiter: the boundary string
+///  @return {list} the result list
+@function explode($string, $delimiter: ',') {
+  $result: ();
+  @if $delimiter == "" {
+    @for $i from 1 through str-length($string) {
+      $result: append($result, str-slice($string, $i, $i));
+    }
+    @return $result;
+  }
+  $exploding: true;
+  @while $exploding {
+    $d-index: str-index($string, $delimiter);
+    @if $d-index {
+      @if $d-index > 1 {
+        $result: append($result, str-slice($string, 1, $d-index - 1));
+        $string: str-slice($string, $d-index + str-length($delimiter));
+      }
+      @else if $d-index == 1 {
+        $string: str-slice($string, 1, $d-index + str-length($delimiter));
+      }
+      @else {
+        $result: append($result, $string);
+        $exploding: false;
+      }
+    }
+    @else {
+      $result: append($result, $string);
+      $exploding: false;
+    }
+  }
+  @return $result;
+}
+
+///
+/// Add `$unit` to `$value`
+/// @author Hugo Giraudel
+///
+/// @param {Number} $value - Value to add unit to
+/// @param {String} $unit - String representation of the unit
+///
+/// @return {Number} - `$value` expressed in `$unit`
+/// @throw Error if `$unit` does not exist or if units are incompatible.
+///
+@function to-length($value, $unit) {
+  $units: (
+    'px'  : 1px,
+    'cm'  : 1cm,
+    'mm'  : 1mm,
+    '%'   : 1%,
+    'ch'  : 1ch,
+    'pc'  : 1pc,
+    'in'  : 1in,
+    'em'  : 1em,
+    'rem' : 1rem,
+    'pt'  : 1pt,
+    'ex'  : 1ex,
+    'vw'  : 1vw,
+    'vh'  : 1vh,
+    'vmin': 1vmin,
+    'vmax': 1vmax
+  );
+
+  @if not index(map-keys($units), $unit) {
+    @error('Invalid unit `#{$unit}`.');
+  }
+
+  @return $value * map-get($units, $unit);
+}
+
+///
+/// Casts a string into a number
+///
+/// @author Hugo Giraudel
+// @param {String | Number} $value - Value to be parsed
+///
+/// @return {Number}
+/// @throw Error if `$value` is not a number or a string.
+///
+@function to-number($value) {
+  @if type-of($value) == 'number' {
+    @return $value;
+  }
+  @else if type-of($value) != 'string' {
+    @error('Value for `to-number` should be a number or a string.');
+  }
+
+  $result: 0;
+  $digits: 0;
+  $minus: str-slice($value, 1, 1) == '-';
+  $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);
+
+  @for $i from if($minus, 2, 1) through str-length($value) {
+    $character: str-slice($value, $i, $i);
+
+    @if not (index(map-keys($numbers), $character) or $character == '.') {
+      @return to-length(if($minus, -$result, $result), str-slice($value, $i));
+    }
+
+    @if $character == '.' {
+      $digits: 1;
+    }
+    @else if $digits == 0 {
+      $result: $result * 10 + map-get($numbers, $character);
+    }
+    @else {
+      $digits: $digits * 10;
+      $result: $result + map-get($numbers, $character) / $digits;
+    }
+  }
+
+  @return if($minus, -$result, $result);
+}
+
+///
+/// Convert `$rgb-string` to a number list
+/// @author Leif Olsen
+/// @param {String | Number} $value - Value to be parsed
+/// @return {list} the rgb number list
+/// @throw Error if `$value` is not a number, color or a string.
+@function rgb-string-to-numbers($value) {
+  @if type-of($value) == 'number' or type-of($value) == 'color' {
+    @return $value;
+  }
+  @else if type-of($value) != 'string' {
+    @error('Value for `rgb-string-to-numbers` should be a number or a string.');
+  }
+
+  $s: str-replace($value, "rgba");
+  $s: str-replace($s, "rgb");
+  $s: str-replace($s, "(");
+  $s: str-replace($s, ")");
+  $s: str-replace($s, " ");
+  $l: explode($s);
+  $result: ();
+  @for $i from 1 through length($l) {
+    $result: append($result, to-number(nth($l, $i)));
+  }
+  @return $result;
+}
+
+///
+/// Convert `$rgb-string` to a corresponding hex value
+/// @author Leif Olsen
+/// @param {String | Number} $value - Value to be parsed
+/// @return {number} the rgb hex value
+/// @throw Error if `$value` is not a number, color or a string.
+@function rgb-string-to-hex($value) {
+  @if type-of($value) == 'number' or type-of($value) == 'color' {
+    @return $value;
+  }
+  @else if type-of($value) != 'string' {
+    @error('Value for `rgb-string-to-numbers` should be a number or a string.');
+  }
+  $l: rgb-string-to-numbers($value);
+  @return rgb(nth($l, 1), nth($l, 2), nth($l, 3));
+}
+
+
+///
+/// Convert hex color to a coresponding `$rgb-string`
+/// @author https://github.com/google/material-design-lite/issues/1689
+/// @param {Number} $hexColor - Value to convert
+/// @return {String} the rgb string value
+///
+/// @example - $color-primary: hex-to-string(#333);
+@function hex-to-rgb-string($hexColor) {
+  // 0.999999 val in alpha actually compiles to 1.0
+  $rgbaVal:  inspect(rgba($hexColor, 0.9999999));
+
+  // slice substring between 'rgba(' and '1.0)'
+  @return str-slice($rgbaVal, 6, str-length($rgbaVal)-4);
+}
diff --git a/node_modules/mdl-ext/src/_mixins.scss b/node_modules/mdl-ext/src/_mixins.scss
new file mode 100644
index 0000000..cf274ab
--- /dev/null
+++ b/node_modules/mdl-ext/src/_mixins.scss
@@ -0,0 +1,211 @@
+@import "functions";
+
+/// Triangle helper mixin
+/// Modified from: http://blustemy.io/drawing-pure-css-arrows-with-mixins/
+///                https://css-tricks.com/snippets/sass/css-triangle-mixin/
+/// @param {Direction} $direction - Triangle direction, either `top`, `right`, `bottom` or `left`
+/// @param {Color} $color [currentcolor] - Triangle color
+/// @param {Length} $size [1em] - Triangle size
+@mixin mdlext-arrow($direction: bottom, $base-width: 15px, $length: 10px, $color: inherit, $font-size: inherit) {
+  content: '';
+  width: 0;
+  height: 0;
+  font-size: $font-size;
+  line-height: $font-size;
+  border-#{mdlext-opposite-direction($direction)}: $length solid $color;
+  border-#{mdlext-opposite-direction($direction)}-width: $length;
+  border-#{mdlext-opposite-direction($direction)}-style: solid;
+  border-#{mdlext-opposite-direction($direction)}-color: $color;
+
+  $perpendicular-borders: ($base-width / 2) solid transparent;
+
+  @if $direction == top or $direction == bottom {
+    border-left: $perpendicular-borders;
+    border-right: $perpendicular-borders;
+  }
+  @else if $direction == right or $direction == left {
+    border-bottom: $perpendicular-borders;
+    border-top: $perpendicular-borders;
+  }
+}
+
+/// Hide element while making it readable for screen readers
+/// Copied from HTML5Boilerplate:
+/// https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css#L119-L133
+@mixin mdlext-visually-hidden() {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+
+
+/// Toggle for aria-expanded attribute
+///
+/// @author Leif Olsen
+/// @param {Font} $font-family ['Material Icons'] - Font family
+/// @param {Length} $font-size [24px] - Font size
+/// @param {string} $icon ['+'] - icon to display when 'aria-expanded="false"'
+/// @param {string} $icon-expanded ['-'] - icon to display when 'aria-expanded="true"'
+/// @link https://github.com/google/material-design-icons Modified from '.material-icons' class
+/// @param {Length} $icon-offset [0] - Icon offset
+///
+/// @example - +/- toggle
+///   .plus-minus {
+///     @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: inherit);
+///   }
+///   <div aria-expanded="false">
+///     <i class="plus-minus"></i>
+///   </div>
+///
+/// @example - Material Icons, expand-more/expand_less
+///   .more-less {
+///     @include mdlext-aria-expanded-toggle($content: 'expand_more', $content-expanded: 'expand_less');
+///   }
+///   <div aria-expanded="true">
+///     <i class="more-less"></i>
+///   </div>
+
+@mixin mdlext-aria-expanded-toggle($font-family: 'Material Icons', $font-size: 24px, $icon: '+', $icon-expanded: '-', $icon-offset: 0) {
+  font-family: $font-family;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: $font-size;  // Preferred icon size
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-transform: none;
+  letter-spacing: normal;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  vertical-align: middle;
+
+  // Support for all WebKit browsers.
+  -webkit-font-smoothing: antialiased;
+  -webkit-font-feature-settings: 'liga';
+
+  // Support for Safari and Chrome.
+  text-rendering: optimizeLegibility;
+
+  // Support for Firefox.
+  -moz-osx-font-smoothing: grayscale;
+
+  // Support for IE.
+  font-feature-settings: 'liga';
+
+  &::after {
+    content: $icon;
+    margin-left: $icon-offset;
+  }
+
+  [aria-expanded='true'] > & {
+    &::after {
+      content: $icon-expanded;
+      margin-left: $icon-offset;
+    }
+  }
+}
+
+
+/// Keyframe mixin
+/// Modified from: http://sassbreak.com/nested-keyframe-rules-sass/
+/// Modified from: http://sassbreak.com/sass-tools-and-snippets/
+///
+/// @example
+///
+/// .some-element {
+///   animation: 10s linear infinite;
+///
+///   @include mdlext-animation-keyframes {
+///     from {
+///       background-position: 0% 0%;
+///     }
+///     to {
+///       background-position: 114.2857% 0%;
+///     }
+///   }
+/// }
+
+@mixin mdlext-animation-keyframes {
+  $animation-name: unique-id();
+  animation-name: $animation-name;
+
+  @keyframes #{$animation-name} {
+    @content;
+  }
+}
+
+
+/// Flexible title mixin
+/// A flexible title consists of three regions, left, middle and right.
+/// The left and right regions are optional and will typically contain state icons
+/// or act as a toolbar. The middle region should contain the title text.
+///
+/// @author Leif Olsen
+/// @param {String} $class - class name
+/// @gutter {Length} [8px] - horizontal spacing between title elements
+///
+/// @example
+///
+/// @include mdlext-flexible-title(my-title) {
+///   overflow: hidden;
+///   background-color: yellow;
+///   &__text {
+///     font-size: 20px;
+///     letter-spacing: 0.02em;
+///     font-weight: 400;
+///     line-height: 1.1;
+///   }
+/// }
+///
+/// <header class="my-title">
+///   <i class="material-icons" role="presentation" style="font-size: 28px;">info</i>
+///   <h2 class="my-title__text">A title</h2>
+///   <span class="my-title__spacer"></span>
+///   <i class="mdlext-aria-expanded-more-less" role="presentation" style="font-size: 28px;"></i>
+/// </header>
+
+@mixin mdlext-flexible-title($class, $gutter: 8px) {
+  .#{$class} {
+    box-sizing: border-box;
+    position: relative;
+    width: 100%;
+    display: flex;
+    align-self: stretch;
+    align-items: center;
+    margin: 0;
+    padding: 0 $gutter;
+
+    &__text,
+    &__text > * {
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+
+    > * {
+      box-sizing: border-box;
+      margin: 0;
+      padding: 0 $gutter 0 0;
+    }
+
+    > *:last-child {
+      padding-right: 0;
+    }
+
+    // Used to align elements inside a header or drawer, by growing to fill
+    // remaining space. Commonly used for aligning elements to the right.
+    &__spacer {
+      flex: 1;
+    }
+
+    @content;
+  }
+}
+
diff --git a/node_modules/mdl-ext/src/_variables.scss b/node_modules/mdl-ext/src/_variables.scss
new file mode 100644
index 0000000..908b337
--- /dev/null
+++ b/node_modules/mdl-ext/src/_variables.scss
@@ -0,0 +1,581 @@
+/**
+ * Copyright 2016 Leif Olsen. 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 "functions";
+
+// ----------------------------------------------------------------
+// Sample colors
+// ----------------------------------------------------------------
+$mdlext-palette-amber-50:                         #FFF8E1;
+$mdlext-palette-amber-100:                        #FFECB3;
+$mdlext-palette-amber-500:                        #FFC107;
+$mdlext-palette-amber-700:                        #FFA000;
+$mdlext-palette-blue-grey-500:                    #607D8B;
+$mdlext-palette-deep-orange-500:                  #FF5722;
+$mdlext-palette-deep-purple-100:                  #D1C4E9;
+$mdlext-palette-deep-purple-500:                  #512DA8;
+$mdlext-palette-deep-purple-700:                  #673AB7;
+$mdlext-palette-green-50:                         #E8F5E9;
+$mdlext-palette-green-100:                        #C8E6C9;
+$mdlext-palette-green-500:                        #4CAF50;
+$mdlext-palette-green-700:                        #388E3C;
+$mdlext-palette-grey-50:                          #FAFAFA;
+$mdlext-palette-grey-100:                         #F5F5F5;
+$mdlext-palette-grey-200:                         #EEEEEE;
+$mdlext-palette-grey-300:                         #E0E0E0;
+$mdlext-palette-grey-400:                         #BDBDBD;
+$mdlext-palette-grey-500:                         #9E9E9E;
+$mdlext-palette-grey-600:                         #757575;
+$mdlext-palette-grey-700:                         #616161;
+$mdlext-palette-grey-800:                         #424242;
+$mdlext-palette-grey-900:                         #212121;
+$mdlext-palette-indigo-A200:                      #536DFE;
+$mdlext-palette-light-blue-500:                   #03A9F4;
+$mdlext-palette-light-green-500:                  #8BC34A;
+$mdlext-palette-pink-500:                         #E91E63;
+$mdlext-palette-pink-700:                         #C2185B;
+$mdlext-palette-pink-A400:                        #F50057;
+$mdlext-palette-purple-A200:                      #E040FB;
+$mdlext-palette-red-700:                          #D32F2F;
+$mdlext-palette-red-A200:                         #FF5252;
+$mdlext-palette-red-A400:                         #FF1744;
+$mdlext-palette-yellow-500:                       #FFEB3B;
+$mdlext-color-black:                              #000000;
+$mdlext-color-white:                              #FFFFFF;
+
+
+/* ==========   Sticky Header   ========== */
+$mdlext-sticky-header-background-color           : transparent !default;
+$mdlext-sticky-header-background-color-scroll    : transparent !default;
+$mdlext-sticky-header-gradient-color             : rgb-string-to-hex($color-primary) !default;
+$mdlext-sticky-header-gradient-color-start       : $mdlext-sticky-header-gradient-color !default;
+$mdlext-sticky-header-gradient-color-end         : $mdlext-sticky-header-gradient-color-start !default;
+$mdlext-sticky-header-gradient-color-scroll-start: rgba($mdlext-sticky-header-gradient-color, 0.98) !default;
+$mdlext-sticky-header-gradient-color-scroll-end  : rgba($mdlext-sticky-header-gradient-color, 0.95) !default;
+
+// Background shorthand
+/* stylelint-disable */
+$mdlext-sticky-header-background                 : $mdlext-sticky-header-background-color
+                                                   linear-gradient(to bottom,
+                                                      $mdlext-sticky-header-gradient-color-start 0,
+                                                      $mdlext-sticky-header-gradient-color-end 100%) !default;
+
+// Background shorthand when content is scrolling
+$mdlext-sticky-header-background-scroll          : $mdlext-sticky-header-background-color-scroll
+                                                   linear-gradient(to bottom,
+                                                      $mdlext-sticky-header-gradient-color-scroll-start 100%,
+                                                      $mdlext-sticky-header-gradient-color-scroll-end 100%) !default;
+/* stylelint-enable */
+
+/* ==========     Accordion     ========== */
+$mdlext-accordion-header-background-color-base   : $mdlext-palette-grey-500 !default;
+$mdlext-accordion-header-background-color        : rgba($mdlext-accordion-header-background-color-base, 0.20) !default;
+$mdlext-accordion-header-background-open-color   : rgba($mdlext-accordion-header-background-color-base, 0.30) !default;
+$mdlext-accordion-header-background-active-color : rgba($mdlext-accordion-header-background-color-base, 0.40) !default;
+$mdlext-accordion-header-border-color            : rgba($mdlext-accordion-header-background-color-base, 0.50) !default;
+$mdlext-accordion-header-background-hover-color  : rgba($mdlext-accordion-header-background-color-base, 0.40) !default;
+$mdlext-accordion-header-focus-outline-color     : invert !default;
+$mdlext-accordion-header-disabled-color          : rgba($mdlext-accordion-header-background-color-base, 0.12) !default;
+$mdlext-accordion-header-secondary-color         : $mdlext-color-black !default;
+$mdlext-accordion-header-secondary-color-disabled: rgba($mdlext-color-black, 0.26) !default;
+$mdlext-accordion-header-highlight-color         : darken($mdlext-accordion-header-border-color, 3%) !default;
+$mdlext-accordion-ripple-color                   : rgba(rgb-string-to-hex($color-accent-contrast), 0.5) !default;
+$mdlext-accordion-header-padding                 : 8px !default;
+$mdlext-accordion-header-height                  : 56px !default;
+$mdlext-accordion-content-padding                : $mdlext-accordion-header-padding !default;
+$mdlext-accordion-content-color                  : inherit !default;
+$mdlext-accordion-content-background-color       : transparent !default;
+
+
+/* ==========     Dialog     ========== */
+$mdlext-dialog-padding           : 0;
+$mdlext-dialog-background-color  : transparent !default;
+$mdlext-dialog-backdrop-color    : rgba(0, 0, 0, 0.86) !default;
+$mdlext-dialog-open-animation    : 0.5s 0.2s forwards !default;
+$mdlext-dialog-backdrop-animation: 0.2s forwards !default;
+
+
+/* ==========     Lightbox     ========== */
+$mdlext-lightbox-background-color           : $card-background-color !default;
+$mdlext-lightbox-border                     : 0 !default;
+$mdlext-lightbox-border-radius              : 0 !default;
+$mdlext-lightbox-figure-margin              : 0 !default;
+$mdlext-lightbox-figure-padding             : 0 !default;
+$mdlext-lightbox-figcaption-background-color: rgba(255, 255, 255, 0.76) !default;
+$mdlext-lightbox-footer-background-color    : rgba(255, 255, 255, 0.86) !default;
+
+
+/* ==========  Lightboard  ========== */
+$mdlext-lightboard-medium-small-breakpoint     : $grid-tablet-breakpoint !default;          // 480
+$mdlext-lightboard-medium-breakpoint           : $grid-tablet-breakpoint + 180px !default;  // 480 + 180
+$mdlext-lightboard-medium-large-breakpoint     : $grid-desktop-breakpoint !default;         // 840
+$mdlext-lightboard-large-breakpoint            : $grid-desktop-breakpoint + 360px !default; // 840+360
+
+$mdlext-lightboard-small-gutter                : 2px !default;
+$mdlext-lightboard-small-margin                : 0 !default;
+$mdlext-lightboard-small-columns               : 2 !default;
+$mdlext-lightboard-small-frame-width           : 8px !default;
+
+$mdlext-lightboard-medium-small-gutter         : 4px !default;
+$mdlext-lightboard-medium-small-margin         : 0 !default;
+$mdlext-lightboard-medium-small-columns        : 4 !default;
+$mdlext-lightboard-medium-small-frame-width    : 8px !default;
+
+$mdlext-lightboard-medium-gutter               : 4px !default;
+$mdlext-lightboard-medium-margin               : 0 !default;
+$mdlext-lightboard-medium-columns              : 5 !default;
+$mdlext-lightboard-medium-frame-width          : 8px !default;
+
+$mdlext-lightboard-medium-large-gutter         : 8px !default;
+$mdlext-lightboard-medium-large-margin         : 0 !default;
+$mdlext-lightboard-medium-large-columns        : 6 !default;
+$mdlext-lightboard-medium-large-frame-width    : 12px !default;
+
+$mdlext-lightboard-large-gutter                : 8px !default;
+$mdlext-lightboard-large-margin                : 0 !default;
+$mdlext-lightboard-large-columns               : 7 !default;
+$mdlext-lightboard-large-frame-width           : 12px !default;
+
+$mdlext-lightboard-slide-max-size              : 250px !default;
+$mdlext-lightboard-slide-border-color          : #D8D8D8 !default;
+$mdlext-lightboard-slide-background-color      : #F8F8F8 !default;
+$mdlext-lightboard-slide-border-radius         : 5px !default;
+$mdlext-lightboard-slide-inner-border-radius   : 3px !default;
+$mdlext-lightboard-slide-box-shadow            : 2px 2px 6px -1px rgba(219, 215, 219, 0.5) !default;
+$mdlext-lightboard-slide-border-color-hover    : #B8B8B8 !default;
+$mdlext-lightboard-slide-background-color-hover: #E8E8E8 !default;
+$mdlext-lightboard-slide-active-bacground-color: #E8E8E8 !default;
+$mdlext-lightboard-slide-box-shadow-hover      : 2px 2px 12px -1px rgba(219, 215, 219, 1) !default;
+$mdlext-lightboard-ripple-color                : $tab-highlight-color !default;
+$mdlext-lightboard-focus-outline-color         : inherit !default;
+$mdlext-lightboard-figcaption-text-color       : rgb-string-to-hex($palette-grey-400) !default;
+
+
+/* ==========  Carousel  ========== */
+$mdlext-carousel-slide-border-top-width        : 2px !default;
+$mdlext-carousel-slide-border-top-color        : rgb-string-to-hex($color-accent) !default;
+$mdlext-carousel-slide-margin-horizontal       : 0;
+$mdlext-carousel-slide-figcaption-color        : $mdlext-lightboard-figcaption-text-color !default;
+$mdlext-carousel-slide-ripple-color            : $mdlext-lightboard-ripple-color !default;
+
+
+/* ==========  Bordered fields  ========== */
+$mdlext-bordered-field-vertical-spacing-top           : 0 !default;
+$mdlext-bordered-field-vertical-spacing-bottom        : $input-text-vertical-spacing !default;
+
+$mdlext-bordered-field-input-text-font-size           : $input-text-font-size !default;
+$mdlext-bordered-field-font-weight                    : normal !default;
+$mdlext-bordered-field-border-width                   : 1px !default;
+$mdlext-bordered-field-border-radius                  : 3px !default;
+$mdlext-bordered-field-padding                        : $input-text-padding + 4px !default;
+$mdlext-bordered-field-padding-top                    : $input-text-vertical-spacing !default;
+$mdlext-bordered-field-padding-bottom                 : $input-text-padding !default;
+
+$mdlext-bordered-field-input-text-color               : inherit !default;
+$mdlext-bordered-field-border-color                   : rgba($mdlext-color-black, 0.26) !default;
+$mdlext-bordered-field-background-color               : rgba(#FFFFFF, 0.2) !default;
+$mdlext-bordered-field-focus-border-color             : rgb-string-to-hex($color-primary) !default;
+$mdlext-bordered-field-focus-background-color         : rgba(#EEEEEE, 0.2) !default;
+
+$mdlext-bordered-field-input-text-disabled-text-color : rgba($mdlext-color-black, 0.12) !default;
+$mdlext-bordered-field-disabled-border-color          : rgba($mdlext-color-black, 0.12) !default;
+$mdlext-bordered-field-disabled-background-color      : $mdlext-bordered-field-background-color !default;
+
+$mdlext-bordered-field-input-text-error-color         : $mdlext-bordered-field-input-text-color !default;
+$mdlext-bordered-field-error-border-color             : rgb-string-to-hex($input-text-error-color) !default;
+$mdlext-bordered-field-error-background-color         : rgba(lighten($mdlext-bordered-field-error-border-color, 50%), 0.5) !default;
+$mdlext-bordered-field-error-focus-border-color       : darken($mdlext-bordered-field-error-border-color, 10%) !default;
+$mdlext-bordered-field-error-focus-background-color   : $mdlext-bordered-field-error-background-color !default;
+
+$mdlext-bordered-field-input-text-label-color         : rgba($mdlext-color-black, 0.26) !default;
+$mdlext-bordered-field-input-text-label-focus-color   : $mdlext-bordered-field-focus-border-color !default;
+$mdlext-bordered-field-input-text-label-error-color   : $mdlext-bordered-field-error-border-color !default;
+$mdlext-bordered-field-input-text-label-disabled-color: rgba($mdlext-color-black, 0.12) !default;
+
+$mdlext-bordered-field-label-font-size                : $mdlext-bordered-field-input-text-font-size !default;
+$mdlext-bordered-field-floating-label-font-size       : $input-text-floating-label-fontsize !default;
+$mdlext-bordered-field-floating-label-font-weight     : normal !default;
+
+$mdlext-bordered-field-height                         : $mdlext-bordered-field-padding-top + $mdlext-bordered-field-padding-bottom + $mdlext-bordered-field-input-text-font-size + 6px !default;
+$mdlext-bordered-field-floating-label-focus-bottom    : $mdlext-bordered-field-height - $mdlext-bordered-field-floating-label-font-size - $mdlext-bordered-field-padding-top/2 !default;
+
+
+// MDL can not handle required attribute properly. Planned for MDL-v2
+//$mdlext-bordered-field-required-border-color          : rgba(rgb-string-to-hex($color-accent), 0.8) !default;
+//$mdlext-bordered-field-required-background-color      : $mdlext-bordered-field-background-color !default;
+//$mdlext-bordered-field-required-focus-border-color    : rgba(rgb-string-to-hex($color-accent), 0.8) !default;
+//$mdlext-bordered-field-required-focus-background-color: $mdlext-bordered-field-background-color !default;
+//$mdlext-bordered-field-label-required-color           : $mdlext-bordered-field-required-border-color !default;
+
+
+
+/* ==========  Color Themes  ========== */
+
+// ----------------------------------------------------------------
+// Light Color Theme.
+// ----------------------------------------------------------------
+$mdlext-light-color-primary:                      #4CAF50 !default;
+$mdlext-light-color-primary-dark:                 #388E3C !default;
+$mdlext-light-color-primary-light:                #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast:             #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:                       #E040FB !default;
+$mdlext-light-color-accent-light:                 #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:              #FAFAFA !default;
+
+$mdlext-light-content-background-color:           #FAFAFA !default;                         // background color on content (paper/card) background
+$mdlext-light-text-color-primary:                 rgba($mdlext-color-black, 0.87) !default; // text color on content (paper/card) background
+$mdlext-light-text-color-secondary:               rgba($mdlext-color-black, 0.54) !default; // text color on content (paper/card) background
+$mdlext-light-text-color-disabled:                rgba($mdlext-color-black, 0.38) !default; // disabled text, hint text, and icons
+$mdlext-light-divider-color:                      rgba($mdlext-color-black, 0.12) !default; // -> $card-border-color
+$mdlext-light-error-color:                        #D32F2F !default;
+
+// Anchor
+$mdlext-light-text-link-color:                    $mdlext-light-color-accent !default;
+
+// Card
+$mdlext-light-card-background-color:              $mdlext-light-content-background-color !default;
+$mdlext-light-card-text-color:                    $mdlext-light-text-color-primary !default;
+$mdlext-light-card-image-placeholder-color:       $mdlext-light-color-accent !default;
+$mdlext-light-card-supporting-text-text-color:    rgba($mdlext-color-black, 0.54) !default;
+$mdlext-light-card-border-color:                  rgba(0, 0, 0, 0.1) !default;
+$mdlext-light-card-subtitle-color:                rgba($mdlext-color-black, 0.54) !default;
+
+//  Item
+
+// Default Item Colors
+$mdlext-light-default-item-text-color:            rgba($mdlext-color-black, 0.87) !default;
+$mdlext-light-default-item-outline-color:         $mdlext-palette-grey-400 !default;
+$mdlext-light-default-item-hover-bg-color:        $mdlext-palette-grey-200 !default;
+$mdlext-light-default-item-focus-bg-color:        $mdlext-palette-grey-200 !default;
+$mdlext-light-default-item-active-bg-color:       $mdlext-palette-grey-300 !default;
+$mdlext-light-default-item-divider-color:         rgba($mdlext-color-black, 0.12) !default;
+
+// Disabled Button Colors
+$mdlext-light-disabled-item-text-color:           $mdlext-palette-grey-400 !default;
+
+// Dropdown menu / menu-button
+$mdlext-light-default-dropdown-bg-color:          $mdlext-color-white !default;
+
+// Badge
+$mdlext-light-badge-color:                        $mdlext-light-color-accent-contrast !default;
+$mdlext-light-badge-color-inverse:                $mdlext-light-color-accent !default;
+$mdlext-light-badge-background:                   $mdlext-light-color-accent !default;
+$mdlext-light-badge-background-inverse:           $mdlext-light-color-accent-contrast !default;
+
+// Default button colors.
+$mdlext-light-button-primary-color:               rgba($mdlext-palette-grey-500, 0.20) !default;
+$mdlext-light-button-secondary-color:             $mdlext-color-black !default;
+$mdlext-light-button-hover-color:                 $mdlext-light-button-primary-color !default;
+$mdlext-light-button-active-color:                rgba($mdlext-palette-grey-500, 0.40) !default;
+$mdlext-light-button-focus-color:                 rgba($mdlext-color-black, 0.12) !default;
+
+// Colored button colors.
+$mdlext-light-button-primary-color-alt:           $mdlext-light-color-primary-light !default;
+$mdlext-light-button-secondary-color-alt:         $mdlext-light-color-primary-contrast !default;
+$mdlext-light-button-hover-color-alt:             darken($mdlext-light-color-primary-light, 10%) !default;
+$mdlext-light-button-active-color-alt:            darken($mdlext-light-color-primary-light, 10%) !default;
+$mdlext-light-button-focus-color-alt:             $mdlext-light-button-focus-color !default;
+
+// Ripple color for colored raised buttons.
+$mdlext-light-button-ripple-color-alt:            $mdlext-light-color-primary-contrast !default;
+
+// Disabled button colors.
+$mdlext-light-button-primary-color-disabled:      rgba($mdlext-color-black, 0.12) !default;
+$mdlext-light-button-secondary-color-disabled:    rgba($mdlext-color-black, 0.26) !default;
+
+// FAB colors and sizes.
+$mdlext-light-button-fab-color-alt:               $mdlext-light-color-accent !default;
+$mdlext-light-button-fab-hover-color-alt:         $mdlext-light-color-accent !default;
+$mdlext-light-button-fab-active-color-alt:        $mdlext-light-color-accent !default;
+$mdlext-light-button-fab-text-color-alt:          $mdlext-light-color-accent-contrast !default;
+$mdlext-light-button-fab-ripple-color-alt:        $mdlext-light-color-accent-contrast !default;
+
+// Slider
+$mdlext-light-range-bg-color:                     rgba($mdlext-color-black, 0.26) !default;
+$mdlext-light-range-color:                        $mdlext-light-color-accent-light !default;
+$mdlext-light-range-faded-color:                  rgba($mdlext-light-color-accent-light, 0.26) !default;
+$mdlext-light-range-bg-focus-color:               rgba($mdlext-color-black, 0.12) !default;
+
+// Textfields
+$mdlext-light-input-text-background-color:        transparent !default;
+$mdlext-light-input-text-label-color:             rgba($mdlext-color-black, 0.54) !default;
+$mdlext-light-input-text-bottom-border-color:     rgba($mdlext-color-black, 0.26) !default;
+$mdlext-light-input-text-highlight-color:         $mdlext-light-color-accent-light !default;
+$mdlext-light-input-text-disabled-color:          rgba($mdlext-color-black, 0.12) !default;
+$mdlext-light-input-text-disabled-text-color:     rgba($mdlext-color-black, 0.26) !default;
+$mdlext-light-input-text-error-color:             $mdlext-light-error-color !default;
+
+// Checkboxes
+$mdlext-light-checkbox-color:                     $mdlext-light-color-accent-light !default;
+$mdlext-light-checkbox-off-color:                 rgba($mdlext-color-black, 0.54) !default;
+$mdlext-light-checkbox-disabled-color:            rgba($mdlext-color-black, 0.26) !default;
+$mdlext-light-checkbox-focus-color:               rgba($mdlext-light-color-accent-light, 0.26) !default;
+
+// Icon Toggles
+$mdlext-light-icon-toggle-color:                  $mdlext-palette-grey-700 !default;
+$mdlext-light-icon-toggle-focus-color:            $mdlext-light-button-focus-color !default;
+$mdlext-light-icon-toggle-checked-color:          $mdlext-light-color-accent-light !default;
+$mdlext-light-icon-toggle-checked-focus-color:    rgba($mdlext-light-color-accent-light, 0.26) !default;
+$mdlext-light-icon-toggle-disabled-color:         rgba($mdlext-color-black, 0.26) !default;
+
+// Radio Buttons
+$mdlext-light-radio-color:                        $mdlext-light-color-accent-light !default;
+$mdlext-light-radio-off-color:                    rgba($mdlext-color-black, 0.54) !default;
+$mdlext-light-radio-disabled-color:               rgba($mdlext-color-black, 0.26) !default;
+
+// Switches
+$mdlext-light-switch-color:                       $mdlext-light-color-accent-light !default;
+$mdlext-light-switch-faded-color:                 rgba($mdlext-light-color-accent-light, 0.26) !default;
+$mdlext-light-switch-thumb-color:                 $mdlext-light-switch-color !default;
+$mdlext-light-switch-track-color:                 rgba($mdlext-light-color-accent-light, 0.54) !default;
+$mdlext-light-switch-off-thumb-color:             $mdlext-palette-grey-50 !default;
+$mdlext-light-switch-off-track-color:             rgba($mdlext-color-black, 0.26) !default;
+$mdlext-light-switch-disabled-thumb-color:        $mdlext-palette-grey-400 !default;
+$mdlext-light-switch-disabled-track-color:        rgba($mdlext-color-black, 0.12) !default;
+
+// Data table
+$mdlext-light-data-table-background-color:               $mdlext-light-content-background-color !default;
+$mdlext-light-data-table-header-color:                   rgba($mdlext-color-black, 0.54) !default;
+$mdlext-light-data-table-header-sorted-color:            rgba($mdlext-color-black, 0.87) !default;
+$mdlext-light-data-table-header-sorted-icon-hover-color: rgba($mdlext-color-black, 0.26) !default;
+$mdlext-light-data-table-hover-color:                    $mdlext-palette-grey-200 !default;
+$mdlext-light-data-table-selection-color:                $mdlext-palette-grey-200 !default;
+$mdlext-light-data-table-divider-color:                  rgba($mdlext-color-black, 0.12) !default;
+$mdlext-light-data-table-dividers:                       1px solid $mdlext-light-data-table-divider-color !default;
+
+
+// Selectfield
+// Uses variables from textfield
+$mdlext-selectfield-arrow-width: 0.7em;
+$mdlext-selectfield-arrow-length: 0.5em;
+
+
+// Accordion
+$mdlext-light-accordion-header-background-color-base   : $mdlext-palette-grey-600 !default;
+$mdlext-light-accordion-header-background-color        : rgba($mdlext-light-accordion-header-background-color-base, 0.20) !default;
+$mdlext-light-accordion-header-background-open-color   : rgba($mdlext-light-accordion-header-background-color-base, 0.30) !default;
+$mdlext-light-accordion-header-background-active-color : rgba($mdlext-light-accordion-header-background-color-base, 0.40) !default;
+$mdlext-light-accordion-header-border-color            : rgba($mdlext-light-accordion-header-background-color-base, 0.50) !default;
+$mdlext-light-accordion-header-background-hover-color  : rgba($mdlext-light-accordion-header-background-color-base, 0.40) !default;
+$mdlext-light-accordion-header-focus-outline-color     : darken($mdlext-light-accordion-header-border-color, 3%) !default;
+$mdlext-light-accordion-header-disabled-color          : rgba($mdlext-light-accordion-header-background-color-base, 0.12) !default;
+$mdlext-light-accordion-header-secondary-color         : $mdlext-color-black !default;
+$mdlext-light-accordion-header-secondary-color-disabled: rgba($mdlext-color-black, 0.26) !default;
+$mdlext-light-accordion-header-highlight-color         : darken($mdlext-light-accordion-header-border-color, 6%) !default;
+$mdlext-light-accordion-ripple-color                   : rgba($mdlext-light-accordion-header-background-color-base, 0.4) !default;
+$mdlext-light-accordion-content-color                  : inherit !default;
+$mdlext-light-accordion-content-background-color       : transparent !default;
+
+
+// Bordered fields
+$mdlext-light-bordered-field-input-text-color               : inherit !default;
+$mdlext-light-bordered-field-border-color                   : $mdlext-light-input-text-bottom-border-color !default;
+$mdlext-light-bordered-field-background-color               : rgba($mdlext-light-content-background-color, 0.1) !default;
+$mdlext-light-bordered-field-focus-border-color             : $mdlext-light-color-accent-light !default;
+$mdlext-light-bordered-field-focus-background-color         : rgba(darken($mdlext-light-bordered-field-background-color, 10%), 0.1) !default;
+
+$mdlext-light-bordered-field-input-text-disabled-text-color : $mdlext-light-input-text-disabled-text-color;
+$mdlext-light-bordered-field-disabled-border-color          : $mdlext-light-input-text-disabled-color !default;
+$mdlext-light-bordered-field-disabled-background-color      : $mdlext-light-bordered-field-background-color !default;
+
+$mdlext-light-bordered-field-input-text-error-color         : $mdlext-light-bordered-field-input-text-color !default;
+$mdlext-light-bordered-field-error-border-color             : $mdlext-light-input-text-error-color !default;
+$mdlext-light-bordered-field-error-background-color         : rgba(lighten($mdlext-light-bordered-field-error-border-color, 50%), 0.5) !default;
+$mdlext-light-bordered-field-error-focus-border-color       : darken($mdlext-light-bordered-field-error-border-color, 10%) !default;
+$mdlext-light-bordered-field-error-focus-background-color   : $mdlext-light-bordered-field-error-background-color !default;
+
+$mdlext-light-bordered-field-input-text-label-color         : $mdlext-light-input-text-label-color !default;
+$mdlext-light-bordered-field-input-text-label-focus-color   : $mdlext-light-bordered-field-focus-border-color !default;
+$mdlext-light-bordered-field-input-text-label-error-color   : $mdlext-light-bordered-field-error-border-color !default;
+$mdlext-light-bordered-field-input-text-label-disabled-color: $mdlext-light-input-text-disabled-text-color !default;
+
+
+
+// ----------------------------------------------------------------
+// Dark Color Theme.
+// ----------------------------------------------------------------
+$mdlext-dark-color-primary:                       #FFC107 !default;
+$mdlext-dark-color-primary-dark:                  #FFA000 !default;
+$mdlext-dark-color-primary-light:                 #FFC107 !default;             // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-dark-color-primary-contrast:              #FFF8E1 !default;             // text color on primary/primary dark background
+$mdlext-dark-color-accent:                        #536DFE !default;
+$mdlext-dark-color-accent-light:                  #536DFE !default;             // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-dark-color-accent-contrast:               #FFFFFF !default;
+
+$mdlext-dark-content-background-color:            #303030 !default;             // #424242 or #303030, background color on content (paper/card) background
+$mdlext-dark-text-color-primary:                  rgba(#FFFFFF, 1.00) !default; // text color on content (paper/card) background
+$mdlext-dark-text-color-secondary:                rgba(#FFFFFF, 0.70) !default; // text color on content (paper/card) background
+$mdlext-dark-text-color-disabled:                 rgba(#FFFFFF, 0.50) !default; // disabled text, hint text, and icons
+$mdlext-dark-divider-color:                       rgba(#FFFFFF, 0.12) !default; // -> $card-border-color
+$mdlext-dark-error-color:                         #FF1744 !default;
+
+// Anchor
+$mdlext-dark-text-link-color:                     $mdlext-dark-color-accent !default;
+
+// Card
+$mdlext-dark-card-background-color:               $mdlext-dark-content-background-color !default;
+$mdlext-dark-card-text-color:                     $mdlext-dark-text-color-primary !default;
+$mdlext-dark-card-image-placeholder-color:        $mdlext-dark-color-accent !default;
+$mdlext-dark-card-supporting-text-text-color:     rgba($mdlext-color-white, 0.70) !default;
+$mdlext-dark-card-border-color:                   rgba(0, 0, 0, 0.1) !default;
+$mdlext-dark-card-subtitle-color:                 rgba($mdlext-color-black, 0.70) !default;
+
+//  Item
+
+// Default Item Colors
+$mdlext-dark-default-item-text-color:             rgba($mdlext-color-white, 0.87) !default;
+$mdlext-dark-default-item-outline-color:          $mdlext-palette-grey-700 !default;
+$mdlext-dark-default-item-hover-bg-color:         $mdlext-palette-grey-900 !default;
+$mdlext-dark-default-item-focus-bg-color:         $mdlext-palette-grey-900 !default;
+$mdlext-dark-default-item-active-bg-color:        $mdlext-palette-grey-800 !default;
+$mdlext-dark-default-item-divider-color:          rgba($mdlext-color-white, 0.20) !default;
+
+// Disabled Button Colors
+$mdlext-dark-disabled-item-text-color:            $mdlext-palette-grey-500 !default;
+
+// Dropdown menu / menu-button
+$mdlext-dark-default-dropdown-bg-color:           $mdlext-color-black !default;
+
+// Badge
+$mdlext-dark-badge-color:                         $mdlext-dark-color-accent-contrast !default;
+$mdlext-dark-badge-color-inverse:                 $mdlext-dark-color-accent !default;
+$mdlext-dark-badge-background:                    $mdlext-dark-color-accent !default;
+$mdlext-dark-badge-background-inverse:            $mdlext-dark-color-accent-contrast !default;
+
+// Default button colors.
+$mdlext-dark-button-primary-color:                rgba($mdlext-palette-grey-500, 0.20) !default;
+$mdlext-dark-button-secondary-color:              $mdlext-color-white !default;
+$mdlext-dark-button-hover-color:                  $mdlext-dark-button-primary-color !default;
+$mdlext-dark-button-active-color:                 rgba($mdlext-palette-grey-500, 0.40) !default;
+$mdlext-dark-button-focus-color:                  rgba($mdlext-color-black, 0.12) !default;
+
+// Colored button colors.
+$mdlext-dark-button-primary-color-alt:            $mdlext-dark-color-primary-light !default;
+$mdlext-dark-button-secondary-color-alt:          $mdlext-dark-color-primary-contrast !default;
+$mdlext-dark-button-hover-color-alt:              darken($mdlext-dark-color-primary-light, 10%) !default;
+$mdlext-dark-button-active-color-alt:             darken($mdlext-dark-color-primary-light, 10%) !default;
+$mdlext-dark-button-focus-color-alt:              $mdlext-dark-button-focus-color !default;
+
+// Ripple color for colored raised buttons.
+$mdlext-dark-button-ripple-color-alt:             $mdlext-dark-color-primary-contrast !default;
+
+// Disabled button colors.
+$mdlext-dark-button-primary-color-disabled:       rgba($mdlext-color-white, 0.12) !default;
+$mdlext-dark-button-secondary-color-disabled:     rgba($mdlext-color-white, 0.26) !default;
+
+// FAB colors and sizes.
+$mdlext-dark-button-fab-color-alt:                $mdlext-dark-color-accent !default;
+$mdlext-dark-button-fab-hover-color-alt:          $mdlext-dark-color-accent !default;
+$mdlext-dark-button-fab-active-color-alt:         $mdlext-dark-color-accent !default;
+$mdlext-dark-button-fab-text-color-alt:           $mdlext-dark-color-accent-contrast !default;
+$mdlext-dark-button-fab-ripple-color-alt:         $mdlext-dark-color-accent-contrast !default;
+
+// Slider
+$mdlext-dark-range-bg-color:                      rgba($mdlext-color-white, 0.87) !default;
+$mdlext-dark-range-color:                         $mdlext-dark-color-accent-light !default;
+$mdlext-dark-range-faded-color:                   rgba($mdlext-dark-color-accent-light, 0.50) !default;
+$mdlext-dark-range-bg-focus-color:                rgba($mdlext-color-white, 0.50) !default;
+
+// Textfields
+$mdlext-dark-input-text-background-color:         transparent !default;
+$mdlext-dark-input-text-label-color:              rgba($mdlext-color-white, 0.50) !default;
+$mdlext-dark-input-text-bottom-border-color:      rgba($mdlext-color-white, 0.26) !default;
+$mdlext-dark-input-text-highlight-color:          $mdlext-dark-color-accent-light !default;
+$mdlext-dark-input-text-disabled-color:           rgba($mdlext-color-white, 0.12) !default;
+$mdlext-dark-input-text-disabled-text-color:      rgba($mdlext-color-white, 0.26) !default;
+$mdlext-dark-input-text-error-color:              $mdlext-dark-error-color !default;
+
+// Checkboxes
+$mdlext-dark-checkbox-color:                      $mdlext-dark-color-accent-light !default;
+$mdlext-dark-checkbox-off-color:                  rgba($mdlext-color-white, 0.50) !default;
+$mdlext-dark-checkbox-disabled-color:             rgba($mdlext-color-white, 0.26) !default;
+$mdlext-dark-checkbox-focus-color:                rgba($mdlext-dark-color-accent-light, 0.26) !default;
+
+// Icon Toggles
+$mdlext-dark-icon-toggle-color:                   $mdlext-palette-grey-700 !default;
+$mdlext-dark-icon-toggle-focus-color:             $mdlext-dark-button-focus-color !default;
+$mdlext-dark-icon-toggle-checked-color:           $mdlext-dark-color-accent-light !default;
+$mdlext-dark-icon-toggle-checked-focus-color:     rgba($mdlext-dark-color-accent-light, 0.26) !default;
+$mdlext-dark-icon-toggle-disabled-color:          rgba($mdlext-color-white, 0.50) !default;
+
+// Radio Buttons
+$mdlext-dark-radio-color:                         $mdlext-dark-color-accent-light !default;
+$mdlext-dark-radio-off-color:                     rgba($mdlext-color-white, 0.50) !default;
+$mdlext-dark-radio-disabled-color:                rgba($mdlext-color-white, 0.26) !default;
+
+// Switches
+$mdlext-dark-switch-color:                        $mdlext-dark-color-accent-light !default;
+$mdlext-dark-switch-faded-color:                  rgba($mdlext-dark-color-accent-light, 0.26) !default;
+$mdlext-dark-switch-thumb-color:                  $mdlext-dark-switch-color !default;
+$mdlext-dark-switch-track-color:                  rgba($mdlext-dark-color-accent-light, 0.5) !default;
+$mdlext-dark-switch-off-thumb-color:              $mdlext-palette-grey-50 !default;
+$mdlext-dark-switch-off-track-color:              rgba($mdlext-color-white, 0.26) !default;
+$mdlext-dark-switch-disabled-thumb-color:         $mdlext-palette-grey-50 !default;
+$mdlext-dark-switch-disabled-track-color:         rgba($mdlext-color-white, 0.12) !default;
+
+// Data table
+$mdlext-dark-data-table-background-color:               $mdlext-dark-content-background-color !default;
+$mdlext-dark-data-table-header-color:                   rgba($mdlext-color-white, 0.87) !default;
+$mdlext-dark-data-table-header-sorted-color:            rgba($mdlext-color-white, 0.87) !default;
+$mdlext-dark-data-table-header-sorted-icon-hover-color: rgba($mdlext-color-white, 0.26) !default;
+$mdlext-dark-data-table-hover-color:                    $mdlext-dark-default-item-hover-bg-color !default;
+$mdlext-dark-data-table-selection-color:                $mdlext-dark-default-item-active-bg-color !default;
+$mdlext-dark-data-table-divider-color:                  rgba($mdlext-color-white, 0.12) !default;
+$mdlext-dark-data-table-dividers:                       1px solid $mdlext-dark-data-table-divider-color !default;
+
+
+// Selectfield
+// Uses variables from textfield
+
+
+// Accordion
+$mdlext-dark-accordion-header-background-color-base   : $mdlext-color-black !default;
+$mdlext-dark-accordion-header-background-color        : rgba($mdlext-dark-accordion-header-background-color-base, 1.0) !default;
+$mdlext-dark-accordion-header-background-open-color   : rgba($mdlext-dark-accordion-header-background-color-base, 0.9) !default;
+$mdlext-dark-accordion-header-border-color            : $mdlext-palette-grey-800 !default;
+$mdlext-dark-accordion-header-background-hover-color  : rgba($mdlext-dark-accordion-header-background-color-base, 0.5) !default;
+$mdlext-dark-accordion-header-background-active-color : rgba($mdlext-dark-accordion-header-background-color-base, 0.6) !default;
+$mdlext-dark-accordion-header-focus-outline-color     : lighten($mdlext-dark-accordion-header-border-color, 40%) !default;
+$mdlext-dark-accordion-header-disabled-color          : rgba($mdlext-dark-accordion-header-background-color-base, 0.4) !default;
+$mdlext-dark-accordion-header-secondary-color         : $mdlext-dark-text-color-primary !default;
+$mdlext-dark-accordion-header-secondary-color-disabled: $mdlext-dark-text-color-disabled !default;
+$mdlext-dark-accordion-header-highlight-color         : lighten($mdlext-dark-accordion-header-border-color, 40%) !default;
+$mdlext-dark-accordion-ripple-color                   : rgba($mdlext-dark-accordion-header-background-color-base, 0.3) !default;
+$mdlext-dark-accordion-content-color                  : inherit !default;
+$mdlext-dark-accordion-content-background-color       : transparent !default;
+
+
+// Bordered fields
+$mdlext-dark-bordered-field-input-text-color               : inherit !default;
+$mdlext-dark-bordered-field-border-color                   : $mdlext-dark-input-text-bottom-border-color !default;
+$mdlext-dark-bordered-field-background-color               : rgba($mdlext-dark-content-background-color, 0.1) !default;
+$mdlext-dark-bordered-field-focus-border-color             : $mdlext-dark-color-accent-light !default;
+$mdlext-dark-bordered-field-focus-background-color         : rgba(darken($mdlext-dark-bordered-field-background-color, 10%), 0.1) !default;
+
+$mdlext-dark-bordered-field-input-text-disabled-text-color : $mdlext-dark-input-text-disabled-text-color;
+$mdlext-dark-bordered-field-disabled-border-color          : $mdlext-dark-input-text-disabled-color !default;
+$mdlext-dark-bordered-field-disabled-background-color      : $mdlext-dark-bordered-field-background-color !default;
+
+$mdlext-dark-bordered-field-input-text-error-color         : $mdlext-dark-bordered-field-input-text-color !default;
+$mdlext-dark-bordered-field-error-border-color             : $mdlext-dark-input-text-error-color !default;
+$mdlext-dark-bordered-field-error-background-color         : rgba($mdlext-dark-bordered-field-error-border-color, 0.1) !default;
+$mdlext-dark-bordered-field-error-focus-border-color       : darken($mdlext-dark-bordered-field-error-border-color, 10%) !default;
+$mdlext-dark-bordered-field-error-focus-background-color   : $mdlext-dark-bordered-field-error-background-color !default;
+
+$mdlext-dark-bordered-field-input-text-label-color         : $mdlext-dark-input-text-label-color !default;
+$mdlext-dark-bordered-field-input-text-label-focus-color   : $mdlext-dark-bordered-field-focus-border-color !default;
+$mdlext-dark-bordered-field-input-text-label-error-color   : $mdlext-dark-bordered-field-error-border-color !default;
+$mdlext-dark-bordered-field-input-text-label-disabled-color: $mdlext-dark-input-text-disabled-text-color !default;
diff --git a/node_modules/mdl-ext/src/accordion/_accordion.scss b/node_modules/mdl-ext/src/accordion/_accordion.scss
new file mode 100644
index 0000000..6109194
--- /dev/null
+++ b/node_modules/mdl-ext/src/accordion/_accordion.scss
@@ -0,0 +1,395 @@
+@charset "UTF-8";
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+.mdlext-aria-toggle-plus-minus {
+  @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: 1.4em);
+}
+
+.mdlext-aria-toggle-material-icons {
+  @include mdlext-aria-expanded-toggle($font-size: 1.3em, $icon: 'expand_more', $icon-expanded: 'expand_less', $icon-offset: -$mdlext-accordion-header-padding);
+}
+
+.mdlext-accordion {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: flex;
+
+  * {
+    box-sizing: border-box;
+  }
+
+  &__panel {
+    box-sizing: border-box;
+    position: relative;
+    overflow: hidden;
+    display: flex;
+    flex-wrap: nowrap;
+  }
+
+  &__tab {
+    @include typo-title();
+
+    font-weight: 400;
+    line-height: 1.1;
+    box-sizing: border-box;
+    position: relative;
+    margin: 0;
+    padding: 0; // $mdlext-accordion-header-padding;
+    min-width: $mdlext-accordion-header-height;
+    min-height: $mdlext-accordion-header-height;
+    display: flex;
+    align-items: center;
+    align-self: stretch;
+    user-select: none;
+    color: $mdlext-accordion-header-secondary-color;
+    background-color: $mdlext-accordion-header-background-color;
+    cursor: pointer;
+    overflow: hidden;
+
+    &:focus {
+      outline-offset: -2px;
+      outline-color: $mdlext-accordion-header-focus-outline-color;
+      outline-width: 2px;
+    }
+
+    &[aria-expanded='true'] {
+      background-color: $mdlext-accordion-header-background-open-color;
+    }
+
+    &[aria-selected='true'] {
+      background-color: $mdlext-accordion-header-background-active-color;
+    }
+
+    &[disabled] {
+      background-color: $mdlext-accordion-header-disabled-color;
+      color: $mdlext-accordion-header-secondary-color-disabled;
+      pointer-events: none;
+
+      > * {
+        color: $mdlext-accordion-header-secondary-color-disabled;
+      }
+    }
+
+    &:hover:not([disabled]) {
+      background-color: $mdlext-accordion-header-background-hover-color;
+    }
+
+    > * {
+      margin: 0;
+      padding: 0;
+    }
+
+    &__caption {
+      padding-left: $mdlext-accordion-header-padding;
+      padding-right: $mdlext-accordion-header-padding;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+
+    > *:first-child {
+      padding-left: 0;
+    }
+
+    &--ripple {
+      &[aria-selected='true']::before {
+        content: '';
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        background: $mdlext-accordion-ripple-color;
+        opacity: 0;
+        border-radius: 100%;
+        transform: scale(1, 1) translate(-50%);
+        transform-origin: 50% 50%;
+      }
+      &[aria-selected='true']:focus:not(:active)::before {
+        // http://easings.net/
+        animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; // cubic-bezier(0.4, 0.0, 1, 1); //cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; //ease-out;
+      }
+    }
+  }
+
+  &__tabpanel {
+    box-sizing: border-box;
+    margin: 0;
+    padding: 0 $mdlext-accordion-content-padding;
+    color: $mdlext-accordion-content-color;
+    background-color: $mdlext-accordion-content-background-color;
+    display: block;
+    overflow: auto;
+    flex-grow: 1;
+
+    &[hidden] {
+      @include mdlext-visually-hidden;
+    }
+  }
+}
+
+// Vertical layout
+.mdlext-accordion {
+
+  &--vertical {
+    flex-direction: column;
+    flex-wrap: nowrap;
+
+    .mdlext-accordion__panel {
+      min-height: $mdlext-accordion-header-height;
+      flex-direction: column;
+    }
+
+    .mdlext-accordion__tab {
+      height: $mdlext-accordion-header-height;
+      border-top: 1px solid $mdlext-accordion-header-border-color;
+      padding-left: $mdlext-accordion-header-padding;
+      padding-right: $mdlext-accordion-header-padding;
+
+      &[aria-selected='true']::after {
+        position: absolute;
+        bottom: 0;
+        left: 0;
+        height: 1px;
+        width: 100%;
+        display: block;
+        content: " ";
+        background-color: $mdlext-accordion-header-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);
+      }
+
+      > * {
+        padding-left: $mdlext-accordion-header-padding;
+      }
+
+      > *:first-child {
+        padding-left: 0;
+      }
+
+      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
+        margin-left: auto; // If more than one element, push last element to the right
+      }
+
+      &--ripple {
+        &[aria-selected='true']::before {
+          width: 5%;
+          height: 10%;
+        }
+      }
+
+    }
+
+    .mdlext-accordion__tabpanel {
+      border-top: 1px solid $mdlext-accordion-header-border-color;
+
+      &--animation {
+        transform: scaleY(1);
+        animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;
+
+        &[hidden] {
+          transform: scaleY(0);
+          animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;
+          animation-delay: 0.1s;
+        }
+      }
+    }
+  }
+}
+
+// Horizontal layout
+.mdlext-accordion {
+
+  &--horizontal {
+
+    .mdlext-accordion__panel {
+      min-width: $mdlext-accordion-header-height;
+      width: $mdlext-accordion-header-height;
+    }
+
+    &[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {
+      width: 100%;
+    }
+
+    .mdlext-accordion__tab {
+      flex-direction: column-reverse;
+      width: $mdlext-accordion-header-height;
+      white-space: nowrap;
+      border-left: 1px solid $mdlext-accordion-header-border-color;
+
+      &[aria-selected='true']::after {
+        position: absolute;
+        top: 0;
+        right: 0;
+        height: 100%;
+        width: 1px;
+        display: block;
+        content: " ";
+        background-color: $mdlext-accordion-header-highlight-color;
+
+        // Figure out how to animate a vertical line
+        //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);
+      }
+
+      > * {
+        //transform: rotate(-90deg) translateX(50%);
+        transform: rotate(-90deg) translateX($mdlext-accordion-header-padding);
+      }
+
+      > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
+        // If more than one element, push last element to top
+        margin-bottom: auto;
+        transform: rotate(-90deg) translateX(0);
+      }
+
+      &__caption {
+        transform: rotate(-90deg) translateX(50%);
+        padding-right: $mdlext-accordion-header-padding + 8px;
+      }
+
+      &--ripple {
+        &[aria-selected='true']::before {
+          width: 10%;
+          height: 5%;
+        }
+      }
+    }
+
+    .mdlext-accordion__tabpanel {
+      border-left: 1px solid $mdlext-accordion-header-border-color;
+
+      &--animation {
+        transform: scaleX(1);
+        animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;
+
+        &[hidden] {
+          transform: scaleX(0);
+          animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;
+        }
+      }
+    }
+  }
+}
+
+.mdlext-accordion {
+
+  &__panel:first-child > &__tab {
+    // Use container to set outer borders
+    border-top-color: transparent;
+    border-left-color: transparent;
+  }
+
+  &[aria-multiselectable="false"] {
+    .mdlext-accordion__panel.is-expanded {
+      flex-grow: 1;
+    }
+  }
+}
+
+// Making accordion appear disabled.
+// Note: does not prevent tabbing into a disabled accordion
+.mdlext-accordion[disabled] {
+  * {
+    pointer-events: none;
+  }
+  .mdlext-accordion__tab {
+    background-color: $mdlext-accordion-header-disabled-color;
+    color: $mdlext-accordion-header-secondary-color-disabled;
+
+    > * {
+      color: $mdlext-accordion-header-secondary-color-disabled;
+    }
+  }
+  .mdlext-accordion__tabpanel {
+    opacity: 0.8;
+    filter: blur(1px) grayscale(80%);
+  }
+}
+
+
+@keyframes mdlext-accordion-tab-ripple {
+  0% {
+    transform: scale(0, 0);
+    opacity: 1;
+  }
+  20% {
+    transform: scale(25, 25);
+    opacity: 1;
+  }
+  100% {
+    opacity: 0;
+    transform: scale(40, 40);
+  }
+}
+
+/*
+@keyframes mdlext-accordion-show-tabpanel-y {
+  0% { transform: scaleY(0.1); }
+  40% { transform: scaleY(1.03); }
+  60% { transform: scaleY(0.98); }
+  80% { transform: scaleY(1.03); }
+  100% { transform: scaleY(0.98); }
+  80% { transform: scaleY(1.01); }
+  100% { transform: scaleY(1); }
+}
+*/
+
+@keyframes mdlext-accordion-show-tabpanel-y {
+  0% { transform: scaleY(0); }
+  60% { transform: scaleY(1.01); }
+  80% { transform: scaleY(0.98); }
+  100% { transform: scaleY(1); }
+}
+
+@keyframes mdlext-accordion-hide-tabpanel-y {
+  0% { transform: scaleY(1); }
+  60% { transform: scaleY(0.98); }
+  80% { transform: scaleY(1.01); }
+  100% { transform: scaleY(0); }
+}
+
+/*
+@keyframes mdlext-accordion-show-tabpanel-x {
+  0% { transform: scaleX(0.1); }
+  40% { transform: scaleX(1.03); }
+  60% { transform: scaleX(0.98); }
+  80% { transform: scaleX(1.03); }
+  100% { transform: scaleX(0.98); }
+  80% { transform: scaleX(1.01); }
+  100% { transform: scaleX(1); }
+}
+*/
+
+@keyframes mdlext-accordion-show-tabpanel-x {
+  0% { transform: scaleX(0); }
+  60% { transform: scaleX(1.01); }
+  80% { transform: scaleX(0.98); }
+  100% { transform: scaleX(1); }
+}
+
+@keyframes mdlext-accordion-hide-tabpanel-x {
+  0% { transform: scaleX(1); }
+  60% { transform: scaleX(0.98); }
+  80% { transform: scaleX(1.01); }
+  100% { transform: scaleX(0); }
+}
diff --git a/node_modules/mdl-ext/src/accordion/accordion.js b/node_modules/mdl-ext/src/accordion/accordion.js
new file mode 100644
index 0000000..0ef7bef
--- /dev/null
+++ b/node_modules/mdl-ext/src/accordion/accordion.js
@@ -0,0 +1,549 @@
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/**
+ * A WAI-ARIA friendly accordion component.
+ * An accordion is a collection of expandable panels associated with a common outer container. Panels consist
+ * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections
+ * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.
+ * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates
+ * and makes the contents of each panel visible (or not) by interacting with the Accordion Header
+ */
+
+import {
+  VK_ENTER,
+  VK_SPACE,
+  VK_END,
+  VK_HOME,
+  VK_ARROW_LEFT,
+  VK_ARROW_UP,
+  VK_ARROW_RIGHT,
+  VK_ARROW_DOWN,
+  IS_EXPANDED,
+  IS_UPGRADED,
+  ARIA_MULTISELECTABLE,
+  ARIA_EXPANDED,
+  ARIA_HIDDEN,
+  ARIA_SELECTED
+} from '../utils/constants';
+
+
+(function() {
+  'use strict';
+  const ACCORDION            = 'mdlext-accordion';
+  const ACCORDION_VERTICAL   = 'mdlext-accordion--vertical';
+  const ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';
+  const PANEL                = 'mdlext-accordion__panel';
+  const PANEL_ROLE           = 'presentation';
+  const TAB                  = 'mdlext-accordion__tab';
+  const TAB_CAPTION          = 'mdlext-accordion__tab__caption';
+  const TAB_ROLE             = 'tab';
+  const TABPANEL             = 'mdlext-accordion__tabpanel';
+  const TABPANEL_ROLE        = 'tabpanel';
+  const RIPPLE_EFFECT        = 'mdlext-js-ripple-effect';
+  const RIPPLE               = 'mdlext-accordion__tab--ripple';
+  const ANIMATION_EFFECT     = 'mdlext-js-animation-effect';
+  const ANIMATION            = 'mdlext-accordion__tabpanel--animation';
+
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  const MaterialExtAccordion = function MaterialExtAccordion( element ) {
+
+    // Stores the Accordion HTML element.
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtAccordion'] = MaterialExtAccordion;
+
+
+  // Helpers
+  const accordionPanelElements = ( element ) => {
+    if(!element) {
+      return {
+        panel: null,
+        tab: null,
+        tabpanel: null
+      };
+    }
+    else if (element.classList.contains(PANEL)) {
+      return {
+        panel: element,
+        tab: element.querySelector(`.${TAB}`),
+        tabpanel: element.querySelector(`.${TABPANEL}`)
+      };
+    }
+    else {
+      return {
+        panel: element.parentNode,
+        tab: element.parentNode.querySelector(`.${TAB}`),
+        tabpanel: element.parentNode.querySelector(`.${TABPANEL}`)
+      };
+    }
+  };
+
+
+  // Private methods.
+
+  /**
+   * Handles custom command event, 'open', 'close', 'toggle' or upgrade
+   * @param event. A custom event
+   * @private
+   */
+  MaterialExtAccordion.prototype.commandHandler_ = function( event ) {
+    event.preventDefault();
+    event.stopPropagation();
+
+    if(event && event.detail) {
+      this.command(event.detail);
+    }
+  };
+
+  /**
+   * Dispatch toggle event
+   * @param {string} state
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function ( state, tab, tabpanel ) {
+    const ce = new CustomEvent('toggle', {
+      bubbles: true,
+      cancelable: true,
+      detail: { state: state, tab: tab, tabpanel: tabpanel }
+    });
+    this.element_.dispatchEvent(ce);
+  };
+
+  /**
+   * Open tab
+   * @param {Element} panel
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.openTab_ = function( panel, tab, tabpanel ) {
+    panel.classList.add(IS_EXPANDED);
+    tab.setAttribute(ARIA_EXPANDED, 'true');
+    tabpanel.removeAttribute('hidden');
+    tabpanel.setAttribute(ARIA_HIDDEN, 'false');
+    this.dispatchToggleEvent_('open', tab, tabpanel);
+  };
+
+  /**
+   * Close tab
+   * @param {Element} panel
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.closeTab_ = function( panel, tab, tabpanel ) {
+    panel.classList.remove(IS_EXPANDED);
+    tab.setAttribute(ARIA_EXPANDED, 'false');
+    tabpanel.setAttribute('hidden', '');
+    tabpanel.setAttribute(ARIA_HIDDEN, 'true');
+    this.dispatchToggleEvent_('close', tab, tabpanel);
+  };
+
+  /**
+   * Toggle tab
+   * @param {Element} panel
+   * @param {Element} tab
+   * @param {Element} tabpanel
+   * @private
+   */
+  MaterialExtAccordion.prototype.toggleTab_ = function( panel, tab, tabpanel ) {
+    if( !(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled')) ) {
+      if (tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {
+        this.closeTab_(panel, tab, tabpanel);
+      }
+      else {
+        if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {
+          this.closeTabs_();
+        }
+        this.openTab_(panel, tab, tabpanel);
+      }
+    }
+  };
+
+  /**
+   * Open tabs
+   * @private
+   */
+  MaterialExtAccordion.prototype.openTabs_ = function() {
+    if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() === 'true') {
+      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)]
+        .filter(panel => !panel.classList.contains(IS_EXPANDED))
+        .forEach(closedItem => {
+          const tab = closedItem.querySelector(`.${TAB}`);
+          if (!tab.hasAttribute('disabled')) {
+            this.openTab_(closedItem, tab, closedItem.querySelector(`.${TABPANEL}`));
+          }
+        });
+    }
+  };
+
+  /**
+   * Close tabs
+   * @private
+   */
+  MaterialExtAccordion.prototype.closeTabs_ = function() {
+    [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}.${IS_EXPANDED}`)]
+      .forEach( panel => {
+        const tab = panel.querySelector(`.${TAB}`);
+        if(!tab.hasAttribute('disabled')) {
+          this.closeTab_(panel, tab, panel.querySelector(`.${TABPANEL}`));
+        }
+      });
+  };
+
+
+  // Public methods.
+
+  /**
+   * Upgrade an individual accordion tab
+   * @public
+   * @param {Element} tabElement The HTML element for the accordion panel.
+   */
+  MaterialExtAccordion.prototype.upgradeTab = function( tabElement ) {
+
+    const { panel, tab, tabpanel } = accordionPanelElements( tabElement );
+
+    const disableTab = () => {
+      panel.classList.remove(IS_EXPANDED);
+      tab.setAttribute('tabindex', '-1');
+      tab.setAttribute(ARIA_EXPANDED, 'false');
+      tabpanel.setAttribute('hidden', '');
+      tabpanel.setAttribute(ARIA_HIDDEN, 'true');
+    };
+
+    const enableTab = () => {
+      if(!tab.hasAttribute(ARIA_EXPANDED)) {
+        tab.setAttribute(ARIA_EXPANDED, 'false');
+      }
+
+      tab.setAttribute('tabindex', '0');
+
+      if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {
+        panel.classList.add(IS_EXPANDED);
+        tabpanel.removeAttribute('hidden');
+        tabpanel.setAttribute(ARIA_HIDDEN, 'false');
+      }
+      else {
+        panel.classList.remove(IS_EXPANDED);
+        tabpanel.setAttribute('hidden', '');
+        tabpanel.setAttribute(ARIA_HIDDEN, 'true');
+      }
+    };
+
+    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.
+    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.
+    /* istanbul ignore next */
+    const calcMaxTabCaptionWidth = () => {
+
+      const tabCaption = tab.querySelector(`.${TAB_CAPTION}`);
+      if(tabCaption !== null) {
+        const w = [...tab.children]
+          .filter( el => el.classList && !el.classList.contains(TAB_CAPTION) )
+          .reduce( (v, el) => v + el.offsetWidth, 0 );
+
+        const maxWidth = tab.clientHeight - w;
+        if(maxWidth > 0) {
+          tabCaption.style['max-width'] = `${maxWidth}px`;
+        }
+      }
+    };
+
+    const selectTab = () => {
+      if( !tab.hasAttribute(ARIA_SELECTED) ) {
+        [...this.element_.querySelectorAll(`.${TAB}[aria-selected="true"]`)].forEach(
+          selectedTab => selectedTab.removeAttribute(ARIA_SELECTED)
+        );
+        tab.setAttribute(ARIA_SELECTED, 'true');
+      }
+    };
+
+    const tabClickHandler = () => {
+      this.toggleTab_(panel, tab, tabpanel);
+      selectTab();
+    };
+
+    const tabFocusHandler = () => {
+      selectTab();
+    };
+
+    const tabpanelClickHandler = () => {
+      selectTab();
+    };
+
+    const tabpanelFocusHandler = () => {
+      selectTab();
+    };
+
+    const tabKeydownHandler = e => {
+
+      if(this.element_.hasAttribute('disabled')) {
+        return;
+      }
+
+      if ( e.keyCode === VK_END        || e.keyCode === VK_HOME
+        || e.keyCode === VK_ARROW_UP   || e.keyCode === VK_ARROW_LEFT
+        || e.keyCode === VK_ARROW_DOWN || e.keyCode === VK_ARROW_RIGHT ) {
+
+        let nextTab = null;
+        let keyCode = e.keyCode;
+
+        if (keyCode === VK_HOME) {
+          nextTab = this.element_.querySelector(`.${PANEL}:first-child > .${TAB}`);
+          if(nextTab && nextTab.hasAttribute('disabled')) {
+            nextTab = null;
+            keyCode = VK_ARROW_DOWN;
+          }
+        }
+        else if (keyCode === VK_END) {
+          nextTab = this.element_.querySelector(`.${PANEL}:last-child > .${TAB}`);
+          if(nextTab && nextTab.hasAttribute('disabled')) {
+            nextTab = null;
+            keyCode = VK_ARROW_UP;
+          }
+        }
+
+        if(!nextTab) {
+          let nextPanel = panel;
+
+          do {
+            if (keyCode === VK_ARROW_UP || keyCode === VK_ARROW_LEFT) {
+              nextPanel = nextPanel.previousElementSibling;
+              if(!nextPanel) {
+                nextPanel = this.element_.querySelector(`.${PANEL}:last-child`);
+              }
+              if (nextPanel) {
+                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);
+              }
+            }
+            else if (keyCode === VK_ARROW_DOWN || keyCode === VK_ARROW_RIGHT) {
+              nextPanel = nextPanel.nextElementSibling;
+              if(!nextPanel) {
+                nextPanel = this.element_.querySelector(`.${PANEL}:first-child`);
+              }
+              if (nextPanel) {
+                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);
+              }
+            }
+
+            if(nextTab && nextTab.hasAttribute('disabled')) {
+              nextTab = null;
+            }
+            else {
+              break;
+            }
+          }
+          while(nextPanel !== panel);
+        }
+
+        if (nextTab) {
+          e.preventDefault();
+          e.stopPropagation();
+          nextTab.focus();
+
+          // Workaround for JSDom testing:
+          // In JsDom 'element.focus()' does not trigger any focus event
+          if(!nextTab.hasAttribute(ARIA_SELECTED)) {
+
+            [...this.element_.querySelectorAll(`.${TAB}[aria-selected="true"]`)]
+              .forEach( selectedTab => selectedTab.removeAttribute(ARIA_SELECTED) );
+
+            nextTab.setAttribute(ARIA_SELECTED, 'true');
+          }
+        }
+      }
+      else if (e.keyCode === VK_ENTER || e.keyCode === VK_SPACE) {
+        e.preventDefault();
+        e.stopPropagation();
+        this.toggleTab_(panel, tab, tabpanel);
+      }
+    };
+
+    if(tab === null) {
+      throw new Error('There must be a tab element for each accordion panel.');
+    }
+
+    if(tabpanel === null) {
+      throw new Error('There must be a tabpanel element for each accordion panel.');
+    }
+
+    panel.setAttribute('role', PANEL_ROLE);
+    tab.setAttribute('role', TAB_ROLE);
+    tabpanel.setAttribute('role', TABPANEL_ROLE);
+
+    if(tab.hasAttribute('disabled')) {
+      disableTab();
+    }
+    else {
+      enableTab();
+    }
+
+    if( this.element_.classList.contains(ACCORDION_HORIZONTAL)) {
+      calcMaxTabCaptionWidth();
+    }
+
+    if (this.element_.classList.contains(RIPPLE_EFFECT)) {
+      tab.classList.add(RIPPLE);
+    }
+
+    if (this.element_.classList.contains(ANIMATION_EFFECT)) {
+      tabpanel.classList.add(ANIMATION);
+    }
+
+    // Remove listeners, just in case ...
+    tab.removeEventListener('click', tabClickHandler);
+    tab.removeEventListener('focus', tabFocusHandler);
+    tab.removeEventListener('keydown', tabKeydownHandler);
+    tabpanel.removeEventListener('click', tabpanelClickHandler);
+    tabpanel.removeEventListener('focus', tabpanelFocusHandler);
+
+    tab.addEventListener('click', tabClickHandler);
+    tab.addEventListener('focus', tabFocusHandler);
+    tab.addEventListener('keydown', tabKeydownHandler);
+    tabpanel.addEventListener('click', tabpanelClickHandler, true);
+    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);
+  };
+  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;
+
+
+  /**
+   * Execute command
+   * @param detail
+   */
+  MaterialExtAccordion.prototype.command = function( detail ) {
+
+    const openTab = tabElement => {
+
+      if(tabElement === undefined) {
+        this.openTabs_();
+      }
+      else if(tabElement !== null) {
+        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );
+        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() !== 'true') {
+          this.toggleTab_(panel, tab, tabpanel);
+        }
+      }
+    };
+
+    const closeTab = tabElement => {
+      if(tabElement === undefined) {
+        this.closeTabs_();
+      }
+      else if(tabElement !== null) {
+        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );
+
+        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {
+          this.toggleTab_(panel, tab, tabpanel);
+        }
+      }
+    };
+
+    const toggleTab = tabElement => {
+      if(tabElement) {
+        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );
+        this.toggleTab_(panel, tab, tabpanel);
+      }
+    };
+
+
+    if(detail && detail.action) {
+      const { action, target } = detail;
+
+      switch (action.toLowerCase()) {
+        case 'open':
+          openTab(target);
+          break;
+        case 'close':
+          closeTab(target);
+          break;
+        case 'toggle':
+          toggleTab(target);
+          break;
+        case 'upgrade':
+          if(target) {
+            this.upgradeTab(target);
+          }
+          break;
+        default:
+          throw new Error(`Unknown action "${action}". Action must be one of "open", "close", "toggle" or "upgrade"`);
+      }
+    }
+  };
+  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;
+
+
+  /**
+   * Initialize component
+   */
+  MaterialExtAccordion.prototype.init = function() {
+    if (this.element_) {
+      // Do the init required for this component to work
+      if( !(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {
+        throw new Error(`Accordion must have one of the classes "${ACCORDION_HORIZONTAL}" or "${ACCORDION_VERTICAL}"`);
+      }
+
+      this.element_.setAttribute('role', 'tablist');
+
+      if(!this.element_.hasAttribute(ARIA_MULTISELECTABLE)) {
+        this.element_.setAttribute(ARIA_MULTISELECTABLE, 'false');
+      }
+
+      this.element_.removeEventListener('command', this.commandHandler_);
+      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+
+      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)].forEach( panel => this.upgradeTab(panel) );
+
+      // Set upgraded flag
+      this.element_.classList.add(IS_UPGRADED);
+    }
+  };
+
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to downgrade
+   *
+   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {
+     'use strict';
+     console.log('***** MaterialExtAccordion.mdlDowngrade');
+   };
+   */
+
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtAccordion,
+    classAsString: 'MaterialExtAccordion',
+    cssClass: 'mdlext-js-accordion',
+    widget: true
+  });
+})();
diff --git a/node_modules/mdl-ext/src/accordion/readme.md b/node_modules/mdl-ext/src/accordion/readme.md
new file mode 100644
index 0000000..e8ddd3a
--- /dev/null
+++ b/node_modules/mdl-ext/src/accordion/readme.md
@@ -0,0 +1,384 @@
+# Accordion
+![Accordion](../../etc/flexbox-accordion.png)
+
+A WAI-ARIA friendly accordion component.
+
+>**Note:** The accordion has been refactored and is not compatible with accordion prior to version 0.9.13
+
+## Introduction
+An accordion component is a collection of expandable panels associated with a common outer container. Panels consist
+of a tab header and an associated content region or panel. The primary use of an Accordion is to present multiple sections
+of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.
+The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates
+and makes the contents of each panel visible (or not) by interacting with the Accordion tab header.
+
+### Features:
+* The accordion component relates to the guidelines given in [WAI-ARIA Authoring Practices 1.1, Accordion](https://www.w3.org/TR/wai-aria-practices-1.1/#accordion) 
+* User interactions via keyboard or mouse 
+* Toggle a particular tab  using enter or space key, or by clicking a tab
+* Client can interact with accordion using a public api og by dispatching a custom action event 
+* The accordion emits a custom toggle events reflecting the tab toggled
+
+
+### To include a MDLEXT **accordion** component:
+
+&nbsp;1. Code a `<ul>` element with `class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal"`  to hold the accordion with horizontal layout. 
+```html
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal">
+</ul>
+```
+
+&nbsp;2. Code a `<li>` element with `class="mdlext-accordion__panel"`  to hold an individual accordion panel. 
+```html
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal">
+  <li class="mdlext-accordion__panel">
+  </li>
+</ul>
+```
+
+&nbsp;3. Code a `<header>` element with `class="mdlext-accordion__tab"`  to hold the accordion tab header. 
+```html
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal">
+  <li class="mdlext-accordion__panel">
+    <header class="mdlext-accordion__tab">
+    </header>
+  </li>
+</ul>
+```
+
+&nbsp;4. Code a `<span>` element with `class="mdlext-accordion__tab__caption"` to hold the accordion tab header caption. 
+```html
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal">
+  <li class="mdlext-accordion__panel">
+    <header class="mdlext-accordion__tab">
+      <span class="mdlext-accordion__tab__caption">A tab caption</span>
+    </header>
+  </li>
+</ul>
+```
+
+&nbsp;5. Code a `<section>` element with `class="mdlext-accordion__tabpanel"`  to hold the tab content. 
+```html
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal">
+  <li class="mdlext-accordion__panel">
+    <header class="mdlext-accordion__tab">
+      <span class="mdlext-accordion__tab__caption">A tab caption</span>
+    </header>
+    <section class="mdlext-accordion__tabpanel">
+      <p>Content goes here ...</p>
+    </section>
+  </li>
+</ul>
+```
+
+&nbsp;6. Repeat steps 2..5 for each accordion panel required. 
+
+### Example
+Multiselectable vertical accordion with three panels, aria attributes, ripple effect on each tab header, decorated with 
+a glyph left and a state icon right. Tab #1 is open at page load (aria-expanded="true"). Subscribes to accordion toggle event.
+
+```html
+<ul id="my-accordion" 
+  class="mdlext-accordion mdlext-js-accordion mdlext-accordion--vertical mdlext-js-ripple-effect"
+  role="tablist" aria-multiselectable="true">
+
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" role="tab" aria-expanded="true">
+      <i class="material-icons">dns</i>
+      <span class="mdlext-accordion__tab__caption">First section. A long caption should not push the state icon</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+      <h5>Content #1 goes here</h5>
+      <p>Some content <a href="#">with an anchor</a> as a focusable element.</p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" role="tab" aria-expanded="false">
+      <i class="material-icons">all_inclusive</i>
+      <span class="mdlext-accordion__tab__caption">Tab #2</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="true" hidden>
+      <h5>Content #2 goes here</h5>
+      <p>Some content....</p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" role="tab" aria-expanded="false">
+      <i class="material-icons">build</i>
+      <span class="mdlext-accordion__tab__caption">Tab #3</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="true" hidden>
+      <h5>Content #3 goes here</h5>
+    </section>
+  </li>
+</ul>
+
+<script>
+  'use strict';
+  window.addEventListener('load', function() {
+    var accordion = document.querySelector('#my-accordion');
+    accordion.addEventListener('toggle', function(e) {
+      console.log('Accordion toggled. State:', e.detail.state, 'Source:', e.detail.tab);
+    });
+  });
+</script>
+
+```
+>**Note:** All required aria attributes will be added by the accordion component during initialization - so it is not 
+strictly necessary to apply the attributes in markup.
+
+### More examples
+* The [snippets/accordion.html](./snippets/accordion.html) and the [tests](../../test/accordion/accordion.spec.js) provides more detailed examples.
+* Try out the [live demo](http://leifoolsen.github.io/mdl-ext/demo/accordion.html)
+
+
+## Keyboard interaction
+The accordion interacts with the following keyboard keys.
+
+*   <kbd>Tab</kbd> - When focus is on an accordion (tab)header, pressing the <kbd>Tab</kbd> key moves focus in the following manner:
+    1.  If interactive glyphs or menus are present in the accordion header, focus moves to each in order.
+    2.  When the corresponding tab panel is expanded (its [aria-expanded](http://www.w3.org/TR/wai-aria-1.1/#aria-expanded) state is 'true'), then focus moves to the first focusable element in the panel.
+    3.  If the panel is collapsed (its aria-expanded state is 'false'), OR, when the last interactive element of a panel is reached, the next <kbd>Tab</kbd> key press moves focus as follows:
+        *   Moves focus to the next logical accordion header.
+        *   When focus reaches the last header, focus moves to the first focusable element outside the accordion component.
+*   <kbd>Left arrow</kbd>
+    *   When focus is on the accordion header, a press of <kbd>up</kbd>/<kbd>left</kbd> arrow keys moves focus to the previous logical accordion header.
+    *   When focus reaches the first header, further <kbd>up</kbd>/<kbd>left</kbd> arrow key presses optionally wrap to the first header.
+*   <kbd>Right arrow</kbd>
+    *   When focus is on the accordion header, a press of <kbd>down</kbd>/<kbd>right</kbd> arrow key moves focus to the next logical accordion header.
+    *   When focus reaches the last header, further <kbd>down</kbd>/<kbd>right</kbd> arrow key presses optionally wrap to the first header
+*   <kbd>Up arrow</kbd> - behaves the same as left arrow
+*   <kbd>Down arrow</kbd> - behaves the same as <kbd>right arrow</kbd>
+*   <kbd>End</kbd> - When focus is on the accordion header, an <kbd>End</kbd> key press moves focus to the last accordion header.
+*   <kbd>Home</kbd> - When focus is on the accordion header, a <kbd>Home</kbd> key press moves focus to the first accordion header.
+*   <kbd>Enter</kbd> or <kbd>Space</kbd> - When focus is on an accordion header, pressing <kbd>Enter</kbd> ir <kbd>Space</kbd> toggles the expansion of the corresponding panel.
+    *   If collapsed, the panel is expanded, and its aria-expanded state is set to 'true'.
+    *   If expanded, the panel is collapsed and its aria-expanded state is set to 'false'.
+*   <kbd>Shift+Tab</kbd> - Generally the reverse of <kbd>Tab</kbd>.
+
+
+## Events
+Interaction with the component programmatically is performed receiving events from the component or by sending events to 
+the component (or by using the public api).  
+
+### Events the component listenes to
+A client can send a `command` custom event to the accordion. The command event holds a detail object defining the action 
+to perform and a target for the action.
+
+The detail object has the following structure:
+```javascript
+detail: { 
+  action, // "open", "close", "toggle" or "upgrade" 
+  target  // Target, panel or tab, of action, "undefined" if all panels should be targeted.
+          // Note: If you send a null target, the action is cancelled
+}
+```
+
+Possible actions are:
+
+#### open
+Open a targeted tab and it's corresponding tabpanel.
+
+```javascript
+myAccrdion = document.querySelector('#my-accordion');
+target = myAccordion.querySelector('#my-accordion .mdlext-accordion__panel:nth-child(3)'); 
+ce = new CustomEvent('command', { detail: { action : 'open', target: target } });
+```
+If `target` is undefined, the action will open all panels.
+**Note**: Opening all panels only makes sense if the accordion has the aria attribute `aria-multiselectable` set to `true`, 
+and will be cancelled otherwise. 
+
+#### close
+Close a targeted tab and its corresponding tabpanel.
+
+```javascript
+myAccrdion = document.querySelector('#my-accordion');
+target = myAccordion.querySelector('#my-accordion .mdlext-accordion__panel:nth-child(3)'); 
+ce = new CustomEvent('command', { detail: { action : 'close', target: target } });
+```
+If `target` is undefined, the action will close all panels.
+**Note**: Closing all panels only makes sense if the accordion has the aria attribute `aria-multiselectable` set to `true`, 
+and will be cancelled otherwise. 
+
+#### toggle
+Toggle a targeted tab. Open or close a targeted tab and it's corresponding tabpanel.
+
+```javascript
+myAccrdion = document.querySelector('#my-accordion');
+target = myAccordion.querySelector('#my-accordion .mdlext-accordion__panel:nth-child(3)'); 
+ce = new CustomEvent('command', { detail: { action : 'toggle', target: target } });
+```
+If `target` is undefined, the action will be cancelled.
+
+#### upgrade
+Upgrade a targeted panel. If you add a panel to the accordion after the page has loaded, you must call `upgrade` to 
+notify the accordion component about the new panel.
+
+```javascript
+myAccrdion = document.querySelector('#my-accordion');
+addedPanel = myAccordion.querySelector('#my-accordion .mdlext-accordion__panel:nth-child(4)'); 
+ce = new CustomEvent('command', { detail: { action : 'upgrade', target: addedPanel } });
+```
+If `target` is undefined, the action will be cancelled.
+
+#### Example: Expand all panels.
+```javascript
+var ce = new CustomEvent( 'command', { 
+  detail: { 
+    action: 'open' 
+  } 
+});
+document.querySelector('#my-accordion').dispatchEvent(ce);
+```
+
+#### Example: Toggle a spesific tab.
+```javascript
+var panel3 = document.querySelector('#my-accordion .mdlext-accordion__panel:nth-child(3) .mdlext-accordion__tab');
+var ce = new CustomEvent('command', { 
+  detail: { 
+    action: 'toggle', 
+    target: panel3 
+  } 
+});
+document.querySelector('#my-accordion').dispatchEvent(ce);
+```
+
+#### Example: Append a new panel.
+```javascript
+var panel =
+  '<li class="mdlext-accordion__panel">'
+  +  '<header class="mdlext-accordion__tab" aria-expanded="true">'
+  +    '<span class="mdlext-accordion__tab__caption">New Tab</span>'
+  +    '<i class="mdlext-aria-toggle-material-icons"></i>'
+  +  '</header>'
+  +  '<section class="mdlext-accordion__tabpanel">'
+  +    '<h5>New tab content</h5>'
+  +    '<p>Some content</p>'
+  +  '</section>'
+  +'</li>';
+
+var accordion = document.querySelector('#my-accordion');
+accordion.insertAdjacentHTML('beforeend', panel);
+
+var theNewPanel = document.querySelector('#my-accordion .mdlext-accordion__panel:last-child');
+var ce = new CustomEvent('command', { detail: { action : 'upgrade', target: theNewPanel } });
+document.querySelector('#my-accordion').dispatchEvent(ce);
+```
+
+Refer to [snippets/accordion.html](./snippets/accordion.html) or the [tests](../../test/accordion/accordion.spec.js) for detailed usage.
+
+
+### Events emitted from the component
+The accordion emits a custom `toggle` event when a panel opens or closes. The event has a detail object with the following structure:
+
+```javascript
+detail: {
+  state,    // "open" or "close"
+  tab,      // the haeder tab element instance that caused the event
+  tabpanel  // the cooresponding tabpanel element instance
+}
+```
+
+Set up an event listener to receive the toggle event.
+```javascript
+document.querySelector('#my-accordion').addEventListener('toggle', function(e) {
+  console.log('Accordion toggled. State:', e.detail.state, 'Source:', e.detail.source);
+});
+```
+Refer to [snippets/accordion.html](./snippets/accordion.html) or the [tests](../../test/accordion/accordion.spec.js) for detailed usage.
+
+
+## Public methods
+
+### upgradeTab(tabOrPanelElement)
+Upgrade a targeted panel with aria attributes and ripple effects. If you add a panel to the accordion after the page has 
+loaded, you must call `upgrade` to notify the accordion component about the newly added panel.
+
+```javascript
+var accordion = document.querySelector('#my-accordion');
+var panel3 = document.querySelector('#my-accordion .mdlext-accordion__panel:nth-child(3)');
+accordion.MaterialExtAccordion.upgradeTab( panel3 );
+```
+
+### command(detail)
+Executes an action, targeting a specific tab. The actions corresponds to the custom events defined for this component.
+ 
+The detail object parameter has the following structure:
+```javascript
+detail: { 
+  action, // "open", "close", "toggle" or "upgrade" 
+  target  // Target, panel or tab, of action, "undefined" if all panels should be targeted.
+          // Note: If you send a null target, the action is cancelled
+}
+```
+
+#### open: command( {action: 'open', target: tabOrPanelElement } )
+Open a targeted tab and it's corresponding tabpanel.
+
+#### close: command( {action: 'close', target: tabOrPanelElement } )
+Close a targeted tab and it's corresponding tabpanel.
+
+#### toggle: command( {action: 'toggle', target: tabOrPanelElement } )
+Toggle a targeted tab. Open or close a targeted tab and it's corresponding tabpanel.
+
+#### upgrade: command( {action: 'upgrade', target: tabOrPanelElement } )
+Upgrade a targeted panel with aria attributes and ripple effects. If you add a panel to the accordion after the page has 
+loaded, you must call `upgrade` to notify the accordion component about the newly added panel.
+
+#### Example: Expand all panels.
+```javascript
+var accordion = document.querySelector('#my-accordion');
+accordion.MaterialExtAccordion.command( {action: 'open'} );
+```
+
+#### Example: Toggle panel.
+```javascript
+var accordion = document.querySelector('#my-accordion');
+var panel3 = document.querySelector('#my-accordion .mdlext-accordion__panel:nth-child(3) .mdlext-accordion__tab');
+accordion.MaterialExtAccordion.command( {action: 'toggle', target: panel3} );
+```
+
+Refer to [snippets/accordion.html](./snippets/accordion.html) or the [tests](../../test/accordion/accordion.spec.js) for detailed usage.
+
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the accordion. 
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|--------------|--------|---------|
+|`mdlext-accordion`| Defines container as an MDL component | Required on "outer" `<div>` or `<ul>` element |
+|`mdlext-js-accordion`| Assigns basic MDL behavior to accordion | Required on "outer" `<div>` or `<ul>` element |
+|`mdlext-accordion--horizontal`| Horizontal layot of an accordion | Required. The accordion must have one of `mdlext-accordion--horizontal` or `mdlext-accordion--vertical` defined |
+|`mdlext-accordion--vertical`| Vertical layot of an accordion | Required. The accordion must have one of `mdlext-accordion--horizontal` or `mdlext-accordion--vertical` defined |
+|`mdlext-js-ripple-effect`| Applies ripple click effect to accordion tab header | Optional. Goes on "outer" `<ul>` or `<div>` element |
+|`mdlext-js-animation-effect`| Applies animation effect to accordion tab panel | Optional. Goes on "outer" `<ul>` or `<div>` element |
+|`mdlext-accordion__panel`| Defines a container for each section of the accordion - the tab and tabpanel element | Required on first inner `<div>` element or `<li>` element  |
+|`mdlext-accordion__tab`| Defines a tab header for a corresponding tabpanel | Required on `<header>` or `<div>` element |
+|`mdlext-accordion__tabpanel`| The content | Required on `<section>` or `<div>` element |
+
+
+The table below lists available attributes and their effects.
+
+| Attribute | Description | Remarks |
+|-----------|-------------|---------|
+|`aria-multiselectable`| If true, multiple panels may be open simultaneously | Required. Add `aria-multiselectable="true"` to the `mdlext-accordion` element to keep multiple panels open at the same time. If not present, the component will set `aria-multiselectable="false"` during initialization.|
+|`role=tablist`| Component role | Required. Added by component during initialization if not present. |
+|`role=presentation`| Accordion panel role | Required. Added by component during initialization if not present. |
+|`role=tab`| Accordion tab header role | Required. Added by component during initialization if not present. |
+|`aria-expanded`| Accordion tab header attribute.  An accordion should manage the expanded/collapsed state of each tab by maintain its aria-expanded state. | Required. Defaults to `aria-expanded="false"`. Set `aria-expanded="true"` if you want a tab to open during page load. |
+|`aria-selected`| Accordion tab header attribute. An accordion should manage the selected state of each tab by maintaining its aria-selected state | Optional. Added by component. |
+|`disabled`| Accordion tab header attribute. Indicates a disabled tab and tabpanel | Optional. If this attribute is present, the tabpanel will not open or close. |
+|`role=tabpanel`| Accordion tabpanel role. | Required. Added by component during initialization if not present. |
+|`aria-hidden`| Accordion tabpanel attribute. An accordion should convey the visibility of each tabpanel by maintaining its aria-hidden state | Required. Added by component. |
+|`hidden`| Accordion tabpanel attribute. | Required. Added by component if `aria-hidden="true"`. |
+ 
+
+## Other examples 
+* The Accordion component is based on / inspired by this [CodePen](http://codepen.io/aann/pen/dPqBML)
+* [Open Ajax, Tab Panel: Accordian1](http://www.oaa-accessibility.org/examplep/accordian1/)
+* [www3 Accordion Example](https://www.w3.org/TR/wai-aria-practices/examples/accordion/accordion1.html)
diff --git a/node_modules/mdl-ext/src/accordion/snippets/accordion.html b/node_modules/mdl-ext/src/accordion/snippets/accordion.html
new file mode 100644
index 0000000..fae785c
--- /dev/null
+++ b/node_modules/mdl-ext/src/accordion/snippets/accordion.html
@@ -0,0 +1,1072 @@
+<p>A Collection of panels within a common outer pane.</p>
+<p><strong>Note:</strong> The accordion has been refactored and is not compatible with the accordion prior to version 0.9.13</p>
+
+
+<h4>Horizontal accordion, ripple effect, animated tabpanel, aria-multiselectable="false"</h4>
+
+<style>
+  .demo-accordion-1 {
+    height: 300px; /* In horizontal layout, the accordion must have a height */
+  }
+  .demo-accordion-1 .mdlext-accordion__tabpanel {
+    background-color: rgba(239, 154, 154, 0.4);  /* Just a trace color */
+  }
+</style>
+
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal mdlext-js-ripple-effect mdlext-js-animation-effect demo-accordion-1"
+    role="tablist" aria-multiselectable="false">
+
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+      <i class="material-icons">info</i>
+      <span class="mdlext-accordion__tab__caption">First tab. A long caption should not push the state icon</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+      <h5>Content #1 goes here</h5>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.
+      </p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <span class="mdlext-accordion__tab__caption">Tab #2</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #2 goes here</h5>
+      <p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled tabindex="0">
+      <i class="material-icons">warning</i>
+      <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #3 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <i class="material-icons">accessibility</i>
+      <i class="material-icons">help_outline</i>
+      <i class="material-icons">radio</i>
+      <span class="mdlext-accordion__tab__caption">Tab #4</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #4 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+      <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #5 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+</ul>
+
+
+
+<h4>Horizontal accordion, aria-multiselectable="true"</h4>
+<p><strong>Hint:</strong> Use a container to draw outer borders</p>
+
+<style>
+  .demo-accordion-2-container {
+    border: 1px solid #00b0ff;
+  }
+  .demo-accordion-2 {
+    height: 313px;
+  }
+  .demo-accordion-2 .mdlext-accordion__tabpanel {
+    background-color: rgba(206, 147, 216, 0.4);
+  }
+</style>
+
+<div class="demo-accordion-2-container">
+  <ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal demo-accordion-2" role="tablist" aria-multiselectable="true">
+
+    <li class="mdlext-accordion__panel" role="presentation">
+      <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+        <i class="material-icons">info</i>
+        <span class="mdlext-accordion__tab__caption">First section. A long caption should not push the state icon</span>
+        <i class="mdlext-aria-toggle-material-icons"></i>
+      </header>
+      <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+        <h5>Content #1 goes here</h5>
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+          Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+          in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+          ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+        </p>
+        <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+          justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+          mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+          neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+          blandit leo ullamcorper vel.
+        </p>
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+          Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+          in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+          ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+        </p>
+        <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+          justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+          mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+          neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+          blandit leo ullamcorper vel.
+        </p>
+      </section>
+    </li>
+    <li class="mdlext-accordion__panel" role="presentation">
+      <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+        <span class="mdlext-accordion__tab__caption">Tab #2</span>
+        <i class="mdlext-aria-toggle-material-icons"></i>
+      </header>
+      <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+        <h5>Content #2 goes here</h5>
+        <p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+          arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.
+        </p>
+      </section>
+    </li>
+    <li class="mdlext-accordion__panel" role="presentation">
+      <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled tabindex="0">
+        <i class="material-icons">warning</i>
+        <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+        <i class="mdlext-aria-toggle-material-icons"></i>
+      </header>
+      <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+        <h5>Content #3 goes here</h5>
+        <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+          ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+          maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+        </p>
+      </section>
+    </li>
+    <li class="mdlext-accordion__panel" role="presentation">
+      <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+        <i class="material-icons">accessibility</i>
+        <i class="material-icons">help_outline</i>
+        <i class="material-icons">radio</i>
+        <span class="mdlext-accordion__tab__caption">Tab #4, no toggle icon</span>
+      </header>
+      <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+        <h5>Content #4 goes here</h5>
+        <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+          ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+          maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+        </p>
+      </section>
+    </li>
+    <li class="mdlext-accordion__panel" role="presentation">
+      <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+        <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+        <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+        <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+        <i class="mdlext-aria-toggle-material-icons"></i>
+      </header>
+      <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+        <h5>Content #5 goes here</h5>
+        <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+          ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+          maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+        </p>
+      </section>
+    </li>
+  </ul>
+</div>
+
+
+
+<h4>Vertical accordion, ripple effect, animated tabpanel, aria-multiselectable="true"</h4>
+
+<style>
+  .demo-accordion-3 .mdlext-accordion__tabpanel {
+    background-color: rgba(144, 202, 249, 0.4);
+  }
+</style>
+
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--vertical mdlext-js-ripple-effect mdlext-js-animation-effect demo-accordion-3"
+    role="tablist" aria-multiselectable="true">
+
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+      <i class="material-icons">info</i>
+      <span class="mdlext-accordion__tab__caption">First section. A long caption should not push the state icon</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+      <h5>Content #1 goes here</h5>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <span class="mdlext-accordion__tab__caption">Tab #2</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #2 goes here</h5>
+      <p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled tabindex="0">
+      <i class="material-icons">warning</i>
+      <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #3 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <i class="material-icons">accessibility</i>
+      <i class="material-icons">help_outline</i>
+      <i class="material-icons">radio</i>
+      <span class="mdlext-accordion__tab__caption">Tab #4, no toggle icon</span>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #4 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+      <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel">
+      <h5>Content #5 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+</ul>
+
+
+<h4>Vertical accordion, aria-multiselectable="false"</h4>
+<p><strong>Hint:</strong> Use a container to draw outer borders</p>
+
+<style>
+  .demo-accordion-4 {
+    height: 500px;
+    border: 1px solid #00b0ff;
+  }
+  .demo-accordion-4 .mdlext-accordion__tabpanel {
+    background-color: rgba(165, 214, 167, 0.4);
+  }
+</style>
+
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--vertical demo-accordion-4" role="tablist" aria-multiselectable="false">
+
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <i class="material-icons">info</i>
+      <span class="mdlext-accordion__tab__caption">First section. A long caption should not push the state icon</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel">
+      <h5>Content #1 goes here</h5>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.
+      </p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+      <span class="mdlext-accordion__tab__caption">Tab #2</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel">
+      <h5>Content #2 goes here</h5>
+      <p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled>
+      <i class="material-icons">warning</i>
+      <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #3 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <i class="material-icons">accessibility</i>
+      <i class="material-icons">help_outline</i>
+      <i class="material-icons">radio</i>
+      <span class="mdlext-accordion__tab__caption">Tab #4</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel">
+      <h5>Content #4 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+      <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel">
+      <h5>Content #5 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+</ul>
+
+
+<h4>Disabled accordion</h4>
+<ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal demo-accordion-1"
+    role="tablist" aria-multiselectable="false" disabled>
+
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+      <i class="material-icons">info</i>
+      <span class="mdlext-accordion__tab__caption">First section. A long caption should not push the state icon</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+      <h5>Content goes here</h5>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.
+      </p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <span class="mdlext-accordion__tab__caption">Tab #2</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled tabindex="0">
+      <i class="material-icons">warning</i>
+      <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <i class="material-icons">accessibility</i>
+      <i class="material-icons">help_outline</i>
+      <i class="material-icons">radio</i>
+      <span class="mdlext-accordion__tab__caption">Tab #4</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+      <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+    </section>
+  </li>
+</ul>
+
+
+
+
+<h4>Accordion API</h4>
+
+<style>
+  .cmd-button {
+    min-width: 140px;
+  }
+  .demo-accordion-6 .mdlext-accordion__tabpanel {
+    background: rgba(255, 224, 130, 0.4);
+  }
+</style>
+
+<h5>Public methods</h5>
+
+<section style="margin-bottom: 16px">
+  <button id="btn-api-expand-all" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Expand all
+  </button>
+  <button id="btn-api-collapse-all" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Collapse all
+  </button>
+  <button id="btn-api-open-tab2" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Open tab #2
+  </button>
+  <button id="btn-api-close-tab2" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Close tab #2
+  </button>
+  <button id="btn-api-toggle-tab2" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Toggle tab #2
+  </button>
+  <button id="btn-api-new-tab" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Add a new tab
+  </button>
+</section>
+
+<h5>Custom events</h5>
+
+<section style="margin-bottom: 16px">
+  <button id="btn-event-expand-all" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Expand all
+  </button>
+  <button id="btn-event-collapse-all" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Collapse all
+  </button>
+  <button id="btn-event-open-tab2" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Open tab #2
+  </button>
+  <button id="btn-event-close-tab2" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Close tab #2
+  </button>
+  <button id="btn-event-toggle-tab2" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Toggle tab #2
+  </button>
+  <button id="btn-event-new-tab" class="cmd-button mdl-button mdl-js-button mdl-button--raised">
+    Add a new tab
+  </button>
+</section>
+
+
+<ul id="demo-accordion-6" class="mdlext-accordion mdlext-js-accordion mdlext-accordion--vertical demo-accordion-6"
+    role="tablist" aria-multiselectable="true">
+
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+      <i class="material-icons">info</i>
+      <span class="mdlext-accordion__tab__caption">Tab #1</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+      <h5>Content #1 goes here</h5>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+      </p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <span class="mdlext-accordion__tab__caption">Tab #2</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #2 goes here</h5>
+      <p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled tabindex="0">
+      <i class="material-icons">warning</i>
+      <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #3 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <i class="material-icons">accessibility</i>
+      <i class="material-icons">help_outline</i>
+      <i class="material-icons">radio</i>
+      <span class="mdlext-accordion__tab__caption">Tab #4</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+      <h5>Content #4 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel" role="presentation">
+    <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+      <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+      <i class="mdlext-aria-toggle-material-icons"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel" role="tabpanel">
+      <h5>Content #5 goes here</h5>
+      <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+      </p>
+    </section>
+  </li>
+</ul>
+
+
+
+<h4>Styling the accordion</h4>
+
+<style>
+  .demo-accordion-7 {
+    height: 300px;
+  }
+  .demo-accordion-7 .mdlext-accordion__panel,
+  .demo-accordion-7 .mdlext-accordion__tab {
+    min-width: 40px;
+    min-height: 40px;
+    width: 40px;
+  }
+  .colored-panel:nth-child(1) {
+    background: rgba(239, 154, 154, 0.4);
+  }
+  .colored-panel:nth-child(2) {
+    background: rgba(206, 147, 216, 0.4);
+  }
+  .colored-panel:nth-child(3) {
+    background: rgba(144, 202, 249, 0.4);
+  }
+  .colored-panel:nth-child(4) {
+    background: rgba(165, 214, 167, 0.4);
+  }
+  .colored-panel:nth-child(5) {
+    background: rgba(255, 224, 130, 0.4);
+  }
+  .mdlext-aria-toggle-plus-minus {
+    font-size: 20px;
+  }
+  .img-box {
+    background-size: cover;
+    background-position: center;
+    background-repeat: no-repeat;
+  }
+  .img-box--6 {
+    background-image: url(./images/_D806374.jpg);
+    background-image: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%,rgba(255,255,255,0.2) 100%), url(./images/_D806374.jpg);
+  }
+  .img-box--7 {
+    background-image: url('./images/_D802478.jpg');
+    background-image: linear-gradient(to bottom, rgba(255,255,255,0.1) 0%,rgba(255,255,255,0.1) 100%), url(./images/_D802478.jpg);
+  }
+  .img-box--8 {
+    background-image: url('./images/_D803221.jpg');
+    background-image: linear-gradient(to bottom, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%), url(./images/_D803221.jpg);
+  }
+  .img-box--9 {
+    background-image: url('./images/_D802143-2.jpg');
+    background-image: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%,rgba(255,255,255,0.2) 100%), url(./images/_D802143-2.jpg);
+  }
+  .img-box--10 {
+    background-image: url('./images/_D809758-2.jpg');
+    background-image: linear-gradient(to bottom, rgba(255,255,255,0.1) 0%,rgba(255,255,255,0.1) 100%), url(./images/_D809758-2.jpg);
+  }
+</style>
+
+<ul id="demo-accordion-7" class="mdlext-accordion mdlext-js-accordion mdlext-accordion--horizontal mdlext-js-ripple-effect mdlext-js-animation-effect demo-accordion-7">
+  <li class="mdlext-accordion__panel colored-panel">
+    <header class="mdlext-accordion__tab" aria-expanded="true">
+      <i class="material-icons md-16">dns</i>
+      <span class="mdlext-accordion__tab__caption mdl-typography--subhead-color-contrast">Accordion</span>
+      <i class="mdlext-aria-toggle-plus-minus"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel img-box img-box--6">
+      <h5>Introduction</h5>
+      <p>An accordion component is a collection of expandable panels associated with a common outer container. Panels consist
+        of a header and an associated content region or panel. The primary use of an Accordion is to present multiple sections
+        of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.
+        The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates
+        and makes the contents of each panel visible (or not) by interacting with the Accordion Header.</p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel colored-panel">
+    <header class="mdlext-accordion__tab">
+      <i class="material-icons md-16">all_inclusive</i>
+      <span class="mdlext-accordion__tab__caption mdl-typography--subhead-color-contrast">Include Component</span>
+      <i class="mdlext-aria-toggle-plus-minus"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel img-box img-box--7">
+      <p style = "margin-top:128px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.</p>
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.</p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.</p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel colored-panel">
+    <header class="mdlext-accordion__tab">
+      <i class="material-icons md-16">build</i>
+      <span class="mdlext-accordion__tab__caption mdl-typography--subhead-color-contrast">Configuration Options</span>
+      <i class="mdlext-aria-toggle-plus-minus"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel img-box img-box--8">
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.</p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel colored-panel">
+    <header class="mdlext-accordion__tab">
+      <i class="material-icons md-16">public</i>
+      <span class="mdlext-accordion__tab__caption mdl-typography--subhead-color-contrast">Fourth section</span>
+      <i class="mdlext-aria-toggle-plus-minus"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel img-box img-box--9">
+      <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+        justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+        mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+        neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+        blandit leo ullamcorper vel.</p>
+    </section>
+  </li>
+  <li class="mdlext-accordion__panel colored-panel">
+    <header class="mdlext-accordion__tab">
+      <i class="material-icons md-16">public</i>
+      <span class="mdlext-accordion__tab__caption mdl-typography--subhead-color-contrast">Fifth</span>
+      <i class="mdlext-aria-toggle-plus-minus"></i>
+    </header>
+    <section class="mdlext-accordion__tabpanel img-box img-box--10">
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+        Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+        in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+        ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+        maximus massa felis quis quam. Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+        arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.</p>
+    </section>
+  </li>
+</ul>
+
+
+
+<h4>Color themes</h4>
+
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--2-col-phone mdlext-dark-color-theme">
+
+    <ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--vertical mdlext-js-ripple-effect mdlext-js-animation-effect"
+        role="tablist" aria-multiselectable="true">
+
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+          <i class="material-icons">info</i>
+          <span class="mdlext-accordion__tab__caption">First section. A long caption should not push the state icon</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+          <h5>Content #1 goes here</h5>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+            Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+            in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+          </p>
+          <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+            justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+            mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+            neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+            blandit leo ullamcorper vel.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+          <span class="mdlext-accordion__tab__caption">Tab #2</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+          <h5>Content #2 goes here</h5>
+          <p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+            arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled tabindex="0">
+          <i class="material-icons">warning</i>
+          <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+          <h5>Content #3 goes here</h5>
+          <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+            maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+          <i class="material-icons">accessibility</i>
+          <i class="material-icons">help_outline</i>
+          <i class="material-icons">radio</i>
+          <span class="mdlext-accordion__tab__caption">Tab #4, no toggle icon</span>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+          <h5>Content #4 goes here</h5>
+          <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+            maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" role="tab">
+          <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+          <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+          <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel">
+          <h5>Content #5 goes here</h5>
+          <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+            maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+    </ul>
+  </div>  <!-- mdl-cell -->
+
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--2-col-phone">
+    <ul class="mdlext-accordion mdlext-js-accordion mdlext-accordion--vertical mdlext-js-ripple-effect mdlext-js-animation-effect mdlext-light-color-theme"
+        role="tablist" aria-multiselectable="true">
+
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="true" role="tab">
+          <i class="material-icons">info</i>
+          <span class="mdlext-accordion__tab__caption">First section. A long caption should not push the state icon</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" aria-hidden="false">
+          <h5>Content #1 goes here</h5>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tristique eget augue eget gravida.
+            Etiam eget imperdiet massa. Aliquam nisi eros, molestie a vulputate quis, tempor nec quam. Ut at libero
+            in sem pellentesque imperdiet. Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam.Fusce tincidunt leo in est <a href="#">venenatis porta</a>.
+          </p>
+          <p>Maecenas eu vestibulum orci. Ut eget nisi a est sagittis euismod a vel
+            justo. Quisque at dui urna. Duis vel velit leo. Nulla nunc sem, rutrum at aliquet in, aliquet id velit. Duis
+            mattis placerat erat, a aliquam leo rhoncus vel. Sed nec diam ex. Praesent convallis purus lorem, vel porttitor
+            neque gravida quis. Etiam et malesuada dui. Nunc vitae viverra dui. Suspendisse feugiat efficitur augue, quis
+            blandit leo ullamcorper vel.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+          <span class="mdlext-accordion__tab__caption">Tab #2</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+          <h5>Content #2 goes here</h5>
+          <p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie
+            arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="false" role="tab" disabled tabindex="0">
+          <i class="material-icons">warning</i>
+          <span class="mdlext-accordion__tab__caption">Tab #3, disabled</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+          <h5>Content #3 goes here</h5>
+          <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+            maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" aria-expanded="false" role="tab">
+          <i class="material-icons">accessibility</i>
+          <i class="material-icons">help_outline</i>
+          <i class="material-icons">radio</i>
+          <span class="mdlext-accordion__tab__caption">Tab #4, no toggle icon</span>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel" hidden aria-hidden="true">
+          <h5>Content #4 goes here</h5>
+          <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+            maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+      <li class="mdlext-accordion__panel" role="presentation">
+        <header class="mdlext-accordion__tab" role="tab">
+          <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+          <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+          <span class="mdlext-accordion__tab__caption">Tab #5, with icon buttons</span>
+          <i class="mdlext-aria-toggle-material-icons"></i>
+        </header>
+        <section class="mdlext-accordion__tabpanel" role="tabpanel">
+          <h5>Content #5 goes here</h5>
+          <p>Praesent pretium, sapien vel mollis porttitor, felis magna vehicula metus,
+            ac dignissim odio tortor nec quam. Nam molestie, arcu id maximus lacinia, ante ipsum posuere mauris, ac
+            maximus massa felis quis quam. usce tincidunt leo in est venenatis porta.
+          </p>
+        </section>
+      </li>
+    </ul>
+  </div>  <!-- mdl-cell -->
+</div> <!-- mdl-grid -->
+
+
+
+<p class="mdl-typography--caption" style="margin-top: 64px;">
+  All images appearing in this page are the exclusive property of Leif Olsen and are protected under the United States and International Copyright laws.
+  The images may not be reproduced or manipulated without the written permission of Leif Olsen.
+  Use of any image as the basis for another photographic concept or illustration (digital, artist rendering or alike) is a violation of the United States and International Copyright laws.
+  All images are copyrighted &copy; Leif Olsen, 2016.
+</p>
+
+<script>
+  (function() {
+    'use strict';
+
+    function insertPanel() {
+      var panel =
+        '<li class="mdlext-accordion__panel">'
+        +  '<header class="mdlext-accordion__tab" aria-expanded="true">'
+        +    '<span class="mdlext-accordion__tab__caption">New Tab</span>'
+        +    '<i class="mdlext-aria-toggle-material-icons"></i>'
+        +  '</header>'
+        +  '<section class="mdlext-accordion__tabpanel">'
+        +    '<h5>New tab content</h5>'
+        +    '<p>Curabitur malesuada placerat nunc, id dapibus justo tempor in. Ut molestie'
+        +      'arcu justo, id volutpat eros vestibulum eget. Fusce tincidunt leo in est venenatis porta.'
+        +    '</p>'
+        +  '</section>'
+        +'</li>';
+
+      var accordion = document.querySelector('#demo-accordion-6');
+      accordion.insertAdjacentHTML('beforeend', panel);
+    }
+
+    window.addEventListener('load', function() {
+
+      // Listen to accordion toggle event
+      document.querySelector('#demo-accordion-6').addEventListener('toggle', function(e) {
+        //console.log('Accordion tab toggled. New state:', e.detail.state, 'Tab:', e.detail.tab, 'Tabpanel:', e.detail.tabpanel);
+        console.log('Accordion tab toggled. New state:', e.detail.state);
+      });
+
+      // Interact with accordion using public methods
+      document.querySelector('#btn-api-expand-all').addEventListener('click', function(e) {
+        var accordion = document.querySelector('#demo-accordion-6');
+        accordion.MaterialExtAccordion.command( {action: 'open'} );
+      });
+
+      document.querySelector('#btn-api-collapse-all').addEventListener('click', function(e) {
+        var accordion = document.querySelector('#demo-accordion-6');
+        accordion.MaterialExtAccordion.command( {action: 'close'} );
+      });
+
+      document.querySelector('#btn-api-open-tab2').addEventListener('click', function(e) {
+        var accordion = document.querySelector('#demo-accordion-6');
+        var tab2 = document.querySelector('#demo-accordion-6 .mdlext-accordion__panel:nth-child(2) .mdlext-accordion__tab');
+        accordion.MaterialExtAccordion.command( {action: 'open', target: tab2} );
+      });
+
+      document.querySelector('#btn-api-close-tab2').addEventListener('click', function(e) {
+        var accordion = document.querySelector('#demo-accordion-6');
+        var tab2 = document.querySelector('#demo-accordion-6 .mdlext-accordion__panel:nth-child(2)');
+        accordion.MaterialExtAccordion.command( {action: 'close', target: tab2} );
+      });
+
+      document.querySelector('#btn-api-toggle-tab2').addEventListener('click', function(e) {
+        var accordion = document.querySelector('#demo-accordion-6');
+        var tab2 = document.querySelector('#demo-accordion-6 .mdlext-accordion__panel:nth-child(2)');
+        accordion.MaterialExtAccordion.command( {action: 'toggle', target: tab2} );
+      });
+
+      document.querySelector('#btn-api-new-tab').addEventListener('click', function(e) {
+        insertPanel();
+        var accordion = document.querySelector('#demo-accordion-6');
+        var panelElement  = document.querySelector('#demo-accordion-6 .mdlext-accordion__panel:last-child');
+        accordion.MaterialExtAccordion.command( {action: 'upgrade', target: panelElement} );
+      });
+
+      // Interact with accordion using custom event
+      var eventButtons = document.querySelectorAll('button[id^="btn-event-"]');
+      for (var i = 0, n = eventButtons.length; i < n; i++) {
+        eventButtons[i].addEventListener('click', function(e) {
+          var ce;
+          var tab2 = document.querySelector('#demo-accordion-6 .mdlext-accordion__panel:nth-child(2)');
+
+          switch (e.target.id) {
+            case 'btn-event-expand-all':
+              ce = new CustomEvent('command', { detail: { action : 'open' } });
+              break;
+            case 'btn-event-collapse-all':
+              ce = new CustomEvent('command', { detail: { action : 'close' } });
+              break;
+            case 'btn-event-open-tab2':
+              ce = new CustomEvent('command', { detail: { action : 'open', target: tab2 } });
+              break;
+            case 'btn-event-close-tab2':
+              ce = new CustomEvent('command', { detail: { action : 'close', target: tab2 } });
+              break;
+            case 'btn-event-toggle-tab2':
+              ce = new CustomEvent('command', { detail: { action : 'toggle', target: tab2 } });
+              break;
+            case 'btn-event-new-tab':
+              insertPanel();
+              var panelElement  = document.querySelector('#demo-accordion-6 .mdlext-accordion__panel:last-child');
+              ce = new CustomEvent('command', { detail: { action : 'upgrade', target: panelElement } });
+              break;
+            default:
+              return;
+          }
+          var accordion = document.querySelector('#demo-accordion-6');
+          accordion.dispatchEvent(ce);
+        });
+      }
+    });
+
+  }());
+
+</script>
diff --git a/node_modules/mdl-ext/src/aria-expanded-toggle/_aria-expanded-toggle.scss b/node_modules/mdl-ext/src/aria-expanded-toggle/_aria-expanded-toggle.scss
new file mode 100644
index 0000000..1f23b26
--- /dev/null
+++ b/node_modules/mdl-ext/src/aria-expanded-toggle/_aria-expanded-toggle.scss
@@ -0,0 +1,31 @@
+@charset "UTF-8";
+
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+@import "../mixins";
+
+.mdlext-aria-expanded-plus-minus {
+  @include mdlext-aria-expanded-toggle($font-family: inherit);
+}
+
+.mdlext-aria-expanded-more-less {
+  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');
+}
diff --git a/node_modules/mdl-ext/src/bordered-fields/_bordered-fields.scss b/node_modules/mdl-ext/src/bordered-fields/_bordered-fields.scss
new file mode 100644
index 0000000..286e44a
--- /dev/null
+++ b/node_modules/mdl-ext/src/bordered-fields/_bordered-fields.scss
@@ -0,0 +1,251 @@
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/*
+ * The bordered fields are based on / inspired by this CodePen: http://codepen.io/prajwal078/pen/LVJZXz?editors=010
+ */
+
+// Use of this module requires the user to include variables from material-design-lite
+//@import "../../node_modules/material-design-lite/src/variables";
+//@import "../../node_modules/material-design-lite/src/mixins";
+
+@import "../variables";
+@import "../functions";
+
+
+// "Theme" for this styling
+.mdlext-bordered-fields {
+  box-sizing: border-box;
+
+  * {
+    box-sizing: border-box;
+  }
+
+  // Styling for textfield and selectfield.
+  .mdl-textfield,
+  .mdlext-selectfield {
+    padding: 0;
+    margin: $mdlext-bordered-field-vertical-spacing-top 0 $mdlext-bordered-field-vertical-spacing-bottom 0;
+
+    .mdl-textfield__input,
+    .mdlext-selectfield__select {
+      height: $mdlext-bordered-field-height;
+      background-color: $mdlext-bordered-field-background-color;
+      border: $mdlext-bordered-field-border-width solid $mdlext-bordered-field-border-color;
+      border-radius: $mdlext-bordered-field-border-radius;
+      padding: $mdlext-bordered-field-padding-top $mdlext-bordered-field-padding $mdlext-bordered-field-padding-bottom $mdlext-bordered-field-padding;
+      font-size: $mdlext-bordered-field-input-text-font-size;
+      font-weight: $mdlext-bordered-field-font-weight;
+      color: $mdlext-bordered-field-input-text-color;
+
+      &:disabled {
+        color: $mdlext-bordered-field-input-text-disabled-text-color;
+        background-color: $mdlext-bordered-field-disabled-background-color;
+        border-color: $mdlext-bordered-field-disabled-border-color;
+      }
+
+      // MDL can not handle required attribute properly. Planned for MDL-v2
+      //&:required {
+      //  background-color: $mdlext-bordered-field-required-background-color;
+      //  border-color: $mdlext-bordered-field-required-border-color;
+      //}
+
+      &:focus {
+        background-color: $mdlext-bordered-field-focus-background-color;
+        border-color: $mdlext-bordered-field-focus-border-color;
+      }
+
+      // MDL can not handle required. Planned for MDL-v2
+      //&:required:focus {
+      //  background-color: $mdlext-bordered-field-required-focus-background-color;
+      //  border-color: $mdlext-bordered-field-required-focus-border-color;
+      //}
+    }
+    .mdlext-selectfield__select {
+      padding-right: calc(1em + #{$mdlext-bordered-field-padding});  // space for down arrow
+    }
+
+    /*
+    &.is-dirty {
+      .mdl-textfield__input,
+      .mdlext-selectfield__select {
+      }
+    }
+    */
+
+    &.is-invalid {
+      .mdl-textfield__input,
+      .mdlext-selectfield__select {
+        color: $mdlext-bordered-field-input-text-error-color;
+        border-color: $mdlext-bordered-field-error-border-color;
+        background-color: $mdlext-bordered-field-error-background-color;
+
+        &:focus {
+          //&:required:focus {
+          border-color: $mdlext-bordered-field-error-focus-border-color;
+          background-color: $mdlext-bordered-field-error-focus-background-color;
+        }
+      }
+    }
+  }
+
+  .mdlext-selectfield::after {
+    top: auto;
+    bottom: $mdlext-bordered-field-padding-bottom;  // Position of down arrow
+  }
+
+  fieldset[disabled] .mdlext-selectfield::after,
+  .mdlext-selectfield.is-disabled::after {
+    color: $mdlext-bordered-field-input-text-disabled-text-color;
+    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-bordered-field-input-text-disabled-text-color);
+  }
+
+
+  fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+    color: $mdlext-bordered-field-input-text-disabled-text-color;
+    background-color: $mdlext-bordered-field-disabled-background-color;
+    border-color: $mdlext-bordered-field-disabled-border-color;
+  }
+
+
+  // Styling for the label / floating label.
+  .mdl-textfield,
+  .mdlext-selectfield {
+
+    &.is-dirty,
+    &.has-placeholder {
+      .mdl-textfield__label,
+      .mdlext-selectfield__label {
+        visibility: hidden;
+      }
+    }
+    .mdl-textfield__label,
+    .mdlext-selectfield__label {
+      color: $mdlext-bordered-field-input-text-label-color;
+      font-size: $mdlext-bordered-field-label-font-size;
+      font-weight: $mdlext-bordered-field-font-weight;
+      padding-left: $mdlext-bordered-field-padding;
+      top: auto;
+      bottom: $mdlext-bordered-field-padding-bottom;
+
+      // Hides the colored underline for the textField/selectfield.
+      &::after {
+        background-color: transparent !important;
+        visibility: hidden !important;
+      }
+    }
+    &.mdl-textfield--floating-label.is-focused.is-focused,
+    &.mdl-textfield--floating-label.is-dirty.is-dirty,
+    &.mdl-textfield--floating-label.has-placeholder,
+    &.mdlext-selectfield--floating-label.is-focused.is-focused,
+    &.mdlext-selectfield--floating-label.is-dirty.is-dirty,
+    &.mdlext-selectfield--floating-label.has-placeholder {
+
+      .mdl-textfield__label,
+      .mdlext-selectfield__label {
+        color: $mdlext-bordered-field-input-text-label-focus-color;
+        font-size: $mdlext-bordered-field-floating-label-font-size;
+        font-weight: $mdlext-bordered-field-floating-label-font-weight;
+        top: auto;
+        bottom: $mdlext-bordered-field-floating-label-focus-bottom;
+        visibility: visible;
+      }
+    }
+    &.mdl-textfield--floating-label.is-disabled.is-disabled,
+    &.mdlext-selectfield--floating-label.is-disabled.is-disabled {
+
+      .mdl-textfield__label,
+      .mdlext-selectfield__label {
+        color: $mdlext-bordered-field-input-text-label-disabled-color;
+      }
+    }
+    &.mdl-textfield--floating-label.is-invalid.is-invalid,
+    &.mdlext-selectfield--floating-label.is-invalid.is-invalid {
+
+      .mdl-textfield__label,
+      .mdlext-selectfield__label {
+        color: $mdlext-bordered-field-input-text-label-error-color;
+      }
+    }
+  }
+
+  fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+  fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+    color: $mdlext-bordered-field-input-text-label-disabled-color;
+  }
+
+  // Icon(s) and/or button(s) inside textfield
+  .mdl-textfield,
+  .mdlext-selectfield {
+    &.mdlext-bordered-fields__icon-left,
+    &.mdlext-bordered-fields__icon-right {
+      & > i,
+      & > .mdl-button {
+        position: absolute;
+        bottom: $mdlext-bordered-field-padding-bottom - 2px;
+      }
+      & > i {
+        bottom: $mdlext-bordered-field-padding-bottom + 2px;
+      }
+    }
+    &.mdlext-bordered-fields__icon-left {
+      & > i:first-child,
+      & > .mdl-button:first-child {
+        left: $mdlext-bordered-field-padding/2;
+      }
+      & > i ~ .mdl-textfield__input,
+      & > .mdl-button ~ .mdl-textfield__input,
+      & > i ~ .mdlext-selectfield__select,
+      & > .mdl-button ~ .mdlext-selectfield__select {
+        padding-left: $input-text-button-size;
+      }
+      & > i ~ .mdl-textfield__label,
+      & > .mdl-button ~ .mdl-textfield__label {
+        left: $input-text-button-size - $mdlext-bordered-field-padding;
+      }
+      & > i ~ .mdlext-selectfield__label,
+      & > .mdl-button ~ .mdlext-selectfield__label {
+        left: $input-text-button-size - $mdlext-bordered-field-padding;
+      }
+    }
+    &.mdlext-bordered-fields__icon-right {
+      & > .mdl-textfield__input {
+        padding-right: $input-text-button-size;
+      }
+      & > i:last-child,
+      & > .mdl-button:last-child {
+        left: auto;
+        right: $mdlext-bordered-field-padding/2;
+      }
+    }
+    &.is-disabled i,
+    &.is-disabled .mdl-button {
+      color: $mdlext-bordered-field-disabled-border-color;
+      pointer-events: none;
+    }
+  }
+
+  fieldset[disabled] .mdl-textfield,
+  fieldset[disabled] .mdlext-selectfield {
+    i,
+    .mdl-button {
+      color: $mdlext-bordered-field-disabled-border-color;
+      pointer-events: none;
+    }
+  }
+}
+
diff --git a/node_modules/mdl-ext/src/bordered-fields/readme.md b/node_modules/mdl-ext/src/bordered-fields/readme.md
new file mode 100644
index 0000000..40dcfff
--- /dev/null
+++ b/node_modules/mdl-ext/src/bordered-fields/readme.md
@@ -0,0 +1,98 @@
+# Bordered fields
+![Bordered fields](../../etc/bordered-fields-theme.png)
+
+Demonstrates how you can create your own theme of MDL text fields.
+
+## Introduction
+The Material Design Lite Ext (MDLEXT) bordered fields component is a method for decorating contained
+MDL textfields and MDLEXT selectfields without affecting the original MDL design. You can apply the `mdlext-bordered-fields` class
+to any HTML block element and use that as a container for the bordered fields.
+
+### To include a MDLEXT **bordered fields** component:
+&nbsp;1. Code a block element, as the "outer" container, intended to hold all of the bordered fields.
+```html
+<div>
+</div>
+```
+
+&nbsp;2. Add the `mdlext-bordered-fields` MDLEXT class to the block element using the `class` attribute.
+```html
+<div class="mdlext-bordered-fields">
+</div>
+```
+
+&nbsp;3. Add the MDL and MDLEXT fields you want to decorate.
+```html
+<div class="mdlext-bordered-fields">
+  <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>
+
+  <div class="mdlext-selectfield mdlext-js-selectfield">
+    <select class="mdlext-selectfield__select" id="nordic-countries" name="nordic-countries">
+      <option value=""></option>
+      <option value="option1">Norway</option>
+      <option value="option2">Sweden</option>
+      <option value="option3">Suomi</option>
+      <option value="option4">Denmark</option>
+      <option value="option5">Iceland</option>
+    </select>
+    <label class="mdlext-selectfield__label" for="nordic-countries">Where do you want to go</label>
+  </div>
+  .....
+</div>
+```
+
+&nbsp;4. Optionally embed icons and/or buttons into a bordered field by adding the CSS classes 
+`mdlext-bordered-fields__icon-left` and `mdlext-bordered-fields__icon-right` respectively.
+```html
+  <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+    <i class="material-icons">radio</i>
+    <input class="mdl-textfield__input" type="text" id="icon-button1">
+    <label class="mdl-textfield__label">Text...</label>
+    <label class="mdl-button mdl-js-button mdl-button--icon" for="icon-button1">
+      <i class="material-icons">settings_voice</i>
+    </label>
+  </div>
+  
+  <div class="mdlext-selectfield mdlext-js-selectfield mdlext-bordered-fields__icon-left">
+    <i class="material-icons">radio</i>
+    <select class="mdlext-selectfield__select" id="nordic-countries" name="nordic-countries">
+      <option value=""></option>
+      <option value="option1">Norway</option>
+      <option value="option2">Sweden</option>
+      <option value="option3">Suomi</option>
+      <option value="option4">Denmark</option>
+      <option value="option5">Iceland</option>
+    </select>
+    <label class="mdlext-selectfield__label" for="nordic-countries">Where do you want to go</label>
+  </div>
+```
+
+>**Note:** The `mdlext-selectfield` component can only embed an icon at the left hand side.
+
+#### Examples
+See the [example code](./snippets/bordered-fields.html).
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to text fields and select fields. 
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdlext-bordered-fields` | Defines container as an MDL bordered fields component | Required on an "outer" block element|
+| `mdlext-bordered-fields__icon-left` | Add class on `mdl-textfield` or `mdlext-selectfield` container if you want to embedd a left aligned icon or a button into the bordered field |  |
+| `mdlext-bordered-fields__icon-right` | Add class on `mdl-textfield` or `mdlext-selectfield` container if you want to embedd a right aligned icon or a button into the bordered field  |  |
+
+
+### SASS variables.
+
+See: [variables.scss](../_variables.scss)
+
+### Calculations of heights, vertical spacing and positioning of labels and icons
+See: [bordered-fields.scss](./_bordered-fields.scss)
+
+### Credits 
+The Bordered Fields component is based on this [CodePen](http://codepen.io/prajwal078/pen/LVJZXz)
diff --git a/node_modules/mdl-ext/src/bordered-fields/snippets/bordered-fields.html b/node_modules/mdl-ext/src/bordered-fields/snippets/bordered-fields.html
new file mode 100644
index 0000000..5b14918
--- /dev/null
+++ b/node_modules/mdl-ext/src/bordered-fields/snippets/bordered-fields.html
@@ -0,0 +1,376 @@
+<p>Demonstrates how you can create your own theme of MDL text fields without affecting the original MDL fields.</p>
+
+<style>
+  .borderedfield-demo-container {
+  }
+
+  .borderedfield-demo-container .mdl-cell {
+    padding: 0 4px 8px 0;
+  }
+
+  .borderedfield-demo-container .mdl-cell p {
+    margin-bottom: 0;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+  }
+
+  /* File input example */
+  .mdl-button--file input {
+    cursor: pointer;
+    opacity: 0;
+    width: 1px;
+    height: 1px;
+  }
+</style>
+
+
+<div class = "borderedfield-demo-container mdlext-bordered-fields">
+
+  <div class="mdl-grid mdl-grid--no-spacing">
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text</p>
+      <div class="mdl-textfield mdl-js-textfield">
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text numeric</p>
+      <div class="mdl-textfield mdl-js-textfield">
+        <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+        <label class="mdl-textfield__label">Number...</label>
+        <span class="mdl-textfield__error">Input is not a number!</span>
+      </div>
+    </div>
+
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with floating label, required field</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+        <input class="mdl-textfield__input" type="text" list="languages" placeholder="Select a language" required>
+        <label class="mdl-textfield__label">Programming language</label>
+      </div>
+    </div>
+    <datalist id="languages">
+      <option value="HTML">
+      <option value="CSS">
+      <option value="JavaScript">
+      <option value="Java">
+      <option value="Ruby">
+      <option value="PHP">
+      <option value="Go">
+      <option value="Erlang">
+      <option value="Python">
+      <option value="C">
+      <option value="C#">
+      <option value="C++">
+    </datalist>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Select element with floating label</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+          <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Numeric with floating label</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+        <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+        <label class="mdl-textfield__label">Number...</label>
+        <span class="mdl-textfield__error">Input is not a number!</span>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Disabled floating label</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+        <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" disabled value="123">
+        <label class="mdl-textfield__label" >Number...</label>
+        <span class="mdl-textfield__error">Input is not a number!</span>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with icons left and right, disabled</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+        <i class="material-icons">radio</i>
+        <input class="mdl-textfield__input" type="text" disabled>
+        <label class="mdl-textfield__label">Text...</label>
+        <i class="material-icons">fingerprint</i>
+      </div>
+    </div>
+
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with button left</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">phone</i>
+        </label>
+
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with button right</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">settings_voice</i>
+        </label>
+      </div>
+    </div>
+
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Select element</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield">
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+          <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Select element with floating label</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Disabled Select element</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+        <select class="mdlext-selectfield__select" disabled>
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Select element with icon left</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-bordered-fields__icon-left">
+        <i class="material-icons">radio</i>
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Select element with button left</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">phone</i>
+        </label>
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Disabled Select element</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">phone</i>
+        </label>
+        <select class="mdlext-selectfield__select" disabled>
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with icon left</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+        <i class="material-icons">radio</i>
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with icon right</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+        <i class="material-icons">fingerprint</i>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with icons left and right</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+        <i class="material-icons">radio</i>
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+        <i class="material-icons">fingerprint</i>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with buttons left and right</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">phone</i>
+        </label>
+
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">settings_voice</i>
+        </label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with buttons left and right, disabled</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">phone</i>
+        </label>
+
+        <input class="mdl-textfield__input" type="text" disabled>
+        <label class="mdl-textfield__label">Text...</label>
+
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">settings_voice</i>
+        </label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>Text with icon and button</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+        <i class="material-icons">radio</i>
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">settings_voice</i>
+        </label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--4-col">
+      <p>File upload</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right ">
+        <input class="mdl-textfield__input" type="text" id="uploadfile2" readonly>
+        <label class="mdl-textfield__label">File (work in progress)</label>
+
+        <label class="mdl-button mdl-js-button mdl-button--primary mdl-button--icon mdl-button--file" for="uploadfile2">
+          <i class="material-icons">attach_file</i>
+          <input type="file" id="uploadBtn2">
+        </label>
+      </div>
+      <!--
+        // Need a script to work properly - something like this
+      -->
+      <script>
+        (function() {
+          'use strict';
+          document.querySelector('#uploadBtn2').addEventListener('change', function() {
+            var n = document.querySelector("#uploadfile2");
+            n.value = this.files[0].name;
+            n.parentNode.classList.add('is-dirty');
+          });
+        }());
+      </script>
+    </div>
+
+  </div>
+
+  <fieldset disabled>
+    <legend>Disabled fieldset</legend>
+    <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+      <select class="mdlext-selectfield__select">
+        <option value=""></option>
+        <option value="option1">option 1</option>
+        <option value="option2">option 2</option>
+        <option value="option3">option 3</option>
+        <option value="option4">option 4</option>
+        <option value="option5">option 5</option>
+        <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+      </select>
+      <label class="mdlext-selectfield__label">Profession</label>
+    </div>
+
+    <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+      <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+      <label class="mdl-textfield__label">Number...</label>
+      <span class="mdl-textfield__error">Input is not a number!</span>
+    </div>
+
+    <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+      <i class="material-icons">radio</i>
+      <input class="mdl-textfield__input" type="text">
+      <label class="mdl-textfield__label">Text...</label>
+      <label class="mdl-button mdl-js-button mdl-button--icon">
+        <i class="material-icons">settings_voice</i>
+      </label>
+    </div>
+  </fieldset>
+
+</div>
+
+<h5>Credits</h5>
+<p>The Bordered Fields Theme component is based on this <a href="http://codepen.io/prajwal078/pen/LVJZXz" target="_blank">CodePen</a></p>
diff --git a/node_modules/mdl-ext/src/carousel/_carousel.scss b/node_modules/mdl-ext/src/carousel/_carousel.scss
new file mode 100644
index 0000000..674751a
--- /dev/null
+++ b/node_modules/mdl-ext/src/carousel/_carousel.scss
@@ -0,0 +1,141 @@
+@charset "UTF-8";
+
+/**
+ * Copyright 2016 Leif Olsen. 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 carousel ...
+ */
+
+// Use of this module requires the user to include variables from material-design-lite
+//@import "../../node_modules/material-design-lite/src/variables";
+//@import "../../node_modules/material-design-lite/src/mixins";
+
+ul.mdlext-carousel {
+  list-style: none;
+}
+
+.mdlext-carousel {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  overflow: hidden;
+  height: 100%;  // Use a container to constrain height and width
+  width: 100%;
+  display: block;
+  white-space: nowrap;
+  font-size: 0;
+  background-color: transparent;
+}
+
+.mdlext-carousel__slide {
+  box-sizing: border-box;
+  display: inline-block;
+  position: relative;
+  outline: 0;
+  margin: 0 $mdlext-carousel-slide-margin-horizontal;
+  padding:0;
+  height: 100%;
+  border-top: $mdlext-carousel-slide-border-top-width solid transparent; // Makes room for the animated select/focus line
+
+  //&:focus,
+  &[aria-selected],
+  &[aria-selected='true'] {
+    figcaption {
+      // As far as I can see there is no way to darken/lighten a text color
+      // defined by MDL, due to the "unqote" functions.
+      // So this is a hack
+      color: rgba(0, 0, 0, 1) !important;
+      background-color: rgba(255, 255, 255, 0.25);
+    }
+  }
+
+  &[aria-selected]::after,
+  &[aria-selected='true']::after {
+    height: $mdlext-carousel-slide-border-top-width;
+    width: 100%;
+    display: block;
+    content: ' ';
+    top: (-$mdlext-carousel-slide-border-top-width);
+    left: 0;
+    position: absolute;
+    background: $mdlext-carousel-slide-border-top-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);
+  }
+
+
+  a {
+    text-decoration: none;
+  }
+
+  figure {
+    box-sizing: border-box;
+    position: relative;
+    height: 100%;
+    margin: 0;
+    padding: 0;
+
+    img {
+      box-sizing: border-box;
+      max-height: 100%;
+    }
+
+    figcaption {
+      box-sizing: border-box;
+      @include typo-caption($colorContrast: false, $usePreferred: true);
+
+      color: $mdlext-carousel-slide-figcaption-color;
+      position: absolute;
+      bottom: 0;
+      left: 0;
+      white-space: nowrap;
+      overflow: hidden;
+      max-width: 100%;
+      width: 100%;
+      text-align: center;
+      text-overflow: ellipsis;
+      padding: 4px 0;
+    }
+    &:hover {
+      figcaption {
+        // As far as I can see there is no way to darken/lighten a text color
+        // defined by MDL, due to the "unqote" functions.
+        // So this is a hack
+        color: rgba(0, 0, 0, 1) !important;
+        background-color: rgba(255, 255, 255, 0.25);
+      }
+    }
+  }
+
+  .mdlext-carousel__slide__ripple-container {
+    text-decoration: none;
+    display: block;
+    overflow: hidden;
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    outline: 0;
+
+    & .mdl-ripple {
+      background: $mdlext-carousel-slide-ripple-color;
+    }
+  }
+}
+
+
diff --git a/node_modules/mdl-ext/src/carousel/carousel.js b/node_modules/mdl-ext/src/carousel/carousel.js
new file mode 100644
index 0000000..8fe59e1
--- /dev/null
+++ b/node_modules/mdl-ext/src/carousel/carousel.js
@@ -0,0 +1,726 @@
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/**
+ * Image carousel
+ */
+
+import intervalFunction from '../utils/interval-function';
+import { inOutQuintic } from '../utils/easing';
+import { jsonStringToObject} from '../utils/json-utils';
+import {
+  VK_TAB,
+  VK_ENTER,
+  VK_ESC,
+  VK_SPACE,
+  VK_PAGE_UP,
+  VK_PAGE_DOWN,
+  VK_END,
+  VK_HOME,
+  VK_ARROW_LEFT,
+  VK_ARROW_UP,
+  VK_ARROW_RIGHT,
+  VK_ARROW_DOWN,
+  IS_UPGRADED,
+  IS_FOCUSED,
+  MDL_RIPPLE,
+  MDL_RIPPLE_COMPONENT,
+  MDL_RIPPLE_EFFECT,
+  MDL_RIPPLE_EFFECT_IGNORE_EVENTS
+} from '../utils/constants';
+
+const MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';
+
+
+(function() {
+  'use strict';
+
+  //const CAROUSEL = 'mdlext-carousel';
+  const SLIDE      = 'mdlext-carousel__slide';
+  const ROLE       = 'list';
+  const SLIDE_ROLE = 'listitem';
+
+
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  const MaterialExtCarousel = function MaterialExtCarousel(element) {
+    // Stores the element.
+    this.element_ = element;
+
+    // Default config
+    this.config_ = {
+      interactive  : true,
+      autostart    : false,
+      type         : 'slide',
+      interval     : 1000,
+      animationLoop: intervalFunction(1000)
+    };
+
+    this.scrollAnimation_ = intervalFunction(33);
+
+    // Initialize instance.
+    this.init();
+  };
+
+  window['MaterialExtCarousel'] = MaterialExtCarousel;
+
+
+  /**
+   * Start slideshow animation
+   * @private
+   */
+  MaterialExtCarousel.prototype.startSlideShow_ = function() {
+
+    const nextSlide = () => {
+      let slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);
+      if(slide) {
+        slide.removeAttribute('aria-selected');
+        slide = slide.nextElementSibling;
+      }
+      if(!slide) {
+        slide = this.element_.querySelector(`.${SLIDE}:first-child`);
+        this.animateScroll_(0);
+      }
+      if(slide) {
+        this.moveSlideIntoViewport_(slide);
+        slide.setAttribute('aria-selected', '');
+        this.emitSelectEvent_('next', null, slide);
+        return true;
+      }
+      return false;
+    };
+
+    const nextScroll = direction => {
+      let nextDirection = direction;
+
+      if('next' === direction &&  this.element_.scrollLeft === this.element_.scrollWidth - this.element_.clientWidth) {
+        nextDirection = 'prev';
+      }
+      else if(this.element_.scrollLeft === 0) {
+        nextDirection = 'next';
+      }
+      const x = 'next' === nextDirection
+        ?  Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth)
+        :  Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);
+
+      this.animateScroll_(x, 1000);
+      return nextDirection;
+    };
+
+
+    if(!this.config_.animationLoop.started) {
+      this.config_.animationLoop.interval = this.config_.interval;
+      let direction = 'next';
+
+      if('scroll' === this.config_.type) {
+        this.config_.animationLoop.start( () => {
+          direction = nextScroll(direction);
+          return true; // It runs until cancelSlideShow_ is triggered
+        });
+      }
+      else {
+        nextSlide();
+        this.config_.animationLoop.start( () => {
+          return nextSlide(); // It runs until cancelSlideShow_ is triggered
+        });
+      }
+    }
+
+    // TODO: Pause animation when carousel is not in browser viewport or user changes tab
+  };
+
+  /**
+   * Cancel slideshow if running. Emmits a 'pause' event
+   * @private
+   */
+  MaterialExtCarousel.prototype.cancelSlideShow_ = function() {
+    if(this.config_.animationLoop.started) {
+      this.config_.animationLoop.stop();
+      this.emitSelectEvent_('pause', VK_ESC, this.element_.querySelector(`.${SLIDE}[aria-selected]`));
+    }
+  };
+
+  /**
+   * Animate scroll
+   * @param newPosition
+   * @param newDuration
+   * @param completedCallback
+   * @private
+   */
+  MaterialExtCarousel.prototype.animateScroll_ = function( newPosition, newDuration, completedCallback ) {
+
+    const start = this.element_.scrollLeft;
+    const distance = newPosition - start;
+
+    if(distance !== 0) {
+      const duration = Math.max(Math.min(Math.abs(distance), newDuration||400), 100); // duration is between 100 and newDuration||400ms||distance
+      let t = 0;
+      this.scrollAnimation_.stop();
+      this.scrollAnimation_.start( timeElapsed => {
+        t += timeElapsed;
+        if(t < duration) {
+          this.element_.scrollLeft = inOutQuintic(t, start, distance, duration);
+          return true;
+        }
+        else {
+          this.element_.scrollLeft = newPosition;
+          if(completedCallback) {
+            completedCallback();
+          }
+          return false;
+        }
+      });
+    }
+    else {
+      if(completedCallback) {
+        completedCallback();
+      }
+    }
+  };
+
+  /**
+   * Execute commend
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.command_ = function( event ) {
+    let x = 0;
+    let slide = null;
+    const a = event.detail.action.toLowerCase();
+
+    // Cancel slideshow if running
+    this.cancelSlideShow_();
+
+    switch (a) {
+      case 'first':
+        slide = this.element_.querySelector(`.${SLIDE}:first-child`);
+        break;
+
+      case 'last':
+        x = this.element_.scrollWidth - this.element_.clientWidth;
+        slide = this.element_.querySelector(`.${SLIDE}:last-child`);
+        break;
+
+      case 'scroll-prev':
+        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);
+        break;
+
+      case 'scroll-next':
+        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);
+        break;
+
+      case 'next':
+      case 'prev':
+        slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);
+        if(slide) {
+          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;
+          this.setAriaSelected_(slide);
+          this.emitSelectEvent_(a, null,  slide);
+        }
+        return;
+
+      case 'play':
+        Object.assign(this.config_, event.detail);
+        this.startSlideShow_();
+        return;
+
+      case 'pause':
+        return;
+
+      default:
+        return;
+    }
+
+    this.animateScroll_(x, undefined, () => {
+      if ('scroll-next' === a || 'scroll-prev' === a) {
+        const slides = this.getSlidesInViewport_();
+        if (slides.length > 0) {
+          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];
+        }
+      }
+      this.setAriaSelected_(slide);
+      this.emitSelectEvent_(a, null, slide);
+    });
+  };
+
+  /**
+   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause
+   * @param event. A custom event
+   * @private
+   */
+  MaterialExtCarousel.prototype.commandHandler_ = function( event ) {
+    event.preventDefault();
+    event.stopPropagation();
+    if(event.detail && event.detail.action) {
+      this.command_(event);
+    }
+  };
+
+  /**
+   * Handle keypress
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.keyDownHandler_ = function(event) {
+
+    if (event && event.target && event.target !== this.element_) {
+
+      let action = 'first';
+
+      if ( event.keyCode === VK_HOME    || event.keyCode === VK_END
+        || event.keyCode === VK_PAGE_UP || event.keyCode === VK_PAGE_DOWN) {
+
+        event.preventDefault();
+        if (event.keyCode === VK_END) {
+          action = 'last';
+        }
+        else if (event.keyCode === VK_PAGE_UP) {
+          action = 'scroll-prev';
+        }
+        else if (event.keyCode === VK_PAGE_DOWN) {
+          action = 'scroll-next';
+        }
+
+        const cmd = new CustomEvent('select', {
+          detail: {
+            action: action,
+          }
+        });
+        this.command_(cmd);
+      }
+      else if ( event.keyCode === VK_TAB
+        || event.keyCode === VK_ENTER      || event.keyCode === VK_SPACE
+        || event.keyCode === VK_ARROW_UP   || event.keyCode === VK_ARROW_LEFT
+        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {
+
+        let slide = getSlide_(event.target);
+
+        if(!slide) {
+          return;
+        }
+
+        // Cancel slideshow if running
+        this.cancelSlideShow_();
+
+        switch (event.keyCode) {
+          case VK_ARROW_UP:
+          case VK_ARROW_LEFT:
+            action = 'prev';
+            slide = slide.previousElementSibling;
+            break;
+
+          case VK_ARROW_DOWN:
+          case VK_ARROW_RIGHT:
+            action = 'next';
+            slide = slide.nextElementSibling;
+            break;
+
+          case VK_TAB:
+            if (event.shiftKey) {
+              action = 'prev';
+              slide = slide.previousElementSibling;
+            }
+            else {
+              action = 'next';
+              slide = slide.nextElementSibling;
+            }
+            break;
+
+          case VK_SPACE:
+          case VK_ENTER:
+            action = 'select';
+            break;
+        }
+
+        if(slide) {
+          event.preventDefault();
+          setFocus_(slide);
+          this.emitSelectEvent_(action, event.keyCode, slide);
+        }
+      }
+    }
+  };
+
+  /**
+   * Handle dragging
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.dragHandler_ = function(event) {
+    event.preventDefault();
+
+    // Cancel slideshow if running
+    this.cancelSlideShow_();
+
+    let updating = false;
+    let rAFDragId = 0;
+
+    const startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);
+    let prevX = startX;
+    const targetElement = event.target;
+
+    const update = e => {
+      const currentX = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0));
+      const dx = prevX - currentX;
+
+      if(dx < 0) {
+        this.element_.scrollLeft = Math.max(this.element_.scrollLeft + dx, 0);
+      }
+      else if(dx > 0) {
+        this.element_.scrollLeft = Math.min(this.element_.scrollLeft + dx, this.element_.scrollWidth - this.element_.clientWidth);
+      }
+
+      prevX = currentX;
+      updating = false;
+    };
+
+    // drag handler
+    const drag = e => {
+      e.preventDefault();
+
+      if(!updating) {
+        rAFDragId = window.requestAnimationFrame( () => update(e));
+        updating = true;
+      }
+    };
+
+    // end drag handler
+    const endDrag = e => {
+      e.preventDefault();
+
+      this.element_.removeEventListener('mousemove', drag);
+      this.element_.removeEventListener('touchmove', drag);
+      window.removeEventListener('mouseup', endDrag);
+      window.removeEventListener('touchend', endDrag);
+
+      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/
+      window.cancelAnimationFrame(rAFDragId);
+
+      const slide = getSlide_(targetElement);
+      setFocus_(slide);
+      this.emitSelectEvent_('click', null,  slide);
+    };
+
+    this.element_.addEventListener('mousemove', drag);
+    this.element_.addEventListener('touchmove', drag);
+    window.addEventListener('mouseup', endDrag);
+    window.addEventListener('touchend',endDrag);
+  };
+
+  /**
+   * Handle click
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.clickHandler_ = function(event) {
+    // Click is handled by drag
+    event.preventDefault();
+  };
+
+  /**
+   * Handle focus
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.focusHandler_ = function(event) {
+    const slide = getSlide_(event.target);
+    if(slide) {
+      // The last focused/selected slide has 'aria-selected', even if focus is lost
+      this.setAriaSelected_(slide);
+      slide.classList.add(IS_FOCUSED);
+    }
+  };
+
+  /**
+   * Handle blur
+   * @param event
+   * @private
+   */
+  MaterialExtCarousel.prototype.blurHandler_ = function(event) {
+    const slide = getSlide_(event.target);
+    if(slide) {
+      slide.classList.remove(IS_FOCUSED);
+    }
+  };
+
+  /**
+   * Emits a custeom 'select' event
+   * @param command
+   * @param keyCode
+   * @param slide
+   * @private
+   */
+  MaterialExtCarousel.prototype.emitSelectEvent_ = function(command, keyCode, slide) {
+
+    if(slide) {
+      this.moveSlideIntoViewport_(slide);
+
+      const evt = new CustomEvent('select', {
+        bubbles: true,
+        cancelable: true,
+        detail: {
+          command: command,
+          keyCode: keyCode,
+          source: slide
+        }
+      });
+      this.element_.dispatchEvent(evt);
+    }
+  };
+
+  /**
+   * Get the first visible slide in component viewport
+   * @private
+   */
+  MaterialExtCarousel.prototype.getSlidesInViewport_ = function() {
+    const carouselRect = this.element_.getBoundingClientRect();
+
+    const slidesInViewport = [...this.element_.querySelectorAll(`.${SLIDE}`)].filter( slide => {
+      const slideRect = slide.getBoundingClientRect();
+      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;
+    });
+    return slidesInViewport;
+  };
+
+  /**
+   * Move slide into component viewport - if needed
+   * @param slide
+   * @private
+   */
+  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function(slide) {
+    const carouselRect = this.element_.getBoundingClientRect();
+    const slideRect = slide.getBoundingClientRect();
+
+    if(slideRect.left < carouselRect.left) {
+      const x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);
+      this.animateScroll_(x);
+    }
+    else if(slideRect.right > carouselRect.right) {
+      const x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);
+      this.animateScroll_(x);
+    }
+  };
+
+
+  /**
+   * Removes 'aria-selected' from all slides in carousel
+   * @private
+   */
+  MaterialExtCarousel.prototype.setAriaSelected_ = function(slide) {
+    if(slide) {
+      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected]`)].forEach(
+        slide => slide.removeAttribute('aria-selected')
+      );
+      slide.setAttribute('aria-selected', '');
+    }
+  };
+
+  /**
+   * Removes event listeners
+   * @private
+   */
+  MaterialExtCarousel.prototype.removeListeners_ = function() {
+    this.element_.removeEventListener('focus', this.focusHandler_);
+    this.element_.removeEventListener('blur', this.blurHandler_);
+    this.element_.removeEventListener('keydown', this.keyDownHandler_);
+    this.element_.removeEventListener('mousedown', this.dragHandler_);
+    this.element_.removeEventListener('touchstart', this.dragHandler_);
+    this.element_.removeEventListener('click', this.clickHandler_, false);
+    this.element_.removeEventListener('command', this.commandHandler_);
+    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);
+  };
+
+
+  // Helpers
+  const getSlide_ = element => {
+    return element.closest(`.${SLIDE}`);
+  };
+
+  const setFocus_ = slide => {
+    if(slide) {
+      slide.focus();
+    }
+  };
+
+  const addRipple_ = slide => {
+    if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {
+      const rippleContainer = document.createElement('span');
+      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);
+      rippleContainer.classList.add(MDL_RIPPLE_EFFECT);
+      const ripple = document.createElement('span');
+      ripple.classList.add(MDL_RIPPLE);
+      rippleContainer.appendChild(ripple);
+
+      const img = slide.querySelector('img');
+      if (img) {
+        // rippleContainer blocks image title
+        rippleContainer.title = img.title;
+      }
+      slide.appendChild(rippleContainer);
+      componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);
+    }
+  };
+  // End helpers
+
+
+  // Public methods.
+
+  /**
+   * Cancel animation - if running.
+   *
+   * @public
+   */
+  MaterialExtCarousel.prototype.stopAnimation = function() {
+    this.config_.animationLoop.stop();
+  };
+  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;
+
+
+  /**
+   * Upgrade slides
+   * Use if more list elements are added later (dynamically)
+   *
+   * @public
+   */
+  MaterialExtCarousel.prototype.upgradeSlides = function() {
+
+    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);
+
+    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {
+
+      slide.setAttribute('role', SLIDE_ROLE);
+
+      if(this.config_.interactive) {
+        if(!slide.getAttribute('tabindex')) {
+          slide.setAttribute('tabindex', '0');
+        }
+        if (hasRippleEffect) {
+          addRipple_(slide);
+        }
+      }
+      else {
+        slide.setAttribute('tabindex', '-1');
+      }
+    });
+  };
+  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;
+
+
+  /**
+   * Get config object
+   *
+   * @public
+   */
+  MaterialExtCarousel.prototype.getConfig = function() {
+    return this.config_;
+  };
+  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtCarousel.prototype.init = function() {
+
+    if (this.element_) {
+      // Config
+      if(this.element_.hasAttribute('data-config')) {
+        this.config_ = jsonStringToObject(this.element_.getAttribute('data-config'), this.config_);
+      }
+
+      // Wai-Aria
+      this.element_.setAttribute('role', ROLE);
+
+      // Prefer tabindex -1
+      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {
+        this.element_.setAttribute('tabindex', -1);
+      }
+
+      // Remove listeners, just in case ...
+      this.removeListeners_();
+
+      if(this.config_.interactive) {
+
+        // Ripple
+        const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);
+        if (hasRippleEffect) {
+          this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);
+        }
+
+        // Listen to focus/blur events
+        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);
+        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);
+
+        // Listen to keyboard events
+        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);
+
+        // Listen to drag events
+        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);
+        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);
+
+        // Listen to click events
+        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);
+      }
+
+      // Listen to custom 'command' event
+      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+
+      // Listen to 'mdl-componentdowngraded' event
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+
+      // Slides collection
+      this.upgradeSlides();
+
+      // Set upgraded flag
+      this.element_.classList.add(IS_UPGRADED);
+
+      if(this.config_.autostart) {
+        // Start slideshow
+        this.startSlideShow_();
+      }
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtCarousel.prototype.mdlDowngrade_ = function() {
+    'use strict';
+    //console.log('***** MaterialExtCarousel.mdlDowngrade_');
+
+    // Stop animation - if any
+    this.stopAnimation();
+
+    // Remove listeners
+    this.removeListeners_();
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtCarousel,
+    classAsString: 'MaterialExtCarousel',
+    cssClass: 'mdlext-js-carousel',
+    widget: true
+  });
+})();
diff --git a/node_modules/mdl-ext/src/carousel/readme.md b/node_modules/mdl-ext/src/carousel/readme.md
new file mode 100644
index 0000000..6485972
--- /dev/null
+++ b/node_modules/mdl-ext/src/carousel/readme.md
@@ -0,0 +1,271 @@
+# Carousel
+
+![Carousel](../../etc/carousel.png)
+
+A responsive image carousel.
+
+## Introduction
+The Material Design Lite Ext (MDLEXT) Carousel, commonly also referred to as “slide shows” or “sliders”, is a component 
+for cycling through a series of images. The carousel is defined and enclosed by a container element and 
+distributes images horizontally, with repect to the available container size. Images outside the container viewport slides
+into view, triggerd by a user action or by running an animation loop (rAF). 
+
+This component does not attempt in any way to resemble a three-dimensional image carousel that is used to show slides 
+from a projector. The component is perceived more as a slider, but the terms slider and carousel, are often used 
+interchangeably.
+
+### Features:
+* Navigate carousel using keyboard (arrow keys, tab, pgup, pgdown, home, end), mouse drag, touch events, or by sending custom events to the carousel (first, scroll-prev, prev, next, scroll-next, last, play, pause)
+* Select a particular image  using enter or space key, or by clicking an image 
+* Cycle images at a given interval - a slideshow
+* Set slideshow interval via a data attribute or as a part of the play custom event
+* Stop slideshow via custom event (pause) or by a user interaction, e.g clicking an image
+* User interactions via keyboard, mouse or touch events may be blocked, if configured 
+* Start slideshow at component initialization using a data attribute
+* The carousel emits custom events reflecting a user action. E.g. clicking an image will emit a 'select' event with a detail object holding a reference to the selected image.
+
+### Limitations:
+* The carousel should pause any running animation on window.bur or tab.blur - not implemented
+* The carousel should pause any running animation when the carousel is not in window viewport - not implemented
+* Only horizontal layout in first release
+
+
+### To include a MDLEXT **carousel** component:
+&nbsp;1. Code a block element, e.g. a `<div>` element, to hold dimensions of the carousel. 
+```html
+<div style="height: 200px; width: 100%;">
+</div>
+```
+
+&nbsp;2. Code a `<ul>` element with `class="mdlext-carousel mdlext-js-carousel"` to hold the carousel. 
+```html
+<div style="height: 200px; width: 100%;">
+  <ul class="mdlext-carousel mdlext-js-carousel">
+  <ul>
+</div>
+```
+
+&nbsp;3. Code a `<li>` element with `class="mdlext-carousel__slide"`  to hold an individual image (thumbnail). 
+```html
+<div style="height: 200px; width: 100%;">
+  <ul class="mdlext-carousel mdlext-js-carousel">
+    <li class="mdlext-carousel__slide">
+    <li>
+  <ul>
+</div>
+```
+
+&nbsp;4. Code a `<figure>` element to hold the image and the image title.  
+```html
+<div style="height: 200px; width: 100%;">
+  <ul class="mdlext-carousel mdlext-js-carousel">
+    <li class="mdlext-carousel__slide">
+      <figure>
+      </figure>
+    <li>
+  <ul>
+</div>
+```
+
+&nbsp;5. Inside the `<figure>` element add an `<img>` element with reference to the thumbnail image to be shown. Optionally add a `<figcaption>` element to hold the image title.    
+```html
+<div style="height: 200px; width: 100%;">
+  <ul class="mdlext-carousel mdlext-js-carousel">
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="_D802591.jpg" title="Whooper swans in flight"/>
+        <figcaption>_D802591.jpg</figcaption>
+      </figure>
+    <li>
+  <ul>
+</div>
+```
+
+&nbsp;6. Repeat steps 3..5 for each slide required.
+
+### Examples
+* See: [snippets/carousel.html](./snippets/carousel.html)
+* Or try out the [live demo](http://leifoolsen.github.io/mdl-ext/demo/carousel.html)
+
+## Interactions
+
+### Keyboard interaction
+The carousel interacts with the following keyboard keys.
+
+*   `Tab` - When focus is on a slide, pressing the `Tab` key moves focus in the following manner:
+      *   If there is a next slide, focus moves to the next slide.
+      *   If focus is on the last slide, focus moves to the first focusable element outside the carousel component.
+*   `Shift+Tab` - Generally the reverse of `Tab`.
+*   `Left arrow` - Moves focus to the previous slide. If the current slide is the first slide, focus stays on that slide.
+*   `Right arrow` - Moves focus to the next slide. If the current slide is the last slide, focus stays on that slide.
+*   `Up arrow` - behaves the same as left arrow.
+*   `Down arrow` - behaves the same as right arrow.
+*   `End` - When focus is on a slide, an `End` key press moves focus to the last slide.
+*   `Home` - When focus is on a slide, a `Home` key press moves focus to the first slide.
+*   `Enter/Space` - When focus is on a slide, pressing `Enter` or `Space` selects the focused slide.
+
+### Mouse / Touch interaction
+*   `Drag or Swipe left` - Move slides outside container viewport into view.
+*   `Drag or Swipe right` - Move slides outside container viewport into view
+
+
+## Component configuration
+The component can be configured using a `data-config` attribute. The attribute value is a JSON string with the following properties.
+
+| Property        |    |    |
+|-----------------|----|----|
+| `interactive`   | if `true`, the user can use keyboard or mouse to navigate the slides | default: `true` |
+| `autostart`     | if `true`, the slideshow starts immediately after component initialization | default: `false` |
+| `type`          | animation type, `'slide'`, advances one slide,  `'scroll'`, moves next sequence of slides into view | default `'slide'` |
+| `interval`      | animation interval, in milliseconds | default `1000` |
+
+
+The `data-config` attribute must be a valid JSON string. You can use single or double quotes for the JSON properties. 
+
+Example 1, single quotes in JSON config string:
+```html
+<ul class="mdlext-carousel mdlext-js-carousel mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events" 
+  data-config="{ 'interactive': true, 'autostart': false, 'type': 'slide', 'interval': 2000 }">
+  ......
+</ul>
+```
+
+Example 2, double quotes in JSON config string:
+```html
+<ul class="mdlext-carousel mdlext-js-carousel" 
+  data-config='{ "interactive": false, "autostart": true, "type": "scroll", "interval": 5000 }'>
+  ......
+</ul>
+```
+
+## Events
+Interaction with the component programmatically is performed by sending events to the component, and receive responses 
+from the component.  
+
+### Events the component listenes to
+A client can send a `command` custom event to the carousel. The command event holds an action detail object defining 
+the action to perform.
+
+```javascript
+new CustomEvent('command', { detail: { action : 'first' } });
+new CustomEvent('command', { detail: { action : 'scroll-prev' } });
+new CustomEvent('command', { detail: { action : 'prev' } });
+new CustomEvent('command', { detail: { action : 'next' } });
+new CustomEvent('command', { detail: { action : 'scroll-next' } });
+new CustomEvent('command', { detail: { action : 'last' } });
+new CustomEvent('command', { detail: 
+  { 
+    action : 'play', 
+    interval: 3000   // Interval is optional, overrides value set by 'data-config'
+  } 
+}); 
+new CustomEvent('command', { detail: { action : 'pause' } });
+
+// Trigger the event
+myCarousel.dispatchEvent(ev);
+```
+
+Refer to [snippets/lightbox.html](./snippets/carousel.html) for usage.
+
+### Events emitted
+When a user interacts with the component, or the component receives a `command` custom event, the component responds
+with a `select` custom event reflecting the action performed and a detail object holding the selected slide element.
+
+The `select` detail object has the following format:
+
+```javascript
+detail: {
+  command, // The command executed (`first`, `scroll-prev`, `prev`, `next`, `scroll-next`, `last`) 
+  keyCode, // Key pressed, if any 
+  source   // The element that caused the event
+}
+```
+
+Set up a `select` listener.
+```javascript
+document.querySelector('#my-carousel').addEventListener('select', function(e) {
+  var selectedElement = e.detail.source;
+  console.log('Selected element', selectedElement);
+  var selectImage = selectedElement.querySelector('img');
+});
+
+```
+Refer to [snippets/lightbox.html](./snippets/carousel.html) for usage.
+
+
+## Public methods
+
+### `stopAnimation()`
+
+Stops animation - if any.
+
+### `upgradeSlides()`
+Upgrade slides. If you add slides to the carousel after the page has loaded, you must call `upgradeSlides` to 
+notify the component about the newly inserted slides.
+
+```javascript
+myCarousel = document.querySelector('#my-carousel');
+myCarousel.MaterialExtCarousel.upgradeSlides();
+```
+
+### `getConfig()`
+Returns the `config` object.
+
+
+## Configuration options
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the carousel.
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|--------------|--------|---------|
+| `mdlext-carousel` | Defines a container as an MDLEXT carousel component | Required on `<ul>` element |
+| `mdlext-js-carousel` | Assigns basic MDL behavior to carousel | Required on `<ul>` element |
+| `mdlext-carousel__slide` | Defines a carousel slide | Required on `<li>` element |
+
+Attributes.
+
+| Attribute | Effect | Remarks |
+|-----------|--------|---------|
+| `data-config` | A JSON object defining startup configurations |  |
+| `aria-selected` | The selected `mdlext-carousel__slide` element | Only one element can be selected at the same time |
+| `list` | The component add the role `list` to self |  |
+| `listitem` | The component add the role `listitem` to `mdlext-carousel__slide` items |  |
+
+
+## Note for single page applications
+If you use Material Design Lite in a dynamic page, e.g. a single page application, any running animations must be 
+stopped before a page frament containing a carousel component is removed from the DOM. Call 
+`componentHandler.downgradeElements` to stop any running animation and clean up component resources. 
+In a static web application there should be no need to call `componentHandler.downgradeElements`.
+
+The following code snippet demonstrates how to properly clean up components before removing them from DOM.
+
+```javascript
+// Call 'componentHandler.downgradeElements' to clean up
+const content = document.querySelector('#content');
+const components = content.querySelectorAll('.is-upgraded');
+componentHandler.downgradeElements([...components]);
+
+// Remove elements from DOM.
+// See: http://jsperf.com/empty-an-element/16
+const removeChildElements = (element, forceReflow = true) => {
+  while (element.lastChild) {
+    element.removeChild(element.lastChild);
+  }
+  if(forceReflow) {
+    // See: http://jsperf.com/force-reflow
+    const d = element.style.display;
+    element.style.display = 'none';
+    element.style.display = d;
+  }
+}
+
+removeChildElements(content); 
+```
+
+## How to use the component programmatically
+The [tests](../../test/carousel/carousel.spec.js) and the [snippets/lightbox.html](./snippets/carousel.html) 
+code provides examples on how to use the component programmatically.
+
+## Reference
+[WCAG Carousel Concepts](https://www.w3.org/WAI/tutorials/carousels/)
diff --git a/node_modules/mdl-ext/src/carousel/snippets/carousel.html b/node_modules/mdl-ext/src/carousel/snippets/carousel.html
new file mode 100644
index 0000000..ac51213
--- /dev/null
+++ b/node_modules/mdl-ext/src/carousel/snippets/carousel.html
@@ -0,0 +1,612 @@
+<p><strong>Note:</strong> Does not work as expected in IE11</p>
+
+<style>
+  .carousel-demo {
+    box-sizing: border-box;
+    display: block;
+    padding: 4px;
+    border: 1px solid #dddddd;
+    border-radius: 4px;
+    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);
+  }
+
+  .carousel-demo * {
+    box-sizing: border-box;
+  }
+
+  #carousel-imgviewer {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-pack: center;
+    -ms-flex-pack: center;
+    justify-content: center;
+  }
+
+  #carousel-imgviewer figure {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-orient: vertical;
+    -webkit-box-direction: normal;
+    -ms-flex-direction: column;
+    flex-direction: column;
+    -webkit-box-pack: center;
+    -ms-flex-pack: center;
+    justify-content: center;
+
+    position: relative;
+    height: 100%;
+    padding: 0;
+    margin: 0;
+  }
+
+  #carousel-imgviewer figure img {
+    width: auto;
+    max-width: 100%;
+    max-height: 100%;
+    border: 0;
+    outline: 0;
+
+    -webkit-animation: fade-in-element 0.25s ease-out;
+    -moz-animation: fade-in-element 0.25s ease-out;
+    -o-animation: fade-in-element 025s ease-out;
+    animation: fade-in-element 0.25s ease-out;
+  }
+
+  #carousel-footer {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-pack: justify;
+    -ms-flex-pack: justify;
+    justify-content: space-between;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center;
+  }
+
+  #carousel-footer .mdl-card__supporting-text {
+    -webkit-box-flex: 1;
+    -ms-flex: 1;
+    flex: 1;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    padding: 0;
+    width: 100%;
+  }
+
+  #carousel-footer nav {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+  }
+
+  .carousel-button {
+  }
+  .carousel-button__icon {
+    font-size: 24px;
+  }
+
+  #carousel-container {
+  }
+
+  @media (max-width: 479px) {
+    #carousel-imgviewer {
+      height: 260px;
+    }
+    .carousel-button {
+      width: 28px;
+      min-width: 28px;
+      height: 28px;
+    }
+    .carousel-button__icon {
+      font-size: 20px;
+    }
+    #carousel-container {
+      height: 60px;
+      margin-top: 4px;
+    }
+  }
+
+  @media (min-width: 480px) and (max-width: 839px) {
+    #carousel-imgviewer {
+      height: 360px;
+    }
+    #carousel-container {
+      height: 90px;
+    }
+  }
+
+  @media (min-width: 840px) {
+    #carousel-imgviewer {
+      height: 500px;
+    }
+    #carousel-container {
+      height: 110px;
+    }
+  }
+
+  @-webkit-keyframes fade-in-element {
+    0%   { opacity: 0; }
+    100% { opacity: 1; }
+  }
+  @-moz-keyframes fade-in-element {
+    0%   { opacity: 0; }
+    100% { opacity: 1; }
+  }
+  @-o-keyframes fade-in-element {
+    0%   { opacity: 0; }
+    100% { opacity: 1; }
+  }
+  @keyframes fade-in-element {
+    0%   { opacity: 0; }
+    100% { opacity: 1; }
+  }
+
+</style>
+
+<artichle class="carousel-demo" style="height: 64px; margin-bottom: 16px; padding-top: 1px;">
+  <ul class="mdlext-carousel mdlext-js-carousel"
+      data-config="{ 'interactive': false, 'autostart': true, 'type': 'scroll', 'interval': 5000 }">
+
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D802141.jpg" title="Northern goshawk with prey"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D802143.jpg" title="Northern goshawk with prey"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D802591.jpg" title="Whooper swans in flight"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D804370-3.jpg" title="European green woodpecker"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D808689.jpg" title="The bridge"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D802181.jpg" title="Landscape in blue pastel"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+     <figure>
+        <img src="./images/_D800912.jpg" title="Hiking the mountains of Dovre"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D809453-_D809457-4.jpg" title="The Polar Express. End of Line. Ny Aalesund, Spitsbergen" />
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_DSC8214.jpg" title="Still got the blues"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D800017.jpg" title="Flowers"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D800023.jpg" title="Red-breasted merganser"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D800851.jpg" title="Musk oxes, Dovre, Norway"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D800166.jpg" title="Arctic Fox, Svalbard, Norway" />
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D800951.jpg" title="Fly fishing the arctic waters, Svalbard, Norway"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D801188.jpg" title="Lady of the snows (Pulsatilla vernalis), Dovre, Norway"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D801205-2.jpg" title="PULSE, Kilden Consert Hall, Kristiansand"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D801274.jpg" title="PULSE, Kilden Consert Hall, Kristiansand"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D801392.jpg" title="Peregrine falcon, Norway"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D801436.jpg" title="Peregrine falcon, Norway"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D801952-4.jpg" title="Mr. Per E Knudsen"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D807603.jpg" title="Black Woodpecker"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D807689.jpg" title="Goshina"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D807558.jpg" title="Goshina"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D800464.jpg" title="Svalbard Rock ptarmigan"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_DSC7535.jpg" title="Nice, France"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D802478.jpg" title="Cheetah, Bloemfontain, South Africa"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D800698.jpg" title="Red Squirrel"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D803118.jpg" title="Milky Way, Bloemfontain, South Africa"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D803521.jpg" title="Winter Light, Senja, Norway"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D803465-3.jpg" title="Selfie with Aurora B :)"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D806374.jpg" title="Lista Lighthouse, Norway"/>
+      </figure>
+    </li>
+    <li class="mdlext-carousel__slide">
+      <figure>
+        <img src="./images/_D805345-12.jpg" title="Osprey"/>
+      </figure>
+    </li>
+  </ul>
+</artichle>
+
+
+
+
+<artichle class="carousel-demo">
+
+  <section id="carousel-imgviewer">
+    <figure>
+      <img src="./images/_D802143-2.jpg" alt="" title=""/>
+    </figure>
+  </section>
+
+  <footer id="carousel-footer">
+    <div id="carousel-viewer-title" class="mdl-card__supporting-text">Northern goshawk with prey</div>
+    <nav>
+      <button id="carousel-btn-first" class="mdl-button mdl-button--icon mdl-js-button carousel-button" title="Scroll First">
+        <i class="material-icons carousel-button__icon">first_page</i>
+      </button>
+      <button id="carousel-btn-scroll-prev" class="mdl-button mdl-button--icon mdl-js-button carousel-button" title="Scroll Previous">
+        <i class="material-icons carousel-button__icon">fast_rewind</i>
+      </button>
+      <button id="carousel-btn-prev" class="mdl-button mdl-button--icon mdl-js-button carousel-button" title="Previous">
+        <i class="material-icons carousel-button__icon">navigate_before</i>
+      </button>
+      <button id="carousel-btn-play-pause" class="mdl-button mdl-button--icon mdl-js-button carousel-button" title="Play">
+        <i class="material-icons carousel-button__icon">play_circle_outline</i>
+      </button>
+      <button id="carousel-btn-next" class="mdl-button mdl-button--icon mdl-js-button carousel-button" title="Next">
+        <i class="material-icons carousel-button__icon">navigate_next</i>
+      </button>
+      <button id="carousel-btn-scroll-next" class="mdl-button mdl-button--icon mdl-js-button carousel-button" title="Scroll Next">
+        <i class="material-icons carousel-button__icon">fast_forward</i>
+      </button>
+      <button id="carousel-btn-last" class="mdl-button mdl-button--icon mdl-js-button carousel-button" title="Scroll Last">
+        <i class="material-icons carousel-button__icon">last_page</i>
+      </button>
+    </nav>
+  </footer>
+
+  <section id="carousel-container">
+    <ul id="mdlext-carousel-demo2" class="mdlext-carousel mdlext-js-carousel mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events">
+      <li class="mdlext-carousel__slide" aria-selected >
+        <a href="./images/_D802143-2.jpg">
+          <figure>
+            <img src="./images/_D802143.jpg" title="Northern goshawk with prey"/>
+            <figcaption>_D802143.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_D802591-2.jpg">
+          <figure>
+            <img src="./images/_D802591.jpg" title="Whooper swans in flight"/>
+            <figcaption>_D802591.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D802181.jpg" title="Landscape in blue pastel"/>
+          <figcaption>_D802181.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_D809453-_D809457-3.jpg">
+          <figure>
+            <img src="./images/_D809453-_D809457-4.jpg" title="The Polar Express. End of Line. Ny Aalesund, Spitsbergen" />
+            <figcaption>_D809453</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_DSC8214-2.jpg">
+          <figure>
+            <img src="./images/_DSC8214.jpg" title="Still got the blues"/>
+            <figcaption>_DSC8214.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_D800166-2.jpg">
+          <figure>
+            <img src="./images/_D800166.jpg" title="Arctic Fox, Svalbard, Norway" />
+            <figcaption>_D800166.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_D801392-2.jpg">
+          <figure>
+            <img src="./images/_D801392.jpg" title="Peregrine falcon, Norway"/>
+            <figcaption>_D801392.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_D801436-2.jpg">
+          <figure>
+            <img src="./images/_D801436.jpg" title="Peregrine falcon, Norway"/>
+            <figcaption>_D801436.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D807558.jpg" title="Goshina"/>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_D800464.jpg">
+          <figure>
+            <img src="./images/_D800464.jpg" title="Svalbard Rock ptarmigan"/>
+            <figcaption>_D800464.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <a href="./images/_DSC7535-2.jpg">
+          <figure>
+            <img src="./images/_DSC7535.jpg" title="Nice, France"/>
+            <figcaption>_DSC7535.jpg</figcaption>
+          </figure>
+        </a>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D802478.jpg" title="Cheetah, Bloemfontain, South Africa"/>
+          <figcaption>_D802478.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D800698.jpg" title="Red Squirrel"/>
+          <figcaption>_D800698.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D803118.jpg" title="Milky Way, Bloemfontain, South Africa"/>
+          <figcaption>_D803118.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D803521.jpg" title="Winter Light, Senja, Norway"/>
+          <figcaption>_D803521.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D803465-3.jpg" title="Selfie with Aurora B :)"/>
+          <figcaption>_D803465.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D806374.jpg" title="Lista Lighthouse, Norway"/>
+          <figcaption>_D806374.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D801087.jpg" title="Brokke, Norway"/>
+          <figcaption>_D801087.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D803221.jpg" title="Mnt. Seglan, Senja, Norway"/>
+          <figcaption>_D803221.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D803759.jpg" title="Fruit bat, Mauritius"/>
+          <figcaption>_D803759.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D809758-2.jpg" title="Polar bear, Svalbard, Norway"/>
+          <figcaption>_D809758.jpg</figcaption>
+        </figure>
+      </li>
+      <li class="mdlext-carousel__slide">
+        <figure>
+          <img src="./images/_D805345-12.jpg" title="Osprey"/>
+          <figcaption>_D805345.jpg</figcaption>
+        </figure>
+      </li>
+    </ul>
+  </section>
+</artichle>
+
+
+<div style="margin-top: 8px">
+  <button id="btn-add-image" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--raised mdl-button--colored">
+    Add image to carousel
+  </button>
+  <p class="mdl-typography--caption" style="margin-top: 8px">
+    Click the button to add a new image to the carousel. Move to the inserted
+    image and click it. It should have ripple effect if upgraded correctly.
+  </p>
+</div>
+
+<p class="mdl-typography--caption" style="margin-top: 32px;">
+  All images appearing in this page are the exclusive property of Leif Olsen and are protected under the United States
+  and International Copyright laws. The images may not be reproduced or manipulated without the written permission of
+  Leif Olsen. Use of any image as the basis for another photographic concept or illustration (digital, artist rendering
+  or alike) is a violation of the United States and International Copyright laws. All images are copyrighted &copy; Leif Olsen, 2016.
+</p>
+
+
+<script>
+  (function() {
+    'use strict';
+
+    window.addEventListener('load', function() {
+
+      document.querySelector('#carousel-btn-first').addEventListener('click', function (e) {
+        var ev = new CustomEvent('command', {detail: {action: 'first'}});
+        document.querySelector('#mdlext-carousel-demo2').dispatchEvent(ev);
+      });
+
+      document.querySelector('#carousel-btn-scroll-prev').addEventListener('click', function (e) {
+        var ev = new CustomEvent('command', {detail: {action: 'scroll-prev'}});
+        document.querySelector('#mdlext-carousel-demo2').dispatchEvent(ev);
+      });
+
+      document.querySelector('#carousel-btn-prev').addEventListener('click', function (e) {
+        var ev = new CustomEvent('command', {detail: {action: 'prev'}});
+        document.querySelector('#mdlext-carousel-demo2').dispatchEvent(ev);
+      });
+
+      document.querySelector('#carousel-btn-next').addEventListener('click', function (e) {
+        var ev = new CustomEvent('command', {detail: {action: 'next'}});
+        document.querySelector('#mdlext-carousel-demo2').dispatchEvent(ev);
+      });
+
+      document.querySelector('#carousel-btn-scroll-next').addEventListener('click', function (e) {
+        var ev = new CustomEvent('command', {detail: {action: 'scroll-next'}});
+        document.querySelector('#mdlext-carousel-demo2').dispatchEvent(ev);
+      });
+
+      document.querySelector('#carousel-btn-last').addEventListener('click', function (e) {
+        var ev = new CustomEvent('command', {detail: {action: 'last'}});
+        document.querySelector('#mdlext-carousel-demo2').dispatchEvent(ev);
+      });
+
+      document.querySelector('#carousel-btn-play-pause').addEventListener('click', function (e) {
+        // Toggle play icon
+        var i = this.querySelector('i');
+        var action = i.innerText === 'play_circle_outline' ? 'play' : 'pause';
+        i.textContent = action === 'play' ? 'pause_circle_outline' : 'play_circle_outline';
+
+        var ev = new CustomEvent('command', {detail: {action: action, interval: 3000}});
+        document.querySelector('#mdlext-carousel-demo2').dispatchEvent(ev);
+      });
+
+      document.querySelector('#mdlext-carousel-demo2').addEventListener('select', function (e) {
+
+        if ('pause' === e.detail.command) {
+          // Set play icon
+          var i = document.querySelector('#carousel-btn-play-pause i');
+          i.textContent = 'play_circle_outline';
+        }
+        else {
+          var oldImage = document.querySelector('#carousel-imgviewer img');
+          var selectImage = e.detail.source.querySelector('img');
+          var selectImageSrc = selectImage.src;
+          if (e.detail.source.querySelector('a')) {
+            selectImageSrc = e.detail.source.querySelector('a').href;
+          }
+
+          if (selectImageSrc !== oldImage.src) {
+            var newImage = oldImage.cloneNode(true);
+            newImage.src = selectImageSrc;
+            oldImage.parentNode.replaceChild(newImage, oldImage);
+
+            var title = document.querySelector('#carousel-viewer-title');
+            title.textContent = selectImage.title;
+          }
+        }
+      });
+
+      document.querySelector('#btn-add-image').addEventListener('click', function (e) {
+        var slide_fragment = '<li class="mdlext-carousel__slide"><figure><img src="./images/_D809914-2.jpg" alt="Humpback whale" title="Humpback whale"/></figure></li>';
+        var carousel = document.querySelector('#mdlext-carousel-demo2');
+        carousel.insertAdjacentHTML('beforeend', slide_fragment);
+        carousel.MaterialExtCarousel.upgradeSlides();
+      });
+
+    });
+
+  }());
+
+</script>
diff --git a/node_modules/mdl-ext/src/collapsible/_collapsible.scss b/node_modules/mdl-ext/src/collapsible/_collapsible.scss
new file mode 100644
index 0000000..745676d
--- /dev/null
+++ b/node_modules/mdl-ext/src/collapsible/_collapsible.scss
@@ -0,0 +1,36 @@
+@charset "UTF-8";
+
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+.mdlext-collapsible {
+  box-sizing: border-box;
+  cursor: pointer;
+}
+
+.mdlext-collapsible-group,
+.mdlext-collapsible-region {
+  box-sizing: border-box;
+
+  &[hidden] {
+    @include mdlext-visually-hidden;
+    pointer-events: none;
+  }
+}
diff --git a/node_modules/mdl-ext/src/collapsible/collapsible.js b/node_modules/mdl-ext/src/collapsible/collapsible.js
new file mode 100644
index 0000000..862fffb
--- /dev/null
+++ b/node_modules/mdl-ext/src/collapsible/collapsible.js
@@ -0,0 +1,437 @@
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+
+/**
+ * A collapsible is a component to mark expandable and collapsible regions.
+ * The component use the aria-expanded state to indicate whether regions of
+ * the content are collapsible, and to expose whether a region is currently
+ * expanded or collapsed.
+ * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions
+ */
+
+import {
+  IS_UPGRADED,
+  VK_SPACE,
+  VK_ENTER,
+} from '../utils/constants';
+
+import { randomString } from '../utils/string-utils';
+import { getParentElements, isFocusable } from '../utils/dom-utils';
+
+const JS_COLLAPSIBLE = 'mdlext-js-collapsible';
+const COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';
+const COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';
+const COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';
+
+/**
+ * The collapsible component
+ */
+
+class Collapsible {
+  element_ = null;
+  controlElement_ = null;
+
+  /**
+   * @constructor
+   * @param {HTMLElement} element The element that this component is connected to.
+   */
+  constructor(element) {
+    this.element_ = element;
+    this.init();
+  }
+
+  keyDownHandler = event => {
+    if (event.keyCode === VK_ENTER || event.keyCode === VK_SPACE) {
+      event.preventDefault();
+
+      // Trigger click
+      (event.target || this.controlElement).dispatchEvent(
+        new MouseEvent('click', {
+          bubbles: true,
+          cancelable: true,
+          view: window
+        })
+      );
+    }
+  };
+
+  clickHandler = event => {
+    if(!this.isDisabled) {
+      if(event.target !== this.controlElement) {
+        // Do not toggle if a focusable element inside the control element triggered the event
+        const p = getParentElements(event.target, this.controlElement);
+        p.push(event.target);
+        if(p.find( el => isFocusable(el))) {
+          return;
+        }
+      }
+      this.toggle();
+    }
+  };
+
+  get element() {
+    return this.element_;
+  }
+
+  get controlElement() {
+    return this.controlElement_;
+  }
+
+  get isDisabled() {
+    return (this.controlElement.hasAttribute('disabled') &&
+      this.controlElement.getAttribute('disabled').toLowerCase() !== 'false') ||
+      (this.controlElement.hasAttribute('aria-disabled') &&
+      this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false');
+  }
+
+  get isExpanded() {
+    return this.controlElement.hasAttribute('aria-expanded') &&
+      this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';
+  }
+
+  get regionIds() {
+    return this.controlElement.hasAttribute('aria-controls')
+      ? this.controlElement.getAttribute('aria-controls').split(' ')
+      : [];
+  }
+
+  get regionElements() {
+    return this.regionIds
+      .map(id => document.querySelector(`#${id}`))
+      .filter( el => el != null);
+  }
+
+  collapse() {
+    if(!this.isDisabled && this.isExpanded) {
+      if(this.dispatchToggleEvent('collapse')) {
+        this.controlElement.setAttribute('aria-expanded', 'false');
+        const regions = this.regionElements.slice(0);
+        for (let i = regions.length - 1; i >= 0; --i) {
+          regions[i].setAttribute('hidden', '');
+        }
+      }
+    }
+  }
+
+  expand() {
+    if(!this.isDisabled && !this.isExpanded) {
+      if(this.dispatchToggleEvent('expand')) {
+        this.controlElement.setAttribute('aria-expanded', 'true');
+        this.regionElements.forEach(region => region.removeAttribute('hidden'));
+      }
+    }
+  }
+
+  toggle() {
+    if (this.isExpanded) {
+      this.collapse();
+    }
+    else {
+      this.expand();
+    }
+  }
+
+  dispatchToggleEvent(action) {
+    return this.element.dispatchEvent(
+      new CustomEvent('toggle', {
+        bubbles: true,
+        cancelable: true,
+        detail: {
+          action: action
+        }
+      })
+    );
+  }
+
+  disableToggle() {
+    this.controlElement.setAttribute('aria-disabled', true);
+  }
+
+  enableToggle() {
+    this.controlElement.removeAttribute('aria-disabled');
+  }
+
+  addRegionId(regionId) {
+    const ids = this.regionIds;
+    if(!ids.find(id => regionId === id)) {
+      ids.push(regionId);
+      this.controlElement.setAttribute('aria-controls', ids.join(' '));
+    }
+  }
+
+  addRegionElement(region) {
+    if(!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||
+      region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {
+      region.classList.add(COLLAPSIBLE_GROUP_CLASS);
+    }
+
+    if(!region.hasAttribute('role')) {
+      const role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';
+      region.setAttribute('role', role);
+    }
+
+    if(!region.hasAttribute('id')) {
+      region.id = `${region.getAttribute('role')}-${randomString()}`;
+    }
+
+    if(this.isExpanded) {
+      region.removeAttribute('hidden');
+    }
+    else {
+      region.setAttribute('hidden', '');
+    }
+    this.addRegionId(region.id);
+  }
+
+  removeRegionElement(region) {
+    if(region && region.id) {
+      const ids = this.regionIds.filter(id => id === region.id);
+      this.controlElement.setAttribute('aria-controls', ids.join(' '));
+    }
+  }
+
+  removeListeners() {
+    this.controlElement.removeEventListener('keydown', this.keyDownHandler);
+    this.controlElement.removeEventListener('click', this.clickHandler);
+  }
+
+  init() {
+    const initControl = () => {
+      // Find the button element
+      this.controlElement_ = this.element.querySelector(`.${COLLAPSIBLE_CONTROL_CLASS}`) || this.element;
+
+      // Add "aria-expanded" attribute if not present
+      if(!this.controlElement.hasAttribute('aria-expanded')) {
+        this.controlElement.setAttribute('aria-expanded', 'false');
+      }
+
+      // Add role=button if control != <button>
+      if(this.controlElement.nodeName.toLowerCase() !== 'button') {
+        this.controlElement.setAttribute('role', 'button');
+      }
+
+      // Add tabindex
+      if(!isFocusable(this.controlElement) && !this.controlElement.hasAttribute('tabindex')) {
+        this.controlElement.setAttribute('tabindex', '0');
+      }
+    };
+
+    const initRegions = () => {
+      let regions = [];
+      if(!this.controlElement.hasAttribute('aria-controls')) {
+        // Add siblings as collapsible region(s)
+        let r = this.element.nextElementSibling;
+        while(r) {
+          if(r.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||
+            r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {
+            regions.push(r);
+          }
+          else if(r.classList.contains(JS_COLLAPSIBLE)) {
+            // A new collapsible component
+            break;
+          }
+          r = r.nextElementSibling;
+        }
+      }
+      else {
+        regions = this.regionElements;
+      }
+      regions.forEach(region => this.addRegionElement(region));
+    };
+
+    const addListeners = () => {
+      this.controlElement.addEventListener('keydown', this.keyDownHandler);
+      this.controlElement.addEventListener('click', this.clickHandler);
+    };
+
+    initControl();
+    initRegions();
+    this.removeListeners();
+    addListeners();
+  }
+
+  downgrade() {
+    this.removeListeners();
+  }
+
+}
+
+(function() {
+  'use strict';
+
+  /**
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  const MaterialExtCollapsible = function MaterialExtCollapsible(element) {
+    this.element_ = element;
+    this.collapsible = null;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtCollapsible'] = MaterialExtCollapsible;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtCollapsible.prototype.init = function() {
+    if (this.element_) {
+      this.collapsible = new Collapsible(this.element_);
+      this.element_.classList.add(IS_UPGRADED);
+
+      // Listen to 'mdl-componentdowngraded' event
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtCollapsible.prototype.mdlDowngrade_ = function() {
+    this.collapsible.downgrade();
+  };
+
+
+  // Public methods.
+
+  /**
+   * Get control element.
+   * @return {HTMLElement} element The element that controls the collapsible region.
+   * @public
+   */
+  MaterialExtCollapsible.prototype.getControlElement = function() {
+    return this.collapsible.controlElement;
+  };
+  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;
+
+  /**
+   * Get region elements controlled by this collapsible
+   * @returns {Array<HTMLElement>} the collapsible region elements
+   * @public
+   */
+  MaterialExtCollapsible.prototype.getRegionElements = function() {
+    return this.collapsible.regionElements;
+  };
+  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;
+
+  /**
+   * Add region elements.
+   * @param {Array<HTMLElement>} elements The element that will be upgraded.
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.addRegionElements = function(...elements) {
+    elements.forEach(element => this.collapsible.addRegionElement(element));
+  };
+  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;
+
+  /**
+   * Remove collapsible region(s) from component.
+   * Note: This operation does not delete the element from the DOM tree.
+   * @param {Array<HTMLElement>} elements The element that will be upgraded.
+   * @public
+   */
+  MaterialExtCollapsible.prototype.removeRegionElements = function(...elements) {
+    elements.forEach(element => this.collapsible.removeRegionElement(element));
+  };
+  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;
+
+  /**
+   * Expand collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.expand = function() {
+    this.collapsible.expand();
+  };
+  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;
+
+  /**
+   * Collapse collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.collapse = function() {
+    this.collapsible.collapse();
+  };
+  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;
+
+  /**
+   * Toggle collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.toggle = function() {
+    this.collapsible.toggle();
+  };
+  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;
+
+  /**
+   * Check whether component has aria-expanded state true
+   * @return {Boolean} true if aria-expanded="true", otherwise false
+   */
+  MaterialExtCollapsible.prototype.isExpanded = function() {
+    return this.collapsible.isExpanded;
+  };
+  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;
+
+  /**
+   * Check whether component has aria-disabled state set to true
+   * @return {Boolean} true if aria-disabled="true", otherwise false
+   */
+  MaterialExtCollapsible.prototype.isDisabled = function() {
+    return this.collapsible.isDisabled;
+  };
+  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;
+
+  /**
+   * Disables toggling of collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.disableToggle = function() {
+    this.collapsible.disableToggle();
+  };
+  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;
+
+  /**
+   * Enables toggling of collapsible region(s)
+   * @return {void}
+   * @public
+   */
+  MaterialExtCollapsible.prototype.enableToggle = function() {
+    this.collapsible.enableToggle();
+  };
+  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtCollapsible,
+    classAsString: 'MaterialExtCollapsible',
+    cssClass: JS_COLLAPSIBLE,
+    widget: true
+  });
+
+})();
diff --git a/node_modules/mdl-ext/src/collapsible/readme.md b/node_modules/mdl-ext/src/collapsible/readme.md
new file mode 100644
index 0000000..553e48a
--- /dev/null
+++ b/node_modules/mdl-ext/src/collapsible/readme.md
@@ -0,0 +1,467 @@
+# Collapsible
+
+**Collapsed**
+
+![Collapsible collapsed](../../etc/collapsible-collapsed.jpg)
+
+**Expanded**
+
+![Collapsible expanded](../../etc/collapsible-expanded.jpg)
+
+A collapsible is a component to mark expandable and collapsible regions. It has 
+states, roles, attributes and behaviour in accordance with guidelines given in 
+[Using the WAI-ARIA aria-expanded state to mark expandable and collapsible regions](https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions),
+[ARIA Authoring Practices, Button](https://www.w3.org/TR/wai-aria-practices-1.1/#button), 
+and [Building Accessible Buttons with ARIA: A11y](http://www.deque.com/blog/accessible-aria-buttons/)
+
+## Collapse All the Things
+The collapsible acts as a "pluggable" component. It uses a `<button>` element or 
+an element with `role="button"` to control one or more collapsible regions. You 
+can make virtually any HTML element collapsible by adding two classes, 
+`mdlext-js-collapsible` to the element that should control the collapsible 
+region(s), and one of the classes `mdlext-collapsible-group` or 
+`mdlext-collapsible-region` to the element that should collapse/expand. The 
+collapsible component uses the 
+[aria-controls](https://www.w3.org/TR/wai-aria/states_and_properties#aria-controls) 
+property to hold a list of one or more collapsible regions. The 
+[aria-expanded](https://www.w3.org/TR/wai-aria/states_and_properties#aria-expanded) 
+state indicates whether region(s) controlled by the component is currently 
+expanded or collapsed.
+
+## To include a MDLEXT collapsible component:
+&nbsp;1. Code a `<button>` element; this is the clickable toggle that will show and hide the collapsible 
+region(s). Inside the button, code a `<span>` element to hold the button caption text.
+
+```html
+<button>
+  <span>Click to toggle</span>
+</button>
+```
+
+&nbsp;2. Add the `mdlext-js-collapsible` class to define the element as a collapsible component.
+
+```html
+<button class="mdlext-js-collapsible">
+  <span>Click to toggle</span>
+</button>
+```
+
+&nbsp;3. Optionally add the `mdlext-collapsible` class, which will add a pointer 
+cursor to the collapsible component.
+
+```html
+<button class="mdlext-js-collapsible mdlext-collapsible">
+  <span>Click to toggle</span>
+</button>
+```
+
+&nbsp;4. Optionally add a state icon. Code a `<i>` element with class 
+`mdlext-aria-expanded-more-less`. The state icon should indicate whether the 
+collapsible region is expanded or not.
+
+```html
+<button class="mdlext-js-collapsible">
+  <span>Click to toggle</span>
+  <i class="mdlext-aria-expanded-more-less"></i>
+</button>
+```
+
+&nbsp;5. Code a `<div>` element with class `mdlext-collapsible-group` or
+`mdlext-collapsible-region` to define the element as a collapsible region. 
+
+```html
+<div class="mdlext-collapsible-group">
+</div>
+```
+
+&nbsp;6. Add content inside the collapsible container. 
+
+```html
+<div class="mdlext-collapsible-group">
+  <p>Content goes here ...</p>
+</div>
+```
+
+After page load, the component will add all required Aria states, roles and 
+attributes not already present in markup. 
+
+```html
+<button class="mdlext-js-collapsible is-upgraded" 
+  data-upgraded=",MaterialExtCollapsible" 
+  aria-expanded="false" aria-controls="group-4ek31z6jeeag">
+  <span>Click to toggle</span>
+  <i class="mdlext-aria-expanded-more-less"></i>
+</button>
+<div class="mdlext-collapsible-group" id="group-4ek31z6jeeag" role="group" hidden>
+  <p>Content goes here ...</p>
+</div>
+```
+
+Instead of letting the collapsible component add all the WAI-ARIA stuff, 
+add it yourself in markup. The component will not override attributes already 
+present in markup.
+
+```html
+<div class="mdlext-js-collapsible" role="button" 
+  aria-expanded="false" aria-controls="group-1">
+  <span>Click to toggle</span>
+  <i class="mdlext-aria-expanded-more-less"></i>
+</div>
+<div class="mdlext-collapsible-group" id="group-1" role="group" hidden>
+  <p>Content Region #1 goes here ...</p>
+</div>
+```
+
+### role="group" vs role="region"
+The group role is used to identify a set of user interface objects which, in 
+contrast with a region, are not intended to be included in a table of contents 
+or a page summary (such as the structures that are dynamically created by a 
+script or assistive technologies); a group should not be considered a major 
+perceivable section on a page. When the role is added to an element, the browser 
+will send out an accessible group event to assistive technology products which 
+can then notify the user about it.
+
+To define an element as collapsible add one of the classes  
+`mdlext-collapsible-group` or `mdlext-collapsible-region`. The component will
+set the role attribute to `group` or `region` accordingly.
+
+[Group](https://www.w3.org/TR/wai-aria/roles#group): A set of user interface
+objects which are not intended to be included in a page summary or table of 
+contents by assistive technologies.
+
+[Region](https://www.w3.org/TR/wai-aria/roles#region): A large perceivable 
+section of a web page or document, that is important enough to be included in a 
+page summary or table of contents, for example, an area of the page containing 
+live sporting event statistics. 
+
+### Use a `<div>` element as a collapsible component.
+It's easier to style a div compared to a button. For example, you can not style 
+a button as a flexible box! 
+ 
+```html
+<div class="mdlext-js-collapsible mdlext-collapsible" aria-expanded="true">
+  <span>Click to toggle</span>
+  <i class="mdlext-aria-expanded-more-less"></i>
+</div>
+<div class="mdlext-collapsible-region">
+  <p>Content goes here ...</p>
+</div>
+```
+
+For further control with styling, it is possible to wrap the button element 
+inside the collapsible component. The wrapped element becomes the clickable/focusable
+area and **must** have class `mdlext-collapsible` applied.
+
+```html
+<header class="mdlext-js-collapsible" aria-expanded="true">
+  <div class="mdlext-collapsible"> 
+    <span>Click to toggle</span>
+    <i class="mdlext-aria-expanded-more-less"></i>
+  </div>  
+</header>
+<div class="mdlext-collapsible-region">
+  <p>Content goes here ...</p>
+</div>
+```
+
+### one-to-many
+You can create a one-to-many relationship by supplying a space separated list of 
+ids, representing different, simultaneously controlled elements.
+
+```html
+<div class="medext-js-collapsible">
+  <div class="mdlext-collapsible" role="button" 
+    aria-controls="collapsible-1 collapsible-3">A topic</div>
+</div>
+
+<div id="collapsible-1" class="mdlext-collapsible-group">
+  <p>Topic 1 is all about being Topic 1 and may or 
+  may not have anything to do with other topics.</p>
+</div>
+
+<div id="collapsible-2" class="mdlext-collapsible-group">
+  <p>Topic 2 is all about being Topic 2 and may or 
+  may not have anything to do with other topics.</p>
+</div>
+
+<div id="collapsible-3" class="mdlext-collapsible-group">
+  <p>Topic 3 is all about being Topic 3 and may or 
+  may not have anything to do with other topics.</p>
+</div>
+```
+
+If the `aria-controls` attribute is provided in markup, the component will not 
+attempt to determine corresponding collapsible regions. In the markup above,
+only `collapsible-1` and `collapsible-3` will be controlled by the component.
+
+Remove the `aria-controls` attribute if you want the component to determine the 
+collapsible regions to be included.
+
+### Examples
+
+**Collapsibles, with many collapsible regions.**
+
+```html
+<!-- first collapsible -->
+<button class="mdlext-js-collapsible mdlext-collapsible">
+  <span>Click to toggle collapsible #1</span>
+  <i class="mdlext-aria-expanded-more-less"></i>
+</button>
+<div class="mdlext-collapsible-region">
+  <p>#1.1</p>
+</div>
+<div class="mdlext-collapsible-region">
+  <p>#1.2</p>
+</div>
+
+<!-- second collapsible -->
+<header class="mdlext-js-collapsible mdlext-collapsible">
+  <span>Click to toggle collapsible #2</span>
+  <i class="mdlext-aria-expanded-more-less"></i>
+</header>
+<div class="mdlext-collapsible-region">
+  <p>#2.1</p>
+</div>
+
+<p>This paragraph will not collapse</p>
+
+<div class="mdlext-collapsible-region">
+  <p>#2.2</p>
+</div>
+<div class="mdlext-collapsible-region">
+  <p>#2.3</p>
+</div>
+```
+
+**Nested collapsibles.**
+
+```html
+<style>
+  .mdlext-collapsible-region .mdlext-js-collapsible,
+  .mdlext-collapsible-region .mdlext-collapsible-region {
+    margin-left: 16px;
+  }
+</style>
+
+<button class="mdlext-js-collapsible mdl-button mdl-button--colored mdl-button--raised">
+  Click to toggle
+</button>
+<div class="mdlext-collapsible-region">
+  <p>A collapsible region</p>
+
+  <button class="mdlext-js-collapsible mdl-button mdl-button--accent mdl-button--raised">
+    Click to toggle nested #1
+  </button>
+  <div class="mdlext-collapsible-region">
+    <p>A nested collapsible region</p>
+
+    <button class="mdlext-js-collapsible mdl-button mdl-button--raised 
+      mdl-button--colored mdl-color--deep-orange-100">
+      Click to toggle nested #2
+    </button>
+    <div class="mdlext-collapsible-region">
+      <p>Last region</p>
+    </div>
+  </div>
+</div>
+```
+
+**Collapsible MDL Card.**
+
+```html
+<!-- The card need some styling to act as a collapsible -->
+<style>
+  .mdl-card.welcome-card {
+    min-height: 0;
+    max-width: 640px;
+    width: auto;
+  }
+  .mdl-card.welcome-card > .mdl-card__title {
+    -webkit-box-pack: start;
+    -webkit-justify-content: flex-start;
+    -ms-flex-pack: start;
+    justify-content: flex-start;
+    height: 176px;
+    min-height: 64px;
+    padding-top: 0;
+    padding-bottom: 0;
+    color: #fff;
+    background: url('./assets/welcome_card.jpg') top / cover;
+  }
+  .mdl-card.welcome-card .mdl-card__title:focus {
+    /* Must focus ring must be inside title since mdl-card has overflow:hidden */
+    outline-offset: -4px;
+  }
+  .mdl-card.welcome-card .mdl-card__title > * {
+    -webkit-align-self: center;
+    -ms-flex-item-align: center;
+    align-self: center;
+  }
+  .mdl-card.welcome-card .mdl-card__supporting-text {
+    width: auto;
+  }
+  .mdl-card.welcome-card .mdl-card__actions {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+  }
+  .welcome-card > .mdl-card__title .mdl-card__title-text {
+    -webkit-align-self: flex-end;
+    -ms-flex-item-align: end;
+    align-self: flex-end;
+    padding-bottom: 16px;
+  }
+  .welcome-card > .mdl-card__title[aria-expanded='false'] {
+    height: 64px;
+  }
+  .welcome-card > .mdl-card__title[aria-expanded='false'] .mdl-card__title-text {
+    -webkit-align-self: center;
+    -ms-flex-item-align: center;
+    align-self: center;
+    padding-bottom: 0;
+  }
+  .welcome-card > .mdl-card__menu {
+    color: #ffffff;
+  }
+</style>
+
+<div class="welcome-card mdl-card mdl-shadow--2dp">
+  <header class="mdl-card__title mdlext-js-collapsible mdlext-collapsible">
+    <h2 class="mdl-card__title-text">A Collapsible Card</h2>
+  </header>
+  <section class="mdl-card__supporting-text mdlext-collapsible-region">
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+    Mauris sagittis pellentesque lacus eleifend lacinia...
+  </section>
+  <footer class="mdl-card__actions mdl-card--border mdlext-collapsible-region">
+    <button class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+      Get Started
+    </button>
+  </footer>
+  <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>
+```
+
+**Create your own state icon with SASS.**
+
+The [_mixins.scss](../_mixins.scss) has a mixin which can be used to create custom state icons.  
+
+```sass
+@charset "UTF-8";
+.my-aria-expanded-state {
+  @include mdlext-aria-expanded-toggle($icon: 'arrow_downward', $icon-expanded: 'arrow_upward');
+}
+```
+
+### More examples
+* The [snippets/collapsible.html](./snippets/collapsible.html) and the [tests](../../test/collapsible/collapsible.spec.js) provides more detailed examples.
+* Try out the [live demo](http://leifoolsen.github.io/mdl-ext/demo/collapsible.html)
+
+## Characteristics
+
+### Keyboard interaction 
+* <kbd>Space</kbd> or <kbd>Enter</kbd>: toggle the corresponding collapsible region(s).
+
+### Mouse interaction 
+* <kbd>Click</kbd>: toggle the corresponding collapsible region(s).
+    
+## Events
+The collapsible component emits a custom `toggle` event when the component is clicked, 
+<kbd>Enter</kbd> key or <kbd>Space</kbd> key is pressed or one of the methods `expand`. 
+`collapse` or `toggle` is called. The event is emitted before the actual toggling 
+occurs. Call `event.preventDefault()` to cancel toggling.
+
+The detail object parameter has the following structure:
+```javascript
+detail: {
+  action // 'expand' or collapse'  
+}
+```
+Set up an event listener to receive the toggle event.
+```javascript
+var someCondition = false;
+document.querySelector('#my-collapsible').addEventListener('toggle', function(e) {
+  console.log('Toggle action:', e.detail.action);
+  if(someCondition) {
+    // Stop toggling
+    e.preventDefault();
+  }
+  someCondition = !someCondition;
+});
+```
+
+## Public methods
+
+### getControlElement()
+Get the element that controls the collapsible region(s).
+
+### getRegionElements()
+Get region elements controlled by this collapsible.
+
+### addRegionElements(...elements)
+Add collapsible region(s).
+
+### removeRegionElements(...elements)
+Remove collapsible region(s).
+
+### expand()
+Expand corresponding collapsible region(s).
+
+### collapse()
+Collapse corresponding collapsible region(s).
+
+### toggle()
+Toggle corresponding collapsible region(s).
+```javascript
+const component = document.querySelector('#my-collapsible');
+component.MaterialExtCollapsible.toggle();
+```
+### isExpanded()
+Check whether component has aria-expanded state set to true.
+
+### isDisabled()
+Check whether component has aria-disabled state set to true.
+
+### enableToggle()
+Enables toggling of collapsible region(s).
+
+### disableToggle()
+Disables toggling of collapsible region(s).
+
+## Configuration options
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the accordion. 
+
+### Available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|--------------|--------|---------|
+|`mdlext-js-collapsible`| Assigns basic MDL behavior to collapsible. | Required. |
+|`mdlext-collapsible`| Defines container as an MDL component. | Optional. |
+|`mdlext-collapsible-group`| Defines container as a collapsible group. | Required. Either `mdlext-collapsible-group` or `mdlext-collapsible-region` must be present to make a container collapsible. |
+|`mdlext-collapsible-region`| Defines container as a collapsible region. | Required. |
+
+### Available WAI-ARIA roles, states, and properties
+
+| Attribute | Description | Remarks |
+|-----------|-------------|---------|
+|`role="button`| The element that toggles a region has role [button](http://www.w3.org/TR/wai-aria-1.1/#button). | Added by component if not present |
+|`tabindex`| Indicates whether an element is focusable. | A value less than 0, e.g. -1, indicates that the element is not focusable. Tabindex="0" added by component if not present |
+|`aria-controls`| Identfies the content on the page, using IDREFs, that this collapsible controls. | Added by component if not present. |
+|`aria-expanded`| The element with role `button` has [aria-expanded](https://www.w3.org/TR/wai-aria-1.1/#aria-expanded) set to `true` if the corresponding region(s) is open, oterwise false. | Defaults to `aria-expanded="false"`. Set `aria-expanded="true"` if you want a region to open during page load. |
+|`aria-disabled`| When a collapsible should not be toggable, set `aria-disabled` to `true`. | Optional. If this attribute is present, the collapsible region(s) will not toggle. |
+|`disabled`| Indicates that a collapsible component and it's corresponding region(s) is disabled, otherwise not present. | Optional. If this attribute is present, the collapsible regions will not toggle. |
+|`role="group`| Identifies an element as a collapsible [group](https://www.w3.org/TR/wai-aria/roles#group). | Required on container with class `mdlext-collapsible-group`. Added by component if not present. |
+|`role="region`| Identifies an element as a collapsible [region](https://www.w3.org/TR/wai-aria/roles#region). | Required on container with class `mdlext-collapsible-region`. Added by component if not present. |
+|`hidden`| Visually hides a collapsible region. | Added by component if component has `aria-expanded="false"`. |
+|`id`| The collapsible region must have an id. | A random id is added if not present. The IDREF is used by the `aria-controls` attribute to identify the collapsible region. |
+
+## Other collapsible examples
+* [ARIA Examples, Progressive collapsibles](http://heydonworks.com/practical_aria_examples/#progressive-collapsibles)
+* [Open Ajax, Example 20 - Hide/Show: Region follows button](http://oaa-accessibility.org/example/20/)
+* [Open Ajax, Example 21 - Hide/Show: Region does not follow button](http://oaa-accessibility.org/example/21/)
+* [Open Ajax, Example 22 - Hide/Show: Region is exclusive](http://oaa-accessibility.org/example/22/)
diff --git a/node_modules/mdl-ext/src/collapsible/snippets/collapsible.html b/node_modules/mdl-ext/src/collapsible/snippets/collapsible.html
new file mode 100644
index 0000000..f959654
--- /dev/null
+++ b/node_modules/mdl-ext/src/collapsible/snippets/collapsible.html
@@ -0,0 +1,237 @@
+<p>A collapsible is a component to mark expandable and collapsible regions.
+  It has states, roles, attributes and behavior in accordance with guidelines given in
+  <a href="https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions">
+    Using the WAI-ARIA aria-expanded state to mark expandable and collapsible regions
+  </a>.
+</p>
+<article>
+  <button class="mdlext-js-collapsible" style="padding: 8px;">
+    <span>Click to toggle (button)</span>
+    <i class="mdlext-aria-expanded-more-less"></i>
+  </button>
+  <div class="mdlext-collapsible-group"><p>A collapsible region #1.1</p></div>
+  <div class="mdlext-collapsible-group"><p>A collapsible region #1.2</p></div>
+  <div class="mdlext-collapsible-group"><p>A collapsible region #1.3</p></div>
+</article>
+
+<article style="margin-top: 16px;">
+  <div class="mdlext-js-collapsible mdlext-collapsible" style="padding: 8px;">
+    <span>Click to toggle (div)</span>
+    <i class="mdlext-aria-expanded-more-less"></i>
+  </div>
+  <div class="mdlext-collapsible-region"><p>A collapsible region #2.1</p></div>
+  <div class="mdlext-collapsible-region"><p>A collapsible region #2.2</p></div>
+  <div class="mdlext-collapsible-region"><p>A collapsible region #2.3</p></div>
+</article>
+
+
+<style>
+  .mdl-card.demo-card,
+  .mdl-card.welcome-card {
+    min-height: 0;
+    width: auto;
+    margin-top: 16px;
+    margin-bottom: 16px;
+    max-width: 640px;
+  }
+  .mdl-card.demo-card .mdl-card__media,
+  .mdl-card.welcome-card .mdl-card__media {
+    margin: 0;
+    text-align: center;
+  }
+  .mdl-card.demo-card .mdl-card__media > img,
+  .mdl-card.welcome-card .mdl-card__media > img {
+    max-width: 100%;
+    height: auto;
+  }
+  .mdl-card.demo-card .mdl-card__title,
+  .mdl-card.welcome-card .mdl-card__title {
+    /* Fix bug in _card.scss */
+    -webkit-box-pack: start;
+    -webkit-justify-content: flex-start;
+    -ms-flex-pack: start;
+    justify-content: flex-start;
+    /* end fix */
+
+    padding-top: 0;
+    padding-bottom: 0;
+    min-height: 64px;
+  }
+  .mdl-card.demo-card .mdl-card__title:focus,
+  .mdl-card.welcome-card .mdl-card__title:focus {
+    /* Must focus ring must be inside title since mdl-card has overflow:hidden */
+    outline-offset: -4px;
+  }
+  .mdl-card.demo-card .mdl-card__title > *,
+  .mdl-card.welcome-card .mdl-card__title > * {
+    -webkit-align-self: center;
+    -ms-flex-item-align: center;
+    align-self: center;
+  }
+  .mdl-card.demo-card .mdl-card__supporting-text,
+  .mdl-card.welcome-card .mdl-card__supporting-text {
+    width: auto;
+  }
+  .mdl-card.demo-card .mdl-card__actions,
+  .mdl-card.welcome-card .mdl-card__actions {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+  }
+  .welcome-card > .mdl-card__title {
+    color: #fff;
+    height: 176px;
+    background: url('./assets/welcome_card.jpg') top / cover;
+  }
+  .welcome-card > .mdl-card__title[aria-expanded='false'] {
+    height: 64px;
+  }
+  .welcome-card > .mdl-card__title .mdl-card__title-text {
+    -webkit-align-self: flex-end;
+    -ms-flex-item-align: end;
+    align-self: flex-end;
+    padding-bottom: 16px;
+  }
+  .welcome-card > .mdl-card__title[aria-expanded='false'] .mdl-card__title-text {
+    -webkit-align-self: center;
+    -ms-flex-item-align: center;
+    align-self: center;
+    padding-bottom: 0;
+  }
+  .welcome-card > .mdl-card__menu {
+    color: #fff;
+  }
+
+  table.info {
+    width: 100%
+  }
+  table.info th {
+    padding-right: 40px;
+    vertical-align: middle;
+    text-align: left;
+    width: 120px;
+  }
+</style>
+
+<div class="welcome-card mdl-card mdl-shadow--2dp">
+  <header class="mdl-card__title mdlext-js-collapsible mdlext-collapsible" aria-expanded="true">
+    <h2 class="mdl-card__title-text">A Collapsible Card</h2>
+  </header>
+  <section class="mdl-card__supporting-text mdlext-collapsible-group">
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+    Mauris sagittis pellentesque lacus eleifend lacinia...
+  </section>
+  <footer class="mdl-card__actions mdl-card--border mdlext-collapsible-group">
+    <button class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+      Get Started
+    </button>
+  </footer>
+  <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>
+
+
+<style>
+  .mdlext-collapsible-group .mdlext-js-collapsible,
+  .mdlext-collapsible-group .mdlext-collapsible-group {
+    margin-left: 16px;
+  }
+</style>
+
+<button class="mdlext-js-collapsible mdl-button mdl-button--colored mdl-button--raised">Click to toggle</button>
+<div class="mdlext-collapsible-group">
+  <p>A collapsible region</p>
+
+  <button class="mdlext-js-collapsible mdl-button mdl-button--accent mdl-button--raised">Click to toggle nested #1</button>
+  <div class="mdlext-collapsible-group">
+    <p>A nested collapsible region</p>
+
+    <button class="mdlext-js-collapsible mdl-button mdl-button--colored mdl-color--deep-orange-100 mdl-button--raised">Click to toggle nested #2</button>
+    <div class="mdlext-collapsible-group">
+      <p>Last region</p>
+    </div>
+  </div>
+</div>
+
+
+<div id="another-card" class="mdl-card demo-card mdl-shadow--2dp mdlext-dark-color-theme">
+  <header class="mdl-card__title mdl-color--primary mdl-color-text--primary-contrast mdlext-js-collapsible mdlext-collapsible">
+    <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+      <i class="material-icons">view_headline</i>
+    </button>
+    <h2 class="mdl-card__title-text">Another collapsible card</h2>
+    <div class="mdl-layout-spacer"></div>
+    <i class="material-icons md-36 mdlext-aria-expanded-more-less"></i>
+  </header>
+  <figure class="mdl-card__media mdlext-collapsible-region">
+    <img src="./images/_DSC7535-2.jpg" alt="">
+  </figure>
+  <section style="margin-top:16px" class="mdl-card__supporting-text mdlext-collapsible-region">
+    <table class="info">
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-dark mdl-color-text--primary-contrast">primary dark</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary mdl-color-text--primary-contrast">primary</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent mdl-color-text--accent-contrast">accent</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary-dark">primary dark, inverted</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary">primary, inverted</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent-contrast mdl-color-text--accent">accent, inverted</td>
+      </tr>
+    </table>
+  </section>
+
+  <div class="mdl-card__supporting-text mdlext-collapsible-region">
+    Card Supporting Text
+  </div>
+
+  <footer class="mdl-card__actions mdl-card--border">
+    <button id="read-more" class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+      Read more
+    </button>
+    <div class="mdl-layout-spacer"></div>
+    <button class="mdl-button mdl-button--icon"><i class="material-icons">radio</i></button>
+    <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+    <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+  </footer>
+</div>
+
+
+
+<script>
+  (function() {
+    'use strict';
+    window.addEventListener('load', function() {
+
+      document.querySelector('#read-more').addEventListener('click', function (e) {
+        var collapsible = document.querySelector('#another-card .mdlext-js-collapsible');
+        collapsible.MaterialExtCollapsible.expand();
+      });
+
+      document.querySelector('#another-card').addEventListener('toggle', function (e) {
+        console.log('Toggle action:', e.detail.action);
+      });
+
+    });
+
+  }());
+
+</script>
diff --git a/node_modules/mdl-ext/src/color-themes/_color-themes.scss b/node_modules/mdl-ext/src/color-themes/_color-themes.scss
new file mode 100644
index 0000000..6944941
--- /dev/null
+++ b/node_modules/mdl-ext/src/color-themes/_color-themes.scss
@@ -0,0 +1,57 @@
+/* -------------------------------------------------------------
+   Palette samples. Not part of build
+----------------------------------------------------------------
+
+$mdlext-light-color-primary:          #9E9E9E !default;
+$mdlext-light-color-primary-dark:     #616161 !default;
+$mdlext-light-color-primary-light:    #9E9E9E !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #212121 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #E040FB !default;
+$mdlext-light-color-accent-light:     #E040FB !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FAFAFA !default;
+
+$mdlext-light-color-primary:          #F5F5F5 !default;
+$mdlext-light-color-primary-dark:     #E0E0E0 !default;
+$mdlext-light-color-primary-light:    #8BC34A !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #000000 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FFC107 !default;
+$mdlext-light-color-accent-light:     #FFC107 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #673AB7 !default;
+$mdlext-light-color-primary-dark:     #512DA8 !default;
+$mdlext-light-color-primary-light:    #673AB7 !default;   // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #D1C4E9 !default;   // text color on primary/primary dark background
+$mdlext-light-color-accent:           #4CAF50 !default;
+$mdlext-light-color-accent-light:     #4CAF50 !default;   // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #FF5252 !default;
+$mdlext-light-color-accent-light:     #FF5252 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-light-color-primary:          #4CAF50 !default;
+$mdlext-light-color-primary-dark:     #388E3C !default;
+$mdlext-light-color-primary-light:    #4CAF50 !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #C8E6C9 !default;  // text color on primary/primary dark background
+$mdlext-light-color-accent:           #03A9F4 !default;
+$mdlext-light-color-accent-light:     #03A9F4 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF !default;
+
+
+$mdlext-dark-color-primary:           #212121 !default;
+$mdlext-dark-color-primary-dark:      #000000 !default;
+$mdlext-dark-color-primary-light:     #607D8B !default;  // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-dark-color-primary-contrast:  #FFFFFF !default;  // text color on primary/primary dark background
+$mdlext-dark-color-accent:            #FF5722 !default;
+$mdlext-dark-color-accent-light:      #FF5722 !default;  // Fallback color. Set to color-accent if fallback is not needed
+$mdlext-dark-color-accent-contrast:   #FFFFFF !default;
+
+*/
diff --git a/node_modules/mdl-ext/src/color-themes/_dark-color-theme.scss b/node_modules/mdl-ext/src/color-themes/_dark-color-theme.scss
new file mode 100644
index 0000000..954e19c
--- /dev/null
+++ b/node_modules/mdl-ext/src/color-themes/_dark-color-theme.scss
@@ -0,0 +1,1132 @@
+@import "color-themes";
+
+.mdlext-dark-color-theme {
+  background-color: $mdlext-dark-content-background-color;
+  color: $mdlext-dark-text-color-primary;
+  a {
+    outline-color: inherit;
+  }
+}
+
+// mdl/src/palette/_palette.scss
+.mdlext-dark-color-theme {
+
+  .mdl-color--primary {
+    background-color: $mdlext-dark-color-primary !important;
+  }
+
+  .mdl-color--primary-contrast {
+    background-color: $mdlext-dark-color-primary-contrast !important;
+  }
+
+  .mdl-color--primary-dark {
+    background-color: $mdlext-dark-color-primary-dark !important;
+  }
+
+  .mdl-color--accent {
+    background-color: $mdlext-dark-color-accent !important;
+  }
+
+  .mdl-color--accent-contrast {
+    background-color: $mdlext-dark-color-accent-contrast !important;
+  }
+
+  .mdl-color-text--primary {
+    color: $mdlext-dark-color-primary !important;
+  }
+
+  .mdl-color-text--primary-contrast {
+    color: $mdlext-dark-color-primary-contrast !important;
+  }
+
+  .mdl-color-text--primary-dark {
+    color: $mdlext-dark-color-primary-dark !important;
+  }
+
+  .mdl-color-text--accent {
+    color: $mdlext-dark-color-accent !important;
+  }
+
+  .mdl-color-text--accent-contrast {
+    color: $mdlext-dark-color-accent-contrast !important;
+  }
+
+}
+
+// mdl/src/typography/_typography.scss
+.mdlext-dark-color-theme {
+  a {
+    color: $mdlext-dark-text-link-color;
+  }
+}
+
+
+// mdl/src/badge/_badge.scss
+// ---------------------------
+.mdlext-dark-color-theme {
+  .mdl-badge {
+
+    &[data-badge]::after {
+      background: $mdlext-dark-badge-background;
+      color: $mdlext-dark-badge-color;
+    }
+
+    &.mdl-badge--no-background {
+      &[data-badge]::after {
+        color: $mdlext-dark-badge-color-inverse;
+        background: $mdlext-dark-badge-background-inverse;
+      }
+    }
+  }
+}
+
+
+// mdl/src/button/_button.scss
+// ---------------------------
+.mdlext-dark-color-theme {
+
+  .mdl-button {
+    background: transparent;
+    color: $mdlext-dark-button-secondary-color;
+
+    &:hover {
+      background-color: $mdlext-dark-button-hover-color;
+    }
+
+    &:focus:not(:active) {
+      background-color: $mdlext-dark-button-focus-color;
+    }
+
+    &:active {
+      background-color: $mdlext-dark-button-active-color;
+    }
+
+    &.mdl-button--colored {
+      color: $mdlext-dark-button-primary-color-alt;
+
+      &:focus:not(:active) {
+        background-color: $mdlext-dark-button-focus-color-alt;
+      }
+    }
+  }
+
+  // Raised buttons
+  .mdl-button--raised {
+    background: $mdlext-dark-button-primary-color;
+
+    &:active {
+      background-color: $mdlext-dark-button-active-color;
+    }
+
+    &:focus:not(:active) {
+      background-color: $mdlext-dark-button-active-color;
+    }
+
+    &.mdl-button--colored {
+      background: $mdlext-dark-button-primary-color-alt;
+      color: $mdlext-dark-button-secondary-color-alt;
+
+      &:hover {
+        background-color: $mdlext-dark-button-hover-color-alt;
+      }
+
+      &:active {
+        background-color: $mdlext-dark-button-active-color-alt;
+      }
+
+      &:focus:not(:active) {
+        background-color: $mdlext-dark-button-active-color-alt;
+      }
+
+      & .mdl-ripple {
+        background: $mdlext-dark-button-ripple-color-alt;
+      }
+    }
+  }
+
+
+  // FABs
+  .mdl-button--fab {
+    background: $mdlext-dark-button-primary-color;
+
+    &:active {
+      background-color: $mdlext-dark-button-active-color;
+    }
+
+    &:focus:not(:active) {
+      background-color: $mdlext-dark-button-active-color;
+    }
+
+    &.mdl-button--colored {
+      background: $mdlext-dark-button-fab-color-alt;
+      color: $mdlext-dark-button-fab-text-color-alt;
+
+      &:hover {
+        background-color: $mdlext-dark-button-fab-hover-color-alt;
+      }
+
+      &:focus:not(:active) {
+        background-color: $mdlext-dark-button-fab-active-color-alt;
+      }
+
+      &:active {
+        background-color: $mdlext-dark-button-fab-active-color-alt;
+      }
+
+      & .mdl-ripple {
+        background: $mdlext-dark-button-fab-ripple-color-alt;
+      }
+    }
+  }
+
+
+  // Icon buttons
+  .mdl-button--icon {
+    color: inherit;
+  }
+
+  // Colorized buttons
+
+  .mdl-button--primary.mdl-button--primary {
+    color: $mdlext-dark-button-primary-color-alt;
+
+    & .mdl-ripple {
+      background: $mdlext-dark-button-secondary-color-alt;
+    }
+    &.mdl-button--raised,
+    &.mdl-button--fab {
+      color: $mdlext-dark-button-secondary-color-alt;
+      background-color: $mdlext-dark-button-primary-color-alt;
+    }
+  }
+
+  .mdl-button--accent.mdl-button--accent {
+    color: $mdlext-dark-button-fab-color-alt;
+
+    & .mdl-ripple {
+      background: $mdlext-dark-button-fab-text-color-alt;
+    }
+    &.mdl-button--raised,
+    &.mdl-button--fab {
+      color: $mdlext-dark-button-fab-text-color-alt;
+      background-color: $mdlext-dark-button-fab-color-alt;
+    }
+  }
+
+  // Disabled buttons
+
+  .mdl-button {
+    // Bump up specificity by using [disabled] twice.
+    &[disabled][disabled],
+    &.mdl-button--disabled.mdl-button--disabled {
+      color: $mdlext-dark-button-secondary-color-disabled;
+      background-color: transparent;
+    }
+
+    &--fab {
+      // Bump up specificity by using [disabled] twice.
+      &[disabled][disabled],
+      &.mdl-button--disabled.mdl-button--disabled {
+        background-color: $mdlext-dark-button-primary-color-disabled;
+        color: $mdlext-dark-button-secondary-color-disabled;
+      }
+    }
+
+    &--raised {
+      // Bump up specificity by using [disabled] twice.
+      &[disabled][disabled],
+      &.mdl-button--disabled.mdl-button--disabled {
+        background-color: $mdlext-dark-button-primary-color-disabled;
+        color: $mdlext-dark-button-secondary-color-disabled;
+      }
+    }
+    &--colored {
+      // Bump up specificity by using [disabled] twice.
+      &[disabled][disabled],
+      &.mdl-button--disabled.mdl-button--disabled {
+        color: $mdlext-dark-button-secondary-color-disabled;
+      }
+    }
+  }
+}
+
+
+// mdl/src/slider/_slider.scss
+// ---------------------------
+.mdlext-dark-color-theme {
+
+  .mdl-slider {
+
+    &.is-upgraded {
+      background: transparent;
+      color: $mdlext-dark-range-color;
+
+      &::-webkit-slider-runnable-track {
+        background: transparent;
+      }
+
+      &::-moz-range-track {
+        background: transparent;
+      }
+
+      &::-ms-track {
+        background: none;
+        color: transparent;
+      }
+
+      /* stylelint-disable */
+      &::-ms-fill-lower {
+        background: linear-gradient(
+          to right,
+          transparent,
+          transparent 16px,
+          $mdlext-dark-range-color 16px,
+          $mdlext-dark-range-color 0
+        );
+      }
+
+      &::-ms-fill-upper {
+        background: linear-gradient(
+          to left,
+          transparent,
+          transparent 16px,
+          $mdlext-dark-range-bg-color 16px,
+          $mdlext-dark-range-bg-color 0);
+      }
+      /* stylelint-enable */
+
+      &::-webkit-slider-thumb {
+        background: $mdlext-dark-range-color;
+      }
+
+      &::-moz-range-thumb {
+        background: $mdlext-dark-range-color;
+      }
+
+      &:focus:not(:active)::-webkit-slider-thumb {
+        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;
+      }
+
+      &:focus:not(:active)::-moz-range-thumb {
+        box-shadow: 0 0 0 10px $mdlext-dark-range-faded-color;
+      }
+
+      &:active::-webkit-slider-thumb {
+        background: $mdlext-dark-range-color;
+      }
+
+      &:active::-moz-range-thumb {
+        background: $mdlext-dark-range-color;
+      }
+
+      &::-ms-thumb {
+        background: $mdlext-dark-range-color;
+      }
+
+      /* stylelint-disable */
+      &:focus:not(:active)::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          $mdlext-dark-range-color 0%,
+          $mdlext-dark-range-color 37.5%,
+          $mdlext-dark-range-faded-color 37.5%,
+          $mdlext-dark-range-faded-color 100%);
+      }
+      /* stylelint-enable */
+
+      &:active::-ms-thumb {
+        background: $mdlext-dark-range-color;
+      }
+
+
+      /**************************** 0-value ****************************/
+
+      &.is-lowest-value::-webkit-slider-thumb {
+        border-color: $mdlext-dark-range-color;
+        background: transparent;
+      }
+
+      &.is-lowest-value::-moz-range-thumb {
+        border-color: $mdlext-dark-range-bg-color;
+        background: transparent;
+      }
+
+      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
+        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;
+        background: $mdlext-dark-range-bg-focus-color;
+      }
+
+      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {
+        box-shadow: 0 0 0 10px $mdlext-dark-range-bg-focus-color;
+        background: $mdlext-dark-range-bg-focus-color;
+      }
+
+      &.is-lowest-value:active::-webkit-slider-thumb {
+        border-color: $mdlext-dark-range-bg-color;
+      }
+
+      &.is-lowest-value:active::-moz-range-thumb {
+        border-color: $mdlext-dark-range-bg-color;
+      }
+
+      /* stylelint-disable */
+      &.is-lowest-value::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          transparent 0%,
+          transparent 66.67%,
+          $mdlext-dark-range-bg-color 66.67%,
+          $mdlext-dark-range-bg-color 100%);
+      }
+
+      &.is-lowest-value:focus:not(:active)::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          $mdlext-dark-range-bg-focus-color 0%,
+          $mdlext-dark-range-bg-focus-color 25%,
+          $mdlext-dark-range-bg-color 25%,
+          $mdlext-dark-range-bg-color 37.5%,
+          $mdlext-dark-range-bg-focus-color 37.5%,
+          $mdlext-dark-range-bg-focus-color 100%);
+      }
+
+      &.is-lowest-value:active::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          transparent 0%,
+          transparent 77.78%,
+          $mdlext-dark-range-bg-color 77.78%,
+          $mdlext-dark-range-bg-color 100%);
+      }
+      /* stylelint-enable */
+
+      &.is-lowest-value::-ms-fill-lower {
+        background: transparent;
+      }
+
+      /**************************** Disabled ****************************/
+
+      &:disabled:focus::-webkit-slider-thumb,
+      &:disabled:active::-webkit-slider-thumb,
+      &:disabled::-webkit-slider-thumb {
+        background: $mdlext-dark-range-bg-color;
+      }
+
+      &:disabled:focus::-moz-range-thumb,
+      &:disabled:active::-moz-range-thumb,
+      &:disabled::-moz-range-thumb {
+        background: $mdlext-dark-range-bg-color;
+      }
+
+      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {
+        background-color: $mdlext-dark-range-bg-color;
+      }
+
+      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,
+      &.is-lowest-value:disabled:active::-webkit-slider-thumb,
+      &.is-lowest-value:disabled::-webkit-slider-thumb {
+        border-color: $mdlext-dark-range-bg-color;
+        background: transparent;
+      }
+
+      &.is-lowest-value:disabled:focus::-moz-range-thumb,
+      &.is-lowest-value:disabled:active::-moz-range-thumb,
+      &.is-lowest-value:disabled::-moz-range-thumb {
+        border-color: $mdlext-dark-range-bg-color;
+        background: transparent;
+      }
+
+      &:disabled:focus::-ms-thumb,
+      &:disabled:active::-ms-thumb,
+      &:disabled::-ms-thumb {
+        background: $mdlext-dark-range-bg-color;
+      }
+
+      /* stylelint-disable */
+      &.is-lowest-value:disabled:focus::-ms-thumb,
+      &.is-lowest-value:disabled:active::-ms-thumb,
+      &.is-lowest-value:disabled::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          transparent 0%,
+          transparent 50%,
+          $mdlext-dark-range-bg-color 50%,
+          $mdlext-dark-range-bg-color 100%);
+      }
+
+      &:disabled::-ms-fill-lower {
+        background: linear-gradient(to right,
+          transparent,
+          transparent 25px,
+          $mdlext-dark-range-bg-color 25px,
+          $mdlext-dark-range-bg-color 0);
+      }
+      /* stylelint-enable */
+
+    }
+  }
+
+  .mdl-slider__background-flex {
+    background: transparent;
+  }
+
+  .mdl-slider__background-lower {
+    background: $mdlext-dark-range-color;
+  }
+
+  // This one styles the upper part of the slider track.
+  .mdl-slider__background-upper {
+    background: $mdlext-dark-range-bg-color;
+  }
+}
+
+
+// mdl/src/textfield/_textfield.scss
+// -----------------------------------
+.mdlext-dark-color-theme {
+
+  .mdl-textfield__input {
+    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;
+  }
+  .mdl-textfield.is-invalid .mdl-textfield__input {
+    border-color: $mdlext-dark-input-text-error-color;
+  }
+  fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+  .mdl-textfield.is-disabled .mdl-textfield__input {
+    background-color: transparent;
+    border-bottom-color: $mdlext-dark-input-text-disabled-color;
+    color: $mdlext-dark-input-text-disabled-text-color;
+  }
+  .mdl-textfield__label {
+    color: $mdlext-dark-input-text-label-color;
+  }
+  .mdl-textfield__label::after {
+    background-color: $mdlext-dark-input-text-highlight-color;
+  }
+  fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {
+    color: $mdlext-dark-input-text-disabled-text-color;
+  }
+  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,
+  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,
+  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
+    color: $mdlext-dark-input-text-highlight-color;
+  }
+  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {
+    color: $mdlext-dark-input-text-error-color;
+  }
+  .mdl-textfield.is-invalid .mdl-textfield__label::after {
+    background-color: $mdlext-dark-input-text-error-color;
+  }
+  .mdl-textfield__error {
+    color: $mdlext-dark-input-text-error-color;
+  }
+}
+
+
+// mdl/src/checkbox/_checkbox.scss
+// -----------------------------------
+.mdlext-dark-color-theme {
+
+  .mdl-checkbox__box-outline {
+    border-color: $mdlext-dark-checkbox-off-color;
+  }
+  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {
+    border-color: $mdlext-dark-checkbox-color;
+  }
+  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,
+  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {
+    border-color: $mdlext-dark-checkbox-disabled-color;
+  }
+
+  .mdl-checkbox__focus-helper {
+    background-color: transparent;
+  }
+  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {
+    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-dark-checkbox-focus-color;
+    background-color: $mdlext-dark-checkbox-focus-color;
+  }
+
+  .mdl-checkbox__tick-outline {
+    background: transparent;
+  }
+  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {
+    background-color: $mdlext-dark-checkbox-color;
+  }
+  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,
+  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {
+    background-color: $mdlext-dark-checkbox-disabled-color;
+  }
+
+  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,
+  .mdl-checkbox.is-disabled .mdl-checkbox__label {
+    color: $mdlext-dark-checkbox-disabled-color;
+  }
+
+  .mdl-checkbox__ripple-container .mdl-ripple {
+    background: $mdlext-dark-checkbox-color;
+  }
+  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,
+  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+
+}
+
+// mdl/src/radio/_radio.scss
+// -----------------------------------
+.mdlext-dark-color-theme {
+  .mdl-radio__outer-circle {
+    border-color: $mdlext-dark-radio-off-color;
+  }
+  .mdl-radio.is-checked .mdl-radio__outer-circle {
+    border-color: $mdlext-dark-radio-color;
+  }
+  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,
+  .mdl-radio.is-disabled .mdl-radio__outer-circle {
+    border-color: $mdlext-dark-radio-disabled-color;
+  }
+
+  .mdl-radio__inner-circle {
+    background: $mdlext-dark-radio-color;
+  }
+  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,
+  .mdl-radio.is-disabled .mdl-radio__inner-circle {
+    background: $mdlext-dark-radio-disabled-color;
+  }
+
+  fieldset[disabled] .mdl-radio .mdl-radio__label,
+  .mdl-radio.is-disabled .mdl-radio__label {
+    color: $mdlext-dark-radio-disabled-color;
+  }
+
+  .mdl-radio__ripple-container .mdl-ripple {
+    background: $mdlext-dark-radio-color;
+  }
+  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,
+  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+}
+
+// mdl/src/icon-togglr/_icon-toggle.scss
+// ---------------------------------------
+.mdlext-dark-color-theme {
+  .mdl-icon-toggle__label {
+    color: $mdlext-dark-icon-toggle-color;
+  }
+  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {
+    color: $mdlext-dark-icon-toggle-checked-color;
+  }
+  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {
+    color: $mdlext-dark-icon-toggle-disabled-color;
+  }
+  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {
+    background-color: $mdlext-dark-icon-toggle-focus-color;
+  }
+  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {
+    background-color: $mdlext-dark-icon-toggle-checked-focus-color;
+  }
+  .mdl-icon-toggle__ripple-container .mdl-ripple {
+    background: $mdlext-dark-icon-toggle-color;
+  }
+  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+}
+
+
+// mdl/src/switch/_switch.scss
+// -----------------------------------
+.mdlext-dark-color-theme {
+
+  .mdl-switch__track {
+    background: $mdlext-dark-switch-off-track-color;
+  }
+  .mdl-switch.is-checked .mdl-switch__track {
+    background: $mdlext-dark-switch-track-color;
+  }
+  .mdl-switch__track fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled .mdl-switch__track {
+    background: $mdlext-dark-switch-disabled-track-color;
+  }
+
+  .mdl-switch__thumb {
+    background: $mdlext-dark-switch-off-thumb-color;
+  }
+  .mdl-switch.is-checked .mdl-switch__thumb {
+    background: $mdlext-dark-switch-thumb-color;
+  }
+  .mdl-switch__thumb fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled .mdl-switch__thumb {
+    background: $mdlext-dark-switch-disabled-thumb-color;
+  }
+
+  .mdl-switch__focus-helper {
+    background-color: transparent;
+  }
+  .mdl-switch.is-focused .mdl-switch__focus-helper {
+    background-color: rgba(0, 0, 0, 0.1);
+  }
+  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {
+    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-dark-switch-faded-color;
+    background-color: $mdlext-dark-switch-faded-color;
+  }
+
+  .mdl-switch__label fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled .mdl-switch__label {
+    color: $mdlext-dark-switch-disabled-thumb-color;
+  }
+
+  .mdl-switch__ripple-container .mdl-ripple {
+    background: $mdlext-dark-switch-color;
+  }
+  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,
+  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+
+}
+
+
+// mdl/src/data-table/_data-table.scss
+// -----------------------------------
+.mdlext-dark-color-theme {
+
+  .mdl-data-table {
+    border-color: $mdlext-dark-data-table-divider-color;
+    background-color: $mdlext-dark-data-table-background-color;
+
+    tbody {
+      tr {
+        &.is-selected {
+          background-color: $mdlext-dark-data-table-selection-color;
+        }
+
+        &:hover {
+          background-color: $mdlext-dark-data-table-hover-color;
+        }
+      }
+    }
+
+    th {
+      color: $mdlext-dark-data-table-header-color;
+
+      &.mdl-data-table__header--sorted-ascending,
+      &.mdl-data-table__header--sorted-descending {
+        color: $mdlext-dark-data-table-header-sorted-color;
+
+        &:hover {
+          &::before {
+            color: $mdlext-dark-data-table-header-sorted-icon-hover-color;
+          }
+        }
+      }
+    }
+  }
+}
+
+// mdl/src/menu/_menu.scss
+// -----------------------------------
+.mdlext-dark-color-theme {
+
+  .mdl-menu__outline {
+    background: $mdlext-dark-default-dropdown-bg-color;
+  }
+
+  .mdl-menu__item {
+    color: $mdlext-dark-default-item-text-color;
+    background-color: transparent;
+    outline-color: $mdlext-dark-default-item-outline-color;
+
+    &--full-bleed-divider {
+      border-bottom-color: $mdlext-dark-default-item-divider-color;
+    }
+
+    &[disabled],
+    &[data-mdl-disabled] {
+      color: $mdlext-dark-disabled-item-text-color;
+      background-color: transparent;
+
+      &:hover {
+        background-color: transparent;
+      }
+
+      &:focus {
+        background-color: transparent;
+      }
+
+      & .mdl-ripple {
+        background: transparent;
+      }
+    }
+
+    &:hover {
+      background-color: $mdlext-dark-default-item-hover-bg-color;
+    }
+
+    &:focus {
+      background-color: $mdlext-dark-default-item-focus-bg-color;
+    }
+
+    &:active {
+      background-color: $mdlext-dark-default-item-active-bg-color;
+    }
+  }
+}
+
+// mdl/src/card/_card.scss
+// ----------------------------------------
+.mdlext-dark-color-theme {
+  .mdl-card {
+    background: $mdlext-dark-card-background-color;
+  }
+
+  .mdl-card__media {
+    background-color: $mdlext-dark-card-image-placeholder-color;
+  }
+
+  .mdl-card__title {
+    color: $mdlext-dark-card-text-color;
+
+    &.mdl-card--border {
+      border-bottom-color: $mdlext-dark-card-border-color;
+    }
+  }
+
+  .mdl-card__title-text {
+    color: inherit;
+  }
+
+  .mdl-card__subtitle-text {
+    color: $mdlext-dark-card-subtitle-color;
+  }
+
+  .mdl-card__supporting-text {
+    color: $mdlext-dark-card-supporting-text-text-color;
+  }
+
+  .mdl-card__actions {
+    background-color: rgba(255, 255, 255, 0);
+
+    &.mdl-card--border {
+      border-top-color: $mdlext-dark-card-border-color;
+    }
+  }
+}
+
+
+// mdlext/src/selectfield/_selectfield.scss
+// ----------------------------------------
+.mdlext-dark-color-theme {
+
+  .mdlext-selectfield.is-disabled::after {
+    color: $mdlext-dark-input-text-disabled-color;
+    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-input-text-disabled-color);
+  }
+
+  .mdlext-selectfield__select {
+    border-bottom-color: $mdlext-dark-input-text-bottom-border-color;
+    color: inherit;
+
+    option {
+      background-color: $mdlext-dark-content-background-color;
+      color: $mdlext-dark-text-color-primary;
+    }
+  }
+  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+    border-color: $mdlext-dark-input-text-error-color;
+  }
+  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+    background-color: transparent;
+    border-bottom-color: $mdlext-dark-input-text-disabled-color;
+    color: $mdlext-dark-input-text-disabled-text-color;
+  }
+
+  .mdlext-selectfield__label {
+    color: $mdlext-dark-input-text-label-color;
+  }
+  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+    color: $mdlext-dark-input-text-disabled-text-color;
+  }
+  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,
+  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+    color: $mdlext-dark-input-text-highlight-color;
+  }
+  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+    color: $mdlext-dark-input-text-error-color;
+  }
+  .mdlext-selectfield__label::after {
+    background-color: $mdlext-dark-input-text-highlight-color;
+  }
+  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+    background-color: $mdlext-dark-input-text-error-color;
+  }
+
+  .mdlext-selectfield__error {
+    color: $mdlext-dark-input-text-error-color;
+  }
+}
+
+
+// mdlext/src/menu-button/_menu-button.scss
+// ----------------------------------------
+.mdlext-menu.mdlext-dark-color-theme {
+  background: $mdlext-dark-default-dropdown-bg-color;
+}
+
+.mdlext-dark-color-theme {
+
+  .mdlext-menu {
+    background: $mdlext-dark-default-dropdown-bg-color;
+
+    &__item {
+      color: $mdlext-dark-default-item-text-color;
+      background-color: $mdlext-dark-default-dropdown-bg-color;
+
+      &:active,
+      &[aria-selected='true'] {
+        background-color: $mdlext-dark-default-item-active-bg-color;
+      }
+      &:hover:not([disabled]) {
+        background-color: $mdlext-dark-default-item-hover-bg-color;
+      }
+      &:focus {
+        outline-color: $mdlext-dark-default-item-outline-color;
+        background-color: $mdlext-dark-default-item-focus-bg-color;
+      }
+      &[disabled] {
+        color: $mdlext-dark-disabled-item-text-color;
+
+        > * {
+          color: $mdlext-dark-disabled-item-text-color;
+        }
+      }
+    }
+    &__item-separator {
+      border-bottom: 1px solid $mdlext-dark-default-item-divider-color;
+    }
+  }
+}
+
+
+// mdlext/src/bordered-fields/_bordered-fields.scss
+// -------------------------------------------------
+.mdlext-dark-color-theme {
+
+  .mdlext-bordered-fields {
+
+    .mdl-textfield,
+    .mdlext-selectfield {
+
+      .mdl-textfield__input,
+      .mdlext-selectfield__select {
+        background-color: $mdlext-dark-bordered-field-background-color;
+        border-color: $mdlext-dark-bordered-field-border-color;
+        color: $mdlext-dark-bordered-field-input-text-color;
+
+        &:disabled {
+          color: $mdlext-dark-bordered-field-input-text-disabled-text-color;
+          background-color: $mdlext-dark-bordered-field-disabled-background-color;
+          border-color: $mdlext-dark-bordered-field-disabled-border-color;
+        }
+        &:focus {
+          background-color: $mdlext-dark-bordered-field-focus-background-color;
+          border-color: $mdlext-dark-bordered-field-focus-border-color;
+        }
+      }
+      &.is-invalid {
+        .mdl-textfield__input,
+        .mdlext-selectfield__select {
+          color: $mdlext-dark-bordered-field-input-text-error-color;
+          border-color: $mdlext-dark-bordered-field-error-border-color;
+          background-color: $mdlext-dark-bordered-field-error-background-color;
+
+          &:focus {
+            border-color: $mdlext-dark-bordered-field-error-focus-border-color;
+            background-color: $mdlext-dark-bordered-field-error-focus-background-color;
+          }
+        }
+      }
+    }
+
+    fieldset[disabled] .mdlext-selectfield::after,
+    .mdlext-selectfield.is-disabled::after {
+      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;
+      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-dark-bordered-field-input-text-disabled-text-color);
+    }
+
+    fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+      color: $mdlext-dark-bordered-field-input-text-disabled-text-color;
+      background-color: $mdlext-dark-bordered-field-disabled-background-color;
+      border-color: $mdlext-dark-bordered-field-disabled-border-color;
+    }
+
+    .mdl-textfield,
+    .mdlext-selectfield {
+
+      .mdl-textfield__label,
+      .mdlext-selectfield__label {
+        color: $mdlext-dark-bordered-field-input-text-label-color;
+      }
+      &.mdl-textfield--floating-label.is-focused.is-focused,
+      &.mdl-textfield--floating-label.is-dirty.is-dirty,
+      &.mdl-textfield--floating-label.has-placeholder,
+      &.mdlext-selectfield--floating-label.is-focused.is-focused,
+      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,
+      &.mdlext-selectfield--floating-label.has-placeholder {
+
+        .mdl-textfield__label,
+        .mdlext-selectfield__label {
+          color: $mdlext-dark-bordered-field-input-text-label-focus-color;
+        }
+      }
+      &.mdl-textfield--floating-label.is-disabled.is-disabled,
+      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {
+
+        .mdl-textfield__label,
+        .mdlext-selectfield__label {
+          color: $mdlext-dark-bordered-field-input-text-label-disabled-color;
+        }
+      }
+      &.mdl-textfield--floating-label.is-invalid.is-invalid,
+      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {
+
+        .mdl-textfield__label,
+        .mdlext-selectfield__label {
+          color: $mdlext-dark-bordered-field-input-text-label-error-color;
+        }
+      }
+    }
+
+    fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+      color: $mdlext-dark-bordered-field-input-text-label-disabled-color;
+    }
+
+    // Icon(s) and/or button(s) inside textfield
+    .mdl-textfield,
+    .mdlext-selectfield {
+      &.is-disabled i,
+      &.is-disabled .mdl-button {
+        color: $mdlext-dark-bordered-field-disabled-border-color;
+      }
+    }
+    fieldset[disabled] .mdl-textfield,
+    fieldset[disabled] .mdlext-selectfield {
+      i,
+      .mdl-button {
+        color: $mdlext-dark-bordered-field-disabled-border-color;
+      }
+    }
+  }
+
+}
+
+
+// mdlext/src/accordion/_accordion.scss
+// ----------------------------------------
+.mdlext-dark-color-theme {
+
+  .mdlext-accordion {
+
+    &__tab {
+      color: $mdlext-dark-accordion-header-secondary-color;
+      background-color: $mdlext-dark-accordion-header-background-color;
+
+      &:focus {
+        outline-color: $mdlext-dark-accordion-header-focus-outline-color;
+      }
+      &[aria-expanded='true'] {
+        background-color: $mdlext-dark-accordion-header-background-open-color;
+      }
+      &[aria-selected='true'] {
+        background-color: $mdlext-dark-accordion-header-background-active-color;
+      }
+      &[disabled] {
+        background-color: $mdlext-dark-accordion-header-disabled-color;
+        color: $mdlext-dark-accordion-header-secondary-color-disabled;
+        pointer-events: none;
+
+        > * {
+          color: $mdlext-dark-accordion-header-secondary-color-disabled;
+        }
+      }
+      &:hover:not([disabled]) {
+        background-color: $mdlext-dark-accordion-header-background-hover-color;
+      }
+      &--ripple {
+        &[aria-selected='true']::before {
+          background: $mdlext-dark-accordion-ripple-color;
+        }
+      }
+    }
+
+    &__tabpanel {
+      color: $mdlext-dark-accordion-content-color;
+      background-color: $mdlext-dark-accordion-content-background-color;
+    }
+  }
+
+  // Vertical layout
+  .mdlext-accordion {
+
+    &--vertical {
+
+      .mdlext-accordion__tab {
+        border-top: 1px solid $mdlext-dark-accordion-header-border-color;
+
+        &[aria-selected='true']::after {
+          background-color: $mdlext-dark-accordion-header-highlight-color;
+        }
+      }
+      .mdlext-accordion__tabpanel {
+        border-top: 1px solid $mdlext-dark-accordion-header-border-color;
+      }
+    }
+  }
+
+  // Horizontal layout
+  .mdlext-accordion {
+
+    &--horizontal {
+
+      .mdlext-accordion__tab {
+        border-left: 1px solid $mdlext-dark-accordion-header-border-color;
+
+        &[aria-selected='true']::after {
+          background-color: $mdlext-dark-accordion-header-highlight-color;
+        }
+      }
+      .mdlext-accordion__tabpanel {
+        border-left: 1px solid $mdlext-dark-accordion-header-border-color;
+      }
+    }
+  }
+
+  .mdlext-accordion {
+
+    &__panel:first-child > &__tab {
+      // Use container to set outer borders
+      border-top-color: transparent;
+      border-left-color: transparent;
+    }
+  }
+
+  // Making accordion appear disabled.
+  // Note: does not prevent tabbing into a disabled accordion
+  .mdlext-accordion[disabled] {
+    .mdlext-accordion__tab {
+      background-color: $mdlext-dark-accordion-header-disabled-color;
+      color: $mdlext-dark-accordion-header-secondary-color-disabled;
+
+      > * {
+        color: $mdlext-dark-accordion-header-secondary-color-disabled;
+      }
+    }
+    .mdlext-accordion__tabpanel {
+      opacity: 0.8;
+      filter: blur(1px) grayscale(80%);
+    }
+  }
+}
diff --git a/node_modules/mdl-ext/src/color-themes/_light-color-theme.scss b/node_modules/mdl-ext/src/color-themes/_light-color-theme.scss
new file mode 100644
index 0000000..5393738
--- /dev/null
+++ b/node_modules/mdl-ext/src/color-themes/_light-color-theme.scss
@@ -0,0 +1,1130 @@
+@import "color-themes";
+
+.mdlext-light-color-theme {
+  background-color: $mdlext-light-content-background-color;
+  color: $mdlext-light-text-color-primary;
+
+  a {
+    outline-color: inherit;
+  }
+}
+
+// mdl/src/palette/_palette.scss
+// -----------------------------
+.mdlext-light-color-theme {
+
+  .mdl-color--primary {
+    background-color: $mdlext-light-color-primary !important;
+  }
+
+  .mdl-color--primary-contrast {
+    background-color: $mdlext-light-color-primary-contrast !important;
+  }
+
+  .mdl-color--primary-dark {
+    background-color: $mdlext-light-color-primary-dark !important;
+  }
+
+  .mdl-color--accent {
+    background-color: $mdlext-light-color-accent !important;
+  }
+
+  .mdl-color--accent-contrast {
+    background-color: $mdlext-light-color-accent-contrast !important;
+  }
+
+  .mdl-color-text--primary {
+    color: $mdlext-light-color-primary !important;
+  }
+
+  .mdl-color-text--primary-contrast {
+    color: $mdlext-light-color-primary-contrast !important;
+  }
+
+  .mdl-color-text--primary-dark {
+    color: $mdlext-light-color-primary-dark !important;
+  }
+
+  .mdl-color-text--accent {
+    color: $mdlext-light-color-accent !important;
+  }
+
+  .mdl-color-text--accent-contrast {
+    color: $mdlext-light-color-accent-contrast !important;
+  }
+
+}
+
+// mdl/src/typography/_typography.scss
+// -----------------------------------
+.mdlext-light-color-theme {
+  a {
+    color: $mdlext-light-text-link-color;
+  }
+}
+
+
+// mdl/src/badge/_badge.scss
+// ---------------------------
+.mdlext-light-color-theme {
+  .mdl-badge {
+
+    &[data-badge]::after {
+      background: $mdlext-light-badge-background;
+      color: $mdlext-light-badge-color;
+    }
+
+    &.mdl-badge--no-background {
+      &[data-badge]::after {
+        color: $mdlext-light-badge-color-inverse;
+        background: $mdlext-light-badge-background-inverse;
+      }
+    }
+  }
+}
+
+
+// mdl/src/button/_button.scss
+// ---------------------------
+.mdlext-light-color-theme {
+
+  .mdl-button {
+    background: transparent;
+    color: $mdlext-light-button-secondary-color;
+
+    &:hover {
+      background-color: $mdlext-light-button-hover-color;
+    }
+
+    &:focus:not(:active) {
+      background-color: $mdlext-light-button-focus-color;
+    }
+
+    &:active {
+      background-color: $mdlext-light-button-active-color;
+    }
+
+    &.mdl-button--colored {
+      color: $mdlext-light-button-primary-color-alt;
+
+      &:focus:not(:active) {
+        background-color: $mdlext-light-button-focus-color-alt;
+      }
+    }
+  }
+
+  // Raised buttons
+  .mdl-button--raised {
+    background: $mdlext-light-button-primary-color;
+
+    &:active {
+      background-color: $mdlext-light-button-active-color;
+    }
+
+    &:focus:not(:active) {
+      background-color: $mdlext-light-button-active-color;
+    }
+
+    &.mdl-button--colored {
+      background: $mdlext-light-button-primary-color-alt;
+      color: $mdlext-light-button-secondary-color-alt;
+
+      &:hover {
+        background-color: $mdlext-light-button-hover-color-alt;
+      }
+
+      &:active {
+        background-color: $mdlext-light-button-active-color-alt;
+      }
+
+      &:focus:not(:active) {
+        background-color: $mdlext-light-button-active-color-alt;
+      }
+
+      & .mdl-ripple {
+        background: $mdlext-light-button-ripple-color-alt;
+      }
+    }
+  }
+
+
+  // FABs
+  .mdl-button--fab {
+    background: $mdlext-light-button-primary-color;
+
+    &:active {
+      background-color: $mdlext-light-button-active-color;
+    }
+
+    &:focus:not(:active) {
+      background-color: $mdlext-light-button-active-color;
+    }
+
+    &.mdl-button--colored {
+      background: $mdlext-light-button-fab-color-alt;
+      color: $mdlext-light-button-fab-text-color-alt;
+
+      &:hover {
+        background-color: $mdlext-light-button-fab-hover-color-alt;
+      }
+
+      &:focus:not(:active) {
+        background-color: $mdlext-light-button-fab-active-color-alt;
+      }
+
+      &:active {
+        background-color: $mdlext-light-button-fab-active-color-alt;
+      }
+
+      & .mdl-ripple {
+        background: $mdlext-light-button-fab-ripple-color-alt;
+      }
+    }
+  }
+
+
+  // Icon buttons
+  .mdl-button--icon {
+    color: inherit;
+  }
+
+  // Colorized buttons
+
+  .mdl-button--primary.mdl-button--primary {
+    color: $mdlext-light-button-primary-color-alt;
+
+    & .mdl-ripple {
+      background: $mdlext-light-button-secondary-color-alt;
+    }
+    &.mdl-button--raised,
+    &.mdl-button--fab {
+      color: $mdlext-light-button-secondary-color-alt;
+      background-color: $mdlext-light-button-primary-color-alt;
+    }
+  }
+
+  .mdl-button--accent.mdl-button--accent {
+    color: $mdlext-light-button-fab-color-alt;
+
+    & .mdl-ripple {
+      background: $mdlext-light-button-fab-text-color-alt;
+    }
+    &.mdl-button--raised,
+    &.mdl-button--fab {
+      color: $mdlext-light-button-fab-text-color-alt;
+      background-color: $mdlext-light-button-fab-color-alt;
+    }
+  }
+
+  // Disabled buttons
+
+  .mdl-button {
+    // Bump up specificity by using [disabled] twice.
+    &[disabled][disabled],
+    &.mdl-button--disabled.mdl-button--disabled {
+      color: $mdlext-light-button-secondary-color-disabled;
+      background-color: transparent;
+    }
+
+    &--fab {
+      // Bump up specificity by using [disabled] twice.
+      &[disabled][disabled],
+      &.mdl-button--disabled.mdl-button--disabled {
+        background-color: $mdlext-light-button-primary-color-disabled;
+        color: $mdlext-light-button-secondary-color-disabled;
+      }
+    }
+
+    &--raised {
+      // Bump up specificity by using [disabled] twice.
+      &[disabled][disabled],
+      &.mdl-button--disabled.mdl-button--disabled {
+        background-color: $mdlext-light-button-primary-color-disabled;
+        color: $mdlext-light-button-secondary-color-disabled;
+      }
+    }
+    &--colored {
+      // Bump up specificity by using [disabled] twice.
+      &[disabled][disabled],
+      &.mdl-button--disabled.mdl-button--disabled {
+        color: $mdlext-light-button-secondary-color-disabled;
+      }
+    }
+  }
+}
+
+// mdl/src/slider/_slider.scss
+// ---------------------------
+.mdlext-light-color-theme {
+  .mdl-slider {
+
+    &.is-upgraded {
+      background: transparent;
+      color: $mdlext-light-range-color;
+
+      &::-webkit-slider-runnable-track {
+        background: transparent;
+      }
+
+      &::-moz-range-track {
+        background: transparent;
+      }
+
+      &::-ms-track {
+        background: none;
+        color: transparent;
+      }
+
+      /* stylelint-disable */
+      &::-ms-fill-lower {
+        background: linear-gradient(to right,
+          transparent,
+          transparent 16px,
+          $mdlext-light-range-color 16px,
+          $mdlext-light-range-color 0);
+      }
+
+      &::-ms-fill-upper {
+        background: linear-gradient(to left,
+          transparent,
+          transparent 16px,
+          $mdlext-light-range-bg-color 16px,
+          $mdlext-light-range-bg-color 0);
+      }
+      /* stylelint-enable */
+
+
+      /**************************** Thumbs ****************************/
+      &::-webkit-slider-thumb {
+        background: $mdlext-light-range-color;
+      }
+
+      &::-moz-range-thumb {
+        background: $mdlext-light-range-color;
+      }
+
+      &:focus:not(:active)::-webkit-slider-thumb {
+        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;
+      }
+
+      &:focus:not(:active)::-moz-range-thumb {
+        box-shadow: 0 0 0 10px $mdlext-light-range-faded-color;
+      }
+
+      &:active::-webkit-slider-thumb {
+        background: $mdlext-light-range-color;
+      }
+
+      &:active::-moz-range-thumb {
+        background: $mdlext-light-range-color;
+      }
+
+      &::-ms-thumb {
+        background: $mdlext-light-range-color;
+      }
+
+      /* stylelint-disable */
+      &:focus:not(:active)::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          $mdlext-light-range-color 0%,
+          $mdlext-light-range-color 37.5%,
+          $mdlext-light-range-faded-color 37.5%,
+          $mdlext-light-range-faded-color 100%);
+      }
+      /* stylelint-enable */
+
+      &:active::-ms-thumb {
+        background: $mdlext-light-range-color;
+      }
+
+
+      /**************************** 0-value ****************************/
+
+      &.is-lowest-value::-webkit-slider-thumb {
+        border-color: $mdlext-light-range-color;
+        background: transparent;
+      }
+
+      &.is-lowest-value::-moz-range-thumb {
+        border-color: $mdlext-light-range-bg-color;
+        background: transparent;
+      }
+
+      &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
+        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;
+        background: $mdlext-light-range-bg-focus-color;
+      }
+
+      &.is-lowest-value:focus:not(:active)::-moz-range-thumb {
+        box-shadow: 0 0 0 10px $mdlext-light-range-bg-focus-color;
+        background: $mdlext-light-range-bg-focus-color;
+      }
+
+      &.is-lowest-value:active::-webkit-slider-thumb {
+        border-color: $mdlext-light-range-bg-color;
+      }
+
+      &.is-lowest-value:active::-moz-range-thumb {
+        border-color: $mdlext-light-range-bg-color;
+      }
+
+      /* stylelint-disable */
+      &.is-lowest-value::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          transparent 0%,
+          transparent 66.67%,
+          $mdlext-light-range-bg-color 66.67%,
+          $mdlext-light-range-bg-color 100%);
+      }
+
+      &.is-lowest-value:focus:not(:active)::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          $mdlext-light-range-bg-focus-color 0%,
+          $mdlext-light-range-bg-focus-color 25%,
+          $mdlext-light-range-bg-color 25%,
+          $mdlext-light-range-bg-color 37.5%,
+          $mdlext-light-range-bg-focus-color 37.5%,
+          $mdlext-light-range-bg-focus-color 100%);
+      }
+
+      &.is-lowest-value:active::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          transparent 0%,
+          transparent 77.78%,
+          $mdlext-light-range-bg-color 77.78%,
+          $mdlext-light-range-bg-color 100%);
+      }
+      /* stylelint-enable */
+
+      &.is-lowest-value::-ms-fill-lower {
+        background: transparent;
+      }
+
+      /**************************** Disabled ****************************/
+
+      &:disabled:focus::-webkit-slider-thumb,
+      &:disabled:active::-webkit-slider-thumb,
+      &:disabled::-webkit-slider-thumb {
+        background: $mdlext-light-range-bg-color;
+      }
+
+      &:disabled:focus::-moz-range-thumb,
+      &:disabled:active::-moz-range-thumb,
+      &:disabled::-moz-range-thumb {
+        background: $mdlext-light-range-bg-color;
+      }
+
+      &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower {
+        background-color: $mdlext-light-range-bg-color;
+      }
+
+      &.is-lowest-value:disabled:focus::-webkit-slider-thumb,
+      &.is-lowest-value:disabled:active::-webkit-slider-thumb,
+      &.is-lowest-value:disabled::-webkit-slider-thumb {
+        border-color: $mdlext-light-range-bg-color;
+        background: transparent;
+      }
+
+      &.is-lowest-value:disabled:focus::-moz-range-thumb,
+      &.is-lowest-value:disabled:active::-moz-range-thumb,
+      &.is-lowest-value:disabled::-moz-range-thumb {
+        border-color: $mdlext-light-range-bg-color;
+        background: transparent;
+      }
+
+      &:disabled:focus::-ms-thumb,
+      &:disabled:active::-ms-thumb,
+      &:disabled::-ms-thumb {
+        background: $mdlext-light-range-bg-color;
+      }
+
+      /* stylelint-disable */
+      &.is-lowest-value:disabled:focus::-ms-thumb,
+      &.is-lowest-value:disabled:active::-ms-thumb,
+      &.is-lowest-value:disabled::-ms-thumb {
+        background: radial-gradient(circle closest-side,
+          transparent 0%,
+          transparent 50%,
+          $mdlext-light-range-bg-color 50%,
+          $mdlext-light-range-bg-color 100%);
+      }
+
+      &:disabled::-ms-fill-lower {
+        background: linear-gradient(to right,
+          transparent,
+          transparent 25px,
+          $mdlext-light-range-bg-color 25px,
+          $mdlext-light-range-bg-color 0);
+      }
+      /* stylelint-enable */
+
+    }
+  }
+
+  .mdl-slider__background-flex {
+    background: transparent;
+  }
+
+  .mdl-slider__background-lower {
+    background: $mdlext-light-range-color;
+  }
+
+  // This one styles the upper part of the slider track.
+  .mdl-slider__background-upper {
+    background: $mdlext-light-range-bg-color;
+  }
+}
+
+
+// mdl/src/textfield/_textfield.scss
+// -----------------------------------
+.mdlext-light-color-theme {
+
+  .mdl-textfield__input {
+    border-bottom-color: $mdlext-light-input-text-bottom-border-color;
+  }
+  .mdl-textfield.is-invalid .mdl-textfield__input {
+    border-color: $mdlext-light-input-text-error-color;
+  }
+  fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+  .mdl-textfield.is-disabled .mdl-textfield__input {
+    background-color: transparent;
+    border-bottom-color: $mdlext-light-input-text-disabled-color;
+    color: $mdlext-light-input-text-disabled-text-color;
+  }
+  .mdl-textfield__label {
+    color: $mdlext-light-input-text-label-color;
+  }
+  .mdl-textfield__label::after {
+    background-color: $mdlext-light-input-text-highlight-color;
+  }
+  fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+  .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {
+    color: $mdlext-light-input-text-disabled-text-color;
+  }
+  .mdl-textfield--floating-label.is-focused .mdl-textfield__label,
+  .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,
+  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
+    color: $mdlext-light-input-text-highlight-color;
+  }
+  .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {
+    color: $mdlext-light-input-text-error-color;
+  }
+  .mdl-textfield.is-invalid .mdl-textfield__label::after {
+    background-color: $mdlext-light-input-text-error-color;
+  }
+  .mdl-textfield__error {
+    color: $mdlext-light-input-text-error-color;
+  }
+}
+
+
+// mdl/src/checkbox/_checkbox.scss
+// -----------------------------------
+.mdlext-light-color-theme {
+
+  .mdl-checkbox__box-outline {
+    border-color: $mdlext-light-checkbox-off-color;
+  }
+  .mdl-checkbox.is-checked .mdl-checkbox__box-outline {
+    border-color: $mdlext-light-checkbox-color;
+  }
+  fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,
+  .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {
+    border-color: $mdlext-light-checkbox-disabled-color;
+  }
+
+  .mdl-checkbox__focus-helper {
+    background-color: transparent;
+  }
+  .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {
+    box-shadow: 0 0 0 ($checkbox-button-size / 2) $mdlext-light-checkbox-focus-color;
+    background-color: $mdlext-light-checkbox-focus-color;
+  }
+
+  .mdl-checkbox__tick-outline {
+    background: transparent;
+  }
+  .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {
+    background-color: $mdlext-light-checkbox-color;
+  }
+  fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,
+  .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {
+    background-color: $mdlext-light-checkbox-disabled-color;
+  }
+
+  fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,
+  .mdl-checkbox.is-disabled .mdl-checkbox__label {
+    color: $mdlext-light-checkbox-disabled-color;
+  }
+
+  .mdl-checkbox__ripple-container .mdl-ripple {
+    background: $mdlext-light-checkbox-color;
+  }
+  fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,
+  .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+
+}
+
+// mdl/src/radio/_radio.scss
+// -----------------------------------
+.mdlext-light-color-theme {
+  .mdl-radio__outer-circle {
+    border-color: $mdlext-light-radio-off-color;
+  }
+  .mdl-radio.is-checked .mdl-radio__outer-circle {
+    border-color: $mdlext-light-radio-color;
+  }
+  .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,
+  .mdl-radio.is-disabled .mdl-radio__outer-circle {
+    border-color: $mdlext-light-radio-disabled-color;
+  }
+
+  .mdl-radio__inner-circle {
+    background: $mdlext-light-radio-color;
+  }
+  fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,
+  .mdl-radio.is-disabled .mdl-radio__inner-circle {
+    background: $mdlext-light-radio-disabled-color;
+  }
+
+  fieldset[disabled] .mdl-radio .mdl-radio__label,
+  .mdl-radio.is-disabled .mdl-radio__label {
+    color: $mdlext-light-radio-disabled-color;
+  }
+
+  .mdl-radio__ripple-container .mdl-ripple {
+    background: $mdlext-light-radio-color;
+  }
+  fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,
+  .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+}
+
+// mdl/src/icon-togglr/_icon-toggle.scss
+// ---------------------------------------
+.mdlext-light-color-theme {
+  .mdl-icon-toggle__label {
+    color: $mdlext-light-icon-toggle-color;
+  }
+  .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {
+    color: $mdlext-light-icon-toggle-checked-color;
+  }
+  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {
+    color: $mdlext-light-icon-toggle-disabled-color;
+  }
+  .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {
+    background-color: $mdlext-light-icon-toggle-focus-color;
+  }
+  .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {
+    background-color: $mdlext-light-icon-toggle-checked-focus-color;
+  }
+  .mdl-icon-toggle__ripple-container .mdl-ripple {
+    background: $mdlext-light-icon-toggle-color;
+  }
+  .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+}
+
+
+// mdl/src/switch/_switch.scss
+// -----------------------------------
+.mdlext-light-color-theme {
+
+  .mdl-switch__track {
+    background: $mdlext-light-switch-off-track-color;
+  }
+  .mdl-switch.is-checked .mdl-switch__track {
+    background: $mdlext-light-switch-track-color;
+  }
+  .mdl-switch__track fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled .mdl-switch__track {
+    background: $mdlext-light-switch-disabled-track-color;
+  }
+
+  .mdl-switch__thumb {
+    background: $mdlext-light-switch-off-thumb-color;
+  }
+  .mdl-switch.is-checked .mdl-switch__thumb {
+    background: $mdlext-light-switch-thumb-color;
+  }
+  .mdl-switch__thumb fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled .mdl-switch__thumb {
+    background: $mdlext-light-switch-disabled-thumb-color;
+  }
+
+  .mdl-switch__focus-helper {
+    background-color: transparent;
+  }
+  .mdl-switch.is-focused .mdl-switch__focus-helper {
+    background-color: rgba(0, 0, 0, 0.1);
+  }
+  .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {
+    box-shadow: 0 0 0 (($switch-ripple-size - $switch-helper-size) / 2) $mdlext-light-switch-faded-color;
+    background-color: $mdlext-light-switch-faded-color;
+  }
+
+  .mdl-switch__label fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled .mdl-switch__label {
+    color: $mdlext-light-switch-disabled-thumb-color;
+  }
+
+  .mdl-switch__ripple-container .mdl-ripple {
+    background: $mdlext-light-switch-color;
+  }
+  fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,
+  .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {
+    background: transparent;
+  }
+}
+
+
+// mdl/src/data-table/_data-table.scss
+// -----------------------------------
+.mdlext-light-color-theme {
+
+  .mdl-data-table {
+    border-color: $mdlext-light-data-table-divider-color;
+    background-color: $mdlext-light-data-table-background-color;
+
+    tbody {
+      tr {
+        &.is-selected {
+          background-color: $mdlext-light-data-table-selection-color;
+        }
+        &:hover {
+          background-color: $mdlext-light-data-table-hover-color;
+        }
+      }
+    }
+    th {
+      color: $data-table-header-color;
+
+      &.mdl-data-table__header--sorted-ascending,
+      &.mdl-data-table__header--sorted-descending {
+        color: $mdlext-light-data-table-header-sorted-color;
+
+        &:hover {
+          &::before {
+            color: $mdlext-light-data-table-header-sorted-icon-hover-color;
+          }
+        }
+      }
+    }
+  }
+}
+
+
+// mdl/src/menu/_menu.scss
+// -----------------------------------
+.mdlext-light-color-theme {
+
+  .mdl-menu__outline {
+    background: $mdlext-light-default-dropdown-bg-color;
+  }
+
+  .mdl-menu__item {
+    color: $mdlext-light-default-item-text-color;
+    background-color: transparent;
+    outline-color: $mdlext-light-default-item-outline-color;
+
+    &--full-bleed-divider {
+      border-bottom-color: $mdlext-light-default-item-divider-color;
+    }
+
+    &[disabled],
+    &[data-mdl-disabled] {
+      color: $mdlext-light-disabled-item-text-color;
+      background-color: transparent;
+
+      &:hover {
+        background-color: transparent;
+      }
+
+      &:focus {
+        background-color: transparent;
+      }
+
+      & .mdl-ripple {
+        background: transparent;
+      }
+    }
+
+    &:hover {
+      background-color: $mdlext-light-default-item-hover-bg-color;
+    }
+
+    &:focus {
+      background-color: $mdlext-light-default-item-focus-bg-color;
+    }
+
+    &:active {
+      background-color: $mdlext-light-default-item-active-bg-color;
+    }
+  }
+}
+
+
+// mdl/src/card/_card.scss
+// ----------------------------------------
+.mdlext-light-color-theme {
+
+  .mdl-card {
+    background: $mdlext-light-card-background-color;
+  }
+
+  .mdl-card__media {
+    background-color: $mdlext-light-card-image-placeholder-color;
+  }
+
+  .mdl-card__title {
+    color: $mdlext-light-card-text-color;
+
+    &.mdl-card--border {
+      border-bottom-color: $mdlext-light-card-border-color;
+    }
+  }
+
+  .mdl-card__title-text {
+    color: inherit;
+  }
+
+  .mdl-card__subtitle-text {
+    color: $mdlext-light-card-subtitle-color;
+  }
+
+  .mdl-card__supporting-text {
+    color: $mdlext-light-card-supporting-text-text-color;
+  }
+
+  .mdl-card__actions {
+    background-color: rgba(0, 0, 0, 0);
+
+    &.mdl-card--border {
+      border-top-color: $mdlext-light-card-border-color;
+    }
+  }
+}
+
+
+// mdlext/src/selectfield/_selectfield.scss
+// ----------------------------------------
+.mdlext-light-color-theme {
+
+  .mdlext-selectfield.is-disabled::after {
+    color: $mdlext-light-input-text-disabled-color;
+    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-input-text-disabled-color);
+  }
+
+  .mdlext-selectfield__select {
+    border-bottom-color: $mdlext-light-input-text-bottom-border-color;
+    color: inherit;
+
+    option {
+      background-color: $mdlext-light-content-background-color;
+      color: $mdlext-light-text-color-primary;
+    }
+  }
+  .mdlext-selectfield.is-invalid .mdlext-selectfield__select {
+    border-color: $mdlext-light-input-text-error-color;
+  }
+  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select,
+  .mdlext-selectfield.is-disabled .mdlext-selectfield__select {
+    background-color: transparent;
+    border-bottom-color: $mdlext-light-input-text-disabled-color;
+    color: $mdlext-light-input-text-disabled-text-color;
+  }
+
+  .mdlext-selectfield__label {
+    color: $mdlext-light-input-text-label-color;
+  }
+  fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__label,
+  .mdlext-selectfield.is-disabled.is-disabled .mdlext-selectfield__label {
+    color: $mdlext-light-input-text-disabled-text-color;
+  }
+  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__label,
+  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__label,
+  .mdlext-selectfield--floating-label.is-dirty.is-dirty .mdlext-selectfield__label,
+  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__label {
+    color: $mdlext-light-input-text-highlight-color;
+  }
+  .mdlext-selectfield--floating-label.is-invalid .mdlext-selectfield__label {
+    color: $mdlext-light-input-text-error-color;
+  }
+  .mdlext-selectfield__label::after {
+    background-color: $mdlext-light-input-text-highlight-color;
+  }
+  .mdlext-selectfield.is-invalid .mdlext-selectfield__label::after {
+    background-color: $mdlext-light-input-text-error-color;
+  }
+
+  .mdlext-selectfield__error {
+    color: $mdlext-light-input-text-error-color;
+  }
+}
+
+// mdlext/src/menu-button/_menu-button.scss
+// ----------------------------------------
+.mdlext-menu.mdlext-light-color-theme {
+  background: $mdlext-light-default-dropdown-bg-color;
+}
+
+.mdlext-light-color-theme {
+
+  .mdlext-menu {
+    background: $mdlext-light-default-dropdown-bg-color;
+
+    &__item {
+      color: $mdlext-light-default-item-text-color;
+      background-color: $mdlext-light-default-dropdown-bg-color;
+
+      &:active,
+      &[aria-selected='true'] {
+        background-color: $mdlext-light-default-item-active-bg-color;
+      }
+      &:hover:not([disabled]) {
+        background-color: $mdlext-light-default-item-hover-bg-color;
+      }
+      &:focus {
+        outline-color: $mdlext-light-default-item-outline-color;
+        background-color: $mdlext-light-default-item-focus-bg-color;
+      }
+      &[disabled] {
+        color: $mdlext-light-disabled-item-text-color;
+
+        > * {
+          color: $mdlext-light-disabled-item-text-color;
+        }
+      }
+    }
+    &__item-separator {
+      border-bottom: 1px solid $mdlext-light-default-item-divider-color;
+    }
+  }
+}
+
+
+// mdlext/src/bordered-fields/_bordered-fields.scss
+// -------------------------------------------------
+.mdlext-light-color-theme {
+
+  .mdlext-bordered-fields {
+
+    .mdl-textfield,
+    .mdlext-selectfield {
+
+      .mdl-textfield__input,
+      .mdlext-selectfield__select {
+        background-color: $mdlext-light-bordered-field-background-color;
+        border-color: $mdlext-light-bordered-field-border-color;
+        color: $mdlext-light-bordered-field-input-text-color;
+
+        &:disabled {
+          color: $mdlext-light-bordered-field-input-text-disabled-text-color;
+          background-color: $mdlext-light-bordered-field-disabled-background-color;
+          border-color: $mdlext-light-bordered-field-disabled-border-color;
+        }
+        &:focus {
+          background-color: $mdlext-light-bordered-field-focus-background-color;
+          border-color: $mdlext-light-bordered-field-focus-border-color;
+        }
+      }
+      &.is-invalid {
+        .mdl-textfield__input,
+        .mdlext-selectfield__select {
+          color: $mdlext-light-bordered-field-input-text-error-color;
+          border-color: $mdlext-light-bordered-field-error-border-color;
+          background-color: $mdlext-light-bordered-field-error-background-color;
+
+          &:focus {
+            border-color: $mdlext-light-bordered-field-error-focus-border-color;
+            background-color: $mdlext-light-bordered-field-error-focus-background-color;
+          }
+        }
+      }
+    }
+
+    fieldset[disabled] .mdlext-selectfield::after,
+    .mdlext-selectfield.is-disabled::after {
+      color: $mdlext-light-bordered-field-input-text-disabled-text-color;
+      @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $mdlext-light-bordered-field-input-text-disabled-text-color);
+    }
+
+    fieldset[disabled] .mdl-textfield .mdl-textfield__input,
+    fieldset[disabled] .mdlext-selectfield .mdlext-selectfield__select {
+      color: $mdlext-light-bordered-field-input-text-disabled-text-color;
+      background-color: $mdlext-light-bordered-field-disabled-background-color;
+      border-color: $mdlext-light-bordered-field-disabled-border-color;
+    }
+
+    .mdl-textfield,
+    .mdlext-selectfield {
+
+      .mdl-textfield__label,
+      .mdlext-selectfield__label {
+        color: $mdlext-light-bordered-field-input-text-label-color;
+      }
+      &.mdl-textfield--floating-label.is-focused.is-focused,
+      &.mdl-textfield--floating-label.is-dirty.is-dirty,
+      &.mdl-textfield--floating-label.has-placeholder,
+      &.mdlext-selectfield--floating-label.is-focused.is-focused,
+      &.mdlext-selectfield--floating-label.is-dirty.is-dirty,
+      &.mdlext-selectfield--floating-label.has-placeholder {
+
+        .mdl-textfield__label,
+        .mdlext-selectfield__label {
+          color: $mdlext-light-bordered-field-input-text-label-focus-color;
+        }
+      }
+      &.mdl-textfield--floating-label.is-disabled.is-disabled,
+      &.mdlext-selectfield--floating-label.is-disabled.is-disabled {
+
+        .mdl-textfield__label,
+        .mdlext-selectfield__label {
+          color: $mdlext-light-bordered-field-input-text-label-disabled-color;
+        }
+      }
+      &.mdl-textfield--floating-label.is-invalid.is-invalid,
+      &.mdlext-selectfield--floating-label.is-invalid.is-invalid {
+
+        .mdl-textfield__label,
+        .mdlext-selectfield__label {
+          color: $mdlext-light-bordered-field-input-text-label-error-color;
+        }
+      }
+    }
+
+    fieldset[disabled] .mdl-textfield .mdl-textfield__label,
+    fieldset[disabled] .mdl-selectfield .mdl-selectfield__label {
+      color: $mdlext-light-bordered-field-input-text-label-disabled-color;
+    }
+
+    // Icon(s) and/or button(s) inside textfield
+    .mdl-textfield,
+    .mdlext-selectfield {
+      &.is-disabled i,
+      &.is-disabled .mdl-button {
+        color: $mdlext-light-bordered-field-disabled-border-color;
+      }
+    }
+    fieldset[disabled] .mdl-textfield,
+    fieldset[disabled] .mdlext-selectfield {
+      i,
+      .mdl-button {
+        color: $mdlext-light-bordered-field-disabled-border-color;
+      }
+    }
+  }
+}
+
+
+// mdlext/src/accordion/_accordion.scss
+// ----------------------------------------
+.mdlext-light-color-theme {
+
+  .mdlext-accordion {
+
+    &__tab {
+      color: $mdlext-light-accordion-header-secondary-color;
+      background-color: $mdlext-light-accordion-header-background-color;
+
+      &:focus {
+        outline-color: $mdlext-light-accordion-header-focus-outline-color;
+      }
+      &[aria-expanded='true'] {
+        background-color: $mdlext-light-accordion-header-background-open-color;
+      }
+      &[aria-selected='true'] {
+        background-color: $mdlext-light-accordion-header-background-active-color;
+      }
+      &[disabled] {
+        background-color: $mdlext-light-accordion-header-disabled-color;
+        color: $mdlext-light-accordion-header-secondary-color-disabled;
+        pointer-events: none;
+
+        > * {
+          color: $mdlext-light-accordion-header-secondary-color-disabled;
+        }
+      }
+      &:hover:not([disabled]) {
+        background-color: $mdlext-light-accordion-header-background-hover-color;
+      }
+      &--ripple {
+        &[aria-selected='true']::before {
+          background: $mdlext-light-accordion-ripple-color;
+        }
+      }
+    }
+
+    &__tabpanel {
+      color: $mdlext-light-accordion-content-color;
+      background-color: $mdlext-light-accordion-content-background-color;
+    }
+  }
+
+  // Vertical layout
+  .mdlext-accordion {
+
+    &--vertical {
+
+      .mdlext-accordion__tab {
+        border-top: 1px solid $mdlext-light-accordion-header-border-color;
+
+        &[aria-selected='true']::after {
+          background-color: $mdlext-light-accordion-header-highlight-color;
+        }
+      }
+      .mdlext-accordion__tabpanel {
+        border-top: 1px solid $mdlext-light-accordion-header-border-color;
+      }
+    }
+  }
+
+  // Horizontal layout
+  .mdlext-accordion {
+
+    &--horizontal {
+
+      .mdlext-accordion__tab {
+        border-left: 1px solid $mdlext-light-accordion-header-border-color;
+
+        &[aria-selected='true']::after {
+          background-color: $mdlext-light-accordion-header-highlight-color;
+        }
+      }
+      .mdlext-accordion__tabpanel {
+        border-left: 1px solid $mdlext-light-accordion-header-border-color;
+      }
+    }
+  }
+
+  .mdlext-accordion {
+
+    &__panel:first-child > &__tab {
+      // Use container to set outer borders
+      border-top-color: transparent;
+      border-left-color: transparent;
+    }
+  }
+
+  // Making accordion appear disabled.
+  // Note: does not prevent tabbing into a disabled accordion
+  .mdlext-accordion[disabled] {
+    .mdlext-accordion__tab {
+      background-color: $mdlext-light-accordion-header-disabled-color;
+      color: $mdlext-light-accordion-header-secondary-color-disabled;
+
+      > * {
+        color: $mdlext-light-accordion-header-secondary-color-disabled;
+      }
+    }
+    .mdlext-accordion__tabpanel {
+      opacity: 0.8;
+      filter: blur(1px) grayscale(80%);
+    }
+  }
+}
diff --git a/node_modules/mdl-ext/src/color-themes/readme.md b/node_modules/mdl-ext/src/color-themes/readme.md
new file mode 100644
index 0000000..6266567
--- /dev/null
+++ b/node_modules/mdl-ext/src/color-themes/readme.md
@@ -0,0 +1,104 @@
+# Color Themes
+![Color Themes](../../etc/palette.png)
+
+The **color-themes** component demonstrates how you can create your own themes of 
+[material design colors](https://www.google.com/design/spec/style/color.html).
+
+## Introduction
+Material Design Lite provides only one color theme, but in many web designs more than one theme is required, e.g. a 
+dark theme and a light theme. This component provides the necessary SASS files to use two additional color themes in MDL.
+
+### To include a MDLEXT color theme component:
+&nbsp;1. Code a block element, as the "outer" container, intended to hold all of the color theme.
+```html
+<section>
+</section>
+```
+
+&nbsp;2. Add one of the `mdlext-light-color-theme` or `mdlext-dark-color-theme` classes to the block element using the `class` attribute.
+```html
+<section class="mdlext-light-color-theme">
+</section>
+```
+
+&nbsp;3. Add the MDL components that shuld be rendered with the spesified color theme.
+```html
+<section class="mdlext-light-color-theme">
+  <div class="mdl-card mdl-shadow--2dp">
+    <header class="mdl-card__title mdl-color--primary mdl-color-text--primary-contrast">
+      <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+        <i class="material-icons">view_headline</i>
+      </button>
+      <h2 class="mdl-card__title-text">A card with a Color Theme</h2>
+      <div class="mdl-layout-spacer"></div>
+      <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+        <i class="material-icons">share</i>
+      </button>
+    </header>
+    <div class="mdl-card__supporting-text">
+      Some supporting text ...
+    </div>
+    <footer class="mdl-card__actions mdl-card--border">
+      <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+        Read more
+      </a>
+      <div class="mdl-layout-spacer"></div>
+      <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+    </footer>
+  </div>
+  <p>More content ...</p>
+</section>  
+```
+
+### Create your own color theme
+Creating your own color theme is simple. For each of the themes, light or dark, you must modify six SASS variables. 
+The variables defines the primary and accent colors for the theme, and their corresponding contrast colors. 
+
+Start by picking some sensible primary and accent colors from the 
+[material color plaette](https://www.google.com/design/spec/style/color.html#color-color-palette) - or use one of the
+web based platte generators as an aid. The [material palette](http://www.materialpalette.com/) is used for this example.
+ 
+Pick a primary and an accent color from the [material palette](http://www.materialpalette.com/), e.g. grey/yellow.
+Download the SASS version of the palette and translate the variables to the MDLEXT color theme.
+
+The downloaded material palette SASS variables:
+```sass
+$primary-color-dark:   #616161
+$primary-color:        #9E9E9E
+$primary-color-light:  #F5F5F5
+$primary-color-text:   #212121
+$accent-color:         #FFEB3B
+$primary-text-color:   #212121
+$secondary-text-color: #727272
+$divider-color:        #B6B6B6
+```
+
+Open the MDLEXT [color-themes](./_color-themes.scss) SASS file and translate material palette variables to MDLEXT color theme:
+```sass
+$mdlext-light-color-primary:          #9E9E9E;
+$mdlext-light-color-primary-dark:     #616161;
+$mdlext-light-color-primary-light:    #9E9E9E; // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-primary-contrast: #F5F5F5;  
+$mdlext-light-color-accent:           #FFEB3B; 
+$mdlext-light-color-accent-light:     #FFEB3B; // Fallback color. Set to color-primary if fallback is not needed
+$mdlext-light-color-accent-contrast:  #FFFFFF;
+```
+
+Save the modified variables to your own SASS project, recompile and try out your new theme.
+
+There are a few more SASS variables you can modify - and they should be relativeley self explanatory. By default these 
+values are set in accordance with the guidance given in the 
+[material design colors](https://www.google.com/design/spec/style/color.html) guide.
+
+#### Examples
+See the [example code](./snippets/color-themes.html).
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to MDL components. 
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdlext-light-color-theme` | Defines container as an MDLEXT light color theme component | Required on an "outer" block element|
+| `mdlext-dark-color-theme` | Defines container as an MDLEXT dark coolor theme component | Required on an "outer" block element|
diff --git a/node_modules/mdl-ext/src/color-themes/snippets/color-themes.html b/node_modules/mdl-ext/src/color-themes/snippets/color-themes.html
new file mode 100644
index 0000000..1dc8ae5
--- /dev/null
+++ b/node_modules/mdl-ext/src/color-themes/snippets/color-themes.html
@@ -0,0 +1,2769 @@
+<style>
+  .demo-theme-container {
+    margin: 0 auto 32px;
+    /*max-width: 800px;*/
+  }
+
+  .demo-theme-container table.info,
+  .demo-card-grid table.info {
+    width: 100%
+  }
+  .demo-theme-container table.info th,
+  .demo-card-grid table.info th {
+    padding-right: 40px;
+    vertical-align: middle;
+    text-align: left;
+    width: 30%;
+  }
+  .demo-theme-container section,
+  .demo-card-grid section {
+    margin: 0 16px;
+  }
+
+  .demo-badge-grid {
+  }
+  .demo-badge-grid .mdl-cell {
+    text-align: center;
+  }
+  .demo-badge-grid .mdl-cell p {
+    margin-top: 32px;
+  }
+
+  .demo-button-grid {
+  }
+  .demo-button-grid .mdl-cell {
+    text-align: center;
+    padding: 12px 4px;
+  }
+
+  .demo-toggle-grid {
+  }
+  .demo-toggle-grid .mdl-cell p {
+    margin-top: 16px;
+  }
+
+  .demo-slider-grid  {
+  }
+  .demo-slider-grid p {
+    margin-top: 16px;
+  }
+
+  .textfield-demo-container {
+  }
+
+  .textfield-demo-container .mdl-cell {
+    padding: 0 4px 8px 0;
+  }
+
+  .textfield-demo-container .mdl-cell p {
+    margin-bottom: 0;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+  }
+
+
+  .demo-menu {
+    padding-top: 16px;
+    max-width: 300px;
+  }
+  .demo-menu-container {
+    position: relative;
+    width: 100%;
+  }
+  .demo-menu-bar {
+    box-sizing: border-box;
+    height: 64px;
+    width: 100%;
+    padding: 16px;
+  }
+  .demo-menu-background-light {
+    background: white;
+    height: 148px;
+    width: 100%;
+  }
+  .demo-menu-background-dark {
+    background: #212121;
+    height: 148px;
+    width: 100%;
+  }
+
+
+  .mdl-card {
+    width: auto;
+  }
+  .mdl-card__media {
+    margin: 0;
+    text-align: center;
+  }
+  .mdl-card__media > img {
+    max-width: 100%;
+    height: auto;
+  }
+  .mdl-card__supporting-text {
+    width: auto;
+  }
+  .mdl-card__actions {
+    display: flex;
+  }
+
+
+  .borderedfield-demo-container .mdl-cell {
+    padding: 0 4px 8px 0;
+  }
+
+  .borderedfield-demo-container .mdl-cell p {
+    margin-bottom: 0;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+  }
+
+  /* File input example */
+  .mdl-button--file input {
+    cursor: pointer;
+    opacity: 0;
+    width: 1px;
+    height: 1px;
+  }
+
+</style>
+
+
+<datalist id="languages">
+  <option value="HTML">
+  <option value="CSS">
+  <option value="JavaScript">
+  <option value="Java">
+  <option value="Ruby">
+  <option value="PHP">
+  <option value="Go">
+  <option value="Erlang">
+  <option value="Python">
+  <option value="C">
+  <option value="C#">
+  <option value="C++">
+</datalist>
+
+
+<div class="mdl-grid demo-card-grid" style="margin-bottom: 32px;">
+
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone mdlext-light-color-theme">
+    <div class="mdl-card mdl-shadow--2dp">
+      <header class="mdl-card__title mdl-color--primary mdl-color-text--primary-contrast">
+        <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+          <i class="material-icons">view_headline</i>
+        </button>
+        <h2 class="mdl-card__title-text">Light Theme</h2>
+        <div class="mdl-layout-spacer"></div>
+        <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+          <i class="material-icons">share</i>
+        </button>
+      </header>
+      <figure class="mdl-card__media">
+        <img src="./images/_DSC7535-2.jpg" alt="">
+      </figure>
+      <section style="margin-top:16px">
+        <table class="info">
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+            <td class="mdl-color--primary-dark mdl-color-text--primary-contrast">primary dark</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary</th>
+            <td class="mdl-color--primary mdl-color-text--primary-contrast">primary</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">accent</th>
+            <td class="mdl-color--accent mdl-color-text--accent-contrast">accent</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+            <td class="mdl-color--primary-contrast mdl-color-text--primary-dark">primary dark, inverted</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary</th>
+            <td class="mdl-color--primary-contrast mdl-color-text--primary">primary, inverted</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">accent</th>
+            <td class="mdl-color--accent-contrast mdl-color-text--accent">accent, inverted</td>
+          </tr>
+        </table>
+      </section>
+
+      <div class="mdl-card__supporting-text">
+        Card Supporting Text
+      </div>
+
+      <footer class="mdl-card__actions mdl-card--border">
+        <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+          Read more
+        </a>
+        <div class="mdl-layout-spacer"></div>
+        <button class="mdl-button mdl-button--icon"><i class="material-icons">radio</i></button>
+        <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+        <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+      </footer>
+    </div>
+
+  </div>
+
+
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone mdlext-dark-color-theme">
+
+    <div class="mdl-card mdl-shadow--2dp">
+      <header class="mdl-card__title mdl-color--primary mdl-color-text--primary-contrast">
+        <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+          <i class="material-icons">view_headline</i>
+        </button>
+        <h2 class="mdl-card__title-text">Dark Theme</h2>
+        <div class="mdl-layout-spacer"></div>
+        <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+          <i class="material-icons">share</i>
+        </button>
+      </header>
+      <figure class="mdl-card__media">
+        <img src="./images/_DSC7535-2.jpg" alt="">
+      </figure>
+      <section style="margin-top:16px">
+        <table class="info">
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+            <td class="mdl-color--primary-dark mdl-color-text--primary-contrast">primary dark</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary</th>
+            <td class="mdl-color--primary mdl-color-text--primary-contrast">primary</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">accent</th>
+            <td class="mdl-color--accent mdl-color-text--accent-contrast">accent</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+            <td class="mdl-color--primary-contrast mdl-color-text--primary-dark">primary dark, inverted</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">primary</th>
+            <td class="mdl-color--primary-contrast mdl-color-text--primary">primary, inverted</td>
+          </tr>
+          <tr>
+            <th class="mdl-typography--caption-color-contrast">accent</th>
+            <td class="mdl-color--accent-contrast mdl-color-text--accent">accent, inverted</td>
+          </tr>
+        </table>
+      </section>
+
+      <div class="mdl-card__supporting-text">
+        Card Supporting Text
+      </div>
+
+      <footer class="mdl-card__actions mdl-card--border">
+        <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+          Read more
+        </a>
+        <div class="mdl-layout-spacer"></div>
+        <button class="mdl-button mdl-button--icon"><i class="material-icons">radio</i></button>
+        <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">favorite</i></button>
+        <button class="mdl-button mdl-button--icon mdl-button--colored"><i class="material-icons">share</i></button>
+      </footer>
+    </div>
+
+  </div>
+
+</div>
+
+
+
+
+<h2>Light Color Theme</h2>
+
+<div class="demo-theme-container mdlext-light-color-theme">
+
+  <section>
+    <table class="info">
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">.mdl-typography--</th>
+        <td class="mdl-typography--title">Scale &amp; Basic Styles</td>
+      </tr>
+      <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>
+
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-dark mdl-color-text--primary-contrast">mdl-color--primary-dark mdl-color-text--primary-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary mdl-color-text--primary-contrast">mdl-color--primary mdl-color-text--primary-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent mdl-color-text--accent-contrast">mdl-color--accent mdl-color-text--accent-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary-dark">mdl-color--primary-contrast mdl-color-text--primary-dark</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary">mdl-color-text--primary</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent-contrast mdl-color-text--accent">mdl-color--accent-contrast mdl-color-text--accent</td>
+      </tr>
+    </table>
+  </section>
+
+  <section>
+    <h1>Base font</h1>
+
+    <p>Material Design Lite start’s with a base font of</p>
+    <ul>
+      <li>A size of 14px</li>
+      <li>A weight of 400</li>
+      <li>A line height of 20px</li>
+    </ul>
+
+    <p class="mdl-typography--body-1">Regular 14px (Device), Regular 13px (Desktop)</p>
+    <p class="mdl-typography--body-1-force-preferred-font">Regular 14px (Device), Regular 13px (Desktop)</p>
+    <p class="mdl-typography--body-2">Medium 14px (Device), Medium 13px (Desktop)</p>
+    <p class="mdl-typography--body-2-color-contrast">Body with color contrast</p>
+    <p class="mdl-typography--body-2-force-preferred-font">Medium 14px (Device), Medium 13px (Desktop)</p>
+    <p><a href="#" onclick="return false">An anchor</a></p>
+
+    <h1>Headings</h1>
+    <h1>h1 (56px) <small>Subtitle</small></h1>
+    <h2>h2 (45px) <small>Subtitle</small></h2>
+    <h3>h3 (34px) <small>Subtitle</small></h3>
+    <h4>h4 (24px) <small>Subtitle</small></h4>
+    <h5>h5 (20px) <small>Subtitle</small></h5>
+    <h6>h6 (16px) <small>Subtitle</small></h6>
+  </section>
+
+
+  <!-- textfields -->
+  <section class = "textfield-demo-container">
+
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" list="languages" placeholder="Select a programming language" required>
+          <label class="mdl-textfield__label">Programming Language</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" disabled value="123">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <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="mdl-expandable-demo3">
+            <i class="material-icons">search</i>
+          </label>
+          <div class="mdl-textfield__expandable-holder">
+            <input class="mdl-textfield__input" type="text" name="q" value="" id="mdl-expandable-demo3" pattern=".{3,}" />
+            <label class="mdl-textfield__label" for="mdl-expandable-demo1">Expandable Input</label>
+          </div>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--8-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--full-width mdl-textfield--floating-label">
+          <textarea class="mdl-textfield__input" rows= "3"></textarea>
+          <label class="mdl-textfield__label">Text lines...</label>
+        </div>
+      </div>
+
+    </div>
+
+  </section>
+
+
+  <!-- Selectfield -->
+  <section style="margin-bottom: 16px;">
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield">
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+    </div>
+  </section>
+
+
+  <!-- bordered fields -->
+  <section class="mdlext-bordered-fields" style="margin-top:16px;">
+
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" list="languages" placeholder="Select a language" required>
+          <label class="mdl-textfield__label">Programming language</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Numeric with floating label</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" disabled value="123">
+          <label class="mdl-textfield__label" >Disabled floating label</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right ">
+          <input class="mdl-textfield__input" type="text" id="uploadfile12" readonly>
+          <label class="mdl-textfield__label">File (work in progress)</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--primary mdl-button--icon mdl-button--file" for="uploadfile12">
+            <i class="material-icons">attach_file</i>
+            <input type="file" id="uploadBtn12">
+          </label>
+        </div>
+        <!--
+          // Need a script to work properly - something like this
+        -->
+        <script>
+          (function() {
+            'use strict';
+            document.querySelector('#uploadBtn12').addEventListener('change', function() {
+              var n = document.querySelector("#uploadfile12");
+              n.value = this.files[0].name;
+              n.parentNode.classList.add('is-dirty');
+            });
+          }());
+        </script>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text" disabled>
+          <label class="mdl-textfield__label">Text, disabled</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text" disabled>
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+    </div>
+
+    <fieldset disabled>
+      <legend>Disabled fieldset</legend>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+          <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+        <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+        <label class="mdl-textfield__label">Number...</label>
+        <span class="mdl-textfield__error">Input is not a number!</span>
+      </div>
+
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+        <i class="material-icons">radio</i>
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">settings_voice</i>
+        </label>
+      </div>
+    </fieldset>
+
+  </section>
+
+
+  <!-- Badges -->
+  <section style="margin-top:16px">
+    <div class="mdl-grid demo-badge-grid">
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="mdl-badge" data-badge="4">Inbox</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="material-icons mdl-badge" data-badge="1">account_box</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="mdl-badge" data-badge="♥">Mood</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="material-icons mdl-badge" data-badge="♥">account_box</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <a href="#" onclick="return false" class="mdl-badge" data-badge="5">Inbox</a>
+      </div>
+    </div>
+  </section>
+
+  <!-- Buttons -->
+  <section>
+    <div class="mdl-grid demo-button-grid">
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab" disabled>
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab" disabled>
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised">
+          Raised
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised" disabled>
+          Disabled
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
+          Colored
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
+          Accent
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored mdl-js-ripple-effect">
+          <i class="material-icons">settings</i>&nbsp;Settings
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect animated bounce">
+          <i class="material-icons">favorite</i>&nbsp;Fav
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button">
+          Flat
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button" disabled>
+          Disabled
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--primary">
+          Colored
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--accent">
+          Accent
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button">
+          <i class="material-icons">snooze</i>&nbsp;Ring, ring...
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">mood</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+          <i class="material-icons">mood</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-color--lime mdl-button--accent">
+          <i class="material-icons">cloud</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-color--deep-orange-100 mdl-js-ripple-effect">
+          <i class="material-icons">settings</i>&nbsp;Settings
+        </button>
+      </div>
+    </div>
+  </section>
+
+
+  <!-- Toggles -->
+  <section>
+    <div class="mdl-grid demo-toggle-grid">
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input" checked>
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input">
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input" checked disabled>
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options30" value="1" checked>
+          <span class="mdl-radio__label">First</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options30" value="2">
+          <span class="mdl-radio__label">Second</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options30" value="3" disabled>
+          <span class="mdl-radio__label">Third</span>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input" checked>
+          <i class="mdl-icon-toggle__label material-icons">format_bold</i>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input">
+          <i class="mdl-icon-toggle__label material-icons">format_italic</i>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input" disabled>
+          <i class="mdl-icon-toggle__label material-icons">format_italic</i>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input" checked>
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input">
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input" disabled>
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+    </div>
+  </section>
+
+
+  <!-- Sliders -->
+  <section>
+    <div class="mdl-grid demo-slider-grid">
+      <div class="mdl-cell mdl-cell--4-col mdl-cell--2-col-phone">
+        <!-- Default Slider -->
+        <input class="mdl-slider mdl-js-slider" type="range" min="0" max="100" value="0">
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col mdl-cell--2-col-phone">
+        <!-- Slider with Starting Value -->
+        <input class="mdl-slider mdl-js-slider" type="range" min="0" max="100" value="25">
+      </div>
+    </div>
+  </section>
+
+
+  <!-- Data table -->
+  <section>
+    <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">Materials</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>
+  </section>
+
+
+  <!-- Menu -->
+  <!--
+  <section>
+    <div class="demo-menu demo-menu__lower-left">
+      <div class="demo-menu-container mdl-shadow--2dp mdl-color--primary-dark mdl-color-text--primary-contrast">
+        <div class="demo-menu-bar">
+          <button id="demo-menu-lower-left-30" 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-30">
+            <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>
+
+          <span>Menu lower left</span>
+
+        </div>
+        <div class="demo-menu-background-light"></div>
+      </div>
+    </div>
+  </section>
+  -->
+
+  <!-- Menu button -->
+  <section style="padding-bottom:16px">
+    <h4>Menu button</h4>
+
+    <button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+      <i class="material-icons">gesture</i>
+      <span class="mdlext-menu-button__caption">Select</span>
+      <i class="material-icons mdlext-aria-expanded-more-less"></i>
+    </button>
+    <ul class="mdlext-menu mdlext-light-color-theme" hidden >
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">info</i>
+        <span class="mdlext-menu__item__caption">Menu item #1</span>
+      </li>
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">help_outline</i>
+        <span class="mdlext-menu__item__caption">Menu item #2. A long text to check ellipsis overflow 0123456789</span>
+        <i class="material-icons md-18">radio</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item" disabled>
+        <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+        <i class="material-icons md-18">accessibility</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #IV</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #V</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #VI</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #VII</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        Menu item #n
+      </li>
+    </ul>
+  </section>
+
+</div>
+
+
+
+<!-- Dark theme -->
+<h2>Dark Color Theme</h2>
+
+
+<div class="demo-theme-container mdlext-dark-color-theme">
+
+  <section>
+    <table class="info">
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">.mdl-typography--</th>
+        <td class="mdl-typography--title">Scale &amp; Basic Styles</td>
+      </tr>
+      <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>
+
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-dark mdl-color-text--primary-contrast">mdl-color--primary-dark mdl-color-text--primary-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary mdl-color-text--primary-contrast">mdl-color--primary mdl-color-text--primary-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent mdl-color-text--accent-contrast">mdl-color--accent mdl-color-text--accent-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary-dark">mdl-color--primary-contrast mdl-color-text--primary-dark</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary">mdl-color-text--primary</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent-contrast mdl-color-text--accent">mdl-color--accent-contrast mdl-color-text--accent</td>
+      </tr>
+    </table>
+  </section>
+
+  <section>
+    <h1>Base font</h1>
+
+    <p>Material Design Lite start’s with a base font of</p>
+    <ul>
+      <li>A size of 14px</li>
+      <li>A weight of 400</li>
+      <li>A line height of 20px</li>
+    </ul>
+
+    <p class="mdl-typography--body-1">Regular 14px (Device), Regular 13px (Desktop)</p>
+    <p class="mdl-typography--body-1-force-preferred-font">Regular 14px (Device), Regular 13px (Desktop)</p>
+    <p class="mdl-typography--body-2">Medium 14px (Device), Medium 13px (Desktop)</p>
+    <p class="mdl-typography--body-2-color-contrast">Body with color contrast</p>
+    <p class="mdl-typography--body-2-force-preferred-font">Medium 14px (Device), Medium 13px (Desktop)</p>
+    <p><a href="#" onclick="return false">An anchor</a></p>
+
+    <h1>Headings</h1>
+    <h1>h1 (56px) <small>Subtitle</small></h1>
+    <h2>h2 (45px) <small>Subtitle</small></h2>
+    <h3>h3 (34px) <small>Subtitle</small></h3>
+    <h4>h4 (24px) <small>Subtitle</small></h4>
+    <h5>h5 (20px) <small>Subtitle</small></h5>
+    <h6>h6 (16px) <small>Subtitle</small></h6>
+  </section>
+
+
+  <!-- textfields -->
+  <section class = "textfield-demo-container">
+
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" list="languages" placeholder="Select a programming language" required>
+          <label class="mdl-textfield__label">Programming Language</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" disabled value="123">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <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="mdl-expandable-demo2">
+            <i class="material-icons">search</i>
+          </label>
+          <div class="mdl-textfield__expandable-holder">
+            <input class="mdl-textfield__input" type="text" name="q" value="" id="mdl-expandable-demo2" pattern=".{3,}" />
+            <label class="mdl-textfield__label" for="mdl-expandable-demo2">Expandable Input</label>
+          </div>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--8-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--full-width mdl-textfield--floating-label">
+          <textarea class="mdl-textfield__input" rows= "3" ></textarea>
+          <label class="mdl-textfield__label">Text lines...</label>
+        </div>
+      </div>
+
+    </div>
+
+  </section>
+
+
+
+  <!-- Selectfield -->
+  <section style="margin-bottom: 16px;">
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield">
+          <select class="mdlext-selectfield__select" name="mdl-professsion3">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select" name="mdl-professsion20">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select" name="mdl-professsion22" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+    </div>
+  </section>
+
+
+
+  <!-- bordered fields -->
+  <section class="mdlext-bordered-fields" style="margin-top:16px;">
+
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" list="languages" placeholder="Select a language" required>
+          <label class="mdl-textfield__label">Programming language</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Numeric with floating label</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" disabled value="123">
+          <label class="mdl-textfield__label" >Disabled floating label</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right ">
+          <input class="mdl-textfield__input" type="text" id="uploadfile22" readonly>
+          <label class="mdl-textfield__label">File (work in progress)</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--primary mdl-button--icon mdl-button--file" for="uploadfile22">
+            <i class="material-icons">attach_file</i>
+            <input type="file" id="uploadBtn22">
+          </label>
+        </div>
+        <!--
+          // Need a script to work properly - something like this
+        -->
+        <script>
+          (function() {
+            'use strict';
+            document.querySelector('#uploadBtn22').addEventListener('change', function() {
+              var n = document.querySelector("#uploadfile22");
+              n.value = this.files[0].name;
+              n.parentNode.classList.add('is-dirty');
+            });
+          }());
+        </script>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text" disabled>
+          <label class="mdl-textfield__label">Text, disabled</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text" disabled>
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+    </div>
+
+    <fieldset disabled>
+      <legend>Disabled fieldset</legend>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+          <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+        <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+        <label class="mdl-textfield__label">Number...</label>
+        <span class="mdl-textfield__error">Input is not a number!</span>
+      </div>
+
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+        <i class="material-icons">radio</i>
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">Text...</label>
+        <label class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">settings_voice</i>
+        </label>
+      </div>
+    </fieldset>
+
+  </section>
+
+
+  <!-- Badges -->
+  <section style="margin-top:16px">
+    <div class="mdl-grid demo-badge-grid">
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="mdl-badge" data-badge="4">Inbox</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="material-icons mdl-badge" data-badge="1">account_box</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="mdl-badge" data-badge="♥">Mood</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="material-icons mdl-badge" data-badge="♥">account_box</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <a href="#" onclick="return false" class="mdl-badge" data-badge="5">Inbox</a>
+      </div>
+    </div>
+
+  </section>
+
+
+  <!-- Buttons -->
+  <section>
+    <div class="mdl-grid demo-button-grid">
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab" disabled>
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab" disabled>
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised">
+          Raised
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised" disabled>
+          Disabled
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
+          Colored
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
+          Accent
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored mdl-js-ripple-effect">
+          <i class="material-icons">settings</i>&nbsp;Settings
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect animated bounce">
+          <i class="material-icons">favorite</i>&nbsp;Fav
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button">
+          Flat
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button" disabled>
+          Disabled
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--primary">
+          Colored
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--accent">
+          Accent
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button">
+          <i class="material-icons">snooze</i>&nbsp;Ring, ring...
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">mood</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+          <i class="material-icons">mood</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-color--lime mdl-button--accent">
+          <i class="material-icons">cloud</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-color--deep-orange-100 mdl-js-ripple-effect">
+          <i class="material-icons">settings</i>&nbsp;Settings
+        </button>
+      </div>
+    </div>
+  </section>
+
+  <!-- Toggles -->
+  <section>
+    <div class="mdl-grid demo-toggle-grid">
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input" checked>
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input">
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input" checked disabled>
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options2" value="1" checked>
+          <span class="mdl-radio__label">First</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options2" value="2">
+          <span class="mdl-radio__label">Second</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options2" value="3" disabled>
+          <span class="mdl-radio__label">Third</span>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input" checked>
+          <i class="mdl-icon-toggle__label material-icons">format_bold</i>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input">
+          <i class="mdl-icon-toggle__label material-icons">format_italic</i>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input" disabled>
+          <i class="mdl-icon-toggle__label material-icons">format_italic</i>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input" checked>
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input">
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input" disabled>
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+    </div>
+  </section>
+
+
+
+  <!-- Sliders -->
+  <section>
+    <div class="mdl-grid demo-slider-grid">
+      <div class="mdl-cell mdl-cell--4-col mdl-cell--2-col-phone">
+        <!-- Default Slider -->
+        <input class="mdl-slider mdl-js-slider" type="range" min="0" max="100" value="0">
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col mdl-cell--2-col-phone">
+        <!-- Slider with Starting Value -->
+        <input class="mdl-slider mdl-js-slider" type="range" min="0" max="100" value="25">
+      </div>
+    </div>
+  </section>
+
+
+  <!-- Data table -->
+  <section>
+    <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">Materials</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>
+  </section>
+
+
+  <!-- Menu -->
+  <!--
+  <section>
+    <div class="demo-menu">
+      <div class="demo-menu-container mdl-shadow--2dp mdl-color--primary-dark mdl-color-text--primary-contrast">
+        <div class="demo-menu-background-dark"></div>
+        <div class="demo-menu-bar">
+          <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"
+              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>
+
+          <span>Menu top left</span>
+        </div>
+      </div>
+    </div>
+  </section>
+  -->
+
+  <!-- Menu button -->
+  <section style="padding-bottom:16px">
+    <h4>Menu button</h4>
+    <button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+      <i class="material-icons">gesture</i>
+      <span class="mdlext-menu-button__caption">Select</span>
+      <i class="material-icons mdlext-aria-expanded-more-less"></i>
+    </button>
+    <ul class="mdlext-menu mdlext-dark-color-theme" hidden >
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">info</i>
+        <span class="mdlext-menu__item__caption">Menu item #1</span>
+      </li>
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">help_outline</i>
+        <span class="mdlext-menu__item__caption">Menu item #2. A long text to check ellipsis overflow 0123456789</span>
+        <i class="material-icons md-18">radio</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item" disabled>
+        <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+        <i class="material-icons md-18">accessibility</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #IV</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #V</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #VI</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #VII</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        Menu item #n
+      </li>
+    </ul>
+  </section>
+
+
+</div>
+
+
+
+<h2>Default Color Theme</h2>
+
+<!-- Default theme -->
+<div class="demo-theme-container">
+
+  <section>
+    <table class="info">
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">.mdl-typography--</th>
+        <td class="mdl-typography--title">Scale &amp; Basic Styles</td>
+      </tr>
+      <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>
+
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-dark mdl-color-text--primary-contrast">mdl-color--primary-dark mdl-color-text--primary-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary mdl-color-text--primary-contrast">mdl-color--primary mdl-color-text--primary-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent mdl-color-text--accent-contrast">mdl-color--accent mdl-color-text--accent-contrast</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary-dark</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary-dark">mdl-color--primary-contrast mdl-color-text--primary-dark</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">primary</th>
+        <td class="mdl-color--primary-contrast mdl-color-text--primary">mdl-color-text--primary</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">accent</th>
+        <td class="mdl-color--accent-contrast mdl-color-text--accent">mdl-color--accent-contrast mdl-color-text--accent</td>
+      </tr>
+    </table>
+  </section>
+
+  <section>
+    <h1>Base font</h1>
+
+    <p>Material Design Lite start’s with a base font of</p>
+    <ul>
+      <li>A size of 14px</li>
+      <li>A weight of 400</li>
+      <li>A line height of 20px</li>
+    </ul>
+
+    <p class="mdl-typography--body-1">Regular 14px (Device), Regular 13px (Desktop)</p>
+    <p class="mdl-typography--body-1-force-preferred-font">Regular 14px (Device), Regular 13px (Desktop)</p>
+    <p class="mdl-typography--body-2">Medium 14px (Device), Medium 13px (Desktop)</p>
+    <p class="mdl-typography--body-2-color-contrast">Body with color contrast</p>
+    <p class="mdl-typography--body-2-force-preferred-font">Medium 14px (Device), Medium 13px (Desktop)</p>
+    <p><a href="#" onclick="return false">An anchor</a></p>
+
+    <h1>Headings</h1>
+    <h1>h1 (56px) <small>Subtitle</small></h1>
+    <h2>h2 (45px) <small>Subtitle</small></h2>
+    <h3>h3 (34px) <small>Subtitle</small></h3>
+    <h4>h4 (24px) <small>Subtitle</small></h4>
+    <h5>h5 (20px) <small>Subtitle</small></h5>
+    <h6>h6 (16px) <small>Subtitle</small></h6>
+  </section>
+
+
+  <!-- textfields -->
+  <section class = "textfield-demo-container">
+
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" list="languages" placeholder="Select a programming language" required>
+          <label class="mdl-textfield__label">Programming Language</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" disabled value="123">
+          <label class="mdl-textfield__label">Number...</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <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="mdl-expandable-demo1">
+            <i class="material-icons">search</i>
+          </label>
+          <div class="mdl-textfield__expandable-holder">
+            <input class="mdl-textfield__input" type="text" name="q" value="" id="mdl-expandable-demo1" pattern=".{3,}" />
+            <label class="mdl-textfield__label" for="mdl-expandable-demo1">Expandable Input</label>
+          </div>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--8-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--full-width mdl-textfield--floating-label">
+          <textarea class="mdl-textfield__input" rows= "3"></textarea>
+          <label class="mdl-textfield__label">Text lines...</label>
+        </div>
+      </div>
+
+    </div>
+
+  </section>
+
+
+  <!-- Selectfield -->
+  <section style="margin-bottom: 16px;">
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield">
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+    </div>
+  </section>
+
+
+
+  <!-- bordered fields -->
+  <section class="mdlext-bordered-fields" style="margin-top:16px;">
+
+    <div class="mdl-grid mdl-grid--no-spacing">
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" list="languages" placeholder="Select a language" required>
+          <label class="mdl-textfield__label">Programming language</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?">
+          <label class="mdl-textfield__label">Numeric with floating label</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+          <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" disabled value="123">
+          <label class="mdl-textfield__label" >Disabled floating label</label>
+          <span class="mdl-textfield__error">Input is not a number!</span>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right ">
+          <input class="mdl-textfield__input" type="text" id="uploadfile33" readonly>
+          <label class="mdl-textfield__label">File (work in progress)</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--primary mdl-button--icon mdl-button--file" for="uploadfile33">
+            <i class="material-icons">attach_file</i>
+            <input type="file" id="uploadBtn33">
+          </label>
+        </div>
+        <!--
+          // Need a script to work properly - something like this
+        -->
+        <script>
+          (function() {
+            'use strict';
+            document.querySelector('#uploadBtn33').addEventListener('change', function() {
+              var n = document.querySelector("#uploadfile33");
+              n.value = this.files[0].name;
+              n.parentNode.classList.add('is-dirty');
+            });
+          }());
+        </script>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text" disabled>
+          <label class="mdl-textfield__label">Text, disabled</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+          <select class="mdlext-selectfield__select">
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label mdlext-bordered-fields__icon-left">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+          <select class="mdlext-selectfield__select" disabled>
+            <option value=""></option>
+            <option value="option1">option 1</option>
+            <option value="option2">option 2</option>
+            <option value="option3">option 3</option>
+            <option value="option4">option 4</option>
+            <option value="option5">option 5</option>
+          </select>
+          <label class="mdlext-selectfield__label">Profession</label>
+        </div>
+      </div>
+
+
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right">
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <i class="material-icons">fingerprint</i>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">phone</i>
+          </label>
+
+          <input class="mdl-textfield__input" type="text" disabled>
+          <label class="mdl-textfield__label">Text...</label>
+
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col">
+        <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-left mdlext-bordered-fields__icon-right">
+          <i class="material-icons">radio</i>
+          <input class="mdl-textfield__input" type="text">
+          <label class="mdl-textfield__label">Text...</label>
+          <label class="mdl-button mdl-js-button mdl-button--icon">
+            <i class="material-icons">settings_voice</i>
+          </label>
+        </div>
+      </div>
+
+    </div>
+
+  </section>
+
+
+  <!-- Badges -->
+  <section style="margin-top:16px">
+    <div class="mdl-grid demo-badge-grid">
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="mdl-badge" data-badge="4">Inbox</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="material-icons mdl-badge" data-badge="1">account_box</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="mdl-badge" data-badge="♥">Mood</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <span class="material-icons mdl-badge" data-badge="♥">account_box</span>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <a href="#" onclick="return false" class="mdl-badge" data-badge="5">Inbox</a>
+      </div>
+    </div>
+  </section>
+
+  <!-- Buttons -->
+  <section>
+    <div class="mdl-grid demo-button-grid">
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab" disabled>
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab">
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab" disabled>
+          <i class="material-icons">add</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised">
+          Raised
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised" disabled>
+          Disabled
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
+          Colored
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
+          Accent
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored mdl-js-ripple-effect">
+          <i class="material-icons">settings</i>&nbsp;Settings
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect animated bounce">
+          <i class="material-icons">favorite</i>&nbsp;Fav
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button">
+          Flat
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button" disabled>
+          Disabled
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--primary">
+          Colored
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--accent">
+          Accent
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button">
+          <i class="material-icons">snooze</i>&nbsp;Ring, ring...
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--icon">
+          <i class="material-icons">mood</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+          <i class="material-icons">mood</i>
+        </button>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--fab mdl-color--lime mdl-button--accent">
+          <i class="material-icons">cloud</i>
+        </button>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col mdl-cell--middle">
+        <button class="mdl-button mdl-js-button mdl-button--raised mdl-color--deep-orange-100 mdl-js-ripple-effect">
+          <i class="material-icons">settings</i>&nbsp;Settings
+        </button>
+      </div>
+    </div>
+  </section>
+
+
+  <!-- Toggles -->
+  <section>
+    <div class="mdl-grid demo-toggle-grid">
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input" checked>
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input">
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-checkbox__input" checked disabled>
+          <span class="mdl-checkbox__label">Checkbox</span>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options" value="1" checked>
+          <span class="mdl-radio__label">First</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options" value="2">
+          <span class="mdl-radio__label">Second</span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect">
+          <input type="radio" class="mdl-radio__button" name="options" value="3" disabled>
+          <span class="mdl-radio__label">Third</span>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input" checked>
+          <i class="mdl-icon-toggle__label material-icons">format_bold</i>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input">
+          <i class="mdl-icon-toggle__label material-icons">format_italic</i>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-icon-toggle__input" disabled>
+          <i class="mdl-icon-toggle__label material-icons">format_italic</i>
+        </label>
+      </div>
+
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input" checked>
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input">
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+      <div class="mdl-cell mdl-cell--2-col">
+        <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+          <input type="checkbox" class="mdl-switch__input" disabled>
+          <span class="mdl-switch__label"></span>
+        </label>
+      </div>
+    </div>
+  </section>
+
+
+  <!-- Sliders -->
+  <section>
+    <div class="mdl-grid demo-slider-grid">
+      <div class="mdl-cell mdl-cell--4-col mdl-cell--2-col-phone">
+        <!-- Default Slider -->
+        <input class="mdl-slider mdl-js-slider" type="range" min="0" max="100" value="0">
+      </div>
+
+      <div class="mdl-cell mdl-cell--4-col mdl-cell--2-col-phone">
+        <!-- Slider with Starting Value -->
+        <input class="mdl-slider mdl-js-slider" type="range" min="0" max="100" value="25">
+      </div>
+    </div>
+  </section>
+
+
+  <!-- Data table -->
+  <section>
+    <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">Materials</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>
+  </section>
+
+
+  <!-- Menu -->
+  <!--
+  <section>
+    <div class="demo-menu demo-menu__lower-left">
+      <div class="demo-menu-container mdl-shadow--2dp mdl-color--primary-dark mdl-color-text--primary-contrast">
+        <div class="demo-menu-bar">
+          <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">Another Action</li>
+            <li disabled class="mdl-menu__item">Disabled Action</li>
+            <li class="mdl-menu__item">Yet Another Action</li>
+          </ul>
+
+          <span>Menu lower left</span>
+
+        </div>
+        <div class="demo-menu-background-light"></div>
+      </div>
+    </div>
+  </section>
+  -->
+
+  <!-- Menu button -->
+  <section style="padding-bottom:16px">
+    <h4>Menu button</h4>
+    <button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+      <i class="material-icons">gesture</i>
+      <span class="mdlext-menu-button__caption">Select</span>
+      <i class="material-icons mdlext-aria-expanded-more-less"></i>
+    </button>
+    <ul class="mdlext-menu" hidden >
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">info</i>
+        <span class="mdlext-menu__item__caption">Menu item #1</span>
+      </li>
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">help_outline</i>
+        <span class="mdlext-menu__item__caption">Menu item #2. A long text to check ellipsis overflow 0123456789</span>
+        <i class="material-icons md-18">radio</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item" disabled>
+        <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+        <i class="material-icons md-18">accessibility</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #IV</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #V</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #VI</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #VII</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        Menu item #n
+      </li>
+    </ul>
+  </section>
+
+</div>
+
+
diff --git a/node_modules/mdl-ext/src/demo/accordion.html b/node_modules/mdl-ext/src/demo/accordion.html
new file mode 100644
index 0000000..6a65bda
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/accordion.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Accordion</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/accordion/snippets/accordion.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Accordion';
+      }
+    });
+  }());
+</script>
+
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/assets/android-desktop.png b/node_modules/mdl-ext/src/demo/assets/android-desktop.png
new file mode 100644
index 0000000..f4408f5
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/assets/android-desktop.png
Binary files differ
diff --git a/node_modules/mdl-ext/src/demo/assets/favicon.png b/node_modules/mdl-ext/src/demo/assets/favicon.png
new file mode 100644
index 0000000..11ec0b5
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/assets/favicon.png
Binary files differ
diff --git a/node_modules/mdl-ext/src/demo/assets/ios-desktop.png b/node_modules/mdl-ext/src/demo/assets/ios-desktop.png
new file mode 100644
index 0000000..ac65454
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/assets/ios-desktop.png
Binary files differ
diff --git a/node_modules/mdl-ext/src/demo/assets/welcome_card.jpg b/node_modules/mdl-ext/src/demo/assets/welcome_card.jpg
new file mode 100644
index 0000000..8003e3a
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/assets/welcome_card.jpg
Binary files differ
diff --git a/node_modules/mdl-ext/src/demo/bordered-fields.html b/node_modules/mdl-ext/src/demo/bordered-fields.html
new file mode 100644
index 0000000..f1b2dae
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/bordered-fields.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Bordered Fields</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/bordered-fields/snippets/bordered-fields.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Bordered Fields';
+      }
+    });
+  }());
+</script>
+
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/carousel.html b/node_modules/mdl-ext/src/demo/carousel.html
new file mode 100644
index 0000000..ddd66e0
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/carousel.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Carousel</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/carousel/snippets/carousel.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Carousel';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/chrome-ripple-issue.html b/node_modules/mdl-ext/src/demo/chrome-ripple-issue.html
new file mode 100644
index 0000000..363a295
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/chrome-ripple-issue.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <title>Chrome Ripple Issue</title>
+  <!-- styles -->
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en">
+  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+  <link rel="stylesheet" href="https://code.getmdl.io/1.2.1/material.indigo-pink.min.css">
+</head>
+<body>
+<!-- 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" style="padding: 128px 0 0 32px"><!-- Your content goes here -->
+
+      <h2>Ripple Issue</h2>
+      <ul>
+        <li>What MDL Version: material-design-lite-1.2.1</li>
+        <li>What browser(s) is this bug affecting (including version)? Chrome Version 53.0.2785.116 (64-bit)</li>
+        <li>What OS (and version) are you using? OSX, 10.11.6</li>
+        <li>What are the steps to reproduce the bug?
+          <ol>
+            <li>Resize browser until a scrollbar appears</li>
+            <li>Scroll the menu button into view</li>
+            <li>It's important to scroll, at least some pixels, to see the effect of this issue</li>
+            <li>Click the button to open the menu</li>
+            <li>The position of the content changes position while button ripple is animatings</li>
+            <li>Click on a menu item to close the menu</li>
+            <li>The position of the content changes while menu ripple is animating</li>
+          </ol>
+        </li>
+        <li>What is the expected behavior? The position of the should stay fixed</li>
+        <li>What is the actual behavior? The position of the page content changes</li>
+      </ul>
+
+      <div style="margin: 32px 0 640px 32px;">
+        <p><strong>Click the button</strong></p>
+        <button id="demo-menu-lower-left" style="height:46px; width:46px;"
+                class="mdl-button mdl-js-button mdl-button--icon mdl-js-ripple-effect">
+          <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>
+      </div>
+
+      <p>Some text</p>
+
+    </div>
+  </main>
+</div>
+<script src="https://code.getmdl.io/1.2.1/material.min.js" type="text/javascript" charset="utf-8"></script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/collapsible.html b/node_modules/mdl-ext/src/demo/collapsible.html
new file mode 100644
index 0000000..c685333
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/collapsible.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Menu Button</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/collapsible/snippets/collapsible.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Collapsible';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/color-themes.html b/node_modules/mdl-ext/src/demo/color-themes.html
new file mode 100644
index 0000000..390e0b3
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/color-themes.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Color Themes</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/color-themes/snippets/color-themes.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Color Themes';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/etc/buildpages.js b/node_modules/mdl-ext/src/demo/etc/buildpages.js
new file mode 100644
index 0000000..4671609
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/etc/buildpages.js
@@ -0,0 +1,15 @@
+'use strict';
+
+// TODO: Automate this. Use Gulp
+const posthtml = require('posthtml');
+const html = require('fs').readFileSync('partials/lightbox.html').toString();
+
+posthtml()
+  .use(require('posthtml-include')({ encoding: 'utf-8', root: 'partials/' }))
+  .process(html /*, options */)
+  .then(function(result) {
+    console.log(result.html);
+  })
+  .catch(function(error) {
+    console.error(error);
+  });
diff --git a/node_modules/mdl-ext/src/demo/etc/mdl-basic-component.html b/node_modules/mdl-ext/src/demo/etc/mdl-basic-component.html
new file mode 100644
index 0000000..cd4d22f
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/etc/mdl-basic-component.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <title>A basic MDL component</title>
+  <link rel="stylesheet" href="../node_modules/material-design-lite/material.css" />
+</head>
+<body>
+  <div id="mount">
+    <div class="mdl-basic mdl-js-basic mdl-js-ripple-effect">
+      <p>My basic MDL component</p>
+    </div>
+  </div>
+  <script type="text/javascript" src="../node_modules/material-design-lite/material.js" charset="utf-8"></script>
+  <script type="text/javascript" src="./mdl-basic-component.js" charset="utf-8"></script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/etc/mdl-basic-component.js b/node_modules/mdl-ext/src/demo/etc/mdl-basic-component.js
new file mode 100644
index 0000000..05db9c1
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/etc/mdl-basic-component.js
@@ -0,0 +1,79 @@
+(function() {
+  'use strict';
+
+  /**
+   * https://github.com/google/material-design-lite/issues/4205
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  const MaterialBasic = function MaterialBasic(element) {
+    // Stores the element.
+    this.element_ = element;
+
+    console.log('***** ctor', this.element_.classList, 'data-upgraded', this.element_.getAttribute('data-upgraded'));
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialBasic'] = MaterialBasic;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string}
+   * @private
+   */
+  MaterialBasic.prototype.Constant_ = {
+    RIPPLE_COMPONENT: 'MaterialRipple'
+  };
+
+  /**
+   * 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
+   */
+  MaterialBasic.prototype.CssClasses_ = {
+    IS_UPGRADED: 'is-upgraded',
+    JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'
+  };
+
+  /**
+   * Initialize component
+   */
+  MaterialBasic.prototype.init = function() {
+    console.log('***** init', this.element_.classList, 'data-upgraded', this.element_.getAttribute('data-upgraded'));
+
+    if (this.element_) {
+      if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {
+        this.element_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT_IGNORE_EVENTS);
+      }
+
+      // Do the init required for this component to work
+
+      // Set upgraded flag
+      this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
+    }
+  };
+
+  /**
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialBasic.prototype.mdlDowngrade_ = function() {
+    'use strict';
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  /* jshint undef:false */
+  componentHandler.register({
+    constructor: MaterialBasic,
+    classAsString: 'MaterialBasic',
+    cssClass: 'mdl-js-basic'
+  });
+})();
diff --git a/node_modules/mdl-ext/src/demo/etc/mdl-iframe-loader.js b/node_modules/mdl-ext/src/demo/etc/mdl-iframe-loader.js
new file mode 100644
index 0000000..abade92
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/etc/mdl-iframe-loader.js
@@ -0,0 +1,100 @@
+'use strict';
+
+/**
+ * Inject required CSS and JS into html fragment loaded into an <iframe>
+ * @type {{}}
+ */
+var mdlIframeLoader = {};
+(function(self) {
+
+  // The CSS and JS needed to run MDL snippets in an <iframe>
+
+  // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
+  try {
+    new window.CustomEvent('test');
+  } catch(e) {
+    var CustomEvent = function(event, params) {
+      var evt;
+      params = params || {
+        bubbles: false,
+        cancelable: false,
+        detail: undefined
+      };
+
+      evt = document.createEvent('CustomEvent');
+      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+      return evt;
+    };
+
+    CustomEvent.prototype = window.Event.prototype;
+    window.CustomEvent = CustomEvent; // expose definition to window
+  }
+
+  var docs = [
+    { 'type': 'css', 'id': 'font-roboto-css',     'src': 'https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en' },
+    { 'type': 'css', 'id': 'material-icon-css',   'src': 'https://fonts.googleapis.com/icon?family=Material+Icons' },
+    { 'type': 'css', 'id': 'dialog-polyfill-css', 'src': 'demo/styles/dialog-polyfill.css' },
+    { 'type': 'css', 'id': 'material-css',        'src': 'https://code.getmdl.io/1.1.3/material.grey-orange.min.css' },
+    { 'type': 'css', 'id': 'mdlext-css',          'src': 'lib/mdl-ext-eqjs.css' },
+    { 'type': 'css', 'id': 'demo-css',            'src': 'demo/styles/demo.css' },
+    { 'type': 'js',  'id': 'dialog-polyfill-js',  'src': 'demo/scripts/dialog-polyfill.js' },
+    { 'type': 'js',  'id': 'material-js',         'src': 'https://code.getmdl.io/1.1.3/material.min.js' },
+    { 'type': 'js',  'id': 'eq-js',               'src': 'demo/scripts/eq.min.js' },
+    { 'type': 'js',  'id': 'mdlext-js',           'src': 'lib/index.js' }
+  ];
+
+  var joinOrigin = function(origin, src) {
+    return src.startsWith('http') ? src : origin.concat(src);
+  };
+
+  var loadResources = function( origin, loadCompleted ) {
+    var expectToLoad = docs.length;
+    var filesLoaded = 0;
+
+    for (var i = 0; i < docs.length; i++) {
+      if (document.getElementById(docs[i].id) === null) {
+        var el;
+        var src = joinOrigin(origin, docs[i].src);
+
+        if (docs[i].type === 'css') {
+          el = document.createElement('link');
+          el.href = src;
+          el.rel = 'stylesheet';
+          el.type = 'text/css';
+        }
+        else {
+          el = document.createElement('script');
+          el.src = src;
+          el.type = 'text/javascript';
+          el.async = false;
+          el.charset = 'utf-8';
+        }
+        el.id = docs[i].id;
+        el.onload = function () {
+          filesLoaded++;
+          if(filesLoaded >= expectToLoad) {
+            loadCompleted();
+          }
+        };
+        document.head.appendChild(el);
+      }
+      else {
+        expectToLoad--;
+      }
+    }
+  };
+
+  /**
+   * Inject required CSS and JS into html fragment loaded into an <iframe>
+   * @param origin path relative to root of this project, e.g. "../../../
+   */
+  self.load = function( origin ) {
+    loadResources( origin, function () {
+      if(window.componentHandler) {
+        window.componentHandler.upgradeDom();
+      }
+    });
+  };
+
+  return self;
+})(mdlIframeLoader);
diff --git a/node_modules/mdl-ext/src/demo/formatfield.html b/node_modules/mdl-ext/src/demo/formatfield.html
new file mode 100644
index 0000000..8e55b6a
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/formatfield.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Format Field</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/formatfield/snippets/formatfield.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Formatted Fields';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/grid.html b/node_modules/mdl-ext/src/demo/grid.html
new file mode 100644
index 0000000..1336b07
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/grid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Grid</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/grid/snippets/grid.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Grid';
+      }
+    });
+  }());
+</script>
+
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/include/_drawer.html b/node_modules/mdl-ext/src/demo/include/_drawer.html
new file mode 100644
index 0000000..b6bafd4
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/include/_drawer.html
@@ -0,0 +1,81 @@
+<style>
+  /* Ugly CSS! Only for demo. */
+
+  #demo-drawer-accordion {
+    height: 100%;
+  }
+
+  #demo-drawer-accordion .mdlext-accordion__tab {
+    height: 64px;
+    min-height: 64px;
+    min-width: 64px;
+    padding-left: 16px;
+  }
+
+  .is-small-screen #demo-drawer-accordion .mdlext-accordion__tab {
+    height: 56px;
+    min-height: 56px;
+    min-width: 56px;
+  }
+
+  #demo-drawer-accordion .mdlext-accordion__tabpanel,
+  #demo-drawer-accordion .mdlext-accordion__tabpanel nav {
+    padding: 0;
+  }
+
+  #demo-drawer-accordion .mdlext-accordion__tabpanel .mdl-navigation__link {
+    color: rgba(255, 255, 255, 0.87);
+  }
+
+  #demo-drawer-accordion .mdlext-accordion__tabpanel .mdl-navigation__link:hover {
+    background-color: #212121;
+  }
+
+</style>
+
+
+<aside class="mdl-layout__drawer">
+
+  <ul id="demo-drawer-accordion"
+      class="mdlext-accordion mdlext-js-accordion mdlext-accordion--vertical mdlext-js-ripple-effect mdlext-js-animation-effect mdlext-dark-color-theme"
+      aria-multiselectable="false">
+
+    <li class="mdlext-accordion__panel">
+      <header class="mdlext-accordion__tab" aria-expanded="true">
+        <span class="mdlext-accordion__tab__caption">MDL Extensions</span>
+        <i class="mdlext-aria-toggle-material-icons"></i>
+      </header>
+      <section class="mdlext-accordion__tabpanel">
+        <nav class="mdl-navigation">
+          <a class="mdl-navigation__link" href="accordion.html">Accordion</a>
+          <a class="mdl-navigation__link" href="bordered-fields.html">Bordered Fields</a>
+          <a class="mdl-navigation__link" href="collapsible.html">Collapsible</a>
+          <a class="mdl-navigation__link" href="color-themes.html">Color Themes</a>
+          <a class="mdl-navigation__link" href="formatfield.html">Formatted Fields</a>
+          <a class="mdl-navigation__link" href="grid.html">Grid</a>
+          <a class="mdl-navigation__link" href="carousel.html">Image Carousel</a>
+          <a class="mdl-navigation__link" href="lightboard.html">Lightboard</a>
+          <a class="mdl-navigation__link" href="lightbox.html">Lightbox</a>
+          <a class="mdl-navigation__link" href="menu-button.html">Menu Button</a>
+          <a class="mdl-navigation__link" href="selectfield.html">Selectfield</a>
+        </nav>
+      </section>
+    </li>
+    <li class="mdlext-accordion__panel">
+      <header class="mdlext-accordion__tab">
+        <span class="mdlext-accordion__tab__caption">Sticky headers</span>
+        <i class="mdlext-aria-toggle-material-icons"></i>
+      </header>
+      <section class="mdlext-accordion__tabpanel">
+        <nav class="mdl-navigation">
+          <a class="mdl-navigation__link" href="sticky-header.html">Sticky Header I</a>
+          <a class="mdl-navigation__link" href="sticky-header-ii.html">Sticky Header II</a>
+          <a class="mdl-navigation__link" href="sticky-header-iii.html">Sticky Header III</a>
+          <a class="mdl-navigation__link" href="sticky-header-iv.html">Sticky Header IV</a>
+          <a class="mdl-navigation__link" href="sticky-header-v.html">Sticky Header V</a>
+          <a class="mdl-navigation__link" href="sticky-header-vi.html">Sticky Header VI</a>
+        </nav>
+      </section>
+    </li>
+  </ul>
+</aside>
diff --git a/node_modules/mdl-ext/src/demo/include/_head.html b/node_modules/mdl-ext/src/demo/include/_head.html
new file mode 100644
index 0000000..1f582ce
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/include/_head.html
@@ -0,0 +1,26 @@
+<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.0, minimum-scale=1.0">
+<title>Material Design Lite Extensions</title>
+
+<!-- Fallback to homescreen for Chrome <39 on Android -->
+<meta name="mobile-web-app-capable" content="yes">
+<meta name="application-name" content="Material Design Lite Extensions">
+<link rel="icon" sizes="192x192" href="./assets/android-desktop.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 Extensions">
+<link rel="apple-touch-icon" href="./assets/ios-desktop.png">
+
+<link rel="shortcut icon" href="./assets/favicon.png">
+
+<!-- styles -->
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en">
+<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+<link rel="stylesheet" href="styles/dialog-polyfill.css">
+<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
+<link rel="stylesheet" href="../lib/mdl-ext-eqjs.min.css">
+<link rel="stylesheet" href="./styles/demo.css">
diff --git a/node_modules/mdl-ext/src/demo/include/_header-row.html b/node_modules/mdl-ext/src/demo/include/_header-row.html
new file mode 100644
index 0000000..4bd3add
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/include/_header-row.html
@@ -0,0 +1,24 @@
+<div class="mdl-layout__header-row">
+
+  <!-- Title -->
+  <span id="header-title" class="mdl-layout-title">Title goes here</span>
+
+  <!-- Add spacer, to align navigation to the right -->
+  <div class="mdl-layout-spacer"></div>
+
+  <label id="go-home" class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+    <a href="index.html">
+      <i class="material-icons">home</i>
+    </a>
+  </label>
+
+  <button id="header-menu" 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="header-menu">
+    <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>
+</div>
diff --git a/node_modules/mdl-ext/src/demo/include/_header.html b/node_modules/mdl-ext/src/demo/include/_header.html
new file mode 100644
index 0000000..b11f9bf
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/include/_header.html
@@ -0,0 +1,3 @@
+<header class="mdl-layout__header mdlext-layout__sticky-header mdlext-js-sticky-header">
+  <include src="include/_header-row.html"></include>
+</header>
diff --git a/node_modules/mdl-ext/src/demo/include/_index.html b/node_modules/mdl-ext/src/demo/include/_index.html
new file mode 100644
index 0000000..1945e28
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/include/_index.html
@@ -0,0 +1,54 @@
+<h5 class="mdlext-demo-header">mdl-ext</h5>
+<p>Material Design Lite Ext (MDLEXT).
+  Components built with the
+  <a href="https://github.com/google/material-design-lite">Google Material Design Lite</a>
+  framework.
+</p>
+
+<h3>Components provided</h3>
+
+<h4>Accordion</h4>
+<p>A WAI-ARIA friendly accordion component with vertcial or horizontal layout.</p>
+
+<h4>Bordered Fields</h4>
+<p>The Material Design Lite Ext (MDLEXT) bordered fieldscomponent demonstrates
+  how you can create your own theme of MDL text fields.
+</p>
+
+<h4>Collapsible</h4>
+<p>A collapsible is a component to mark expandable and collapsible regions.</p>
+
+<h4>Color Themes</h4>
+<p>MDL provides only one color theme. Many designs require more than one theme, e.g. a dark theme and a light theme.</p>
+
+<h4>Grid</h4>
+<p>A responsive grid based on element queries in favour of media queries.</p>
+
+<h4>Image Carousel</h4>
+<p>A responsive, WAI-ARIA friendly, image carousel.</p>
+
+<h4>Lightboard</h4>
+<p>A lightboard is a translucent surface illuminated from behind, used for
+  situations where a shape laid upon the surface needs to be seen with high contrast.
+  In the "old days" of photography photograpers used a lightboard to get a quick
+  view of, sorting and organizing their slides.
+</p>
+
+<h4>Lightbox</h4>
+<p>A lightbox displays an image filling the screen, and dimming out the rest of
+  the web page. It acts as a modal dialog using the <code>&lt;dialog&gt;</code>
+  element as a container for the lightbox.
+</p>
+
+<h4>Menu Button</h4>
+<p>A WAI-ARIA friendly menu button component/widget with roles, attributes and behavior in accordance with the
+  specification given in WAI-ARIA Authoring Practices, section 2.20.
+</p>
+
+<h4>Selectfield</h4>
+<p>The Material Design Lite Ext (MDLEXT) select field component is an enhanced version
+  of the standard [HTML <code>&lt;select&gt;</code> element.
+</p>
+
+<h4>Sticky Header</h4>
+<p>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.</p>
diff --git a/node_modules/mdl-ext/src/demo/include/_interactive-body-filler.html b/node_modules/mdl-ext/src/demo/include/_interactive-body-filler.html
new file mode 100644
index 0000000..e8103c1
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/include/_interactive-body-filler.html
@@ -0,0 +1,52 @@
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Sticky Header';
+      }
+    });
+
+    var btn = document.querySelector('#a-button');
+    btn.addEventListener('click', function() {
+
+      var content = document.querySelector('.mdl-layout__content');
+      content.insertAdjacentHTML('beforeend',
+        '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In porttitor lorem eu faucibus aliquet. ' +
+        'In vehicula risus turpis, ut dictum ante tristique et. Aenean ultricies sed urna ac condimentum. ' +
+        'Vivamus nisl tortor, ultricies at aliquam nec, semper at purus. Duis purus tortor, laoreet eget ante a, ' +
+        'rhoncus vulputate lorem. Pellentesque id enim ut massa posuere vestibulum sit amet eget elit. Nulla quis ' +
+        'euismod massa, id varius dui. Ut congue urna non ipsum placerat rhoncus. Curabitur a sollicitudin diam. ' +
+        'Donec id lectus eleifend, blandit magna a, mattis turpis. Fusce non tellus pulvinar, finibus dui ac, ' +
+        'porttitor ante. Vestibulum et commodo purus, et tincidunt nulla. Suspendisse blandit sodales est, nec ' +
+        'luctus sem sollicitudin in. Etiam libero tellus, porttitor sit amet velit a, commodo sodales neque.</p>' +
+        '<p>Maecenas id sodales lacus, eu ullamcorper nibh. Sed posuere consectetur nunc nec dapibus. Nam tristique ' +
+        'ex vel urna dapibus luctus. Phasellus eget mi ac tortor aliquet auctor non vitae risus. Cum sociis natoque ' +
+        'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec et egestas elit. Sed id lorem enim.' +
+        'Aliquam maximus enim sed tincidunt pretium.</p>' +
+        '<p>Phasellus dictum, leo vel bibendum efficitur, mauris metus volutpat magna, at pharetra libero dolor id ' +
+        'tellus. Mauris convallis tempus libero, sit amet suscipit massa maximus a. Duis ut dignissim nulla, nec ' +
+        'gravida purus. Proin eget erat justo. Phasellus congue sapien eleifend sapien mollis, nec molestie eros ' +
+        'efficitur. Pellentesque et diam at risus ultrices pharetra nec in augue. Phasellus vestibulum, lacus a ' +
+        'dictum vulputate, mauris nisi dictum massa, in venenatis felis sapien a nunc. Integer mi tellus, imperdiet ' +
+        'vel dignissim sed, fringilla ut urna.</p>' +
+        '<p>Suspendisse potenti. Pellentesque eget suscipit orci, at tempor est. Cras sed sollicitudin nunc. Donec ' +
+        'convallis, arcu a euismod cursus, arcu odio pharetra lectus, vitae feugiat diam massa vestibulum metus. In ' +
+        'odio tellus, consectetur eget est et, vehicula hendrerit dolor. Ut ultrices nulla tellus, sit amet ' +
+        'consectetur dolor aliquet quis. Etiam non fermentum dolor.</p>' +
+        '<p>Donec accumsan risus in lectus sollicitudin ' +
+        'vulputate. Praesent condimentum a leo at interdum. Donec ' +
+        'pharetra congue erat a accumsan. Aliquam gravida ' +
+        'lobortis mi, id elementum sapien ultrices vel. ' +
+        'Pellentesque habitant morbi tristique senectus et ' +
+        'netus et malesuada fames ac turpis egestas. Proin ' +
+        'consequat enim orci, nec blandit lorem luctus ut. ' +
+        'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' +
+        'Etiam pretium nunc non metus gravida, nec tincidunt ' +
+        'tortor volutpat. Aliquam erat volutpat. Curabitur ' +
+        'varius purus ac auctor pharetra.</p>');
+    });
+
+  }());
+</script>
diff --git a/node_modules/mdl-ext/src/demo/include/_scripts.html b/node_modules/mdl-ext/src/demo/include/_scripts.html
new file mode 100644
index 0000000..97011e6
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/include/_scripts.html
@@ -0,0 +1,5 @@
+<script src="scripts/dialog-polyfill.js" type="text/javascript" charset="utf-8"></script>
+<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=default,es6"></script>
+<script src="scripts/eq.min.js" type="text/javascript" charset="utf-8"></script>
+<script src="https://code.getmdl.io/1.2.1/material.min.js" type="text/javascript" charset="utf-8"></script>
+<script src="../lib/mdl-ext.min.js" type="text/javascript" charset="utf-8"></script>
diff --git a/node_modules/mdl-ext/src/demo/index.html b/node_modules/mdl-ext/src/demo/index.html
new file mode 100644
index 0000000..3aa4e01
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/index.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions</title>
+</head>
+
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="include/_index.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Material Design Lite Extensions';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/lightboard.html b/node_modules/mdl-ext/src/demo/lightboard.html
new file mode 100644
index 0000000..93adf1c
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/lightboard.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Lightboard</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/lightboard/snippets/lightboard.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Lightboard';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/lightbox.html b/node_modules/mdl-ext/src/demo/lightbox.html
new file mode 100644
index 0000000..6b774bf
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/lightbox.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Lightbox</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/lightbox/snippets/lightbox.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Lightbox';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/menu-button.html b/node_modules/mdl-ext/src/demo/menu-button.html
new file mode 100644
index 0000000..0ea10e4
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/menu-button.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Menu Button</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/menu-button/snippets/menu-button.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Menu Button';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/resize-observer.html b/node_modules/mdl-ext/src/demo/resize-observer.html
new file mode 100644
index 0000000..905db53
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/resize-observer.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Resize Observer</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/utils/snippets/resize-observer.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Resize Observer';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/selectfield.html b/node_modules/mdl-ext/src/demo/selectfield.html
new file mode 100644
index 0000000..089b5d9
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/selectfield.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Selectfield</title>
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+    <include src="../../src/selectfield/snippets/selectfield.html"></include>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<script>
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+      var title = document.querySelector('#header-title');
+      if(title) {
+        title.innerHTML = 'Selectfield';
+      }
+    });
+  }());
+</script>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/sticky-header-ii.html b/node_modules/mdl-ext/src/demo/sticky-header-ii.html
new file mode 100644
index 0000000..794c54e
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/sticky-header-ii.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Sticky Header</title>
+</head>
+
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
+
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+
+  <main id="mount" class="mdl-layout__content">
+
+    <h5>Sticky Header, Drawer (not fixed)</h5>
+
+    <p>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.</p>
+    <p>The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page
+      and bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.</p>
+    <p class="mdl-typography--subhead">To see how the sticky header works, click the button a few
+      times to add content. Next scroll the page up and down.</p>
+    <button id="a-button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+      Click to add more content
+    </button>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<include src="include/_interactive-body-filler.html"></include>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/sticky-header-iii.html b/node_modules/mdl-ext/src/demo/sticky-header-iii.html
new file mode 100644
index 0000000..e6da56b
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/sticky-header-iii.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Sticky Header</title>
+</head>
+
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
+
+  <include src="include/_header.html"></include>
+
+  <main id="mount" class="mdl-layout__content">
+
+    <h5>Sticky Header, No Drawer</h5>
+
+    <p>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.</p>
+    <p>The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page
+      and bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.</p>
+    <p class="mdl-typography--subhead">To see how the sticky header works, click the button a few
+      times to add content. Next scroll the page up and down.</p>
+    <button id="a-button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+      Click to add more content
+    </button>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<include src="include/_interactive-body-filler.html"></include>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/sticky-header-iv.html b/node_modules/mdl-ext/src/demo/sticky-header-iv.html
new file mode 100644
index 0000000..2b91ae3
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/sticky-header-iv.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Sticky Header</title>
+</head>
+
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+
+  <header class="mdl-layout__header mdl-layout__header--waterfall mdlext-layout__sticky-header mdlext-js-sticky-header">
+    <include src="include/_header-row.html"></include>
+
+    <div class="mdl-layout__header-row">
+      <div class="mdl-layout-spacer"></div>
+      <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>
+
+  <include src="include/_drawer.html"></include>
+
+  <main id="mount" class="mdl-layout__content">
+
+    <h5>Sticky Header, Waterfall, Fixed Drawer</h5>
+
+    <p>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.</p>
+    <p>The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page
+      and bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.</p>
+    <p class="mdl-typography--subhead">To see how the sticky header works, click the button a few
+      times to add content. Next scroll the page up and down.</p>
+    <button id="a-button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+      Click to add more content
+    </button>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<include src="include/_interactive-body-filler.html"></include>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/sticky-header-v.html b/node_modules/mdl-ext/src/demo/sticky-header-v.html
new file mode 100644
index 0000000..99027e4
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/sticky-header-v.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Sticky Header</title>
+</head>
+
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
+
+  <header class="mdl-layout__header mdl-layout__header--waterfall mdlext-layout__sticky-header mdlext-js-sticky-header">
+    <include src="include/_header-row.html"></include>
+
+    <div class="mdl-layout__header-row">
+      <div class="mdl-layout-spacer"></div>
+      <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>
+
+  <include src="include/_drawer.html"></include>
+
+  <main id="mount" class="mdl-layout__content">
+
+    <h5>Sticky Header, Waterfall, Drawer (not fixed)</h5>
+
+    <p>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.</p>
+    <p>The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page
+      and bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.</p>
+    <p class="mdl-typography--subhead">To see how the sticky header works, click the button a few
+      times to add content. Next scroll the page up and down.</p>
+    <button id="a-button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+      Click to add more content
+    </button>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<include src="include/_interactive-body-filler.html"></include>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/sticky-header-vi.html b/node_modules/mdl-ext/src/demo/sticky-header-vi.html
new file mode 100644
index 0000000..840b8bc
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/sticky-header-vi.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Sticky Header</title>
+</head>
+
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
+
+  <header class="mdl-layout__header mdl-layout__header--waterfall mdlext-layout__sticky-header mdlext-js-sticky-header">
+    <include src="include/_header-row.html"></include>
+
+    <div class="mdl-layout__header-row">
+      <div class="mdl-layout-spacer"></div>
+      <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>
+
+  <main id="mount" class="mdl-layout__content">
+
+    <h5>Sticky Header, Waterfall, No Drawer</h5>
+
+    <p>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.</p>
+    <p>The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page
+      and bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.</p>
+    <p class="mdl-typography--subhead">To see how the sticky header works, click the button a few
+      times to add content. Next scroll the page up and down.</p>
+    <button id="a-button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+      Click to add more content
+    </button>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<include src="include/_interactive-body-filler.html"></include>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/sticky-header.html b/node_modules/mdl-ext/src/demo/sticky-header.html
new file mode 100644
index 0000000..6e7080a
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/sticky-header.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <include src="include/_head.html"></include>
+  <title>Material Design Lite Extensions - Sticky Header</title>
+</head>
+
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <include src="include/_header.html"></include>
+  <include src="include/_drawer.html"></include>
+  <main id="mount" class="mdl-layout__content">
+
+    <h5>Sticky Header, Fixed Drawer Example</h5>
+
+    <p>A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.</p>
+    <p>The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page
+      and bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.</p>
+    <p class="mdl-typography--subhead">To see how the sticky header works, click the button a few
+      times to add content. Next scroll the page up and down.</p>
+    <button id="a-button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+      Click to add more content
+    </button>
+  </main>
+</div>
+<include src="include/_scripts.html"></include>
+<include src="include/_interactive-body-filler.html"></include>
+</body>
+</html>
diff --git a/node_modules/mdl-ext/src/demo/styles/demo.css b/node_modules/mdl-ext/src/demo/styles/demo.css
new file mode 100644
index 0000000..28151ef
--- /dev/null
+++ b/node_modules/mdl-ext/src/demo/styles/demo.css
@@ -0,0 +1,69 @@
+html {
+  box-sizing: border-box;
+}
+*, *::before, *::after, input[type="search"] {
+  box-sizing: inherit;
+}
+
+body {
+  overflow: hidden; /* Needed by Chrome OSX and IOS to avoid "double" scrollbars when a menu opens */
+}
+
+#mount {
+  padding-left: 12px;
+  padding-right: 8px;
+  height:100%;
+}
+
+#mount > *:first-child:not(h5) {
+  padding-top: 16px;
+}
+
+.is-small-screen #mount {
+  padding-left: 4px;
+  padding-right: 4px;
+}
+
+/* Rules for sizing the icon */
+/* Not provided in "material-design-icons/iconfont/material-icon.css" */
+
+.material-icons.md-12 {
+   font-size: 12px;
+ }
+.material-icons.md-16 {
+  font-size: 16px;
+}
+.material-icons.md-18 {
+   font-size: 18px;
+ }
+.material-icons.md-24 {
+   font-size: 24px;
+ }
+.material-icons.md-32 {
+   font-size: 24px;
+ }
+.material-icons.md-36 {
+   font-size: 36px;
+ }
+.material-icons.md-48 {
+   font-size: 48px;
+ }
+.material-icons.md-56 {
+  font-size: 56px;
+}
+
+/* Rules for using icons as black on a light background. */
+.material-icons.md-dark {
+   color: rgba(0, 0, 0, 0.54);
+}
+.material-icons.md-dark.md-inactive {
+   color: rgba(0, 0, 0, 0.26);
+ }
+
+/* Rules for using icons as white on a dark background. */
+.material-icons.md-light {
+   color: rgba(255, 255, 255, 1);
+}
+.material-icons.md-light.md-inactive {
+   color: rgba(255, 255, 255, 0.3);
+ }
diff --git a/node_modules/mdl-ext/src/dialog/dialog.scss b/node_modules/mdl-ext/src/dialog/dialog.scss
new file mode 100644
index 0000000..fb74849
--- /dev/null
+++ b/node_modules/mdl-ext/src/dialog/dialog.scss
@@ -0,0 +1,46 @@
+/**
+ * Copyright 2015 Google Inc. All Rights Reserved.
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * SASS based on css from Google Chrome Dialog polyfill, https://github.com/GoogleChrome/dialog-polyfill
+ * @include 'node_modules/dialog-polyfill/dialog-polyfill.css' before using this
+ */
+
+@import "../variables";
+
+dialog.mdlext-dialog {
+  position: absolute;
+  border: 0;
+  opacity: 0;
+  padding: $mdlext-dialog-padding;
+  background-color: $mdlext-dialog-background-color;
+
+  &[open] {
+    animation: mdlext-open-dialog $mdlext-dialog-open-animation;
+  }
+  &[open]::backdrop {
+    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;
+  }
+  &[open] + .backdrop {
+    animation: mdlext-darken-backdrop $mdlext-dialog-backdrop-animation;
+  }
+}
+
+@keyframes mdlext-darken-backdrop {
+  to { background: $mdlext-dialog-backdrop-color; }
+}
+@keyframes mdlext-open-dialog {
+  to { opacity: 1; }
+}
diff --git a/node_modules/mdl-ext/src/dialog/readme.md b/node_modules/mdl-ext/src/dialog/readme.md
new file mode 100644
index 0000000..5902343
--- /dev/null
+++ b/node_modules/mdl-ext/src/dialog/readme.md
@@ -0,0 +1,30 @@
+# Dialog
+Additional styling for `<dialog>`, based on the [Google Chrome Dialog polyfill](https://github.com/GoogleChrome/dialog-polyfill).
+`@include 'node_modules/dialog-polyfill/dialog-polyfill.css'` before using this in your SASS build.
+
+## Introduction
+The Material Design Lite Ext (MDLEXT) `mdlext-dialog` class provides better control of the dialog backdrop.
+
+## Basic Usage
+Refer to the [Google Chrome Dialog polyfill](https://github.com/GoogleChrome/dialog-polyfill) documentaion amd the MDLEXT [lightbox](../lightbox) component.
+ 
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the dialog. 
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdlext-dialog` | Defines container as an MDLEXT component | Required on `<dialog>` element |
+
+ 
+You can modify the dialog trough the following SASS variables.
+
+| SASS variable |Description | Remarks | 
+|-----------|--------|---------|
+| `$mdlext-dialog-padding` | Dialog padding | default `0` | 
+| `$mdlext-dialog-background-color` | Dialog background color | default `transparent` | 
+| `$mdlext-dialog-backdrop-color` | Backdrop color when dialog is open | default `rgba(0,0,0,0.8)` | 
+| `$mdlext-dialog-open-animation` | Animation when dialog opens | default `.5s .2s forwards` | 
+| `$mdlext-dialog-backdrop-animation` | Backdrop animation when dialog opens | default `.2s forwards` | 
+
diff --git a/node_modules/mdl-ext/src/formatfield/formatfield.js b/node_modules/mdl-ext/src/formatfield/formatfield.js
new file mode 100644
index 0000000..0b84819
--- /dev/null
+++ b/node_modules/mdl-ext/src/formatfield/formatfield.js
@@ -0,0 +1,280 @@
+/**
+ * @license
+ * Copyright 2016-2017 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+
+import {jsonStringToObject} from '../utils/json-utils';
+import {
+  IS_UPGRADED,
+} from '../utils/constants';
+
+const JS_FORMAT_FIELD = 'mdlext-js-formatfield';
+const FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';
+
+/**
+ * Detect browser locale
+ * @returns {string} the locale
+ * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference
+ */
+const browserLanguage = () => {
+  return navigator.languages
+    ? navigator.languages[0]
+    : navigator.language || navigator.userLanguage;
+};
+
+/**
+ * The formatfield  formats an input field  using language sensitive number formatting.
+ */
+
+class FormatField {
+  static timer = null;
+
+  element_;
+  input_;
+  options_ = {};
+  intlGroupSeparator_;
+  intlDecimalSeparator_;
+
+  constructor(element) {
+    this.element_ = element;
+    this.init();
+  }
+
+  clickHandler = () => {
+    clearTimeout(FormatField.timer);
+  };
+
+  focusInHandler = () => {
+    if(!(this.input.readOnly || this.input.disabled)) {
+      this.input.value = this.unformatInput();
+      //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);
+      FormatField.timer = setTimeout(() => this.input.select(), 200);
+    }
+  };
+
+  focusOutHandler = () => {
+    clearTimeout(FormatField.timer);
+
+    if(!(this.input.readOnly || this.input.disabled)) {
+      this.formatValue();
+    }
+  };
+
+  get element() {
+    return this.element_;
+  }
+
+  get input() {
+    return this.input_;
+  }
+
+  get options() {
+    return this.options_;
+  }
+
+  stripSeparatorsFromValue() {
+    const doReplace = () => this.input.value
+      .replace(/\s/g, '')
+      .replace(new RegExp(this.options.groupSeparator, 'g'), '')
+      .replace(this.options.decimalSeparator, '.');
+      //.replace(this.intlGroupSeparator_, ''),
+      //.replace(this.intlDecimalSeparator_, '.');
+
+    return this.input.value ? doReplace() : this.input.value;
+  }
+
+  fixSeparators(value) {
+    const doReplace = () => value
+      .replace(new RegExp(this.intlGroupSeparator_, 'g'), this.options.groupSeparator)
+      .replace(this.intlDecimalSeparator_, this.options.decimalSeparator);
+
+    return value ? doReplace() : value;
+  }
+
+  formatValue() {
+    if(this.input.value) {
+      const v = new Intl.NumberFormat(this.options.locales, this.options)
+        .format(this.stripSeparatorsFromValue());
+
+      if('NaN' !== v) {
+        this.input.value = this.fixSeparators(v);
+      }
+    }
+  }
+
+  unformat() {
+    const doReplace = () => this.input.value
+      .replace(/\s/g, '')
+      .replace(new RegExp(this.options.groupSeparator, 'g'), '')
+      .replace(this.options.decimalSeparator, '.');
+
+    return this.input.value ? doReplace() : this.input.value;
+  }
+
+  unformatInput() {
+    const doReplace = () => this.input.value
+      .replace(/\s/g, '')
+      .replace(new RegExp(this.options.groupSeparator, 'g'), '');
+
+    return this.input.value ? doReplace() : this.input.value;
+  }
+
+  removeListeners() {
+    this.input.removeEventListener('click', this.clickHandler);
+    this.input.removeEventListener('focusin', this.focusInHandler);
+    this.input.removeEventListener('focusout', this.focusOutHandler);
+  }
+
+  init() {
+    const addListeners = () => {
+      this.input.addEventListener('click', this.clickHandler);
+      this.input.addEventListener('focusin', this.focusInHandler);
+      this.input.addEventListener('focusout', this.focusOutHandler);
+    };
+
+    const addOptions = () => {
+      const opts = this.element.getAttribute('data-formatfield-options') ||
+        this.input.getAttribute('data-formatfield-options');
+      if(opts) {
+        this.options_ = jsonStringToObject(opts, this.options);
+      }
+    };
+
+    const addLocale = () => {
+      if(!this.options.locales) {
+        this.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',
+      }
+    };
+
+    const addGrouping = () => {
+      const s = (1234.5).toLocaleString(this.options.locales, {
+        style: 'decimal',
+        useGrouping: true,
+        minimumFractionDigits: 1,
+        maximumFractionDigits: 1
+      });
+
+      this.intlGroupSeparator_ = s.charAt(1);
+      this.intlDecimalSeparator_ = s.charAt(s.length-2);
+      this.options.groupSeparator = this.options.groupSeparator || this.intlGroupSeparator_;
+      this.options.decimalSeparator = this.options.decimalSeparator || this.intlDecimalSeparator_;
+
+      if(this.options.groupSeparator === this.options.decimalSeparator) {
+        const e = `Error! options.groupSeparator, "${this.options.groupSeparator}" ` +
+          'and options.decimalSeparator, ' +
+          `"${this.options.decimalSeparator}" should not be equal`;
+        throw new Error(e);
+      }
+    };
+
+    this.input_ = this.element.querySelector('input') || this.element;
+
+    addOptions();
+    addLocale();
+    addGrouping();
+    this.formatValue();
+    addListeners();
+  }
+
+  downgrade() {
+    this.removeListeners();
+  }
+
+}
+
+(function() {
+  'use strict';
+
+  /**
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  const MaterialExtFormatfield = function MaterialExtFormatfield(element) {
+    this.element_ = element;
+    this.formatField_ = null;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtFormatfield'] = MaterialExtFormatfield;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtFormatfield.prototype.init = function() {
+    if (this.element_) {
+      this.element_.classList.add(IS_UPGRADED);
+      this.formatField_ = new FormatField(this.element_);
+
+      // Listen to 'mdl-componentdowngraded' event
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+    }
+  };
+
+  /**
+   * Get options object
+   *
+   * @public
+   *
+   * @returns {Object} the options object
+   */
+  MaterialExtFormatfield.prototype.getOptions = function() {
+    return this.formatField_.options;
+  };
+  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;
+
+
+  /**
+   * A unformatted value is a string value where the locale specific decimal separator
+   * is replaced with a '.' separator and group separators are stripped.
+   * The returned value is suitable for parsing to a JavaScript numerical value.
+   *
+   * @example
+   * input.value = '1 234,5';
+   * inputElement.MaterialExtFormatfield.getUnformattedValue();
+   * // Returns '1234.5'
+   *
+   * @public
+   *
+   * @returns {String} the unformatted value
+   */
+  MaterialExtFormatfield.prototype.getUnformattedValue = function() {
+    return this.formatField_.unformat();
+  };
+  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtFormatfield.prototype.mdlDowngrade_ = function() {
+    this.formatField_.downgrade();
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtFormatfield,
+    classAsString: FORMAT_FIELD_COMPONENT,
+    cssClass: JS_FORMAT_FIELD,
+    widget: true
+  });
+
+})();
diff --git a/node_modules/mdl-ext/src/formatfield/readme.md b/node_modules/mdl-ext/src/formatfield/readme.md
new file mode 100644
index 0000000..c3737eb
--- /dev/null
+++ b/node_modules/mdl-ext/src/formatfield/readme.md
@@ -0,0 +1,103 @@
+#Formatfield
+![Formatfield](../../etc/formatfield.png)
+
+The formatfield component formats an input field using language sensitive 
+**number formatting**. It acts as a "pluggable" component and can be added to a 
+`mdl-textfield` component or to a `<input>` element.
+
+## To include a MDLEXT formatfield component:
+&nbsp;1. Code a [single-line `mdl-textfield`](https://getmdl.io/components/index.html#textfields-section) 
+component.
+```html
+<div class="mdl-textfield mdl-js-textfield">
+  <input class="mdl-textfield__input" type="text" 
+    pattern="-?[0-9 ]*([\.,][0-9]+)?" value="1234.5">
+  <label class="mdl-textfield__label">Number...</label>
+  <span class="mdl-textfield__error">Input is not a number!</span>
+</div>
+```
+
+&nbsp;2. Add the `mdlext-js-formatfield` class to define the element as a formatfield component.
+```html
+<div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield">
+  <input class="mdl-textfield__input" type="text" 
+    pattern="-?[0-9 ]*([\.,][0-9]+)?" value="1234.5">
+  <label class="mdl-textfield__label">Number...</label>
+  <span class="mdl-textfield__error">Input is not a number!</span>
+</div>
+```
+
+&nbsp;3. Optionally add a `data-formatfield-options` attribute with the given 
+[locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation). 
+If this step is omitted, the formatfield component uses the browser language as it's locale.
+```html
+<div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield"
+  data-formatfield-options="{'locales': 'nb-NO'}">
+  <input class="mdl-textfield__input" type="text" 
+    pattern="-?[0-9 ]*([\.,][0-9]+)?" value="1234.5">
+  <label class="mdl-textfield__label">Number...</label>
+  <span class="mdl-textfield__error">Input is not a number!</span>
+</div>
+```
+
+### Examples
+* The [snippets/formatfield.html](./snippets/formatfield.html) and the 
+[tests](../../test/formatfield/formatfield.spec.js) provides more detailed examples.
+* Try out the [live demo](http://leifoolsen.github.io/mdl-ext/demo/formatfield.html)
+
+## Public methods
+
+### getOptions()
+Get component configuration options object.
+```
+var options = inputElement.MaterialExtFormatfield.getOptions();
+console.log('locales', options.locales);
+```
+
+### getUnformattedValue()
+An unformatted value is a string value where the locale specific decimal separator
+is replaced with a '.' separator and group separators are stripped.
+The returned value is suitable for parsing to a JavaScript numerical value.
+
+Example
+```javascript
+input.value = '1 234,5';
+inputElement.MaterialExtFormatfield.getUnformattedValue();
+// Returns '1234.5'
+```
+
+## Configuration options
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements 
+to the formatfield. 
+
+### Available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|--------------|--------|---------|
+|`mdlext-js-formatfield`| Assigns basic MDL behavior to formatfield. | Required. |
+
+
+### Options
+The component can be configured using the `data-formatfield-options` attribute. 
+The attribute value is a JSON string with properties defined by the 
+[Intl.NumberFormat object](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat).
+
+The `data-formatfield-options` attribute must be a valid JSON string. 
+You can use single or double quotes for the JSON properties.
+
+Example 1, single quotes in JSON options string:
+```html
+<input class=" mdlext-js-formatfield" type="text"
+  data-formatfield-options="{'locales': 'nb-NO', 'minimumFractionDigits': 0, 'maximumFractionDigits': 0}">
+```
+
+Example 2, double quotes in JSON options string:
+```html
+<input class=" mdlext-js-formatfield" type="text"
+  data-formatfield-options='{"locales": "nb-NO", "minimumFractionDigits": 0, "maximumFractionDigits": 0}'>
+```
+
+## How to use the component programmatically
+The [tests](../../test/formatfield/formatfield.spec.js) and the 
+[snippets/formatfield.html](./snippets/formatfield.html) 
+provides examples on how to use the component programmatically.
diff --git a/node_modules/mdl-ext/src/formatfield/snippets/formatfield.html b/node_modules/mdl-ext/src/formatfield/snippets/formatfield.html
new file mode 100644
index 0000000..177a367
--- /dev/null
+++ b/node_modules/mdl-ext/src/formatfield/snippets/formatfield.html
@@ -0,0 +1,114 @@
+<p>The formatfield component formats an input field using
+  language sensitive number formatting. It acts as a "pluggable"
+  component. It can be added to a <code>mdl-textfield</code> component or to
+  a <code>&lt;input&gt</code> element.
+</p>
+
+<style>
+  .mdl-data-table .mdl-textfield {
+    width: auto;
+  }
+</style>
+<table class="mdl-data-table mdl-js-data-table mdl-shadow--2dp" style="margin-top: 16px;">
+<thead>
+<tr>
+  <th class="mdl-data-table__cell--non-numeric">Language</th>
+  <th class="mdl-data-table__cell--non-numeric">Input</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+  <td class="mdl-data-table__cell--non-numeric" id="browser-lang">Browser language</td>
+  <td class="mdl-data-table__cell--non-numeric">
+    <div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield" id="sample2-component">
+      <input class="mdl-textfield__input" type="text" pattern="-?[0-9, ]*([\.,][0-9]+)?"
+             id="sample2-input" value="1234.5">
+      <label class="mdl-textfield__label" for="sample2-input">Number...</label>
+      <span class="mdl-textfield__error">Input is not a number!</span>
+    </div>
+    <div id="sample2-unformatted"></div>
+  </td>
+</tr>
+<tr>
+  <td class="mdl-data-table__cell--non-numeric">nb-NO</td>
+  <td class="mdl-data-table__cell--non-numeric">
+    <div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield"
+      data-formatfield-options="{'locales': 'nb-NO'}">
+
+      <input class="mdl-textfield__input" type="text" pattern="-?[0-9 ]*([\.,][0-9]+)?" value="1234.5">
+      <label class="mdl-textfield__label">Number...</label>
+      <span class="mdl-textfield__error">Input is not a number!</span>
+    </div>
+  </td>
+</tr>
+<tr>
+  <td class="mdl-data-table__cell--non-numeric">en-GB</td>
+  <td class="mdl-data-table__cell--non-numeric">
+    <div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield" data-formatfield-options="{'locales': 'en-GB'}">
+      <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" value="1234.5">
+      <label class="mdl-textfield__label">Number...</label>
+      <span class="mdl-textfield__error">Input is not a number!</span>
+    </div>
+  </td>
+</tr>
+<tr>
+  <td class="mdl-data-table__cell--non-numeric">nb-NO, integer</td>
+  <td class="mdl-data-table__cell--non-numeric">
+    <div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield">
+      <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?"
+        data-formatfield-options="{'locales': 'nb-NO', 'minimumFractionDigits': 0,'maximumFractionDigits': 0}" value="1234.5">
+
+      <label class="mdl-textfield__label">Number...</label>
+      <span class="mdl-textfield__error">Input is not a number!</span>
+    </div>
+  </td>
+</tr>
+<tr>
+  <td class="mdl-data-table__cell--non-numeric">Percent. Input not supported</td>
+  <td class="mdl-data-table__cell--non-numeric">
+    <div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield">
+      <input class="mdl-textfield__input" type="text" readonly
+        data-formatfield-options="{'locales': 'en-GB', 'style': 'percent'}" value="0.20">
+      <label class="mdl-textfield__label">Number...</label>
+    </div>
+  </td>
+</tr>
+<tr>
+  <td class="mdl-data-table__cell--non-numeric">Currency. Input not supported</td>
+  <td class="mdl-data-table__cell--non-numeric">
+    <div class="mdl-textfield mdl-js-textfield mdlext-js-formatfield">
+      <input class="mdl-textfield__input" type="text" readonly
+        data-formatfield-options="{'locales': 'nb-NO', 'style': 'currency', 'currency': 'NOK'}" value="1234.5">
+      <label class="mdl-textfield__label">Number...</label>
+    </div>
+  </td>
+</tr>
+<tr>
+  <td class="mdl-data-table__cell--non-numeric">Input</td>
+  <td class="mdl-data-table__cell--non-numeric">
+    <input class=" mdlext-js-formatfield" type="text"
+      data-formatfield-options="{'locales': 'nb-NO'}" value="1234.5">
+  </td>
+</tr>
+</tbody>
+</table>
+
+<script>
+  (function() {
+    'use strict';
+    window.addEventListener('load', function() {
+      var lang = navigator.languages
+        ? navigator.languages[0]
+        : navigator.language || navigator.userLanguage;
+
+      document.querySelector('#browser-lang').innerText = 'Browser language (' + lang + ')';
+
+      var formatfieldComponent = document.querySelector('#sample2-component');
+      formatfieldComponent.querySelector('input').addEventListener('blur', function () {
+        var unformatted = document.querySelector('#sample2-unformatted');
+        unformatted.innerText = 'Unformatted: ' + formatfieldComponent.MaterialExtFormatfield.getUnformattedValue();
+      });
+    });
+  }());
+</script>
+
diff --git a/node_modules/mdl-ext/src/grid/_grid-eqjs.scss b/node_modules/mdl-ext/src/grid/_grid-eqjs.scss
new file mode 100644
index 0000000..8068b79
--- /dev/null
+++ b/node_modules/mdl-ext/src/grid/_grid-eqjs.scss
@@ -0,0 +1,321 @@
+@charset "UTF-8";
+
+/**
+ * This code is modified from Material Design Lite _grid.sass,
+ * which is Licensed under the Apache License, Version 2.0
+ * 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.
+ *
+ */
+
+//////////////////////////////////////////////////////////////////////////////////
+//
+// Element queries for _grid.scss, based on: https://github.com/Snugug/eq.js
+//
+//////////////////////////////////////////////////////////////////////////////////
+
+// Use of this module requires the user to include variables from material-design-lite in hers/his main SASS module
+//@import "../../node_modules/material-design-lite/src/variables";
+.mdlext-grid {
+  display: flex;
+  flex-flow: row wrap;
+  margin: 0 auto;
+  align-items: stretch;
+
+  &.mdlext-grid--no-spacing {
+    padding: 0;
+  }
+
+  & > .mdlext-cell {
+    box-sizing: border-box;
+  }
+
+  & > .mdlext-cell--top {
+    align-self: flex-start;
+  }
+
+  & > .mdlext-cell--middle {
+    align-self: center;
+  }
+
+  & > .mdlext-cell--bottom {
+    align-self: flex-end;
+  }
+
+  & > .mdlext-cell--stretch {
+    align-self: stretch;
+  }
+
+  .mdlext-grid--no-spacing > .mdlext-cell {
+    margin: 0;
+  }
+
+  // Define order override classes.
+  @for $i from 1 through $grid-max-columns {
+    & > .mdlext-cell--order-#{$i} {
+      order: $i;
+    }
+  }
+}
+
+// Mixins for width calculation.
+@mixin _partial-size($size, $columns, $gutter) {
+  width: calc(#{(($size / $columns) * 100) + "%"} - #{$gutter});
+}
+@mixin _full-size($gutter) {
+  @include _partial-size(1, 1, $gutter);
+}
+@mixin _offset-size($size, $columns, $gutter) {
+  margin-left: calc(#{(($size / $columns) * 100) + "%"} + #{$gutter / 2});
+}
+
+@mixin _partial-size-no-spacing($size, $columns) {
+  width: #{(($size / $columns) * 100) + "%"};
+}
+@mixin _full-size-no-spacing() {
+  @include _partial-size-no-spacing(1, 1);
+}
+@mixin _offset-size-no-spacing($size, $columns) {
+  margin-left: #{(($size / $columns) * 100) + "%"};
+}
+
+
+.mdlext-grid {
+
+  @include eq-pts((
+    grid_phone: 0,
+    grid_tablet: strip-unit($grid-tablet-breakpoint),
+    grid_desktop: strip-unit($grid-desktop-breakpoint)
+  ));
+
+  ////////// Phone //////////
+  @include eq('grid_phone') {
+    padding: $grid-phone-margin - ($grid-phone-gutter / 2);
+
+    & > .mdlext-cell {
+      margin: $grid-phone-gutter / 2;
+      @include _partial-size($grid-cell-default-columns, $grid-phone-columns, $grid-phone-gutter);
+    }
+
+    & > .mdlext-cell--hide-phone {
+      display: none !important;
+    }
+
+    // Define order override classes.
+    @for $i from 1 through $grid-max-columns {
+      & > .mdlext-cell--order-#{$i}-phone.mdlext-cell--order-#{$i}-phone {
+        order: $i;
+      }
+    }
+
+    // Define partial sizes for columnNumber < totalColumns.
+    @for $i from 1 through ($grid-phone-columns - 1) {
+      & > .mdlext-cell--#{$i}-col,
+      & > .mdlext-cell--#{$i}-col-phone.mdlext-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 {
+      & > .mdlext-cell--#{$i}-col,
+      & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
+        @include _full-size($grid-phone-gutter);
+      }
+    }
+
+    // Define valid phone offsets.
+    @for $i from 1 through ($grid-phone-columns - 1) {
+      & > .mdlext-cell--#{$i}-offset,
+      & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {
+        @include _offset-size($i, $grid-phone-columns, $grid-phone-gutter);
+      }
+    }
+
+    &.mdlext-grid--no-spacing {
+      padding: 0;
+
+      & > .mdlext-cell {
+        margin: 0;
+        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-phone-columns);
+      }
+
+      // Define partial sizes for columnNumber < totalColumns.
+      @for $i from 1 through ($grid-phone-columns - 1) {
+        & > .mdlext-cell--#{$i}-col,
+        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
+          @include _partial-size-no-spacing($i, $grid-phone-columns);
+        }
+      }
+
+      // Define 100% for everything else.
+      @for $i from $grid-phone-columns through $grid-desktop-columns {
+        & > .mdlext-cell--#{$i}-col,
+        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
+          @include _full-size-no-spacing();
+        }
+      }
+
+      // Define valid phone offsets.
+      @for $i from 1 through ($grid-phone-columns - 1) {
+        & > .mdlext-cell--#{$i}-offset,
+        & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {
+          @include _offset-size-no-spacing($i, $grid-phone-columns);
+        }
+      }
+    }
+  }
+
+  ////////// Tablet //////////
+  @include eq('grid_tablet') {
+    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);
+
+    & > .mdlext-cell {
+      margin: $grid-tablet-gutter / 2;
+      @include _partial-size($grid-cell-default-columns, $grid-tablet-columns, $grid-tablet-gutter);
+    }
+
+    & > .mdlext-cell--hide-tablet {
+      display: none !important;
+    }
+
+    // Define order override classes.
+    @for $i from 1 through $grid-max-columns {
+      & > .mdlext-cell--order-#{$i}-tablet.mdlext-cell--order-#{$i}-tablet {
+        order: $i;
+      }
+    }
+
+    // Define partial sizes for columnNumber < totalColumns.
+    @for $i from 1 through ($grid-tablet-columns - 1) {
+      & > .mdlext-cell--#{$i}-col,
+      & > .mdlext-cell--#{$i}-col-tablet.mdlext-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 {
+      & > .mdlext-cell--#{$i}-col,
+      & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
+        @include _full-size($grid-tablet-gutter);
+      }
+    }
+
+    // Define valid tablet offsets.
+    @for $i from 1 through ($grid-tablet-columns - 1) {
+      & > .mdlext-cell--#{$i}-offset,
+      & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {
+        @include _offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);
+      }
+    }
+
+    &.mdlext-grid--no-spacing {
+      padding: 0;
+
+      & > .mdlext-cell {
+        margin: 0;
+        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-tablet-columns);
+      }
+
+      // Define partial sizes for columnNumber < totalColumns.
+      @for $i from 1 through ($grid-tablet-columns - 1) {
+        & > .mdlext-cell--#{$i}-col,
+        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
+          @include _partial-size-no-spacing($i, $grid-tablet-columns);
+        }
+      }
+
+      // Define 100% for everything else.
+      @for $i from $grid-tablet-columns through $grid-desktop-columns {
+        & > .mdlext-cell--#{$i}-col,
+        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
+          @include _full-size-no-spacing();
+        }
+      }
+
+      // Define valid tablet offsets.
+      @for $i from 1 through ($grid-tablet-columns - 1) {
+        & > .mdlext-cell--#{$i}-offset,
+        & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {
+          @include _offset-size-no-spacing($i, $grid-tablet-columns);
+        }
+      }
+    }
+  }
+
+  ////////// Desktop //////////
+  @include eq('grid_desktop') {
+    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);
+
+    & > .mdlext-cell {
+      margin: $grid-desktop-gutter / 2;
+      @include _partial-size($grid-cell-default-columns, $grid-desktop-columns, $grid-desktop-gutter);
+    }
+
+    & > .mdlext-cell--hide-desktop {
+      display: none !important;
+    }
+
+    // Define order override classes.
+    @for $i from 1 through $grid-max-columns {
+      & > .mdlext-cell--order-#{$i}-desktop.mdlext-cell--order-#{$i}-desktop {
+        order: $i;
+      }
+    }
+
+    // Define partial sizes for all numbers of columns.
+    @for $i from 1 through $grid-desktop-columns {
+      & > .mdlext-cell--#{$i}-col,
+      & > .mdlext-cell--#{$i}-col-desktop.mdlext-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) {
+      & > .mdlext-cell--#{$i}-offset,
+      & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {
+        @include _offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);
+      }
+    }
+
+    &.mdlext-grid--no-spacing {
+      padding: 0;
+
+      & > .mdlext-cell {
+        margin: 0;
+        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-desktop-columns);
+      }
+
+      // Define partial sizes for all numbers of columns.
+      @for $i from 1 through $grid-desktop-columns {
+        & > .mdlext-cell--#{$i}-col,
+        & > .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {
+          @include _partial-size-no-spacing($i, $grid-desktop-columns);
+        }
+      }
+
+      // Define valid desktop offsets.
+      @for $i from 1 through ($grid-desktop-columns - 1) {
+        & > .mdlext-cell--#{$i}-offset,
+        & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {
+          @include _offset-size-no-spacing($i, $grid-desktop-columns);
+        }
+      }
+    }
+  }
+}
+
+@include eq-selectors;
diff --git a/node_modules/mdl-ext/src/grid/_grid-media-queries.scss b/node_modules/mdl-ext/src/grid/_grid-media-queries.scss
new file mode 100644
index 0000000..c942ff1
--- /dev/null
+++ b/node_modules/mdl-ext/src/grid/_grid-media-queries.scss
@@ -0,0 +1,238 @@
+@charset "UTF-8";
+
+/**
+ * This code is modified from Material Design Lite _grid.sass,
+ * which is Licensed under the Apache License, Version 2.0
+ * 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.
+ *
+ */
+
+///////////////////////////////////////////////////////////////////////
+//
+// Grid media queries, modified from Material Design Lite _grid.sass
+//
+///////////////////////////////////////////////////////////////////////
+// Use of this module requires the user to include variables from material-design-lite in hers/his main SASS module
+//@import "../../node_modules/material-design-lite/src/variables";
+
+
+.mdlext-grid {
+  display: flex;
+  flex-flow: row wrap;
+  margin: 0 auto;
+  align-items: stretch;
+
+  &.mdlext-grid--no-spacing {
+    padding: 0;
+  }
+}
+
+.mdlext-cell {
+  box-sizing: border-box;
+}
+
+
+.mdlext-cell--top {
+  align-self: flex-start;
+}
+
+.mdlext-cell--middle {
+  align-self: center;
+}
+
+.mdlext-cell--bottom {
+  align-self: flex-end;
+}
+
+.mdlext-cell--stretch {
+  align-self: stretch;
+}
+
+.mdlext-grid.mdlext-grid--no-spacing > .mdlext-cell {
+  margin: 0;
+}
+
+// Define order override classes.
+@for $i from 1 through $grid-max-columns {
+  .mdlext-cell--order-#{$i} {
+    order: $i;
+  }
+}
+
+
+// Mixins for width calculation.
+@mixin partial-size($size, $columns, $gutter) {
+  width: calc(#{(($size / $columns) * 100) + "%"} - #{$gutter});
+
+  .mdlext-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});
+
+  .mdlext-grid.mdlext-grid--no-spacing > & {
+    margin-left: #{(($size / $columns) * 100) + "%"};
+  }
+}
+
+
+
+////////// Phone //////////
+
+/* stylelint-disable */
+@media (max-width: $grid-tablet-breakpoint - 1) {
+/* stylelint-enable */
+  .mdlext-grid {
+    padding: $grid-phone-margin - ($grid-phone-gutter / 2);
+  }
+
+  .mdlext-cell {
+    margin: $grid-phone-gutter / 2;
+    @include partial-size($grid-cell-default-columns, $grid-phone-columns, $grid-phone-gutter);
+  }
+
+  .mdlext-cell--hide-phone {
+    display: none !important;
+  }
+
+  // Define order override classes.
+  @for $i from 1 through $grid-max-columns {
+    .mdlext-cell--order-#{$i}-phone.mdlext-cell--order-#{$i}-phone {
+      order: $i;
+    }
+  }
+
+  // Define partial sizes for columnNumber < totalColumns.
+  @for $i from 1 through ($grid-phone-columns - 1) {
+    .mdlext-cell--#{$i}-col,
+    .mdlext-cell--#{$i}-col-phone.mdlext-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 {
+    .mdlext-cell--#{$i}-col,
+    .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
+      @include full-size($grid-phone-gutter);
+    }
+  }
+
+  // Define valid phone offsets.
+  @for $i from 1 through ($grid-phone-columns - 1) {
+    .mdlext-cell--#{$i}-offset,
+    .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {
+      @include offset-size($i, $grid-phone-columns, $grid-phone-gutter);
+    }
+  }
+}
+
+
+////////// Tablet //////////
+
+/* stylelint-disable */
+@media (min-width: $grid-tablet-breakpoint) and (max-width: $grid-desktop-breakpoint - 1) { /* stylelint-enable */
+  .mdlext-grid {
+    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);
+  }
+
+  .mdlext-cell {
+    margin: $grid-tablet-gutter / 2;
+    @include partial-size($grid-cell-default-columns, $grid-tablet-columns, $grid-tablet-gutter);
+  }
+
+  .mdlext-cell--hide-tablet {
+    display: none !important;
+  }
+
+  // Define order override classes.
+  @for $i from 1 through $grid-max-columns {
+    .mdlext-cell--order-#{$i}-tablet.mdlext-cell--order-#{$i}-tablet {
+      order: $i;
+    }
+  }
+
+  // Define partial sizes for columnNumber < totalColumns.
+  @for $i from 1 through ($grid-tablet-columns - 1) {
+    .mdlext-cell--#{$i}-col,
+    .mdlext-cell--#{$i}-col-tablet.mdlext-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 {
+    .mdlext-cell--#{$i}-col,
+    .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
+      @include full-size($grid-tablet-gutter);
+    }
+  }
+
+  // Define valid tablet offsets.
+  @for $i from 1 through ($grid-tablet-columns - 1) {
+    .mdlext-cell--#{$i}-offset,
+    .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {
+      @include offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);
+    }
+  }
+}
+
+
+////////// Desktop //////////
+
+@media (min-width: $grid-desktop-breakpoint) {
+  .mdlext-grid {
+    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);
+  }
+
+  .mdlext-cell {
+    margin: $grid-desktop-gutter / 2;
+    @include partial-size($grid-cell-default-columns, $grid-desktop-columns, $grid-desktop-gutter);
+  }
+
+  .mdlext-cell--hide-desktop {
+    display: none !important;
+  }
+
+  // Define order override classes.
+  @for $i from 1 through $grid-max-columns {
+    .mdlext-cell--order-#{$i}-desktop.mdlext-cell--order-#{$i}-desktop {
+      order: $i;
+    }
+  }
+
+  // Define partial sizes for all numbers of columns.
+  @for $i from 1 through $grid-desktop-columns {
+    .mdlext-cell--#{$i}-col,
+    .mdlext-cell--#{$i}-col-desktop.mdlext-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) {
+    .mdlext-cell--#{$i}-offset,
+    .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {
+      @include offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);
+    }
+  }
+}
+
diff --git a/node_modules/mdl-ext/src/grid/readme.md b/node_modules/mdl-ext/src/grid/readme.md
new file mode 100644
index 0000000..569e7c8
--- /dev/null
+++ b/node_modules/mdl-ext/src/grid/readme.md
@@ -0,0 +1,52 @@
+# Grid
+
+![Grid](../../etc/grid.png)
+
+A responsive **grid** based on **element queries** in favour of media queries.
+
+## Introduction
+Grids 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.
+
+The Material Design Lite Ext (MDLEXT) grid has two versions; one version based on media queries and one version 
+based on **element queries**. The MDLEXT grid is a copy of the 
+[Material Design Lite grid](https://github.com/google/material-design-lite/tree/master/src/grid) - with additional 
+element queries support to distribute grid cells in a more responsive fashion.
+
+### How to use the eq.js version of MDLEXT grid
+
+&nbsp;1. Install [eq.js](https://github.com/Snugug/eq.js).
+```sh
+$ npm install --save eq.js
+```
+
+&nbsp;2. Import `mdl-ext-eqjs.scss` in your main SASS file. Remove `mdl-ext.scss` - they can not co exist.
+```css
+@import '../node_modules/mdl-ext/src/mdl-ext-eqjs';
+```
+
+&nbsp;3. Import or Require `eq.js`.  
+```javascript
+const eqjs = require('eq.js'); // ... or:  import eqjs from 'eq.js';
+```
+
+&nbsp;4. Optionally trigger `eq.js`<br/>
+If you're loading html fragments using e.g. Ajax, then trigger `eq.js` after page load.
+
+```javascript
+window.fetch(href, {method: 'get'})
+ .then(response => response.text())
+ .then(text => {
+   contentPanelEl.insertAdjacentHTML('afterbegin', text);
+
+   // Trigger eq.js
+   eqjs.refreshNodes();
+   eqjs.query(undefined, true);
+})
+.catch(err => console.error(err));
+```
+
+An example of how to use `eq.js` in a SPA can be found [here](https://github.com/leifoolsen/mdl-webpack).     
+
+## To include a MDLEXT **grid** component:
+Folow the documention for the [original mdl-grid](https://github.com/google/material-design-lite/blob/master/src/grid/README.md#to-include-an-mdl-grid-component). Just replace `mdl-` with `mdlext-`, and you're good to go. 
diff --git a/node_modules/mdl-ext/src/grid/snippets/grid.html b/node_modules/mdl-ext/src/grid/snippets/grid.html
new file mode 100644
index 0000000..26e6b11
--- /dev/null
+++ b/node_modules/mdl-ext/src/grid/snippets/grid.html
@@ -0,0 +1,121 @@
+<p>Element queries vs Media Queries. Drag the slider to see the effect</p>
+
+<style>
+
+  .demo-grid {
+    margin-bottom: 16px;
+  }
+  .demo-grid .mdl-grid,
+  .demo-grid .mdlext-grid {
+    /*padding: 0;*/
+  }
+  .demo-grid .mdl-cell,
+  .demo-grid .mdlext-cell {
+    background: rgb(63,81,181);
+    text-align: center;
+    color: white;
+    padding: 10px;
+    border: 1px solid #aaaaaa;
+  }
+  .demo-grid .mdl-cell:nth-child(odd),
+  .demo-grid .mdlext-cell:nth-child(odd) {
+    background: rgb(33,150,243);
+  }
+  .demo-grid-c .mdl-cell,
+  .demo-grid-c .mdlext-cell {
+    background: rgb(255,213,79);
+    color: #000;
+    border: 0;
+  }
+  .demo-grid-c .mdl-cell:nth-child(odd),
+  .demo-grid-c .mdlext-cell:nth-child(odd) {
+    background: rgb(165,214,167);
+    color: #000;
+  }
+</style>
+
+
+<p id="grid-container-width" style="text-align: center;">
+  <strong>100</strong>%
+  <input class="mdl-slider mdl-js-slider" type="range" min="50" max="100" value="100" step="10" tabindex="0">
+</p>
+
+<div style="border: 1px solid #dddddd;">
+  <div id="grid-container" style="margin: 0 auto;">
+
+    <h5>mdlext-grid, using element queries</h5>
+    <div class="demo-grid">
+      <div class="mdlext-grid mdlext-grid--no-spacing">
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+        <div class="mdlext-cell mdlext-cell--1-col">1</div>
+      </div>
+    </div>
+
+    <div class="demo-grid demo-grid-c">
+      <div class="mdlext-grid mdlext-grid--no-spacing">
+        <div class="mdlext-cell mdlext-cell--4-col mdlext-cell--2-col-tablet mdlext-cell--1-col-phone">4 (2 tablet, 1 phone)</div>
+        <div class="mdlext-cell mdlext-cell--6-col mdlext-cell--4-col-tablet mdlext-cell--3-col-phone">6 (4 tablet, 3 phone)</div>
+        <div class="mdlext-cell mdlext-cell--2-col mdlext-cell--2-col-tablet mdlext-cell--hide-phone">2 (2 tablet, hide phone)</div>
+      </div>
+    </div>
+
+
+    <h5>mdl-grid, using media queries</h5>
+    <div class="demo-grid">
+      <div class="mdl-grid mdl-grid--no-spacing">
+        <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>
+
+    <div class="demo-grid demo-grid-c">
+      <div class="mdl-grid mdl-grid--no-spacing">
+        <div class="mdl-cell mdl-cell--4-col mdl-cell--2-col-tablet mdl-cell--1-col-phone">4 (2 tablet, 1 phone)</div>
+        <div class="mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--3-col-phone">6 (4 tablet, 3 phone)</div>
+        <div class="mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--hide-phone">2 (2 tablet, hide phone)</div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<script>
+  'use strict';
+  window.addEventListener('load', function() {
+    (function() {
+      'use strict';
+      var widthLabel = document.querySelector('#grid-container-width strong');
+      var slider = document.querySelector('#grid-container-width input');
+
+      slider.addEventListener('input', function(e) {
+        setWidth(this.value);
+      }.bind(slider));
+
+      function setWidth(value) {
+        widthLabel.innerText = value;
+        document.querySelector('#grid-container').style.width = value + '%';
+        eqjs.refreshNodes();
+        eqjs.query(undefined, true);
+      }
+    }());
+  });
+</script>
diff --git a/node_modules/mdl-ext/src/index.js b/node_modules/mdl-ext/src/index.js
new file mode 100644
index 0000000..b6fa845
--- /dev/null
+++ b/node_modules/mdl-ext/src/index.js
@@ -0,0 +1,10 @@
+import './utils';
+import './accordion/accordion';
+import './collapsible/collapsible';
+import './carousel/carousel';
+import './lightboard/lightboard';
+import './lightbox/lightbox';
+import './menu-button/menu-button';
+import './selectfield/selectfield';
+import './formatfield/formatfield';
+import './sticky-header/sticky-header';
diff --git a/node_modules/mdl-ext/src/lightboard/_lightboard-eqjs.scss b/node_modules/mdl-ext/src/lightboard/_lightboard-eqjs.scss
new file mode 100644
index 0000000..7d2666b
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightboard/_lightboard-eqjs.scss
@@ -0,0 +1,110 @@
+@charset "UTF-8";
+//////////////////////////////////////////////////////////////////////////////////
+//
+// Element queries for _lightbox.scss, based on: https://github.com/Snugug/eq.js
+//
+//////////////////////////////////////////////////////////////////////////////////
+
+@import "../variables";
+@import "../functions";
+
+.mdlext-lightboard {
+
+  @include eq-pts((
+    lightboard_medium_small: strip-unit($mdlext-lightboard-medium-small-breakpoint),
+    lightboard_medium: strip-unit($mdlext-lightboard-medium-breakpoint),
+    lightboard_medium_large: strip-unit($mdlext-lightboard-medium-large-breakpoint),
+    lightboard_large: strip-unit($mdlext-lightboard-large-breakpoint)
+  ));
+
+  ////// small - meduim-small //////
+  @include eq('lightboard_medium_small') {
+    padding: calc((#{$mdlext-lightboard-medium-small-margin} - #{$mdlext-lightboard-medium-small-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-medium-small-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100% - #{$mdlext-lightboard-medium-small-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-medium-small-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100%);
+      }
+    }
+  }
+
+  ////// meduim-small - medium //////
+  @include eq('lightboard_medium') {
+    padding: calc((#{$mdlext-lightboard-medium-margin} - #{$mdlext-lightboard-medium-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-medium-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100% - #{$mdlext-lightboard-medium-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-medium-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100%);
+      }
+    }
+  }
+
+  ////// meduim - medium-large //////
+  @include eq('lightboard_medium_large') {
+    padding: calc((#{$mdlext-lightboard-medium-large-margin} - #{$mdlext-lightboard-medium-large-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-medium-large-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100% - #{$mdlext-lightboard-medium-large-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-medium-large-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100%);
+      }
+    }
+  }
+
+  ////// meduim-large - large //////
+  @include eq('lightboard_large') {
+    padding: calc((#{$mdlext-lightboard-large-margin} - #{$mdlext-lightboard-large-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-large-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-large-columns} * 100% - #{$mdlext-lightboard-large-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-large-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-large-columns} * 100%);
+      }
+    }
+  }
+}
+
+@include eq-selectors;
+
diff --git a/node_modules/mdl-ext/src/lightboard/_lightboard-media-queries.scss b/node_modules/mdl-ext/src/lightboard/_lightboard-media-queries.scss
new file mode 100644
index 0000000..b87f830
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightboard/_lightboard-media-queries.scss
@@ -0,0 +1,113 @@
+@charset "UTF-8";
+
+//////////////////////////////
+//
+// Lightboard media queries
+//
+//////////////////////////////
+@import "../variables";
+
+////////// Small /////////////
+//@media (max-width: $mdlext-lightboard-medium-small-breakpoint - 1) {
+//  // This is the default, see: _lightboard.scss
+//}
+
+////////// Medium small //////////
+/* stylelint-disable */
+@media (min-width: $mdlext-lightboard-medium-small-breakpoint) and (max-width: $mdlext-lightboard-medium-breakpoint - 1) { /* stylelint-enable */
+  .mdlext-lightboard {
+    padding: calc((#{$mdlext-lightboard-medium-small-margin} - #{$mdlext-lightboard-medium-small-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-medium-small-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100% - #{$mdlext-lightboard-medium-small-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-medium-small-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-medium-small-columns} * 100%);
+      }
+    }
+  }
+}
+
+////////// Medium //////////
+/* stylelint-disable */
+@media (min-width: $mdlext-lightboard-medium-breakpoint) and (max-width: $mdlext-lightboard-medium-large-breakpoint - 1) { /* stylelint-enable */
+  .mdlext-lightboard {
+    padding: calc((#{$mdlext-lightboard-medium-margin} - #{$mdlext-lightboard-medium-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-medium-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100% - #{$mdlext-lightboard-medium-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-medium-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-medium-columns} * 100%);
+      }
+    }
+  }
+}
+
+////////// Medium large //////////
+/* stylelint-disable */
+@media (min-width: $mdlext-lightboard-medium-large-breakpoint)  and (max-width: $mdlext-lightboard-large-breakpoint - 1) { /* stylelint-enable */
+  .mdlext-lightboard {
+    padding: calc((#{$mdlext-lightboard-medium-large-margin} - #{$mdlext-lightboard-medium-large-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-medium-large-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100% - #{$mdlext-lightboard-medium-large-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-medium-large-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-medium-large-columns} * 100%);
+      }
+    }
+  }
+}
+
+////////// Large //////////
+@media (min-width: $mdlext-lightboard-large-breakpoint) {
+  .mdlext-lightboard {
+    padding: calc((#{$mdlext-lightboard-large-margin} - #{$mdlext-lightboard-large-gutter}) / 2);
+
+    .mdlext-lightboard__slide {
+      margin: calc(#{$mdlext-lightboard-large-gutter} / 2);
+      width: calc(1 / #{$mdlext-lightboard-large-columns} * 100% - #{$mdlext-lightboard-large-gutter});
+
+      .mdlext-lightboard__slide__frame figure {
+        margin: $mdlext-lightboard-large-frame-width;
+      }
+    }
+    &.mdlext-lightboard--no-spacing {
+      padding: 0;
+
+      .mdlext-lightboard__slide {
+        margin: 0;
+        width: calc(1 / #{$mdlext-lightboard-large-columns} * 100%);
+      }
+    }
+  }
+}
+
diff --git a/node_modules/mdl-ext/src/lightboard/_lightboard.scss b/node_modules/mdl-ext/src/lightboard/_lightboard.scss
new file mode 100644
index 0000000..775d283
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightboard/_lightboard.scss
@@ -0,0 +1,178 @@
+@charset "UTF-8";
+
+/**
+ * Copyright 2016 Leif Olsen. 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 lightboard is a translucent surface illuminated from behind, used for situations
+ * where a shape laid upon the surface needs to be seen with high contrast. In the "old days" of photography
+ * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox
+ * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.
+ */
+
+// Use of this module requires the user to include variables from material-design-lite
+//@import "../../node_modules/material-design-lite/src/variables";
+//@import "../../node_modules/material-design-lite/src/mixins";
+@import "../variables";
+
+ul.mdlext-lightboard {
+  list-style: none;
+}
+
+.mdlext-lightboard {
+  box-sizing: border-box;
+  margin: 0 auto;
+  padding: 0;
+  display: flex;
+  flex-flow:row wrap;
+  align-items: stretch;
+
+  *,
+  *::before,
+  *::after,
+  input[type="search"] {
+    box-sizing: border-box;
+  }
+
+  .mdlext-lightboard__slide {
+    background-color: $mdlext-lightboard-slide-background-color;
+    border: 1px solid $mdlext-lightboard-slide-border-color;
+    border-radius: $mdlext-lightboard-slide-border-radius;
+    box-shadow: $mdlext-lightboard-slide-box-shadow;
+    position: relative;
+    display: block;
+    max-width: $mdlext-lightboard-slide-max-size;
+
+    &::before {
+      // 1:1 ratio
+      // TODO: Use a class for ratio so the grid can display slides with different ratios (16:9, 16:10, 4:3 ...)
+      content: '';
+      display: block;
+      padding-top: 100%;
+    }
+    &:hover,
+    &:active,
+    &:focus {
+      border-color: $mdlext-lightboard-slide-border-color-hover;
+      background-color: $mdlext-lightboard-slide-background-color-hover;
+      box-shadow: $mdlext-lightboard-slide-box-shadow-hover;
+
+      figcaption {
+        color: rgba(0, 0, 0, 1) !important;
+        background-color: rgba(255, 255, 255, 0.2);
+      }
+    }
+    &:focus {
+      outline-offset: -2px;
+      outline-color: $mdlext-lightboard-focus-outline-color;
+    }
+    &[aria-selected='true'] {
+      background-color: $mdlext-lightboard-slide-active-bacground-color;
+
+      figcaption {
+        color: rgba(0, 0, 0, 1) !important;
+        background-color: rgba(255, 255, 255, 0.2);
+      }
+    }
+    &__frame,
+    &__ripple-container {
+      text-decoration: none;
+      display: block;
+      overflow: hidden;
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+
+      &:focus {
+        outline-offset: -2px;
+        outline-color: $mdlext-lightboard-focus-outline-color;
+      }
+      & .mdl-ripple {
+        background: $mdlext-lightboard-ripple-color;
+      }
+      figure {
+        display: block;
+        position: absolute;
+        top: 0;
+        left: 0;
+        right: 0;
+        bottom: 0;
+
+        img {
+          position: absolute;
+          top: 0;
+          left: 0;
+          right: 0;
+          bottom: 0;
+          margin: auto;
+          max-width: 100%;
+          max-height: 100%;
+          border-width: 0;
+          border-radius: $mdlext-lightboard-slide-inner-border-radius;
+        }
+        figcaption {
+          @include typo-caption($colorContrast: false, $usePreferred: true);
+
+          color: $mdlext-lightboard-figcaption-text-color;
+          position: absolute;
+          bottom: -2px;
+          white-space: nowrap;
+          overflow: hidden;
+          max-width: 100%;
+          width: 100%;
+          text-align: center;
+          text-overflow: ellipsis;
+          padding: 4px 0;
+        }
+      }
+      &:hover {
+        figcaption {
+          // As far as I can see there is no way to darken/lighten a text color
+          // defined by MDL, due to the "unqote" functions.
+          // So this is a hack
+          color: rgba(0, 0, 0, 1) !important;
+          background-color: rgba(255, 255, 255, 0.2);
+        }
+      }
+    }
+  }
+}
+
+////// Media / Element queries default, Small //////
+.mdlext-lightboard {
+  padding: calc((#{$mdlext-lightboard-small-margin} - #{$mdlext-lightboard-small-gutter}) / 2);
+
+  .mdlext-lightboard__slide {
+    margin: calc(#{$mdlext-lightboard-small-gutter} / 2);
+    width: calc(1 / #{$mdlext-lightboard-small-columns} * 100% - #{$mdlext-lightboard-small-gutter});
+
+    .mdlext-lightboard__slide__frame figure {
+      margin: $mdlext-lightboard-small-frame-width;
+    }
+  }
+  &.mdlext-lightboard--no-spacing {
+    padding: 0;
+
+    .mdlext-lightboard__slide {
+      margin: 0;
+      width: calc(1 / #{$mdlext-lightboard-small-columns} * 100%);
+    }
+  }
+}
+
+// Import one of _lightboard-media-queries.scss or _lightboard-eq-js.scss to complete SASS
diff --git a/node_modules/mdl-ext/src/lightboard/lightboard.js b/node_modules/mdl-ext/src/lightboard/lightboard.js
new file mode 100644
index 0000000..9a49559
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightboard/lightboard.js
@@ -0,0 +1,332 @@
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/**
+ * A lightboard is a translucent surface illuminated from behind, used for situations
+ * where a shape laid upon the surface needs to be seen with high contrast. In the "old days" of photography
+ * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox
+ * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.
+ */
+
+import {
+  VK_ENTER,
+  VK_SPACE,
+  VK_END,
+  VK_HOME,
+  VK_ARROW_LEFT,
+  VK_ARROW_UP,
+  VK_ARROW_RIGHT,
+  VK_ARROW_DOWN,
+  IS_UPGRADED,
+  MDL_RIPPLE,
+  MDL_RIPPLE_COMPONENT,
+  MDL_RIPPLE_EFFECT,
+  MDL_RIPPLE_EFFECT_IGNORE_EVENTS
+} from '../utils/constants';
+
+const MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container';
+
+(function() {
+  'use strict';
+
+  //const LIGHTBOARD = 'mdlext-lightboard';
+  const LIGHTBOARD_ROLE = 'grid';
+  const SLIDE = 'mdlext-lightboard__slide';
+  const SLIDE_ROLE  = 'gridcell';
+  const SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  const MaterialExtLightboard = function MaterialExtLightboard(element) {
+    // Stores the element.
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtLightboard'] = MaterialExtLightboard;
+
+
+  // Helpers
+  const getSlide = element => {
+    return element ? element.closest(`.${SLIDE}`) : null;
+  };
+
+
+
+  // Private methods.
+
+  /**
+   * Select a slide, i.e. set aria-selected="true"
+   * @param element
+   * @private
+   */
+  MaterialExtLightboard.prototype.selectSlide_ = function(element) {
+    const slide = getSlide(element);
+    if( slide && !slide.hasAttribute('aria-selected') ) {
+      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected="true"]`)]
+        .forEach(selectedSlide => selectedSlide.removeAttribute('aria-selected'));
+
+      slide.setAttribute('aria-selected', 'true');
+    }
+  };
+
+
+  /**
+   * Dispatch select event
+   * @param {Element} slide The slide that caused the event
+   * @private
+   */
+  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function ( slide ) {
+    this.element_.dispatchEvent(
+      new CustomEvent('select', {
+        bubbles: true,
+        cancelable: true,
+        detail: { source: slide }
+      })
+    );
+  };
+
+  /**
+   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade
+   * @param event. A custom event
+   * @private
+   */
+  MaterialExtLightboard.prototype.commandHandler_ = function( event ) {
+    event.preventDefault();
+    event.stopPropagation();
+
+    if(event && event.detail) {
+      this.command(event.detail);
+    }
+  };
+
+
+  // Public methods
+
+  /**
+   * Initialize lightboard slides
+   * @public
+   */
+  MaterialExtLightboard.prototype.upgradeSlides = function() {
+
+    const addRipple = slide => {
+      // Use slide frame as ripple container
+      if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {
+        const a = slide.querySelector(`.${SLIDE_TABSTOP}`);
+        if(a) {
+          const rippleContainer = a;
+          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);
+          rippleContainer.classList.add(MDL_RIPPLE_EFFECT);
+          const ripple = document.createElement('span');
+          ripple.classList.add(MDL_RIPPLE);
+          rippleContainer.appendChild(ripple);
+          componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);
+        }
+      }
+    };
+
+    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);
+
+    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {
+
+      slide.setAttribute('role', SLIDE_ROLE);
+
+      if(!slide.querySelector('a')) {
+        slide.setAttribute('tabindex', '0');
+      }
+      if(hasRippleEffect) {
+        addRipple(slide);
+      }
+    });
+  };
+  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;
+
+
+  /**
+   * Execute command
+   * @param detail
+   * @public
+   */
+  MaterialExtLightboard.prototype.command = function( detail ) {
+
+    const firstSlide = () => {
+      return this.element_.querySelector(`.${SLIDE}:first-child`);
+    };
+
+    const lastSlide = () => {
+      return this.element_.querySelector(`.${SLIDE}:last-child`);
+    };
+
+    const nextSlide = () => {
+      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected="true"]`).nextElementSibling;
+      return slide ? slide : firstSlide();
+    };
+
+    const prevSlide = () => {
+      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected="true"]`).previousElementSibling;
+      return slide ? slide : lastSlide();
+    };
+
+    if(detail && detail.action) {
+
+      const { action, target } = detail;
+
+      let slide;
+      switch (action.toLowerCase()) {
+        case 'select':
+          slide = getSlide(target);
+          this.dispatchSelectEvent_(slide);
+          break;
+        case 'first':
+          slide = firstSlide();
+          break;
+        case 'next':
+          slide = nextSlide();
+          break;
+        case 'prev':
+          slide = prevSlide();
+          break;
+        case 'last':
+          slide = lastSlide();
+          break;
+        case 'upgrade':
+          this.upgradeSlides();
+          break;
+        default:
+          throw new Error(`Unknown action "${action}". Action must be one of "first", "next", "prev", "last", "select" or "upgrade"`);
+      }
+
+      if (slide) {
+        const a = slide.querySelector('a');
+        if (a) {
+          a.focus();
+        }
+        else {
+          slide.focus();
+        }
+
+        // Workaround for JSDom testing:
+        // In JsDom 'element.focus()' does not trigger any focus event
+        if(!slide.hasAttribute('aria-selected')) {
+          this.selectSlide_(slide);
+        }
+
+      }
+    }
+  };
+  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;
+
+
+  /**
+   * Initialize component
+   */
+  MaterialExtLightboard.prototype.init = function() {
+
+    const keydownHandler = event => {
+
+      if(event.target !== this.element_) {
+        let action;
+        let target;
+        switch (event.keyCode) {
+          case VK_HOME:
+            action = 'first';
+            break;
+          case VK_END:
+            action = 'last';
+            break;
+          case VK_ARROW_UP:
+          case VK_ARROW_LEFT:
+            action = 'prev';
+            break;
+          case VK_ARROW_DOWN:
+          case VK_ARROW_RIGHT:
+            action = 'next';
+            break;
+          case VK_ENTER:
+          case VK_SPACE:
+            action = 'select';
+            target = event.target;
+            break;
+        }
+        if(action)  {
+          event.preventDefault();
+          event.stopPropagation();
+          this.command( { action: action, target: target } );
+        }
+      }
+    };
+
+    const clickHandler = event => {
+      event.preventDefault();
+      event.stopPropagation();
+
+      if(event.target !== this.element_) {
+        this.command( { action: 'select', target: event.target } );
+      }
+    };
+
+    const focusHandler = event => {
+      event.preventDefault();
+      event.stopPropagation();
+
+      if(event.target !== this.element_) {
+        this.selectSlide_(event.target);
+      }
+    };
+
+
+    if (this.element_) {
+      this.element_.setAttribute('role', LIGHTBOARD_ROLE);
+
+      if (this.element_.classList.contains(MDL_RIPPLE_EFFECT)) {
+        this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);
+      }
+
+      // Remove listeners, just in case ...
+      this.element_.removeEventListener('command', this.commandHandler_);
+      this.element_.removeEventListener('keydown', keydownHandler);
+      this.element_.removeEventListener('click', clickHandler);
+      this.element_.removeEventListener('focus', focusHandler);
+
+      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);
+      this.element_.addEventListener('keydown', keydownHandler, true);
+      this.element_.addEventListener('click', clickHandler, true);
+      this.element_.addEventListener('focus', focusHandler, true);
+
+      this.upgradeSlides();
+
+      this.element_.classList.add(IS_UPGRADED);
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  /* jshint undef:false */
+  componentHandler.register({
+    constructor: MaterialExtLightboard,
+    classAsString: 'MaterialExtLightboard',
+    cssClass: 'mdlext-js-lightboard',
+    widget: true
+  });
+
+})();
diff --git a/node_modules/mdl-ext/src/lightboard/readme.md b/node_modules/mdl-ext/src/lightboard/readme.md
new file mode 100644
index 0000000..429e88e
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightboard/readme.md
@@ -0,0 +1,447 @@
+# Lightboard
+
+![Lightboard](../../etc/lightboard.png)
+
+Thumbnails in a responsive, fluent grid.
+
+## Introduction
+A lightboard is a translucent surface illuminated from behind, used for situations where a shape laid 
+upon the surface needs to be seen with high contrast. In the "old days" of photography photograpers 
+used a lightboard to get a quick view of, sorting and organizing their slides.
+
+The Material Design Lite Ext (MDLEXT) lightboard is defined and enclosed by a container element. The slides are 
+distributed in a row column fashion, with repect to the available screen size. The slides scales proportionally to fill 
+available horizontal space, or the available content size, depending on the type of queries you choose to apply 
+for your responsive breakpoints. The number of slides per row depends on available space. The component 
+adds `role='grid'` to the lightboard and `role='gridcell` to the individual slides.
+
+The Material Design Lite Ext (MDLEXT) lightboard has two versions; one version based on media queries and one version 
+based on **element queries**.
+
+### How to use the eq.js version of MDLEXT lightboard
+
+&nbsp;1. Install [eq.js](https://github.com/Snugug/eq.js).
+```sh
+$ npm install --save eq.js
+```
+
+&nbsp;2. Import `mdl-ext-eqjs.scss` in your main SASS file. Remove `mdl-ext.scss` - they can not co exist.
+```css
+@import '../node_modules/mdl-ext/src/mdl-ext-eqjs';
+```
+
+&nbsp;3. Import or Require `eq.js`.  
+```javascript
+const eqjs = require('eq.js'); // ... or:  import eqjs from 'eq.js';
+```
+
+&nbsp;4. Upgrade DOM and trigger `eq.js`<br/>
+If you're loading html fragments, using e.g. Ajax, then upgrade DOM and trigger `eq.js` after page load.
+
+```javascript
+window.fetch(href, {method: 'get'})
+ .then(response => response.text())
+ .then(text => {
+   contentPanelEl.insertAdjacentHTML('afterbegin', text);
+
+    // Upgrade DOM
+    componentHandler.upgradeDom();
+
+   // Trigger eq.js
+   eqjs.refreshNodes();
+   eqjs.query(undefined, true);
+})
+.catch(err => console.error(err));
+```
+
+An example of how to use `eq.js` in a SPA can be found [here](https://github.com/leifoolsen/mdl-webpack).                           
+
+## To include a MDLEXT lightboard component
+&nbsp;1. Code a `<ul>` element with `class="mdlext-lightboard mdlext-js-lightboard"` to hold the lightboard slides.
+```html
+<ul class="mdlext-lightboard mdlext-js-lightboard">
+</ul>
+```
+
+&nbsp;2. Code a `<li>` element with `class="mdlext-lightboard__slide"`  to hold an individual slide.
+```html
+<ul class="mdlext-lightboard mdlext-js-lightboard">
+  <li class="mdlext-lightboard__slide">
+  <li>
+</ul>
+```
+
+&nbsp;3. Code an `<a href="#">` element with `class="mdlext-lightboard__slide__frame"`  to hold the slide frame. Optionally add a href to a large version of the image shown in the slide.
+```html
+<ul class="mdlext-lightboard mdlext-js-lightboard">
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+    </a>  
+  <li>
+</ul>
+```
+
+&nbsp;4. Code a `<figure>` element (decorates frame and center image in slide).  
+```html
+<ul class="mdlext-lightboard mdlext-js-lightboard">
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+      </figure>
+    </a>  
+  <li>
+</ul>
+```
+
+&nbsp;5. Inside the `<figure>` element add an `<img>` element with reference to the thumbnail image to be shown in slide. Optionally add a `<figcaption>` element to hold the image title.    
+```html
+<ul class="mdlext-lightboard mdlext-js-lightboard">
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D802591.jpg" title="Whooper swans in flight"/>
+        <figcaption>_D802591.jpg</figcaption>
+      </figure>
+    </a>  
+  <li>
+</ul>
+```
+
+&nbsp;6. Repeat steps 2..5 for each slide required.
+
+### Example
+Lightboard with eight slides, ripple effect on each slide, no spacing between slides, subscribes to lightboard `select` event.
+
+```html
+<ul id="lightboard-1" class="mdlext-lightboard mdlext-js-lightboard
+  mdlext-lightboard--no-spacing
+  mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events">
+
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D802141.jpg" title="Northern goshawk with prey"/>
+        <figcaption>_D802141.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D802591.jpg" title="Whooper swans in flight"/>
+        <figcaption>_D802591.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D804370-3.jpg" title="European green woodpecker"/>
+        <figcaption>_D804370-3.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D808689.jpg" title="The bridge"/>
+        <figcaption>_D808689.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D802181.jpg" title="Landscape in blue pastel"/>
+        <figcaption>_D802181.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D800912.jpg" title="Hiking the mountains of Dovre"/>
+        <figcaption>_D800912.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_D809453-_D809457-4.jpg" title="Train to nowhwere. Ny Aalesund, Spitsbergen." />
+        <figcaption>_D809453-_D809457-4.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="_DSC8214.jpg" title="Blues"/>
+        <figcaption>_DSC8214.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+</ul>
+
+<script>
+  window.addEventListener('load', function() {
+    var lightboard = document.querySelector('#lightboard-1');
+    lightboard.addEventListener('select', function(e) {
+      console.log('Slide selected. Source:', e.detail.source);
+    });
+  });
+</script>
+```
+
+## Keyboard interaction
+The lightboard interacts with the following keyboard keys.
+
+*   `Tab` - When focus is on a slide, pressing the `Tab` key moves focus in the following manner:
+    1.  If interactive glyphs or menus are present in the slide frame, focus moves to each in order. (Not implemented yet)
+    2.  The next `Tab` key press moves focus as follows:
+        *   If there is a next slide, focus moves to the next slide.
+        *   If focus is on the last slide, focus moves to the first focusable element outside the lightboard component.
+*   `Left arrow` - Moves focus to the previous slide. If the current slide is the first slide, focus moves to the last slide.
+*   `Right arrow` - Moves focus to the next slide. If the current slide is the last slide, focus moves to the first slide.
+*   `Up arrow` - behaves the same as left arrow.
+*   `Down arrow` - behaves the same as right arrow.
+*   `End` - When focus is on a slide, an `End` key press moves focus to the last slide.
+*   `Home` - When focus is on a slide, a `Home` key press moves focus to the first slide.
+*   `Enter/Space` - When focus is on slide, pressing `Enter`/`Space` selects that particular slide. The lightboard emits a **select** event.
+*   `Shift+Tab` - Generally the reverse of `Tab`.
+
+
+## Events
+Interaction with the component programmatically is performed receiving events from the component or by sending events to 
+the component (or by using the public api).  
+
+### Events the component listenes to
+A client can send a `command` custom event to the lightboard. The command event holds a detail object defining the action 
+to perform and a optionally a target for the action.
+
+The detail object has the following structure:
+
+```javascript
+detail: { 
+  action, // "first", "last", "next", "prev", "upgrade" or "select" 
+  target  // Target, the slide that should be affected by the event 
+}
+```
+
+Possible actions are:
+
+#### first
+Focuses the first slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+ce = new CustomEvent('command', { detail: { action : 'first' } });
+myLightboard.dispatchEvent(ce);
+```
+
+#### last
+Focuses the last slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+ce = new CustomEvent('command', { detail: { action : 'last' } });
+myLightboard.dispatchEvent(ce);
+```
+
+#### next
+Focuses the next slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+ce = new CustomEvent('command', { detail: { action : 'next' } });
+myLightboard.dispatchEvent(ce);
+```
+
+#### prev
+Focuses the previous slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+ce = new CustomEvent('command', { detail: { action : 'prev' } });
+myLightboard.dispatchEvent(ce);
+```
+
+#### select
+Selects a slide, i.e. adds `aria-selected="true"` on the targeted slide. The lightboard responds with a `select` event.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+slide = lightboard.querySelector('.mdlext-lightboard__slide:nth-child(2)');
+ce = new CustomEvent('command', { detail: { action : 'prev', target: slide } });
+myLightboard.dispatchEvent(ce);
+```
+
+#### upgrade
+Upgrade slides. If you add slides to the lightboard after the page has loaded, you must call `upgrade` to 
+notify the lightboard component about the new slides.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+slide = 
+   '<li class="mdlext-lightboard__slide">'
+  +'  <a href="#" class="mdlext-lightboard__slide__frame">'
+  +'    <figure>'
+  +'      <img src="_D802181.jpg" title="Landscape in blue pastel"/>'
+  +'      <figcaption>_D802181.jpg</figcaption>'
+  +'    </figure>'
+  +'  </a>'
+  +'</li>';
+
+myLightboard.insertAdjacentHTML('beforeend', slide);
+ce = new CustomEvent('command', { detail: { action : 'upgrade' } });
+myLightboard.dispatchEvent(ce);
+```
+
+### Events emitted from the component
+The lightboard emits a custom `select` event when a slide is clicked. The event has a detail object with the following content:
+```
+{
+  source  // the slide instance that caused the event
+}
+```
+
+Set up an event listener to receive the select event.
+```javascript
+document.querySelector('#my-lightboard').addEventListener('select', function(e) {
+  console.log('Slide selected:', e.detail.source);
+});
+```
+
+Trigger the event.
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+slide = lightboard.querySelector('.mdlext-lightboard__slide:nth-child(2)');
+ce = new CustomEvent('command', { detail: { action : 'select', target: slide } });
+myLightboard.dispatchEvent(ce);
+```
+
+## Public methods
+
+### upgradeSlides()
+Upgrade slides. If you add slides to the lightboard after the page has loaded, you must call `upgradeSlides` to 
+notify the component about the new slides.
+
+```javascript
+slide = 
+   '<li class="mdlext-lightboard__slide">'
+  +'  <a href="#" class="mdlext-lightboard__slide__frame">'
+  +'    <figure>'
+  +'      <img src="_D802181.jpg" title="Landscape in blue pastel"/>'
+  +'      <figcaption>_D802181.jpg</figcaption>'
+  +'    </figure>'
+  +'  </a>'
+  +'</li>';
+
+myLightboard = document.querySelector('#my-lightboard');
+myLightboard.insertAdjacentHTML('beforeend', slide);
+myLightboard.MaterialExtLightboard.upgradeSlides();
+```
+
+### command( detail )
+Executes an action, optionally targeting a specific slide. The actions corresponds to the custom events defined for this 
+component.
+ 
+The detail object parameter has the following structure:
+```javascript
+detail: { 
+  action, // "first", "last", "next", "prev", "upgrade" or "select" 
+  target  // Target, the slide that should be affected by the event 
+}
+```
+
+Possible actions are:
+
+#### first: command( {action: 'first' } )
+Focuses the first slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+myLightboard.MaterialExtLightboard.command( {action: 'first'} );
+```
+
+#### last: command( {action: 'last' } )
+Focuses the last slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+myLightboard.MaterialExtLightboard.command( {action: 'last'} );
+```
+
+#### next: command( {action: 'next' } )
+Focuses the next slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+myLightboard.MaterialExtLightboard.command( {action: 'next'} );
+```
+
+#### prev: command( {action: 'prev' } )
+Focuses the previous slide.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+myLightboard.MaterialExtLightboard.command( {action: 'prev'} );
+```
+
+#### select: command( {action: 'first', target: slide } )
+Selects a slide, i.e. adds `aria-selected="true"` on the targeted slide. The lightboard responds with a `select` event.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+slide = lightboard.querySelector('.mdlext-lightboard__slide:nth-child(2)');
+myLightboard.MaterialExtLightboard.command( {action: 'prev', target: slide} );
+```
+
+#### upgrade: command( {action: 'upgrade' } )
+Upgrade slides. If you add slides to the lightboard after the page has loaded, you must call `upgrade` to 
+notify the lightboard component about the new slides.
+
+```javascript
+myLightboard = document.querySelector('#my-lightboard');
+slide = 
+   '<li class="mdlext-lightboard__slide">'
+  +'  <a href="#" class="mdlext-lightboard__slide__frame">'
+  +'    <figure>'
+  +'      <img src="_D802181.jpg" title="Landscape in blue pastel"/>'
+  +'      <figcaption>_D802181.jpg</figcaption>'
+  +'    </figure>'
+  +'  </a>'
+  +'</li>';
+
+myLightboard.insertAdjacentHTML('beforeend', slide);
+myLightboard.MaterialExtLightboard.command( {action: 'upgrade'} );
+```
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the lightboard.
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|--------------|--------|---------|
+| `mdlext-lightboard` | Defines a container as an MDLEXT lightboard component | Required on `<ul>` element |
+| `mdlext-js-lightboard` | Assigns basic MDL behavior to lightboard | Required on `<ul>` element |
+| `mdlext-lightboard--no-spacing` | Modifies the slides to have no margin between them. | Optional on `<ul>` element |
+| `mdlext-lightboard__slide` | Defines a slide | Required on `<li>` element |
+| `mdlext-lightboard__slide__frame` | Defines the slide frame, makes the frame focusable and selectable | Required on `<a>` element. First inner element of `<li>`  |
+| `mdl-js-ripple-effect` | Applies ripple click effect to slides | Optional; goes on "outer" `<ul>` element |
+| `mdl-js-ripple-effect--ignore-events` |  | Should be added when the component initializes, but that does not seem to happen due to bug/limitation in MDL. For now, add this class if `mdl-js-ripple-effect` class is applied |
+
+
+A lightboard and its assosiated slides has the following roles.
+
+| Attribute | Effect | Remarks |
+|-----------|--------|---------|
+| `role="grid"` | Defines the lightboard as a WAI-ARIA grid | Added to `mdlext-lightboard` when component innitializes |
+| `role="gridcell"` | Defines the slide as a WAI-ARIA cell | Added to `mdlext-lightboard__slide` when component innitializes |
+| `aria-selected` | Defines a slide as selected | Added to `mdlext-lightboard__slide` when a slide is clicked |
+
+
+## How to use the component programmatically
+Refer to [snippets/lightboard.html](./snippets/lightboard.html) or the [tests](../../test/lightboard/lightboard.spec.js) 
+for detailed usage.
diff --git a/node_modules/mdl-ext/src/lightboard/snippets/lightboard.html b/node_modules/mdl-ext/src/lightboard/snippets/lightboard.html
new file mode 100644
index 0000000..555a4d8
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightboard/snippets/lightboard.html
@@ -0,0 +1,174 @@
+<p style="margin-bottom:32px;">A lightboard is a translucent surface illuminated from behind, used for
+  situations where a shape laid upon the surface needs to be seen with high contrast. In the "old days"
+  of photography photograpers used a lightboard to get a quick view of, sorting and organizing their slides.
+</p>
+
+<ul id="lightboard-1" class="mdlext-lightboard mdlext-js-lightboard mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events">
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802141.jpg" title="Northern goshawk with prey"/>
+        <figcaption>_D802141.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802591.jpg" title="Whooper swans in flight"/>
+        <figcaption>_D802591.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D804370-3.jpg" title="European green woodpecker"/>
+        <figcaption>_D804370-3.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D808689.jpg" title="The bridge"/>
+        <figcaption>_D808689.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802181.jpg" title="Landscape in blue pastel"/>
+        <figcaption>_D802181.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800912.jpg" title="Hiking the mountains of Dovre"/>
+        <figcaption>_D800912.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D809453-_D809457-4.jpg" title="Train to nowhwere. Ny Aalesund, Spitsbergen." />
+        <figcaption>_D809453-_D809457-4.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_DSC8214.jpg" title="Blues"/>
+        <figcaption>_DSC8214.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800017.jpg" />
+        <figcaption>_D800017.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800023.jpg" />
+        <figcaption>_D800023.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800851.jpg" />
+        <figcaption>_D800851.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800166.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800951.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801188.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801205-2.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801274.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801392.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801952-4.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D807603.jpg" />
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide">
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D807689.jpg" />
+      </figure>
+    </a>
+  </li>
+</ul>
+
+<p class="mdl-typography--caption" style="margin-top: 32px;">
+  All images appearing in this page are the exclusive property of Leif Olsen and are protected under the United States and International Copyright laws.
+  The images may not be reproduced or manipulated without the written permission of Leif Olsen.
+  Use of any image as the basis for another photographic concept or illustration (digital, artist rendering or alike) is a violation of the United States and International Copyright laws.
+  All images are copyrighted &copy; Leif Olsen, 2016.
+</p>
+
+<script>
+  window.addEventListener('load', function() {
+    var lightboard = document.querySelector('#lightboard-1');
+    lightboard.addEventListener('select', function(e) {
+      console.log('Slide selected. Source:', e.detail.source);
+    });
+  });
+</script>
diff --git a/node_modules/mdl-ext/src/lightbox/_lightbox.scss b/node_modules/mdl-ext/src/lightbox/_lightbox.scss
new file mode 100644
index 0000000..721d181
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightbox/_lightbox.scss
@@ -0,0 +1,141 @@
+@charset "UTF-8";
+
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+// Use of this module requires the user to include variables from material-design-lite
+//@import "../../node_modules/material-design-lite/src/variables";
+//@import "../../node_modules/material-design-lite/src/mixins";
+@import "../variables";
+
+.mdlext-lightbox {
+  user-select: none;
+  cursor: default;
+  position: relative;
+  width: auto;
+  max-width: 100%;
+  margin: 0 auto;
+  border: $mdlext-lightbox-border;
+  border-radius: $mdlext-lightbox-border-radius;
+  background-color: $mdlext-lightbox-background-color;
+  box-sizing: border-box;
+  outline: 0;
+  display: block; // display: flex and IE11 has issues with reposition. Set display:block for now.
+
+  *,
+  *::before,
+  *::after,
+  input[type="search"] {
+    box-sizing: border-box;
+  }
+
+  .mdlext-lightbox__slider {
+    // Displays prevvious, current and next image while dragging
+    // Elements are created by lightbox component when dragging starts
+    position: absolute;
+    top: 0;
+    left: 0;
+    display: flex;
+    justify-content: center;
+
+    .mdlext-lightbox__slider__slide {
+      flex-shrink: 0;
+      display: block;
+      text-align: left;
+      color: #7f7f7f;
+      background-size: cover;
+      background-position: center;
+      background-repeat: no-repeat;
+
+      //&:nth-child(1),
+      //&:nth-child(3) {
+      //  filter: blur(1px);
+      //}
+    }
+  }
+
+  figure {
+    margin: $mdlext-lightbox-figure-margin;
+    padding: $mdlext-lightbox-figure-padding;
+    position: relative;
+
+    img {
+      width: 100%;
+      max-width: 100%;
+      height: auto;
+      border: 0;
+      outline: 0;
+    }
+    figcaption {
+      @include typo-caption($colorContrast: false, $usePreferred: true);
+
+      display: block;
+      position: absolute;
+      bottom: 0;
+      left: 0;
+      right: 0;
+      max-width: 100%;
+      height: auto;
+      max-height: 50%;
+      overflow: auto;
+      padding: 8px;
+      background-color: $mdlext-lightbox-figcaption-background-color;
+      transform-origin: bottom;
+      transform: scaleY(0);
+      transition: 0.2s ease-in-out;
+
+      &.mdlext-lightbox__show-figcaption {
+        transform: scaleY(1);
+      }
+      tbody {
+        th {
+          text-align: left;
+        }
+        th,
+        td {
+          vertical-align: text-top;
+        }
+      }
+    }
+  }
+  .mdl-card__menu {
+    color: #ffffff;
+    z-index: 1;
+  }
+  footer {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    background-color: $mdlext-lightbox-footer-background-color;
+
+    .mdl-card__supporting-text {
+      flex: 1;
+      overflow: hidden;
+      padding: 0;
+      height: $card-supporting-text-line-height;
+      width: 100%;
+    }
+    nav {
+      display: flex;
+    }
+  }
+
+  &.mdlext-lightbox--sticky-footer footer {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+  }
+}
diff --git a/node_modules/mdl-ext/src/lightbox/lightbox.js b/node_modules/mdl-ext/src/lightbox/lightbox.js
new file mode 100644
index 0000000..2e14463
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightbox/lightbox.js
@@ -0,0 +1,359 @@
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+
+/**
+ * Responsive Lightbox
+ */
+
+import fullThrottle from '../utils/full-throttle';
+import {
+  VK_ESC,
+  VK_SPACE,
+  VK_END,
+  VK_HOME,
+  VK_ARROW_LEFT,
+  VK_ARROW_UP,
+  VK_ARROW_RIGHT,
+  VK_ARROW_DOWN,
+  IS_UPGRADED
+} from '../utils/constants';
+
+(function() {
+  'use strict';
+
+  const LIGHTBOX = 'mdlext-lightbox';
+  const LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';
+  const LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';
+  const STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';
+  const BUTTON = 'mdl-button';
+
+  /**
+   * https://github.com/google/material-design-lite/issues/4205
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  const MaterialExtLightbox = function MaterialExtLightbox(element) {
+    // Stores the element.
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtLightbox'] = MaterialExtLightbox;
+
+
+  /**
+   * Handle keypress
+   * @param event
+   * @private
+   */
+  MaterialExtLightbox.prototype.keyDownHandler_ = function(event) {
+
+    if (event) {
+      if ( event.keyCode === VK_ESC || event.keyCode === VK_SPACE
+        || event.keyCode === VK_END || event.keyCode === VK_HOME
+        || event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT
+        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {
+
+        if(event.keyCode !== VK_ESC) {
+          event.preventDefault();
+          event.stopPropagation();
+        }
+
+        let action = 'first';
+        if (event.keyCode === VK_END) {
+          action = 'last';
+        }
+        else if (event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT) {
+          action = 'prev';
+        }
+        else if (event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {
+          action = 'next';
+        }
+        else if (event.keyCode === VK_SPACE) {
+          action = 'select';
+        }
+        else if (event.keyCode === VK_ESC) {
+          action = 'cancel';
+        }
+
+        dispatchAction_(action, this);
+      }
+    }
+  };
+
+  /**
+   * Handle button clicks
+   * @param event
+   * @private
+   */
+  MaterialExtLightbox.prototype.buttonClickHandler_ = function(event) {
+
+    if (event) {
+      event.preventDefault();
+      event.stopPropagation();
+
+      dispatchAction_(this.getAttribute('data-action') || '', this);
+
+      const n = this.closest(`.${LIGHTBOX}`);
+      if(n) {
+        n.focus();
+      }
+    }
+  };
+
+  /**
+   * Dispatches an action custom event
+   * @param action
+   * @param source
+   * @param target
+   * @private
+   */
+  const dispatchAction_ = (action, source, target = source) => {
+
+    target.dispatchEvent(new CustomEvent('action', {
+      bubbles: true,
+      cancelable: true,
+      detail: {
+        action: action || '',
+        source: source
+      }
+    }));
+  };
+
+  /**
+   * Reposition dialog if component parent element is "DIALOG"
+   * @param lightboxElement
+   * @private
+   */
+  const repositionDialog_ = lightboxElement => {
+    const footerHeight = (footer, isSticky) => isSticky && footer ? footer.offsetHeight : 0;
+
+    const reposition = (dialog, fh) => {
+      if (window.getComputedStyle(dialog).position === 'absolute') {
+        const scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+        const topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;
+        dialog.style.top = `${Math.max(scrollTop, topValue)}px`;
+      }
+    };
+
+    const p = lightboxElement.parentNode;
+    const dialog = p && p.nodeName === 'DIALOG' ? p : null;
+
+    if(dialog && dialog.hasAttribute('open')) {
+      lightboxElement.style.width = 'auto';
+      lightboxElement.style.maxWidth = '100%';
+      const img = lightboxElement.querySelector('img');
+      if(img) {
+        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? `${img.naturalWidth}px` : `${img.width}px` || '100%';
+      }
+
+      const fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));
+      const vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;
+      if (dialog.offsetHeight > vh) {
+        let n = 0;
+        while(dialog.offsetHeight > vh && ++n < 4) {
+          lightboxElement.style.width = `${lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight}px`;
+        }
+      }
+      reposition(dialog, fh);
+    }
+  };
+
+  /**
+   * Handle image load
+   * @param event
+   * @private
+   */
+
+  MaterialExtLightbox.prototype.imgLoadHandler_ = function( /*event*/ ) {
+    repositionDialog_(this);
+  };
+
+
+  /**
+   * Handle image drag
+   * @param event
+   * @private
+     */
+  MaterialExtLightbox.prototype.imgDragHandler_ = function(event ) {
+
+    const setStyles = ( element, properties ) => {
+      //noinspection JSAnnotator
+      for(const [key, value] of Object.entries(properties)) {
+        element.style[key] = value;
+      }
+      // ... or:
+      //for (const key in properties) {
+      //  element.style[key] = properties[key];
+      //}
+    };
+
+    event.preventDefault();
+    //event.stopPropagation();
+
+    const x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);
+
+    const img = this;
+    img.style.opacity = '0.2';
+
+    const slider = document.createElement('div');
+    slider.classList.add(LIGHTBOX_SLIDER);
+    setStyles(slider, {'width': `${img.offsetWidth}px`, 'height': `${img.offsetHeight}px`} );
+
+    let slide  = document.createElement('div');
+    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+    slide.textContent = '>';
+    setStyles(slide, {
+      'width'           : `${img.offsetWidth}px`,
+      'height'          : `${img.offsetHeight}px`,
+      'line-height'     : `${img.offsetHeight}px`,
+      'font-size'       : `${img.offsetHeight/4}px`,
+      'text-align'      : 'right',
+      'background-image': `url("${img.getAttribute('data-img-url-prev') || ''}")`
+    });
+    slider.appendChild(slide);
+
+    slide  = document.createElement('div');
+    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+    setStyles(slide, {
+      'width'           : `${img.offsetWidth}px`,
+      'height'          : `${img.offsetHeight}px`,
+      'background-image': `url("${img.src}")`
+    });
+    slider.appendChild(slide);
+
+    slide  = document.createElement('div');
+    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);
+    slide.textContent = '<';
+    setStyles(slide, {
+      'width'           : `${img.offsetWidth}px`,
+      'height'          : `${img.offsetHeight}px`,
+      'line-height'     : `${img.offsetHeight}px`,
+      'font-size'       : `${img.offsetHeight/4}px`,
+      'text-align'      : 'left',
+      'background-image': `url("${img.getAttribute('data-img-url-next') || ''}")`
+    });
+    slider.appendChild(slide);
+
+    img.parentNode.appendChild(slider);
+
+
+    // drag handler
+    const drag = e => {
+      e.preventDefault();
+      const dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance
+
+      if(slider.offsetWidth - Math.abs(dx) > 19) {
+        slider.style.left = `${dx}px`;
+      }
+    };
+
+    // end drag handler
+    const endDrag = e => {
+      e.preventDefault();
+      //e.stopPropagation();
+
+      window.removeEventListener('mousemove', drag);
+      window.removeEventListener('touchmove', drag);
+      window.removeEventListener('mouseup', endDrag);
+      window.removeEventListener('touchend', endDrag);
+
+      const dx = slider.offsetLeft;
+      img.parentNode.removeChild(slider);
+      img.style.opacity = '1.0';
+
+      if(Math.abs(dx) > 19) {
+        dispatchAction_( (dx > 0 ? 'prev' : 'next') , img);
+      }
+    };
+
+    window.addEventListener('mousemove', drag);
+    window.addEventListener('touchmove', drag);
+    window.addEventListener('mouseup', endDrag);
+    window.addEventListener('touchend',endDrag);
+  };
+
+
+  /**
+   * Initialize component
+   */
+  MaterialExtLightbox.prototype.init = function() {
+
+    if (this.element_) {
+      // Do the init required for this component to work
+      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);
+
+      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {
+        this.element_.setAttribute('tabindex', 1);
+      }
+
+      [...this.element_.querySelectorAll(`.${BUTTON}`)].forEach( button =>
+        button.addEventListener('click', this.buttonClickHandler_.bind(button), false)
+      );
+
+      const figcaption = this.element_.querySelector('figcaption');
+      if(figcaption) {
+        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);
+      }
+
+      const footer = this.element_.querySelector('footer');
+      if(footer) {
+        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);
+      }
+
+      const img = this.element_.querySelector('img');
+      if(img) {
+        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);
+        img.addEventListener('click', e => e.preventDefault(), true);
+        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);
+        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);
+      }
+      window.addEventListener('resize', fullThrottle( () => repositionDialog_(this.element_) ));
+      window.addEventListener('orientationchange', () => repositionDialog_(this.element_));
+
+      // Set upgraded flag
+      this.element_.classList.add(IS_UPGRADED);
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to downgrade
+   *
+  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {
+  };
+  */
+
+  /**
+   * The component registers itself. It can assume componentHandler is available in the global scope.
+   */
+  /* jshint undef:false */
+  componentHandler.register({
+    constructor: MaterialExtLightbox,
+    classAsString: 'MaterialExtLightbox',
+    cssClass: 'mdlext-js-lightbox'
+  });
+
+})();
+
diff --git a/node_modules/mdl-ext/src/lightbox/readme.md b/node_modules/mdl-ext/src/lightbox/readme.md
new file mode 100644
index 0000000..5744920
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightbox/readme.md
@@ -0,0 +1,322 @@
+# Lightbox
+
+![Lightbox](../../etc/lightbox.png)
+A responsive lightbox to be used in conjunction with e.g. a MDLEXT lightboard component.
+
+## Introduction
+The Material Design Lite Ext (MDLEXT) Lightbox displays an image filling the screen, and dimming out the rest of the web page.
+It acts as a modal dialog, using the `<dialog>` element as a container for the lightbox. The component uses 
+the [Material Design Lite Card component](http://www.getmdl.io/components/index.html#cards-section) to provide a layout for the lightbox.
+
+## How to use the Google Chrome Dialog polyfill 
+
+&nbsp;1. Install [Google Chrome Dialog polyfill](https://github.com/GoogleChrome/dialog-polyfill).
+```sh
+$ npm install --save dialog-polyfill
+```
+
+&nbsp;2. Use the polyfill in a static page.
+```html
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Material Design Lite Extensions</title>
+  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en">
+  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+  <link rel="stylesheet" href="node_modules/dialog-polyfill/dialog-polyfill.css" />
+  <link rel="stylesheet" href="node_modules/material-design-lite/material.css" />
+  <link rel="stylesheet" href="node_modules/mdl-ext/lib/mdl-ext.min.css" />
+</head>
+<body>
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer">
+  <main class="mdl-layout__content">
+  </main
+</div>
+<script type="text/javascript" src="node_modules/dialog-polyfill/dialog-polyfill.js" charset="utf-8"></script>
+<script type="text/javascript" src="node_modules/material-design-lite/material.min.js" charset="utf-8"></script>
+<script type="text/javascript" src="node_modules/mdl-ext/lib/mdl-ext.min.js" charset="utf-8"></script>
+</body>
+</html>
+```
+
+&nbsp;3. Use it in your (Webpack) build.
+
+&nbsp;3.1. Import `dialog-polyfill.css` in your main SASS file..
+```css
+@import '../node_modules/dialog-polyfill/dialog-polyfill.css';
+```
+
+&nbsp;3.2. Require `dialog-polyfill`.  
+```javascript
+const dialogPolyfill = require('dialog-polyfill/dialog-polyfill');
+```
+
+&nbsp;... or import the `dialog-polyfill`.  
+```javascript
+import { dialogPolyfill }  from 'dialog-polyfill/dialog-polyfill';
+```
+
+>Adjust path to `node_modules` (libraries) according to where your files are located. 
+>For more information about the dialog polyfill, refer to the [Google Chrome Dialog polyfill](https://github.com/GoogleChrome/dialog-polyfill) documentaion and the Material Design Lite [Dialog](http://www.getmdl.io/components/index.html#dialog-section) section.
+
+## To include a MDLEXT lightbox component
+&nbsp;1. Code a `<dialog>` element with `class="mdlext-dialog"` to display the lightbox as a modal dialog.
+```html
+<dialog class="mdlext-dialog">
+</dialog>
+```
+
+&nbsp;2. Code a `<div>` element with `class="mdlext-lightbox mdlext-js-lightbox mdl-card"` to hold the lightbox.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+  </div>
+</dialog>
+```
+
+&nbsp;3. Code a `<div>` element with `class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast"` to hold the close dialog button.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+    </div>
+  </div>
+</dialog>
+```
+
+&nbsp;4. Code a `<button>` element with `data-action="close"` and `class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect"` to display the close button. Add an `<i>` element inside the `<button>` element to hold the close icon.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+  </div>
+</dialog>
+```
+
+&nbsp;5. Code a `<figure>` element with `class="mdl-card__media"` to hold the image and the image description.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+    <figure class="mdl-card__media">
+    </figure>
+  </div>
+</dialog>
+```
+
+&nbsp;5. Inside the `<figure>` element code an empty `<img>` element and an empty `<figcaption>` element to hold the image and the image description.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+    <figure class="mdl-card__media">
+      <img src="" alt>
+      <figcaption></figcaption>
+    </figure>
+  </div>
+</dialog>
+```
+
+
+&nbsp;6. Code a `<footer>` element with `class="mdl-card__actions"` to hold the image title and navigation buttons.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+    <figure class="mdl-card__media">
+      <img src="" alt>
+      <figcaption></figcaption>
+    </figure>
+    <footer class="mdl-card__actions">
+    </footer>    
+  </div>
+</dialog>
+```
+
+&nbsp;7. Code a `<div>` element with `class="mdl-card__supporting-text"` to hold the image title.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+    <figure class="mdl-card__media">
+      <img src="" alt>
+      <figcaption></figcaption>
+    </figure>
+    <footer class="mdl-card__actions">
+      <div class="mdl-card__supporting-text">
+      </div>
+    </footer>    
+  </div>
+</dialog>
+```
+
+&nbsp;8. Code a `<nav>` element to hold the navigation buttons.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+    <figure class="mdl-card__media">
+      <img src="" alt>
+      <figcaption></figcaption>
+    </figure>
+    <footer class="mdl-card__actions mdl-card--border">
+      <div class="mdl-card__supporting-text">
+      </div>
+      <nav>
+      </nav>      
+    </footer>    
+  </div>
+</dialog>
+```
+
+
+&nbsp;9. Add your navigation buttons with `class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect"` inside the `<nav>` element.
+```html
+<dialog class="mdlext-dialog">
+  <div class="mdlext-lightbox mdlext-js-lightbox mdl-card">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+    <figure class="mdl-card__media">
+      <img src="" alt>
+      <figcaption></figcaption>
+    </figure>
+    <footer class="mdl-card__actions mdl-card--border">
+      <div class="mdl-card__supporting-text">
+      </div>
+      <nav>
+        <button data-action="first" class="mdl-button mdl-button--icon mdl-js-button" title="First">
+          <i class="material-icons">first_page</i>
+        </button>
+        <button data-action="prev" class="mdl-button mdl-button--icon mdl-js-button" title="Previous">
+          <i class="material-icons">chevron_left</i>
+        </button>
+        <button data-action="next" class="mdl-button mdl-button--icon mdl-js-button" title="Next">
+          <i class="material-icons">chevron_right</i>
+        </button>
+        <button data-action="last" class="mdl-button mdl-button--icon mdl-js-button" title="Last">
+          <i class="material-icons">last_page</i>
+        </button>
+      </nav>      
+    </footer>    
+  </div>
+</dialog>
+```
+Add as many buttons as you like. To identify the button that trigger an custom event, you should assign each button a unique data-action attribute value. 
+The data-action attribute will be emitted as a part of the custom event triggered when a button is clicked.
+
+&nbsp;10. Add an image and open the dialog.
+
+```javascript
+var dialog = document.querySelector('dialog');
+
+// A dialog element MUST be a child of document.body!!
+if(dialog.parentNode.tagName !== 'BODY') {
+  document.body.appendChild(dialog);
+}
+
+if (!('showModal' in dialog)) {
+  dialogPolyfill.registerDialog(dialog);
+}
+var lightbox = dialog.querySelector('.mdlext-lightbox');
+var img = lightbox.querySelector('img'); 
+var supportingText = lightbox.querySelector('.mdl-card__supporting-text');
+var imageDetails = lightbox.querySelector('figcaption'); 
+
+img.setAttribute("src", 'wiew-from-my-window.jpg');
+img.setAttribute("alt", 'View from my window');
+img.setAttribute("title", 'View from my window');
+img.setAttribute('data-img-url-prev', 'some-image.jpg');
+img.setAttribute('data-img-url-next', 'some-other-image.jpg');
+supportingText.innerHTML = 'View from my window';
+imageDetails.innerHTML = 'Photo taken from my window yesterday morning'; 
+
+if(!dialog.open) {
+  dialog.showModal();
+}
+```
+
+### Examples
+* See: [snippets/carousel.html](./snippets/lightbox.html)
+* TRy out [the live demo](http://leifoolsen.github.io/mdl-ext/demo/lightbox.html)
+
+## Keyboard interaction
+The lightbox interacts with the following keyboard keys.
+
+*   `Left arrow` - Emits a custom event with action='prev'
+*   `Right arrow` - Emits a custom event with action='next'
+*   `Up arrow` - behaves the same as left arrow.
+*   `Down arrow` - behaves the same as right arrow.
+*   `End` - Emits a custom event with action='last'
+*   `Home` - Emits a custom event with action='first'
+*   `Space` - Emits a custom event with action='select'
+*   `Esc` - Emits a custom event with action='cancel'
+
+## Mouse / Touch interaction
+*   `Drag/Swipe left` - Emits a custom event with action='next'
+*   `Drag/Swipe right` - Emits a custom event with action='prev'
+
+## Events
+The lightbox emits a custom **action** event when a button contained in the lightbox is clicked, an images is dragged or swiped, 
+or if one of the keys `Arrow Left`, `Arrow Up`, `Arrow Right`, `Arrow Down`, `Home`, `End`, `Space` or `Esc` is pressed. 
+The event has a detail object with the following content:
+```
+{
+  action, // one of: 'first', 'prev', 'next', 'last', 'select', 'close', 'cancel' - 
+          // or any value assigned to a button action attribute (empty string if no action assigned) 
+  source  // the button instance that caused the event, or the lightbox element if a key triggered the event
+}
+```
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the lightbox.
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|--------------|--------|---------|
+| `mdlext-lightbox` | Defines a container as an MDLEXT lightbox component | Required on `<div>` element |
+| `mdlext-js-lightbox` | Assigns basic MDL behavior to lightbox | Required on `<div>` element |
+| `mdlext-lightbox__slider` | Displays previous, current and next image when dragging | Element added by component |
+| `mdlext-lightbox__slider__slide` | Holds an image to display when dragging | Element added by component |
+
+<!--
+| `mdlext-lightbox--sticky-footer` | Positions footer at bottom of screen | Optional on `mdlext-lightbox` element |
+-->
+
+| Attribute | Effect | Remarks |
+|-----------|--------|---------|
+| `data-img-url-prev` | Displays previous image when dragging | URL to previous image in a collection |
+| `data-img-url-next` | Displays next image when dragging | URL to next imagein a collection |
+
+
+## How to use the component programmatically
+The [tests](../../test/lightbox/lightbox.spec.js) and the [snippets/lightbox.html](./snippets/lightbox.html) 
+code provides examples on how to use the component programmatically.
+
diff --git a/node_modules/mdl-ext/src/lightbox/snippets/lightbox.html b/node_modules/mdl-ext/src/lightbox/snippets/lightbox.html
new file mode 100644
index 0000000..095da06
--- /dev/null
+++ b/node_modules/mdl-ext/src/lightbox/snippets/lightbox.html
@@ -0,0 +1,553 @@
+<p>A lightbox displays an image filling the screen, and dimming out the rest of the web page. It acts as a modal dialog
+  using the <code>&lt;dialog&gt;</code> element as a container for the lightbox.
+  <strong>Click on one of the images to open the lightbox. Browse images in the lightbox using arrow keys, clicking on
+    one of the navigation buttons, or by dragging or swiping the image.</strong>
+</p>
+
+<!--
+  This example uses the data-details attribute to feed data to the lightbox.
+  Use any data structure that suits you to feed the lightbox.
+  The a element holds reference to lightbox image
+ -->
+<ul id="lightboard-for-lightbox" class="mdlext-lightboard mdlext-js-lightboard mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events">
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Northern goshawk with prey' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' },
+    { 'name': 'Camera',           'value': 'Nikon D800E' },
+    { 'name': 'Lens',             'value': 'Nikkor 300mm/4 PF' },
+    { 'name': 'Converter',        'value': 'TC14-II' },
+    { 'name': 'Focal length',     'value': '420mm' },
+    { 'name': 'Aperture',         'value': 'f/7.1' },
+    { 'name': 'Shutter speed',    'value': '1/400s' }]" >
+    <a href="./images/_D802141.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802141.jpg" title="Northern goshawk with prey"/>
+        <figcaption>_D802141.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Northern goshawk with prey' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' },
+    { 'name': 'Camera',           'value': 'Nikon D800E' },
+    { 'name': 'Lens',             'value': 'Nikkor 300mm/4 PF' },
+    { 'name': 'Converter',        'value': 'TC14-II' },
+    { 'name': 'Focal length',     'value': '420mm' },
+    { 'name': 'Aperture',         'value': 'f/7.1' },
+    { 'name': 'Shutter speed',    'value': '1/400s' }]" >
+    <a href="./images/_D802143-2.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802143.jpg" title="Northern goshawk with prey"/>
+        <figcaption>_D802143.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Whooper swans in flight' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]">
+    <a href="./images/_D802591.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802591.jpg" title="Whooper swans in flight"/>
+        <figcaption>_D802591.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'European green woodpecker' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]">
+    <a href="./images/_D804370-3.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D804370-3.jpg" title="European green woodpecker"/>
+        <figcaption>_D804370-3.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'The bridge' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D808689.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D808689.jpg" title="The bridge"/>
+        <figcaption>_D808689.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Landscape in blue pastel' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D802181.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802181.jpg" title="Landscape in blue pastel"/>
+        <figcaption>_D802181.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Hiking the mountains of Dovre' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D800912.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800912.jpg" title="Hiking the mountains of Dovre"/>
+        <figcaption>_D800912.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'The Polar Express, end of Line. Ny Aalesund, Spitsbergen' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D809453-_D809457-3.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D809453-_D809457-4.jpg" title="The Polar Express, end of Line" />
+        <figcaption>_D809453-_D809457-4.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Still got the blues' },
+    { 'name': 'Description',      'value': 'PULSE, Kilden Consert Hall, Kristiansand' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_DSC8214-2.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_DSC8214.jpg" title="Still got the blues"/>
+        <figcaption>_DSC8214.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Flowers' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D800017.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800017.jpg" />
+        <figcaption>_D800017.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Red-breasted merganser' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D800023.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800023.jpg" />
+        <figcaption>_D800023.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Musk oxes, Dovre, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D800851.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800851.jpg" />
+        <figcaption>_D800851.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Arctic Fox, Svalbard, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_D800166-2.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800166.jpg" />
+        <figcaption>_D800166.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Fly fishing the arctic waters, Svalbard, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800951.jpg" />
+        <figcaption>_D800951.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Lady of the snows (Pulsatilla vernalis), Dovre, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' },
+    { 'name': 'Camera',           'value': 'Nikon D800E' },
+    { 'name': 'Lens',             'value': 'Nikkor 400mm/2.8GEDVR' },
+    { 'name': 'Converter',        'value': 'TC1.4II' },
+    { 'name': 'Focal length',     'value': '550mm' },
+    { 'name': 'Aperture',         'value': 'f/8' },
+    { 'name': 'Shutter speed',    'value': '1/200s' }
+     ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801188.jpg" />
+        <figcaption>_D801188.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'PULSE, Kilden Consert Hall, Kristiansand' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801205-2.jpg" />
+        <figcaption>_D801205-2.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'PULSE, Kilden Consert Hall, Kristiansand' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801274.jpg" />
+        <figcaption>_D801274.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Peregrine falcon, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801392.jpg" />
+        <figcaption>_D801392.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Peregrine falcon, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' },
+    { 'name': 'Camera',           'value': 'Nikon D800E' },
+    { 'name': 'Lens',             'value': 'Nikkor 400mm/2.8GEDVR' },
+    { 'name': 'Focal length',     'value': '400mm' },
+    { 'name': 'Aperture',         'value': 'f/2.8' },
+    { 'name': 'Shutter speed',    'value': '1/800s' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801436.jpg" />
+        <figcaption>_D801392.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Mr. Per E Knudsen' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D801952-4.jpg" />
+        <figcaption>_D801952-4.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Black Woodpecker' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D807603.jpg" />
+        <figcaption>_D807603.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Goshina' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D807689.jpg" />
+        <figcaption>_D807689.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Goshina' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D807558.jpg" />
+        <figcaption>_D807689.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Svalbard Rock ptarmigan' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' }]" >
+    <a href="./images/_D800464.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800464.jpg" />
+        <figcaption>_D800464.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Nice, France' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="./images/_DSC7535-2.jpg" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_DSC7535.jpg" />
+        <figcaption>_DSC7535.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Cheetah, Bloemfontain, South Africa' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D802478.jpg" />
+        <figcaption>_D802478.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Red Squirrel' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D800698.jpg" />
+        <figcaption>_D800698.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Milky Way, Bloemfontain, South Africa' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' },
+    { 'name': 'Camera',           'value': 'Nikon D800E' },
+    { 'name': 'Lens',             'value': 'Nikkor 20mm/1.8' },
+    { 'name': 'Focal length',     'value': '20mm' },
+    { 'name': 'Aperture',         'value': 'f/2.0' },
+    { 'name': 'Shutter speed',    'value': '15s' },
+    { 'name': 'ISO',              'value': '1600' }]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D803118.jpg" />
+        <figcaption>_D803118.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Winter Light, Senja, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D803521.jpg" />
+        <figcaption>_D803521.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Selfie with Aurora B :)' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D803465-3.jpg" />
+        <figcaption>_D803465-3.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Lista Lighthouse, Norway' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' },
+    { 'name': 'Camera',           'value': 'Nikon D800E' },
+    { 'name': 'Lens',             'value': 'Nikkor 16mm/2.8D Fisheye' },
+    { 'name': 'Focal length',     'value': '16mm' },
+    { 'name': 'Aperture',         'value': 'f/8' },
+    { 'name': 'Shutter speed',    'value': '1/20s' },
+    { 'name': 'ISO',              'value': '100' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D806374.jpg" />
+        <figcaption>_D803465-3.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+  <li class="mdlext-lightboard__slide" data-details="[
+    { 'name': 'Title',            'value': 'Osprey' },
+    { 'name': 'Copyright &copy;', 'value': 'Leif Olsen' },
+    { 'name': 'Camera',           'value': 'Nikon D800E' },
+    { 'name': 'Lens',             'value': 'Nikkor 400mm/2.8GEDVR' },
+    { 'name': 'Converter',        'value': 'TC1.4II' },
+    { 'name': 'Focal length',     'value': '550mm' },
+    { 'name': 'Aperture',         'value': 'f/5.6' },
+    { 'name': 'Shutter speed',    'value': '1/400s' } ]" >
+    <a href="#" class="mdlext-lightboard__slide__frame">
+      <figure>
+        <img src="./images/_D805345-12.jpg" />
+        <figcaption>_D805345-12.jpg</figcaption>
+      </figure>
+    </a>
+  </li>
+</ul>
+
+<p class="mdl-typography--caption" style="margin-top: 32px;">
+  All images appearing in this page are the exclusive property of Leif Olsen and are protected under the United States
+  and International Copyright laws. The images may not be reproduced or manipulated without the written permission of
+  Leif Olsen. Use of any image as the basis for another photographic concept or illustration (digital, artist rendering
+  or alike) is a violation of the United States and International Copyright laws. All images are copyrighted &copy; Leif Olsen, 2016.
+</p>
+
+
+<!-- A dialog element MUST be a child of document.body!! -->
+<dialog id="lightbox-dialog" class="mdlext-dialog">
+
+  <div id="lightbox" class="mdlext-lightbox mdlext-js-lightbox mdl-card mdl-shadow--4dp">
+    <div class="mdl-card__menu mdl-color-text--white mdl-typography--body-2-color-contrast">
+      <button data-action="close" class="mdl-button mdl-button--icon mdl-js-button" title="Close">
+        <i class="material-icons">close</i>
+      </button>
+    </div>
+    <figure class="mdl-card__title">
+      <img src="" draggable="true" alt>
+      <figcaption data-action="select">Details</figcaption>
+    </figure>
+    <footer data-action="select" class="mdl-card__actions mdl-card--border">
+      <div class="mdl-card__supporting-text">
+        Image title
+      </div>
+      <nav>
+        <button data-action="first" class="mdl-button mdl-button--icon mdl-js-button" title="First">
+          <i class="material-icons">first_page</i>
+        </button>
+        <button data-action="prev" class="mdl-button mdl-button--icon mdl-js-button" title="Previous">
+          <i class="material-icons">chevron_left</i>
+        </button>
+        <button data-action="next" class="mdl-button mdl-button--icon mdl-js-button" title="Next">
+          <i class="material-icons">chevron_right</i>
+        </button>
+        <button data-action="last" class="mdl-button mdl-button--icon mdl-js-button" title="Last">
+          <i class="material-icons">last_page</i>
+        </button>
+        <button data-action="select" class="mdl-button mdl-button--icon mdl-js-button" title="Details">
+          <i class="material-icons">info_outline</i>
+        </button>
+      </nav>
+    </footer>
+  </div>
+</dialog>
+
+<script>
+  window.addEventListener('load', function() {
+    var dialog = document.querySelector('#lightbox-dialog');
+
+    // A dialog element MUST be a child of document.body!!
+    // In a SPA you should choose a more robust strategy than the simple if provided here
+    if(dialog.parentNode.tagName !== 'BODY') {
+      document.body.appendChild(dialog);
+    }
+
+    if (!('showModal' in dialog)) {
+      dialogPolyfill.registerDialog(dialog);
+    }
+
+    var currentSlide = null;
+    var lightboard = document.querySelector('#lightboard-for-lightbox');
+    var slides = lightboard.querySelectorAll('.mdlext-lightboard__slide');
+
+    lightboard.addEventListener('select', function(e) {
+      currentSlide = e.detail.source;
+      for (var i = 0, n = slides.length; i < n; i++) {
+        if(currentSlide ===  slides[i]) {
+          break;
+        }
+      }
+      var prevSlide = slides[ i > 0   ? i-1 : n-1 ];
+      var nextSlide = slides[ i < n-1 ? i+1 : 0];
+      showImage(currentSlide, prevSlide, nextSlide);
+    });
+
+    var lightbox = dialog.querySelector('.mdlext-lightbox');
+
+    lightbox.addEventListener('action', function(e) {
+      if(e.detail.action === 'close') {
+        dialog.close();
+      }
+      else if(e.detail.action === 'select') {
+        var figcaption = lightbox.querySelector('figure figcaption');
+        if(figcaption.classList.contains('mdlext-lightbox__show-figcaption')) {
+          figcaption.classList.remove('mdlext-lightbox__show-figcaption');
+        }
+        else {
+          figcaption.classList.add('mdlext-lightbox__show-figcaption');
+        }
+      }
+      else {
+        var i = 0;
+        var n = slides.length
+
+        if(e.detail.action === 'first') {
+          currentSlide = slides[0];
+        }
+        else if(e.detail.action === 'prev' || e.detail.action === 'next') {
+          for (var j = 0; j < n; j++) {
+            if(currentSlide ===  slides[j]) {
+              if(e.detail.action === 'prev') {
+                i = j > 0 ? j-1 : n-1;
+                currentSlide = slides[i];
+              }
+              else if(e.detail.action === 'next') {
+                i = j < n-1 ? j+1 : 0;
+                currentSlide = slides[i];
+              }
+              break;
+            }
+          }
+        }
+        else if(e.detail.action === 'last') {
+          i = slides.length-1;
+          currentSlide = slides[i];
+        }
+        var prevSlide = slides[ i > 0   ? i-1 : n-1 ];
+        var nextSlide = slides[ i < n-1 ? i+1 : 0];
+        showImage(currentSlide, prevSlide, nextSlide);
+      }
+    });
+
+    function showImage(slide, prevSlide, nextSlide) {
+
+      var slideAnchor = slide.querySelector('a');
+      var slideImg = slide.querySelector('img');
+      var img = dialog.querySelector('img');
+      var supportingText = dialog.querySelector('.mdl-card__supporting-text');
+      var imageDetails = dialog.querySelector('figcaption');
+      var href = slideAnchor.getAttribute('href');
+      href = href && href.indexOf('#') === 0 ? slideImg.getAttribute('src') : href;
+      img.setAttribute('src', href);
+      img.setAttribute('alt', slideImg.getAttribute('title') || '');
+      img.setAttribute('title', slideImg.getAttribute('title') || '');
+      supportingText.innerHTML = slideImg.getAttribute('title') || '';
+
+      // Lazy coder :)
+      slideAnchor = prevSlide.querySelector('a');
+      slideImg = prevSlide.querySelector('img');
+      href = slideAnchor.getAttribute('href');
+      href = href && href.indexOf('#') === 0 ? slideImg.getAttribute('src') : href;
+      img.setAttribute('data-img-url-prev', href);
+
+      slideAnchor = nextSlide.querySelector('a');
+      slideImg = nextSlide.querySelector('img');
+      href = slideAnchor.getAttribute('href');
+      href = href && href.indexOf('#') === 0 ? slideImg.getAttribute('src') : href;
+      img.setAttribute('data-img-url-next', href);
+
+
+      var detailsHtml  = '';
+      var detailsArray = JSON.parse(slide.getAttribute('data-details').replace(/'/g, '"'));
+
+      if(detailsArray != null) {
+        detailsHtml = '<table><tbody>';
+        for (var i = 0, n = detailsArray.length; i < n; i++) {
+          detailsHtml += '<tr><th>' + detailsArray[i].name + '</th><td>' + detailsArray[i].value + '</td></tr>';
+
+          if(!supportingText.innerHTML && detailsArray[i].name.toLowerCase() === 'title') {
+            supportingText.innerHTML = detailsArray[i].value;
+          }
+        }
+        detailsHtml += '</tbody></table>';
+      }
+
+      imageDetails.innerHTML = '';
+      imageDetails.insertAdjacentHTML('afterbegin', detailsHtml);
+
+      if(!dialog.open) {
+        dialog.showModal();
+      }
+    }
+  });
+</script>
diff --git a/node_modules/mdl-ext/src/mdl-ext-build.scss b/node_modules/mdl-ext/src/mdl-ext-build.scss
new file mode 100644
index 0000000..beda184
--- /dev/null
+++ b/node_modules/mdl-ext/src/mdl-ext-build.scss
@@ -0,0 +1,8 @@
+@charset "UTF-8";
+
+// Material Design Lite
+@import '~material-design-lite/src/variables';
+@import '~material-design-lite/src/mixins';
+
+// mdl-ext
+@import 'mdl-ext';
diff --git a/node_modules/mdl-ext/src/mdl-ext-eqjs-build.scss b/node_modules/mdl-ext/src/mdl-ext-eqjs-build.scss
new file mode 100644
index 0000000..f321f90
--- /dev/null
+++ b/node_modules/mdl-ext/src/mdl-ext-eqjs-build.scss
@@ -0,0 +1,8 @@
+@charset "UTF-8";
+
+// Material Design Lite
+@import '~material-design-lite/src/variables';
+@import '~material-design-lite/src/mixins';
+
+// mdl-ext
+@import 'mdl-ext-eqjs';
diff --git a/node_modules/mdl-ext/src/mdl-ext-eqjs.scss b/node_modules/mdl-ext/src/mdl-ext-eqjs.scss
new file mode 100644
index 0000000..56af48f
--- /dev/null
+++ b/node_modules/mdl-ext/src/mdl-ext-eqjs.scss
@@ -0,0 +1,39 @@
+@charset "UTF-8";
+
+/**
+ * Element Queries are a new way of writing CSS styles so the rules apply to individual elements
+ * on the page, instead of to the whole page as one document like in regular CSS Media Queries.
+ * This SASS file includes the eq.js, https://github.com/Snugug/eq.js, prolyfill which is an easy to use
+ * drop-in solution to JavaScript powered element queries. It works well with SASS,
+ * and element queries work without requireing a server to run.
+ *
+ * Feel fre to write your own element query stylesheet using one of the other libraries, e.g:
+ *   [EQCSS]               - (https://github.com/eqcss/eqcss)
+ *   [CSS Element Queries] - (https://github.com/marcj/css-element-queries)
+ *   [BoomQueries]         - (https://github.com/BoomTownROI/boomqueries)
+ */
+
+// eq.js mixins
+@import '~eq.js/sass/eq';
+
+// Configuration and helpers
+@import 'variables';
+@import 'mixins';
+@import 'functions';
+
+// Components
+@import 'aria-expanded-toggle/aria-expanded-toggle';
+@import 'sticky-header/sticky-header';
+@import 'dialog/dialog';
+@import 'grid/grid-eqjs';
+@import 'lightboard/lightboard';
+@import 'lightboard/lightboard-eqjs';
+@import 'lightbox/lightbox';
+@import 'carousel/carousel';
+@import 'selectfield/selectfield';
+@import 'menu-button/menu-button';
+@import 'bordered-fields/bordered-fields';
+@import 'collapsible/collapsible';
+@import 'accordion/accordion';
+@import 'color-themes/light-color-theme';
+@import 'color-themes/dark-color-theme';
diff --git a/node_modules/mdl-ext/src/mdl-ext.scss b/node_modules/mdl-ext/src/mdl-ext.scss
new file mode 100644
index 0000000..0f57eb2
--- /dev/null
+++ b/node_modules/mdl-ext/src/mdl-ext.scss
@@ -0,0 +1,23 @@
+@charset "UTF-8";
+
+// Configuration and helpers
+@import 'variables';
+@import 'mixins';
+@import 'functions';
+
+// Components
+@import 'aria-expanded-toggle/aria-expanded-toggle';
+@import 'sticky-header/sticky-header';
+@import 'dialog/dialog';
+@import 'grid/grid-media-queries';
+@import 'lightboard/lightboard';
+@import 'lightboard/lightboard-media-queries';
+@import 'lightbox/lightbox';
+@import 'carousel/carousel';
+@import 'selectfield/selectfield';
+@import 'menu-button/menu-button';
+@import 'bordered-fields/bordered-fields';
+@import 'collapsible/collapsible';
+@import 'accordion/accordion';
+@import 'color-themes/light-color-theme';
+@import 'color-themes/dark-color-theme';
diff --git a/node_modules/mdl-ext/src/menu-button/_menu-button.scss b/node_modules/mdl-ext/src/menu-button/_menu-button.scss
new file mode 100644
index 0000000..9fd84d4
--- /dev/null
+++ b/node_modules/mdl-ext/src/menu-button/_menu-button.scss
@@ -0,0 +1,181 @@
+@charset "UTF-8";
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/* Moved to aria-expanded-toggle.scss
+
+.mdlext-aria-expanded-plus-minus {
+  @include mdlext-aria-expanded-toggle($font-family: inherit);
+}
+
+.mdlext-aria-expanded-more-less {
+  @include mdlext-aria-expanded-toggle($icon: 'expand_more', $icon-expanded: 'expand_less');
+}
+*/
+
+.mdlext-menu-button {
+  box-sizing: border-box;
+  @include typo-menu();
+  text-transform: none;
+  position: relative;
+  height: $button-height;
+  padding: 0 $button-padding;
+  display: flex;
+  align-items: center;
+  align-self: stretch;
+
+  > * {
+    margin: 0;
+    padding: 0 0 0 8px;
+  }
+
+  > *:first-child {
+    padding-left: 0;
+  }
+
+  > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {
+    margin-left: auto; // If more than one element, push last element to the right
+  }
+
+}
+
+.mdlext-menu-button__caption {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  line-height: 1.2;
+}
+
+.mdlext-menu,
+.mdlext-menu__item {
+  box-sizing: border-box;
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  display: flex;
+}
+
+.mdlext-menu {
+  position: absolute; //fixed;
+  background: $default-dropdown-bg-color;
+  z-index: 1000;
+  min-width: 124px;
+  border-radius: 2px;
+  @include shadow-3dp();
+  display: inline-flex;
+  flex-direction: column;
+  padding: 0;
+  overflow: hidden;
+  overflow-y: auto;
+
+  &:focus {
+    outline-offset: -1px;
+    outline-width: 1px;
+  }
+
+  &[hidden] {
+    @include mdlext-visually-hidden;
+    pointer-events: none;
+  }
+
+  &__item {
+    @include typo-body-1();
+    color: $default-item-text-color;
+    background-color: $default-dropdown-bg-color;
+    position: relative;
+    padding: 0 16px 0 24px;
+    align-items: center;
+    align-self: stretch;
+    text-decoration: none;
+    cursor: pointer;
+    white-space: nowrap;
+    user-select: none;
+    min-height: 40px;
+    overflow: hidden;
+
+    &[aria-selected='true'] {
+      background-color: $default-item-active-bg-color;
+    }
+
+    // checkmark
+    &[aria-selected='true']::before {
+      content:'\2713';
+      position: absolute;
+      font-size: 1.4em;
+      left: 4px;
+      top: 50%;
+      transform: translateY(-50%);
+      pointer-events: none;
+    }
+
+    &:hover:not([disabled]) {
+      background-color: $default-item-hover-bg-color;
+    }
+
+    &:focus {
+      outline-offset: -2px;
+      outline-width: 1px;
+      outline-color: $default-item-outline-color;
+      background-color: $default-item-focus-bg-color;
+    }
+
+    &::-moz-focus-inner {
+      border: 0;
+    }
+
+    &[disabled] {
+      color: $disabled-item-text-color;
+      background-color: transparent;
+      cursor: auto;
+      pointer-events: none;
+
+      > * {
+        color: $disabled-item-text-color;
+      }
+    }
+
+    &__caption {
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+
+    > * {
+      margin: 0;
+      padding: 0 0 0 8px;
+    }
+
+    > *:first-child {
+      padding-left: 0;
+    }
+
+    > *:last-child:not(:only-child):not(.mdlext-menu__item__caption) {
+      margin-left: auto; // If more than one element, push last element to the right
+    }
+
+  }
+  &__item-separator {
+    margin: 0;
+    padding: 0;
+    border-bottom: 1px solid $default-item-divider-color;
+  }
+
+}
diff --git a/node_modules/mdl-ext/src/menu-button/menu-button.js b/node_modules/mdl-ext/src/menu-button/menu-button.js
new file mode 100644
index 0000000..e7e37d8
--- /dev/null
+++ b/node_modules/mdl-ext/src/menu-button/menu-button.js
@@ -0,0 +1,758 @@
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+
+/**
+ * A menu button is a button that opens a menu. It is often styled as a
+ * typical push button with a downward pointing arrow or triangle to hint
+ * that activating the button will display a menu.
+ */
+import { randomString } from '../utils/string-utils';
+import fullThrottle from '../utils/full-throttle';
+import {
+  VK_TAB,
+  VK_ENTER,
+  VK_ESC,
+  VK_SPACE,
+  VK_END,
+  VK_HOME,
+  VK_ARROW_LEFT,
+  VK_ARROW_UP,
+  VK_ARROW_RIGHT,
+  VK_ARROW_DOWN,
+  IS_UPGRADED,
+} from '../utils/constants';
+
+import { getScrollParents, tether } from '../utils/dom-utils';
+
+const JS_MENU_BUTTON = 'mdlext-js-menu-button';
+const MENU_BUTTON_MENU = 'mdlext-menu';
+const MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';
+const MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';
+//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';
+
+/**
+ * Creates the menu controlled by the menu button
+ * @param element
+ * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}
+ */
+
+const menuFactory = element => {
+
+  let ariaControls = null;
+  let parentNode = null;
+
+  const removeAllSelected = () => {
+    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}[aria-selected="true"]`)]
+      .forEach(selectedItem => selectedItem.removeAttribute('aria-selected'));
+  };
+
+  const setSelected = (item, force=false) => {
+    if(force || (item && !item.hasAttribute('aria-selected'))) {
+      removeAllSelected();
+      if(item) {
+        item.setAttribute('aria-selected', 'true');
+      }
+    }
+  };
+
+  const getSelected = () => {
+    return element.querySelector(`.${MENU_BUTTON_MENU_ITEM}[aria-selected="true"]`);
+  };
+
+  const isDisabled = item => item && item.hasAttribute('disabled');
+
+  const isSeparator = item => item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);
+
+  const focus = item => {
+    if(item) {
+      item = item.closest(`.${MENU_BUTTON_MENU_ITEM}`);
+    }
+    if(item) {
+      item.focus();
+    }
+  };
+
+  const nextItem = current => {
+    let n = current.nextElementSibling;
+    if(!n) {
+      n = element.firstElementChild;
+    }
+    if(!isDisabled(n) && !isSeparator(n)) {
+      focus(n);
+    }
+    else {
+      let i = element.children.length;
+      while(n && i-- > 0) {
+        if(isDisabled(n) || isSeparator(n)) {
+          n = n.nextElementSibling;
+          if(!n) {
+            n = element.firstElementChild;
+          }
+        }
+        else {
+          focus(n);
+          break;
+        }
+      }
+    }
+  };
+
+  const previousItem = current => {
+    let p = current.previousElementSibling;
+    if(!p) {
+      p = element.lastElementChild;
+    }
+    if(!isDisabled(p) && !isSeparator(p)) {
+      focus(p);
+    }
+    else {
+      let i = element.children.length;
+      while(p && i-- > 0) {
+        if(isDisabled(p) || isSeparator(p)) {
+          p = p.previousElementSibling;
+          if(!p) {
+            p = element.lastElementChild;
+          }
+        }
+        else {
+          focus(p);
+          break;
+        }
+      }
+    }
+  };
+
+  const firstItem = () => {
+    const item = element.firstElementChild;
+    if(isDisabled(item) || isSeparator(item) ) {
+      nextItem(item);
+    }
+    else {
+      focus(item);
+    }
+  };
+
+  const lastItem = () => {
+    const item = element.lastElementChild;
+    if(isDisabled(item) || isSeparator(item)) {
+      previousItem(item);
+    }
+    else {
+      focus(item);
+    }
+  };
+
+  const selectItem = item => {
+    if(item && !isDisabled(item) && !isSeparator(item)) {
+      setSelected(item);
+      close(true, item);
+    }
+  };
+
+  const keyDownHandler = event => {
+
+    const item = event.target.closest(`.${MENU_BUTTON_MENU_ITEM}`);
+
+    switch (event.keyCode) {
+      case VK_ARROW_UP:
+      case VK_ARROW_LEFT:
+        if(item) {
+          previousItem(item);
+        }
+        else {
+          firstItem();
+        }
+        break;
+
+      case VK_ARROW_DOWN:
+      case VK_ARROW_RIGHT:
+        if(item) {
+          nextItem(item);
+        }
+        else {
+          lastItem();
+        }
+        break;
+
+      case VK_HOME:
+        firstItem();
+        break;
+
+      case VK_END:
+        lastItem();
+        break;
+
+      case VK_SPACE:
+      case VK_ENTER:
+        selectItem(item);
+        break;
+
+      case VK_ESC:
+        close(true);
+        break;
+
+      case VK_TAB:
+        // We do not have a "natural" tab order from menu, so the best we can do is to set focus back to the button
+        close(true);
+        break;
+
+      default:
+        return;
+    }
+    event.preventDefault();
+  };
+
+
+  const blurHandler = event => {
+
+    // See: https://github.com/facebook/react/issues/2011
+    const t = event.relatedTarget ||
+      event.explicitOriginalTarget || // FF
+      document.activeElement;         // IE11
+
+    //console.log('***** blur, target, relatedTarget', event.target, t);
+
+    try {
+      if (t) {
+        if (t.closest(`.${MENU_BUTTON_MENU}`) !== element && shouldClose(t)) {
+          close();
+        }
+      }
+      else {
+        close();
+      }
+    }
+    catch(err) {
+      // FF throws error: "TypeError: n.closest is not a function" if related target is a text node
+      close();
+    }
+  };
+
+  const clickHandler = event => {
+    //console.log('***** click, target', event.target);
+
+    event.preventDefault();
+    const t = event.target;
+    if (t && t.closest(`.${MENU_BUTTON_MENU}`) === element) {
+      const item = t.closest(`.${MENU_BUTTON_MENU_ITEM}`);
+      if (item) {
+        selectItem(item);
+      }
+    }
+    else {
+      if (shouldClose(t)) {
+        close();
+      }
+    }
+  };
+
+  const touchStartHandler = event => {
+    //console.log('***** touchStart, target', event.target);
+
+    const t = event.target;
+    if(!(t && t.closest(`.${MENU_BUTTON_MENU}`) === element)) {
+      if (event.type === 'touchstart') {
+        event.preventDefault();
+      }
+      close();
+    }
+  };
+
+  const addListeners = () => {
+    element.addEventListener('keydown', keyDownHandler, false);
+    element.addEventListener('blur', blurHandler, true);
+    element.addEventListener('click', clickHandler, true);
+    document.documentElement.addEventListener('touchstart', touchStartHandler, true);
+  };
+
+  const removeListeners = () => {
+    element.removeEventListener('keydown', keyDownHandler, false);
+    element.removeEventListener('blur', blurHandler, true);
+    element.removeEventListener('click', clickHandler, true);
+    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);
+  };
+
+  const open = (controlElement, position='first') => {
+
+    ariaControls = controlElement.closest(`.${JS_MENU_BUTTON}`);
+
+    element.style['min-width'] = `${Math.max(124, controlElement.getBoundingClientRect().width)}px`;
+    element.removeAttribute('hidden');
+    tether(controlElement, element);
+
+    let item;
+    switch (position.toLowerCase()) {
+      case 'first':
+        firstItem();
+        break;
+
+      case 'last':
+        lastItem();
+        break;
+
+      case 'selected':
+        item = getSelected();
+        if(item && !item.hasAttribute('disabled')) {
+          focus(item);
+        }
+        else {
+          firstItem();
+        }
+        break;
+    }
+
+    addListeners();
+  };
+
+
+  const shouldClose = target => {
+    //console.log('***** shouldClose');
+
+    let result = false;
+    const btn = (target && target.closest(`.${JS_MENU_BUTTON}`)) || null;
+    if(!btn) {
+      result = true;
+    }
+    else if(btn.getAttribute('aria-controls') === element.id) {
+      if(btn !== ariaControls) {
+        result = true;
+      }
+    }
+    else {
+      result = true;
+    }
+    return result;
+  };
+
+  const close = (forceFocus = false, item = null) => {
+    removeListeners();
+
+    element.dispatchEvent(
+      new CustomEvent('_closemenu', {
+        bubbles: true,
+        cancelable: true,
+        detail: { forceFocus: forceFocus, item: item }
+      })
+    );
+  };
+
+  const addWaiAria = () => {
+    if (!element.hasAttribute('id')) {
+      // Generate a random id
+      element.id = `menu-button-${randomString()}`;
+    }
+    element.setAttribute('tabindex', '-1');
+    element.setAttribute('role', 'menu');
+    element.setAttribute('hidden', '');
+
+    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}`)].forEach( menuitem => {
+      menuitem.setAttribute('tabindex', '-1');
+      menuitem.setAttribute('role', 'menuitem');
+    });
+
+    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM_SEPARATOR}`)].forEach( menuitem => {
+      menuitem.setAttribute('role', 'separator');
+    });
+  };
+
+  const init = () => {
+    addWaiAria();
+    parentNode = element.parentNode;
+    element.classList.add('is-upgraded');
+  };
+
+  const downgrade = () => {
+    removeListeners();
+    if(element.parentNode !== parentNode) {
+      parentNode.appendChild(element);
+    }
+    element.classList.remove('is-upgraded');
+  };
+
+  init();
+
+  return {
+    /**
+     * Get the menu element
+     * @returns {Element} the menu element
+     */
+    get element() {
+      return element;
+    },
+
+    /**
+     * Set selected menu item
+     * @param item
+     */
+    set selected(item) {
+      setSelected(item, true);
+    },
+
+    /**
+     * Open menu
+     * @param {Element} controlElement the element where the menu should be aligned to
+     * @param {String} position menuElement item to receive focus after menu element is opened
+     */
+    open: (controlElement, position='first') => open(controlElement, position),
+
+    /**
+     * Remove event listeners.
+     */
+    removeListeners: () => removeListeners(),
+
+    /**
+     * Downgrade menu
+     */
+    downgrade: () => downgrade(),
+  };
+};
+
+
+/**
+ * The menubutton component
+ */
+
+class MenuButton {
+
+  constructor(element) {
+    this.element = element;
+    this.focusElement = undefined;
+    this.focusElementLastScrollPosition = undefined;
+    this.scrollElements = [];
+    this.menu = undefined;
+    this.selectedItem = null;
+    this.init();
+  }
+
+  keyDownHandler = event => {
+    if(!this.isDisabled()) {
+      switch (event.keyCode) {
+        case VK_ARROW_UP:
+          this.openMenu('last');
+          break;
+
+        case VK_ARROW_DOWN:
+          this.openMenu();
+          break;
+
+        case VK_SPACE:
+        case VK_ENTER:
+          this.openMenu('selected');
+          break;
+
+        case VK_ESC:
+          this.closeMenu();
+          break;
+
+        case VK_TAB:
+          this.closeMenu();
+          return;
+
+        default:
+          return;
+      }
+    }
+    //event.stopPropagation();
+    event.preventDefault();
+  };
+
+  clickHandler = () => {
+    if(!this.isDisabled()) {
+      if(this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {
+        this.closeMenu(true);
+      }
+      else {
+        this.openMenu('selected');
+      }
+    }
+  };
+
+  /**
+   * Re-position menu if content is scrolled, window is resized or orientation change
+   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/
+   */
+  recalcMenuPosition = fullThrottle( () => {
+    const c = this.focusElement.getBoundingClientRect();
+    const dx = this.focusElementLastScrollPosition.left - c.left;
+    const dy = this.focusElementLastScrollPosition.top - c.top;
+    const left = (parseFloat(this.menu.element.style.left) || 0) - dx;
+    const top = (parseFloat(this.menu.element.style.top) || 0) - dy;
+
+    this.menu.element.style.left = `${left}px`;
+    this.menu.element.style.top = `${top}px`;
+    this.focusElementLastScrollPosition = c;
+  });
+
+
+  positionChangeHandler = () => {
+    this.recalcMenuPosition(this);
+  };
+
+  closeMenuHandler = event => {
+    if(event && event.detail) {
+      if(event.detail.item && event.detail.item !== this.selectedItem) {
+        this.selectedItem = event.detail.item;
+        this.dispatchMenuSelect();
+      }
+      this.closeMenu(event.detail.forceFocus);
+    }
+  };
+
+  dispatchMenuSelect() {
+    this.element.dispatchEvent(
+      new CustomEvent('menuselect', {
+        bubbles: true,
+        cancelable: true,
+        detail: { source: this.selectedItem }
+      })
+    );
+  }
+
+  isDisabled() {
+    return this.element.hasAttribute('disabled');
+  }
+
+  removeListeners() {
+    this.element.removeEventListener('keydown', this.keyDownHandler);
+    this.element.removeEventListener('click', this.clickHandler);
+  }
+
+  openMenu(position='first') {
+
+    if(!this.isDisabled() && this.menu) {
+
+      // Close the menu if button position change
+      this.scrollElements = getScrollParents(this.element);
+      this.scrollElements.forEach(el => el.addEventListener('scroll', this.positionChangeHandler));
+
+      window.addEventListener('resize', this.positionChangeHandler);
+      window.addEventListener('orientationchange', this.positionChangeHandler);
+      this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);
+
+      this.menu.selected = this.selectedItem;
+      this.menu.open(this.focusElement, position);
+      this.element.setAttribute('aria-expanded', 'true');
+
+      this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();
+    }
+  }
+
+  closeMenu(forceFocus = false) {
+    if(this.menu) {
+      this.menu.removeListeners();
+      this.scrollElements.forEach(el => el.removeEventListener('scroll', this.positionChangeHandler));
+      window.removeEventListener('resize', this.positionChangeHandler);
+      window.removeEventListener('orientationchange', this.positionChangeHandler);
+      this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);
+
+      if (forceFocus) {
+        this.focus();
+      }
+      this.element.setAttribute('aria-expanded', 'false');
+      this.menu.element.setAttribute('hidden', '');
+    }
+  }
+
+  focus() {
+    if(!this.isDisabled()) {
+      this.focusElement.focus();
+    }
+  }
+
+  init() {
+    const addListeners = () => {
+      this.element.addEventListener('keydown', this.keyDownHandler);
+      this.element.addEventListener('click', this.clickHandler);
+    };
+
+    const addWaiAria = () => {
+      this.element.setAttribute('role', 'button');
+      this.element.setAttribute('aria-expanded', 'false');
+      this.element.setAttribute('aria-haspopup', 'true');
+    };
+
+    const addFocusElement = () => {
+      this.focusElement = this.element.querySelector('input[type="text"]');
+      if(!this.focusElement) {
+        this.focusElement = this.element;
+
+        if(!(this.focusElement.tagName.toLowerCase() === 'button' || this.focusElement.tagName.toLowerCase() === 'input')) {
+          if (!this.focusElement.hasAttribute('tabindex')) {
+            this.focusElement.setAttribute('tabindex', '0');
+          }
+        }
+      }
+    };
+
+    const moveElementToDocumentBody = (element) => {
+      // To position an element on top of all other z-indexed elements, the element should be moved to document.body
+      //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/
+
+      if(element.parentNode !== document.body) {
+        return document.body.appendChild(element);
+      }
+      return element;
+    };
+
+    const findMenuElement = () => {
+      let menuElement;
+      const menuElementId = this.element.getAttribute('aria-controls');
+      if(menuElementId !== null) {
+        menuElement = document.querySelector(`#${menuElementId }`);
+      }
+      else {
+        menuElement = this.element.parentNode.querySelector(`.${MENU_BUTTON_MENU}`);
+      }
+      return menuElement;
+    };
+
+    const addMenu = () => {
+      const menuElement = findMenuElement();
+      if(menuElement) {
+        if(menuElement.componentInstance) {
+          this.menu = menuElement.componentInstance;
+        }
+        else {
+          this.menu = menuFactory(menuElement);
+          menuElement.componentInstance = this.menu;
+          moveElementToDocumentBody(menuElement);
+        }
+        this.element.setAttribute('aria-controls', this.menu.element.id);
+      }
+    };
+
+    addFocusElement();
+    addWaiAria();
+    addMenu();
+    this.removeListeners();
+    addListeners();
+  }
+
+  downgrade() {
+    if(this.menu) {
+      // Do not downgrade menu if there are other buttons sharing this menu
+      const related = [...document.querySelectorAll(`.${JS_MENU_BUTTON}[aria-controls="${this.element.getAttribute('aria-controls')}"]`)];
+      if(related.filter( c => c !== this.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0).length === 0) {
+        this.menu.downgrade();
+      }
+    }
+    this.removeListeners();
+  }
+
+}
+
+(function() {
+  'use strict';
+
+  /**
+   * https://github.com/google/material-design-lite/issues/4205
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  const MaterialExtMenuButton = function MaterialExtMenuButton(element) {
+    this.element_ = element;
+    this.menuButton_ = null;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialExtMenuButton'] = MaterialExtMenuButton;
+
+
+  // Public methods.
+
+  /**
+   * Get the menu element controlled by this button, null if no menu is controlled by this button
+   * @public
+   */
+  MaterialExtMenuButton.prototype.getMenuElement = function() {
+    return this.menuButton_.menu ? this.menuButton_.menu.element : null;
+  };
+  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;
+
+  /**
+   * Open menu
+   * @public
+   * @param {String} position one of "first", "last" or "selected"
+   */
+  MaterialExtMenuButton.prototype.openMenu = function(position) {
+    this.menuButton_.openMenu(position);
+  };
+  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;
+
+  /**
+   * Close menu
+   * @public
+   */
+  MaterialExtMenuButton.prototype.closeMenu = function() {
+    this.menuButton_.closeMenu(true);
+  };
+  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;
+
+  /**
+   * Get selected menu item
+   * @public
+   * @returns {Element} The selected menu item or null if no item selected
+   */
+  MaterialExtMenuButton.prototype.getSelectedMenuItem = function() {
+    return this.menuButton_.selectedItem;
+  };
+  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;
+
+
+  /**
+   * Set (default) selected menu item
+   * @param {Element} item
+   */
+  MaterialExtMenuButton.prototype.setSelectedMenuItem = function(item) {
+    this.menuButton_.selectedItem = item;
+  };
+  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;
+
+  /**
+   * Initialize component
+   */
+  MaterialExtMenuButton.prototype.init = function() {
+    if (this.element_) {
+      this.menuButton_ = new MenuButton(this.element_);
+      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));
+      this.element_.classList.add(IS_UPGRADED);
+    }
+  };
+
+  /**
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   */
+  MaterialExtMenuButton.prototype.mdlDowngrade_ = function() {
+    this.menuButton_.downgrade();
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtMenuButton,
+    classAsString: 'MaterialExtMenuButton',
+    cssClass: JS_MENU_BUTTON,
+    widget: true
+  });
+})();
diff --git a/node_modules/mdl-ext/src/menu-button/readme.md b/node_modules/mdl-ext/src/menu-button/readme.md
new file mode 100644
index 0000000..ab3a219
--- /dev/null
+++ b/node_modules/mdl-ext/src/menu-button/readme.md
@@ -0,0 +1,472 @@
+# Menu Button
+![Menu button](../../etc/menu-button.png)&nbsp;&nbsp;&nbsp;&nbsp; ![Menu button](../../etc/menu-button-2.png)
+
+A WAI-ARIA friendly menu button component/widget with roles, attributes and behavior in accordance with the specification 
+given in WAI-ARIA Authoring Practices, [section 2.20](https://www.w3.org/TR/wai-aria-practices/#button).
+
+## Introduction
+A menu button is a button that opens a menu. It is often styled as a typical push button with a 
+downward pointing arrow or triangle to hint that activating the button will display a menu. 
+
+A menu is a widget that offers a list of choices to the user, such as a set of actions or functions. A menu is (usually) 
+opened, or made visible, by activating a menu button. When a user activates a choice in a menu, the menu (usually) closes.
+
+In this release a `<button>`, an `<input type="text">` or a `<div>` (mdl-textfield) can have `role="button"`, and act as 
+the control for a menu. 
+
+## To include a MDLEXT **menu button** component:
+
+&nbsp;1. Code a `<button>` element; this is the clickable toggle that will show and hide the menu. Include an `aria-controls` 
+attribute whose value will match the id attribute of the unordered list coded in the next step. Inside the button, 
+code a `<span>` element to hold the button caption text and a `<i>` element to contain a state icon.
+
+```html
+<button aria-controls="menu1">
+  <span></span>
+  <i></i>
+</button>
+```
+
+&nbsp;2. Code a `<ul>` unordered list element; this is the container that holds the menu choices. Include an id attribute 
+whose value will match the `aria-controls` attribute of the button element.
+
+```html
+<ul id="menu1">
+</ul>
+```
+
+&nbsp;3. Inside the unordered list, code one `<li>` element for each choice. Add a text caption as appropriate.
+
+```html
+<ul id="menu1">
+  <li>Small</li>
+  <li>Medium</li>
+  <li>Large</li>
+</ul>
+```
+
+&nbsp;4. Add one or more MDL classes, separated by spaces, to the button, span and i elements using the class attribute.
+
+```html
+<button class="mdl-button mdl-js-button" aria-controls="menu1">
+  <span>Select a value</span>
+  <i class="material-icons">more_vert</i>
+</button>
+```
+
+&nbsp;5. Add the `mdlext-js-menu-button` class to define the element as a menu button component.
+
+```html
+<button class="mdl-button mdl-js-button mdlext-js-menu-button" aria-controls="menu1">
+  <span>Select a value</span>
+  <i class="material-icons">more_vert</i>
+</button>
+```
+
+&nbsp;6. Add the `mdlext-menu` class to the unordered list and the `mdlext-menu__item` class to the list items. 
+
+```html
+<ul id="menu1" class="mdlext-menu">
+  <li class="mdlext-menu__item">Small</li>
+  <li class="mdlext-menu__item">Medium</li>
+  <li class="mdlext-menu__item">Large</li>
+</ul>
+```
+
+The menu button component is ready for use.
+
+>**Note:** After page load, the component will add all required Aria roles and attributes.
+
+```html
+<button class="mdl-button mdl-js-button mdlext-js-menu-button" 
+  role="button" aria-expanded="false" aria-haspopup="true" aria-controls="menu1">
+  <span>Select a value</span>
+  <i class="material-icons">more_vert</i>
+</button>
+<ul  id="menu1" class="mdlext-menu" role="menu" tabindex="-1" hidden>
+  <li class="mdlext-menu__item" role="menuitem" tabindex="-1">Small</li>
+  <li class="mdlext-menu__item" role="menuitem" tabindex="-1">Medium</li>
+  <li class="mdlext-menu__item" role="menuitem" tabindex="-1">Large</li>
+</ul>
+```
+
+
+### Examples
+
+**A menu button with three options.**
+
+```html
+<button class="mdl-button mdl-js-button mdlext-js-menu-button" aria-controls="menu1">
+  <span>Select a value</span>
+  <i class="material-icons">more_vert</i>
+</button>
+<ul id="menu1" class="mdlext-menu">
+  <li class="mdlext-menu__item">Small</li>
+  <li class="mdlext-menu__item">Medium</li>
+  <li class="mdlext-menu__item">Large</li>
+</ul>
+```
+
+> **Note:** If the button and the menu has a common ancestor element, the `aria-controls` attribute of the button and 
+the `id` attribute of the menu may be skipped.
+
+```html
+<div role="presentation">
+  <button class="mdl-button mdl-js-button mdlext-js-menu-button">
+    <span>Select a value</span>
+    <i class="material-icons">more_vert</i>
+  </button>
+  <ul class="mdlext-menu">
+    <li class="mdlext-menu__item">Small</li>
+    <li class="mdlext-menu__item">Medium</li>
+    <li class="mdlext-menu__item">Large</li>
+  </ul>
+</div>
+```
+
+With this markup the component will generate a random `id` attribute for the menu and associate it with the `aria-controls` 
+of the button.
+
+
+**A menu button with a select listener. Uses a data-value attribute to pass the actual value.**
+
+```html
+<div>
+  <button id="my-button" class="mdl-button mdl-js-button mdl-button--icon mdl-button--primary mdlext-js-menu-button"
+    onmenuselect="document.querySelector('#selection').innerHTML = 'Selected value: ' + event.detail.source.getAttribute('data-value');">
+    <span>Select</span>
+    <i class="mdlext-aria-expanded-more-less"></i>
+  </button>
+  <ul class="mdlext-menu" hidden >
+    <li class="mdlext-menu__item" data-value="10">Ten</li>
+    <li class="mdlext-menu__item" data-value="25">Twentyfive</li>
+    <li class="mdlext-menu__item" data-value="50">Fifty</li>
+  </ul>
+</div>
+```
+```javascript
+document.querySelector('#my-button').addEventListener('menuselect', function(event) {
+  this.querySelector('span').innerHTML = 'Selected value: ' + 
+    event.detail.source.getAttribute('data-value')
+});
+```
+
+
+**A menu button decorated with icons**
+
+```html
+<style>
+.material-icons.md-18 {
+   font-size: 18px;
+}
+</style>
+
+<button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button"
+  aria-controls="demo-menu">
+  <i class="material-icons">gesture</i>
+  <span class="mdlext-menu-button__caption">Select</span>
+  <i class="material-icons mdlext-aria-expanded-more-less"></i>
+</button>
+
+<ul id="demo-menu" class="mdlext-menu" hidden>
+  <li class="mdlext-menu__item">
+    <i class="material-icons md-18">info</i>
+    <span class="mdlext-menu__item__caption">Menu item #1</span>
+  </li>
+  <li class="mdlext-menu__item">
+    <i class="material-icons md-18">help_outline</i>
+    <span class="mdlext-menu__item__caption">Menu item #2. A long text to check ellipsis overflow 0123456789</span>
+    <i class="material-icons md-18">radio</i>
+  </li>
+  <li class="mdlext-menu__item-separator"></li>
+  <li class="mdlext-menu__item" disabled>
+    <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+    <i class="material-icons md-18">accessibility</i>
+  </li>
+  <li class="mdlext-menu__item-separator"></li>
+  <li class="mdlext-menu__item">
+    <span class="mdlext-menu__item__caption">Menu item #IV</span>
+    <i class="material-icons md-18">build</i>
+  </li>
+  <li class="mdlext-menu__item">
+    <span class="mdlext-menu__item__caption">Menu item #V</span>
+    <i class="material-icons md-18">build</i>
+  </li>
+  <li class="mdlext-menu__item-separator"></li>
+  <li class="mdlext-menu__item">
+    <span class="mdlext-menu__item__caption">Menu item #VI</span>
+    <i class="material-icons md-18">build</i>
+  </li>
+  <li class="mdlext-menu__item">
+    <span class="mdlext-menu__item__caption">Menu item #VII</span>
+    <i class="material-icons md-18">build</i>
+  </li>
+  <li class="mdlext-menu__item">
+    Menu item #n
+  </li>
+</ul>
+```
+
+**A mdl-textfield component can be used as a menu button.**
+
+```html
+<style>
+  .mdl-textfield.mdlext-js-menu-button .mdl-textfield__input {
+    padding-right: 40px;
+  }
+  .mdl-textfield__icon {
+    width: 32px;
+    text-align: left;
+    position: absolute;
+    right: 0;
+    top: 50%;
+    transform: translateY(-50%);
+  }
+  .mdl-textfield.is-disabled .mdl-textfield__icon {
+    color: rgba(0, 0, 0, 0.26) !important;
+  }
+  .mdl-textfield.is-invalid .mdl-textfield__icon {
+    color: #de3226 !important;
+  }
+</style>
+
+<div role="presentation">
+  <div id="my-textfield" class="mdl-textfield mdl-js-textfield mdlext-js-menu-button">
+    <input class="mdl-textfield__input" type="text" readonly>
+    <label class="mdl-textfield__label">Sign in with ...</label>
+    <i class="material-icons mdl-textfield__icon mdlext-aria-expanded-more-less"></i>
+  </div>
+  <ul class="mdlext-menu" hidden >
+    <li class="mdlext-menu__item" data-key="S">Small</li>
+    <li class="mdlext-menu__item" data-key="M">Medium</li>
+    <li class="mdlext-menu__item" data-key="L">Large</li>
+  </ul>
+</div>
+```
+```javascript
+document.querySelector('#my-textfield').addEventListener('menuselect', function(event) {
+  this.MaterialTextfield.change(event.detail.source.getAttribute('data-key') 
+           + ': ' + event.detail.source.querySelector('span').innerHTML);
+});
+```
+
+**Create your own state icon with SASS.**
+The [_mixins.scss](../_mixins.scss) has a mixin which can be used to create custom state icons.  
+
+```sass
+@charset "UTF-8";
+.my-aria-expanded-state {
+  @include mdlext-aria-expanded-toggle($icon: 'arrow_downward', $icon-expanded: 'arrow_upward');
+}
+```
+
+**Use a custom styled `div` as a menu button.**
+
+```html
+<div role="presentation">
+  <div id="my-div" class="mdlext-menu-button mdlext-js-menu-button" 
+       style="width:300px; height:44px; max-width:100%; border:1px solid green">
+       
+    <span class="mdlext-menu-button__caption">Select a size ...</span>
+    <i class="material-icons my-aria-expanded-state"></i>
+  </div>
+  <ul class="mdlext-menu" hidden >
+    <li class="mdlext-menu__item" data-key="S">Small</li>
+    <li class="mdlext-menu__item" data-key="M">Medium</li>
+    <li class="mdlext-menu__item" data-key="L">Large</li>
+  </ul>
+</div>
+```
+```javascript
+document.querySelector('#my-div').addEventListener('menuselect', function(event) {
+  this.querySelector('span').innerHTML = 
+     event.detail.source.getAttribute('data-key') + ': ' + 
+     event.detail.source.querySelector('span').innerHTML);
+});
+```
+
+**Many buttons can share one menu.**
+
+```html
+<button class="mdl-button mdl-js-button mdlext-js-menu-button" aria-controls="shared-menu">
+  <span class="mdlext-menu-button__caption">A button</span>
+</button>
+
+<div class="mdl-textfield mdl-js-textfield mdlext-js-menu-button" aria-controls="shared-menu">
+  <input class="mdl-textfield__input" type="text" readonly>
+  <label class="mdl-textfield__label">A MDL textfield</label>
+</div>
+
+<ul id="shared-menu" class="mdlext-menu" hidden>
+  <li class="mdlext-menu__item" role="menuitem">Menu item #1</li>
+  <li class="mdlext-menu__item" role="menuitem">Menu item #2</li>
+  <li class="mdlext-menu__item" role="menuitem">Menu item #n</li>
+</ul>
+```
+
+
+### More examples
+* The [snippets/menu-button.html](./snippets/menu-button.html) and the [tests](../../test/menu-button/menu-button.spec.js) provides more detailed examples.
+* Try out the [live demo](http://leifoolsen.github.io/mdl-ext/demo/menu-button.html)
+
+
+## Characteristics
+
+### Keyboard interaction, Menu Button 
+* With focus on the button:
+    * <kbd>Space</kbd> or <kbd>Enter</kbd>: opens the menu, sets `aria-expanded="true"`, and place focus on the previously selected menu item - or on the first menu item if no selected menu item.
+    * <kbd>Down Arrow</kbd>: opens the menu, sets `aria-expanded="true"`, and moves focus to the first menu item.
+    * <kbd>Up Arrow</kbd>: opens the menu, sets `aria-expanded="true"`, and moves focus to the last menu item.
+
+### Mouse interaction, Menu Button 
+* With focus on the button:
+    * <kbd>Click</kbd>: opens the menu, sets `aria-expanded="true"`, and place focus on the previously selected menu item - or on the first menu item if no selected menu item.
+    * <kbd>Click</kbd>: a second click closes the menu, sets `aria-expanded="false"` and place focus on button.
+    
+### Keyboard interaction, Menu
+* With focus on the menu:
+    * <kbd>Space</kbd> or <kbd>Enter</kbd>: sets `aria-selected="true"` on active menu item, sets `aria-expanded="true"` on menu button, closes menu and moves focus back to menu button. The button emits a custom `select` event with a referfence to the selected menu element.
+    * <kbd>Home</kbd>: move focus to first menu item.
+    * <kbd>End</kbd>: move focus to last menu item.
+    * <kbd>Up Arrow</kbd> or <kbd>Left Arrow</kbd>: move focus to previous menu item.
+    * <kbd>Down Arrow</kbd> or <kbd>Right Arrow</kbd>: Move focus to next menu item.
+    * <kbd>Esc</kbd>: Closes the menu, sets `aria-expanded="true"` on menu button, and move focus back to menu button.
+
+>The keyboard behavior after the menu is open are described in more detail in WAI-ARIA Authoring Practices, [2.19 Menu or Menu bar](https://www.w3.org/TR/wai-aria-practices/#menu).
+
+### Mouse interaction, Menu
+* With focus on the menu:
+    * <kbd>Click</kbd>: sets `aria-selected="true"` on active menu item, sets `aria-expanded="true"` on menu button, closes menu and moves focus back to menu button. The button emits a custom `select` event with a referfence to the selected menu element. 
+
+## WAI-ARIA Roles, States, and Properties
+The menu button has the following roles, states and properties set by the menu button component.
+
+### Menu Button
+* `role="button"`: the element that opens the menu has role [button](http://www.w3.org/TR/wai-aria-1.1/#button).
+* `aria-haspopup`: the element with role `button` has [aria-haspopup](http://www.w3.org/TR/wai-aria-1.1/#aria-haspopup) set to `true`.
+* `aria-controls`: identfies the content on the page (e.g. using IDREFs) that this menu button controls.
+* `aria-expanded`: the element with role `button` has [aria-expanded](https://www.w3.org/TR/wai-aria-1.1/#aria-expanded) set to `true` if the corresponding menu is open, oterwise false.
+* `aria-expanded`: when a menu item is disabled, `aria-disabled` is set to `true`.
+* `disabled"`: indicates that a button is disabled, otherwise not present.
+
+### Menu, WAI-ARIA Roles
+* `role="menu"`: identifies the element as a menu widget.
+* `hidden`: the menu has attrubute hidden if the controlling buttoun has `aria-expanded="false"`, otherwise the attribute is not present.
+* `role="menuitem"`: identifies an element as a menu item widget.
+* `role="menuitemcheckbox"`: (not yet implemented).
+* `role="menuitemradion"`: (not yet implemented).
+* `aria-selected`: the selected menu item has `aria-selected="true"`, otherwise not present.
+* `role="separator"`: a divider that separates and distinguishes sections of content or groups of menuitems..
+* `disabled"`: indicates that a menu item is disabled, otherwise not present.
+
+ 
+>The roles, states, and properties needed for the menu are described in more detail in WAI-ARIA Authoring Practices, [2.19 Menu or Menu bar](https://www.w3.org/TR/wai-aria-practices/#menu).
+
+## Events emitted from the component
+The menu button emits a custom `menuselect` event when a menu item is selected. The event has a detail object with the following structure:
+
+```javascript
+detail: { 
+  source: item // The selected menu item 
+}
+```
+
+To set up an event listener to receive the select custom event.
+```javascript
+document.querySelector('#my-menubutton').addEventListener('menuselect', function(e) {
+  console.log('menu item selected:', e.detail.source);
+});
+```
+Refer to [snippets/menu-button.html](./snippets/menu-button.html) or the [tests](../../test/menu-button/menu-button.spec.js) for detailed usage.
+
+
+## Public methods
+
+### openMenu(position)
+Open menu at given position. Position is on of `first`, `last` or `selected`. Default value is `first`.
+* `first` focus first menu item
+* `last` focus last menu item
+* `selected` focus previously selected menu item
+
+```javascript
+const menuButton = document.querySelector('#my-menu-button');
+menuButton.MaterialExtMenuButton.openMenu();
+```
+
+### closeMenu()
+Closes an open menu. Moves focus to button.
+
+```javascript
+const menuButton = document.querySelector('#my-menu-button');
+menuButton.MaterialExtMenuButton.closeMenu();
+```
+
+### getMenuElement()
+Get the menu element controlled by this button, null if no menu is controlled by this button.
+
+```javascript
+const menuButton = document.querySelector('#my-menu-button');
+const menu = menuButton.MaterialExtMenuButton.getMenuElement(); 
+```
+
+### getSelectedMenuItem()
+Get a selected menu item element, null if no menu item element selected.
+
+```javascript
+const menuButton = document.querySelector('#my-menu-button');
+const element = menuButton.MaterialExtMenuButton.getSelectedMenuItem();
+console.log('Selected menu item', element);
+```
+
+### setSelectedMenuItem(item)
+Set a selected menu item element, typically before menu is opened.
+
+```javascript
+const menuButton = document.querySelector('#my-menu-button');
+const menu = menuButton.MaterialExtMenuButton.getMenuElement(); 
+menuButton.MaterialExtMenuButton.setSelectedMenuItem(menu.children[1]);
+```
+
+Refer to [snippets/menu-button.html](./snippets/menu-button.html) or the [tests](../../test/menu-button/menu-button.spec.js) for detailed usage.
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the menu button. 
+The table below lists the available classes and their effects.
+
+| MDLEXT class                     | Effect | Remarks |
+|----------------------------------|--------|---------|
+|`mdlext-menu-button`              | Basic styling for a menu button | Optional on a div element |
+|`mdlext-js-menu-button`           | Assigns basic MDLEXT behavior to menu button. Identifies the element as a menu button component | Required on the element that should act as a menu button |
+|`mdlext-menu-button__caption`     | Holds the button text | Optional on span element inside menu button element - but required if you want to decorate a button with icons. More than one caption can be used to control various aspects of the button text, e.g. font size. |
+|`material-icons`                  | Defines span as a material icon | Required on an inline element. Decorates button or menu item with an icon |
+|`mdlext-menu`                     | Defines an unordered list container as an MDLEXT component | Required on ul element |
+|`mdlext-menu__item`               | Defines menu options | Required on list item elements |
+|`mdlext-menu__item__caption`      | Holds the menu text | Optional on span element inside list item element - but required if you want to decorate a menu item with icons. More than one caption can be used to control various aspects of the menu text, e.g. font size. |
+|`mdlext-menu__item-separator`     | Items in a menu may be divided into groups by placing an element with a role of `separator` between groups. | Optional; goes on unordered list element |
+|`mdlext-aria-expanded-plus-minus` | State icon. Displays '+' or '-' | Optional; goes on button element |
+|`mdlext-aria-expanded-more-less`  | State icon. Displays 'more' or 'less' Material Design icons | Optional; goes on button element |
+
+> **Note:** 
+> Disabled versions of the menu items are provided, and are invoked with the standard HTML boolean attribute `disabled` 
+`<li class="mdlext-menu__item" disabled>A menu item</li>`. This attribute may be added or removed programmatically via scripting.
+
+> If you decorate the menu button with icons, wrap the button text inside a span to separate icons and text 
+```html
+<button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+  <i class="material-icons">gesture</i>
+  <span class="mdlext-menu-button__caption">Select</span>
+  <i class="material-icons mdlext-menu-button__aria-expanded-more-less"></i>
+</button>
+```
+
+> If you decorate a menu item with icons, wrap the menu item text inside a span to separate icons and text 
+```html
+<ul id="demo-menu" class="mdlext-menu" hidden>
+  <li class="mdlext-menu__item">
+    <i class="material-icons md-18">help_outline</i>
+    <span class="mdlext-menu__item__caption">Menu item</span>
+    <i class="material-icons">info</i>
+  </li>
+</ul>
+```
diff --git a/node_modules/mdl-ext/src/menu-button/snippets/menu-button.html b/node_modules/mdl-ext/src/menu-button/snippets/menu-button.html
new file mode 100644
index 0000000..784f280
--- /dev/null
+++ b/node_modules/mdl-ext/src/menu-button/snippets/menu-button.html
@@ -0,0 +1,594 @@
+<article>
+<p>A menu button is a button that opens a menu. It is often styled as a typical push button with a
+downward pointing arrow or triangle to hint that activating the button will display a menu.
+The menu button has roles, attributes and behaviour as outlined in
+<a href="https://www.w3.org/TR/wai-aria-practices/#menubutton" target="_blank">WAI-ARIA Authoring Practices</a>.
+</p>
+</article>
+
+<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
+
+<style>
+  .size-22 {
+    font-size: 22px;
+    width: 22px;
+    text-align: center;
+    vertical-align: middle;
+  }
+
+  .mdl-cell p {
+    margin-bottom: 0;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+  }
+
+
+  .mdl-textfield.mdlext-js-menu-button .mdl-textfield__input {
+    padding-right: 40px;
+  }
+
+  .mdl-textfield__icon {
+    width: 32px;
+    text-align: left;
+    position: absolute;
+    right: 0;
+    top: 50%;
+    transform: translateY(-50%);
+  }
+
+  .mdl-textfield.is-disabled .mdl-textfield__icon {
+    color: rgba(0, 0, 0, 0.26) !important;
+  }
+
+  .mdl-textfield.is-invalid .mdl-textfield__icon {
+    color: #de3226 !important;
+  }
+
+  #max-width-menu {
+    max-width: 400px;
+  }
+
+</style>
+
+<script>
+  function signedIn(sn) {
+    return 'Signed in with&nbsp;&nbsp;<i class="size-22 icon ion-social-' + sn + '"></i>&nbsp;';
+  }
+  function signedInIcon(sn) {
+    return '<i class="size-22 icon ion-social-' + sn + '"></i>';
+  }
+</script>
+
+<div class="mdl-grid mdl-grid--no-spacing">
+  <div class="mdl-cell mdl-cell--4-col">
+    <p><code>mdl-button</code></p>
+    <button id="btn-social-1" style="width:100%; max-width:300px; height:46px"
+            class="mdl-button mdl-button--colored mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button"
+            aria-controls="shared-social-menu" >
+      <i class="material-icons">person_outline</i>
+      <span class="mdlext-menu-button__caption">Sign in with ...</span>
+      <i class="material-icons mdlext-aria-expanded-more-less"></i>
+    </button>
+    <script>
+      document.querySelector('#btn-social-1').addEventListener('menuselect', function(event) {
+        this.querySelector('.mdlext-menu-button__caption').innerHTML = signedIn(event.detail.source.getAttribute('data-value'));
+      });
+    </script>
+  </div> <!--cell -->
+
+  <div class="mdl-cell mdl-cell--4-col">
+    <p><code>mdl-textfield</code></p>
+    <div id="btn-social-2"
+         class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-js-menu-button"
+         aria-controls="shared-social-menu">
+      <input class="mdl-textfield__input" type="text" readonly>
+      <label class="mdl-textfield__label">Sign in with ...</label>
+      <i class="material-icons mdl-textfield__icon mdlext-aria-expanded-more-less"></i>
+    </div>
+    <script>
+      document.querySelector('#btn-social-2').addEventListener('menuselect', function(event) {
+        this.MaterialTextfield.change(event.detail.source.querySelector('span').innerHTML);
+      });
+    </script>
+  </div> <!--cell -->
+
+  <div class="mdl-cell mdl-cell--4-col mdlext-bordered-fields">
+    <p><code>mdlext-bordered-fields</code></p>
+    <div id="btn-social-3"
+         class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdlext-bordered-fields__icon-right mdlext-js-menu-button"
+         aria-controls="shared-social-menu">
+      <input class="mdl-textfield__input" type="text" readonly>
+      <label class="mdl-textfield__label">Sign in with ...</label>
+      <i class="material-icons mdlext-aria-expanded-more-less"></i>
+    </div>
+    <script>
+      document.querySelector('#btn-social-3').addEventListener('menuselect', function(event) {
+        this.MaterialTextfield.change(event.detail.source.querySelector('span').innerHTML);
+      });
+    </script>
+  </div> <!--cell -->
+
+  <div class="mdl-cell mdl-cell--4-col">
+    <p>custom styled <code>&lt;div&gt;</code></p>
+    <div id="btn-social-4"
+         class="mdlext-menu-button mdlext-js-menu-button" style="width:300px; height:46px; max-width:100%;  border:1px solid green"
+         aria-controls="shared-social-menu">
+      <span class="mdlext-menu-button__caption">Sign in with ...</span>
+      <i class="material-icons mdlext-aria-expanded-more-less"></i>
+    </div>
+    <script>
+      document.querySelector('#btn-social-4').addEventListener('menuselect', function(event) {
+        this.querySelector('span').innerHTML = signedIn(event.detail.source.getAttribute('data-value')) + ', ' +
+          event.detail.source.querySelector('span').innerHTML;
+      });
+    </script>
+  </div> <!--cell -->
+
+
+  <div class="mdl-cell mdl-cell--4-col">
+    <p>mdl-button--icon</p>
+
+    <button id="btn-social-5" style="height:46px; width:46px;"
+            class="mdl-button mdl-js-button mdl-button--icon mdlext-js-menu-button"
+            aria-controls="shared-social-menu">
+      <i class="material-icons">more_vert</i>
+    </button>
+    <script>
+      document.querySelector('#btn-social-5').addEventListener('menuselect', function(event) {
+        this.innerHTML = signedInIcon(event.detail.source.getAttribute('data-value'));
+      });
+    </script>
+
+  </div> <!--cell -->
+
+</div> <!-- grid -->
+
+<ul id="shared-social-menu" class="mdlext-menu" hidden >
+  <li class="mdlext-menu__item" data-value="twitter">
+    <span class="mdlext-menu__item__caption">Twitter</span>
+    <i class="icon ion-social-twitter-outline size-22"></i>
+  </li>
+  <li class="mdlext-menu__item" data-value="github">
+    <span class="mdlext-menu__item__caption">GitHub</span>
+    <i class="ion-social-github-outline size-22"></i>
+  </li>
+  <li class="mdlext-menu__item" data-value="googleplus">
+    <span class="mdlext-menu__item__caption">G+</span>
+    <i class="ion-social-googleplus-outline size-22"></i>
+  </li>
+  <li class="mdlext-menu__item" data-value="linkedin">
+    <span class="mdlext-menu__item__caption">LinkedIn</span>
+    <i class="icon ion-social-linkedin-outline size-22"></i>
+  </li>
+  <li class="mdlext-menu__item" data-value="facebook">
+    <span class="mdlext-menu__item__caption">Facebook</span>
+    <i class="icon ion-social-facebook-outline size-22"></i>
+  </li>
+</ul>
+
+<p style="margin-top: 16px;">Menu buttons positioned left, middle and right, using <code>textalign</code>.</p>
+<div role="presentation">
+  <button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+    <i class="material-icons">gesture</i>
+    <span class="mdlext-menu-button__caption">Select</span>
+    <i class="material-icons mdlext-aria-expanded-more-less"></i>
+  </button>
+  <ul id="max-width-menu" class="mdlext-menu" hidden >
+    <li class="mdlext-menu__item">
+      <i class="material-icons md-18">info</i>
+      <span class="mdlext-menu__item__caption">Menu item #1</span>
+    </li>
+    <li class="mdlext-menu__item">
+      <i class="material-icons md-18">help_outline</i>
+      <span class="mdlext-menu__item__caption">Menu item #2. A long text to check ellipsis overflow 0123456789</span>
+      <i class="material-icons md-18">radio</i>
+    </li>
+    <li class="mdlext-menu__item-separator"></li>
+    <li class="mdlext-menu__item" disabled>
+      <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+      <i class="material-icons md-18">accessibility</i>
+    </li>
+    <li class="mdlext-menu__item-separator"></li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #IV</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #V</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item-separator"></li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #VI</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #VII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      Menu item #n
+    </li>
+  </ul>
+</div>
+
+
+<div role="presentation" style="text-align: center">
+  <button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+    <i class="material-icons">gesture</i>
+    <span class="mdlext-menu-button__caption">Select</span>
+    <i class="material-icons mdlext-aria-expanded-more-less"></i>
+  </button>
+  <ul class="mdlext-menu" hidden >
+    <li class="mdlext-menu__item">
+      <i class="material-icons md-18">info</i>
+      <span class="mdlext-menu__item__caption">Menu item #1</span>
+    </li>
+    <li class="mdlext-menu__item">
+      <i class="material-icons md-18">help_outline</i>
+      <span class="mdlext-menu__item__caption">Menu item #2</span>
+      <i class="material-icons md-18">radio</i>
+    </li>
+    <li class="mdlext-menu__item" disabled>
+      <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+      <i class="material-icons md-18">accessibility</i>
+    </li>
+    <li class="mdlext-menu__item-separator"></li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #IV</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #V</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #VI</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #VII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #VIII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #IX</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #X</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XI</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XIII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XIV</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XV</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XVI</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XVII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XVIII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XIX</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #XX</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      Menu item #n
+    </li>
+  </ul>
+</div>
+
+
+<div role="presentation" style="text-align: right">
+  <button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+    <i class="material-icons">gesture</i>
+    <span class="mdlext-menu-button__caption">Select</span>
+    <i class="material-icons mdlext-aria-expanded-more-less"></i>
+  </button>
+  <ul class="mdlext-menu" hidden >
+    <li class="mdlext-menu__item">
+      <i class="material-icons md-18">info</i>
+      <span class="mdlext-menu__item__caption">Menu item #1</span>
+    </li>
+    <li class="mdlext-menu__item">
+      <i class="material-icons md-18">help_outline</i>
+      <span class="mdlext-menu__item__caption">Menu item #2</span>
+      <i class="material-icons md-18">radio</i>
+    </li>
+    <li class="mdlext-menu__item" disabled>
+      <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+      <i class="material-icons md-18">accessibility</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #IV</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item-separator"></li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #V</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #VI</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      <span class="mdlext-menu__item__caption">Menu item #VII</span>
+      <i class="material-icons md-18">build</i>
+    </li>
+    <li class="mdlext-menu__item">
+      Menu item #n
+    </li>
+  </ul>
+</div>
+
+
+<p style="margin-top: 16px">This menu button has WAIA roles and attributes coded in markup</p>
+<button id="aria-demo-button"
+        class="mdl-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button"
+        role="button"
+        aria-haspopup="true"
+        aria-controls="menu-example-dropdown"
+        aria-expanded="false"
+        tabindex="0">
+  <span class="mdlext-menu-button__caption">Select a size</span>
+  <i class="mdlext-aria-expanded-plus-minus"></i>
+</button>
+<script>
+  document.querySelector('#aria-demo-button').addEventListener('menuselect', function(event) {
+    this.querySelector('span').innerHTML = 'Size: ' + event.detail.source.innerHTML;
+  });
+</script>
+<ul id="menu-example-dropdown"
+    class="mdlext-menu"
+    role="menu"
+    hidden >
+  <li class="mdlext-menu__item" role="menuitem">X Small</li>
+  <li class="mdlext-menu__item-separator" role="separator"></li>
+  <li class="mdlext-menu__item" role="menuitem">Small</li>
+  <li class="mdlext-menu__item" role="menuitem">Medium</li>
+  <li class="mdlext-menu__item" role="menuitem">Large</li>
+  <li class="mdlext-menu__item-separator" role="separator"></li>
+  <li class="mdlext-menu__item" role="menuitem">X Large</li>
+  <li class="mdlext-menu__item" role="menuitem">XXX Large</li>
+</ul>
+
+<p style="margin-top: 16px">A disabled menu button should do nothing</p>
+<div role="presentation">
+  <button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdlext-js-menu-button" disabled>
+    <span class="mdlext-menu-button__caption">Disabled</span>
+    <i class="material-icons mdlext-aria-expanded-more-less"></i>
+  </button>
+  <ul class="mdlext-menu" hidden>
+    <li class="mdlext-menu__item">Menu item #1</li>
+  </ul>
+</div>
+
+
+<p style="margin-top: 16px">Menu buttons inside a table. Menus placed inside and after the table element to verify
+  that positioning works as expected.</p>
+
+<div style="position:relative; border:2px solid green; overflow: hidden;">
+<p>The box with green borders has <code>overflow:hidden</code></p>
+<div>
+
+  <table id="a-table-with-menu-buttons"
+         class="mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp" style="width: 48%; float:left;">
+  <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>
+      <span style="width:40px; display: inline-block;"></span>
+      <button class="mdl-button mdl-js-button mdl-button--icon mdl-button--primary mdlext-js-menu-button"
+              aria-controls="table-menu-example">
+        <i class="mdlext-aria-expanded-more-less"></i>
+      </button>
+    </td>
+    <td>$2.90</td>
+  </tr>
+  <tr>
+    <td class="mdl-data-table__cell--non-numeric">Plywood (Birch)</td>
+    <td>
+      <span style="width:40px; display: inline-block;"></span>
+      <button class="mdl-button mdl-js-button mdl-button--icon mdl-button--primary mdlext-js-menu-button"
+              aria-controls="table-menu-example">
+        <i class="mdlext-aria-expanded-more-less"></i>
+      </button>
+    </td>
+    <td>$1.25</td>
+  </tr>
+  <tr>
+    <td class="mdl-data-table__cell--non-numeric">Laminate (Gold on Blue)</td>
+    <td>
+      <span style="width:40px; display: inline-block;"></span>
+      <button class="mdl-button mdl-button--icon mdl-button--primary mdl-js-button mdlext-js-menu-button"
+              aria-controls="table-menu-example">
+        <i class="mdlext-aria-expanded-more-less"></i>
+      </button>
+    </td>
+    <td>$2.35</td>
+  </tr>
+  </tbody>
+  </table>
+
+  <script>
+    document.querySelector('#a-table-with-menu-buttons').addEventListener('menuselect', function(event) {
+      var span = event.target.closest('td').querySelector('span');
+      span.innerHTML = event.detail.source.getAttribute('data-value');
+    });
+  </script>
+
+  <div role="presentation" style="width:48%; float:right;">
+    <p style="margin-top: 16px">This menu button has a menu with dark color theme, <code>mdlext-dark-color-theme</code> class</p>
+
+    <button class="mdl-button mdl-button--raised mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+      <i class="material-icons">gesture</i>
+      <span class="mdlext-menu-button__caption">Select</span>
+      <i class="material-icons mdlext-aria-expanded-more-less"></i>
+    </button>
+    <ul class="mdlext-menu mdlext-dark-color-theme" hidden >
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">info</i>
+        <span class="mdlext-menu__item__caption">Menu item #1</span>
+      </li>
+      <li class="mdlext-menu__item">
+        <i class="material-icons md-18">help_outline</i>
+        <span class="mdlext-menu__item__caption">Menu item #2. A long text to check ellipsis overflow 0123456789</span>
+        <i class="material-icons md-18">radio</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item" disabled>
+        <span class="mdlext-menu__item__caption">Menu item #3, disabled</span>
+        <i class="material-icons md-18">accessibility</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #IV</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #V</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+      <li class="mdlext-menu__item-separator"></li>
+      <li class="mdlext-menu__item">
+        <span class="mdlext-menu__item__caption">Menu item #VI</span>
+        <i class="material-icons md-18">build</i>
+      </li>
+    </ul>
+  </div>
+
+</div>
+</div>
+
+<ul id="table-menu-example" class="mdlext-menu" hidden >
+  <li class="mdlext-menu__item" data-value="10">Ten</li>
+  <li class="mdlext-menu__item" data-value="25">Twentyfive</li>
+  <li class="mdlext-menu__item" data-value="50">Fifty</li>
+</ul>
+
+
+<style>
+  .demo-grid {
+    margin-top: 32px;
+  }
+  .demo-grid .mdl-cell {
+    background: rgb(63,81,181);
+    text-align: center;
+    color: white;
+    padding: 16px 8px;
+    border: 1px solid #aaaaaa;
+  }
+  .demo-grid .mdl-cell:nth-child(odd) {
+    background: rgb(33,150,243);
+  }
+</style>
+
+
+<div id="a-grid-with-menu-buttons" class="demo-grid">
+  <p>Menu buttons inside <code>mdl-grid</code></p>
+
+  <div id="menu-button-grid" class="mdl-grid mdl-grid--no-spacing">
+    <div class="mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--2-col-phone">
+      <button class="mdl-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+        <span class="mdlext-menu-button__caption">Select a size</span>
+        <i class="mdlext-aria-expanded-plus-minus"></i>
+      </button>
+      <ul class="mdlext-menu"
+          role="menu"
+          hidden >
+        <li class="mdlext-menu__item" role="menuitem">Small</li>
+        <li class="mdlext-menu__item" role="menuitem">Medium</li>
+        <li class="mdlext-menu__item" role="menuitem">Large</li>
+      </ul>
+    </div>
+    <div class="mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--2-col-phone">
+      <button class="mdl-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+        <span class="mdlext-menu-button__caption">Select a size</span>
+        <i class="mdlext-aria-expanded-plus-minus"></i>
+      </button>
+      <ul class="mdlext-menu"
+          role="menu"
+          hidden >
+        <li class="mdlext-menu__item" role="menuitem">Small</li>
+        <li class="mdlext-menu__item" role="menuitem">Medium</li>
+        <li class="mdlext-menu__item" role="menuitem">Large</li>
+      </ul>
+    </div>
+    <div class="mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--hide-phone">
+      <button class="mdl-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect mdl-js-button mdlext-js-menu-button">
+        <span class="mdlext-menu-button__caption">Select a size</span>
+        <i class="mdlext-aria-expanded-plus-minus"></i>
+      </button>
+      <ul class="mdlext-menu"
+          role="menu"
+          hidden >
+        <li class="mdlext-menu__item" role="menuitem">Small</li>
+        <li class="mdlext-menu__item" role="menuitem">Medium</li>
+        <li class="mdlext-menu__item" role="menuitem">Large</li>
+      </ul>
+    </div>
+  </div>
+</div>
+<script>
+  document.querySelector('#a-grid-with-menu-buttons').addEventListener('menuselect', function(event) {
+    event.target.querySelector('span').innerHTML = 'Size: ' + event.detail.source.innerHTML;
+  });
+</script>
+
+<div style="margin-bottom:256px;"></div>
+
+<!--
+https://www.w3.org/TR/wai-aria-practices/#menubutton
+http://w3c.github.io/aria-practices/examples/menu-button/menu-button-1.html
+http://w3c.github.io/aria-practices/examples/menu-button/menu-button-2.html
+http://tympanus.net/codrops/2012/10/04/custom-drop-down-list-styling/
+http://www.slideshare.net/webaxe/html5-dev-con-2012-aria-widget
+http://terrillthompson.com/blog/474
+https://github.com/davidtheclark/react-aria-menubutton
+https://codepen.io/tiffanytse/pen/Dkvtr
+https://codepen.io/andytran/pen/vLNGvN
+https://codepen.io/dapacreative/pen/WQoLzb
+https://codepen.io/gabrieltomescu/pen/ZGGyPK
+https://codepen.io/Idered/pen/vowrB
+https://codepen.io/Stedesign/pen/DbAJh
+http://markbirbeck.com/2015/10/14/a-mixin-approach-to-material-design-lite-using-sass/
+-->
diff --git a/node_modules/mdl-ext/src/selectfield/_selectfield.scss b/node_modules/mdl-ext/src/selectfield/_selectfield.scss
new file mode 100644
index 0000000..cd4ecfc
--- /dev/null
+++ b/node_modules/mdl-ext/src/selectfield/_selectfield.scss
@@ -0,0 +1,273 @@
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+/*
+ * Copied/Modified/Inspired from/by:
+ *   https://github.com/google/material-design-lite/tree/master/src/textfield
+ *   http://red-team-design.com/making-html-dropdowns-not-suck/
+ *   http://codepen.io/etcpe9/pen/PqyOye,
+ *   http://codepen.io/pudgereyem/pen/PqBxQx
+ *   https://github.com/MEYVN-digital/mdl-selectfield
+ *   https://github.com/mebibou/mdl-selectfield
+ */
+
+// Use of this module requires the user to include variables from material-design-lite
+//@import "../../node_modules/material-design-lite/src/variables";
+//@import "../../node_modules/material-design-lite/src/mixins";
+
+@import "../mixins";
+
+// The container for the selectfield.
+.mdlext-selectfield {
+  box-sizing: border-box;
+  position: relative;
+  font-size: $input-text-font-size;
+  display: inline-block;
+  width: 300px;
+  max-width: 100%;
+  margin: 0;
+  padding: $input-text-vertical-spacing 0;
+
+  // Align buttons, if used.
+  & .mdl-button {
+    bottom: $input-text-vertical-spacing;
+    position: absolute;
+  }
+
+  // Styling the down arrow
+  &::after {
+    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length);
+
+    position: absolute;
+    right: 0.5em;
+    top: 50%;
+    transform: translateY(-50%);
+    pointer-events: none;
+  }
+}
+
+.mdlext-selectfield.is-disabled {
+  &::after {
+    color: $input-text-disabled-color;
+    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $input-text-disabled-color);
+  }
+}
+
+// Optional class to align right.
+.mdlext-selectfield--align-right {
+  text-align: right;
+}
+
+// Optional class to display at full width.
+.mdlext-selectfield--full-width {
+  width: 100%;
+}
+
+// Optional class to make the select field expandable.
+.mdlext-selectfield--expandable {
+  min-height: $input-text-button-size;
+  min-width: $input-text-button-size;
+  width: auto;
+}
+
+// Styling for the select element.
+.mdlext-selectfield__select {
+
+  // Reset select
+  box-sizing: border-box;
+  border: 0;
+  border-radius: 0;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  -ms-appearance: none;
+  appearance: none;
+  text-indent: 0.01px; // Removes default arrow from firefox
+  text-overflow: '';   // Removes default arrow from firefox
+  outline: none;
+  box-shadow: none;
+  // End Reset select
+
+  font-size: $input-text-font-size;
+  font-family: $performance_font;
+  padding: $input-text-padding calc(1.2em + #{$input-text-padding}) $input-text-padding 0;
+  width: $input-text-width;
+  border-bottom: 1px solid $input-text-bottom-border-color;
+  display: block;
+  margin: 0;
+  background: none;
+  text-align: left;
+  color: inherit;
+
+  // Mozilla, remove focusring
+  &:-moz-focusring {
+    color: transparent;
+    text-shadow: 0 0 0 #000000;
+  }
+
+  // MS, remove selected option background color
+  &:focus::-ms-value {
+    background-color: inherit;
+    color: inherit;
+  }
+
+  &::-ms-expand {
+    display: none;
+  }
+
+  .mdlext-selectfield.is-focused & {
+    outline: none;
+  }
+
+  .mdlext-selectfield.is-invalid & {
+    border-color: $input-text-error-color;
+    box-shadow: none;
+  }
+
+  fieldset[disabled] .mdlext-selectfield &,
+  .mdlext-selectfield.is-disabled & {
+    border-bottom: 1px dotted $input-text-disabled-color;
+    color: $input-text-disabled-text-color;
+    background-color: transparent;
+  }
+
+  option {
+    color: $text-color-primary;
+    box-sizing: border-box;
+    background-color: inherit;
+  }
+}
+
+// Styling for the label / floating label.
+.mdlext-selectfield__label {
+  box-sizing: border-box;
+  color: $input-text-label-color;
+  font-size: $input-text-font-size;
+  top: ($input-text-padding + $input-text-vertical-spacing);
+  bottom: 0;
+  left: 0;
+  right: 0;
+  pointer-events: none;
+  position: absolute;
+  display: block;
+  width: 100%;
+  overflow: hidden;
+  white-space: nowrap;
+  text-align: left;
+
+  .mdlext-selectfield.is-dirty &,
+  .mdlext-selectfield.has-placeholder & {
+    visibility: hidden;
+  }
+
+  // Floating Label
+  .mdlext-selectfield--floating-label & {
+    @include material-animation-default();
+  }
+
+  .mdlext-selectfield--floating-label.has-placeholder & {
+    transition: none;
+  }
+
+  fieldset[disabled] .mdlext-selectfield &,
+  .mdlext-selectfield.is-disabled.is-disabled & {
+    color: $input-text-disabled-text-color;
+  }
+
+  .mdlext-selectfield--floating-label.is-focused &,
+  .mdlext-selectfield--floating-label.is-dirty.is-dirty &,
+  .mdlext-selectfield--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;
+  }
+
+  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder &,
+  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder &,
+  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder & {
+    top: -($input-text-floating-label-fontsize + $input-text-padding);
+  }
+
+  .mdlext-selectfield--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 Selectfield.
+  &::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;
+  }
+
+  .mdlext-selectfield.is-focused &::after {
+    left: 0;
+    visibility: visible;
+    width: 100%;
+  }
+
+  .mdlext-selectfield.is-invalid &::after {
+    background-color: $input-text-error-color;
+  }
+}
+
+// SelectField Error.
+.mdlext-selectfield__error {
+  color: $input-text-error-color;
+  font-size: $input-text-floating-label-fontsize;
+  position: absolute;
+  margin-top: 3px;
+  visibility: hidden;
+  display: block;
+
+  .mdlext-selectfield.is-invalid & {
+    visibility: visible;
+  }
+}
+
+// Expandable Holder.
+.mdlext-selectfield__expandable-holder {
+  display: inline-block;
+  position: relative;
+  margin-left: $input-text-button-size;
+
+  @include material-animation-default();
+
+  // 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;
+
+  .mdlext-selectfield.is-focused &,
+  .mdlext-selectfield.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;
+  }
+  .mdlext-selectfield__label::after {
+    bottom: 0;
+  }
+}
diff --git a/node_modules/mdl-ext/src/selectfield/readme.md b/node_modules/mdl-ext/src/selectfield/readme.md
new file mode 100644
index 0000000..891ea36
--- /dev/null
+++ b/node_modules/mdl-ext/src/selectfield/readme.md
@@ -0,0 +1,152 @@
+# Selectfield
+![Selectfield](../../etc/select-element.png)
+
+## Introduction
+The [HTML select](https://developer.mozilla.org/en/docs/Web/HTML/Element/select) (`<select>`) element represents 
+a control that presents a menu of options. The options within the menu are represented by `<option>` elements, 
+which can be grouped by `<optgroup>` elements. Options can be pre-selected for the user.
+
+The Material Design Lite Ext (MDLEXT) **select field** component is an enhanced version of the standard 
+[HTML `<select>`] (https://developer.mozilla.org/en/docs/Web/HTML/Element/select) element.
+A select field consists of a horizontal line indicating where keyboard input can occur and, typically, text that clearly communicates 
+the intended contents of the select field. An icon (at the right hand side) indicates that the select field has user selectable options. 
+
+This component relates to the guidelines given in [Materials Design spesifications page, Text Fields](http://www.google.com/design/spec/components/text-fields.html). 
+
+### To include a MDLEXT **select field** component:
+
+&nbsp;1. Code a `<div>` element to hold the select field.
+```html
+<div>
+...
+</div>
+```
+
+&nbsp;2. Inside the div, code an `<select>` element with an `id` attribute of your choice.
+```html
+<div>
+  <select id="some-id">
+  </select>
+</div>
+```
+
+&nbsp;3. Inside the `<select>` element code a list of user selectable options.
+```html
+<div>
+  <select id="some-id">
+    <option value=""></option>
+    <option value="option1">option 1</option>
+    <option value="option2">option 2</option>
+    <option value="option3">option 3</option>
+  </select>
+</div>
+```
+
+&nbsp;4. Also inside the div, after the `<select>` element, code a `<label>` element with a `for` attribute 
+whose value matches the `select` element's `id` value, and a short string to be used as the field's placeholder text.
+```html
+<div>
+  <select id="some-id">
+  ...
+  </select>
+  <label for="some-id">Options</label>
+</div>
+```
+
+&nbsp;5. Add one or more MDLEXT classes, separated by spaces, to the select field container, 
+select element, label element, and error message using the `class` attribute.
+```html
+<div class="mdlext-selectfield mdlext-js-selectfield">
+  <select id="some-id" class="mdlext-selectfield__select">
+  ...
+  </select>
+  <label for="some-id" class="mdlext-selectfield__label">Options</label>
+  <span class="mdlext-selectfield__error">Someting is wrong</span>
+</div>
+```
+The select field component is ready for use.
+
+#### Examples
+
+Select field with a standard label.
+```html
+<div class="mdlext-selectfield mdlext-js-selectfield">
+  <select id="some-id" class="mdlext-selectfield__select">
+    <option value=""></option>
+    <option value="option1">option 1</option>
+    <option value="option2">option 2</option>
+    <option value="option3">option 3</option>
+  </select>
+  <label for="some-id" class="mdlext-selectfield__label">Options</label>
+</div>
+```
+
+Select field with a floating label.
+```html
+<div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+  <select id="some-id" class="mdlext-selectfield__select">
+    <option value=""></option>
+    <option value="option1">option 1</option>
+    <option value="option2">option 2</option>
+    <option value="option3">option 3</option>
+  </select>
+  <label for="some-id" class="mdlext-selectfield__label">Options</label>
+</div>
+```
+
+Select field with a standard label and error message.
+```html
+<div class="mdlext-selectfield mdlext-js-selectfield">
+  <select id="some-id" class="mdlext-selectfield__select">
+    <option value=""></option>
+    <option value="option1">option 1</option>
+    <option value="option2">option 2</option>
+    <option value="option3">option 3</option>
+  </select>
+  <label for="some-id" class="mdlext-selectfield__label">Options</label>
+  <span class="mdlext-selectfield__error">Something is wrong</span>
+</div>
+```
+
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the select field. 
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdlext-selectfield` | Defines container as an MDL component | Required on "outer" div element|
+| `mdlext-js-selectfield` | Assigns basic MDL behavior to input | Required on "outer" div element |
+| `mdlext-selectfield__select` | Defines element as selectfield select | Required on select element |
+| `mdlext-selectfield__label` | Defines element as selectfield label | Required on label element for select elements |
+| `mdlext-selectfield--floating-label` | Applies *floating label* effect | Optional; goes on "outer" div element |
+| `mdlext-selectfield__error` | Defines span as an MDL error message | Optional; goes on span element for MDL select element with *pattern*|
+| `is-invalid` | Defines the selectfield as invalid on initial load. | Optional on `mdlext-selectfield` element |
+<!--
+| `mdlext-selectfield--expandable` | Defines a div as an MDL expandable select field container | For expandable select fields, required on "outer" div element |
+| `mdl-button` | Defines label as an MDL icon button | For expandable select 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 select fields, required on "outer" div's label element |
+| `mdl-input__expandable-holder` | Defines a container as an MDL component | For expandable select fields, required on "inner" div element |
+-->
+
+>**Note I:** Disabled versions of each select field type are provided, and are invoked with the standard HTML boolean attribute `disabled`. `<select class="mdlext-selectfield__select" id="select-id" name="select-id" disabled>`
+>This attribute may be added or removed programmatically via scripting.
+
+>**Note II:** The select field can for some browser and OS combinations, e.g. 
+>FireFox and OSX, be off by 2 pixels compared to the input field. There is no 
+>way to fix this, as far as I know, without setting an explicit height on both field types. 
+>Since MDL does not set a specific height of the text field, it can not be done for the select 
+>field either. If alignment is required, the user must in his/hers design set a specific height 
+>both for textfields and selectfields.
+
+## How to use the component programmatically
+The tests provides examples on how to use the component [programmatically](https://github.com/leifoolsen/mdl-ext/blob/master/test/selectfield/selectfield.spec.js)
+
+### Credits 
+The Select component is based on the following sources:
+* [Material Design Lite selectfield component](https://github.com/mebibou/mdl-selectfield) 
+* [mdl-selectfield](https://github.com/MEYVN-digital/mdl-selectfield)
+* [Simple Material Design Login, with select field](http://codepen.io/michaelschofield/pen/qEzWaM)
+* [Material Design &lt;select&gt; element, css only](http://codepen.io/pudgereyem/pen/PqBxQx)
diff --git a/node_modules/mdl-ext/src/selectfield/selectfield.js b/node_modules/mdl-ext/src/selectfield/selectfield.js
new file mode 100644
index 0000000..459f0b8
--- /dev/null
+++ b/node_modules/mdl-ext/src/selectfield/selectfield.js
@@ -0,0 +1,277 @@
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/*
+ * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield
+ */
+
+import { randomString } from '../utils/string-utils';
+import {
+  IS_DIRTY,
+  IS_FOCUSED,
+  IS_DISABLED,
+  IS_INVALID,
+  IS_UPGRADED
+} from '../utils/constants';
+
+(function() {
+  'use strict';
+  const LABEL = 'mdlext-selectfield__label';
+  const INPUT = 'mdlext-selectfield__select';
+
+  /**
+   * Class constructor for Selectfield MDLEXT 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.
+   */
+  const MaterialExtSelectfield = function MaterialExtSelectfield(element) {
+    this.element_ = element;
+    this.init(); // Initialize instance.
+  };
+
+  window['MaterialExtSelectfield'] = MaterialExtSelectfield;
+
+  /**
+   * Handle focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  /*eslint no-unused-vars: 0*/
+  MaterialExtSelectfield.prototype.onFocus_ = function( /*event*/ ) {
+    this.element_.classList.add(IS_FOCUSED);
+  };
+
+  /**
+   * Handle lost focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  /*eslint no-unused-vars: 0*/
+  MaterialExtSelectfield.prototype.onBlur_ = function( /*event*/ ) {
+    this.element_.classList.remove(IS_FOCUSED);
+  };
+
+  /**
+   * Handle reset event from out side.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialExtSelectfield.prototype.onReset_ = function( /*event*/ ) {
+    this.updateClasses_();
+  };
+
+  /**
+   * Handle class updates.
+   *
+   * @private
+   */
+  MaterialExtSelectfield.prototype.updateClasses_ = function() {
+    this.checkDisabled();
+    this.checkValidity();
+    this.checkDirty();
+    this.checkFocus();
+  };
+
+  // Public methods.
+
+  /**
+   * Check the disabled state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkDisabled = function() {
+    if (this.select_.disabled) {
+      this.element_.classList.add(IS_DISABLED);
+    } else {
+      this.element_.classList.remove(IS_DISABLED);
+    }
+  };
+  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;
+
+
+  /**
+   * Check the focus state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkFocus = function() {
+    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus
+    /*eslint no-extra-boolean-cast: 0*/
+    if (Boolean(this.element_.querySelector(':focus'))) {
+      this.element_.classList.add(IS_FOCUSED);
+    } else {
+      this.element_.classList.remove(IS_FOCUSED);
+    }
+  };
+
+  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;
+
+
+  /**
+   * Check the validity state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkValidity = function() {
+
+    /* Don't think it makes any sense to check validity.
+       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0
+
+    if (this.select_.validity) {
+      if (this.select_.validity.valid) {
+        this.element_.classList.remove(this.CssClasses_.IS_INVALID);
+      } else {
+        this.element_.classList.add(this.CssClasses_.IS_INVALID);
+      }
+    }
+    */
+  };
+
+  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;
+
+  /**
+   * Check the dirty state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.checkDirty = function() {
+    if (this.select_.value && this.select_.value.length > 0) {
+      this.element_.classList.add(IS_DIRTY);
+    } else {
+      this.element_.classList.remove(IS_DIRTY);
+    }
+  };
+
+  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;
+
+  /**
+   * Disable select field.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.disable = function() {
+    this.select_.disabled = true;
+    this.updateClasses_();
+  };
+
+  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;
+
+  /**
+   * Enable select field.
+   *
+   * @public
+   */
+  MaterialExtSelectfield.prototype.enable = function() {
+    this.select_.disabled = false;
+    this.updateClasses_();
+  };
+
+  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;
+
+  /**
+   * Update select field value.
+   *
+   * @param {string} value The value to which to set the control (optional).
+   * @public
+   */
+  MaterialExtSelectfield.prototype.change = function(value) {
+    this.select_.value = value || '';
+    this.updateClasses_();
+  };
+  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;
+
+  /**
+   * Initialize element.
+   */
+  MaterialExtSelectfield.prototype.init = function() {
+    if (this.element_) {
+      this.label_ = this.element_.querySelector(`.${LABEL}`);
+      this.select_ = this.element_.querySelector(`.${INPUT}`);
+
+      if (this.select_) {
+        // Remove listeners, just in case ...
+        this.select_.removeEventListener('change', this.updateClasses_);
+        this.select_.removeEventListener('focus', this.onFocus_);
+        this.select_.removeEventListener('blur', this.onBlur_);
+        this.select_.removeEventListener('reset', this.onReset_);
+
+        this.select_.addEventListener('change', this.updateClasses_.bind(this));
+        this.select_.addEventListener('focus', this.onFocus_.bind(this));
+        this.select_.addEventListener('blur', this.onBlur_.bind(this));
+        this.select_.addEventListener('reset', this.onReset_.bind(this));
+
+        if(this.label_) {
+          let id;
+          if(!this.select_.hasAttribute('id')) {
+            id = `select-${randomString()}`;
+            this.select_.id = id;
+          }
+          else {
+            id = this.select_.id;
+          }
+
+          if(!this.label_.hasAttribute('for')) {
+            this.label_.setAttribute('for', id);
+          }
+        }
+
+        const invalid = this.element_.classList.contains(IS_INVALID);
+        this.updateClasses_();
+        this.element_.classList.add(IS_UPGRADED);
+
+        if (invalid) {
+          this.element_.classList.add(IS_INVALID);
+        }
+        if (this.select_.hasAttribute('autofocus')) {
+          this.element_.focus();
+          this.checkFocus();
+        }
+      }
+    }
+  };
+
+  /**
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to downgrade
+   *
+  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {
+    'use strict';
+    console.log('***** MaterialExtSelectfield.mdlDowngrade ');
+  };
+  */
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /*eslint no-undef: 0*/
+  componentHandler.register({
+    constructor: MaterialExtSelectfield,
+    classAsString: 'MaterialExtSelectfield',
+    cssClass: 'mdlext-js-selectfield',
+    widget: true
+  });
+})();
diff --git a/node_modules/mdl-ext/src/selectfield/snippets/selectfield.html b/node_modules/mdl-ext/src/selectfield/snippets/selectfield.html
new file mode 100644
index 0000000..d9bc5cd
--- /dev/null
+++ b/node_modules/mdl-ext/src/selectfield/snippets/selectfield.html
@@ -0,0 +1,113 @@
+<p>The<a href="https://developer.mozilla.org/en/docs/Web/HTML/Element/select" target="_blank">
+  HTML select</a> (&lt;select&gt;) element represents a control that presents a menu of options.
+  The options within the menu are represented by &lt;option&gt; elements, which can be grouped by
+  &lt;optgroup&gt; elements. Options can be pre-selected for the user.</p>
+
+<p>The Material Design Lite Ext (MDLEXT) <strong>select field</strong> component is an enhanced version of the standard
+  HTML &lt;select&gt; element. A select field consists of a horizontal line indicating where keyboard input
+  can occur and, typically, text that clearly communicates the intended contents of the select field.
+  An icon (at the right hand side) indicates that the select field has user selectable options.</p>
+
+<p><strong>Note: </strong>
+  The select field can for some browser and OS combinations, e.g. FireFox and OSX, be off by 2 pixels compared to the
+  input field. There is no way to fix this, as far as I know, without setting an explicit height on both field types.
+  Since MDL does not set a specific height of the text field, it can not be done for the select field either.
+  If alignment is required, the user must in his/hers design set a specific height both for textfields and selectfields.
+</p>
+
+<style scoped>
+  .selectelement-demo-container {
+  }
+  .selectelement-demo-container .mdl-cell {
+    padding: 0 4px 16px 0;
+  }
+  .selectelement-demo-container .mdl-cell p {
+    margin-bottom: 0;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+  }
+</style>
+
+<div class = "selectelement-demo-container">
+
+  <div class="mdl-grid mdl-grid--no-spacing">
+
+    <div class="mdl-cell mdl-cell--3-col">
+      <p>Selectfield component</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield">
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+          <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--3-col">
+      <p>Textfield component</p>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+        <input class="mdl-textfield__input" type="text">
+        <label class="mdl-textfield__label">... to check alignment</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--3-col">
+      <p>Selectfield component with floating label</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+        <select class="mdlext-selectfield__select">
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+          <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--3-col">
+      <p>Disabled selectfield component</p>
+      <div class="mdlext-selectfield mdlext-js-selectfield mdlext-selectfield--floating-label">
+        <select class="mdlext-selectfield__select" disabled>
+          <option value=""></option>
+          <option value="option1">option 1</option>
+          <option value="option2">option 2</option>
+          <option value="option3">option 3</option>
+          <option value="option4">option 4</option>
+          <option value="option5">option 5</option>
+          <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+        </select>
+        <label class="mdlext-selectfield__label">Profession</label>
+      </div>
+    </div>
+
+    <div class="mdl-cell mdl-cell--3-col">
+      <p>Unstyled select element</p>
+      <select style="width: 100%;">
+        <option value=""></option>
+        <option value="option1">option 1</option>
+        <option value="option2">option 2</option>
+        <option value="option3">option 3</option>
+        <option value="option4">option 4</option>
+        <option value="option5">option 5</option>
+        <option value="option6">option 5 abcdefghijklmnopqrstuvw0123456789</option>
+      </select>
+      <label>Profession</label>
+    </div>
+
+    <div class="mdl-cell mdl-cell--3-col">
+      <p>Unstyled input element</p>
+      <input type="text" style="width: 100%;">
+      <label>... to check alignment</label>
+    </div>
+
+  </div>
+</div>
diff --git a/node_modules/mdl-ext/src/sticky-header/_sticky-header.scss b/node_modules/mdl-ext/src/sticky-header/_sticky-header.scss
new file mode 100644
index 0000000..69a36f7
--- /dev/null
+++ b/node_modules/mdl-ext/src/sticky-header/_sticky-header.scss
@@ -0,0 +1,52 @@
+/**
+ * Copyright 2016 Leif Olsen. 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.
+ */
+
+// Use of this module requires the user to include variables from material-design-lite
+//@import "../../node_modules/material-design-lite/src/variables";
+//@import "../../node_modules/material-design-lite/src/mixins";
+@import "../variables";
+
+.mdlext-layout__sticky-header {
+  position: absolute;
+  overflow: visible;
+  background: $mdlext-sticky-header-background;
+  transition: 0.1s ease-in-out;
+
+  &.mdlext-is-scroll {
+    background: $mdlext-sticky-header-background-scroll;
+  }
+}
+
+*:not(.is-small-screen) .mdlext-layout__sticky-header {
+  .mdl-layout__drawer-button {
+    visibility: hidden;
+  }
+  .mdl-layout__header-row {
+    padding-left: $padding;
+  }
+}
+
+*:not(.mdl-layout--fixed-drawer).has-drawer .mdlext-layout__sticky-header,
+.is-small-screen.has-drawer .mdlext-layout__sticky-header {
+  display: flex;
+
+  .mdl-layout__drawer-button {
+    visibility: visible;
+  }
+  .mdl-layout__header-row {
+    padding-left: $padding + $layout-drawer-button-desktop-size;
+  }
+}
diff --git a/node_modules/mdl-ext/src/sticky-header/readme.md b/node_modules/mdl-ext/src/sticky-header/readme.md
new file mode 100644
index 0000000..e9b3107
--- /dev/null
+++ b/node_modules/mdl-ext/src/sticky-header/readme.md
@@ -0,0 +1,172 @@
+# Sticky Header
+
+![Sticky Header](../../etc/sticky-header.png)
+
+A sticky header can be used as a replacement for the Material Design Lite 
+[Fixed Header](https://github.com/google/material-design-lite/tree/master/src/layout#examples).
+
+## Introduction
+A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.
+
+The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and 
+bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.
+
+>**Note:** The Sticky Header does not collapse on smaller screens.
+
+### To include a MDLEXT **sticky-header** component:
+
+&nbsp;1. Code a `<div>` element. This is the "outer" div that holds the entire layout.
+```html
+<div>
+</div>
+```
+
+&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 mdl-layout--fixed-drawer mdl-layout--fixed-header">
+</div>
+```
+
+&nbsp;3. Inside the div, code a `<header>` element, as described in the Material Design Lite 
+[Component Guide](https://getmdl.io/components/index.html#layout-section/layout). Add MDL classes as indicated.
+```html
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <header class="mdl-layout__header mdlext-layout__sticky-header mdlext-js-sticky-header">
+    <div class="mdl-layout__header-row">
+  
+      <!-- Title -->
+      <span id="header-title" class="mdl-layout-title">Title goes here</span>
+  
+      <!-- Add spacer, to align navigation to the right -->
+      <div class="mdl-layout-spacer"></div>
+  
+      <label id="go-home" class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+        <a href="#">
+          <i class="material-icons">home</i>
+        </a>
+      </label>
+    </div>
+  </header>
+</div>
+```
+
+&nbsp;4. Code a drawer, and include the MDL class as indicated
+```html
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <header class="mdl-layout__header mdlext-layout__sticky-header mdlext-js-sticky-header">
+    <div class="mdl-layout__header-row">
+  
+      <!-- Title -->
+      <span id="header-title" class="mdl-layout-title">Title goes here</span>
+  
+      <!-- Add spacer, to align navigation to the right -->
+      <div class="mdl-layout-spacer"></div>
+  
+      <label id="go-home" class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+        <a href="#">
+          <i class="material-icons">home</i>
+        </a>
+      </label>
+    </div>
+  </header>
+
+  <aside class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Drawer title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">A manu item</a>
+    </nav>
+  </aside>
+</div>
+```
+
+&nbsp;4. Add a `<main>` element to hold the layout's primary content, and include the MDL class as indicated
+```html
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
+  <header class="mdl-layout__header mdlext-layout__sticky-header mdlext-js-sticky-header">
+    <div class="mdl-layout__header-row">
+  
+      <!-- Title -->
+      <span id="header-title" class="mdl-layout-title">Title goes here</span>
+  
+      <!-- Add spacer, to align navigation to the right -->
+      <div class="mdl-layout-spacer"></div>
+  
+      <label id="go-home" class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+        <a href="#">
+          <i class="material-icons">home</i>
+        </a>
+      </label>
+    </div>
+  </header>
+
+  <aside class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Drawer title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">A manu item</a>
+    </nav>
+  </aside>
+  
+  <main class="mdl-layout__content">
+    <p>Content</p>
+    <p>Goes</p>
+    <p>Here</p>
+  </main>  
+</div>
+```
+
+### Examples
+
+* [Sticky header, Fixed drawer](http://leifoolsen.github.io/mdl-ext/demo/sticky-header.html)
+* [Sticky header, Drawer](http://leifoolsen.github.io/mdl-ext/demo/sticky-header-ii.html)
+* [Sticky header, No Drawer](http://leifoolsen.github.io/mdl-ext/demo/sticky-header-iii.html)
+* [Sticky header, Waterfall, Fiexed Drawer](http://leifoolsen.github.io/mdl-ext/demo/sticky-header-iv.html)
+* [Sticky header, Waterfall, Drawer](http://leifoolsen.github.io/mdl-ext/demo/sticky-header-v.html)
+* [Sticky header, Waterfall, No Drawer](http://leifoolsen.github.io/mdl-ext/demo/sticky-header-vi.html)
+
+
+## Component configuration
+The component can be configured using a `data-config` attribute. The attribute value is a JSON string with the following properties.
+
+| Property             |    |    |
+|----------------------|----|----|
+| `visibleAtScrollEnd` | if `true`, the header vil show when page is scrolled to the bottom | default: `false` |
+
+
+The `data-config` attribute must be a valid JSON string. You can use single or double quotes for the JSON properties. 
+
+Example 1, single quotes in JSON config string:
+```html
+<header class="mdl-layout__header mdlext-layout__sticky-header mdlext-js-sticky-header" 
+  data-config="{ 'visibleAtScrollEnd': true }">
+  
+  <div class="mdl-layout__header-row">
+    <span id="header-title" class="mdl-layout-title">Title goes here</span>
+  </div>
+</header>
+```
+
+Example 2, double quotes in JSON config string:
+```html
+<header class="mdl-layout__header mdlext-layout__sticky-header mdlext-js-sticky-header" 
+  data-config='{ "visibleAtScrollEnd": true }'>
+  
+  <div class="mdl-layout__header-row">
+    <span id="header-title" class="mdl-layout-title">Title goes here</span>
+  </div>
+</header>
+```
+
+## Configuration options
+
+The MDLEXT CSS classes apply various predefined visual and behavioral enhancements to the lightbox.
+The table below lists the available classes and their effects.
+
+| MDLEXT class | Effect | Remarks |
+|--------------|--------|---------|
+| `mdlext-layout__sticky-header` | Defines a header as an MDLEXT header component | Required on `<header>` element |
+| `mdlext-js-sticky-header` | Assigns basic MDL behavior to header | Required on `<header>` element |
+
+
+## How to use the component programmatically
+The [tests](../../test/sticky-header/sticky-header.spec.js) provides example code on how to use the component programmatically.
+
diff --git a/node_modules/mdl-ext/src/sticky-header/sticky-header.js b/node_modules/mdl-ext/src/sticky-header/sticky-header.js
new file mode 100644
index 0000000..9ed2e13
--- /dev/null
+++ b/node_modules/mdl-ext/src/sticky-header/sticky-header.js
@@ -0,0 +1,251 @@
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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.
+ *
+ * This code is built with Google Material Design Lite,
+ * which is Licensed under the Apache License, Version 2.0
+ */
+
+/**
+ * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.
+ * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and
+ * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.
+ */
+
+import fullThrottle from '../utils/full-throttle';
+import { jsonStringToObject } from '../utils/json-utils';
+import {
+  IS_UPGRADED
+} from '../utils/constants';
+
+
+(function() {
+  'use strict';
+  const MDL_LAYOUT_CONTENT  = 'mdl-layout__content';
+  const IS_SCROLL_CLASS  = 'mdlext-is-scroll';
+
+
+  /**
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  const MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {
+    // Stores the element.
+    this.header_ = element;
+
+    // Heder listens to scroll events from content
+    this.content_ = null;
+    this.lastScrollTop_ = 0;
+
+    // Default config
+    this.config_ = {
+      visibleAtScrollEnd: false
+    };
+
+    this.mutationObserver_ = null;
+
+    this.drawing_ = false;
+
+    // Initialize instance.
+    this.init();
+  };
+
+  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;
+
+
+  /**
+   * Update header width
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.recalcWidth_ = function() {
+    this.header_.style.width = `${this.content_.clientWidth}px`;
+  };
+
+  const throttleResize = fullThrottle(self => self.recalcWidth_() );
+
+  /**
+   * Adjust header width when window resizes or oreientation changes
+   * @param event
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.resizeHandler_ = function( /* event */ ) {
+    throttleResize(this);
+  };
+
+
+  /**
+   * Update header position
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.reposition_ = function() {
+
+    const currentContentScrollTop = this.content_.scrollTop;
+    const scrollDiff = this.lastScrollTop_ - currentContentScrollTop;
+
+    if(currentContentScrollTop <= 0) {
+      // Scrolled to the top. Header sticks to the top
+      this.header_.style.top = '0';
+      this.header_.classList.remove(IS_SCROLL_CLASS);
+    }
+    else if(scrollDiff > 0) {
+
+      if(scrollDiff >= this.header_.offsetHeight) {
+
+        // Scrolled up. Header slides in
+        const headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);
+        if(headerTop != 0) {
+          this.header_.style.top = '0';
+          this.header_.classList.add(IS_SCROLL_CLASS);
+        }
+        this.lastScrollTop_ = currentContentScrollTop;
+      }
+      return;
+    }
+    else if(scrollDiff < 0) {
+      // Scrolled down
+      this.header_.classList.add(IS_SCROLL_CLASS);
+      let headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);
+
+      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {
+        // Bottom of content
+        if(headerTop != 0) {
+          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : `-${this.header_.offsetHeight}px`;
+        }
+      }
+      else {
+        headerTop += scrollDiff;
+        const offsetHeight = this.header_.offsetHeight;
+        this.header_.style.top = `${( Math.abs( headerTop ) > offsetHeight ? -offsetHeight : headerTop )}px`;
+      }
+    }
+
+    this.lastScrollTop_ = currentContentScrollTop;
+  };
+
+
+  const throttleScroll = fullThrottle((self) => self.reposition_());
+
+  /**
+   * Scroll header when content scrolls
+   * @param event
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.scrollHandler_ = function( /* event */ ) {
+    throttleScroll(this);
+  };
+
+  /**
+   * Init header position
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.updatePosition_ = function( /* event */ ) {
+    this.recalcWidth_();
+    this.reposition_();
+  };
+
+  /**
+   * Add mutation observer
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.addMutationObserver_ = function() {
+
+    // jsdom does not support MutationObserver - so this is not testable
+    /* istanbul ignore next */
+    this.mutationObserver_ = new MutationObserver( ( /*mutations*/ ) => {
+      // Adjust header width if content changes (e.g. in a SPA)
+      this.updatePosition_();
+    });
+
+    this.mutationObserver_.observe( this.content_, {
+      attributes: false,
+      childList: true,
+      characterData: false,
+      subtree: true
+    });
+  };
+
+    /**
+   * Removes event listeners
+   * @private
+   */
+  MaterialExtStickyHeader.prototype.removeListeners_ = function() {
+
+    window.removeEventListener('resize', this.resizeHandler_);
+    window.removeEventListener('orientationchange', this.resizeHandler_);
+
+    if(this.content_) {
+      this.content_.removeEventListener('scroll', this.scrollHandler_);
+    }
+
+    if(this.mutationObserver_) {
+      this.mutationObserver_.disconnect();
+      this.mutationObserver_ = null;
+    }
+  };
+
+  /**
+   * Initialize component
+   */
+  MaterialExtStickyHeader.prototype.init = function() {
+
+    if (this.header_) {
+
+      this.removeListeners_();
+
+      if(this.header_.hasAttribute('data-config')) {
+        this.config_ = jsonStringToObject(this.header_.getAttribute('data-config'));
+      }
+
+      this.content_ = this.header_.parentNode.querySelector(`.${MDL_LAYOUT_CONTENT}`) || null;
+
+      if(this.content_) {
+        this.content_.style.paddingTop = `${this.header_.offsetHeight}px`;  // Make room for sticky header
+        this.lastScrollTop_ = this.content_.scrollTop;
+
+        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));
+        window.addEventListener('resize', this.resizeHandler_.bind(this));
+        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));
+
+        this.addMutationObserver_();
+        this.updatePosition_();
+
+        // Set upgraded flag
+        this.header_.classList.add(IS_UPGRADED);
+      }
+    }
+  };
+
+  /*
+   * Downgrade component
+   * E.g remove listeners and clean up resources
+   *
+   * Nothing to clean
+   *
+   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {
+     'use strict';
+     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');
+   };
+   */
+
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  /* eslint no-undef: 0 */
+  componentHandler.register({
+    constructor: MaterialExtStickyHeader,
+    classAsString: 'MaterialExtStickyHeader',
+    cssClass: 'mdlext-js-sticky-header'
+  });
+})();
diff --git a/node_modules/mdl-ext/src/utils/constants.js b/node_modules/mdl-ext/src/utils/constants.js
new file mode 100644
index 0000000..9e63ea7
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/constants.js
@@ -0,0 +1,62 @@
+'use strict';
+
+const VK_TAB         = 9;
+const VK_ENTER       = 13;
+const VK_ESC         = 27;
+const VK_SPACE       = 32;
+const VK_PAGE_UP     = 33;
+const VK_PAGE_DOWN   = 34;
+const VK_END         = 35;
+const VK_HOME        = 36;
+const VK_ARROW_LEFT  = 37;
+const VK_ARROW_UP    = 38;
+const VK_ARROW_RIGHT = 39;
+const VK_ARROW_DOWN  = 40;
+
+const ARIA_EXPANDED        = 'aria-expanded';
+const ARIA_HIDDEN          = 'aria-hidden';
+const ARIA_MULTISELECTABLE = 'aria-multiselectable';
+const ARIA_SELECTED        = 'aria-selected';
+
+const IS_DIRTY      = 'is-dirty';
+const IS_DISABLED   = 'is-disabled';
+const IS_EXPANDED   = 'is-expanded';
+const IS_FOCUSED    = 'is-focused';
+const IS_INVALID    = 'is-invalid';
+const IS_UPGRADED   = 'is-upgraded';
+const DATA_UPGRADED = 'data-upgraded';
+
+const MDL_RIPPLE                      = 'mdl-ripple';
+const MDL_RIPPLE_COMPONENT            = 'MaterialRipple';
+const MDL_RIPPLE_EFFECT               = 'mdl-js-ripple-effect';
+const MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';
+
+export {
+  VK_TAB,
+  VK_ENTER,
+  VK_ESC,
+  VK_SPACE,
+  VK_PAGE_UP,
+  VK_PAGE_DOWN ,
+  VK_END,
+  VK_HOME,
+  VK_ARROW_LEFT,
+  VK_ARROW_UP,
+  VK_ARROW_RIGHT,
+  VK_ARROW_DOWN ,
+  ARIA_EXPANDED,
+  ARIA_HIDDEN,
+  ARIA_MULTISELECTABLE,
+  ARIA_SELECTED,
+  IS_DIRTY,
+  IS_DISABLED,
+  IS_EXPANDED,
+  IS_FOCUSED,
+  IS_INVALID,
+  IS_UPGRADED,
+  DATA_UPGRADED ,
+  MDL_RIPPLE,
+  MDL_RIPPLE_COMPONENT,
+  MDL_RIPPLE_EFFECT,
+  MDL_RIPPLE_EFFECT_IGNORE_EVENTS
+};
diff --git a/node_modules/mdl-ext/src/utils/debounce-function.js b/node_modules/mdl-ext/src/utils/debounce-function.js
new file mode 100644
index 0000000..68ce449
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/debounce-function.js
@@ -0,0 +1,66 @@
+/**
+ * Debouncing enforces that a function not be called again until a certain
+ * amount of time has passed without it being called.
+ *
+ * @see https://css-tricks.com/the-difference-between-throttling-and-debouncing/
+ * @see https://github.com/webmodules/raf-debounce
+ * @see https://github.com/moszeed/es6-promise-debounce
+ * @see https://gist.github.com/philbirnie/893950093611d5c1dff4246a572cfbeb/
+ * @see https://github.com/SliceMeNice-ES6/event-utils/blob/master/debounce.js
+ * @see https://github.com/jeromedecoster/raf-funcs
+ * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
+ * @see http://davidwalsh.name/javascript-debounce-function
+ *
+ * @param callback the callback
+ * @param threshold optional delay, default to 250 ms, min to 1000/60ms ms
+ * @param context  optional context of this, default to global
+ * @return {Function} reference to immediate and cancel
+ */
+const MIN_THRESHOLD = 1000/60;
+
+const debounceFunction = function(callback, threshold=250, context) {
+
+  if(threshold < MIN_THRESHOLD) {
+    threshold = MIN_THRESHOLD;
+  }
+
+  if (!context) {
+    context = this || window;
+  }
+
+  let next = null;
+  let start = 0;
+
+  return function (...args) {
+
+    const cancel = () => {
+      if(next) {
+        window.cancelAnimationFrame(next);
+        next = null;
+      }
+    };
+
+    const execute = () => {
+      cancel();
+      return Reflect.apply(callback, context, args);
+    };
+
+    const later = () => {
+      if (threshold - (Date.now() - start) <= 0) {
+        return execute();
+      }
+      next = window.requestAnimationFrame(later);
+    };
+
+    cancel();
+    start = Date.now();
+    next = window.requestAnimationFrame(later);
+
+    return {
+      cancel: () => cancel(),
+      immediate: () => execute()
+    };
+  };
+};
+
+export default debounceFunction;
diff --git a/node_modules/mdl-ext/src/utils/dom-utils.js b/node_modules/mdl-ext/src/utils/dom-utils.js
new file mode 100644
index 0000000..5aa2658
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/dom-utils.js
@@ -0,0 +1,418 @@
+/**
+ * Remove child element(s)
+ * element.innerHTNL = '' has a performance penality!
+ * @see http://jsperf.com/empty-an-element/16
+ * @see http://jsperf.com/force-reflow
+ * @param element
+ * @param forceReflow
+ */
+const removeChildElements = (element, forceReflow = true) => {
+
+  // See: http://jsperf.com/empty-an-element/16
+  while (element.lastChild) {
+    element.removeChild(element.lastChild);
+  }
+  if(forceReflow) {
+    // See: http://jsperf.com/force-reflow
+    const d = element.style.display;
+
+    element.style.display = 'none';
+    element.style.display = d;
+  }
+};
+
+/**
+ * Moves child elements from a DOM node to another dom node.
+ * @param source {HTMLElement}
+ * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created
+ * @return {HTMLElement} The target node
+ *
+ * @example
+ * // Moves child elements from a DOM node to another dom node.
+ * moveElements(source, destination);
+ *
+ * @example
+ * // If the second parameter is ommited, a document fragment is created:
+ * let fragment = moveElements(source);
+ *
+ * @See: https://github.com/webmodules/dom-move
+ */
+const moveElements = (source, target) => {
+  if (!target) {
+    target = source.ownerDocument.createDocumentFragment();
+  }
+  while (source.firstChild) {
+    target.appendChild(source.firstChild);
+  }
+  return target;
+};
+
+
+/**
+ * Get the browser viewport dimensions
+ * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript
+ * @return {{windowWidth: number, windowHeight: number}}
+ */
+const getWindowViewport = () => {
+  return {
+    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),
+    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)
+  };
+};
+
+
+/**
+ * Check whether an element is in the window viewport
+ * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/
+ * @param top
+ * @param left
+ * @param bottom
+ * @param right
+ * @return {boolean} true if rectangle is inside window viewport, otherwise false
+ */
+const isRectInsideWindowViewport = ({ top, left, bottom, right }) => {
+  const { viewportWidth, viewportHeight } = getWindowViewport();
+  return top >= 0 &&
+    left >= 0 &&
+    bottom <= viewportHeight &&
+    right <= viewportWidth;
+};
+
+
+/**
+ * Get a list of parent elements that can possibly scroll
+ * @param el the element to get parents for
+ * @returns {Array}
+ */
+const getScrollParents = el => {
+  const elements = [];
+
+  /*
+  for (el = el.parentNode; el; el = el.parentNode) {
+    const cs = window.getComputedStyle(el);
+    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {
+      elements.unshift(el);
+    }
+    if(el === document.body) {
+      break;
+    }
+  }
+  */
+
+  let element = el.parentNode;
+  while (element) {
+    const cs = window.getComputedStyle(element);
+    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {
+      elements.unshift(element);
+    }
+    if(element === document.body) {
+      break;
+    }
+    element = element.parentNode;
+  }
+
+  return elements;
+};
+
+/**
+ * Get a list of parent elements, from a given element to a given element
+ * @param {HTMLElement} from
+ * @param {HTMLElement} to
+ * @return {Array<HTMLElement>} the parent elements, not including from and to
+ */
+const getParentElements = (from, to) => {
+  const result = [];
+  let element = from.parentNode;
+  while (element) {
+    if(element === to) {
+      break;
+    }
+    result.unshift(element);
+    element = element.parentNode;
+  }
+  return result;
+};
+
+/**
+ * Position element next to button
+ *
+ * Positioning strategy
+ *  1. element.height > viewport.height
+ *     let element.height = viewport.heigt
+ *     let element.overflow-y = auto
+ *  2. element.width > viewport.width
+ *     let element.width = viewport.width
+ *  3. position element below button, align left edge of element with button left
+ *       done if element inside viewport
+ *  4. position element below button, align right edge of element with button right
+ *       done if element inside viewport
+ *  5. positions element above button, aligns left edge of element with button left
+ *       done if element inside viewport
+ *  6. position element above the control element, aligned to its right.
+ *       done if element inside viewport
+ *  7. position element at button right hand side, aligns element top with button top
+ *       done if element inside viewport
+ *  8. position element at button left hand side, aligns element top with button top
+ *       done if element inside viewport
+ *  9. position element inside viewport
+ *     1. position element at viewport bottom
+ *     2. position element at button right hand side
+ *        done if element inside viewport
+ *     3. position element at button left hand side
+ *       done if element inside viewport
+ *     4. position element at viewport right
+ * 10. done
+ *
+ */
+const tether = (controlledBy, element) => {
+  const controlRect = controlledBy.getBoundingClientRect();
+
+  // 1. will element height fit inside window viewport?
+  const { viewportWidth, viewportHeight } = getWindowViewport();
+
+  element.style.height = 'auto';
+  //element.style.overflowY = 'hidden';
+  if(element.offsetHeight > viewportHeight) {
+    element.style.height = `${viewportHeight}px`;
+    element.style.overflowY = 'auto';
+  }
+
+  // 2. will element width fit inside window viewport?
+  element.style.width = 'auto';
+  if(element.offsetWidth > viewportWidth) {
+    element.style.width = `${viewportWidth}px`;
+  }
+
+  const elementRect = element.getBoundingClientRect();
+
+  // element to control distance
+  const dy = controlRect.top - elementRect.top;
+  const dx = controlRect.left - elementRect.left;
+
+  // element rect, window coordinates relative to top,left of control
+  const top = elementRect.top + dy;
+  const left = elementRect.left + dx;
+  const bottom = top + elementRect.height;
+  const right = left + elementRect.width;
+
+  // Position relative to control
+  let ddy = dy;
+  let ddx = dx;
+
+  if(isRectInsideWindowViewport({
+    top: top + controlRect.height,
+    left: left,
+    bottom: bottom + controlRect.height,
+    right: right
+  })) {
+    // 3 position element below the control element, aligned to its left
+    ddy = controlRect.height + dy;
+    //console.log('***** 3');
+  }
+  else if(isRectInsideWindowViewport({
+    top: top + controlRect.height,
+    left: left + controlRect.width - elementRect.width,
+    bottom: bottom + controlRect.height,
+    right: left + controlRect.width
+  })) {
+    // 4 position element below the control element, aligned to its right
+    ddy = controlRect.height + dy;
+    ddx = dx + controlRect.width - elementRect.width;
+    //console.log('***** 4');
+  }
+  else if(isRectInsideWindowViewport({
+    top: top - elementRect.height,
+    left: left,
+    bottom: bottom - elementRect.height,
+    right: right
+  })) {
+    // 5. position element above the control element, aligned to its left.
+    ddy = dy - elementRect.height;
+    //console.log('***** 5');
+  }
+  else if(isRectInsideWindowViewport({
+    top: top - elementRect.height,
+    left: left + controlRect.width - elementRect.width,
+    bottom: bottom - elementRect.height,
+    right: left + controlRect.width
+  })) {
+    // 6. position element above the control element, aligned to its right.
+    ddy = dy - elementRect.height;
+    ddx = dx + controlRect.width - elementRect.width;
+    //console.log('***** 6');
+  }
+  else if(isRectInsideWindowViewport({
+    top: top,
+    left: left + controlRect.width,
+    bottom: bottom,
+    right: right + controlRect.width
+  })) {
+    // 7. position element at button right hand side
+    ddx = controlRect.width + dx;
+    //console.log('***** 7');
+  }
+  else if(isRectInsideWindowViewport({
+    top: top,
+    left: left - controlRect.width,
+    bottom: bottom,
+    right: right - controlRect.width
+  })) {
+    // 8. position element at button left hand side
+    ddx = dx - elementRect.width;
+    //console.log('***** 8');
+  }
+  else {
+    // 9. position element inside viewport, near controlrect if possible
+    //console.log('***** 9');
+
+    // 9.1 position element near controlrect bottom
+    ddy =  dy - bottom + viewportHeight;
+    if(top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {
+      ddy = controlRect.height + dy;
+    }
+    else if(top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {
+      ddy = dy - elementRect.height;
+    }
+
+    if(left + elementRect.width + controlRect.width <= viewportWidth) {
+      // 9.2 Position element at button right hand side
+      ddx = controlRect.width + dx;
+      //console.log('***** 9.2');
+    }
+    else if(left - elementRect.width >= 0) {
+      // 9.3 Position element at button left hand side
+      ddx = dx - elementRect.width;
+      //console.log('***** 9.3');
+    }
+    else {
+      // 9.4 position element at (near) viewport right
+      const r = left + elementRect.width - viewportWidth;
+      ddx = dx - r;
+      //console.log('***** 9.4');
+    }
+  }
+
+  // 10. done
+  element.style.top = `${element.offsetTop + ddy}px`;
+  element.style.left = `${element.offsetLeft + ddx}px`;
+  //console.log('***** 10. done');
+};
+
+/**
+ * Check if the given element can receive focus
+ * @param {HTMLElement} element the element to check
+ * @return {boolean} true if the element is focusable, otherwise false
+ */
+const isFocusable = (element) => {
+  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js
+  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus
+
+  if (element.hasAttribute('tabindex')) {
+    const tabindex = element.getAttribute('tabindex');
+    if (!Number.isNaN(tabindex)) {
+      return parseInt(tabindex) > -1;
+    }
+  }
+
+  if (element.hasAttribute('contenteditable') &&
+    element.getAttribute('contenteditable') !== 'false') {
+    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable
+    return true;
+  }
+
+  // natively focusable, but only when enabled
+  const selector = /input|select|textarea|button|details/i;
+  const name = element.nodeName;
+  if (selector.test(name)) {
+    return element.type.toLowerCase() !== 'hidden' && !element.disabled;
+  }
+
+  // anchors and area must have an href
+  if (name === 'A' || name === 'AREA') {
+    return !!element.href;
+  }
+
+  if (name === 'IFRAME') {
+    // Check visible iframe
+    const cs = window.getComputedStyle(element);
+    return cs.getPropertyValue('display').toLowerCase() !== 'none';
+  }
+
+  return false;
+};
+
+
+/**
+ * Get a list of offset parents for given element
+ * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript
+ * @param el the element
+ * @return {Array} a list of offset parents
+ */
+/*
+const offsetParents = (el) => {
+  const elements = [];
+  for (; el; el = el.offsetParent) {
+    elements.unshift(el);
+  }
+  if(!elements.find(e => e === document.body)) {
+    elements.unshift(document.body);
+  }
+  return elements;
+};
+*/
+
+/**
+ * Finds the common offset ancestor of two DOM nodes
+ * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript
+ * @see https://gist.github.com/benpickles/4059636
+ * @param a
+ * @param b
+ * @return {Element} The common offset ancestor of a and b
+ */
+/*
+const commonOffsetAncestor = (a, b) => {
+  const parentsA = offsetParents(a);
+  const parentsB = offsetParents(b);
+
+  for (let i = 0; i < parentsA.length; i++) {
+    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];
+  }
+};
+*/
+
+/**
+ * Calculate position relative to a target element
+ * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively
+ * @param target
+ * @param el
+ * @return {{top: number, left: number}}
+ */
+/*
+const calcPositionRelativeToTarget = (target, el) => {
+  let top = 0;
+  let left = 0;
+
+  while(el) {
+    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;
+    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;
+    el = el.offsetParent;
+
+    if(el === target) {
+      break;
+    }
+  }
+  return { top: top, left: left };
+};
+*/
+
+export {
+  getWindowViewport,
+  getParentElements,
+  getScrollParents,
+  isFocusable,
+  isRectInsideWindowViewport,
+  moveElements,
+  removeChildElements,
+  tether,
+};
+
diff --git a/node_modules/mdl-ext/src/utils/easing.js b/node_modules/mdl-ext/src/utils/easing.js
new file mode 100644
index 0000000..fea208f
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/easing.js
@@ -0,0 +1,18 @@
+'use strict';
+
+// See: http://robertpenner.com/easing/
+
+const easeInOutQuad = (t, b, c, d) => {
+  t /= d / 2;
+  if(t < 1) return c / 2 * t * t + b;
+  t--;
+  return -c / 2 * (t * (t - 2) - 1) + b;
+};
+
+const inOutQuintic = (t, b, c, d) => {
+  const ts = (t/=d)*t;
+  const tc = ts*t;
+  return b+c*(6*tc*ts + -15*ts*ts + 10*tc);
+};
+
+export { easeInOutQuad, inOutQuintic };
diff --git a/node_modules/mdl-ext/src/utils/full-throttle.js b/node_modules/mdl-ext/src/utils/full-throttle.js
new file mode 100644
index 0000000..7cac3d7
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/full-throttle.js
@@ -0,0 +1,35 @@
+/**
+ * Since some events can fire at a high rate, the event handler should be limited to execute computationally
+ * expensive operations, such as DOM modifications, inside a single rendered frame.
+ * When listening to e.g. scroll and resize events, the browser tends to fire off more events per
+ * second than are actually useful. For instance, if your event listener sets some element positions, then it
+ * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of
+ * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that
+ * it runs immediately prior to the browser rendering the updated layout to the screen.
+ * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page
+ * is rendered to the screen.
+ * *
+ * @param callback the function to throttle
+ * @param context  optional context of this, default to global
+ * @return {function(...[*])}
+ */
+const fullThrottle = (callback, context) => {
+
+  if (!context) {
+    context = this || window;
+  }
+
+  let throttling = false;
+
+  return (...args) => {
+    if(!throttling) {
+      throttling = true;
+      window.requestAnimationFrame( () => {
+        throttling = false;
+        return Reflect.apply(callback, context, args);
+      });
+    }
+  };
+};
+
+export default fullThrottle;
diff --git a/node_modules/mdl-ext/src/utils/index.js b/node_modules/mdl-ext/src/utils/index.js
new file mode 100644
index 0000000..c04972d
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/index.js
@@ -0,0 +1,7 @@
+import './constants';
+import './dom-utils';
+import './string-utils';
+import './json-utils';
+import './full-throttle';
+import './easing';
+import './interval-function';
diff --git a/node_modules/mdl-ext/src/utils/interval-function.js b/node_modules/mdl-ext/src/utils/interval-function.js
new file mode 100644
index 0000000..4c344e3
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/interval-function.js
@@ -0,0 +1,83 @@
+const MIN_INERVAL = 1000/60;
+
+/**
+ * Trigger a callback at a given interval
+ * @param interval defaults to 1000/60 ms
+ * @return {function()} reference to start, stop, immediate and started
+ */
+
+const intervalFunction = ( interval = MIN_INERVAL ) => {
+
+  let lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;
+  let cb = undefined;
+  let next = null;
+  let timeElapsed = 0;
+
+  const execute = () => {
+    const f = cb(timeElapsed);
+    if (!f) {
+      cancel();
+    }
+  };
+
+  const cancel = () => {
+    if(next) {
+      window.cancelAnimationFrame(next);
+    }
+    next = null;
+    timeElapsed = 0;
+  };
+
+  const start = () => {
+    let timeStart = Date.now();
+
+    const loop = now => {
+      if (next) {
+        next = window.requestAnimationFrame( () => loop( Date.now() ));
+
+        timeElapsed += now - timeStart;
+
+        if(timeElapsed >= lapse) {
+          execute();
+          if( (timeElapsed -= lapse) > lapse) {
+            // time elapsed - interval_ > interval_ , indicates inactivity
+            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on
+            timeElapsed = 0;
+          }
+        }
+        timeStart = now;
+      }
+    };
+
+    next = 1;  // a truthy value for first loop
+    loop( timeStart );
+  };
+
+  return {
+    get started() {
+      return next != null;
+    },
+    get interval() {
+      return lapse;
+    },
+    set interval(value) {
+      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;
+    },
+    start(callback) {
+      if(typeof callback !== 'function') {
+        throw new TypeError('callback parameter must be a function');
+      }
+      cb = callback;
+      start();
+    },
+    immediate() {
+      if(!cb) {
+        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');
+      }
+      execute();
+    },
+    stop: () => cancel(),
+  };
+};
+
+export default intervalFunction;
diff --git a/node_modules/mdl-ext/src/utils/json-utils.js b/node_modules/mdl-ext/src/utils/json-utils.js
new file mode 100644
index 0000000..c6f6c77
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/json-utils.js
@@ -0,0 +1,18 @@
+'use strict';
+
+/**
+ * Converts a JSON string to object
+ * @param jsonString
+ * @param source
+ */
+const jsonStringToObject = (jsonString, source = {} ) => {
+  const s = jsonString.replace(/'/g, '"');
+  try {
+    return Object.assign(source, JSON.parse(s));
+  }
+  catch (e) {
+    throw new Error(`Failed to parse json string: ${s}. Error: ${e.message}`);
+  }
+};
+
+export { jsonStringToObject };
diff --git a/node_modules/mdl-ext/src/utils/resize-observer.js b/node_modules/mdl-ext/src/utils/resize-observer.js
new file mode 100644
index 0000000..b69e2f2
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/resize-observer.js
@@ -0,0 +1,294 @@
+
+/**
+ * An API for observing changes to Element’s size.
+ *
+ * @See https://wicg.github.io/ResizeObserver/
+ * @ee https://github.com/pelotoncycle/resize-observer
+ *
+ */
+
+import intervalFunction from './interval-function';
+
+((window, document) => {
+  'use strict';
+
+  if (typeof window.ResizeObserver !== 'undefined') {
+    return;
+  }
+
+  document.resizeObservers = [];
+
+  /**
+   * The content rect is defined in section 2.3 ResizeObserverEntry of the spec
+   * @param target the element to calculate the content rect for
+   * @return {{top: (Number|number), left: (Number|number), width: number, height: number}}
+   *
+   * Note:
+   * Avoid using margins on the observed element. The calculation can return incorrect values when margins are involved.
+   *
+   * The following CSS will report incorrect width (Chrome OSX):
+   *
+   * <div id="outer" style="width: 300px; height:300px; background-color: green;overflow:auto;">
+   *   <div id="observed" style="width: 400px; height:400px; background-color: yellow; margin:30px; border: 20px solid red; padding:10px;">
+   *   </div>
+   * </div>
+   *
+   * The calculated width is 280. The actual (correct) width is 340 since Chrome clips the margin.
+   *
+   * Use an outer container if you really need a "margin":
+   *
+   * <div id="outer" style="width: 300px; height:300px; background-color: green;overflow:auto; padding:30px;">
+   *   <div id="observed" style="width: 400px; height:400px; background-color: yellow; margin: 0; border: 20px solid red; padding:10px;">
+   *   </div>
+   * </div>
+   *
+   * A more detailed explanation can be fund here:
+   * http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively
+   */
+  const getContentRect = target => {
+    const cs = window.getComputedStyle(target);
+    const r = target.getBoundingClientRect();
+    const top = parseFloat(cs.paddingTop) || 0;
+    const left = parseFloat(cs.paddingLeft) || 0;
+    const width = r.width  - (
+        (parseFloat(cs.marginLeft) || 0) +
+        (parseFloat(cs.marginRight) || 0) +
+        (parseFloat(cs.borderLeftWidth) || 0) +
+        (parseFloat(cs.borderRightWidth) || 0) +
+        (left) +
+        (parseFloat(cs.paddingRight) || 0)
+      );
+    const height = r.height  - (
+        (parseFloat(cs.marginTop) || 0) +
+        (parseFloat(cs.marginBottom) || 0) +
+        (parseFloat(cs.borderTopWidth) || 0) +
+        (parseFloat(cs.borderBottomWidth) || 0) +
+        (top) +
+        (parseFloat(cs.paddingBottom) || 0)
+      );
+    return {width: width, height: height, top: top, left: left};
+  };
+
+  const dimensionHasChanged = (target, lastWidth, lastHeight) => {
+    const {width, height} = getContentRect(target);
+    return width !== lastWidth || height !== lastHeight;
+  };
+
+
+  /**
+   * ResizeObservation holds observation information for a single Element.
+   * @param target
+   * @return {{target: *, broadcastWidth, broadcastHeight, isOrphan: (function()), isActive: (function())}}
+   * @constructor
+   */
+  const ResizeObservation = target => {
+    const {width, height} = getContentRect(target);
+
+    return {
+      target: target,
+      broadcastWidth: width,
+      broadcastHeight: height,
+
+      isOrphan() {
+        return !this.target || !this.target.parentNode;
+      },
+      isActive() {
+        return dimensionHasChanged(this.target, this.broadcastWidth, this.broadcastHeight);
+      }
+    };
+  };
+
+  /**
+   * A snapshot of the observed element
+   * @param target
+   * @param rect
+   * @return {{target: *, contentRect: *}}
+   * @constructor
+   */
+  const ResizeObserverEntry = (target, rect) => {
+    return {
+      target: target,
+      contentRect: rect
+    };
+  };
+
+
+  /**
+   * The ResizeObserver is used to observe changes to Element's content rect.
+   */
+  class ResizeObserver {
+
+    /**
+     * Constructor for instantiating new Resize observers.
+     * @param callback void (sequence<ResizeObserverEntry> entries). The function which will be called on each resize.
+     * @throws {TypeError}
+     */
+    constructor( callback ) {
+
+      if(typeof callback !== 'function') {
+        throw new TypeError('callback parameter must be a function');
+      }
+
+      this.callback_ = callback;
+      this.observationTargets_ = [];
+      this.activeTargets_ = [];
+
+      document.resizeObservers.push(this);
+    }
+
+    /**
+     * A list of ResizeObservations. It represents all Elements being observed.
+     *
+     * @return {Array}
+     */
+    get observationTargets() {
+      return this.observationTargets_;
+    }
+
+    /**
+     *  A list of ResizeObservations. It represents all Elements whose size has
+     *  changed since last observation broadcast that are eligible for broadcast.
+     *
+     * @return {Array}
+     */
+    get activeTargets() {
+      return this.activeTargets_;
+    }
+
+    /**
+     * Adds target to the list of observed elements.
+     * @param {HTMLElement} target The target to observe
+     */
+    observe(target) {
+      if(target) {
+        if (!(target instanceof HTMLElement)) {
+          throw new TypeError('target parameter must be an HTMLElement');
+        }
+        if (!this.observationTargets_.find(t => t.target === target)) {
+          this.observationTargets_.push(ResizeObservation(target));
+          resizeController.start();
+        }
+      }
+    }
+
+    /**
+     * Removes target from the list of observed elements.
+     * @param target The target to remove
+     */
+    unobserve(target) {
+      const i = this.observationTargets_.findIndex(t => t.target === target);
+      if(i > -1) {
+        this.observationTargets_.splice(i, 1);
+      }
+    }
+
+    /**
+     * Stops the ResizeObserver instance from receiving notifications of resize changes.
+     * Until the observe() method is used again, observer's callback will not be invoked.
+     */
+    disconnect() {
+      this.observationTargets_ = [];
+      this.activeTargets_ = [];
+    }
+
+    /**
+     * Removes the ResizeObserver from the list of observers
+     */
+    destroy() {
+      this.disconnect();
+      const i = document.resizeObservers.findIndex(o => o === this);
+      if(i > -1) {
+        document.resizeObservers.splice(i, 1);
+      }
+    }
+
+    deleteOrphansAndPopulateActiveTargets_() {
+
+      // Works, but two iterations
+      //this.observationTargets_ = this.observationTargets_.filter( resizeObervation => !resizeObervation.isOrphan());
+      //this.activeTargets_ = this.observationTargets_.filter( resizeObervation => resizeObervation.isActive());
+
+      // Same result as above, one iteration
+      /*
+      this.activeTargets_ = [];
+      let n = this.observationTargets_.length-1;
+      while(n >= 0) {
+        if(this.observationTargets_[n].isOrphan()) {
+          this.observationTargets_.splice(n, 1);
+        }
+        else if(this.observationTargets_[n].isActive()) {
+          this.activeTargets_.push(this.observationTargets_[n]);
+        }
+        n -= 1;
+      }
+      */
+
+      // Same result as above - but reduce is cooler :-)
+      this.activeTargets_ = this.observationTargets_.reduceRight( (prev, resizeObservation, index, arr) => {
+        if(resizeObservation.isOrphan()) {
+          arr.splice(index, 1);
+        }
+        else if(resizeObservation.isActive()) {
+          prev.push(resizeObservation);
+        }
+        return prev;
+      }, []);
+    }
+
+    broadcast_() {
+      this.deleteOrphansAndPopulateActiveTargets_();
+      if (this.activeTargets_.length > 0) {
+        const entries = [];
+        for (const resizeObservation of this.activeTargets_) {
+          const rect = getContentRect(resizeObservation.target);
+          resizeObservation.broadcastWidth = rect.width;
+          resizeObservation.broadcastHeight = rect.height;
+          entries.push(ResizeObserverEntry(resizeObservation.target, rect));
+        }
+        this.callback_(entries);
+        this.activeTargets_ = [];
+      }
+    }
+  }
+
+
+  //let interval = require('./interval-function');
+
+  /**
+   * Broadcasts Element.resize events
+   * @return {{start: (function()), stop: (function())}}
+   * @constructor
+   */
+  const ResizeController = () => {
+
+    const shouldStop = () => {
+      return document.resizeObservers.findIndex( resizeObserver => resizeObserver.observationTargets.length > 0 ) > -1;
+    };
+
+    const execute = () => {
+      //console.log('***** Execute');
+      for(const resizeObserver of document.resizeObservers) {
+        resizeObserver.broadcast_();
+      }
+
+      return shouldStop();
+    };
+
+    const interval = intervalFunction(200);
+
+    return {
+      start() {
+        if(!interval.started) {
+          //console.log('***** Start poll');
+          interval.start(execute);
+        }
+      }
+    };
+  };
+
+  window.ResizeObserver = ResizeObserver;
+
+  const resizeController = ResizeController();
+  //console.log('***** ResizeObserver ready');
+
+})(window, document);
diff --git a/node_modules/mdl-ext/src/utils/snippets/resize-observer.html b/node_modules/mdl-ext/src/utils/snippets/resize-observer.html
new file mode 100644
index 0000000..5d956c2
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/snippets/resize-observer.html
@@ -0,0 +1,221 @@
+<!-- See: https://github.com/WICG/ResizeObserver/blob/master/demo.html -->
+
+<style>
+  .resize {
+    border: 2em solid rgba(0,255,0, 0.5);
+    background-color: #DDD;
+    width: 90%; //300.49px;
+    height: 200.5px;
+    overflow: hidden;
+    position:relative;
+    display:inline-block;
+  }
+  .yellowBorder {
+    border-width: 1px;
+    border-style: solid;
+  }
+
+  .maptiles {
+    overflow: hidden;
+  }
+
+  .maptiles::after {
+    content: "map tiles";
+    position: relative;
+    top: 20px;
+  }
+
+  .elipse {
+    border: 20px solid rgba(100,255,100, 0.5);
+  }
+  .elipse::after {
+    content: "canvas";
+    position: relative;
+    top: -100px;
+  }
+  .domMunch {
+    background-color: orange;
+  }
+  .domMunch > div {
+    display: inline-block;
+    width: 20px;
+    height: 20px;
+    border: 1px solid black;
+  }
+  .domMunch::after {
+    content: "domMunch";
+    position: relative;
+    top: 20px;
+  }
+
+  .toolbar {
+    margin: 16px 0;
+    position: relative;
+    display: flex;
+    align-items: center;
+  }
+
+  .toolbar > * {
+    margin-right: 8px;
+    min-width: 110px;
+    width: auto;
+  }
+
+  .toolbar > span {
+    flex-grow: 1;
+    text-align: right;
+    font-weight: 600;
+    font-size: 1.2em;
+  }
+</style>
+
+<h1 style="display:none">ResizeObserver unexpected error</h1>
+<pre id="log" style="display:none">log:</pre>
+
+<section class="toolbar">
+  <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+    <input id="cb-observe" type="checkbox" class="mdl-checkbox__input" checked>
+    <span class="mdl-checkbox__label">Observe</span>
+  </label>
+
+  <div id="input-inc-container" class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield">
+    <input id="input-inc" class="mdl-textfield__input" type="number" min="1" max="40" value="10">
+    <label class="mdl-textfield__label">Size increment</label>
+  </div>
+
+  <button id="btn-grow" class="cmd-button mdl-button mdl-js-button mdl-button--raised">Grow</button>
+  <button id="btn-shrink" class="cmd-button mdl-button mdl-js-button mdl-button--raised">Shrink</button>
+  <button id="btn-delete" class="cmd-button mdl-button mdl-js-button mdl-button--raised">Delete observed element</button>
+
+  <span id="observe-notification">
+  </span>
+</section>
+
+
+<div id="observed-element" class="resize maptiles" ></div>
+
+<script>
+  'use strict';
+
+  (function() {
+    'use strict';
+    document.addEventListener('DOMContentLoaded', function() {
+
+      if (!window.ResizeObserver) {
+        throw new Error('no window.ResizeObserver');
+      }
+
+      function log(msg) {
+        var e = document.querySelector('#log');
+        e.textContent = e.innerText + '\n' + msg;
+      }
+
+      function nextColor() {
+        return '#'+Math.random().toString(16).substr(-6);
+      }
+
+      function grow() {
+        var inc = parseInt(document.querySelector('#input-inc').value);
+        var elements = document.querySelectorAll('.resize');
+        for (var i = 0; i < elements.length; i++) {
+          var el = elements[i];
+          var s = window.getComputedStyle(el);
+          var w = parseFloat(s.width);
+          var h = parseFloat(s.height);
+          el.style.width = (w + inc) + 'px';
+          el.style.height = (h + inc * 2 / 3) + 'px';
+        }
+      }
+
+      function shrink() {
+        var dec = parseInt(document.querySelector('#input-inc').value);
+        var elements = document.querySelectorAll('.resize');
+        for (var i = 0; i < elements.length; i++) {
+          var el = elements[i];
+          var s = window.getComputedStyle(el);
+          var w = parseFloat(s.width);
+          var h = parseFloat(s.height);
+          el.style.width = (w - dec) + 'px';
+          el.style.height = (h - dec * 2 / 3) + 'px';
+        }
+      }
+
+
+      function initResizeHandlers() {
+        var elements = document.querySelectorAll('.maptiles');
+        for (var i = 0; i < elements.length; i++) {
+          elements[i].onresize = function() { this.style.borderColor = nextColor() };
+        }
+      }
+
+      function displayNotification(value) {
+        var notification = document.querySelector("#observe-notification");
+        notification.style.color = nextColor();
+        if(Number.isInteger(value)) {
+          notification.innerHTML = '<span>Observed: ' + value + ' element' + (value > 1 ? 's' : '') + '</span>';
+        }
+        else {
+          notification.innerHTML = '<span>Observer: ' + value + '</span>';
+        }
+      }
+
+      //
+      // Init
+      //
+      window.addEventListener('error', function (e) {
+        var error = e.error;
+        console.log(error);
+        log(error);
+      });
+
+
+      var ro = new ResizeObserver( function(entries) {
+
+        displayNotification(entries.length);
+
+        for (var i = 0; i < entries.length; i++) {
+          var entry = entries[i];
+          if (!entry.target || !entry.target.parentNode) {
+            throw new Error("detected resize on orphan element");
+          }
+          if (entry.target.onresize) {
+            entry.target.onresize(entry);
+          }
+        }
+      });
+
+      function toggleObserve() {
+        var isObserve = document.querySelector('#cb-observe').checked;
+        displayNotification(isObserve ? 'on' : 'off');
+
+        var elements = document.querySelectorAll('.resize');
+        if (isObserve) {
+          for (var i = 0; i < elements.length; i++) {
+            ro.observe(elements[i]);
+          }
+        }
+        else {
+          for (var i = 0; i < elements.length; i++) {
+            ro.unobserve(elements[i]);
+          }
+        }
+      }
+
+      function deleteObservedElement() {
+        var el = document.querySelector('#observed-element');
+        el.parentNode.removeChild(el);
+      }
+
+
+      document.querySelector('#cb-observe').addEventListener('click', function() { toggleObserve() });
+      document.querySelector('#btn-grow').addEventListener('click', function() { grow() });
+      document.querySelector('#btn-shrink').addEventListener('click', function() { shrink() });
+      document.querySelector('#btn-delete').addEventListener('click', function() { deleteObservedElement() });
+
+      // Start
+      initResizeHandlers()
+      toggleObserve();
+    });
+
+  }());
+</script>
diff --git a/node_modules/mdl-ext/src/utils/string-utils.js b/node_modules/mdl-ext/src/utils/string-utils.js
new file mode 100644
index 0000000..38830cc
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/string-utils.js
@@ -0,0 +1,76 @@
+'use strict';
+
+/**
+ * @license
+ * Copyright 2016 Leif Olsen. 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 javascript utility for conditionally creating a list of strings.
+ * The function takes any number of arguments which can be a string or object.
+ * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames
+ *
+ * @param  {*} args the strings and/or objects to
+ * @return {Array} a list of strings
+ * @example
+ * // Returns ['foo', 'bar', 'baz', 'quux']
+ * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });
+ * @example see the tests for more examples
+ */
+const stringList = (...args) => {
+
+  const isString = str => str != null && typeof str === 'string';
+
+  const flatten = list => list.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
+
+  const objectToStrings = arg =>
+    Object.keys(arg)
+      .filter(key => arg[key])
+      .map(key => key);
+
+  return args
+    .filter(arg => !!arg)
+    .map(arg => isString(arg) ? arg : objectToStrings(arg))
+    .reduce((result, arg) => result.concat(Array.isArray(arg) ? flatten(arg) : arg), []);
+};
+
+/**
+ * A simple javascript utility for conditionally joining strings together.
+ * The function takes a delimiter string and any number of arguments which can be a string or object.
+ *
+ * @param delimiter delimiter to separate joined strings
+ * @param  {*} args the strings and/or objects to join
+ * @return {String} the joined strings
+ * @example
+ * // Returns 'foo, bar, baz, quux'
+ * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });
+ * @example see the tests for more examples
+ */
+const joinStrings = (delimiter = ' ', ...args) => stringList(...args).join(delimiter);
+
+/**
+ * Generates a random string with a given length
+ * @param n {Integer} length of generated string
+ * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
+ * @return {String} the random string
+ * @example
+ * // Returns e.g. 'pd781w0y'
+ * randomString(8);
+ * @example see the tests for more examples
+ */
+const randomString = ( n=12 ) => Array( n+1 ).join((`${Math.random().toString(36)}00000000000000000`).slice(2, 18)).slice(0, n);
+
+export { joinStrings, randomString, stringList };
+
diff --git a/node_modules/mdl-ext/src/utils/throttle-function.js b/node_modules/mdl-ext/src/utils/throttle-function.js
new file mode 100644
index 0000000..f236ec3
--- /dev/null
+++ b/node_modules/mdl-ext/src/utils/throttle-function.js
@@ -0,0 +1,61 @@
+/**
+ * Throttling enforces a maximum number of times a function can be called over time.
+ *
+ * @param callback the function to throttle
+ * @param delay optional delay, default to 1000/60ms
+ * @param context optional context of this, default to global window
+ * @returns {Function} reference to immediate and cancel functions
+ * @see https://developer.mozilla.org/en-US/docs/Web/Events/resize#Example
+ * @see https://gist.github.com/yoavniran/d1d33f278bb7744d55c3
+ * @see https://github.com/pelotoncycle/frame-throttle
+ * @see https://github.com/jeromedecoster/raf-funcs
+ */
+const MIN_DELAY = 1000/60;
+
+const throttleFunction = (callback, delay=MIN_DELAY, context) => {
+
+  if(delay < MIN_DELAY) {
+    delay = MIN_DELAY;
+  }
+
+  if (!context) {
+    context = this || window;
+  }
+
+  let next = null;
+  let start = 0;
+
+  return (...args) => {
+
+    const cancel = () => {
+      if(next !== null) {
+        window.cancelAnimationFrame(next);
+        next = null;
+      }
+    };
+
+    const execute = () => {
+      cancel();
+      return Reflect.apply(callback, context, args);
+    };
+
+    const later = () => {
+      if (delay - (Date.now() - start) <= 0) {
+        return execute();
+      }
+      next = window.requestAnimationFrame(later);
+    };
+
+    if(next === null) {
+      start = Date.now();
+      next = window.requestAnimationFrame(later);
+    }
+
+    return {
+      cancel: () => cancel(),
+      immediate: () => execute()
+    };
+  };
+};
+
+export default throttleFunction;