diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..561cd5efdc --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes old mode 100755 new mode 100644 index 89e0033d66..a6d7319775 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,12 @@ * text=auto **/*.html linguist-documentation +js/velocity.min.js linguist-vendored +js/hammer.min.js linguist-vendored +js/jquery.hammer.js linguist-vendored +js/jquery.easing.1.4.js linguist-vendored +js/jquery.timeago.min.js linguist-vendored + + +css/ghpages-materialize.css merge=ours +.gitignore merge=ours +.gitattributes merge=ours \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..2b3eacc268 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,44 @@ + + +When asking general "how to" questions: + +- Please do not open an issue here! +- Instead, ask for help on [StackOverflow](stackoverflow.com/questions/tagged/materialize) or in our [Gitter](https://gitter.im/Dogfalo/materialize) channel. + +- Read the [CONTRIBUTING document](https://github.com/Dogfalo/materialize/blob/master/CONTRIBUTING.md). Any issues that violate the contributing guidelines will be closed! +- [Search for duplicate or closed issues](https://github.com/Dogfalo/materialize/issues?utf8=%E2%9C%93&q=is%3Aissue) and make sure to go through our [labels](https://github.com/Dogfalo/materialize/labels). +- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs. + + + +## Expected Behavior + + + + +## Current Behavior + + + + +## Possible Solution + + + +## Steps to Reproduce (for bugs) + +1. +2. +3. +4. + +## Context + + + +## Your Environment + +* Version used: +* Browser Name and version: +* Operating System and version (desktop or mobile): +* Link to your project (if appropriate): diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..6632fde4f7 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,21 @@ +## Proposed changes + + +## Screenshots (if appropriate) or codepen: + + +## Types of changes + + +- [ ] Bug fix (non-breaking change which fixes an issue). +- [ ] New feature (non-breaking change which adds functionality). +- [ ] Breaking change (fix or feature that would cause existing functionality to change). + +## Checklist: + + +- [ ] I have read the **[CONTRIBUTING document](https://github.com/Dogfalo/materialize/blob/master/CONTRIBUTING.md)**. +- [ ] My change requires a change to the documentation. +- [ ] I have updated the documentation accordingly. +- [ ] I have added tests to cover my changes. +- [ ] All new and existing tests passed. diff --git a/.gitignore b/.gitignore index 9d5876027f..13aa535d7e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,45 @@ +# OS or Editor folders +._* +.cache .DS_Store -prepros.cfg +.idea +.project +.projectile +.settings +.tmproj +*.esproj +*.sublime-project +*.sublime-workspace +nbproject Thumbs.db -js/materialize.js -test2.html -test.html -test2.html -node_modules/ + +# Node logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# grunt-contrib-sass cache .sass-cache/ -bin/jquery-2.1.1.min.js -/.idea/ -**/*.log -bower_components + +# Dependency directories +node_modules/ +bower_components/ + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Grunt temporary storage +temp/ + +# Jasmine SpecRunner +_SpecRunner.html + +# Ignore .html files in root +/*.html +!fab-toolbar-demo.html + +# Ignore compiled files +css/ghpages-materialize.css +bin/ diff --git a/.travis.yml b/.travis.yml index 1f12f97d84..2e4529590d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,7 @@ language: node_js -git: - depth: 10 node_js: - - "0.10" + - "6.10" before_install: - - npm install -g grunt - - npm install -g grunt-cli \ No newline at end of file + - npm install -g grunt-cli +git: + depth: 10 diff --git a/CHANGELOG.md b/CHANGELOG.md index 857fefbe45..860e11887b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,175 @@ +Changelog +======= +Bolded styling surrounded by emojis indicates a breaking change. + +## v0.100.2 (August 26, 2017) +- Modal no longer errors on IE 11 +- Fixes for Webpack and CommonJS loading of Materialize +- Select displays properly inside Datepicker +- Fix year display bug in date picker where year would change even when no new date had been selecteed +- Fix for badge alignment in collapsible +- Fix bug with multiple select where it would show an incorrect selection initially + + +## v0.100.1 (July 21, 2017) +- Fixed bug where modal triggers could not contain child elements +- Fixed bug with right alignment option for dropdown +- Allow select native browser validation error messages +- Added fix for validation messages being mispositioned when input is empty + + +## v0.100.0 (July 19, 2017) +- :sparkles: **Rewrote Modal Plugin** :sparkles: + - Modal open no longer initializes plugin + - Fixed bug where modal open did not use initialized options + - Modal-trigger class required for modal trigger elements +- :sparkles: **Rewrote Toast Plugin** :sparkles: + - Added class method to dismiss all toasts + - Added instance method to remove specific toasts +- Validation styling support added for many form components +- Added ability to remove autocompelete data +- Fixed waves persisting bug +- Waves no longer throws error on svg elements +- Fixed side nav callback bugs +- Tab accessibility for date picker +- Added container option for time picker +- Fixed carousel image loading bug +- Full width carousel now resizes height on resize +- Added carousel destroy +- Fixed multiple bugs with jQuery outerWidth on Linux +- Fixed cursor blinking on select on iOS +- Fixed search form styling in navbar +- Fixed label animation on date picker +- Added close on select option for date picker +- Browser errors now show up on radio buttons and checkboxes + + +## v0.99.0 (June 22, 2017) +- Added support for jQuery 3 +- Fixed dynamic textarea resize bug +- Added support for custom active elements in scrollspy +- Added Time Picker +- Updated styling for Date Picker +- Added callbacks to side nav +- Updated styling for switches + + +## v0.98.2 (April 14, 2017) +- :no_good: **Autocomplete: renamed and moved options to `autocompleteOptions`** :no_good: +- Fixed collapsible preselect bug +- Fixed dropdown event bubbling bug +- Fixed range position inaccuracies +- Fixed feature discovery mobile styles +- Fixed carousel reinitialize bugs +- Fixed grid offset bug + + +## v0.98.1 (March 21, 2017) +- Fixed various select bugs on mobile devices +- Fixed small sideNav overlay bugs +- Fixed carousel resizing bug +- Fixed materialbox callback bug +- Range slider supports keyboard navigation +- Added XL breakpoint +- Added Pulse CSS effect +- Added Feature Discovery component + + +## v0.98.0 (January 25, 2017) +- :no_good: **Standardized plugin option naming to camelcase (please check your plugin calls to make sure all the options are camelcase)** :no_good: +- Added FABs in image cards +- Added swipeable tabs +- Fixed carousel misalignment when switching quickly +- Fixed carousel resize bug where slide widths wouldn't change when changing window size +- Improved tabs compatibility with cards +- Fixed bug where using backspace to delete chips would navigate back in certain browsers +- Added autocomplete integration with chips +- Upgraded noUiSlider to version 9 with support for vertical sliders + + +## v0.97.8 (October 30th, 2016) +- **Refactored Modal plugin** +- Tabs now supported in navbar +- Chips data can now be reinitiailized +- Minor side nav fixes +- FAB to toolbar component added +- Fixed dropdown options bug + + +## v0.97.7 (July 23rd, 2016) +- Basic horizontal cards +- Carousel bug fixes and new features +- Updated sidenav styles and new component +- Meteor package now supports Sass +- Autocomplete form component +- Chips jQuery plugin + + +## v0.97.6 (April 1st, 2016) +- **Removed deprecated material icons from project** +- **Changed /font directory to /fonts** +- Datepicker and ScrollSpy now compatible with jQuery 2.2.x +- Responsive tables now work with empty cells +- Added focus states to checkboxes, switches, and radio buttons +- Sidenav and Modals no longer cause flicker with scrollbar +- Materialbox overflow and z-index issues fixed +- Added new option for Card actions within a Card reveal + + +## v0.97.5 (December 21st, 2015) +- Fixed Meteor package crash + + +## v0.97.4 (Dec 20, 2015) +- Added Jasmine testing with Travis CI +- Select bugfixes +- Grid Offset bugfix +- Dropdown overflow bugfix +- Range slider error bugfix + + +## v0.97.3 (Nov 15, 2015) +- Meteor font issues fixed +- Select rendering issue fixed +- Added Push and Pull to grid +- Dynamic accordion appends fixed + + +## v0.97.2 (Nov 8, 2015) +- Image support inside select +- Optgroup supported in select +- Multiple select added +- Card styling fixes +- Breadcrumbs added +- Scrollable tabs +- Tooltips and dropdowns position themselves more intelligently inside the window +- FAB menu is click-toggleable +- Horizontal FAB support added + + +## v0.97.1 (Sep 13, 2015) +- Added new range slider with uses noUiSlider to provide powerful options +- Added CSS for Chips +- Toasts support adding of html elements +- Fixed select destroy/creation bug +- Bugfixes for dropdown, badges, collections, scrollfire +- Added default preloader color variable +- File input now supports multiple files and dynamically loaded elements + + +## v0.97.0 (June 21, 2015) +- **Documentation changed to use Official Google Icon web font** +- **Input errors added** +- Flicker on Firefox on dropdowns fixed +- Pagination made more responsive +- Modal now prevents scrolling +- Modal animation added +- Support for multiple modals added +- Programmatic control of FAB to open/close added +- Programmatic control of slider to play/pause added +- Plus many more bug fixes + + ## v0.96.0 (April 1, 2015) - Toasts, transitions, scrollfire added under Materialize namespace - Dropdown is now created as a child of its parent @@ -10,6 +182,7 @@ - Text Character Counter added - Waves no longer breaks on SVGs + ## v0.95.3 (Feb 25, 2015) - Parallax image loading / responsiveness fixes - Date picker supports month/year as dropdown @@ -102,6 +275,7 @@ - Added dist folder to repo - Cards restructured + ## v0.91 (Dec 3, 2014) - bug fixes to forms - added waves color classes @@ -111,4 +285,4 @@ ## v0.9 (Nov 30, 2014) - Touch interactions added -- tons more... \ No newline at end of file +- tons more... diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..7457934f73 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,43 @@ +# Materialize Community Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as the Materialize team pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +The Materialize team is responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +The Materialize team has the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing Materialize or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by the Materialize team. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project maintainers at materializeframework@gmail.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project maintainers are obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Contributors who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at . diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e108dd0054..e9bfa05d53 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,21 +1,228 @@ -## Contributing -- Compiling Files - - `npm install` - - `grunt monitor`, this will compile .scss, .js., .jade files -- Documentation - - If you notice an error in the documentation, please edit the corresponding .html page under jade/page-contents/. -- Issues - - If you have an issue please make sure you document the problems in depth. - - Create screenshots of your issue and include a [Codepen](http://codepen.io/Dogfalo/pen/xbzPQV) of the problem where applicable - - Unclear issues with little explanations will be closed. - - Issues without a Codepen (where applicable) will be closed or ignored. -- Feature Requests - - We like feature requests but make sure that it can be seen within the goals of the project and not just something you need individually. Also you should try and give as much examples and details about the new feature as possible. -- Code Examples - - Use this [Codepen](http://codepen.io/Dogfalo/pen/xbzPQV) to illustrate your problem. - -## Contribution 101 -- Fork this repo to your own git -- Make your changes -- Submit a pull request with full remarks documenting your changes -- Pull request MAY then be accepted by project creators +Contributing +------------ + +Looking to contribute something to Materialize? **Here's how you can help.** + +### Table of contents: +- [Introduction](#introduction) +- [Communication channels](#communication-channels) +- [Using the issue tracker](#using-the-issue-tracker) + - [Issues and labels](#issues-and-labels) + - [Bug reports](#bug-reports) + - [Feature Requests](#feature-requests) + - [Code Examples](#code-examples) +- [Pull Requests](#pull-requests) + - [Documentation](#documentation) + - [Submitting Your Pull Request](#submitting-your-pull-request) +- [Translations](#translations) +- [Jasmine Testing Guide](#jasmine-testing-guide) + +## Introduction +Please take a moment to review this document in order to make the contribution +process easy and effective for everyone involved. + +Following these guidelines helps to communicate that you respect the time of +the developers managing and developing this open source project. In return, +they should reciprocate that respect in addressing your issue or assessing +patches and features. + +### Communication channels + +Before you now get lost in the repository, here are a few starting points for you to check out. You might find that others have had similar questions or that your question rather belongs in one place than another. + +* Chat: https://gitter.im/Dogfalo/materialize +* Website: http://materializecss.com +* Twitter: https://twitter.com/materializecss + +## Using the issue tracker + +The [issue tracker](https://github.com/Dogfalo/materialize/issues) is the preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests) and [submitting pull requests](#pull-requests), but please respect the following conditions: + +* Please **do not** use the issue tracker for personal support requests. [Stack Overflow `materialize`](https://stackoverflow.com/questions/tagged/materialize) tag is the best place to get help or use our [Gitter channel](https://gitter.im/Dogfalo/materialize). + +* Please **do not** post comments like "+1" or ":thumbsup:". Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments) instead. We reserve the right to delete comments which violate this rule. + +* Please **do not** open issues without clearly stating the problem and desired result. [See the bug reports section](#bug-reports) for more information on creating effective issues. + +* Please **do** [search for duplicate or closed issues](https://github.com/Dogfalo/materialize/issues?utf8=%E2%9C%93&q=is%3Aissue) and make sure to go through our [labels](https://github.com/Dogfalo/materialize/labels), before you open a new issue. Duplicate issues will be closed. + +* Please **close your own issue** once it is resolved. + +* Every participant is **expected to follow** the project's [Code of Conduct](CODE_OF_CONDUCT.md) so please be courteous and respectful. + +### Issues and labels + +Our bug tracker utilizes several labels to help organize and identify issues. Here's what they represent and how we use them: + +- `component:*` - Each component has been provided a label. Add the labels for any component the issue is triggered by. +- `confirmed` - Issues that have been confirmed with a reduced test case and identify a bug in Materialize. +- `css` - Issues stemming from our compiled CSS or source Sass files. +- `js` - Issues stemming from our compiled or source JavaScript files. +- `docs` - Issues for improving or updating our documentation. +- `help-wanted` - Issues we need or would love help from the community to resolve. +- `meta` - Issues with the project itself or our GitHub repository. +- `on-hold` Issues or pull that should be worked on, but for any reason it won't be worked on/accepted as a PR anytime soon. + +For a complete look at our labels, see the [project labels page](https://github.com/Dogfalo/materialize/labels). + +### Bug reports + +A bug is a _demonstrable problem_ that is caused by the code in the repository. +Good bug reports are extremely helpful! Unclear issues with little explanations will be closed. + + +#### Guidelines for bug reports: + +1. **Use the GitHub issue search** - check if the issue has already been reported. + +2. **Check if the issue has been fixed** - try to reproduce it using the latest `master` or development branch in the repository. + +3. **Isolate the problem** — create a [reduced test case](https://css-tricks.com/reduced-test-cases/) using **our** [Codepen template](#code-examples). + +A good bug report shouldn't leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. What is your environment? What steps will reproduce the issue? What browser(s) and OS experience the problem? Do other browsers show the bug differently? What would you expect to be the outcome? All these details will help people to fix any potential bugs. Just make sure to fill out the issue template. + +### Feature Requests + +We like feature requests but make sure that it can be seen within the goals of the project and not just something you need individually. Also you should try and give as much examples and details about the new feature as possible. If you are requesting a component from the [Material design guidelines](https://material.io/guidelines/), make sure to include a link to the component. + +### Code Examples + +- Issues without a [Codepen](#code-examples) (where applicable) will be closed or ignored. +- Use this [Codepen](http://codepen.io/Dogfalo/pen/xbzPQV) to illustrate your problem. + +## Pull requests + +Good pull requests - patches, improvements, new features - are a fantastic help. Thanks for taking the time to contribute. + +**Please ask first** before working on any significant pull request, otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project. + +**Do not edit `materialize.css`, or `materialize.js` +directly!** Those files are automatically generated. You should edit the +source files in [`/materialize/sass/`](https://github.com/Dogfalo/materialize/tree/master/sass) +and/or [`/materialize/js/`](https://github.com/Dogfalo/materialize/tree/master/js) instead. + +### Documentation + +When contributing to Materialize's documentation, you should edit the documentation source files in +[the `/materialize/jade/page-contents/` directory of the `master` branch](https://github.com/Dogfalo/materialize/tree/master/jade). +**Do not edit the `gh-pages` branch.** That branch is generated from the documentation source files and is managed separately by the Materialize maintainers. + +### Submitting Your Pull Request + +Adhering to the following process is the best way to get your work included in the project: + +1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, + and configure the remotes: + + ```bash + # Clone your fork of the repo into the current directory + git clone https://github.com//materialize.git + # Navigate to the newly cloned directory + cd materialize + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com/Dogfalo/materialize.git + ``` + +2. If you cloned a while ago, get the latest changes from upstream: + + ```bash + git checkout master + git pull upstream master + ``` + +3. Create a new topic branch (off the main project development branch) to contain your feature, change, or fix: + + ```bash + git checkout -b + ``` + +4. Commit your changes in logical chunks with messages written in english. Please adhere to these [git commit message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) or your code is unlikely be merged into the main project. + +5. Locally merge (or rebase) the upstream development branch into your topic branch: + + ```bash + git pull [--rebase] upstream master + ``` + +6. Push your topic branch up to your fork: + + ```bash + git push origin + ``` + +7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `master` branch. Reference any open issue in the description so it is automatically linked. Try and keep your commit history clean and concise. Once you submit your pull request, [Travis CI](https://travis-ci.org/Dogfalo/materialize) will automatically run your tests and will show a checkmark to show that all the tests have passed. Once this is done, we’ll review your tests and code and make comments if there are issues or things we think could be improved. Then once everything looks good we’ll merge the code in! + +## Translations + +If you want to help us translate the documentation into other languages, please send us an email at materializeframework@gmail.com telling us which language team you want to join. We use [Transifex](https://www.transifex.com) as our localization platform and we will send you an invite there. + +## Jasmine Testing Guide: + +**References:** +- [Jasmine Documentation](http://jasmine.github.io/2.0/introduction.html) +- [Grunt Jasmine Plugin](https://github.com/gruntjs/grunt-contrib-jasmine) +- [Example Jasmine Tests](https://github.com/Dogfalo/materialize/tree/master/tests/spec) +- [Travis CI](https://travis-ci.org/Dogfalo/materialize) + +Before you start, make sure you install grunt and all its dependencies. To verify you have all the correct dependencies you can run `grunt travis` and it will run the tests. If you get an errors and have not made any changes, it means you have not installed the proper dependencies. + +Materialize uses Jasmine as the testing framework. We also include a jQuery library which allows you to write tests using jQuery syntax. + +### Starting Out + +First to familiarize yourself with how the tests are structured, you can take a look inside the `tests/` directory. Each component should have its own folder. Follow the file-naming conventions that are used in the existing tests. + +Before writing tests, make sure you are working off of a clean git branch of your fork. This will greatly simplify the Pull Request process. + +### Writing Tests + +Before writing tests, make sure you understand what the expected-behavior of the component actually is. Reading over the component code and documentation will greatly aid you in this regard. + +Use `describe` blocks to section disparate portions of tests and `it` blocks inside those to further break up tests into features. Inside `it` blocks, you can have multiple except statements. As a general testing principle, be sure to try and test both the case and its “inverse” to lessen the chance for false positives. + +Example: +```javascript +expect(toast.first('span').text()).toBe('I am toast content'); +expect(toast.first('span').text()).not.toBe('I am toast'); +``` + +You can use beforeEach, and afterEach in either block to designate code that will execute before or after each item. This is useful if you need to setup some scenario for each test, or reset some things after each test. + +When writing expect statements (Jasmine’s form of assert), it is very important to write an expected behavior string so in the event of an error, the test that failed is very clear. + +Example: +```javascript +expect(toast.length).toBe(0, 'because toast should be removed by now'); +``` +When this expect statement fails it will list the reason as “because toast should be removed by now”. + +Because our components are very front end heavy, familiarize yourself with jQuery ways of interacting with the dom and our components. You can use methods like [trigger](http://api.jquery.com/trigger/), to simulate certain events like the user clicking a button. + +We also understand that testing CSS properties is pretty tough so you’ll have to be creative when writing good tests that ensure the styling is still working. Try and cover as many cases as you can but don’t worry if there are some edge cases. You can add comments describing some problematic edge cases in TODOs so we know about them. + +### Useful Jasmine Tips + +1. To only run a specific spec at a time, to avoid wasting your time running all our other tests, you can set the flag `--filter`. For example: + ```bash + grunt travis --filter=tabs + ``` + + This would only run specs with tabs in its name. + +2. If you need a timeout in your test (waiting for some animation or action to be executed) you need to use the done callback. In your `it()` behavior function set done as an argument to your anonymous function. Then you can use javascript’s window `setTimeout`s normally. And when you want the test to finish just call the `done()` function. For example: + + ```javascript + it ('should wait for a timeout', function(done) { + // Execute action + timeout(setTimeout(function() { + // Wait a second + // Test for result + done(); + }, 1000); + }); + ``` +**Note:** If you add done as a callback, and you don’t call the `done()` function, it will stall forever and error after a max limit of around 5 seconds. + +## License + +**IMPORTANT**: By contributing your code, you agree to allow the project owners to license your work under the terms of the [MIT License](LICENSE). diff --git a/Gruntfile.js b/Gruntfile.js index bee27e7187..be59a7cdc5 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,13 +1,37 @@ module.exports = function(grunt) { + var concatFile = 'temp/js/materialize_concat.js.map'; + // configure the tasks - grunt.initConfig({ -// Copy + var config = { + // Copy copy: { - dist: { cwd: 'font', src: [ '**' ], dest: 'dist/font', expand: true }, + dist: { cwd: 'fonts', src: [ '**' ], dest: 'dist/fonts', expand: true }, + }, + + // Jasmine + jasmine: { + components: { + src: [ + 'bin/materialize.js' + ], + options: { + vendor: [ + 'node_modules/jquery/dist/jquery.min.js', + 'node_modules/jasmine-jquery/lib/jasmine-jquery.js' + ], + styles: 'bin/materialize.css', + specs: 'tests/spec/**/*Spec.js', + helpers: 'tests/spec/helper.js', + keepRunner : true, + //helpers: 'test/spec/*.js' + } + } }, -// Sass + + + // Sass sass: { // Task expanded: { // Target options: { // Target options @@ -32,7 +56,7 @@ module.exports = function(grunt) { // Compile ghpages css gh: { options: { - style: 'compressed', + outputStyle: 'compressed', sourcemap: false }, files: { @@ -40,10 +64,10 @@ module.exports = function(grunt) { } }, - // Compile ghpages css + // Compile bin css bin: { options: { - style: 'expanded', + outputStyle: 'expanded', sourcemap: false }, files: { @@ -52,25 +76,78 @@ module.exports = function(grunt) { } }, - // Browser Sync integration + // PostCss Autoprefixer + postcss: { + options: { + processors: [ + require('autoprefixer')({ + browsers: [ + 'last 2 versions', + 'Chrome >= 30', + 'Firefox >= 30', + 'ie >= 10', + 'Safari >= 8'] + }) + ] + }, + expanded: { + src: 'dist/css/materialize.css' + }, + min: { + src: 'dist/css/materialize.min.css' + }, + gh: { + src: 'css/ghpages-materialize.css' + }, + bin: { + src: 'bin/materialize.css' + } + }, + + babel: { + options: { + sourceMap: false, + plugins: [ + 'transform-es2015-arrow-functions', + 'transform-es2015-block-scoping', + 'transform-es2015-classes', + 'transform-es2015-template-literals' + ] + }, + bin: { + options: { + sourceMap: true + }, + files: { + 'bin/materialize.js': 'temp/js/materialize_concat.js' + } + }, + dist: { + files: { + 'dist/js/materialize.js': 'temp/js/materialize.js' + } + } + }, + + // Browser Sync integration browserSync: { - bsFiles: ["bin/*.js", "bin/*.css", "!**/node_modules/**/*"], + bsFiles: ["bin/*", "css/ghpages-materialize.css", "!**/node_modules/**/*"], options: { - server: { - baseDir: "./" // make server from root dir - }, - port: 8000, - ui: { - port: 8080, - weinre: { - port: 9090 - } - }, - open: false + server: { + baseDir: "./" // make server from root dir + }, + port: 8000, + ui: { + port: 8080, + weinre: { + port: 9090 + } + }, + open: false } }, -// Concat + // Concat concat: { options: { separator: ';' @@ -78,76 +155,88 @@ module.exports = function(grunt) { dist: { // the files to concatenate src: [ - "js/jquery.easing.1.3.js", - "js/animation.js", - "js/velocity.min.js", - "js/hammer.min.js", - "js/jquery.hammer.js", - "js/global.js", - "js/collapsible.js", - "js/dropdown.js", - "js/leanModal.js", - "js/materialbox.js", - "js/parallax.js", - "js/tabs.js", - "js/tooltip.js", - "js/waves.js", - "js/toasts.js", - "js/sideNav.js", - "js/scrollspy.js", - "js/forms.js", - "js/slider.js", - "js/cards.js", - "js/chips.js", - "js/pushpin.js", - "js/buttons.js", - "js/transitions.js", - "js/scrollFire.js", - "js/date_picker/picker.js", - "js/date_picker/picker.date.js", - "js/character_counter.js", - ], + "js/initial.js", + "js/jquery.easing.1.4.js", + "js/animation.js", + "js/velocity.min.js", + "js/hammer.min.js", + "js/jquery.hammer.js", + "js/global.js", + "js/collapsible.js", + "js/dropdown.js", + "js/modal.js", + "js/materialbox.js", + "js/parallax.js", + "js/tabs.js", + "js/tooltip.js", + "js/waves.js", + "js/toasts.js", + "js/sideNav.js", + "js/scrollspy.js", + "js/forms.js", + "js/slider.js", + "js/cards.js", + "js/chips.js", + "js/pushpin.js", + "js/buttons.js", + "js/transitions.js", + "js/scrollFire.js", + "js/date_picker/picker.js", + "js/date_picker/picker.date.js", + "js/date_picker/picker.time.js", + "js/character_counter.js", + "js/carousel.js", + "js/tapTarget.js", + ], // the location of the resulting JS file - dest: 'dist/js/materialize.js' + dest: 'temp/js/materialize.js' }, temp: { // the files to concatenate + options: { + sourceMap: true, + sourceMapStyle: 'link' + }, src: [ - "js/jquery.easing.1.3.js", - "js/animation.js", - "js/velocity.min.js", - "js/hammer.min.js", - "js/jquery.hammer.js", - "js/global.js", - "js/collapsible.js", - "js/dropdown.js", - "js/leanModal.js", - "js/materialbox.js", - "js/parallax.js", - "js/tabs.js", - "js/tooltip.js", - "js/waves.js", - "js/toasts.js", - "js/sideNav.js", - "js/scrollspy.js", - "js/forms.js", - "js/slider.js", - "js/cards.js", - "js/chips.js", - "js/pushpin.js", - "js/buttons.js", - "js/transitions.js", - "js/scrollFire.js", - "js/date_picker/picker.js", - "js/date_picker/picker.date.js", - "js/character_counter.js", - ], + "js/initial.js", + "js/jquery.easing.1.4.js", + "js/animation.js", + "js/velocity.min.js", + "js/hammer.min.js", + "js/jquery.hammer.js", + "js/global.js", + "js/collapsible.js", + "js/dropdown.js", + "js/modal.js", + "js/materialbox.js", + "js/parallax.js", + "js/tabs.js", + "js/tooltip.js", + "js/waves.js", + "js/toasts.js", + "js/sideNav.js", + "js/scrollspy.js", + "js/forms.js", + "js/slider.js", + "js/cards.js", + "js/chips.js", + "js/pushpin.js", + "js/buttons.js", + "js/transitions.js", + "js/scrollFire.js", + "js/date_picker/picker.js", + "js/date_picker/picker.date.js", + "js/date_picker/picker.time.js", + "js/character_counter.js", + "js/carousel.js", + "js/tapTarget.js", + ], // the location of the resulting JS file - dest: 'temp/js/materialize.js' + dest: 'temp/js/materialize_concat.js' }, }, -// Uglify + // Uglify uglify: { options: { // Use these options when debugging @@ -165,11 +254,16 @@ module.exports = function(grunt) { files: { 'bin/materialize.js': ['temp/js/materialize.js'] } + }, + extras: { + files: { + 'extras/noUiSlider/nouislider.min.js': ['extras/noUiSlider/nouislider.js'] + } } }, -// Compress + // Compress compress: { main: { options: { @@ -188,41 +282,45 @@ module.exports = function(grunt) { level: 6 }, files:[ - {expand: true, cwd: 'font/', src: ['**/*'], dest: 'materialize-src/font/'}, + {expand: true, cwd: 'fonts/', src: ['**/*'], dest: 'materialize-src/fonts/'}, {expand: true, cwd: 'sass/', src: ['materialize.scss'], dest: 'materialize-src/sass/'}, {expand: true, cwd: 'sass/', src: ['components/**/*'], dest: 'materialize-src/sass/'}, {expand: true, cwd: 'js/', src: [ - "jquery.easing.1.3.js", - "animation.js", - "velocity.min.js", - "hammer.min.js", - "jquery.hammer.js", - "global.js", - "collapsible.js", - "dropdown.js", - "leanModal.js", - "materialbox.js", - "parallax.js", - "tabs.js", - "tooltip.js", - "waves.js", - "toasts.js", - "sideNav.js", - "scrollspy.js", - "forms.js", - "slider.js", - "cards.js", - "chips.js", - "pushpin.js", - "buttons.js", - "transitions.js", - "scrollFire.js", - "date_picker/picker.js", - "date_picker/picker.date.js", - "character_counter.js", - ], dest: 'materialize-src/js/'}, - {expand: true, cwd: 'dist/js/', src: ['**/*'], dest: 'materialize-src/js/bin/'}, - {expand: true, cwd: './', src: ['LICENSE', 'README.md'], dest: 'materialize-src/'} + "initial.js", + "jquery.easing.1.4.js", + "animation.js", + "velocity.min.js", + "hammer.min.js", + "jquery.hammer.js", + "global.js", + "collapsible.js", + "dropdown.js", + "modal.js", + "materialbox.js", + "parallax.js", + "tabs.js", + "tooltip.js", + "waves.js", + "toasts.js", + "sideNav.js", + "scrollspy.js", + "forms.js", + "slider.js", + "cards.js", + "chips.js", + "pushpin.js", + "buttons.js", + "transitions.js", + "scrollFire.js", + "date_picker/picker.js", + "date_picker/picker.date.js", + "date_picker/picker.time.js", + "character_counter.js", + "carousel.js", + "tapTarget.js", + ], dest: 'materialize-src/js/'}, + {expand: true, cwd: 'dist/js/', src: ['**/*'], dest: 'materialize-src/js/bin/'}, + {expand: true, cwd: './', src: ['LICENSE', 'README.md'], dest: 'materialize-src/'} ] }, @@ -258,14 +356,14 @@ module.exports = function(grunt) { }, -// Clean - clean: { - temp: { - src: [ 'temp/' ] - }, - }, + // Clean + clean: { + temp: { + src: [ 'temp/' ] + }, + }, -// Jade + // Jade jade: { compile: { options: { @@ -313,14 +411,21 @@ module.exports = function(grunt) { "scrollspy.html": "jade/scrollspy.jade", "transitions.html": "jade/transitions.jade", "fullscreen-slider-demo.html": "jade/fullscreen-slider-demo.jade", - "pagination.html": "jade/pagination.jade" - - + "pagination.html": "jade/pagination.jade", + "breadcrumbs.html": "jade/breadcrumbs.jade", + "carousel.html": "jade/carousel.jade", + "feature-discovery.html": "jade/feature-discovery.jade", + "pulse.html": "jade/pulse.jade", + "pushpin-demo.html": "jade/pushpin-demo.jade", + "css-transitions.html": "jade/css-transitions.jade", + "themes.html": "jade/themes.jade", + "404.html": "jade/404.jade", + "support-us.html": "jade/support-us.jade", } } }, -// Watch Files + // Watch Files watch: { jade: { files: ['jade/**/*'], @@ -351,19 +456,21 @@ module.exports = function(grunt) { }, -// Concurrent + // Concurrent concurrent: { options: { logConcurrentOutput: true, limit: 10, }, monitor: { - tasks: ["watch:jade", "watch:js", "watch:sass", "notify:watching", 'server'] + tasks: ["jade_compile", "sass_compile", "js_compile", + "watch:jade", "watch:js", "watch:sass", + "notify:watching", 'server'] }, }, -// Notifications + // Notifications notify: { watching: { options: { @@ -445,92 +552,48 @@ module.exports = function(grunt) { // Create Version Header for files usebanner: { - release: { - options: { - position: 'top', - banner: "/*!\n * Materialize v"+ grunt.option( "newver" ) +" (http://materializecss.com)\n * Copyright 2014-2015 Materialize\n * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)\n */", - linebreak: true - }, - files: { - src: [ 'dist/css/*.css', 'dist/js/*.js'] - } + release: { + options: { + position: 'top', + banner: "/*!\n * Materialize v"+ grunt.option( "newver" ) +" (http://materializecss.com)\n * Copyright 2014-2017 Materialize\n * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)\n */", + linebreak: true + }, + files: { + src: [ 'dist/css/*.css', 'dist/js/*.js'] } - }, + } + }, - // Rename files + // Rename files rename: { - rename_src: { - src: 'bin/materialize-src'+'.zip', - dest: 'bin/materialize-src-v'+grunt.option( "newver" )+'.zip', - options: { - ignore: true - } - }, - rename_compiled: { - src: 'bin/materialize'+'.zip', - dest: 'bin/materialize-v'+grunt.option( "newver" )+'.zip', - options: { - ignore: true - } - }, + rename_src: { + src: 'bin/materialize-src'+'.zip', + dest: 'bin/materialize-src-v'+grunt.option( "newver" )+'.zip', + options: { + ignore: true + } }, - - // Removes console logs - removelogging: { - source: { - src: ["js/**/*.js", "!js/velocity.min.js"], - options: { - // see below for options. this is optional. - } - } + rename_compiled: { + src: 'bin/materialize'+'.zip', + dest: 'bin/materialize-v'+grunt.option( "newver" )+'.zip', + options: { + ignore: true + } }, - // Testem - testem: { - 'default': { - src: [ - 'bower_components/qunit/qunit/qunit.js', - 'bower_components/jquery/dist/jquery.min.js', - 'js/jquery.easing.1.3.js', - 'js/animation.js', - 'js/velocity.min.js', - 'js/hammer.min.js', - 'js/jquery.hammer.js', - 'js/global.js', - 'js/collapsible.js', - 'js/dropdown.js', - 'js/leanModal.js', - 'js/materialbox.js', - 'js/parallax.js', - 'js/tabs.js', - 'js/tooltip.js', - 'js/waves.js', - 'js/toasts.js', - 'js/sideNav.js', - 'js/scrollspy.js', - 'js/forms.js', - 'js/slider.js', - 'js/cards.js', - 'js/chips.js', - 'js/pushpin.js', - 'js/buttons.js', - 'js/transitions.js', - 'js/scrollFire.js', - 'js/date_picker/picker.js', - 'js/date_picker/picker.date.js', - 'js/character_counter.js', - 'tests/setup.js', - 'tests/helpers/**/*.js', - 'tests/**/*-test.js' - ], - options: { - framework: "qunit", - test_page: 'tests/index.mustache?hidepassed', - launch_in_dev: ['PhantomJS', 'Chrome', 'Firefox'], - } + }, + + // Removes console logs + removelogging: { + source: { + src: ["js/**/*.js", "!js/velocity.min.js"], + options: { + // see below for options. this is optional. } } + }, + }; - }); + grunt.initConfig(config); // load the tasks // grunt.loadNpmTasks('grunt-gitinfo'); @@ -546,10 +609,14 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-notify'); grunt.loadNpmTasks('grunt-text-replace'); grunt.loadNpmTasks('grunt-banner'); - grunt.loadNpmTasks('grunt-rename'); - grunt.loadNpmTasks("grunt-remove-logging"); + grunt.loadNpmTasks('grunt-rename-util'); + grunt.loadNpmTasks('grunt-remove-logging'); grunt.loadNpmTasks('grunt-browser-sync'); - grunt.loadNpmTasks('grunt-contrib-testem'); + grunt.loadNpmTasks('grunt-contrib-jasmine'); + grunt.loadNpmTasks('grunt-postcss'); + grunt.loadNpmTasks('grunt-babel'); + + // define the tasks grunt.registerTask( 'release',[ @@ -557,8 +624,12 @@ module.exports = function(grunt) { 'copy', 'sass:expanded', 'sass:min', + 'postcss:expanded', + 'postcss:min', 'concat:dist', + 'babel:dist', 'uglify:dist', + 'uglify:extras', 'usebanner:release', 'compress:main', 'compress:src', @@ -567,15 +638,20 @@ module.exports = function(grunt) { 'replace:version', 'replace:readme', 'rename:rename_src', - 'rename:rename_compiled' + 'rename:rename_compiled', + 'clean:temp' ] ); + grunt.task.registerTask("configureBabel", "configures babel options", function() { + config.babel.bin.options.inputSourceMap = grunt.file.readJSON(concatFile); + }); + grunt.registerTask('jade_compile', ['jade', 'notify:jade_compile']); - grunt.registerTask('js_compile', ['concat:temp', 'uglify:bin', 'notify:js_compile', 'clean:temp']); - grunt.registerTask('sass_compile', ['sass:gh', 'sass:bin', 'notify:sass_compile']); + grunt.registerTask('js_compile', ['concat:temp', 'configureBabel', 'babel:bin', 'notify:js_compile', 'clean:temp']); + grunt.registerTask('sass_compile', ['sass:gh', 'sass:bin', 'postcss:gh', 'postcss:bin', 'notify:sass_compile']); grunt.registerTask('server', ['browserSync', 'notify:server']); grunt.registerTask('lint', ['removelogging:source']); - grunt.registerTask("monitor", ["concurrent:monitor"]); + grunt.registerTask('monitor', ["concurrent:monitor"]); + grunt.registerTask('travis', ['js_compile', 'sass_compile', 'jasmine']); }; - diff --git a/LICENSE b/LICENSE index dffae4373e..44bd03eab7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2015 Materialize +Copyright (c) 2014-2017 Materialize Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md old mode 100755 new mode 100644 index 441a0b7d51..d83647f87e --- a/README.md +++ b/README.md @@ -1,52 +1,90 @@ -![alt tag](https://raw.github.com/dogfalo/materialize/master/images/materialize.gif) -=========== +

+ + + -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/Dogfalo/materialize?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Materialize, a CSS Framework based on material design +

MaterializeCSS

-### Current Version : v0.97.0 +

+ Materialize, a CSS Framework based on material design. +
+ -- Browse the docs -- +
+
+ + Travis CI badge + + + npm version badge + + + CDNJS version badge + + + dependencies Status badge + + + devDependency Status badge + + + Gitter badge + +

-## Sass Requirements: -- Ruby Sass 3.3+, LibSass 0.6+ +## Table of Contents +- [Quickstart](#quickstart) +- [Documentation](#documentation) +- [Supported Browsers](#supported-browsers) +- [Changelog](#changelog) +- [Testing](#testing) +- [Contributing](#contributing) +- [Copyright and license](#copyright-and-license) + +## Quickstart: +Read the [getting started guide](http://materializecss.com/getting-started.html) for more information on how to use materialize. + +- [Download the latest release](https://github.com/Dogfalo/materialize/releases/latest) of materialize directly from GitHub. +- Clone the repo: `git clone https://github.com/Dogfalo/materialize.git` +- Include the files via [cdnjs](https://cdnjs.com/libraries/materialize). More [here](http://materializecss.com/getting-started.html). +- Install with [npm](https://www.npmjs.com): `npm install materialize-css` +- Install with [Bower](https://bower.io): `bower install materialize` +- Install with [Atmosphere](https://atmospherejs.com): `meteor add materialize:materialize` + +## Documentation +The documentation can be found at . To run the documentation locally on your machine, you need [Node.js](https://nodejs.org/en/) installed on your computer. + +### Running documentation locally +Run these commands to set up the documentation: + +```bash +git clone https://github.com/Dogfalo/materialize +cd materialize +npm install +``` + +Then run `grunt monitor` to compile the documentation. When it finishes, open a new browser window and navigate to `localhost:8000`. We use [BrowserSync](https://www.browsersync.io/) to display the documentation. + +### Documentation for previous releases +Previous releases and their documentation are available for [download](https://github.com/Dogfalo/materialize/releases). ## Supported Browsers: -Chrome 35+, Firefox 31+, Safari 7+, IE 10+ +Materialize is compatible with: + +- Chrome 35+ +- Firefox 31+ +- Safari 7+ +- Opera +- Edge +- IE 10+ ## Changelog -- v0.97.0 (June 21, 2015) - - **Documentation changed to use Official Google Icon web font** - - **Input errors added** - - Flicker on Firefox on dropdowns fixed - - Pagination made more responsive - - Modal now prevents scrolling - - Modal animation added - - Support for multiple modals added - - Programmatic control of FAB to open/close added - - Programmatic control of slider to play/pause added - - Plus many more bug fixes -- v0.96.1 (April 6, 2015) - - Dropdown Fixes - - Materialize functions fixed for Meteor -- v0.96.0 (April 1, 2015) - - **Toasts, transitions, scrollfire added under Materialize namespace** - - **Dropdown is now created as a child of its parent** - - Collapsibles supports nesting - - Modal Bottom Sheet added - - Indeterminate Checkboxes added - - New Checkbox Style Added - - Text Inputs supports placeholder/readonly - - Google Inbox-like Collapsible added - - Text Character Counter added - - Waves no longer breaks on SVG's - -- v0.95.3 (Feb 25, 2015) - - Parallax image loading / responsiveness fixes - - Date picker supports month/year as dropdown - - Dismissable collection items - - Avatar collection items - - Pagination Added - - ScrollFire fixes +For changelogs, check out [the Releases section of materialize](https://github.com/Dogfalo/materialize/releases) or the [CHANGELOG.md](CHANGELOG.md). +## Testing +We use Jasmine as our testing framework and we're trying to write a robust test suite for our components. If you want to help, [here's a starting guide on how to write tests in Jasmine](CONTRIBUTING.md#jasmine-testing-guide). ## Contributing -[Please read CONTRIBUTING.md for more information](CONTRIBUTING.md) +Check out the [CONTRIBUTING document](CONTRIBUTING.md) in the root of the repository to learn how you can contribute. You can also browse the [help-wanted](https://github.com/Dogfalo/materialize/labels/help-wanted) tag in our issue tracker to find things to do. + +## Copyright and license +Code copyright 2017 Materialize. Code released under the MIT license. diff --git a/about.html b/about.html deleted file mode 100644 index 9b82baea3c..0000000000 --- a/about.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - - - About - Materialize - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-

About

-

Learn about the Material Design and our Project Team.

-
-
-
- - -
-
-
-
-
- -
- -
- -
- -
-

Material Design

-

Created and designed by Google, Material Design is a design language that combines the classic principles of successful design - along with innovation and technology. Google's goal is to develop a system of design that allows for a unified user experience - across all their products on any platform.

-
- -
-
-

Principles

-
- -

Material is the metaphor

-

The metaphor of material defines the relationship between space and motion. The idea is that the technology is inspired by paper and ink and is utilized to facilitate creativity and innovation. Surfaces and edges provide familiar visual cues that allow users to quickly understand the technology beyond the physical world.

-
-
- -
- -

Bold, graphic, intentional

-

Elements and components such as grids, typography, color, and imagery are not only visually pleasing, but also create a sense of hierarchy, meaning, and focus. Emphasis on different actions and components create a visual guide for users.

-
-
- -
- -

Motion provides meaning

-

Motion allows the user to draw a parallel between what they see on the screen and in real life. By providing both feedback and familiarity, this allows the user to fully immerse him or herself into unfamiliar technology. Motion contains consistency and continuity in addition to giving users additional subconscious information about objects and transformations.

-
-
-
- - -
-
-

Meet the Team

-

We are a team of students from Carnegie Mellon University.

-
-
- -
-
-
-
- -
-
-
- -
-
-
-

Alvin Wang

-

Alvin is an Information Systems and Human Computer Interaction Major. He worked as a Software Engineer at Fidelity Investments this past summer.

-
-
- -
-
-
- -
-
-
-

Alan Chang

-

Alan is an Information Systems major with a minor in computer science. He worked at as a Front End Developer at Shift Collaborative this past summer.

-
-
- -
-
-
- -
-
-
-

Alex Mark

-

Alex is an Information Systems major with a minor in Human Computer Interaction. He worked as a software developer for Intuit this past summer.

-
-
- -
-
-
- -
-
-
-

Kevin Louie

-

Kevin is an Information Systems major with a minor in Human Computer Interaction. This past summer, he worked as a technology analyst at PPG Industries.

-
-
-
- -
- -
- -
- -
-
-
-
-
-
-
Help Materialize Grow
-

We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

-
- - - -
- -
-
-
Join the Discussion
-

We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

- Chat -
-
-
Connect
- -
- -
-
-
-
-
- -
- - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/badges.html b/badges.html deleted file mode 100644 index 4b9c9f4633..0000000000 --- a/badges.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - Badges - Materialize - - - - - - - - - - - - - - - - -
- -
- -
-
-
- -
- - -
- -
-
-

Badges can notify you that there are new or unread messages or notifications. Add the new class to the badge to give it the background.

-

Collections

- -
- Alan1 - Alan4 - Alan - Alan14 -
-

-  <div class="collection">
-    <a href="#!" class="collection-item">Alan<span class="badge">1</span></a>
-    <a href="#!" class="collection-item">Alan<span class="new badge">4</span></a>
-    <a href="#!" class="collection-item">Alan</a>
-    <a href="#!" class="collection-item">Alan<span class="badge">14</span></a>
-  </div>
-            
-
-
-
- - - - - -
- -
-
-
- - -
-
- -
-
-
- -
-
- - -
-
-
-
-
Help Materialize Grow
-

We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

-
- - - -
- -
-
-
Join the Discussion
-

We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

- Chat -
-
-
Connect
- -
- -
-
-
-
-
- -
- - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bin/materialize-src-v0.97.0.zip b/bin/materialize-src-v0.97.0.zip deleted file mode 100644 index 83ed3ae8db..0000000000 Binary files a/bin/materialize-src-v0.97.0.zip and /dev/null differ diff --git a/bin/materialize-v0.97.0.zip b/bin/materialize-v0.97.0.zip deleted file mode 100644 index deaa725298..0000000000 Binary files a/bin/materialize-v0.97.0.zip and /dev/null differ diff --git a/bin/materialize.css b/bin/materialize.css deleted file mode 100644 index 33419d4f36..0000000000 --- a/bin/materialize.css +++ /dev/null @@ -1,8182 +0,0 @@ -.materialize-red.lighten-5 { - background-color: #fdeaeb !important; } - -.materialize-red-text.text-lighten-5 { - color: #fdeaeb !important; } - -.materialize-red.lighten-4 { - background-color: #f8c1c3 !important; } - -.materialize-red-text.text-lighten-4 { - color: #f8c1c3 !important; } - -.materialize-red.lighten-3 { - background-color: #f3989b !important; } - -.materialize-red-text.text-lighten-3 { - color: #f3989b !important; } - -.materialize-red.lighten-2 { - background-color: #ee6e73 !important; } - -.materialize-red-text.text-lighten-2 { - color: #ee6e73 !important; } - -.materialize-red.lighten-1 { - background-color: #ea454b !important; } - -.materialize-red-text.text-lighten-1 { - color: #ea454b !important; } - -.materialize-red { - background-color: #e51c23 !important; } - -.materialize-red-text { - color: #e51c23 !important; } - -.materialize-red.darken-1 { - background-color: #d0181e !important; } - -.materialize-red-text.text-darken-1 { - color: #d0181e !important; } - -.materialize-red.darken-2 { - background-color: #b9151b !important; } - -.materialize-red-text.text-darken-2 { - color: #b9151b !important; } - -.materialize-red.darken-3 { - background-color: #a21318 !important; } - -.materialize-red-text.text-darken-3 { - color: #a21318 !important; } - -.materialize-red.darken-4 { - background-color: #8b1014 !important; } - -.materialize-red-text.text-darken-4 { - color: #8b1014 !important; } - -.red.lighten-5 { - background-color: #FFEBEE !important; } - -.red-text.text-lighten-5 { - color: #FFEBEE !important; } - -.red.lighten-4 { - background-color: #FFCDD2 !important; } - -.red-text.text-lighten-4 { - color: #FFCDD2 !important; } - -.red.lighten-3 { - background-color: #EF9A9A !important; } - -.red-text.text-lighten-3 { - color: #EF9A9A !important; } - -.red.lighten-2 { - background-color: #E57373 !important; } - -.red-text.text-lighten-2 { - color: #E57373 !important; } - -.red.lighten-1 { - background-color: #EF5350 !important; } - -.red-text.text-lighten-1 { - color: #EF5350 !important; } - -.red { - background-color: #F44336 !important; } - -.red-text { - color: #F44336 !important; } - -.red.darken-1 { - background-color: #E53935 !important; } - -.red-text.text-darken-1 { - color: #E53935 !important; } - -.red.darken-2 { - background-color: #D32F2F !important; } - -.red-text.text-darken-2 { - color: #D32F2F !important; } - -.red.darken-3 { - background-color: #C62828 !important; } - -.red-text.text-darken-3 { - color: #C62828 !important; } - -.red.darken-4 { - background-color: #B71C1C !important; } - -.red-text.text-darken-4 { - color: #B71C1C !important; } - -.red.accent-1 { - background-color: #FF8A80 !important; } - -.red-text.text-accent-1 { - color: #FF8A80 !important; } - -.red.accent-2 { - background-color: #FF5252 !important; } - -.red-text.text-accent-2 { - color: #FF5252 !important; } - -.red.accent-3 { - background-color: #FF1744 !important; } - -.red-text.text-accent-3 { - color: #FF1744 !important; } - -.red.accent-4 { - background-color: #D50000 !important; } - -.red-text.text-accent-4 { - color: #D50000 !important; } - -.pink.lighten-5 { - background-color: #fce4ec !important; } - -.pink-text.text-lighten-5 { - color: #fce4ec !important; } - -.pink.lighten-4 { - background-color: #f8bbd0 !important; } - -.pink-text.text-lighten-4 { - color: #f8bbd0 !important; } - -.pink.lighten-3 { - background-color: #f48fb1 !important; } - -.pink-text.text-lighten-3 { - color: #f48fb1 !important; } - -.pink.lighten-2 { - background-color: #f06292 !important; } - -.pink-text.text-lighten-2 { - color: #f06292 !important; } - -.pink.lighten-1 { - background-color: #ec407a !important; } - -.pink-text.text-lighten-1 { - color: #ec407a !important; } - -.pink { - background-color: #e91e63 !important; } - -.pink-text { - color: #e91e63 !important; } - -.pink.darken-1 { - background-color: #d81b60 !important; } - -.pink-text.text-darken-1 { - color: #d81b60 !important; } - -.pink.darken-2 { - background-color: #c2185b !important; } - -.pink-text.text-darken-2 { - color: #c2185b !important; } - -.pink.darken-3 { - background-color: #ad1457 !important; } - -.pink-text.text-darken-3 { - color: #ad1457 !important; } - -.pink.darken-4 { - background-color: #880e4f !important; } - -.pink-text.text-darken-4 { - color: #880e4f !important; } - -.pink.accent-1 { - background-color: #ff80ab !important; } - -.pink-text.text-accent-1 { - color: #ff80ab !important; } - -.pink.accent-2 { - background-color: #ff4081 !important; } - -.pink-text.text-accent-2 { - color: #ff4081 !important; } - -.pink.accent-3 { - background-color: #f50057 !important; } - -.pink-text.text-accent-3 { - color: #f50057 !important; } - -.pink.accent-4 { - background-color: #c51162 !important; } - -.pink-text.text-accent-4 { - color: #c51162 !important; } - -.purple.lighten-5 { - background-color: #f3e5f5 !important; } - -.purple-text.text-lighten-5 { - color: #f3e5f5 !important; } - -.purple.lighten-4 { - background-color: #e1bee7 !important; } - -.purple-text.text-lighten-4 { - color: #e1bee7 !important; } - -.purple.lighten-3 { - background-color: #ce93d8 !important; } - -.purple-text.text-lighten-3 { - color: #ce93d8 !important; } - -.purple.lighten-2 { - background-color: #ba68c8 !important; } - -.purple-text.text-lighten-2 { - color: #ba68c8 !important; } - -.purple.lighten-1 { - background-color: #ab47bc !important; } - -.purple-text.text-lighten-1 { - color: #ab47bc !important; } - -.purple { - background-color: #9c27b0 !important; } - -.purple-text { - color: #9c27b0 !important; } - -.purple.darken-1 { - background-color: #8e24aa !important; } - -.purple-text.text-darken-1 { - color: #8e24aa !important; } - -.purple.darken-2 { - background-color: #7b1fa2 !important; } - -.purple-text.text-darken-2 { - color: #7b1fa2 !important; } - -.purple.darken-3 { - background-color: #6a1b9a !important; } - -.purple-text.text-darken-3 { - color: #6a1b9a !important; } - -.purple.darken-4 { - background-color: #4a148c !important; } - -.purple-text.text-darken-4 { - color: #4a148c !important; } - -.purple.accent-1 { - background-color: #ea80fc !important; } - -.purple-text.text-accent-1 { - color: #ea80fc !important; } - -.purple.accent-2 { - background-color: #e040fb !important; } - -.purple-text.text-accent-2 { - color: #e040fb !important; } - -.purple.accent-3 { - background-color: #d500f9 !important; } - -.purple-text.text-accent-3 { - color: #d500f9 !important; } - -.purple.accent-4 { - background-color: #aa00ff !important; } - -.purple-text.text-accent-4 { - color: #aa00ff !important; } - -.deep-purple.lighten-5 { - background-color: #ede7f6 !important; } - -.deep-purple-text.text-lighten-5 { - color: #ede7f6 !important; } - -.deep-purple.lighten-4 { - background-color: #d1c4e9 !important; } - -.deep-purple-text.text-lighten-4 { - color: #d1c4e9 !important; } - -.deep-purple.lighten-3 { - background-color: #b39ddb !important; } - -.deep-purple-text.text-lighten-3 { - color: #b39ddb !important; } - -.deep-purple.lighten-2 { - background-color: #9575cd !important; } - -.deep-purple-text.text-lighten-2 { - color: #9575cd !important; } - -.deep-purple.lighten-1 { - background-color: #7e57c2 !important; } - -.deep-purple-text.text-lighten-1 { - color: #7e57c2 !important; } - -.deep-purple { - background-color: #673ab7 !important; } - -.deep-purple-text { - color: #673ab7 !important; } - -.deep-purple.darken-1 { - background-color: #5e35b1 !important; } - -.deep-purple-text.text-darken-1 { - color: #5e35b1 !important; } - -.deep-purple.darken-2 { - background-color: #512da8 !important; } - -.deep-purple-text.text-darken-2 { - color: #512da8 !important; } - -.deep-purple.darken-3 { - background-color: #4527a0 !important; } - -.deep-purple-text.text-darken-3 { - color: #4527a0 !important; } - -.deep-purple.darken-4 { - background-color: #311b92 !important; } - -.deep-purple-text.text-darken-4 { - color: #311b92 !important; } - -.deep-purple.accent-1 { - background-color: #b388ff !important; } - -.deep-purple-text.text-accent-1 { - color: #b388ff !important; } - -.deep-purple.accent-2 { - background-color: #7c4dff !important; } - -.deep-purple-text.text-accent-2 { - color: #7c4dff !important; } - -.deep-purple.accent-3 { - background-color: #651fff !important; } - -.deep-purple-text.text-accent-3 { - color: #651fff !important; } - -.deep-purple.accent-4 { - background-color: #6200ea !important; } - -.deep-purple-text.text-accent-4 { - color: #6200ea !important; } - -.indigo.lighten-5 { - background-color: #e8eaf6 !important; } - -.indigo-text.text-lighten-5 { - color: #e8eaf6 !important; } - -.indigo.lighten-4 { - background-color: #c5cae9 !important; } - -.indigo-text.text-lighten-4 { - color: #c5cae9 !important; } - -.indigo.lighten-3 { - background-color: #9fa8da !important; } - -.indigo-text.text-lighten-3 { - color: #9fa8da !important; } - -.indigo.lighten-2 { - background-color: #7986cb !important; } - -.indigo-text.text-lighten-2 { - color: #7986cb !important; } - -.indigo.lighten-1 { - background-color: #5c6bc0 !important; } - -.indigo-text.text-lighten-1 { - color: #5c6bc0 !important; } - -.indigo { - background-color: #3f51b5 !important; } - -.indigo-text { - color: #3f51b5 !important; } - -.indigo.darken-1 { - background-color: #3949ab !important; } - -.indigo-text.text-darken-1 { - color: #3949ab !important; } - -.indigo.darken-2 { - background-color: #303f9f !important; } - -.indigo-text.text-darken-2 { - color: #303f9f !important; } - -.indigo.darken-3 { - background-color: #283593 !important; } - -.indigo-text.text-darken-3 { - color: #283593 !important; } - -.indigo.darken-4 { - background-color: #1a237e !important; } - -.indigo-text.text-darken-4 { - color: #1a237e !important; } - -.indigo.accent-1 { - background-color: #8c9eff !important; } - -.indigo-text.text-accent-1 { - color: #8c9eff !important; } - -.indigo.accent-2 { - background-color: #536dfe !important; } - -.indigo-text.text-accent-2 { - color: #536dfe !important; } - -.indigo.accent-3 { - background-color: #3d5afe !important; } - -.indigo-text.text-accent-3 { - color: #3d5afe !important; } - -.indigo.accent-4 { - background-color: #304ffe !important; } - -.indigo-text.text-accent-4 { - color: #304ffe !important; } - -.blue.lighten-5 { - background-color: #E3F2FD !important; } - -.blue-text.text-lighten-5 { - color: #E3F2FD !important; } - -.blue.lighten-4 { - background-color: #BBDEFB !important; } - -.blue-text.text-lighten-4 { - color: #BBDEFB !important; } - -.blue.lighten-3 { - background-color: #90CAF9 !important; } - -.blue-text.text-lighten-3 { - color: #90CAF9 !important; } - -.blue.lighten-2 { - background-color: #64B5F6 !important; } - -.blue-text.text-lighten-2 { - color: #64B5F6 !important; } - -.blue.lighten-1 { - background-color: #42A5F5 !important; } - -.blue-text.text-lighten-1 { - color: #42A5F5 !important; } - -.blue { - background-color: #2196F3 !important; } - -.blue-text { - color: #2196F3 !important; } - -.blue.darken-1 { - background-color: #1E88E5 !important; } - -.blue-text.text-darken-1 { - color: #1E88E5 !important; } - -.blue.darken-2 { - background-color: #1976D2 !important; } - -.blue-text.text-darken-2 { - color: #1976D2 !important; } - -.blue.darken-3 { - background-color: #1565C0 !important; } - -.blue-text.text-darken-3 { - color: #1565C0 !important; } - -.blue.darken-4 { - background-color: #0D47A1 !important; } - -.blue-text.text-darken-4 { - color: #0D47A1 !important; } - -.blue.accent-1 { - background-color: #82B1FF !important; } - -.blue-text.text-accent-1 { - color: #82B1FF !important; } - -.blue.accent-2 { - background-color: #448AFF !important; } - -.blue-text.text-accent-2 { - color: #448AFF !important; } - -.blue.accent-3 { - background-color: #2979FF !important; } - -.blue-text.text-accent-3 { - color: #2979FF !important; } - -.blue.accent-4 { - background-color: #2962FF !important; } - -.blue-text.text-accent-4 { - color: #2962FF !important; } - -.light-blue.lighten-5 { - background-color: #e1f5fe !important; } - -.light-blue-text.text-lighten-5 { - color: #e1f5fe !important; } - -.light-blue.lighten-4 { - background-color: #b3e5fc !important; } - -.light-blue-text.text-lighten-4 { - color: #b3e5fc !important; } - -.light-blue.lighten-3 { - background-color: #81d4fa !important; } - -.light-blue-text.text-lighten-3 { - color: #81d4fa !important; } - -.light-blue.lighten-2 { - background-color: #4fc3f7 !important; } - -.light-blue-text.text-lighten-2 { - color: #4fc3f7 !important; } - -.light-blue.lighten-1 { - background-color: #29b6f6 !important; } - -.light-blue-text.text-lighten-1 { - color: #29b6f6 !important; } - -.light-blue { - background-color: #03a9f4 !important; } - -.light-blue-text { - color: #03a9f4 !important; } - -.light-blue.darken-1 { - background-color: #039be5 !important; } - -.light-blue-text.text-darken-1 { - color: #039be5 !important; } - -.light-blue.darken-2 { - background-color: #0288d1 !important; } - -.light-blue-text.text-darken-2 { - color: #0288d1 !important; } - -.light-blue.darken-3 { - background-color: #0277bd !important; } - -.light-blue-text.text-darken-3 { - color: #0277bd !important; } - -.light-blue.darken-4 { - background-color: #01579b !important; } - -.light-blue-text.text-darken-4 { - color: #01579b !important; } - -.light-blue.accent-1 { - background-color: #80d8ff !important; } - -.light-blue-text.text-accent-1 { - color: #80d8ff !important; } - -.light-blue.accent-2 { - background-color: #40c4ff !important; } - -.light-blue-text.text-accent-2 { - color: #40c4ff !important; } - -.light-blue.accent-3 { - background-color: #00b0ff !important; } - -.light-blue-text.text-accent-3 { - color: #00b0ff !important; } - -.light-blue.accent-4 { - background-color: #0091ea !important; } - -.light-blue-text.text-accent-4 { - color: #0091ea !important; } - -.cyan.lighten-5 { - background-color: #e0f7fa !important; } - -.cyan-text.text-lighten-5 { - color: #e0f7fa !important; } - -.cyan.lighten-4 { - background-color: #b2ebf2 !important; } - -.cyan-text.text-lighten-4 { - color: #b2ebf2 !important; } - -.cyan.lighten-3 { - background-color: #80deea !important; } - -.cyan-text.text-lighten-3 { - color: #80deea !important; } - -.cyan.lighten-2 { - background-color: #4dd0e1 !important; } - -.cyan-text.text-lighten-2 { - color: #4dd0e1 !important; } - -.cyan.lighten-1 { - background-color: #26c6da !important; } - -.cyan-text.text-lighten-1 { - color: #26c6da !important; } - -.cyan { - background-color: #00bcd4 !important; } - -.cyan-text { - color: #00bcd4 !important; } - -.cyan.darken-1 { - background-color: #00acc1 !important; } - -.cyan-text.text-darken-1 { - color: #00acc1 !important; } - -.cyan.darken-2 { - background-color: #0097a7 !important; } - -.cyan-text.text-darken-2 { - color: #0097a7 !important; } - -.cyan.darken-3 { - background-color: #00838f !important; } - -.cyan-text.text-darken-3 { - color: #00838f !important; } - -.cyan.darken-4 { - background-color: #006064 !important; } - -.cyan-text.text-darken-4 { - color: #006064 !important; } - -.cyan.accent-1 { - background-color: #84ffff !important; } - -.cyan-text.text-accent-1 { - color: #84ffff !important; } - -.cyan.accent-2 { - background-color: #18ffff !important; } - -.cyan-text.text-accent-2 { - color: #18ffff !important; } - -.cyan.accent-3 { - background-color: #00e5ff !important; } - -.cyan-text.text-accent-3 { - color: #00e5ff !important; } - -.cyan.accent-4 { - background-color: #00b8d4 !important; } - -.cyan-text.text-accent-4 { - color: #00b8d4 !important; } - -.teal.lighten-5 { - background-color: #e0f2f1 !important; } - -.teal-text.text-lighten-5 { - color: #e0f2f1 !important; } - -.teal.lighten-4 { - background-color: #b2dfdb !important; } - -.teal-text.text-lighten-4 { - color: #b2dfdb !important; } - -.teal.lighten-3 { - background-color: #80cbc4 !important; } - -.teal-text.text-lighten-3 { - color: #80cbc4 !important; } - -.teal.lighten-2 { - background-color: #4db6ac !important; } - -.teal-text.text-lighten-2 { - color: #4db6ac !important; } - -.teal.lighten-1 { - background-color: #26a69a !important; } - -.teal-text.text-lighten-1 { - color: #26a69a !important; } - -.teal { - background-color: #009688 !important; } - -.teal-text { - color: #009688 !important; } - -.teal.darken-1 { - background-color: #00897b !important; } - -.teal-text.text-darken-1 { - color: #00897b !important; } - -.teal.darken-2 { - background-color: #00796b !important; } - -.teal-text.text-darken-2 { - color: #00796b !important; } - -.teal.darken-3 { - background-color: #00695c !important; } - -.teal-text.text-darken-3 { - color: #00695c !important; } - -.teal.darken-4 { - background-color: #004d40 !important; } - -.teal-text.text-darken-4 { - color: #004d40 !important; } - -.teal.accent-1 { - background-color: #a7ffeb !important; } - -.teal-text.text-accent-1 { - color: #a7ffeb !important; } - -.teal.accent-2 { - background-color: #64ffda !important; } - -.teal-text.text-accent-2 { - color: #64ffda !important; } - -.teal.accent-3 { - background-color: #1de9b6 !important; } - -.teal-text.text-accent-3 { - color: #1de9b6 !important; } - -.teal.accent-4 { - background-color: #00bfa5 !important; } - -.teal-text.text-accent-4 { - color: #00bfa5 !important; } - -.green.lighten-5 { - background-color: #E8F5E9 !important; } - -.green-text.text-lighten-5 { - color: #E8F5E9 !important; } - -.green.lighten-4 { - background-color: #C8E6C9 !important; } - -.green-text.text-lighten-4 { - color: #C8E6C9 !important; } - -.green.lighten-3 { - background-color: #A5D6A7 !important; } - -.green-text.text-lighten-3 { - color: #A5D6A7 !important; } - -.green.lighten-2 { - background-color: #81C784 !important; } - -.green-text.text-lighten-2 { - color: #81C784 !important; } - -.green.lighten-1 { - background-color: #66BB6A !important; } - -.green-text.text-lighten-1 { - color: #66BB6A !important; } - -.green { - background-color: #4CAF50 !important; } - -.green-text { - color: #4CAF50 !important; } - -.green.darken-1 { - background-color: #43A047 !important; } - -.green-text.text-darken-1 { - color: #43A047 !important; } - -.green.darken-2 { - background-color: #388E3C !important; } - -.green-text.text-darken-2 { - color: #388E3C !important; } - -.green.darken-3 { - background-color: #2E7D32 !important; } - -.green-text.text-darken-3 { - color: #2E7D32 !important; } - -.green.darken-4 { - background-color: #1B5E20 !important; } - -.green-text.text-darken-4 { - color: #1B5E20 !important; } - -.green.accent-1 { - background-color: #B9F6CA !important; } - -.green-text.text-accent-1 { - color: #B9F6CA !important; } - -.green.accent-2 { - background-color: #69F0AE !important; } - -.green-text.text-accent-2 { - color: #69F0AE !important; } - -.green.accent-3 { - background-color: #00E676 !important; } - -.green-text.text-accent-3 { - color: #00E676 !important; } - -.green.accent-4 { - background-color: #00C853 !important; } - -.green-text.text-accent-4 { - color: #00C853 !important; } - -.light-green.lighten-5 { - background-color: #f1f8e9 !important; } - -.light-green-text.text-lighten-5 { - color: #f1f8e9 !important; } - -.light-green.lighten-4 { - background-color: #dcedc8 !important; } - -.light-green-text.text-lighten-4 { - color: #dcedc8 !important; } - -.light-green.lighten-3 { - background-color: #c5e1a5 !important; } - -.light-green-text.text-lighten-3 { - color: #c5e1a5 !important; } - -.light-green.lighten-2 { - background-color: #aed581 !important; } - -.light-green-text.text-lighten-2 { - color: #aed581 !important; } - -.light-green.lighten-1 { - background-color: #9ccc65 !important; } - -.light-green-text.text-lighten-1 { - color: #9ccc65 !important; } - -.light-green { - background-color: #8bc34a !important; } - -.light-green-text { - color: #8bc34a !important; } - -.light-green.darken-1 { - background-color: #7cb342 !important; } - -.light-green-text.text-darken-1 { - color: #7cb342 !important; } - -.light-green.darken-2 { - background-color: #689f38 !important; } - -.light-green-text.text-darken-2 { - color: #689f38 !important; } - -.light-green.darken-3 { - background-color: #558b2f !important; } - -.light-green-text.text-darken-3 { - color: #558b2f !important; } - -.light-green.darken-4 { - background-color: #33691e !important; } - -.light-green-text.text-darken-4 { - color: #33691e !important; } - -.light-green.accent-1 { - background-color: #ccff90 !important; } - -.light-green-text.text-accent-1 { - color: #ccff90 !important; } - -.light-green.accent-2 { - background-color: #b2ff59 !important; } - -.light-green-text.text-accent-2 { - color: #b2ff59 !important; } - -.light-green.accent-3 { - background-color: #76ff03 !important; } - -.light-green-text.text-accent-3 { - color: #76ff03 !important; } - -.light-green.accent-4 { - background-color: #64dd17 !important; } - -.light-green-text.text-accent-4 { - color: #64dd17 !important; } - -.lime.lighten-5 { - background-color: #f9fbe7 !important; } - -.lime-text.text-lighten-5 { - color: #f9fbe7 !important; } - -.lime.lighten-4 { - background-color: #f0f4c3 !important; } - -.lime-text.text-lighten-4 { - color: #f0f4c3 !important; } - -.lime.lighten-3 { - background-color: #e6ee9c !important; } - -.lime-text.text-lighten-3 { - color: #e6ee9c !important; } - -.lime.lighten-2 { - background-color: #dce775 !important; } - -.lime-text.text-lighten-2 { - color: #dce775 !important; } - -.lime.lighten-1 { - background-color: #d4e157 !important; } - -.lime-text.text-lighten-1 { - color: #d4e157 !important; } - -.lime { - background-color: #cddc39 !important; } - -.lime-text { - color: #cddc39 !important; } - -.lime.darken-1 { - background-color: #c0ca33 !important; } - -.lime-text.text-darken-1 { - color: #c0ca33 !important; } - -.lime.darken-2 { - background-color: #afb42b !important; } - -.lime-text.text-darken-2 { - color: #afb42b !important; } - -.lime.darken-3 { - background-color: #9e9d24 !important; } - -.lime-text.text-darken-3 { - color: #9e9d24 !important; } - -.lime.darken-4 { - background-color: #827717 !important; } - -.lime-text.text-darken-4 { - color: #827717 !important; } - -.lime.accent-1 { - background-color: #f4ff81 !important; } - -.lime-text.text-accent-1 { - color: #f4ff81 !important; } - -.lime.accent-2 { - background-color: #eeff41 !important; } - -.lime-text.text-accent-2 { - color: #eeff41 !important; } - -.lime.accent-3 { - background-color: #c6ff00 !important; } - -.lime-text.text-accent-3 { - color: #c6ff00 !important; } - -.lime.accent-4 { - background-color: #aeea00 !important; } - -.lime-text.text-accent-4 { - color: #aeea00 !important; } - -.yellow.lighten-5 { - background-color: #fffde7 !important; } - -.yellow-text.text-lighten-5 { - color: #fffde7 !important; } - -.yellow.lighten-4 { - background-color: #fff9c4 !important; } - -.yellow-text.text-lighten-4 { - color: #fff9c4 !important; } - -.yellow.lighten-3 { - background-color: #fff59d !important; } - -.yellow-text.text-lighten-3 { - color: #fff59d !important; } - -.yellow.lighten-2 { - background-color: #fff176 !important; } - -.yellow-text.text-lighten-2 { - color: #fff176 !important; } - -.yellow.lighten-1 { - background-color: #ffee58 !important; } - -.yellow-text.text-lighten-1 { - color: #ffee58 !important; } - -.yellow { - background-color: #ffeb3b !important; } - -.yellow-text { - color: #ffeb3b !important; } - -.yellow.darken-1 { - background-color: #fdd835 !important; } - -.yellow-text.text-darken-1 { - color: #fdd835 !important; } - -.yellow.darken-2 { - background-color: #fbc02d !important; } - -.yellow-text.text-darken-2 { - color: #fbc02d !important; } - -.yellow.darken-3 { - background-color: #f9a825 !important; } - -.yellow-text.text-darken-3 { - color: #f9a825 !important; } - -.yellow.darken-4 { - background-color: #f57f17 !important; } - -.yellow-text.text-darken-4 { - color: #f57f17 !important; } - -.yellow.accent-1 { - background-color: #ffff8d !important; } - -.yellow-text.text-accent-1 { - color: #ffff8d !important; } - -.yellow.accent-2 { - background-color: #ffff00 !important; } - -.yellow-text.text-accent-2 { - color: #ffff00 !important; } - -.yellow.accent-3 { - background-color: #ffea00 !important; } - -.yellow-text.text-accent-3 { - color: #ffea00 !important; } - -.yellow.accent-4 { - background-color: #ffd600 !important; } - -.yellow-text.text-accent-4 { - color: #ffd600 !important; } - -.amber.lighten-5 { - background-color: #fff8e1 !important; } - -.amber-text.text-lighten-5 { - color: #fff8e1 !important; } - -.amber.lighten-4 { - background-color: #ffecb3 !important; } - -.amber-text.text-lighten-4 { - color: #ffecb3 !important; } - -.amber.lighten-3 { - background-color: #ffe082 !important; } - -.amber-text.text-lighten-3 { - color: #ffe082 !important; } - -.amber.lighten-2 { - background-color: #ffd54f !important; } - -.amber-text.text-lighten-2 { - color: #ffd54f !important; } - -.amber.lighten-1 { - background-color: #ffca28 !important; } - -.amber-text.text-lighten-1 { - color: #ffca28 !important; } - -.amber { - background-color: #ffc107 !important; } - -.amber-text { - color: #ffc107 !important; } - -.amber.darken-1 { - background-color: #ffb300 !important; } - -.amber-text.text-darken-1 { - color: #ffb300 !important; } - -.amber.darken-2 { - background-color: #ffa000 !important; } - -.amber-text.text-darken-2 { - color: #ffa000 !important; } - -.amber.darken-3 { - background-color: #ff8f00 !important; } - -.amber-text.text-darken-3 { - color: #ff8f00 !important; } - -.amber.darken-4 { - background-color: #ff6f00 !important; } - -.amber-text.text-darken-4 { - color: #ff6f00 !important; } - -.amber.accent-1 { - background-color: #ffe57f !important; } - -.amber-text.text-accent-1 { - color: #ffe57f !important; } - -.amber.accent-2 { - background-color: #ffd740 !important; } - -.amber-text.text-accent-2 { - color: #ffd740 !important; } - -.amber.accent-3 { - background-color: #ffc400 !important; } - -.amber-text.text-accent-3 { - color: #ffc400 !important; } - -.amber.accent-4 { - background-color: #ffab00 !important; } - -.amber-text.text-accent-4 { - color: #ffab00 !important; } - -.orange.lighten-5 { - background-color: #fff3e0 !important; } - -.orange-text.text-lighten-5 { - color: #fff3e0 !important; } - -.orange.lighten-4 { - background-color: #ffe0b2 !important; } - -.orange-text.text-lighten-4 { - color: #ffe0b2 !important; } - -.orange.lighten-3 { - background-color: #ffcc80 !important; } - -.orange-text.text-lighten-3 { - color: #ffcc80 !important; } - -.orange.lighten-2 { - background-color: #ffb74d !important; } - -.orange-text.text-lighten-2 { - color: #ffb74d !important; } - -.orange.lighten-1 { - background-color: #ffa726 !important; } - -.orange-text.text-lighten-1 { - color: #ffa726 !important; } - -.orange { - background-color: #ff9800 !important; } - -.orange-text { - color: #ff9800 !important; } - -.orange.darken-1 { - background-color: #fb8c00 !important; } - -.orange-text.text-darken-1 { - color: #fb8c00 !important; } - -.orange.darken-2 { - background-color: #f57c00 !important; } - -.orange-text.text-darken-2 { - color: #f57c00 !important; } - -.orange.darken-3 { - background-color: #ef6c00 !important; } - -.orange-text.text-darken-3 { - color: #ef6c00 !important; } - -.orange.darken-4 { - background-color: #e65100 !important; } - -.orange-text.text-darken-4 { - color: #e65100 !important; } - -.orange.accent-1 { - background-color: #ffd180 !important; } - -.orange-text.text-accent-1 { - color: #ffd180 !important; } - -.orange.accent-2 { - background-color: #ffab40 !important; } - -.orange-text.text-accent-2 { - color: #ffab40 !important; } - -.orange.accent-3 { - background-color: #ff9100 !important; } - -.orange-text.text-accent-3 { - color: #ff9100 !important; } - -.orange.accent-4 { - background-color: #ff6d00 !important; } - -.orange-text.text-accent-4 { - color: #ff6d00 !important; } - -.deep-orange.lighten-5 { - background-color: #fbe9e7 !important; } - -.deep-orange-text.text-lighten-5 { - color: #fbe9e7 !important; } - -.deep-orange.lighten-4 { - background-color: #ffccbc !important; } - -.deep-orange-text.text-lighten-4 { - color: #ffccbc !important; } - -.deep-orange.lighten-3 { - background-color: #ffab91 !important; } - -.deep-orange-text.text-lighten-3 { - color: #ffab91 !important; } - -.deep-orange.lighten-2 { - background-color: #ff8a65 !important; } - -.deep-orange-text.text-lighten-2 { - color: #ff8a65 !important; } - -.deep-orange.lighten-1 { - background-color: #ff7043 !important; } - -.deep-orange-text.text-lighten-1 { - color: #ff7043 !important; } - -.deep-orange { - background-color: #ff5722 !important; } - -.deep-orange-text { - color: #ff5722 !important; } - -.deep-orange.darken-1 { - background-color: #f4511e !important; } - -.deep-orange-text.text-darken-1 { - color: #f4511e !important; } - -.deep-orange.darken-2 { - background-color: #e64a19 !important; } - -.deep-orange-text.text-darken-2 { - color: #e64a19 !important; } - -.deep-orange.darken-3 { - background-color: #d84315 !important; } - -.deep-orange-text.text-darken-3 { - color: #d84315 !important; } - -.deep-orange.darken-4 { - background-color: #bf360c !important; } - -.deep-orange-text.text-darken-4 { - color: #bf360c !important; } - -.deep-orange.accent-1 { - background-color: #ff9e80 !important; } - -.deep-orange-text.text-accent-1 { - color: #ff9e80 !important; } - -.deep-orange.accent-2 { - background-color: #ff6e40 !important; } - -.deep-orange-text.text-accent-2 { - color: #ff6e40 !important; } - -.deep-orange.accent-3 { - background-color: #ff3d00 !important; } - -.deep-orange-text.text-accent-3 { - color: #ff3d00 !important; } - -.deep-orange.accent-4 { - background-color: #dd2c00 !important; } - -.deep-orange-text.text-accent-4 { - color: #dd2c00 !important; } - -.brown.lighten-5 { - background-color: #efebe9 !important; } - -.brown-text.text-lighten-5 { - color: #efebe9 !important; } - -.brown.lighten-4 { - background-color: #d7ccc8 !important; } - -.brown-text.text-lighten-4 { - color: #d7ccc8 !important; } - -.brown.lighten-3 { - background-color: #bcaaa4 !important; } - -.brown-text.text-lighten-3 { - color: #bcaaa4 !important; } - -.brown.lighten-2 { - background-color: #a1887f !important; } - -.brown-text.text-lighten-2 { - color: #a1887f !important; } - -.brown.lighten-1 { - background-color: #8d6e63 !important; } - -.brown-text.text-lighten-1 { - color: #8d6e63 !important; } - -.brown { - background-color: #795548 !important; } - -.brown-text { - color: #795548 !important; } - -.brown.darken-1 { - background-color: #6d4c41 !important; } - -.brown-text.text-darken-1 { - color: #6d4c41 !important; } - -.brown.darken-2 { - background-color: #5d4037 !important; } - -.brown-text.text-darken-2 { - color: #5d4037 !important; } - -.brown.darken-3 { - background-color: #4e342e !important; } - -.brown-text.text-darken-3 { - color: #4e342e !important; } - -.brown.darken-4 { - background-color: #3e2723 !important; } - -.brown-text.text-darken-4 { - color: #3e2723 !important; } - -.blue-grey.lighten-5 { - background-color: #eceff1 !important; } - -.blue-grey-text.text-lighten-5 { - color: #eceff1 !important; } - -.blue-grey.lighten-4 { - background-color: #cfd8dc !important; } - -.blue-grey-text.text-lighten-4 { - color: #cfd8dc !important; } - -.blue-grey.lighten-3 { - background-color: #b0bec5 !important; } - -.blue-grey-text.text-lighten-3 { - color: #b0bec5 !important; } - -.blue-grey.lighten-2 { - background-color: #90a4ae !important; } - -.blue-grey-text.text-lighten-2 { - color: #90a4ae !important; } - -.blue-grey.lighten-1 { - background-color: #78909c !important; } - -.blue-grey-text.text-lighten-1 { - color: #78909c !important; } - -.blue-grey { - background-color: #607d8b !important; } - -.blue-grey-text { - color: #607d8b !important; } - -.blue-grey.darken-1 { - background-color: #546e7a !important; } - -.blue-grey-text.text-darken-1 { - color: #546e7a !important; } - -.blue-grey.darken-2 { - background-color: #455a64 !important; } - -.blue-grey-text.text-darken-2 { - color: #455a64 !important; } - -.blue-grey.darken-3 { - background-color: #37474f !important; } - -.blue-grey-text.text-darken-3 { - color: #37474f !important; } - -.blue-grey.darken-4 { - background-color: #263238 !important; } - -.blue-grey-text.text-darken-4 { - color: #263238 !important; } - -.grey.lighten-5 { - background-color: #fafafa !important; } - -.grey-text.text-lighten-5 { - color: #fafafa !important; } - -.grey.lighten-4 { - background-color: #f5f5f5 !important; } - -.grey-text.text-lighten-4 { - color: #f5f5f5 !important; } - -.grey.lighten-3 { - background-color: #eeeeee !important; } - -.grey-text.text-lighten-3 { - color: #eeeeee !important; } - -.grey.lighten-2 { - background-color: #e0e0e0 !important; } - -.grey-text.text-lighten-2 { - color: #e0e0e0 !important; } - -.grey.lighten-1 { - background-color: #bdbdbd !important; } - -.grey-text.text-lighten-1 { - color: #bdbdbd !important; } - -.grey { - background-color: #9e9e9e !important; } - -.grey-text { - color: #9e9e9e !important; } - -.grey.darken-1 { - background-color: #757575 !important; } - -.grey-text.text-darken-1 { - color: #757575 !important; } - -.grey.darken-2 { - background-color: #616161 !important; } - -.grey-text.text-darken-2 { - color: #616161 !important; } - -.grey.darken-3 { - background-color: #424242 !important; } - -.grey-text.text-darken-3 { - color: #424242 !important; } - -.grey.darken-4 { - background-color: #212121 !important; } - -.grey-text.text-darken-4 { - color: #212121 !important; } - -.shades.black { - background-color: #000000 !important; } - -.shades-text.text-black { - color: #000000 !important; } - -.shades.white { - background-color: #FFFFFF !important; } - -.shades-text.text-white { - color: #FFFFFF !important; } - -.shades.transparent { - background-color: transparent !important; } - -.shades-text.text-transparent { - color: transparent !important; } - -.black { - background-color: #000000 !important; } - -.black-text { - color: #000000 !important; } - -.white { - background-color: #FFFFFF !important; } - -.white-text { - color: #FFFFFF !important; } - -.transparent { - background-color: transparent !important; } - -.transparent-text { - color: transparent !important; } - -/*** Colors ***/ -/*** Badges ***/ -/*** Buttons ***/ -/*** Cards ***/ -/*** Collapsible ***/ -/*** Dropdown ***/ -/*** Fonts ***/ -/*** Forms ***/ -/*** Global ***/ -/*** Navbar ***/ -/*** SideNav ***/ -/*** Photo Slider ***/ -/*** Tabs ***/ -/*** Tables ***/ -/*** Toasts ***/ -/*** Typography ***/ -/*** Collections ***/ -/* Progress Bar */ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ -html { - font-family: sans-serif; - /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; - /* 2 */ } - -/** - * Remove default margin. - */ -body { - margin: 0; } - -/* HTML5 display definitions - ========================================================================== */ -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ -article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { - display: block; } - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ -audio, canvas, progress, video { - display: inline-block; - /* 1 */ - vertical-align: baseline; - /* 2 */ } - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ -audio:not([controls]) { - display: none; - height: 0; } - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ -[hidden], template { - display: none; } - -/* Links - ========================================================================== */ -/** - * Remove the gray background color from active links in IE 10. - */ -a { - background-color: transparent; } - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ -a:active, a:hover { - outline: 0; } - -/* Text-level semantics - ========================================================================== */ -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ -abbr[title] { - border-bottom: 1px dotted; } - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ -b, strong { - font-weight: bold; } - -/** - * Address styling not present in Safari and Chrome. - */ -dfn { - font-style: italic; } - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ -h1 { - font-size: 2em; - margin: 0.67em 0; } - -/** - * Address styling not present in IE 8/9. - */ -mark { - background: #ff0; - color: #000; } - -/** - * Address inconsistent and variable font size in all browsers. - */ -small { - font-size: 80%; } - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -/* Embedded content - ========================================================================== */ -/** - * Remove border when inside `a` element in IE 8/9/10. - */ -img { - border: 0; } - -/** - * Correct overflow not hidden in IE 9/10/11. - */ -svg:not(:root) { - overflow: hidden; } - -/* Grouping content - ========================================================================== */ -/** - * Address margin not present in IE 8/9 and Safari. - */ -figure { - margin: 1em 40px; } - -/** - * Address differences between Firefox and other browsers. - */ -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; } - -/** - * Contain overflow in all browsers. - */ -pre { - overflow: auto; } - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ -code, kbd, pre, samp { - font-family: monospace, monospace; - font-size: 1em; } - -/* Forms - ========================================================================== */ -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ -button, input, optgroup, select, textarea { - color: inherit; - /* 1 */ - font: inherit; - /* 2 */ - margin: 0; - /* 3 */ } - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ -button { - overflow: visible; } - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ -button, select { - text-transform: none; } - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ -/* 1 */ -html input[type="button"], button, input[type="reset"], input[type="submit"] { - -webkit-appearance: button; - /* 2 */ - cursor: pointer; - /* 3 */ } - -/** - * Re-set default cursor for disabled elements. - */ -button[disabled], html input[disabled] { - cursor: default; } - -/** - * Remove inner padding and border in Firefox 4+. - */ -button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; - padding: 0; } - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ -input { - line-height: normal; } - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ -input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; - /* 1 */ - padding: 0; - /* 2 */ } - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ -input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { - height: auto; } - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ -input[type="search"] { - -webkit-appearance: textfield; - /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - /* 2 */ - box-sizing: content-box; } - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ -input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -/** - * Define consistent border, margin, and padding. - */ -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; } - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ -legend { - border: 0; - /* 1 */ - padding: 0; - /* 2 */ } - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ -textarea { - overflow: auto; } - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ -optgroup { - font-weight: bold; } - -/* Tables - ========================================================================== */ -/** - * Remove most spacing between table cells. - */ -table { - border-collapse: collapse; - border-spacing: 0; } - -td, th { - padding: 0; } - -html { - box-sizing: border-box; } - -*, *:before, *:after { - box-sizing: inherit; } - -ul { - list-style-type: none; } - -a { - color: #039be5; - text-decoration: none; - -webkit-tap-highlight-color: transparent; } - -.valign-wrapper { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-align: center; - -ms-flex-align: center; - -webkit-align-items: center; - align-items: center; } - .valign-wrapper .valign { - display: block; } - -ul { - padding: 0; } - ul li { - list-style-type: none; } - -.clearfix { - clear: both; } - -.z-depth-0 { - box-shadow: none !important; } - -.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); } - -.z-depth-1-half, .btn:hover, .btn-large:hover, .btn-floating:hover { - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); } - -.z-depth-2 { - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } - -.z-depth-3 { - box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); } - -.z-depth-4, .modal { - box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); } - -.z-depth-5 { - box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); } - -.hoverable:hover { - transition: box-shadow .25s; - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } - -.divider { - height: 1px; - overflow: hidden; - background-color: #e0e0e0; } - -blockquote { - margin: 20px 0; - padding-left: 1.5rem; - border-left: 5px solid #ee6e73; } - -i { - line-height: inherit; } - i.left { - float: left; - margin-right: 15px; } - i.right { - float: right; - margin-left: 15px; } - i.tiny { - font-size: 1rem; } - i.small { - font-size: 2rem; } - i.medium { - font-size: 4rem; } - i.large { - font-size: 6rem; } - -img.responsive-img, video.responsive-video { - max-width: 100%; - height: auto; } - -.pagination li { - display: inline-block; - font-size: 1.2rem; - padding: 0 10px; - line-height: 30px; - border-radius: 2px; - text-align: center; } - .pagination li a { - color: #444; } - .pagination li.active a { - color: #fff; } - .pagination li.active { - background-color: #ee6e73; } - .pagination li.disabled a { - cursor: default; - color: #999; } - .pagination li i { - font-size: 2rem; } -.pagination li.pages ul li { - display: inline-block; - float: none; } - -@media only screen and (max-width : 992px) { - .pagination { - width: 100%; } - .pagination li.prev, .pagination li.next { - width: 10%; } - .pagination li.pages { - width: 80%; - overflow: hidden; - white-space: nowrap; } } - -.parallax-container { - position: relative; - overflow: hidden; - height: 500px; } - -.parallax { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; } - .parallax img { - display: none; - position: absolute; - left: 50%; - bottom: 0; - min-width: 100%; - min-height: 100%; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - transform: translateX(-50%); } - -.pin-top, .pin-bottom { - position: relative; } - -.pinned { - position: fixed !important; } - -/********************* - Transition Classes -**********************/ -ul.staggered-list li { - opacity: 0; } - -.fade-in { - opacity: 0; - transform-origin: 0 50%; } - -/********************* - Media Query Classes -**********************/ -@media only screen and (max-width : 600px) { - .hide-on-small-only, .hide-on-small-and-down { - display: none !important; } } - -@media only screen and (max-width : 992px) { - .hide-on-med-and-down { - display: none !important; } } - -@media only screen and (min-width : 601px) { - .hide-on-med-and-up { - display: none !important; } } - -@media only screen and (min-width: 600px) and (max-width: 992px) { - .hide-on-med-only { - display: none !important; } } - -@media only screen and (min-width : 993px) { - .hide-on-large-only { - display: none !important; } } - -@media only screen and (min-width : 993px) { - .show-on-large { - display: initial !important; } } - -@media only screen and (min-width: 600px) and (max-width: 992px) { - .show-on-medium { - display: initial !important; } } - -@media only screen and (max-width : 600px) { - .show-on-small { - display: initial !important; } } - -@media only screen and (min-width : 601px) { - .show-on-medium-and-up { - display: initial !important; } } - -@media only screen and (max-width : 992px) { - .show-on-medium-and-down { - display: initial !important; } } - -@media only screen and (max-width : 600px) { - .center-on-small-only { - text-align: center; } } - -footer.page-footer { - margin-top: 20px; - padding-top: 20px; - background-color: #ee6e73; } - footer.page-footer .footer-copyright { - overflow: hidden; - height: 50px; - line-height: 50px; - color: rgba(255, 255, 255, 0.8); - background-color: rgba(51, 51, 51, 0.08); } - -table, th, td { - border: none; } - -table { - width: 100%; - display: table; } - table.bordered > thead > tr, table.bordered > tbody > tr { - border-bottom: 1px solid #d0d0d0; } - table.striped > tbody > tr:nth-child(odd) { - background-color: #f2f2f2; } - table.striped > tbody > tr > td { - border-radius: 0px; } - table.highlight > tbody > tr { - -webkit-transition: background-color .25s ease; - -moz-transition: background-color .25s ease; - -o-transition: background-color .25s ease; - -ms-transition: background-color .25s ease; - transition: background-color .25s ease; } - table.highlight > tbody > tr:hover { - background-color: #f2f2f2; } - table.centered thead tr th, table.centered tbody tr td { - text-align: center; } - -thead { - border-bottom: 1px solid #d0d0d0; } - -td, th { - padding: 15px 5px; - display: table-cell; - text-align: left; - vertical-align: middle; - border-radius: 2px; } - -@media only screen and (max-width : 992px) { - table.responsive-table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - display: block; - position: relative; - /* sort out borders */ } - table.responsive-table th, table.responsive-table td { - margin: 0; - vertical-align: top; } - table.responsive-table th { - text-align: left; } - table.responsive-table thead { - display: block; - float: left; } - table.responsive-table thead tr { - display: block; - padding: 0 10px 0 0; } - table.responsive-table thead tr th::before { - content: "\00a0"; } - table.responsive-table tbody { - display: block; - width: auto; - position: relative; - overflow-x: auto; - white-space: nowrap; } - table.responsive-table tbody tr { - display: inline-block; - vertical-align: top; } - table.responsive-table th { - display: block; - text-align: right; } - table.responsive-table td { - display: block; - min-height: 1.25em; - text-align: left; } - table.responsive-table tr { - padding: 0 10px; } - table.responsive-table thead { - border: 0; - border-right: 1px solid #d0d0d0; } - table.responsive-table.bordered th { - border-bottom: 0; - border-left: 0; } - table.responsive-table.bordered td { - border-left: 0; - border-right: 0; - border-bottom: 0; } - table.responsive-table.bordered tr { - border: 0; } - table.responsive-table.bordered tbody tr { - border-right: 1px solid #d0d0d0; } } - -.collection { - margin: 0.5rem 0 1rem 0; - border: 1px solid #e0e0e0; - border-radius: 2px; - overflow: hidden; - position: relative; } - .collection .collection-item { - background-color: #fff; - line-height: 1.5rem; - padding: 10px 20px; - margin: 0; - border-bottom: 1px solid #e0e0e0; } - .collection .collection-item.avatar { - min-height: 84px; - padding-left: 72px; - position: relative; } - .collection .collection-item.avatar .circle { - position: absolute; - width: 42px; - height: 42px; - overflow: hidden; - left: 15px; - display: inline-block; - vertical-align: middle; } - .collection .collection-item.avatar i.circle { - font-size: 18px; - line-height: 42px; - color: #fff; - background-color: #999; - text-align: center; } - .collection .collection-item.avatar .title { - font-size: 16px; } - .collection .collection-item.avatar p { - margin: 0; } - .collection .collection-item.avatar .secondary-content { - position: absolute; - top: 16px; - right: 16px; } - .collection .collection-item:last-child { - border-bottom: none; } - .collection .collection-item.active { - background-color: #26a69a; - color: #eafaf9; } - .collection .collection-item.active .secondary-content { - color: #fff; } - .collection a.collection-item { - display: block; - -webkit-transition: 0.25s; - -moz-transition: 0.25s; - -o-transition: 0.25s; - -ms-transition: 0.25s; - transition: 0.25s; - color: #26a69a; } - .collection a.collection-item:not(.active):hover { - background-color: #ddd; } - .collection.with-header .collection-header { - background-color: #fff; - border-bottom: 1px solid #e0e0e0; - padding: 10px 20px; } - .collection.with-header .collection-item { - padding-left: 30px; } - .collection.with-header .collection-item.avatar { - padding-left: 72px; } - -.secondary-content { - float: right; - color: #26a69a; } - -span.badge { - min-width: 3rem; - padding: 0 6px; - text-align: center; - font-size: 1rem; - line-height: inherit; - color: #757575; - position: absolute; - right: 15px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - span.badge.new { - font-weight: 300; - font-size: 0.8rem; - color: #fff; - background-color: #26a69a; - border-radius: 2px; } - span.badge.new:after { - content: " new"; } - -.video-container { - position: relative; - padding-bottom: 56.25%; - padding-top: 30px; - height: 0; - overflow: hidden; } - .video-container.no-controls { - padding-top: 0; } - .video-container iframe, .video-container object, .video-container embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; } - -.progress { - position: relative; - height: 4px; - display: block; - width: 100%; - background-color: #acece6; - border-radius: 2px; - margin: 0.5rem 0 1rem 0; - overflow: hidden; } - .progress .determinate { - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - background-color: #26a69a; - -webkit-transition: width .3s linear; - -moz-transition: width .3s linear; - -o-transition: width .3s linear; - -ms-transition: width .3s linear; - transition: width .3s linear; } - .progress .indeterminate { - background-color: #26a69a; } - .progress .indeterminate:before { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -moz-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -ms-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -o-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; } - .progress .indeterminate:after { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -moz-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -ms-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -o-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -webkit-animation-delay: 1.15s; - -moz-animation-delay: 1.15s; - -ms-animation-delay: 1.15s; - -o-animation-delay: 1.15s; - animation-delay: 1.15s; } - -@-webkit-keyframes indeterminate { - 0% { - left: -35%; - right: 100%; } - - 60% { - left: 100%; - right: -90%; } - - 100% { - left: 100%; - right: -90%; } } - -@-moz-keyframes indeterminate { - 0% { - left: -35%; - right: 100%; } - - 60% { - left: 100%; - right: -90%; } - - 100% { - left: 100%; - right: -90%; } } - -@keyframes indeterminate { - 0% { - left: -35%; - right: 100%; } - - 60% { - left: 100%; - right: -90%; } - - 100% { - left: 100%; - right: -90%; } } - -@-webkit-keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; } - - 60% { - left: 107%; - right: -8%; } - - 100% { - left: 107%; - right: -8%; } } - -@-moz-keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; } - - 60% { - left: 107%; - right: -8%; } - - 100% { - left: 107%; - right: -8%; } } - -@keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; } - - 60% { - left: 107%; - right: -8%; } - - 100% { - left: 107%; - right: -8%; } } - -/******************* - Utility Classes -*******************/ -.hide { - display: none !important; } - -.left-align { - text-align: left; } - -.right-align { - text-align: right; } - -.center, .center-align { - text-align: center; } - -.left { - float: left !important; } - -.right { - float: right !important; } - -.no-select, input[type=range], input[type=range] + .thumb { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - -.circle { - border-radius: 50%; } - -.center-block { - display: block; - margin-left: auto; - margin-right: auto; } - -.truncate { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; } - -.no-padding { - padding: 0 !important; } - -@font-face { - font-family: "Material-Design-Icons"; - src: url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"), url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"), url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"), url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"), url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg"); - font-weight: normal; - font-style: normal; } - -[class^="mdi-"], [class*="mdi-"] { - speak: none; - display: inline-block; - font-family: "Material-Design-Icons"; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-rendering: auto; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); } - [class^="mdi-"]:before, [class*="mdi-"]:before { - display: inline-block; - speak: none; - text-decoration: inherit; } - [class^="mdi-"].pull-left, [class*="mdi-"].pull-left { - margin-right: .3em; } - [class^="mdi-"].pull-right, [class*="mdi-"].pull-right { - margin-left: .3em; } - [class^="mdi-"].mdi-lg:before, [class^="mdi-"].mdi-lg:after, [class*="mdi-"].mdi-lg:before, [class*="mdi-"].mdi-lg:after { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; } - [class^="mdi-"].mdi-2x:before, [class^="mdi-"].mdi-2x:after, [class*="mdi-"].mdi-2x:before, [class*="mdi-"].mdi-2x:after { - font-size: 2em; } - [class^="mdi-"].mdi-3x:before, [class^="mdi-"].mdi-3x:after, [class*="mdi-"].mdi-3x:before, [class*="mdi-"].mdi-3x:after { - font-size: 3em; } - [class^="mdi-"].mdi-4x:before, [class^="mdi-"].mdi-4x:after, [class*="mdi-"].mdi-4x:before, [class*="mdi-"].mdi-4x:after { - font-size: 4em; } - [class^="mdi-"].mdi-5x:before, [class^="mdi-"].mdi-5x:after, [class*="mdi-"].mdi-5x:before, [class*="mdi-"].mdi-5x:after { - font-size: 5em; } - -[class^="mdi-device-signal-cellular-"]:after, [class^="mdi-device-battery-"]:after, [class^="mdi-device-battery-charging-"]:after, [class^="mdi-device-signal-cellular-connected-no-internet-"]:after, [class^="mdi-device-signal-wifi-"]:after, [class^="mdi-device-signal-wifi-statusbar-not-connected"]:after, .mdi-device-network-wifi:after { - opacity: .3; - position: absolute; - left: 0; - top: 0; - z-index: 1; - display: inline-block; - speak: none; - text-decoration: inherit; } - -[class^="mdi-device-signal-cellular-"]:after { - content: "\e758"; } - -[class^="mdi-device-battery-"]:after { - content: "\e735"; } - -[class^="mdi-device-battery-charging-"]:after { - content: "\e733"; } - -[class^="mdi-device-signal-cellular-connected-no-internet-"]:after { - content: "\e75d"; } - -[class^="mdi-device-signal-wifi-"]:after, .mdi-device-network-wifi:after { - content: "\e765"; } - -[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after { - content: "\e8f7"; } - -.mdi-device-signal-cellular-off:after, .mdi-device-signal-cellular-null:after, .mdi-device-signal-cellular-no-sim:after, .mdi-device-signal-wifi-off:after, .mdi-device-signal-wifi-4-bar:after, .mdi-device-signal-cellular-4-bar:after, .mdi-device-battery-alert:after, .mdi-device-signal-cellular-connected-no-internet-4-bar:after, .mdi-device-battery-std:after, .mdi-device-battery-full .mdi-device-battery-unknown:after { - content: ""; } - -.mdi-fw { - width: 1.28571429em; - text-align: center; } - -.mdi-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; } - -.mdi-ul > li { - position: relative; } - -.mdi-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; } - -.mdi-li.mdi-lg { - left: -1.85714286em; } - -.mdi-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; } - -.mdi-spin { - -webkit-animation: mdi-spin 2s infinite linear; - animation: mdi-spin 2s infinite linear; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; } - -.mdi-pulse { - -webkit-animation: mdi-spin 1s steps(8) infinite; - animation: mdi-spin 1s steps(8) infinite; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; } - -@-webkit-keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } - -@keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } - -.mdi-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); } - -.mdi-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); } - -.mdi-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); } - -.mdi-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); } - -.mdi-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); } - -:root .mdi-rotate-90, :root .mdi-rotate-180, :root .mdi-rotate-270, :root .mdi-flip-horizontal, :root .mdi-flip-vertical { - filter: none; } - -.mdi-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; } - -.mdi-stack-1x, .mdi-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; } - -.mdi-stack-1x { - line-height: inherit; } - -.mdi-stack-2x { - font-size: 2em; } - -.mdi-inverse { - color: #ffffff; } - -/* Start Icons */ -.mdi-action-3d-rotation:before { - content: "\e600"; } - -.mdi-action-accessibility:before { - content: "\e601"; } - -.mdi-action-account-balance-wallet:before { - content: "\e602"; } - -.mdi-action-account-balance:before { - content: "\e603"; } - -.mdi-action-account-box:before { - content: "\e604"; } - -.mdi-action-account-child:before { - content: "\e605"; } - -.mdi-action-account-circle:before { - content: "\e606"; } - -.mdi-action-add-shopping-cart:before { - content: "\e607"; } - -.mdi-action-alarm-add:before { - content: "\e608"; } - -.mdi-action-alarm-off:before { - content: "\e609"; } - -.mdi-action-alarm-on:before { - content: "\e60a"; } - -.mdi-action-alarm:before { - content: "\e60b"; } - -.mdi-action-android:before { - content: "\e60c"; } - -.mdi-action-announcement:before { - content: "\e60d"; } - -.mdi-action-aspect-ratio:before { - content: "\e60e"; } - -.mdi-action-assessment:before { - content: "\e60f"; } - -.mdi-action-assignment-ind:before { - content: "\e610"; } - -.mdi-action-assignment-late:before { - content: "\e611"; } - -.mdi-action-assignment-return:before { - content: "\e612"; } - -.mdi-action-assignment-returned:before { - content: "\e613"; } - -.mdi-action-assignment-turned-in:before { - content: "\e614"; } - -.mdi-action-assignment:before { - content: "\e615"; } - -.mdi-action-autorenew:before { - content: "\e616"; } - -.mdi-action-backup:before { - content: "\e617"; } - -.mdi-action-book:before { - content: "\e618"; } - -.mdi-action-bookmark-outline:before { - content: "\e619"; } - -.mdi-action-bookmark:before { - content: "\e61a"; } - -.mdi-action-bug-report:before { - content: "\e61b"; } - -.mdi-action-cached:before { - content: "\e61c"; } - -.mdi-action-check-circle:before { - content: "\e61d"; } - -.mdi-action-class:before { - content: "\e61e"; } - -.mdi-action-credit-card:before { - content: "\e61f"; } - -.mdi-action-dashboard:before { - content: "\e620"; } - -.mdi-action-delete:before { - content: "\e621"; } - -.mdi-action-description:before { - content: "\e622"; } - -.mdi-action-dns:before { - content: "\e623"; } - -.mdi-action-done-all:before { - content: "\e624"; } - -.mdi-action-done:before { - content: "\e625"; } - -.mdi-action-event:before { - content: "\e626"; } - -.mdi-action-exit-to-app:before { - content: "\e627"; } - -.mdi-action-explore:before { - content: "\e628"; } - -.mdi-action-extension:before { - content: "\e629"; } - -.mdi-action-face-unlock:before { - content: "\e62a"; } - -.mdi-action-favorite-outline:before { - content: "\e62b"; } - -.mdi-action-favorite:before { - content: "\e62c"; } - -.mdi-action-find-in-page:before { - content: "\e62d"; } - -.mdi-action-find-replace:before { - content: "\e62e"; } - -.mdi-action-flip-to-back:before { - content: "\e62f"; } - -.mdi-action-flip-to-front:before { - content: "\e630"; } - -.mdi-action-get-app:before { - content: "\e631"; } - -.mdi-action-grade:before { - content: "\e632"; } - -.mdi-action-group-work:before { - content: "\e633"; } - -.mdi-action-help:before { - content: "\e634"; } - -.mdi-action-highlight-remove:before { - content: "\e635"; } - -.mdi-action-history:before { - content: "\e636"; } - -.mdi-action-home:before { - content: "\e637"; } - -.mdi-action-https:before { - content: "\e638"; } - -.mdi-action-info-outline:before { - content: "\e639"; } - -.mdi-action-info:before { - content: "\e63a"; } - -.mdi-action-input:before { - content: "\e63b"; } - -.mdi-action-invert-colors:before { - content: "\e63c"; } - -.mdi-action-label-outline:before { - content: "\e63d"; } - -.mdi-action-label:before { - content: "\e63e"; } - -.mdi-action-language:before { - content: "\e63f"; } - -.mdi-action-launch:before { - content: "\e640"; } - -.mdi-action-list:before { - content: "\e641"; } - -.mdi-action-lock-open:before { - content: "\e642"; } - -.mdi-action-lock-outline:before { - content: "\e643"; } - -.mdi-action-lock:before { - content: "\e644"; } - -.mdi-action-loyalty:before { - content: "\e645"; } - -.mdi-action-markunread-mailbox:before { - content: "\e646"; } - -.mdi-action-note-add:before { - content: "\e647"; } - -.mdi-action-open-in-browser:before { - content: "\e648"; } - -.mdi-action-open-in-new:before { - content: "\e649"; } - -.mdi-action-open-with:before { - content: "\e64a"; } - -.mdi-action-pageview:before { - content: "\e64b"; } - -.mdi-action-payment:before { - content: "\e64c"; } - -.mdi-action-perm-camera-mic:before { - content: "\e64d"; } - -.mdi-action-perm-contact-cal:before { - content: "\e64e"; } - -.mdi-action-perm-data-setting:before { - content: "\e64f"; } - -.mdi-action-perm-device-info:before { - content: "\e650"; } - -.mdi-action-perm-identity:before { - content: "\e651"; } - -.mdi-action-perm-media:before { - content: "\e652"; } - -.mdi-action-perm-phone-msg:before { - content: "\e653"; } - -.mdi-action-perm-scan-wifi:before { - content: "\e654"; } - -.mdi-action-picture-in-picture:before { - content: "\e655"; } - -.mdi-action-polymer:before { - content: "\e656"; } - -.mdi-action-print:before { - content: "\e657"; } - -.mdi-action-query-builder:before { - content: "\e658"; } - -.mdi-action-question-answer:before { - content: "\e659"; } - -.mdi-action-receipt:before { - content: "\e65a"; } - -.mdi-action-redeem:before { - content: "\e65b"; } - -.mdi-action-reorder:before { - content: "\e65c"; } - -.mdi-action-report-problem:before { - content: "\e65d"; } - -.mdi-action-restore:before { - content: "\e65e"; } - -.mdi-action-room:before { - content: "\e65f"; } - -.mdi-action-schedule:before { - content: "\e660"; } - -.mdi-action-search:before { - content: "\e661"; } - -.mdi-action-settings-applications:before { - content: "\e662"; } - -.mdi-action-settings-backup-restore:before { - content: "\e663"; } - -.mdi-action-settings-bluetooth:before { - content: "\e664"; } - -.mdi-action-settings-cell:before { - content: "\e665"; } - -.mdi-action-settings-display:before { - content: "\e666"; } - -.mdi-action-settings-ethernet:before { - content: "\e667"; } - -.mdi-action-settings-input-antenna:before { - content: "\e668"; } - -.mdi-action-settings-input-component:before { - content: "\e669"; } - -.mdi-action-settings-input-composite:before { - content: "\e66a"; } - -.mdi-action-settings-input-hdmi:before { - content: "\e66b"; } - -.mdi-action-settings-input-svideo:before { - content: "\e66c"; } - -.mdi-action-settings-overscan:before { - content: "\e66d"; } - -.mdi-action-settings-phone:before { - content: "\e66e"; } - -.mdi-action-settings-power:before { - content: "\e66f"; } - -.mdi-action-settings-remote:before { - content: "\e670"; } - -.mdi-action-settings-voice:before { - content: "\e671"; } - -.mdi-action-settings:before { - content: "\e672"; } - -.mdi-action-shop-two:before { - content: "\e673"; } - -.mdi-action-shop:before { - content: "\e674"; } - -.mdi-action-shopping-basket:before { - content: "\e675"; } - -.mdi-action-shopping-cart:before { - content: "\e676"; } - -.mdi-action-speaker-notes:before { - content: "\e677"; } - -.mdi-action-spellcheck:before { - content: "\e678"; } - -.mdi-action-star-rate:before { - content: "\e679"; } - -.mdi-action-stars:before { - content: "\e67a"; } - -.mdi-action-store:before { - content: "\e67b"; } - -.mdi-action-subject:before { - content: "\e67c"; } - -.mdi-action-supervisor-account:before { - content: "\e67d"; } - -.mdi-action-swap-horiz:before { - content: "\e67e"; } - -.mdi-action-swap-vert-circle:before { - content: "\e67f"; } - -.mdi-action-swap-vert:before { - content: "\e680"; } - -.mdi-action-system-update-tv:before { - content: "\e681"; } - -.mdi-action-tab-unselected:before { - content: "\e682"; } - -.mdi-action-tab:before { - content: "\e683"; } - -.mdi-action-theaters:before { - content: "\e684"; } - -.mdi-action-thumb-down:before { - content: "\e685"; } - -.mdi-action-thumb-up:before { - content: "\e686"; } - -.mdi-action-thumbs-up-down:before { - content: "\e687"; } - -.mdi-action-toc:before { - content: "\e688"; } - -.mdi-action-today:before { - content: "\e689"; } - -.mdi-action-track-changes:before { - content: "\e68a"; } - -.mdi-action-translate:before { - content: "\e68b"; } - -.mdi-action-trending-down:before { - content: "\e68c"; } - -.mdi-action-trending-neutral:before { - content: "\e68d"; } - -.mdi-action-trending-up:before { - content: "\e68e"; } - -.mdi-action-turned-in-not:before { - content: "\e68f"; } - -.mdi-action-turned-in:before { - content: "\e690"; } - -.mdi-action-verified-user:before { - content: "\e691"; } - -.mdi-action-view-agenda:before { - content: "\e692"; } - -.mdi-action-view-array:before { - content: "\e693"; } - -.mdi-action-view-carousel:before { - content: "\e694"; } - -.mdi-action-view-column:before { - content: "\e695"; } - -.mdi-action-view-day:before { - content: "\e696"; } - -.mdi-action-view-headline:before { - content: "\e697"; } - -.mdi-action-view-list:before { - content: "\e698"; } - -.mdi-action-view-module:before { - content: "\e699"; } - -.mdi-action-view-quilt:before { - content: "\e69a"; } - -.mdi-action-view-stream:before { - content: "\e69b"; } - -.mdi-action-view-week:before { - content: "\e69c"; } - -.mdi-action-visibility-off:before { - content: "\e69d"; } - -.mdi-action-visibility:before { - content: "\e69e"; } - -.mdi-action-wallet-giftcard:before { - content: "\e69f"; } - -.mdi-action-wallet-membership:before { - content: "\e6a0"; } - -.mdi-action-wallet-travel:before { - content: "\e6a1"; } - -.mdi-action-work:before { - content: "\e6a2"; } - -.mdi-alert-error:before { - content: "\e6a3"; } - -.mdi-alert-warning:before { - content: "\e6a4"; } - -.mdi-av-album:before { - content: "\e6a5"; } - -.mdi-av-closed-caption:before { - content: "\e6a6"; } - -.mdi-av-equalizer:before { - content: "\e6a7"; } - -.mdi-av-explicit:before { - content: "\e6a8"; } - -.mdi-av-fast-forward:before { - content: "\e6a9"; } - -.mdi-av-fast-rewind:before { - content: "\e6aa"; } - -.mdi-av-games:before { - content: "\e6ab"; } - -.mdi-av-hearing:before { - content: "\e6ac"; } - -.mdi-av-high-quality:before { - content: "\e6ad"; } - -.mdi-av-loop:before { - content: "\e6ae"; } - -.mdi-av-mic-none:before { - content: "\e6af"; } - -.mdi-av-mic-off:before { - content: "\e6b0"; } - -.mdi-av-mic:before { - content: "\e6b1"; } - -.mdi-av-movie:before { - content: "\e6b2"; } - -.mdi-av-my-library-add:before { - content: "\e6b3"; } - -.mdi-av-my-library-books:before { - content: "\e6b4"; } - -.mdi-av-my-library-music:before { - content: "\e6b5"; } - -.mdi-av-new-releases:before { - content: "\e6b6"; } - -.mdi-av-not-interested:before { - content: "\e6b7"; } - -.mdi-av-pause-circle-fill:before { - content: "\e6b8"; } - -.mdi-av-pause-circle-outline:before { - content: "\e6b9"; } - -.mdi-av-pause:before { - content: "\e6ba"; } - -.mdi-av-play-arrow:before { - content: "\e6bb"; } - -.mdi-av-play-circle-fill:before { - content: "\e6bc"; } - -.mdi-av-play-circle-outline:before { - content: "\e6bd"; } - -.mdi-av-play-shopping-bag:before { - content: "\e6be"; } - -.mdi-av-playlist-add:before { - content: "\e6bf"; } - -.mdi-av-queue-music:before { - content: "\e6c0"; } - -.mdi-av-queue:before { - content: "\e6c1"; } - -.mdi-av-radio:before { - content: "\e6c2"; } - -.mdi-av-recent-actors:before { - content: "\e6c3"; } - -.mdi-av-repeat-one:before { - content: "\e6c4"; } - -.mdi-av-repeat:before { - content: "\e6c5"; } - -.mdi-av-replay:before { - content: "\e6c6"; } - -.mdi-av-shuffle:before { - content: "\e6c7"; } - -.mdi-av-skip-next:before { - content: "\e6c8"; } - -.mdi-av-skip-previous:before { - content: "\e6c9"; } - -.mdi-av-snooze:before { - content: "\e6ca"; } - -.mdi-av-stop:before { - content: "\e6cb"; } - -.mdi-av-subtitles:before { - content: "\e6cc"; } - -.mdi-av-surround-sound:before { - content: "\e6cd"; } - -.mdi-av-timer:before { - content: "\e6ce"; } - -.mdi-av-video-collection:before { - content: "\e6cf"; } - -.mdi-av-videocam-off:before { - content: "\e6d0"; } - -.mdi-av-videocam:before { - content: "\e6d1"; } - -.mdi-av-volume-down:before { - content: "\e6d2"; } - -.mdi-av-volume-mute:before { - content: "\e6d3"; } - -.mdi-av-volume-off:before { - content: "\e6d4"; } - -.mdi-av-volume-up:before { - content: "\e6d5"; } - -.mdi-av-web:before { - content: "\e6d6"; } - -.mdi-communication-business:before { - content: "\e6d7"; } - -.mdi-communication-call-end:before { - content: "\e6d8"; } - -.mdi-communication-call-made:before { - content: "\e6d9"; } - -.mdi-communication-call-merge:before { - content: "\e6da"; } - -.mdi-communication-call-missed:before { - content: "\e6db"; } - -.mdi-communication-call-received:before { - content: "\e6dc"; } - -.mdi-communication-call-split:before { - content: "\e6dd"; } - -.mdi-communication-call:before { - content: "\e6de"; } - -.mdi-communication-chat:before { - content: "\e6df"; } - -.mdi-communication-clear-all:before { - content: "\e6e0"; } - -.mdi-communication-comment:before { - content: "\e6e1"; } - -.mdi-communication-contacts:before { - content: "\e6e2"; } - -.mdi-communication-dialer-sip:before { - content: "\e6e3"; } - -.mdi-communication-dialpad:before { - content: "\e6e4"; } - -.mdi-communication-dnd-on:before { - content: "\e6e5"; } - -.mdi-communication-email:before { - content: "\e6e6"; } - -.mdi-communication-forum:before { - content: "\e6e7"; } - -.mdi-communication-import-export:before { - content: "\e6e8"; } - -.mdi-communication-invert-colors-off:before { - content: "\e6e9"; } - -.mdi-communication-invert-colors-on:before { - content: "\e6ea"; } - -.mdi-communication-live-help:before { - content: "\e6eb"; } - -.mdi-communication-location-off:before { - content: "\e6ec"; } - -.mdi-communication-location-on:before { - content: "\e6ed"; } - -.mdi-communication-message:before { - content: "\e6ee"; } - -.mdi-communication-messenger:before { - content: "\e6ef"; } - -.mdi-communication-no-sim:before { - content: "\e6f0"; } - -.mdi-communication-phone:before { - content: "\e6f1"; } - -.mdi-communication-portable-wifi-off:before { - content: "\e6f2"; } - -.mdi-communication-quick-contacts-dialer:before { - content: "\e6f3"; } - -.mdi-communication-quick-contacts-mail:before { - content: "\e6f4"; } - -.mdi-communication-ring-volume:before { - content: "\e6f5"; } - -.mdi-communication-stay-current-landscape:before { - content: "\e6f6"; } - -.mdi-communication-stay-current-portrait:before { - content: "\e6f7"; } - -.mdi-communication-stay-primary-landscape:before { - content: "\e6f8"; } - -.mdi-communication-stay-primary-portrait:before { - content: "\e6f9"; } - -.mdi-communication-swap-calls:before { - content: "\e6fa"; } - -.mdi-communication-textsms:before { - content: "\e6fb"; } - -.mdi-communication-voicemail:before { - content: "\e6fc"; } - -.mdi-communication-vpn-key:before { - content: "\e6fd"; } - -.mdi-content-add-box:before { - content: "\e6fe"; } - -.mdi-content-add-circle-outline:before { - content: "\e6ff"; } - -.mdi-content-add-circle:before { - content: "\e700"; } - -.mdi-content-add:before { - content: "\e701"; } - -.mdi-content-archive:before { - content: "\e702"; } - -.mdi-content-backspace:before { - content: "\e703"; } - -.mdi-content-block:before { - content: "\e704"; } - -.mdi-content-clear:before { - content: "\e705"; } - -.mdi-content-content-copy:before { - content: "\e706"; } - -.mdi-content-content-cut:before { - content: "\e707"; } - -.mdi-content-content-paste:before { - content: "\e708"; } - -.mdi-content-create:before { - content: "\e709"; } - -.mdi-content-drafts:before { - content: "\e70a"; } - -.mdi-content-filter-list:before { - content: "\e70b"; } - -.mdi-content-flag:before { - content: "\e70c"; } - -.mdi-content-forward:before { - content: "\e70d"; } - -.mdi-content-gesture:before { - content: "\e70e"; } - -.mdi-content-inbox:before { - content: "\e70f"; } - -.mdi-content-link:before { - content: "\e710"; } - -.mdi-content-mail:before { - content: "\e711"; } - -.mdi-content-markunread:before { - content: "\e712"; } - -.mdi-content-redo:before { - content: "\e713"; } - -.mdi-content-remove-circle-outline:before { - content: "\e714"; } - -.mdi-content-remove-circle:before { - content: "\e715"; } - -.mdi-content-remove:before { - content: "\e716"; } - -.mdi-content-reply-all:before { - content: "\e717"; } - -.mdi-content-reply:before { - content: "\e718"; } - -.mdi-content-report:before { - content: "\e719"; } - -.mdi-content-save:before { - content: "\e71a"; } - -.mdi-content-select-all:before { - content: "\e71b"; } - -.mdi-content-send:before { - content: "\e71c"; } - -.mdi-content-sort:before { - content: "\e71d"; } - -.mdi-content-text-format:before { - content: "\e71e"; } - -.mdi-content-undo:before { - content: "\e71f"; } - -.mdi-editor-attach-file:before { - content: "\e776"; } - -.mdi-editor-attach-money:before { - content: "\e777"; } - -.mdi-editor-border-all:before { - content: "\e778"; } - -.mdi-editor-border-bottom:before { - content: "\e779"; } - -.mdi-editor-border-clear:before { - content: "\e77a"; } - -.mdi-editor-border-color:before { - content: "\e77b"; } - -.mdi-editor-border-horizontal:before { - content: "\e77c"; } - -.mdi-editor-border-inner:before { - content: "\e77d"; } - -.mdi-editor-border-left:before { - content: "\e77e"; } - -.mdi-editor-border-outer:before { - content: "\e77f"; } - -.mdi-editor-border-right:before { - content: "\e780"; } - -.mdi-editor-border-style:before { - content: "\e781"; } - -.mdi-editor-border-top:before { - content: "\e782"; } - -.mdi-editor-border-vertical:before { - content: "\e783"; } - -.mdi-editor-format-align-center:before { - content: "\e784"; } - -.mdi-editor-format-align-justify:before { - content: "\e785"; } - -.mdi-editor-format-align-left:before { - content: "\e786"; } - -.mdi-editor-format-align-right:before { - content: "\e787"; } - -.mdi-editor-format-bold:before { - content: "\e788"; } - -.mdi-editor-format-clear:before { - content: "\e789"; } - -.mdi-editor-format-color-fill:before { - content: "\e78a"; } - -.mdi-editor-format-color-reset:before { - content: "\e78b"; } - -.mdi-editor-format-color-text:before { - content: "\e78c"; } - -.mdi-editor-format-indent-decrease:before { - content: "\e78d"; } - -.mdi-editor-format-indent-increase:before { - content: "\e78e"; } - -.mdi-editor-format-italic:before { - content: "\e78f"; } - -.mdi-editor-format-line-spacing:before { - content: "\e790"; } - -.mdi-editor-format-list-bulleted:before { - content: "\e791"; } - -.mdi-editor-format-list-numbered:before { - content: "\e792"; } - -.mdi-editor-format-paint:before { - content: "\e793"; } - -.mdi-editor-format-quote:before { - content: "\e794"; } - -.mdi-editor-format-size:before { - content: "\e795"; } - -.mdi-editor-format-strikethrough:before { - content: "\e796"; } - -.mdi-editor-format-textdirection-l-to-r:before { - content: "\e797"; } - -.mdi-editor-format-textdirection-r-to-l:before { - content: "\e798"; } - -.mdi-editor-format-underline:before { - content: "\e799"; } - -.mdi-editor-functions:before { - content: "\e79a"; } - -.mdi-editor-insert-chart:before { - content: "\e79b"; } - -.mdi-editor-insert-comment:before { - content: "\e79c"; } - -.mdi-editor-insert-drive-file:before { - content: "\e79d"; } - -.mdi-editor-insert-emoticon:before { - content: "\e79e"; } - -.mdi-editor-insert-invitation:before { - content: "\e79f"; } - -.mdi-editor-insert-link:before { - content: "\e7a0"; } - -.mdi-editor-insert-photo:before { - content: "\e7a1"; } - -.mdi-editor-merge-type:before { - content: "\e7a2"; } - -.mdi-editor-mode-comment:before { - content: "\e7a3"; } - -.mdi-editor-mode-edit:before { - content: "\e7a4"; } - -.mdi-editor-publish:before { - content: "\e7a5"; } - -.mdi-editor-vertical-align-bottom:before { - content: "\e7a6"; } - -.mdi-editor-vertical-align-center:before { - content: "\e7a7"; } - -.mdi-editor-vertical-align-top:before { - content: "\e7a8"; } - -.mdi-editor-wrap-text:before { - content: "\e7a9"; } - -.mdi-file-attachment:before { - content: "\e7aa"; } - -.mdi-file-cloud-circle:before { - content: "\e7ab"; } - -.mdi-file-cloud-done:before { - content: "\e7ac"; } - -.mdi-file-cloud-download:before { - content: "\e7ad"; } - -.mdi-file-cloud-off:before { - content: "\e7ae"; } - -.mdi-file-cloud-queue:before { - content: "\e7af"; } - -.mdi-file-cloud-upload:before { - content: "\e7b0"; } - -.mdi-file-cloud:before { - content: "\e7b1"; } - -.mdi-file-file-download:before { - content: "\e7b2"; } - -.mdi-file-file-upload:before { - content: "\e7b3"; } - -.mdi-file-folder-open:before { - content: "\e7b4"; } - -.mdi-file-folder-shared:before { - content: "\e7b5"; } - -.mdi-file-folder:before { - content: "\e7b6"; } - -.mdi-device-access-alarm:before { - content: "\e720"; } - -.mdi-device-access-alarms:before { - content: "\e721"; } - -.mdi-device-access-time:before { - content: "\e722"; } - -.mdi-device-add-alarm:before { - content: "\e723"; } - -.mdi-device-airplanemode-off:before { - content: "\e724"; } - -.mdi-device-airplanemode-on:before { - content: "\e725"; } - -.mdi-device-battery-20:before { - content: "\e726"; } - -.mdi-device-battery-30:before { - content: "\e727"; } - -.mdi-device-battery-50:before { - content: "\e728"; } - -.mdi-device-battery-60:before { - content: "\e729"; } - -.mdi-device-battery-80:before { - content: "\e72a"; } - -.mdi-device-battery-90:before { - content: "\e72b"; } - -.mdi-device-battery-alert:before { - content: "\e72c"; } - -.mdi-device-battery-charging-20:before { - content: "\e72d"; } - -.mdi-device-battery-charging-30:before { - content: "\e72e"; } - -.mdi-device-battery-charging-50:before { - content: "\e72f"; } - -.mdi-device-battery-charging-60:before { - content: "\e730"; } - -.mdi-device-battery-charging-80:before { - content: "\e731"; } - -.mdi-device-battery-charging-90:before { - content: "\e732"; } - -.mdi-device-battery-charging-full:before { - content: "\e733"; } - -.mdi-device-battery-full:before { - content: "\e734"; } - -.mdi-device-battery-std:before { - content: "\e735"; } - -.mdi-device-battery-unknown:before { - content: "\e736"; } - -.mdi-device-bluetooth-connected:before { - content: "\e737"; } - -.mdi-device-bluetooth-disabled:before { - content: "\e738"; } - -.mdi-device-bluetooth-searching:before { - content: "\e739"; } - -.mdi-device-bluetooth:before { - content: "\e73a"; } - -.mdi-device-brightness-auto:before { - content: "\e73b"; } - -.mdi-device-brightness-high:before { - content: "\e73c"; } - -.mdi-device-brightness-low:before { - content: "\e73d"; } - -.mdi-device-brightness-medium:before { - content: "\e73e"; } - -.mdi-device-data-usage:before { - content: "\e73f"; } - -.mdi-device-developer-mode:before { - content: "\e740"; } - -.mdi-device-devices:before { - content: "\e741"; } - -.mdi-device-dvr:before { - content: "\e742"; } - -.mdi-device-gps-fixed:before { - content: "\e743"; } - -.mdi-device-gps-not-fixed:before { - content: "\e744"; } - -.mdi-device-gps-off:before { - content: "\e745"; } - -.mdi-device-location-disabled:before { - content: "\e746"; } - -.mdi-device-location-searching:before { - content: "\e747"; } - -.mdi-device-multitrack-audio:before { - content: "\e748"; } - -.mdi-device-network-cell:before { - content: "\e749"; } - -.mdi-device-network-wifi:before { - content: "\e74a"; } - -.mdi-device-nfc:before { - content: "\e74b"; } - -.mdi-device-now-wallpaper:before { - content: "\e74c"; } - -.mdi-device-now-widgets:before { - content: "\e74d"; } - -.mdi-device-screen-lock-landscape:before { - content: "\e74e"; } - -.mdi-device-screen-lock-portrait:before { - content: "\e74f"; } - -.mdi-device-screen-lock-rotation:before { - content: "\e750"; } - -.mdi-device-screen-rotation:before { - content: "\e751"; } - -.mdi-device-sd-storage:before { - content: "\e752"; } - -.mdi-device-settings-system-daydream:before { - content: "\e753"; } - -.mdi-device-signal-cellular-0-bar:before { - content: "\e754"; } - -.mdi-device-signal-cellular-1-bar:before { - content: "\e755"; } - -.mdi-device-signal-cellular-2-bar:before { - content: "\e756"; } - -.mdi-device-signal-cellular-3-bar:before { - content: "\e757"; } - -.mdi-device-signal-cellular-4-bar:before { - content: "\e758"; } - -.mdi-signal-wifi-statusbar-connected-no-internet-after:before { - content: "\e8f6"; } - -.mdi-device-signal-cellular-connected-no-internet-0-bar:before { - content: "\e759"; } - -.mdi-device-signal-cellular-connected-no-internet-1-bar:before { - content: "\e75a"; } - -.mdi-device-signal-cellular-connected-no-internet-2-bar:before { - content: "\e75b"; } - -.mdi-device-signal-cellular-connected-no-internet-3-bar:before { - content: "\e75c"; } - -.mdi-device-signal-cellular-connected-no-internet-4-bar:before { - content: "\e75d"; } - -.mdi-device-signal-cellular-no-sim:before { - content: "\e75e"; } - -.mdi-device-signal-cellular-null:before { - content: "\e75f"; } - -.mdi-device-signal-cellular-off:before { - content: "\e760"; } - -.mdi-device-signal-wifi-0-bar:before { - content: "\e761"; } - -.mdi-device-signal-wifi-1-bar:before { - content: "\e762"; } - -.mdi-device-signal-wifi-2-bar:before { - content: "\e763"; } - -.mdi-device-signal-wifi-3-bar:before { - content: "\e764"; } - -.mdi-device-signal-wifi-4-bar:before { - content: "\e765"; } - -.mdi-device-signal-wifi-off:before { - content: "\e766"; } - -.mdi-device-signal-wifi-statusbar-1-bar:before { - content: "\e767"; } - -.mdi-device-signal-wifi-statusbar-2-bar:before { - content: "\e768"; } - -.mdi-device-signal-wifi-statusbar-3-bar:before { - content: "\e769"; } - -.mdi-device-signal-wifi-statusbar-4-bar:before { - content: "\e76a"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-:before { - content: "\e76b"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet:before { - content: "\e76f"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before { - content: "\e76c"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before { - content: "\e76d"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before { - content: "\e76e"; } - -.mdi-signal-wifi-statusbar-not-connected-after:before { - content: "\e8f7"; } - -.mdi-device-signal-wifi-statusbar-not-connected:before { - content: "\e770"; } - -.mdi-device-signal-wifi-statusbar-null:before { - content: "\e771"; } - -.mdi-device-storage:before { - content: "\e772"; } - -.mdi-device-usb:before { - content: "\e773"; } - -.mdi-device-wifi-lock:before { - content: "\e774"; } - -.mdi-device-wifi-tethering:before { - content: "\e775"; } - -.mdi-hardware-cast-connected:before { - content: "\e7b7"; } - -.mdi-hardware-cast:before { - content: "\e7b8"; } - -.mdi-hardware-computer:before { - content: "\e7b9"; } - -.mdi-hardware-desktop-mac:before { - content: "\e7ba"; } - -.mdi-hardware-desktop-windows:before { - content: "\e7bb"; } - -.mdi-hardware-dock:before { - content: "\e7bc"; } - -.mdi-hardware-gamepad:before { - content: "\e7bd"; } - -.mdi-hardware-headset-mic:before { - content: "\e7be"; } - -.mdi-hardware-headset:before { - content: "\e7bf"; } - -.mdi-hardware-keyboard-alt:before { - content: "\e7c0"; } - -.mdi-hardware-keyboard-arrow-down:before { - content: "\e7c1"; } - -.mdi-hardware-keyboard-arrow-left:before { - content: "\e7c2"; } - -.mdi-hardware-keyboard-arrow-right:before { - content: "\e7c3"; } - -.mdi-hardware-keyboard-arrow-up:before { - content: "\e7c4"; } - -.mdi-hardware-keyboard-backspace:before { - content: "\e7c5"; } - -.mdi-hardware-keyboard-capslock:before { - content: "\e7c6"; } - -.mdi-hardware-keyboard-control:before { - content: "\e7c7"; } - -.mdi-hardware-keyboard-hide:before { - content: "\e7c8"; } - -.mdi-hardware-keyboard-return:before { - content: "\e7c9"; } - -.mdi-hardware-keyboard-tab:before { - content: "\e7ca"; } - -.mdi-hardware-keyboard-voice:before { - content: "\e7cb"; } - -.mdi-hardware-keyboard:before { - content: "\e7cc"; } - -.mdi-hardware-laptop-chromebook:before { - content: "\e7cd"; } - -.mdi-hardware-laptop-mac:before { - content: "\e7ce"; } - -.mdi-hardware-laptop-windows:before { - content: "\e7cf"; } - -.mdi-hardware-laptop:before { - content: "\e7d0"; } - -.mdi-hardware-memory:before { - content: "\e7d1"; } - -.mdi-hardware-mouse:before { - content: "\e7d2"; } - -.mdi-hardware-phone-android:before { - content: "\e7d3"; } - -.mdi-hardware-phone-iphone:before { - content: "\e7d4"; } - -.mdi-hardware-phonelink-off:before { - content: "\e7d5"; } - -.mdi-hardware-phonelink:before { - content: "\e7d6"; } - -.mdi-hardware-security:before { - content: "\e7d7"; } - -.mdi-hardware-sim-card:before { - content: "\e7d8"; } - -.mdi-hardware-smartphone:before { - content: "\e7d9"; } - -.mdi-hardware-speaker:before { - content: "\e7da"; } - -.mdi-hardware-tablet-android:before { - content: "\e7db"; } - -.mdi-hardware-tablet-mac:before { - content: "\e7dc"; } - -.mdi-hardware-tablet:before { - content: "\e7dd"; } - -.mdi-hardware-tv:before { - content: "\e7de"; } - -.mdi-hardware-watch:before { - content: "\e7df"; } - -.mdi-image-add-to-photos:before { - content: "\e7e0"; } - -.mdi-image-adjust:before { - content: "\e7e1"; } - -.mdi-image-assistant-photo:before { - content: "\e7e2"; } - -.mdi-image-audiotrack:before { - content: "\e7e3"; } - -.mdi-image-blur-circular:before { - content: "\e7e4"; } - -.mdi-image-blur-linear:before { - content: "\e7e5"; } - -.mdi-image-blur-off:before { - content: "\e7e6"; } - -.mdi-image-blur-on:before { - content: "\e7e7"; } - -.mdi-image-brightness-1:before { - content: "\e7e8"; } - -.mdi-image-brightness-2:before { - content: "\e7e9"; } - -.mdi-image-brightness-3:before { - content: "\e7ea"; } - -.mdi-image-brightness-4:before { - content: "\e7eb"; } - -.mdi-image-brightness-5:before { - content: "\e7ec"; } - -.mdi-image-brightness-6:before { - content: "\e7ed"; } - -.mdi-image-brightness-7:before { - content: "\e7ee"; } - -.mdi-image-brush:before { - content: "\e7ef"; } - -.mdi-image-camera-alt:before { - content: "\e7f0"; } - -.mdi-image-camera-front:before { - content: "\e7f1"; } - -.mdi-image-camera-rear:before { - content: "\e7f2"; } - -.mdi-image-camera-roll:before { - content: "\e7f3"; } - -.mdi-image-camera:before { - content: "\e7f4"; } - -.mdi-image-center-focus-strong:before { - content: "\e7f5"; } - -.mdi-image-center-focus-weak:before { - content: "\e7f6"; } - -.mdi-image-collections:before { - content: "\e7f7"; } - -.mdi-image-color-lens:before { - content: "\e7f8"; } - -.mdi-image-colorize:before { - content: "\e7f9"; } - -.mdi-image-compare:before { - content: "\e7fa"; } - -.mdi-image-control-point-duplicate:before { - content: "\e7fb"; } - -.mdi-image-control-point:before { - content: "\e7fc"; } - -.mdi-image-crop-3-2:before { - content: "\e7fd"; } - -.mdi-image-crop-5-4:before { - content: "\e7fe"; } - -.mdi-image-crop-7-5:before { - content: "\e7ff"; } - -.mdi-image-crop-16-9:before { - content: "\e800"; } - -.mdi-image-crop-din:before { - content: "\e801"; } - -.mdi-image-crop-free:before { - content: "\e802"; } - -.mdi-image-crop-landscape:before { - content: "\e803"; } - -.mdi-image-crop-original:before { - content: "\e804"; } - -.mdi-image-crop-portrait:before { - content: "\e805"; } - -.mdi-image-crop-square:before { - content: "\e806"; } - -.mdi-image-crop:before { - content: "\e807"; } - -.mdi-image-dehaze:before { - content: "\e808"; } - -.mdi-image-details:before { - content: "\e809"; } - -.mdi-image-edit:before { - content: "\e80a"; } - -.mdi-image-exposure-minus-1:before { - content: "\e80b"; } - -.mdi-image-exposure-minus-2:before { - content: "\e80c"; } - -.mdi-image-exposure-plus-1:before { - content: "\e80d"; } - -.mdi-image-exposure-plus-2:before { - content: "\e80e"; } - -.mdi-image-exposure-zero:before { - content: "\e80f"; } - -.mdi-image-exposure:before { - content: "\e810"; } - -.mdi-image-filter-1:before { - content: "\e811"; } - -.mdi-image-filter-2:before { - content: "\e812"; } - -.mdi-image-filter-3:before { - content: "\e813"; } - -.mdi-image-filter-4:before { - content: "\e814"; } - -.mdi-image-filter-5:before { - content: "\e815"; } - -.mdi-image-filter-6:before { - content: "\e816"; } - -.mdi-image-filter-7:before { - content: "\e817"; } - -.mdi-image-filter-8:before { - content: "\e818"; } - -.mdi-image-filter-9-plus:before { - content: "\e819"; } - -.mdi-image-filter-9:before { - content: "\e81a"; } - -.mdi-image-filter-b-and-w:before { - content: "\e81b"; } - -.mdi-image-filter-center-focus:before { - content: "\e81c"; } - -.mdi-image-filter-drama:before { - content: "\e81d"; } - -.mdi-image-filter-frames:before { - content: "\e81e"; } - -.mdi-image-filter-hdr:before { - content: "\e81f"; } - -.mdi-image-filter-none:before { - content: "\e820"; } - -.mdi-image-filter-tilt-shift:before { - content: "\e821"; } - -.mdi-image-filter-vintage:before { - content: "\e822"; } - -.mdi-image-filter:before { - content: "\e823"; } - -.mdi-image-flare:before { - content: "\e824"; } - -.mdi-image-flash-auto:before { - content: "\e825"; } - -.mdi-image-flash-off:before { - content: "\e826"; } - -.mdi-image-flash-on:before { - content: "\e827"; } - -.mdi-image-flip:before { - content: "\e828"; } - -.mdi-image-gradient:before { - content: "\e829"; } - -.mdi-image-grain:before { - content: "\e82a"; } - -.mdi-image-grid-off:before { - content: "\e82b"; } - -.mdi-image-grid-on:before { - content: "\e82c"; } - -.mdi-image-hdr-off:before { - content: "\e82d"; } - -.mdi-image-hdr-on:before { - content: "\e82e"; } - -.mdi-image-hdr-strong:before { - content: "\e82f"; } - -.mdi-image-hdr-weak:before { - content: "\e830"; } - -.mdi-image-healing:before { - content: "\e831"; } - -.mdi-image-image-aspect-ratio:before { - content: "\e832"; } - -.mdi-image-image:before { - content: "\e833"; } - -.mdi-image-iso:before { - content: "\e834"; } - -.mdi-image-landscape:before { - content: "\e835"; } - -.mdi-image-leak-add:before { - content: "\e836"; } - -.mdi-image-leak-remove:before { - content: "\e837"; } - -.mdi-image-lens:before { - content: "\e838"; } - -.mdi-image-looks-3:before { - content: "\e839"; } - -.mdi-image-looks-4:before { - content: "\e83a"; } - -.mdi-image-looks-5:before { - content: "\e83b"; } - -.mdi-image-looks-6:before { - content: "\e83c"; } - -.mdi-image-looks-one:before { - content: "\e83d"; } - -.mdi-image-looks-two:before { - content: "\e83e"; } - -.mdi-image-looks:before { - content: "\e83f"; } - -.mdi-image-loupe:before { - content: "\e840"; } - -.mdi-image-movie-creation:before { - content: "\e841"; } - -.mdi-image-nature-people:before { - content: "\e842"; } - -.mdi-image-nature:before { - content: "\e843"; } - -.mdi-image-navigate-before:before { - content: "\e844"; } - -.mdi-image-navigate-next:before { - content: "\e845"; } - -.mdi-image-palette:before { - content: "\e846"; } - -.mdi-image-panorama-fisheye:before { - content: "\e847"; } - -.mdi-image-panorama-horizontal:before { - content: "\e848"; } - -.mdi-image-panorama-vertical:before { - content: "\e849"; } - -.mdi-image-panorama-wide-angle:before { - content: "\e84a"; } - -.mdi-image-panorama:before { - content: "\e84b"; } - -.mdi-image-photo-album:before { - content: "\e84c"; } - -.mdi-image-photo-camera:before { - content: "\e84d"; } - -.mdi-image-photo-library:before { - content: "\e84e"; } - -.mdi-image-photo:before { - content: "\e84f"; } - -.mdi-image-portrait:before { - content: "\e850"; } - -.mdi-image-remove-red-eye:before { - content: "\e851"; } - -.mdi-image-rotate-left:before { - content: "\e852"; } - -.mdi-image-rotate-right:before { - content: "\e853"; } - -.mdi-image-slideshow:before { - content: "\e854"; } - -.mdi-image-straighten:before { - content: "\e855"; } - -.mdi-image-style:before { - content: "\e856"; } - -.mdi-image-switch-camera:before { - content: "\e857"; } - -.mdi-image-switch-video:before { - content: "\e858"; } - -.mdi-image-tag-faces:before { - content: "\e859"; } - -.mdi-image-texture:before { - content: "\e85a"; } - -.mdi-image-timelapse:before { - content: "\e85b"; } - -.mdi-image-timer-3:before { - content: "\e85c"; } - -.mdi-image-timer-10:before { - content: "\e85d"; } - -.mdi-image-timer-auto:before { - content: "\e85e"; } - -.mdi-image-timer-off:before { - content: "\e85f"; } - -.mdi-image-timer:before { - content: "\e860"; } - -.mdi-image-tonality:before { - content: "\e861"; } - -.mdi-image-transform:before { - content: "\e862"; } - -.mdi-image-tune:before { - content: "\e863"; } - -.mdi-image-wb-auto:before { - content: "\e864"; } - -.mdi-image-wb-cloudy:before { - content: "\e865"; } - -.mdi-image-wb-incandescent:before { - content: "\e866"; } - -.mdi-image-wb-irradescent:before { - content: "\e867"; } - -.mdi-image-wb-sunny:before { - content: "\e868"; } - -.mdi-maps-beenhere:before { - content: "\e869"; } - -.mdi-maps-directions-bike:before { - content: "\e86a"; } - -.mdi-maps-directions-bus:before { - content: "\e86b"; } - -.mdi-maps-directions-car:before { - content: "\e86c"; } - -.mdi-maps-directions-ferry:before { - content: "\e86d"; } - -.mdi-maps-directions-subway:before { - content: "\e86e"; } - -.mdi-maps-directions-train:before { - content: "\e86f"; } - -.mdi-maps-directions-transit:before { - content: "\e870"; } - -.mdi-maps-directions-walk:before { - content: "\e871"; } - -.mdi-maps-directions:before { - content: "\e872"; } - -.mdi-maps-flight:before { - content: "\e873"; } - -.mdi-maps-hotel:before { - content: "\e874"; } - -.mdi-maps-layers-clear:before { - content: "\e875"; } - -.mdi-maps-layers:before { - content: "\e876"; } - -.mdi-maps-local-airport:before { - content: "\e877"; } - -.mdi-maps-local-atm:before { - content: "\e878"; } - -.mdi-maps-local-attraction:before { - content: "\e879"; } - -.mdi-maps-local-bar:before { - content: "\e87a"; } - -.mdi-maps-local-cafe:before { - content: "\e87b"; } - -.mdi-maps-local-car-wash:before { - content: "\e87c"; } - -.mdi-maps-local-convenience-store:before { - content: "\e87d"; } - -.mdi-maps-local-drink:before { - content: "\e87e"; } - -.mdi-maps-local-florist:before { - content: "\e87f"; } - -.mdi-maps-local-gas-station:before { - content: "\e880"; } - -.mdi-maps-local-grocery-store:before { - content: "\e881"; } - -.mdi-maps-local-hospital:before { - content: "\e882"; } - -.mdi-maps-local-hotel:before { - content: "\e883"; } - -.mdi-maps-local-laundry-service:before { - content: "\e884"; } - -.mdi-maps-local-library:before { - content: "\e885"; } - -.mdi-maps-local-mall:before { - content: "\e886"; } - -.mdi-maps-local-movies:before { - content: "\e887"; } - -.mdi-maps-local-offer:before { - content: "\e888"; } - -.mdi-maps-local-parking:before { - content: "\e889"; } - -.mdi-maps-local-pharmacy:before { - content: "\e88a"; } - -.mdi-maps-local-phone:before { - content: "\e88b"; } - -.mdi-maps-local-pizza:before { - content: "\e88c"; } - -.mdi-maps-local-play:before { - content: "\e88d"; } - -.mdi-maps-local-post-office:before { - content: "\e88e"; } - -.mdi-maps-local-print-shop:before { - content: "\e88f"; } - -.mdi-maps-local-restaurant:before { - content: "\e890"; } - -.mdi-maps-local-see:before { - content: "\e891"; } - -.mdi-maps-local-shipping:before { - content: "\e892"; } - -.mdi-maps-local-taxi:before { - content: "\e893"; } - -.mdi-maps-location-history:before { - content: "\e894"; } - -.mdi-maps-map:before { - content: "\e895"; } - -.mdi-maps-my-location:before { - content: "\e896"; } - -.mdi-maps-navigation:before { - content: "\e897"; } - -.mdi-maps-pin-drop:before { - content: "\e898"; } - -.mdi-maps-place:before { - content: "\e899"; } - -.mdi-maps-rate-review:before { - content: "\e89a"; } - -.mdi-maps-restaurant-menu:before { - content: "\e89b"; } - -.mdi-maps-satellite:before { - content: "\e89c"; } - -.mdi-maps-store-mall-directory:before { - content: "\e89d"; } - -.mdi-maps-terrain:before { - content: "\e89e"; } - -.mdi-maps-traffic:before { - content: "\e89f"; } - -.mdi-navigation-apps:before { - content: "\e8a0"; } - -.mdi-navigation-arrow-back:before { - content: "\e8a1"; } - -.mdi-navigation-arrow-drop-down-circle:before { - content: "\e8a2"; } - -.mdi-navigation-arrow-drop-down:before { - content: "\e8a3"; } - -.mdi-navigation-arrow-drop-up:before { - content: "\e8a4"; } - -.mdi-navigation-arrow-forward:before { - content: "\e8a5"; } - -.mdi-navigation-cancel:before { - content: "\e8a6"; } - -.mdi-navigation-check:before { - content: "\e8a7"; } - -.mdi-navigation-chevron-left:before { - content: "\e8a8"; } - -.mdi-navigation-chevron-right:before { - content: "\e8a9"; } - -.mdi-navigation-close:before { - content: "\e8aa"; } - -.mdi-navigation-expand-less:before { - content: "\e8ab"; } - -.mdi-navigation-expand-more:before { - content: "\e8ac"; } - -.mdi-navigation-fullscreen-exit:before { - content: "\e8ad"; } - -.mdi-navigation-fullscreen:before { - content: "\e8ae"; } - -.mdi-navigation-menu:before { - content: "\e8af"; } - -.mdi-navigation-more-horiz:before { - content: "\e8b0"; } - -.mdi-navigation-more-vert:before { - content: "\e8b1"; } - -.mdi-navigation-refresh:before { - content: "\e8b2"; } - -.mdi-navigation-unfold-less:before { - content: "\e8b3"; } - -.mdi-navigation-unfold-more:before { - content: "\e8b4"; } - -.mdi-notification-adb:before { - content: "\e8b5"; } - -.mdi-notification-bluetooth-audio:before { - content: "\e8b6"; } - -.mdi-notification-disc-full:before { - content: "\e8b7"; } - -.mdi-notification-dnd-forwardslash:before { - content: "\e8b8"; } - -.mdi-notification-do-not-disturb:before { - content: "\e8b9"; } - -.mdi-notification-drive-eta:before { - content: "\e8ba"; } - -.mdi-notification-event-available:before { - content: "\e8bb"; } - -.mdi-notification-event-busy:before { - content: "\e8bc"; } - -.mdi-notification-event-note:before { - content: "\e8bd"; } - -.mdi-notification-folder-special:before { - content: "\e8be"; } - -.mdi-notification-mms:before { - content: "\e8bf"; } - -.mdi-notification-more:before { - content: "\e8c0"; } - -.mdi-notification-network-locked:before { - content: "\e8c1"; } - -.mdi-notification-phone-bluetooth-speaker:before { - content: "\e8c2"; } - -.mdi-notification-phone-forwarded:before { - content: "\e8c3"; } - -.mdi-notification-phone-in-talk:before { - content: "\e8c4"; } - -.mdi-notification-phone-locked:before { - content: "\e8c5"; } - -.mdi-notification-phone-missed:before { - content: "\e8c6"; } - -.mdi-notification-phone-paused:before { - content: "\e8c7"; } - -.mdi-notification-play-download:before { - content: "\e8c8"; } - -.mdi-notification-play-install:before { - content: "\e8c9"; } - -.mdi-notification-sd-card:before { - content: "\e8ca"; } - -.mdi-notification-sim-card-alert:before { - content: "\e8cb"; } - -.mdi-notification-sms-failed:before { - content: "\e8cc"; } - -.mdi-notification-sms:before { - content: "\e8cd"; } - -.mdi-notification-sync-disabled:before { - content: "\e8ce"; } - -.mdi-notification-sync-problem:before { - content: "\e8cf"; } - -.mdi-notification-sync:before { - content: "\e8d0"; } - -.mdi-notification-system-update:before { - content: "\e8d1"; } - -.mdi-notification-tap-and-play:before { - content: "\e8d2"; } - -.mdi-notification-time-to-leave:before { - content: "\e8d3"; } - -.mdi-notification-vibration:before { - content: "\e8d4"; } - -.mdi-notification-voice-chat:before { - content: "\e8d5"; } - -.mdi-notification-vpn-lock:before { - content: "\e8d6"; } - -.mdi-social-cake:before { - content: "\e8d7"; } - -.mdi-social-domain:before { - content: "\e8d8"; } - -.mdi-social-group-add:before { - content: "\e8d9"; } - -.mdi-social-group:before { - content: "\e8da"; } - -.mdi-social-location-city:before { - content: "\e8db"; } - -.mdi-social-mood:before { - content: "\e8dc"; } - -.mdi-social-notifications-none:before { - content: "\e8dd"; } - -.mdi-social-notifications-off:before { - content: "\e8de"; } - -.mdi-social-notifications-on:before { - content: "\e8df"; } - -.mdi-social-notifications-paused:before { - content: "\e8e0"; } - -.mdi-social-notifications:before { - content: "\e8e1"; } - -.mdi-social-pages:before { - content: "\e8e2"; } - -.mdi-social-party-mode:before { - content: "\e8e3"; } - -.mdi-social-people-outline:before { - content: "\e8e4"; } - -.mdi-social-people:before { - content: "\e8e5"; } - -.mdi-social-person-add:before { - content: "\e8e6"; } - -.mdi-social-person-outline:before { - content: "\e8e7"; } - -.mdi-social-person:before { - content: "\e8e8"; } - -.mdi-social-plus-one:before { - content: "\e8e9"; } - -.mdi-social-poll:before { - content: "\e8ea"; } - -.mdi-social-public:before { - content: "\e8eb"; } - -.mdi-social-school:before { - content: "\e8ec"; } - -.mdi-social-share:before { - content: "\e8ed"; } - -.mdi-social-whatshot:before { - content: "\e8ee"; } - -.mdi-toggle-check-box-outline-blank:before { - content: "\e8ef"; } - -.mdi-toggle-check-box:before { - content: "\e8f0"; } - -.mdi-toggle-radio-button-off:before { - content: "\e8f1"; } - -.mdi-toggle-radio-button-on:before { - content: "\e8f2"; } - -.mdi-toggle-star-half:before { - content: "\e8f3"; } - -.mdi-toggle-star-outline:before { - content: "\e8f4"; } - -.mdi-toggle-star:before { - content: "\e8f5"; } - -.container { - margin: 0 auto; - max-width: 1280px; - width: 90%; } - -@media only screen and (min-width : 601px) { - .container { - width: 85%; } } - -@media only screen and (min-width : 993px) { - .container { - width: 70%; } } - -.container .row { - margin-left: -0.75rem; - margin-right: -0.75rem; } - -.section { - padding-top: 1rem; - padding-bottom: 1rem; } - .section.no-pad { - padding: 0; } - .section.no-pad-bot { - padding-bottom: 0; } - .section.no-pad-top { - padding-top: 0; } - -.row { - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; } - .row:after { - content: ""; - display: table; - clear: both; } - .row .col { - float: left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 0.75rem; } - .row .col.s1 { - width: 8.33333%; - margin-left: 0; } - .row .col.s2 { - width: 16.66667%; - margin-left: 0; } - .row .col.s3 { - width: 25%; - margin-left: 0; } - .row .col.s4 { - width: 33.33333%; - margin-left: 0; } - .row .col.s5 { - width: 41.66667%; - margin-left: 0; } - .row .col.s6 { - width: 50%; - margin-left: 0; } - .row .col.s7 { - width: 58.33333%; - margin-left: 0; } - .row .col.s8 { - width: 66.66667%; - margin-left: 0; } - .row .col.s9 { - width: 75%; - margin-left: 0; } - .row .col.s10 { - width: 83.33333%; - margin-left: 0; } - .row .col.s11 { - width: 91.66667%; - margin-left: 0; } - .row .col.s12 { - width: 100%; - margin-left: 0; } - .row .col.offset-s1 { - margin-left: 8.33333%; } - .row .col.offset-s2 { - margin-left: 16.66667%; } - .row .col.offset-s3 { - margin-left: 25%; } - .row .col.offset-s4 { - margin-left: 33.33333%; } - .row .col.offset-s5 { - margin-left: 41.66667%; } - .row .col.offset-s6 { - margin-left: 50%; } - .row .col.offset-s7 { - margin-left: 58.33333%; } - .row .col.offset-s8 { - margin-left: 66.66667%; } - .row .col.offset-s9 { - margin-left: 75%; } - .row .col.offset-s10 { - margin-left: 83.33333%; } - .row .col.offset-s11 { - margin-left: 91.66667%; } - .row .col.offset-s12 { - margin-left: 100%; } - @media only screen and (min-width : 601px) { - .row .col.m1 { - width: 8.33333%; - margin-left: 0; } - .row .col.m2 { - width: 16.66667%; - margin-left: 0; } - .row .col.m3 { - width: 25%; - margin-left: 0; } - .row .col.m4 { - width: 33.33333%; - margin-left: 0; } - .row .col.m5 { - width: 41.66667%; - margin-left: 0; } - .row .col.m6 { - width: 50%; - margin-left: 0; } - .row .col.m7 { - width: 58.33333%; - margin-left: 0; } - .row .col.m8 { - width: 66.66667%; - margin-left: 0; } - .row .col.m9 { - width: 75%; - margin-left: 0; } - .row .col.m10 { - width: 83.33333%; - margin-left: 0; } - .row .col.m11 { - width: 91.66667%; - margin-left: 0; } - .row .col.m12 { - width: 100%; - margin-left: 0; } - .row .col.offset-m1 { - margin-left: 8.33333%; } - .row .col.offset-m2 { - margin-left: 16.66667%; } - .row .col.offset-m3 { - margin-left: 25%; } - .row .col.offset-m4 { - margin-left: 33.33333%; } - .row .col.offset-m5 { - margin-left: 41.66667%; } - .row .col.offset-m6 { - margin-left: 50%; } - .row .col.offset-m7 { - margin-left: 58.33333%; } - .row .col.offset-m8 { - margin-left: 66.66667%; } - .row .col.offset-m9 { - margin-left: 75%; } - .row .col.offset-m10 { - margin-left: 83.33333%; } - .row .col.offset-m11 { - margin-left: 91.66667%; } - .row .col.offset-m12 { - margin-left: 100%; } } - @media only screen and (min-width : 993px) { - .row .col.l1 { - width: 8.33333%; - margin-left: 0; } - .row .col.l2 { - width: 16.66667%; - margin-left: 0; } - .row .col.l3 { - width: 25%; - margin-left: 0; } - .row .col.l4 { - width: 33.33333%; - margin-left: 0; } - .row .col.l5 { - width: 41.66667%; - margin-left: 0; } - .row .col.l6 { - width: 50%; - margin-left: 0; } - .row .col.l7 { - width: 58.33333%; - margin-left: 0; } - .row .col.l8 { - width: 66.66667%; - margin-left: 0; } - .row .col.l9 { - width: 75%; - margin-left: 0; } - .row .col.l10 { - width: 83.33333%; - margin-left: 0; } - .row .col.l11 { - width: 91.66667%; - margin-left: 0; } - .row .col.l12 { - width: 100%; - margin-left: 0; } - .row .col.offset-l1 { - margin-left: 8.33333%; } - .row .col.offset-l2 { - margin-left: 16.66667%; } - .row .col.offset-l3 { - margin-left: 25%; } - .row .col.offset-l4 { - margin-left: 33.33333%; } - .row .col.offset-l5 { - margin-left: 41.66667%; } - .row .col.offset-l6 { - margin-left: 50%; } - .row .col.offset-l7 { - margin-left: 58.33333%; } - .row .col.offset-l8 { - margin-left: 66.66667%; } - .row .col.offset-l9 { - margin-left: 75%; } - .row .col.offset-l10 { - margin-left: 83.33333%; } - .row .col.offset-l11 { - margin-left: 91.66667%; } - .row .col.offset-l12 { - margin-left: 100%; } } - -nav { - color: #fff; - background-color: #ee6e73; - width: 100%; - height: 56px; - line-height: 56px; } - nav a { - color: #fff; } - nav .nav-wrapper { - position: relative; - height: 100%; } - nav .nav-wrapper i { - display: block; - font-size: 2rem; } - @media only screen and (min-width : 993px) { - nav a.button-collapse { - display: none; } } - nav .button-collapse { - float: left; - position: relative; - z-index: 1; - height: 56px; } - nav .button-collapse i { - font-size: 2.7rem; - height: 56px; - line-height: 56px; } - nav .brand-logo { - position: absolute; - color: #fff; - display: inline-block; - font-size: 2.1rem; - padding: 0; - white-space: nowrap; } - nav .brand-logo.center { - left: 50%; - -webkit-transform: translateX(-50%); - -moz-transform: translateX(-50%); - -ms-transform: translateX(-50%); - -o-transform: translateX(-50%); - transform: translateX(-50%); } - @media only screen and (max-width : 992px) { - nav .brand-logo { - left: 50%; - -webkit-transform: translateX(-50%); - -moz-transform: translateX(-50%); - -ms-transform: translateX(-50%); - -o-transform: translateX(-50%); - transform: translateX(-50%); } - nav .brand-logo.left, nav .brand-logo.right { - padding: 0; - -webkit-transform: none; - -moz-transform: none; - -ms-transform: none; - -o-transform: none; - transform: none; } - nav .brand-logo.left { - left: 0.5rem; } - nav .brand-logo.right { - right: 0.5rem; - left: auto; } } - nav .brand-logo.right { - right: 0.5rem; - padding: 0; } - nav ul { - margin: 0; } - nav ul li { - -webkit-transition: background-color .3s; - -moz-transition: background-color .3s; - -o-transition: background-color .3s; - -ms-transition: background-color .3s; - transition: background-color .3s; - float: left; - padding: 0; } - nav ul li:hover, nav ul li.active { - background-color: rgba(0, 0, 0, 0.1); } - nav ul a { - font-size: 1rem; - color: #fff; - display: block; - padding: 0 15px; } - nav ul.left { - float: left; } - nav .input-field { - margin: 0; } - nav .input-field input { - height: 100%; - font-size: 1.2rem; - border: none; - padding-left: 2rem; } - nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid { - border: none; - box-shadow: none; } - nav .input-field label { - top: 0; - left: 0; } - nav .input-field label i { - color: rgba(255, 255, 255, 0.7); - -webkit-transition: color .3s; - -moz-transition: color .3s; - -o-transition: color .3s; - -ms-transition: color .3s; - transition: color .3s; } - nav .input-field label.active i { - color: #fff; } - nav .input-field label.active { - -webkit-transform: translateY(0); - -moz-transform: translateY(0); - -ms-transform: translateY(0); - -o-transform: translateY(0); - transform: translateY(0); } - -.navbar-fixed { - position: relative; - height: 56px; - z-index: 998; } - .navbar-fixed nav { - position: fixed; } - -@media only screen and (min-width : 601px) { - nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i { - height: 64px; - line-height: 64px; } - .navbar-fixed { - height: 64px; } } - -@font-face { - font-family: "Roboto"; - src: local(Roboto Thin), url("../font/roboto/Roboto-Thin.woff2") format("woff2"), url("../font/roboto/Roboto-Thin.woff") format("woff"), url("../font/roboto/Roboto-Thin.ttf") format("truetype"); - font-weight: 200; } - -@font-face { - font-family: "Roboto"; - src: local(Roboto Light), url("../font/roboto/Roboto-Light.woff2") format("woff2"), url("../font/roboto/Roboto-Light.woff") format("woff"), url("../font/roboto/Roboto-Light.ttf") format("truetype"); - font-weight: 300; } - -@font-face { - font-family: "Roboto"; - src: local(Roboto Regular), url("../font/roboto/Roboto-Regular.woff2") format("woff2"), url("../font/roboto/Roboto-Regular.woff") format("woff"), url("../font/roboto/Roboto-Regular.ttf") format("truetype"); - font-weight: 400; } - -@font-face { - font-family: "Roboto"; - src: url("../font/roboto/Roboto-Medium.woff2") format("woff2"), url("../font/roboto/Roboto-Medium.woff") format("woff"), url("../font/roboto/Roboto-Medium.ttf") format("truetype"); - font-weight: 500; } - -@font-face { - font-family: "Roboto"; - src: url("../font/roboto/Roboto-Bold.woff2") format("woff2"), url("../font/roboto/Roboto-Bold.woff") format("woff"), url("../font/roboto/Roboto-Bold.ttf") format("truetype"); - font-weight: 700; } - -a { - text-decoration: none; } - -html { - line-height: 1.5; - font-family: "Roboto", sans-serif; - font-weight: normal; - color: rgba(0, 0, 0, 0.87); } - @media only screen and (min-width: 0) { - html { - font-size: 14px; } } - @media only screen and (min-width: 992px) { - html { - font-size: 14.5px; } } - @media only screen and (min-width: 1200px) { - html { - font-size: 15px; } } - -h1, h2, h3, h4, h5, h6 { - font-weight: 400; - line-height: 1.1; } - -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - font-weight: inherit; } - -h1 { - font-size: 4.2rem; - line-height: 110%; - margin: 2.1rem 0 1.68rem 0; } - -h2 { - font-size: 3.56rem; - line-height: 110%; - margin: 1.78rem 0 1.424rem 0; } - -h3 { - font-size: 2.92rem; - line-height: 110%; - margin: 1.46rem 0 1.168rem 0; } - -h4 { - font-size: 2.28rem; - line-height: 110%; - margin: 1.14rem 0 0.912rem 0; } - -h5 { - font-size: 1.64rem; - line-height: 110%; - margin: 0.82rem 0 0.656rem 0; } - -h6 { - font-size: 1rem; - line-height: 110%; - margin: 0.5rem 0 0.4rem 0; } - -em { - font-style: italic; } - -strong { - font-weight: 500; } - -small { - font-size: 75%; } - -.light, footer.page-footer .footer-copyright { - font-weight: 300; } - -.thin { - font-weight: 200; } - -.flow-text { - font-weight: 300; } - @media only screen and (min-width: 360px) { - .flow-text { - font-size: 1.2rem; } } - @media only screen and (min-width: 390px) { - .flow-text { - font-size: 1.224rem; } } - @media only screen and (min-width: 420px) { - .flow-text { - font-size: 1.248rem; } } - @media only screen and (min-width: 450px) { - .flow-text { - font-size: 1.272rem; } } - @media only screen and (min-width: 480px) { - .flow-text { - font-size: 1.296rem; } } - @media only screen and (min-width: 510px) { - .flow-text { - font-size: 1.32rem; } } - @media only screen and (min-width: 540px) { - .flow-text { - font-size: 1.344rem; } } - @media only screen and (min-width: 570px) { - .flow-text { - font-size: 1.368rem; } } - @media only screen and (min-width: 600px) { - .flow-text { - font-size: 1.392rem; } } - @media only screen and (min-width: 630px) { - .flow-text { - font-size: 1.416rem; } } - @media only screen and (min-width: 660px) { - .flow-text { - font-size: 1.44rem; } } - @media only screen and (min-width: 690px) { - .flow-text { - font-size: 1.464rem; } } - @media only screen and (min-width: 720px) { - .flow-text { - font-size: 1.488rem; } } - @media only screen and (min-width: 750px) { - .flow-text { - font-size: 1.512rem; } } - @media only screen and (min-width: 780px) { - .flow-text { - font-size: 1.536rem; } } - @media only screen and (min-width: 810px) { - .flow-text { - font-size: 1.56rem; } } - @media only screen and (min-width: 840px) { - .flow-text { - font-size: 1.584rem; } } - @media only screen and (min-width: 870px) { - .flow-text { - font-size: 1.608rem; } } - @media only screen and (min-width: 900px) { - .flow-text { - font-size: 1.632rem; } } - @media only screen and (min-width: 930px) { - .flow-text { - font-size: 1.656rem; } } - @media only screen and (min-width: 960px) { - .flow-text { - font-size: 1.68rem; } } - @media only screen and (max-width: 360px) { - .flow-text { - font-size: 1.2rem; } } - -.card-panel { - transition: box-shadow .25s; - padding: 20px; - margin: 0.5rem 0 1rem 0; - border-radius: 2px; - background-color: #fff; } - -.card { - position: relative; - overflow: hidden; - margin: 0.5rem 0 1rem 0; - background-color: #fff; - transition: box-shadow .25s; - border-radius: 2px; } - .card .card-title { - color: #fff; - font-size: 24px; - font-weight: 300; } - .card .card-title.activator { - cursor: pointer; } - .card.small, .card.medium, .card.large { - position: relative; } - .card.small .card-image, .card.medium .card-image, .card.large .card-image { - overflow: hidden; } - .card.small .card-content, .card.medium .card-content, .card.large .card-content { - overflow: hidden; } - .card.small .card-action, .card.medium .card-action, .card.large .card-action { - position: absolute; - bottom: 0; - left: 0; - right: 0; } - .card.small { - height: 300px; } - .card.small .card-image { - height: 150px; } - .card.small .card-content { - height: 150px; } - .card.medium { - height: 400px; } - .card.medium .card-image { - height: 250px; } - .card.medium .card-content { - height: 150px; } - .card.large { - height: 500px; } - .card.large .card-image { - height: 330px; } - .card.large .card-content { - height: 170px; } - .card .card-image { - position: relative; } - .card .card-image img { - display: block; - border-radius: 2px 2px 0 0; - position: relative; - left: 0; - right: 0; - top: 0; - bottom: 0; - width: 100%; } - .card .card-image .card-title { - position: absolute; - bottom: 0; - left: 0; - padding: 20px; } - .card .card-content { - padding: 20px; - border-radius: 0 0 2px 2px; } - .card .card-content p { - margin: 0; - color: inherit; } - .card .card-content .card-title { - line-height: 48px; } - .card .card-action { - border-top: 1px solid rgba(160, 160, 160, 0.2); - padding: 20px; } - .card .card-action a { - color: #ffab40; - margin-right: 20px; - -webkit-transition: color .3s ease; - -moz-transition: color .3s ease; - -o-transition: color .3s ease; - -ms-transition: color .3s ease; - transition: color .3s ease; - text-transform: uppercase; } - .card .card-action a:hover { - color: #ffd8a6; } - .card .card-reveal { - padding: 20px; - position: absolute; - background-color: #fff; - width: 100%; - overflow-y: auto; - top: 100%; - height: 100%; - z-index: 1; - display: none; } - .card .card-reveal .card-title { - cursor: pointer; - display: block; } - -#toast-container { - display: block; - position: fixed; - z-index: 10000; } - @media only screen and (max-width : 600px) { - #toast-container { - min-width: 100%; - bottom: 0%; } } - @media only screen and (min-width : 601px) and (max-width : 992px) { - #toast-container { - min-width: 30%; - left: 5%; - bottom: 7%; } } - @media only screen and (min-width : 993px) { - #toast-container { - min-width: 8%; - top: 10%; - right: 7%; } } - -.toast { - border-radius: 2px; - top: 0; - width: auto; - clear: both; - margin-top: 10px; - position: relative; - max-width: 100%; - height: 48px; - line-height: 48px; - background-color: #323232; - padding: 0 25px; - font-size: 1.1rem; - font-weight: 300; - color: #fff; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-align: center; - -ms-flex-align: center; - -webkit-align-items: center; - align-items: center; - -webkit-justify-content: space-between; - justify-content: space-between; } - .toast .btn, .toast .btn-large, .toast .btn-flat { - margin: 0; - margin-left: 3rem; } - .toast.rounded { - border-radius: 24px; } - @media only screen and (max-width : 600px) { - .toast { - width: 100%; - border-radius: 0; } } - @media only screen and (min-width : 601px) and (max-width : 992px) { - .toast { - float: left; } } - @media only screen and (min-width : 993px) { - .toast { - float: right; } } - -.tabs { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - position: relative; - height: 48px; - background-color: #fff; - margin: 0 auto; - width: 100%; - white-space: nowrap; } - .tabs .tab { - -webkit-box-flex: 1; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - display: block; - float: left; - text-align: center; - line-height: 48px; - height: 48px; - padding: 0 20px; - margin: 0; - text-transform: uppercase; - letter-spacing: .8px; - width: 15%; } - .tabs .tab a { - color: #ee6e73; - display: block; - width: 100%; - height: 100%; - -webkit-transition: color .28s ease; - -moz-transition: color .28s ease; - -o-transition: color .28s ease; - -ms-transition: color .28s ease; - transition: color .28s ease; } - .tabs .tab a:hover { - color: #f9c9cb; } - .tabs .tab.disabled a { - color: #f9c9cb; - cursor: default; } - .tabs .indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: #f6b2b5; - will-change: left, right; } - -.tabs .tab { - padding: 0; } - -.material-tooltip { - padding: 10px 8px; - font-size: 1rem; - z-index: 2000; - background-color: transparent; - border-radius: 2px; - color: #fff; - min-height: 36px; - line-height: 1rem; - opacity: 0; - display: none; - position: absolute; - text-align: center; - overflow: hidden; - left: 0; - top: 0; - will-change: top, left; } - -.backdrop { - position: absolute; - opacity: 0; - display: none; - height: 7px; - width: 14px; - border-radius: 0 0 14px 14px; - background-color: #323232; - z-index: -1; - -webkit-transform-origin: 50% 10%; - -moz-transform-origin: 50% 10%; - -ms-transform-origin: 50% 10%; - -o-transform-origin: 50% 10%; - transform-origin: 50% 10%; - will-change: transform, opacity; } - -.btn, .btn-large, .btn-flat { - border: none; - border-radius: 2px; - display: inline-block; - height: 36px; - line-height: 36px; - outline: 0; - padding: 0 2rem; - text-transform: uppercase; - vertical-align: middle; - -webkit-tap-highlight-color: transparent; } - -.btn.disabled, .disabled.btn-large, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-large:disabled, .btn-floating:disabled { - background-color: #DFDFDF !important; - box-shadow: none; - color: #9F9F9F !important; - cursor: default; } - .btn.disabled *, .disabled.btn-large *, .btn-floating.disabled *, .btn-large.disabled *, .btn:disabled *, .btn-large:disabled *, .btn-large:disabled *, .btn-floating:disabled * { - pointer-events: none; } - .btn.disabled:hover, .disabled.btn-large:hover, .btn-floating.disabled:hover, .btn-large.disabled:hover, .btn:disabled:hover, .btn-large:disabled:hover, .btn-large:disabled:hover, .btn-floating:disabled:hover { - background-color: #DFDFDF; - color: #9F9F9F; } - -.btn i, .btn-large i, .btn-floating i, .btn-large i, .btn-flat i { - font-size: 1.3rem; - line-height: inherit; } - -.btn, .btn-large { - text-decoration: none; - color: #fff; - background-color: #26a69a; - text-align: center; - letter-spacing: .5px; - -webkit-transition: .2s ease-out; - -moz-transition: .2s ease-out; - -o-transition: .2s ease-out; - -ms-transition: .2s ease-out; - transition: .2s ease-out; - cursor: pointer; } - .btn:hover, .btn-large:hover { - background-color: #2bbbad; } - -.btn-floating { - display: inline-block; - color: #fff; - position: relative; - overflow: hidden; - z-index: 1; - width: 37px; - height: 37px; - line-height: 37px; - padding: 0; - background-color: #26a69a; - border-radius: 50%; - transition: .3s; - cursor: pointer; - vertical-align: middle; } - .btn-floating i { - width: inherit; - display: inline-block; - text-align: center; - color: #fff; - font-size: 1.6rem; - line-height: 37px; } - .btn-floating:before { - border-radius: 0; } - .btn-floating.btn-large { - width: 55.5px; - height: 55.5px; } - .btn-floating.btn-large i { - line-height: 55.5px; } - -button.btn-floating { - border: none; } - -.fixed-action-btn { - position: fixed; - right: 23px; - bottom: 23px; - padding-top: 15px; - margin-bottom: 0; - z-index: 998; } - .fixed-action-btn ul { - left: 0; - right: 0; - text-align: center; - position: absolute; - bottom: 64px; - margin: 0; } - .fixed-action-btn ul li { - margin-bottom: 15px; } - .fixed-action-btn ul a.btn-floating { - opacity: 0; } - -.btn-flat { - box-shadow: none; - background-color: transparent; - color: #343434; - cursor: pointer; } - .btn-flat.disabled { - color: #b3b3b3; - cursor: default; } - -.btn-large { - height: 54px; - line-height: 56px; } - .btn-large i { - font-size: 1.6rem; } - -.btn-block { - display: block; } - -.dropdown-content { - background-color: #fff; - margin: 0; - display: none; - min-width: 100px; - max-height: 650px; - overflow-y: auto; - opacity: 0; - position: absolute; - z-index: 999; - will-change: width, height; } - .dropdown-content li { - clear: both; - color: rgba(0, 0, 0, 0.87); - cursor: pointer; - line-height: 1.5rem; - width: 100%; - text-align: left; - text-transform: none; } - .dropdown-content li:hover, .dropdown-content li.active { - background-color: #eee; } - .dropdown-content li > a, .dropdown-content li > span { - font-size: 1.2rem; - color: #26a69a; - display: block; - padding: 1rem 1rem; } - .dropdown-content li > a > i { - height: inherit; - line-height: inherit; } - -/*! - * Waves v0.6.0 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE - */ -.waves-effect { - position: relative; - cursor: pointer; - display: inline-block; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: transparent; - vertical-align: middle; - z-index: 1; - will-change: opacity, transform; - -webkit-transition: all .3s ease-out; - -moz-transition: all .3s ease-out; - -o-transition: all .3s ease-out; - -ms-transition: all .3s ease-out; - transition: all .3s ease-out; } - .waves-effect .waves-ripple { - position: absolute; - border-radius: 50%; - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - opacity: 0; - background: rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.7s ease-out; - -moz-transition: all 0.7s ease-out; - -o-transition: all 0.7s ease-out; - -ms-transition: all 0.7s ease-out; - transition: all 0.7s ease-out; - -webkit-transition-property: -webkit-transform, opacity; - -moz-transition-property: -moz-transform, opacity; - -o-transition-property: -o-transform, opacity; - transition-property: transform, opacity; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - pointer-events: none; } - .waves-effect.waves-light .waves-ripple { - background-color: rgba(255, 255, 255, 0.45); } - .waves-effect.waves-red .waves-ripple { - background-color: rgba(244, 67, 54, 0.7); } - .waves-effect.waves-yellow .waves-ripple { - background-color: rgba(255, 235, 59, 0.7); } - .waves-effect.waves-orange .waves-ripple { - background-color: rgba(255, 152, 0, 0.7); } - .waves-effect.waves-purple .waves-ripple { - background-color: rgba(156, 39, 176, 0.7); } - .waves-effect.waves-green .waves-ripple { - background-color: rgba(76, 175, 80, 0.7); } - .waves-effect.waves-teal .waves-ripple { - background-color: rgba(0, 150, 136, 0.7); } - -.waves-notransition { - -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; - -ms-transition: none !important; - transition: none !important; } - -.waves-circle { - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); - -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); } - -.waves-input-wrapper { - border-radius: 0.2em; - vertical-align: bottom; } - .waves-input-wrapper .waves-button-input { - position: relative; - top: 0; - left: 0; - z-index: 1; } - -.waves-circle { - text-align: center; - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - border-radius: 50%; - -webkit-mask-image: none; } - -.waves-block { - display: block; } - -/* Firefox Bug: link not triggered */ -a.waves-effect .waves-ripple { - z-index: -1; } - -.modal { - display: none; - position: fixed; - left: 0; - right: 0; - background-color: #fafafa; - padding: 0; - max-height: 70%; - width: 55%; - margin: auto; - overflow-y: auto; - border-radius: 2px; - will-change: top, opacity; } - @media only screen and (max-width : 992px) { - .modal { - width: 80%; } } - .modal h1, .modal h2, .modal h3, .modal h4 { - margin-top: 0; } - .modal .modal-content { - padding: 24px; } - .modal .modal-close { - cursor: pointer; } - .modal .modal-footer { - border-radius: 0 0 2px 2px; - background-color: #fafafa; - padding: 4px 6px; - height: 56px; - width: 100%; } - .modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat { - float: right; - margin: 6px 0; } - -.lean-overlay { - position: fixed; - z-index: 999; - top: -100px; - left: 0; - bottom: 0; - right: 0; - height: 125%; - width: 100%; - background: #000; - display: none; - will-change: opacity; } - -.modal.modal-fixed-footer { - padding: 0; - height: 70%; } - .modal.modal-fixed-footer .modal-content { - position: absolute; - height: calc(100% - 56px); - max-height: 100%; - width: 100%; - overflow-y: auto; } - .modal.modal-fixed-footer .modal-footer { - border-top: 1px solid rgba(0, 0, 0, 0.1); - position: absolute; - bottom: 0; } - -.modal.bottom-sheet { - top: auto; - bottom: -100%; - margin: 0; - width: 100%; - max-height: 45%; - border-radius: 0; - will-change: bottom, opacity; } - -.collapsible { - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; - border-left: 1px solid #ddd; - margin: 0.5rem 0 1rem 0; } - -.collapsible-header { - display: block; - cursor: pointer; - min-height: 3rem; - line-height: 3rem; - padding: 0 1rem; - background-color: #fff; - border-bottom: 1px solid #ddd; } - .collapsible-header i { - width: 2rem; - font-size: 1.6rem; - line-height: 3rem; - display: block; - float: left; - text-align: center; - margin-right: 1rem; } - -.collapsible-body { - display: none; - border-bottom: 1px solid #ddd; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .collapsible-body p { - margin: 0; - padding: 2rem; } - -.side-nav .collapsible { - border: none; - box-shadow: none; } - .side-nav .collapsible li { - padding: 0; } -.side-nav .collapsible-header { - background-color: transparent; - border: none; - line-height: inherit; - height: inherit; - margin: 0 1rem; } - .side-nav .collapsible-header i { - line-height: inherit; } -.side-nav .collapsible-body { - border: 0; - background-color: #fff; } - .side-nav .collapsible-body li a { - margin: 0 1rem 0 2rem; } - -.collapsible.popout { - border: none; - box-shadow: none; } - .collapsible.popout > li { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); - margin: 0 24px; - transition: margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94); } - .collapsible.popout > li.active { - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); - margin: 16px 0; } - -.chip { - display: inline-block; - height: 32px; - font-size: 13px; - font-weight: 500; - color: rgba(0, 0, 0, 0.6); - line-height: 32px; - padding: 0 12px; - border-radius: 16px; - background-color: #E4E4E4; } - .chip img { - float: left; - margin: 0 8px 0 -12px; - height: 32px; - width: 32px; - border-radius: 50%; } - .chip i.material-icons { - cursor: pointer; - float: right; - font-size: 16px; - line-height: 32px; - padding-left: 8px; } - -.materialboxed { - display: block; - cursor: zoom-in; - position: relative; - -webkit-transition: opacity .4s; - -moz-transition: opacity .4s; - -o-transition: opacity .4s; - -ms-transition: opacity .4s; - transition: opacity .4s; } - .materialboxed:hover { - will-change: left, top, width, height; } - .materialboxed:hover:not(.active) { - opacity: .8; } - -.materialboxed.active { - cursor: zoom-out; } - -#materialbox-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #292929; - z-index: 999; - will-change: opacity; } - -.materialbox-caption { - position: fixed; - display: none; - color: #fff; - line-height: 50px; - bottom: 0; - width: 100%; - text-align: center; - padding: 0% 15%; - height: 50px; - z-index: 1000; - -webkit-font-smoothing: antialiased; } - -/* Remove Focus Boxes */ -select:focus { - outline: 1px solid #c9f3ef; } - -button:focus { - outline: none; - background-color: #2ab7a9; } - -label { - font-size: 0.8rem; - color: #9e9e9e; } - -/*************************** - Text Inputs + Textarea -****************************/ -::-webkit-input-placeholder { - color: #d1d1d1; } - -:-moz-placeholder { - /* Firefox 18- */ - color: #d1d1d1; } - -::-moz-placeholder { - /* Firefox 19+ */ - color: #d1d1d1; } - -:-ms-input-placeholder { - color: #d1d1d1; } - -input[type=text], input[type=password], input[type=email], input[type=url], input[type=time], input[type=date], input[type=datetime-local], input[type=tel], input[type=number], input[type=search], textarea.materialize-textarea { - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - border-radius: 0; - outline: none; - height: 3rem; - width: 100%; - font-size: 1rem; - margin: 0 0 15px 0; - padding: 0; - box-shadow: none; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - transition: all .3s; } - input[type=text]:disabled, input[type=text][readonly="readonly"], input[type=password]:disabled, input[type=password][readonly="readonly"], input[type=email]:disabled, input[type=email][readonly="readonly"], input[type=url]:disabled, input[type=url][readonly="readonly"], input[type=time]:disabled, input[type=time][readonly="readonly"], input[type=date]:disabled, input[type=date][readonly="readonly"], input[type=datetime-local]:disabled, input[type=datetime-local][readonly="readonly"], input[type=tel]:disabled, input[type=tel][readonly="readonly"], input[type=number]:disabled, input[type=number][readonly="readonly"], input[type=search]:disabled, input[type=search][readonly="readonly"], textarea.materialize-textarea:disabled, textarea.materialize-textarea[readonly="readonly"] { - color: rgba(0, 0, 0, 0.26); - border-bottom: 1px dotted rgba(0, 0, 0, 0.26); } - input[type=text]:disabled + label, input[type=text][readonly="readonly"] + label, input[type=password]:disabled + label, input[type=password][readonly="readonly"] + label, input[type=email]:disabled + label, input[type=email][readonly="readonly"] + label, input[type=url]:disabled + label, input[type=url][readonly="readonly"] + label, input[type=time]:disabled + label, input[type=time][readonly="readonly"] + label, input[type=date]:disabled + label, input[type=date][readonly="readonly"] + label, input[type=datetime-local]:disabled + label, input[type=datetime-local][readonly="readonly"] + label, input[type=tel]:disabled + label, input[type=tel][readonly="readonly"] + label, input[type=number]:disabled + label, input[type=number][readonly="readonly"] + label, input[type=search]:disabled + label, input[type=search][readonly="readonly"] + label, textarea.materialize-textarea:disabled + label, textarea.materialize-textarea[readonly="readonly"] + label { - color: rgba(0, 0, 0, 0.26); } - input[type=text]:focus:not([readonly]), input[type=password]:focus:not([readonly]), input[type=email]:focus:not([readonly]), input[type=url]:focus:not([readonly]), input[type=time]:focus:not([readonly]), input[type=date]:focus:not([readonly]), input[type=datetime-local]:focus:not([readonly]), input[type=tel]:focus:not([readonly]), input[type=number]:focus:not([readonly]), input[type=search]:focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { - border-bottom: 1px solid #26a69a; - box-shadow: 0 1px 0 0 #26a69a; } - input[type=text]:focus:not([readonly]) + label, input[type=password]:focus:not([readonly]) + label, input[type=email]:focus:not([readonly]) + label, input[type=url]:focus:not([readonly]) + label, input[type=time]:focus:not([readonly]) + label, input[type=date]:focus:not([readonly]) + label, input[type=datetime-local]:focus:not([readonly]) + label, input[type=tel]:focus:not([readonly]) + label, input[type=number]:focus:not([readonly]) + label, input[type=search]:focus:not([readonly]) + label, textarea.materialize-textarea:focus:not([readonly]) + label { - color: #26a69a; } - input[type=text].valid, input[type=text]:focus.valid, input[type=password].valid, input[type=password]:focus.valid, input[type=email].valid, input[type=email]:focus.valid, input[type=url].valid, input[type=url]:focus.valid, input[type=time].valid, input[type=time]:focus.valid, input[type=date].valid, input[type=date]:focus.valid, input[type=datetime-local].valid, input[type=datetime-local]:focus.valid, input[type=tel].valid, input[type=tel]:focus.valid, input[type=number].valid, input[type=number]:focus.valid, input[type=search].valid, input[type=search]:focus.valid, textarea.materialize-textarea.valid, textarea.materialize-textarea:focus.valid { - border-bottom: 1px solid #4CAF50; - box-shadow: 0 1px 0 0 #4CAF50; } - input[type=text].valid + label:after, input[type=text]:focus.valid + label:after, input[type=password].valid + label:after, input[type=password]:focus.valid + label:after, input[type=email].valid + label:after, input[type=email]:focus.valid + label:after, input[type=url].valid + label:after, input[type=url]:focus.valid + label:after, input[type=time].valid + label:after, input[type=time]:focus.valid + label:after, input[type=date].valid + label:after, input[type=date]:focus.valid + label:after, input[type=datetime-local].valid + label:after, input[type=datetime-local]:focus.valid + label:after, input[type=tel].valid + label:after, input[type=tel]:focus.valid + label:after, input[type=number].valid + label:after, input[type=number]:focus.valid + label:after, input[type=search].valid + label:after, input[type=search]:focus.valid + label:after, textarea.materialize-textarea.valid + label:after, textarea.materialize-textarea:focus.valid + label:after { - content: attr(data-success); - color: #4CAF50; - opacity: 1; } - input[type=text].invalid, input[type=text]:focus.invalid, input[type=password].invalid, input[type=password]:focus.invalid, input[type=email].invalid, input[type=email]:focus.invalid, input[type=url].invalid, input[type=url]:focus.invalid, input[type=time].invalid, input[type=time]:focus.invalid, input[type=date].invalid, input[type=date]:focus.invalid, input[type=datetime-local].invalid, input[type=datetime-local]:focus.invalid, input[type=tel].invalid, input[type=tel]:focus.invalid, input[type=number].invalid, input[type=number]:focus.invalid, input[type=search].invalid, input[type=search]:focus.invalid, textarea.materialize-textarea.invalid, textarea.materialize-textarea:focus.invalid { - border-bottom: 1px solid #F44336; - box-shadow: 0 1px 0 0 #F44336; } - input[type=text].invalid + label:after, input[type=text]:focus.invalid + label:after, input[type=password].invalid + label:after, input[type=password]:focus.invalid + label:after, input[type=email].invalid + label:after, input[type=email]:focus.invalid + label:after, input[type=url].invalid + label:after, input[type=url]:focus.invalid + label:after, input[type=time].invalid + label:after, input[type=time]:focus.invalid + label:after, input[type=date].invalid + label:after, input[type=date]:focus.invalid + label:after, input[type=datetime-local].invalid + label:after, input[type=datetime-local]:focus.invalid + label:after, input[type=tel].invalid + label:after, input[type=tel]:focus.invalid + label:after, input[type=number].invalid + label:after, input[type=number]:focus.invalid + label:after, input[type=search].invalid + label:after, input[type=search]:focus.invalid + label:after, textarea.materialize-textarea.invalid + label:after, textarea.materialize-textarea:focus.invalid + label:after { - content: attr(data-error); - color: #F44336; - opacity: 1; } - input[type=text] + label:after, input[type=password] + label:after, input[type=email] + label:after, input[type=url] + label:after, input[type=time] + label:after, input[type=date] + label:after, input[type=datetime-local] + label:after, input[type=tel] + label:after, input[type=number] + label:after, input[type=search] + label:after, textarea.materialize-textarea + label:after { - display: block; - content: ""; - position: absolute; - top: 65px; - opacity: 0; - transition: .2s opacity ease-out, .2s color ease-out; } - -.input-field { - position: relative; - margin-top: 1rem; } - .input-field label { - color: #9e9e9e; - position: absolute; - top: 0.8rem; - left: 0.75rem; - font-size: 1rem; - cursor: text; - -webkit-transition: .2s ease-out; - -moz-transition: .2s ease-out; - -o-transition: .2s ease-out; - -ms-transition: .2s ease-out; - transition: .2s ease-out; } - .input-field label.active { - font-size: 0.8rem; - -webkit-transform: translateY(-140%); - -moz-transform: translateY(-140%); - -ms-transform: translateY(-140%); - -o-transform: translateY(-140%); - transform: translateY(-140%); } - .input-field .prefix { - position: absolute; - width: 3rem; - font-size: 2rem; - -webkit-transition: color .2s; - -moz-transition: color .2s; - -o-transition: color .2s; - -ms-transition: color .2s; - transition: color .2s; } - .input-field .prefix.active { - color: #26a69a; } - .input-field .prefix ~ input, .input-field .prefix ~ textarea { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); } - .input-field .prefix ~ textarea { - padding-top: .8rem; } - .input-field .prefix ~ label { - margin-left: 3rem; } - @media only screen and (max-width : 992px) { - .input-field .prefix ~ input { - width: 86%; - width: calc(100% - 3rem); } } - @media only screen and (max-width : 600px) { - .input-field .prefix ~ input { - width: 80%; - width: calc(100% - 3rem); } } - -.input-field input[type=search] { - display: block; - line-height: inherit; - padding-left: 4rem; - width: calc(100% - 4rem); } - .input-field input[type=search]:focus { - background-color: #fff; - border: 0; - box-shadow: none; - color: #444; } - .input-field input[type=search]:focus + label i, .input-field input[type=search]:focus ~ .mdi-navigation-close, .input-field input[type=search]:focus ~ .material-icons { - color: #444; } - .input-field input[type=search] + label { - left: 1rem; } - .input-field input[type=search] ~ .mdi-navigation-close, .input-field input[type=search] ~ .material-icons { - position: absolute; - top: 0; - right: 1rem; - color: transparent; - cursor: pointer; - font-size: 2rem; - transition: .3s color; } - -textarea { - width: 100%; - height: 3rem; - background-color: transparent; } - textarea.materialize-textarea { - overflow-y: hidden; - /* prevents scroll bar flash */ - padding: 1.6rem 0; - /* prevents text jump on Enter keypress */ - resize: none; - min-height: 3rem; } - -.hiddendiv { - display: none; - white-space: pre-wrap; - word-wrap: break-word; - overflow-wrap: break-word; - /* future version of deprecated 'word-wrap' */ - padding-top: 1.2rem; - /* prevents text jump on Enter keypress */ } - -/*************** - Radio Buttons -***************/ -/* Remove default Radio Buttons */ -[type="radio"]:not(:checked), [type="radio"]:checked { - position: absolute; - left: -9999px; - visibility: hidden; } - -[type="radio"]:not(:checked) + label, [type="radio"]:checked + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-transition: .28s ease; - -moz-transition: .28s ease; - -o-transition: .28s ease; - -ms-transition: .28s ease; - transition: .28s ease; - -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -khtml-user-select: none; - /* webkit (konqueror) browsers */ - -ms-user-select: none; - /* IE10+ */ } - -[type="radio"] + label:before, [type="radio"] + label:after { - content: ''; - position: absolute; - left: 0; - top: 0; - margin: 4px; - width: 16px; - height: 16px; - z-index: 0; - -webkit-transition: .28s ease; - -moz-transition: .28s ease; - -o-transition: .28s ease; - -ms-transition: .28s ease; - transition: .28s ease; } - -/* Unchecked styles */ -[type="radio"]:not(:checked) + label:before { - border-radius: 50%; - border: 2px solid #5a5a5a; } - -[type="radio"]:not(:checked) + label:after { - border-radius: 50%; - border: 2px solid #5a5a5a; - z-index: -1; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); } - -/* Checked styles */ -[type="radio"]:checked + label:before { - border-radius: 50%; - border: 2px solid transparent; } - -[type="radio"]:checked + label:after { - border-radius: 50%; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; - -webkit-transform: scale(1.02); - -moz-transform: scale(1.02); - -ms-transform: scale(1.02); - -o-transform: scale(1.02); - transform: scale(1.02); } - -/* Radio With gap */ -[type="radio"].with-gap:checked + label:before { - border-radius: 50%; - border: 2px solid #26a69a; } - -[type="radio"].with-gap:checked + label:after { - border-radius: 50%; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; - -webkit-transform: scale(.5); - -moz-transform: scale(.5); - -ms-transform: scale(.5); - -o-transform: scale(.5); - transform: scale(.5); } - -/* Disabled Radio With gap */ -[type="radio"].with-gap:disabled:checked + label:before { - border: 2px solid rgba(0, 0, 0, 0.26); } - -[type="radio"].with-gap:disabled:checked + label:after { - border: none; - background-color: rgba(0, 0, 0, 0.26); } - -/* Disabled style */ -[type="radio"]:disabled:not(:checked) + label:before, [type="radio"]:disabled:checked + label:before { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.26); } - -[type="radio"]:disabled + label { - color: rgba(0, 0, 0, 0.26); } - -[type="radio"]:disabled:not(:checked) + label:before { - border-color: rgba(0, 0, 0, 0.26); } - -[type="radio"]:disabled:checked + label:after { - background-color: rgba(0, 0, 0, 0.26); - border-color: #BDBDBD; } - -/*************** - Checkboxes -***************/ -/* CUSTOM CSS CHECKBOXES */ -form p { - margin-bottom: 10px; - text-align: left; } - -form p:last-child { - margin-bottom: 0; } - -/* Remove default checkbox */ -[type="checkbox"]:not(:checked), [type="checkbox"]:checked { - position: absolute; - left: -9999px; - visibility: hidden; } - -[type="checkbox"] { - /* checkbox aspect */ } - [type="checkbox"] + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -khtml-user-select: none; - /* webkit (konqueror) browsers */ - -ms-user-select: none; - /* IE10+ */ } - [type="checkbox"] + label:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; - z-index: 0; - border: 2px solid #5a5a5a; - border-radius: 1px; - margin-top: 2px; - -webkit-transition: 0.2s; - -moz-transition: 0.2s; - -o-transition: 0.2s; - -ms-transition: 0.2s; - transition: 0.2s; } - [type="checkbox"]:not(:checked):disabled + label:before { - border: none; - background-color: rgba(0, 0, 0, 0.26); } - -[type="checkbox"]:checked + label:before { - top: -4px; - left: -3px; - width: 12px; - height: 22px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid #26a69a; - border-bottom: 2px solid #26a69a; - -webkit-transform: rotate(40deg); - -moz-transform: rotate(40deg); - -ms-transform: rotate(40deg); - -o-transform: rotate(40deg); - transform: rotate(40deg); - -webkit-backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - -moz-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - -o-transform-origin: 100% 100%; - transform-origin: 100% 100%; } -[type="checkbox"]:checked:disabled + label:before { - border-right: 2px solid rgba(0, 0, 0, 0.26); - border-bottom: 2px solid rgba(0, 0, 0, 0.26); } - -/* Indeterminate checkbox */ -[type="checkbox"]:indeterminate + label:before { - left: -10px; - top: -11px; - width: 10px; - height: 22px; - border-top: none; - border-left: none; - border-right: 2px solid #26a69a; - border-bottom: none; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); - -webkit-backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - -moz-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - -o-transform-origin: 100% 100%; - transform-origin: 100% 100%; } -[type="checkbox"]:indeterminate:disabled + label:before { - border-right: 2px solid rgba(0, 0, 0, 0.26); - background-color: transparent; } - -[type="checkbox"].filled-in + label:after { - border-radius: 2px; } -[type="checkbox"].filled-in + label:before, [type="checkbox"].filled-in + label:after { - content: ''; - left: 0; - position: absolute; - /* .1s delay is for check animation */ - transition: border .25s, background-color .25s, width .2s .1s, height .2s .1s, top .2s .1s, left .2s .1s; - z-index: 1; } -[type="checkbox"].filled-in:not(:checked) + label:before { - width: 0; - height: 0; - border: 3px solid transparent; - left: 6px; - top: 10px; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 20% 40%; - transform-origin: 100% 100%; } -[type="checkbox"].filled-in:not(:checked) + label:after { - height: 20px; - width: 20px; - background-color: transparent; - border: 2px solid #5a5a5a; - top: 0px; - z-index: 0; } -[type="checkbox"].filled-in:checked + label:before { - top: 0; - left: 1px; - width: 8px; - height: 13px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid #fff; - border-bottom: 2px solid #fff; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; } -[type="checkbox"].filled-in:checked + label:after { - top: 0px; - width: 20px; - height: 20px; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; } -[type="checkbox"].filled-in:disabled:not(:checked) + label:before { - background-color: transparent; - border: 2px solid transparent; } -[type="checkbox"].filled-in:disabled:not(:checked) + label:after { - border-color: transparent; - background-color: #BDBDBD; } -[type="checkbox"].filled-in:disabled:checked + label:before { - background-color: transparent; } -[type="checkbox"].filled-in:disabled:checked + label:after { - background-color: #BDBDBD; - border-color: #BDBDBD; } - -/*************** - Switch -***************/ -.switch, .switch * { - -webkit-user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -ms-user-select: none; } - -.switch label { - cursor: pointer; } - -.switch label input[type=checkbox] { - opacity: 0; - width: 0; - height: 0; } - -.switch label input[type=checkbox]:checked + .lever { - background-color: #84c7c1; } - -.switch label input[type=checkbox]:checked + .lever:after { - background-color: #26a69a; } - -.switch label .lever { - content: ""; - display: inline-block; - position: relative; - width: 40px; - height: 15px; - background-color: #818181; - border-radius: 15px; - margin-right: 10px; - transition: background 0.3s ease; - vertical-align: middle; - margin: 0 16px; } - -.switch label .lever:after { - content: ""; - position: absolute; - display: inline-block; - width: 21px; - height: 21px; - background-color: #F1F1F1; - border-radius: 21px; - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4); - left: -5px; - top: -3px; - transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease; } - -input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(38, 166, 154, 0.1); } - -input[type=checkbox]:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08); } - -.switch label input[type=checkbox]:checked + .lever:after { - left: 24px; } - -.switch input[type=checkbox][disabled] + .lever { - cursor: default; } - -.switch label input[type=checkbox][disabled] + .lever:after, .switch label input[type=checkbox][disabled]:checked + .lever:after { - background-color: #BDBDBD; } - -/*************** - Select Field -***************/ -.select-label { - position: absolute; } - -.select-wrapper { - position: relative; } - .select-wrapper input.select-dropdown { - position: relative; - cursor: pointer; - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - outline: none; - height: 3rem; - line-height: 3rem; - width: 100%; - font-size: 1rem; - margin: 0 0 15px 0; - padding: 0; - display: block; } - .select-wrapper span.caret { - color: initial; - position: absolute; - right: 0; - top: 16px; - font-size: 10px; } - .select-wrapper span.caret.disabled { - color: rgba(0, 0, 0, 0.26); } - .select-wrapper + label { - position: absolute; - top: -14px; - font-size: 0.8rem; } - -select { - display: none; } - -select.browser-default { - display: block; } - -select:disabled { - color: rgba(0, 0, 0, 0.3); } - -.select-wrapper input.select-dropdown:disabled { - color: rgba(0, 0, 0, 0.3); - cursor: default; - -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -ms-user-select: none; - /* IE10+ */ - border-bottom: 1px solid rgba(0, 0, 0, 0.3); } - -.select-wrapper i { - color: rgba(0, 0, 0, 0.3); } - -.select-dropdown li.disabled { - color: rgba(0, 0, 0, 0.3); - background-color: transparent; } - -/********************* - File Input -**********************/ -.file-field { - position: relative; } - .file-field .file-path-wrapper { - overflow: hidden; - padding-left: 10px; } - .file-field input.file-path { - width: 100%; } - .file-field .btn, .file-field .btn-large { - float: left; - height: 3rem; - line-height: 3rem; } - .file-field span { - cursor: pointer; } - .file-field input[type=file] { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - width: 100%; - margin: 0; - padding: 0; - font-size: 20px; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); } - -/*************** - Range -***************/ -.range-field { - position: relative; } - -input[type=range], input[type=range] + .thumb { - cursor: pointer; } - -input[type=range] { - position: relative; - background-color: transparent; - border: none; - outline: none; - width: 100%; - margin: 15px 0px; - padding: 0; } - -input[type=range] + .thumb { - position: absolute; - border: none; - height: 0; - width: 0; - border-radius: 50%; - background-color: #26a69a; - top: 10px; - margin-left: -6px; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -ms-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; - -webkit-transform: rotate(-45deg); - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - transform: rotate(-45deg); } - input[type=range] + .thumb .value { - display: block; - width: 30px; - text-align: center; - color: #26a69a; - font-size: 0; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); } - input[type=range] + .thumb.active { - border-radius: 50% 50% 50% 0; } - input[type=range] + .thumb.active .value { - color: #fff; - margin-left: -1px; - margin-top: 8px; - font-size: 10px; } - -input[type=range]:focus { - outline: none; } - -input[type=range] { - -webkit-appearance: none; } - -input[type=range]::-webkit-slider-runnable-track { - height: 3px; - background: #c2c0c2; - border: none; } - -input[type=range]::-webkit-slider-thumb { - -webkit-appearance: none; - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background-color: #26a69a; - transform-origin: 50% 50%; - margin: -5px 0 0 0; - -webkit-transition: 0.3s; - -moz-transition: 0.3s; - -o-transition: 0.3s; - -ms-transition: 0.3s; - transition: 0.3s; } - -input[type=range]:focus::-webkit-slider-runnable-track { - background: #ccc; } - -input[type=range] { - /* fix for FF unable to apply focus style bug */ - border: 1px solid white; - /*required for proper track sizing in FF*/ } - -input[type=range]::-moz-range-track { - height: 3px; - background: #ddd; - border: none; } - -input[type=range]::-moz-range-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: #26a69a; - margin-top: -5px; } - -/*hide the outline behind the border*/ -input[type=range]:-moz-focusring { - outline: 1px solid white; - outline-offset: -1px; } - -input[type=range]:focus::-moz-range-track { - background: #ccc; } - -input[type=range]::-ms-track { - height: 3px; - /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */ - background: transparent; - /*leave room for the larger thumb to overflow with a transparent border */ - border-color: transparent; - border-width: 6px 0; - /*remove default tick marks*/ - color: transparent; } - -input[type=range]::-ms-fill-lower { - background: #777; } - -input[type=range]::-ms-fill-upper { - background: #ddd; } - -input[type=range]::-ms-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: #26a69a; } - -input[type=range]:focus::-ms-fill-lower { - background: #888; } - -input[type=range]:focus::-ms-fill-upper { - background: #ccc; } - -/*************************** - Text Inputs + Textarea -****************************/ -select { - background-color: rgba(255, 255, 255, 0.9); - width: 100%; - padding: 5px; - border: 1px solid #f2f2f2; - border-radius: 2px; - height: 3rem; } - -/*************** - Nav List -***************/ -.table-of-contents.fixed { - position: fixed; } -.table-of-contents li { - padding: 2px 0; } -.table-of-contents a { - display: inline-block; - font-weight: 300; - color: #757575; - padding-left: 20px; - height: 1.5rem; - line-height: 1.5rem; - letter-spacing: .4; - display: inline-block; } - .table-of-contents a:hover { - color: #a8a8a8; - padding-left: 19px; - border-left: 1px solid #ea4a4f; } - .table-of-contents a.active { - font-weight: 500; - padding-left: 18px; - border-left: 2px solid #ea4a4f; } - -.side-nav { - position: fixed; - width: 240px; - left: -105%; - top: 0; - margin: 0; - height: 100%; - height: calc(100% + 60px); - height: -moz-calc(100%); - padding-bottom: 60px; - background-color: #fff; - z-index: 999; - overflow-y: auto; - will-change: left; } - .side-nav.right-aligned { - will-change: right; - right: -105%; - left: auto; } - .side-nav .collapsible { - margin: 0; } - .side-nav li { - float: none; - padding: 0 15px; } - .side-nav li:hover, .side-nav li.active { - background-color: #ddd; } - .side-nav a { - color: #444; - display: block; - font-size: 1rem; - height: 64px; - line-height: 64px; - padding: 0 15px; } - -.drag-target { - height: 100%; - width: 10px; - position: fixed; - top: 0; - z-index: 998; } - -.side-nav.fixed a { - display: block; - padding: 0 15px; - color: #444; } - -.side-nav.fixed { - left: 0; - position: fixed; } - .side-nav.fixed.right-aligned { - right: 0; - left: auto; } - -@media only screen and (max-width : 992px) { - .side-nav.fixed { - left: -105%; } - .side-nav.fixed.right-aligned { - right: -105%; - left: auto; } } - -.side-nav .collapsible-body li.active, .side-nav.fixed .collapsible-body li.active { - background-color: #ee6e73; } - .side-nav .collapsible-body li.active a, .side-nav.fixed .collapsible-body li.active a { - color: #fff; } - -#sidenav-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - height: 120vh; - background-color: rgba(0, 0, 0, 0.5); - z-index: 997; - will-change: opacity; } - -/* - @license - Copyright (c) 2014 The Polymer Project Authors. All rights reserved. - This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - Code distributed by Google as part of the polymer project is also - subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ -/**************************/ -/* STYLES FOR THE SPINNER */ -/**************************/ -/* - * Constants: - * STROKEWIDTH = 3px - * ARCSIZE = 270 degrees (amount of circle the arc takes up) - * ARCTIME = 1333ms (time it takes to expand and contract arc) - * ARCSTARTROT = 216 degrees (how much the start location of the arc - * should rotate each time, 216 gives us a - * 5 pointed star shape (it's 360/5 * 3). - * For a 7 pointed star, we might do - * 360/7 * 3 = 154.286) - * CONTAINERWIDTH = 28px - * SHRINK_TIME = 400ms - */ -.preloader-wrapper { - display: inline-block; - position: relative; - width: 48px; - height: 48px; } - .preloader-wrapper.small { - width: 36px; - height: 36px; } - .preloader-wrapper.big { - width: 64px; - height: 64px; } - .preloader-wrapper.active { - /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ - -webkit-animation: container-rotate 1568ms linear infinite; - animation: container-rotate 1568ms linear infinite; } - -@-webkit-keyframes container-rotate { - to { - -webkit-transform: rotate(360deg); } } - -@keyframes container-rotate { - to { - transform: rotate(360deg); } } - -.spinner-layer { - position: absolute; - width: 100%; - height: 100%; - opacity: 0; } - -.spinner-blue, .spinner-blue-only { - border-color: #4285f4; } - -.spinner-red, .spinner-red-only { - border-color: #db4437; } - -.spinner-yellow, .spinner-yellow-only { - border-color: #f4b400; } - -.spinner-green, .spinner-green-only { - border-color: #0f9d58; } - -/** - * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): - * - * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't - * guarantee that the animation will start _exactly_ after that value. So we avoid using - * animation-delay and instead set custom keyframes for each color (as redundant as it - * seems). - * - * We write out each animation in full (instead of separating animation-name, - * animation-duration, etc.) because under the polyfill, Safari does not recognize those - * specific properties properly, treats them as -webkit-animation, and overrides the - * other animation rules. See https://github.com/Polymer/platform/issues/53. - */ -.active .spinner-layer.spinner-blue { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-red { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-yellow { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-green { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-blue-only, .active .spinner-layer.spinner-red-only, .active .spinner-layer.spinner-yellow-only, .active .spinner-layer.spinner-green-only { - /* durations: 4 * ARCTIME */ - opacity: 1; - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -@-webkit-keyframes fill-unfill-rotate { - /* 0.5 * ARCSIZE */ - /* 1 * ARCSIZE */ - /* 1.5 * ARCSIZE */ - /* 2 * ARCSIZE */ - /* 2.5 * ARCSIZE */ - /* 3 * ARCSIZE */ - /* 3.5 * ARCSIZE */ - /* 4 * ARCSIZE */ - 12.5% { - -webkit-transform: rotate(135deg); } - - 25% { - -webkit-transform: rotate(270deg); } - - 37.5% { - -webkit-transform: rotate(405deg); } - - 50% { - -webkit-transform: rotate(540deg); } - - 62.5% { - -webkit-transform: rotate(675deg); } - - 75% { - -webkit-transform: rotate(810deg); } - - 87.5% { - -webkit-transform: rotate(945deg); } - - to { - -webkit-transform: rotate(1080deg); } } - -@keyframes fill-unfill-rotate { - /* 0.5 * ARCSIZE */ - /* 1 * ARCSIZE */ - /* 1.5 * ARCSIZE */ - /* 2 * ARCSIZE */ - /* 2.5 * ARCSIZE */ - /* 3 * ARCSIZE */ - /* 3.5 * ARCSIZE */ - /* 4 * ARCSIZE */ - 12.5% { - transform: rotate(135deg); } - - 25% { - transform: rotate(270deg); } - - 37.5% { - transform: rotate(405deg); } - - 50% { - transform: rotate(540deg); } - - 62.5% { - transform: rotate(675deg); } - - 75% { - transform: rotate(810deg); } - - 87.5% { - transform: rotate(945deg); } - - to { - transform: rotate(1080deg); } } - -@-webkit-keyframes blue-fade-in-out { - from { - opacity: 1; } - - 25% { - opacity: 1; } - - 26% { - opacity: 0; } - - 89% { - opacity: 0; } - - 90% { - opacity: 1; } - - 100% { - opacity: 1; } } - -@keyframes blue-fade-in-out { - from { - opacity: 1; } - - 25% { - opacity: 1; } - - 26% { - opacity: 0; } - - 89% { - opacity: 0; } - - 90% { - opacity: 1; } - - 100% { - opacity: 1; } } - -@-webkit-keyframes red-fade-in-out { - from { - opacity: 0; } - - 15% { - opacity: 0; } - - 25% { - opacity: 1; } - - 50% { - opacity: 1; } - - 51% { - opacity: 0; } } - -@keyframes red-fade-in-out { - from { - opacity: 0; } - - 15% { - opacity: 0; } - - 25% { - opacity: 1; } - - 50% { - opacity: 1; } - - 51% { - opacity: 0; } } - -@-webkit-keyframes yellow-fade-in-out { - from { - opacity: 0; } - - 40% { - opacity: 0; } - - 50% { - opacity: 1; } - - 75% { - opacity: 1; } - - 76% { - opacity: 0; } } - -@keyframes yellow-fade-in-out { - from { - opacity: 0; } - - 40% { - opacity: 0; } - - 50% { - opacity: 1; } - - 75% { - opacity: 1; } - - 76% { - opacity: 0; } } - -@-webkit-keyframes green-fade-in-out { - from { - opacity: 0; } - - 65% { - opacity: 0; } - - 75% { - opacity: 1; } - - 90% { - opacity: 1; } - - 100% { - opacity: 0; } } - -@keyframes green-fade-in-out { - from { - opacity: 0; } - - 65% { - opacity: 0; } - - 75% { - opacity: 1; } - - 90% { - opacity: 1; } - - 100% { - opacity: 0; } } - -/** - * Patch the gap that appear between the two adjacent div.circle-clipper while the - * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). - */ -.gap-patch { - position: absolute; - top: 0; - left: 45%; - width: 10%; - height: 100%; - overflow: hidden; - border-color: inherit; } - -.gap-patch .circle { - width: 1000%; - left: -450%; } - -.circle-clipper { - display: inline-block; - position: relative; - width: 50%; - height: 100%; - overflow: hidden; - border-color: inherit; } - .circle-clipper .circle { - width: 200%; - height: 100%; - border-width: 3px; - /* STROKEWIDTH */ - border-style: solid; - border-color: inherit; - border-bottom-color: transparent !important; - border-radius: 50%; - -webkit-animation: none; - animation: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; } - .circle-clipper.left .circle { - left: 0; - border-right-color: transparent !important; - -webkit-transform: rotate(129deg); - transform: rotate(129deg); } - .circle-clipper.right .circle { - left: -100%; - border-left-color: transparent !important; - -webkit-transform: rotate(-129deg); - transform: rotate(-129deg); } - -.active .circle-clipper.left .circle { - /* duration: ARCTIME */ - -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .circle-clipper.right .circle { - /* duration: ARCTIME */ - -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -@-webkit-keyframes left-spin { - from { - -webkit-transform: rotate(130deg); } - - 50% { - -webkit-transform: rotate(-5deg); } - - to { - -webkit-transform: rotate(130deg); } } - -@keyframes left-spin { - from { - transform: rotate(130deg); } - - 50% { - transform: rotate(-5deg); } - - to { - transform: rotate(130deg); } } - -@-webkit-keyframes right-spin { - from { - -webkit-transform: rotate(-130deg); } - - 50% { - -webkit-transform: rotate(5deg); } - - to { - -webkit-transform: rotate(-130deg); } } - -@keyframes right-spin { - from { - transform: rotate(-130deg); } - - 50% { - transform: rotate(5deg); } - - to { - transform: rotate(-130deg); } } - -#spinnerContainer.cooldown { - /* duration: SHRINK_TIME */ - -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); - animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); } - -@-webkit-keyframes fade-out { - from { - opacity: 1; } - - to { - opacity: 0; } } - -@keyframes fade-out { - from { - opacity: 1; } - - to { - opacity: 0; } } - -.slider { - position: relative; - height: 400px; - width: 100%; } - .slider.fullscreen { - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; } - .slider.fullscreen ul.slides { - height: 100%; } - .slider.fullscreen ul.indicators { - z-index: 2; - bottom: 30px; } - .slider .slides { - background-color: #9e9e9e; - margin: 0; - height: 400px; } - .slider .slides li { - opacity: 0; - position: absolute; - top: 0; - left: 0; - z-index: 1; - width: 100%; - height: inherit; - overflow: hidden; } - .slider .slides li img { - height: 100%; - width: 100%; - background-size: cover; - background-position: center; } - .slider .slides li .caption { - color: #fff; - position: absolute; - top: 15%; - left: 15%; - width: 70%; - opacity: 0; } - .slider .slides li .caption p { - color: #e0e0e0; } - .slider .slides li.active { - z-index: 2; } - .slider .indicators { - position: absolute; - text-align: center; - left: 0; - right: 0; - bottom: 0; - margin: 0; } - .slider .indicators .indicator-item { - display: inline-block; - position: relative; - cursor: pointer; - height: 16px; - width: 16px; - margin: 0 12px; - background-color: #e0e0e0; - -webkit-transition: background-color .3s; - -moz-transition: background-color .3s; - -o-transition: background-color .3s; - -ms-transition: background-color .3s; - transition: background-color .3s; - border-radius: 50%; } - .slider .indicators .indicator-item.active { - background-color: #4CAF50; } - -/* ========================================================================== - $BASE-PICKER - ========================================================================== */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. - */ -.picker { - font-size: 16px; - text-align: left; - line-height: 1.2; - color: #000000; - position: absolute; - z-index: 10000; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - -/** - * The picker input element. - */ -.picker__input { - cursor: default; } - -/** - * When the picker is opened, the input element is "activated". - */ -.picker__input.picker__input--active { - border-color: #0089ec; } - -/** - * The holder is the only "scrollable" top-level container element. - */ -.picker__holder { - width: 100%; - overflow-y: auto; - -webkit-overflow-scrolling: touch; } - -/*! - * Default mobile-first, responsive styling for pickadate.js - * Demo: http://amsul.github.io/pickadate.js - */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. - */ -/** - * Make the holder and frame fullscreen. - */ -.picker__holder, .picker__frame { - bottom: 0; - left: 0; - right: 0; - top: 100%; } - -/** - * The holder should overlay the entire screen. - */ -.picker__holder { - position: fixed; - -webkit-transition: background 0.15s ease-out, top 0s 0.15s; - -moz-transition: background 0.15s ease-out, top 0s 0.15s; - transition: background 0.15s ease-out, top 0s 0.15s; - -webkit-backface-visibility: hidden; } - -/** - * The frame that bounds the box contents of the picker. - */ -.picker__frame { - position: absolute; - margin: 0 auto; - min-width: 256px; - width: 300px; - max-height: 350px; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - -moz-opacity: 0; - opacity: 0; - -webkit-transition: all 0.15s ease-out; - -moz-transition: all 0.15s ease-out; - transition: all 0.15s ease-out; } - -@media (min-height: 28.875em) { - .picker__frame { - overflow: visible; - top: auto; - bottom: -100%; - max-height: 80%; } } - -@media (min-height: 40.125em) { - .picker__frame { - margin-bottom: 7.5%; } } - -/** - * The wrapper sets the stage to vertically align the box contents. - */ -.picker__wrap { - display: table; - width: 100%; - height: 100%; } - -@media (min-height: 28.875em) { - .picker__wrap { - display: block; } } - -/** - * The box contains all the picker contents. - */ -.picker__box { - background: #ffffff; - display: table-cell; - vertical-align: middle; } - -@media (min-height: 28.875em) { - .picker__box { - display: block; - border: 1px solid #777777; - border-top-color: #898989; - border-bottom-width: 0; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; - -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); } } - -/** - * When the picker opens... - */ -.picker--opened .picker__holder { - top: 0; - background: transparent; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)"; - zoom: 1; - background: rgba(0, 0, 0, 0.32); - -webkit-transition: background 0.15s ease-out; - -moz-transition: background 0.15s ease-out; - transition: background 0.15s ease-out; } - -.picker--opened .picker__frame { - top: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); - -moz-opacity: 1; - opacity: 1; } - -@media (min-height: 35.875em) { - .picker--opened .picker__frame { - top: 10%; - bottom: 20% auto; } } - -/** - * For `large` screens, transform into an inline picker. - */ -/* ========================================================================== - CUSTOM MATERIALIZE STYLES - ========================================================================== */ -.picker__input.picker__input--active { - border-color: #E3F2FD; } - -.picker__frame { - margin: 0 auto; - max-width: 325px; } - -@media (min-height: 38.875em) { - .picker--opened .picker__frame { - top: 10%; - bottom: auto; } } - -/* ========================================================================== - $BASE-DATE-PICKER - ========================================================================== */ -/** - * The picker box. - */ -.picker__box { - padding: 0 1em; } - -/** - * The header containing the month and year stuff. - */ -.picker__header { - text-align: center; - position: relative; - margin-top: .75em; } - -/** - * The month and year labels. - */ -.picker__month, .picker__year { - display: inline-block; - margin-left: .25em; - margin-right: .25em; } - -/** - * The month and year selectors. - */ -.picker__select--month, .picker__select--year { - height: 2em; - padding: 0; - margin-left: .25em; - margin-right: .25em; } - -.picker__select--month.browser-default { - display: inline; - background-color: #FFFFFF; - width: 40%; } - -.picker__select--year.browser-default { - display: inline; - background-color: #FFFFFF; - width: 25%; } - -.picker__select--month:focus, .picker__select--year:focus { - border-color: rgba(0, 0, 0, 0.05); } - -/** - * The month navigation buttons. - */ -.picker__nav--prev, .picker__nav--next { - position: absolute; - padding: .5em 1.25em; - width: 1em; - height: 1em; - box-sizing: content-box; - top: -0.25em; } - -.picker__nav--prev { - left: -1em; - padding-right: 1.25em; } - -.picker__nav--next { - right: -1em; - padding-left: 1.25em; } - -.picker__nav--disabled, .picker__nav--disabled:hover, .picker__nav--disabled:before, .picker__nav--disabled:before:hover { - cursor: default; - background: none; - border-right-color: #f5f5f5; - border-left-color: #f5f5f5; } - -/** - * The calendar table of dates - */ -.picker__table { - text-align: center; - border-collapse: collapse; - border-spacing: 0; - table-layout: fixed; - font-size: 1rem; - width: 100%; - margin-top: .75em; - margin-bottom: .5em; } - -.picker__table th, .picker__table td { - text-align: center; } - -.picker__table td { - margin: 0; - padding: 0; } - -/** - * The weekday labels - */ -.picker__weekday { - width: 14.285714286%; - font-size: .75em; - padding-bottom: .25em; - color: #999999; - font-weight: 500; - /* Increase the spacing a tad */ } - -@media (min-height: 33.875em) { - .picker__weekday { - padding-bottom: .5em; } } - -/** - * The days on the calendar - */ -.picker__day--today { - position: relative; - color: #595959; - letter-spacing: -.3; - padding: .75rem 0; - font-weight: 400; - border: 1px solid transparent; } - -.picker__day--disabled:before { - border-top-color: #aaaaaa; } - -.picker__day--infocus:hover { - cursor: pointer; - color: #000; - font-weight: 500; } - -.picker__day--outfocus { - display: none; - padding: .75rem 0; - color: #fff; } - -.picker__day--outfocus:hover { - cursor: pointer; - color: #dddddd; - font-weight: 500; } - -.picker__day--highlighted:hover, .picker--focused .picker__day--highlighted { - cursor: pointer; } - -.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected { - border-radius: 50%; - -webkit-transform: scale(.75); - -moz-transform: scale(.75); - -ms-transform: scale(.75); - -o-transform: scale(.75); - transform: scale(.75); - background: #0089ec; - color: #ffffff; } - -.picker__day--disabled, .picker__day--disabled:hover, .picker--focused .picker__day--disabled { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; } - -.picker__day--highlighted.picker__day--disabled, .picker__day--highlighted.picker__day--disabled:hover { - background: #bbbbbb; } - -/** - * The footer containing the "today", "clear", and "close" buttons. - */ -.picker__footer { - text-align: center; - display: flex; - align-items: center; - justify-content: space-between; } - -.picker__button--today, .picker__button--clear, .picker__button--close { - border: 1px solid #ffffff; - background: #ffffff; - font-size: .8em; - padding: .66em 0; - font-weight: bold; - width: 33%; - display: inline-block; - vertical-align: bottom; } - -.picker__button--today:hover, .picker__button--clear:hover, .picker__button--close:hover { - cursor: pointer; - color: #000000; - background: #b1dcfb; - border-bottom-color: #b1dcfb; } - -.picker__button--today:focus, .picker__button--clear:focus, .picker__button--close:focus { - background: #b1dcfb; - border-color: rgba(0, 0, 0, 0.05); - outline: none; } - -.picker__button--today:before, .picker__button--clear:before, .picker__button--close:before { - position: relative; - display: inline-block; - height: 0; } - -.picker__button--today:before, .picker__button--clear:before { - content: " "; - margin-right: .45em; } - -.picker__button--today:before { - top: -0.05em; - width: 0; - border-top: 0.66em solid #0059bc; - border-left: .66em solid transparent; } - -.picker__button--clear:before { - top: -0.25em; - width: .66em; - border-top: 3px solid #ee2200; } - -.picker__button--close:before { - content: "\D7"; - top: -0.1em; - vertical-align: top; - font-size: 1.1em; - margin-right: .35em; - color: #777777; } - -.picker__button--today[disabled], .picker__button--today[disabled]:hover { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; } - -.picker__button--today[disabled]:before { - border-top-color: #aaaaaa; } - -/* ========================================================================== - CUSTOM MATERIALIZE STYLES - ========================================================================== */ -.picker__box { - border-radius: 2px; - overflow: hidden; } - -.picker__date-display { - text-align: center; - background-color: #26a69a; - color: #fff; - padding-bottom: 15px; - font-weight: 300; } - -.picker__nav--prev:hover, .picker__nav--next:hover { - cursor: pointer; - color: #000000; - background: #a1ded8; } - -.picker__weekday-display { - background-color: #1f897f; - padding: 10px; - font-weight: 200; - letter-spacing: .5; - font-size: 1rem; - margin-bottom: 15px; } - -.picker__month-display { - text-transform: uppercase; - font-size: 2rem; } - -.picker__day-display { - font-size: 4.5rem; - font-weight: 400; } - -.picker__year-display { - font-size: 1.8rem; - color: rgba(255, 255, 255, 0.4); } - -.picker__box { - padding: 0; } - -.picker__calendar-container { - padding: 0 1rem; } - .picker__calendar-container thead { - border: none; } - -.picker__table { - margin-top: 0; - margin-bottom: .5em; } - -.picker__day--infocus { - color: #595959; - letter-spacing: -.3; - padding: .75rem 0; - font-weight: 400; - border: 1px solid transparent; } - -.picker__day.picker__day--today { - color: #26a69a; } - -.picker__day.picker__day--today.picker__day--selected { - color: #fff; } - -.picker__weekday { - font-size: .9rem; } - -.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected { - border-radius: 50%; - -webkit-transform: scale(.9); - -moz-transform: scale(.9); - -ms-transform: scale(.9); - -o-transform: scale(.9); - transform: scale(.9); - background-color: #26a69a; - color: #ffffff; } - .picker__day--selected.picker__day--outfocus, .picker__day--selected:hover.picker__day--outfocus, .picker--focused .picker__day--selected.picker__day--outfocus { - background-color: #a1ded8; } - -.picker__footer { - text-align: right; - padding: 5px 10px; } - -.picker__close, .picker__today { - font-size: 1.1rem; - padding: 0 1rem; - color: #26a69a; } - -.picker__nav--prev:before, .picker__nav--next:before { - content: " "; - border-top: .5em solid transparent; - border-bottom: .5em solid transparent; - border-right: 0.75em solid #676767; - width: 0; - height: 0; - display: block; - margin: 0 auto; } - -.picker__nav--next:before { - border-right: 0; - border-left: 0.75em solid #676767; } - -button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus { - background-color: #a1ded8; } - -/* ========================================================================== - $BASE-TIME-PICKER - ========================================================================== */ -/** - * The list of times. - */ -.picker__list { - list-style: none; - padding: 0.75em 0 4.2em; - margin: 0; } - -/** - * The times on the clock. - */ -.picker__list-item { - border-bottom: 1px solid #dddddd; - border-top: 1px solid #dddddd; - margin-bottom: -1px; - position: relative; - background: #ffffff; - padding: .75em 1.25em; } - -@media (min-height: 46.75em) { - .picker__list-item { - padding: .5em 1em; } } - -/* Hovered time */ -.picker__list-item:hover { - cursor: pointer; - color: #000000; - background: #b1dcfb; - border-color: #0089ec; - z-index: 10; } - -/* Highlighted and hovered/focused time */ -.picker__list-item--highlighted { - border-color: #0089ec; - z-index: 10; } - -.picker__list-item--highlighted:hover, .picker--focused .picker__list-item--highlighted { - cursor: pointer; - color: #000000; - background: #b1dcfb; } - -/* Selected and hovered/focused time */ -.picker__list-item--selected, .picker__list-item--selected:hover, .picker--focused .picker__list-item--selected { - background: #0089ec; - color: #ffffff; - z-index: 10; } - -/* Disabled time */ -.picker__list-item--disabled, .picker__list-item--disabled:hover, .picker--focused .picker__list-item--disabled { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; - border-color: #dddddd; - z-index: auto; } - -/** - * The clear button - */ -.picker--time .picker__button--clear { - display: block; - width: 80%; - margin: 1em auto 0; - padding: 1em 1.25em; - background: none; - border: 0; - font-weight: 500; - font-size: .67em; - text-align: center; - text-transform: uppercase; - color: #666; } - -.picker--time .picker__button--clear:hover, .picker--time .picker__button--clear:focus { - color: #000000; - background: #b1dcfb; - background: #ee2200; - border-color: #ee2200; - cursor: pointer; - color: #ffffff; - outline: none; } - -.picker--time .picker__button--clear:before { - top: -0.25em; - color: #666; - font-size: 1.25em; - font-weight: bold; } - -.picker--time .picker__button--clear:hover:before, .picker--time .picker__button--clear:focus:before { - color: #ffffff; } - -/* ========================================================================== - $DEFAULT-TIME-PICKER - ========================================================================== */ -/** - * The frame the bounds the time picker. - */ -.picker--time .picker__frame { - min-width: 256px; - max-width: 320px; } - -/** - * The picker box. - */ -.picker--time .picker__box { - font-size: 1em; - background: #f2f2f2; - padding: 0; } - -@media (min-height: 40.125em) { - .picker--time .picker__box { - margin-bottom: 5em; } } diff --git a/bin/materialize.js b/bin/materialize.js deleted file mode 100644 index 95ea537c82..0000000000 --- a/bin/materialize.js +++ /dev/null @@ -1,4 +0,0 @@ -jQuery.easing.jswing=jQuery.easing.swing,jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(a,b,c,d,e){return jQuery.easing[jQuery.easing.def](a,b,c,d,e)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return 0==b?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return 0==b?c:b==e?c+d:(b/=e/2)<1?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){return(b/=e/2)<1?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(1==(b/=e))return c+d;if(g||(g=.3*e),hb?-.5*h*Math.pow(2,10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)+c:h*Math.pow(2,-10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)*.5+d+c},easeInBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*(b/=e)*b*((f+1)*b-f)+c},easeOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*((b=b/e-1)*b*((f+1)*b+f)+1)+c},easeInOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),(b/=e/2)<1?d/2*b*b*(((f*=1.525)+1)*b-f)+c:d/2*((b-=2)*b*(((f*=1.525)+1)*b+f)+2)+c},easeInBounce:function(a,b,c,d,e){return d-jQuery.easing.easeOutBounce(a,e-b,0,d,e)+c},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?7.5625*d*b*b+c:2/2.75>b?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:2.5/2.75>b?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(a,b,c,d,e){return e/2>b?.5*jQuery.easing.easeInBounce(a,2*b,0,d,e)+c:.5*jQuery.easing.easeOutBounce(a,2*b-e,0,d,e)+.5*d+c}}),jQuery.extend(jQuery.easing,{easeInOutMaterial:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:d/4*((b-=2)*b*b+2)+c}}),!function(a){function b(a){var b=a.length,d=c.type(a);return"function"===d||c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||0===b||"number"==typeof b&&b>0&&b-1 in a}if(!a.jQuery){var c=function(a,b){return new c.fn.init(a,b)};c.isWindow=function(a){return null!=a&&a==a.window},c.type=function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?e[g.call(a)]||"object":typeof a},c.isArray=Array.isArray||function(a){return"array"===c.type(a)},c.isPlainObject=function(a){var b;if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!f.call(a,"constructor")&&!f.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}for(b in a);return void 0===b||f.call(a,b)},c.each=function(a,c,d){var e,f=0,g=a.length,h=b(a);if(d){if(h)for(;g>f&&(e=c.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=c.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=c.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=c.call(a[f],f,a[f]),e===!1)break;return a},c.data=function(a,b,e){if(void 0===e){var f=a[c.expando],g=f&&d[f];if(void 0===b)return g;if(g&&b in g)return g[b]}else if(void 0!==b){var f=a[c.expando]||(a[c.expando]=++c.uuid);return d[f]=d[f]||{},d[f][b]=e,e}},c.removeData=function(a,b){var e=a[c.expando],f=e&&d[e];f&&c.each(b,function(a,b){delete f[b]})},c.extend=function(){var a,b,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[i]||{},i++),"object"!=typeof h&&"function"!==c.type(h)&&(h={}),i===j&&(h=this,i--);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(c.isPlainObject(d)||(b=c.isArray(d)))?(b?(b=!1,g=a&&c.isArray(a)?a:[]):g=a&&c.isPlainObject(a)?a:{},h[e]=c.extend(k,g,d)):void 0!==d&&(h[e]=d));return h},c.queue=function(a,d,e){function f(a,c){var d=c||[];return null!=a&&(b(Object(a))?!function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;)a[e++]=b[d++];if(c!==c)for(;void 0!==b[d];)a[e++]=b[d++];return a.length=e,a}(d,"string"==typeof a?[a]:a):[].push.call(d,a)),d}if(a){d=(d||"fx")+"queue";var g=c.data(a,d);return e?(!g||c.isArray(e)?g=c.data(a,d,f(e)):g.push(e),g):g||[]}},c.dequeue=function(a,b){c.each(a.nodeType?[a]:a,function(a,d){b=b||"fx";var e=c.queue(d,b),f=e.shift();"inprogress"===f&&(f=e.shift()),f&&("fx"===b&&e.unshift("inprogress"),f.call(d,function(){c.dequeue(d,b)}))})},c.fn=c.prototype={init:function(a){if(a.nodeType)return this[0]=a,this;throw new Error("Not a DOM node.")},offset:function(){var b=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:b.top+(a.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:b.left+(a.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function a(){for(var a=this.offsetParent||document;a&&"html"===!a.nodeType.toLowerCase&&"static"===a.style.position;)a=a.offsetParent;return a||document}var b=this[0],a=a.apply(b),d=this.offset(),e=/^(?:body|html)$/i.test(a.nodeName)?{top:0,left:0}:c(a).offset();return d.top-=parseFloat(b.style.marginTop)||0,d.left-=parseFloat(b.style.marginLeft)||0,a.style&&(e.top+=parseFloat(a.style.borderTopWidth)||0,e.left+=parseFloat(a.style.borderLeftWidth)||0),{top:d.top-e.top,left:d.left-e.left}}};var d={};c.expando="velocity"+(new Date).getTime(),c.uuid=0;for(var e={},f=e.hasOwnProperty,g=e.toString,h="Boolean Number String Function Array Date RegExp Object Error".split(" "),i=0;ie;++e){var f=j(c,a,d);if(0===f)return c;var g=i(c,a,d)-b;c-=g/f}return c}function l(){for(var b=0;t>b;++b)x[b]=i(b*u,a,d)}function m(b,c,e){var f,g,h=0;do g=c+(e-c)/2,f=i(g,a,d)-b,f>0?e=g:c=g;while(Math.abs(f)>r&&++h=q?k(b,h):0==i?h:m(b,c,c+u)}function o(){y=!0,(a!=c||d!=e)&&l()}var p=4,q=.001,r=1e-7,s=10,t=11,u=1/(t-1),v="Float32Array"in b;if(4!==arguments.length)return!1;for(var w=0;4>w;++w)if("number"!=typeof arguments[w]||isNaN(arguments[w])||!isFinite(arguments[w]))return!1;a=Math.min(a,1),d=Math.min(d,1),a=Math.max(a,0),d=Math.max(d,0);var x=v?new Float32Array(t):new Array(t),y=!1,z=function(b){return y||o(),a===c&&d===e?b:0===b?0:1===b?1:i(n(b),c,e)};z.getControlPoints=function(){return[{x:a,y:c},{x:d,y:e}]};var A="generateBezier("+[a,c,d,e]+")";return z.toString=function(){return A},z}function j(a,b){var c=a;return p.isString(a)?t.Easings[a]||(c=!1):c=p.isArray(a)&&1===a.length?h.apply(null,a):p.isArray(a)&&2===a.length?u.apply(null,a.concat([b])):p.isArray(a)&&4===a.length?i.apply(null,a):!1,c===!1&&(c=t.Easings[t.defaults.easing]?t.defaults.easing:s),c}function k(a){if(a){var b=(new Date).getTime(),c=t.State.calls.length;c>1e4&&(t.State.calls=e(t.State.calls));for(var f=0;c>f;f++)if(t.State.calls[f]){var h=t.State.calls[f],i=h[0],j=h[2],n=h[3],o=!!n,q=null;n||(n=t.State.calls[f][3]=b-16);for(var r=Math.min((b-n)/j.duration,1),s=0,u=i.length;u>s;s++){var w=i[s],y=w.element;if(g(y)){var z=!1;if(j.display!==d&&null!==j.display&&"none"!==j.display){if("flex"===j.display){var A=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];m.each(A,function(a,b){v.setPropertyValue(y,"display",b)})}v.setPropertyValue(y,"display",j.display)}j.visibility!==d&&"hidden"!==j.visibility&&v.setPropertyValue(y,"visibility",j.visibility);for(var B in w)if("element"!==B){var C,D=w[B],E=p.isString(D.easing)?t.Easings[D.easing]:D.easing;if(1===r)C=D.endValue;else{var F=D.endValue-D.startValue;if(C=D.startValue+F*E(r,j,F),!o&&C===D.currentValue)continue}if(D.currentValue=C,"tween"===B)q=C;else{if(v.Hooks.registered[B]){var G=v.Hooks.getRoot(B),H=g(y).rootPropertyValueCache[G];H&&(D.rootPropertyValue=H)}var I=v.setPropertyValue(y,B,D.currentValue+(0===parseFloat(C)?"":D.unitType),D.rootPropertyValue,D.scrollData);v.Hooks.registered[B]&&(g(y).rootPropertyValueCache[G]=v.Normalizations.registered[G]?v.Normalizations.registered[G]("extract",null,I[1]):I[1]),"transform"===I[0]&&(z=!0)}}j.mobileHA&&g(y).transformCache.translate3d===d&&(g(y).transformCache.translate3d="(0px, 0px, 0px)",z=!0),z&&v.flushTransformCache(y)}}j.display!==d&&"none"!==j.display&&(t.State.calls[f][2].display=!1),j.visibility!==d&&"hidden"!==j.visibility&&(t.State.calls[f][2].visibility=!1),j.progress&&j.progress.call(h[1],h[1],r,Math.max(0,n+j.duration-b),n,q),1===r&&l(f)}}t.State.isTicking&&x(k)}function l(a,b){if(!t.State.calls[a])return!1;for(var c=t.State.calls[a][0],e=t.State.calls[a][1],f=t.State.calls[a][2],h=t.State.calls[a][4],i=!1,j=0,k=c.length;k>j;j++){var l=c[j].element;if(b||f.loop||("none"===f.display&&v.setPropertyValue(l,"display",f.display),"hidden"===f.visibility&&v.setPropertyValue(l,"visibility",f.visibility)),f.loop!==!0&&(m.queue(l)[1]===d||!/\.velocityQueueEntryFlag/i.test(m.queue(l)[1]))&&g(l)){g(l).isAnimating=!1,g(l).rootPropertyValueCache={};var n=!1;m.each(v.Lists.transforms3D,function(a,b){var c=/^scale/.test(b)?1:0,e=g(l).transformCache[b];g(l).transformCache[b]!==d&&new RegExp("^\\("+c+"[^.]").test(e)&&(n=!0,delete g(l).transformCache[b])}),f.mobileHA&&(n=!0,delete g(l).transformCache.translate3d),n&&v.flushTransformCache(l),v.Values.removeClass(l,"velocity-animating")}if(!b&&f.complete&&!f.loop&&j===k-1)try{f.complete.call(e,e)}catch(o){setTimeout(function(){throw o},1)}h&&f.loop!==!0&&h(e),g(l)&&f.loop===!0&&!b&&(m.each(g(l).tweensContainer,function(a,b){/^rotate/.test(a)&&360===parseFloat(b.endValue)&&(b.endValue=0,b.startValue=360),/^backgroundPosition/.test(a)&&100===parseFloat(b.endValue)&&"%"===b.unitType&&(b.endValue=0,b.startValue=100)}),t(l,"reverse",{loop:!0,delay:f.delay})),f.queue!==!1&&m.dequeue(l,f.queue)}t.State.calls[a]=!1;for(var p=0,q=t.State.calls.length;q>p;p++)if(t.State.calls[p]!==!1){i=!0;break}i===!1&&(t.State.isTicking=!1,delete t.State.calls,t.State.calls=[])}var m,n=function(){if(c.documentMode)return c.documentMode;for(var a=7;a>4;a--){var b=c.createElement("div");if(b.innerHTML="",b.getElementsByTagName("span").length)return b=null,a}return d}(),o=function(){var a=0;return b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||function(b){var c,d=(new Date).getTime();return c=Math.max(0,16-(d-a)),a=d+c,setTimeout(function(){b(d+c)},c)}}(),p={isString:function(a){return"string"==typeof a},isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},isFunction:function(a){return"[object Function]"===Object.prototype.toString.call(a)},isNode:function(a){return a&&a.nodeType},isNodeList:function(a){return"object"==typeof a&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(a))&&a.length!==d&&(0===a.length||"object"==typeof a[0]&&a[0].nodeType>0)},isWrapped:function(a){return a&&(a.jquery||b.Zepto&&b.Zepto.zepto.isZ(a))},isSVG:function(a){return b.SVGElement&&a instanceof b.SVGElement},isEmptyObject:function(a){for(var b in a)return!1;return!0}},q=!1;if(a.fn&&a.fn.jquery?(m=a,q=!0):m=b.Velocity.Utilities,8>=n&&!q)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=n)return void(jQuery.fn.velocity=jQuery.fn.animate);var r=400,s="swing",t={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:b.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:c.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:m,Redirects:{},Easings:{},Promise:b.Promise,defaults:{queue:"",duration:r,easing:s,begin:d,complete:d,progress:d,display:d,visibility:d,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(a){m.data(a,"velocity",{isSVG:p.isSVG(a),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};b.pageYOffset!==d?(t.State.scrollAnchor=b,t.State.scrollPropertyLeft="pageXOffset",t.State.scrollPropertyTop="pageYOffset"):(t.State.scrollAnchor=c.documentElement||c.body.parentNode||c.body,t.State.scrollPropertyLeft="scrollLeft",t.State.scrollPropertyTop="scrollTop");var u=function(){function a(a){return-a.tension*a.x-a.friction*a.v}function b(b,c,d){var e={x:b.x+d.dx*c,v:b.v+d.dv*c,tension:b.tension,friction:b.friction};return{dx:e.v,dv:a(e)}}function c(c,d){var e={dx:c.v,dv:a(c)},f=b(c,.5*d,e),g=b(c,.5*d,f),h=b(c,d,g),i=1/6*(e.dx+2*(f.dx+g.dx)+h.dx),j=1/6*(e.dv+2*(f.dv+g.dv)+h.dv);return c.x=c.x+i*d,c.v=c.v+j*d,c}return function d(a,b,e){var f,g,h,i={x:-1,v:0,tension:null,friction:null},j=[0],k=0,l=1e-4,m=.016;for(a=parseFloat(a)||500,b=parseFloat(b)||20,e=e||null,i.tension=a,i.friction=b,f=null!==e,f?(k=d(a,b),g=k/e*m):g=m;h=c(h||i,g),j.push(1+h.x),k+=16,Math.abs(h.x)>l&&Math.abs(h.v)>l;);return f?function(a){return j[a*(j.length-1)|0]}:k}}();t.Easings={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},spring:function(a){return 1-Math.cos(4.5*a*Math.PI)*Math.exp(6*-a)}},m.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(a,b){t.Easings[b[0]]=i.apply(null,b[1])});var v=t.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var a=0;a=n)switch(a){case"name":return"filter";case"extract":var d=c.toString().match(/alpha\(opacity=(.*)\)/i);return c=d?d[1]/100:1;case"inject":return b.style.zoom=1,parseFloat(c)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(c),10)+")"}else switch(a){case"name":return"opacity";case"extract":return c;case"inject":return c}}},register:function(){9>=n||t.State.isGingerbread||(v.Lists.transformsBase=v.Lists.transformsBase.concat(v.Lists.transforms3D));for(var a=0;ae&&(e=1),f=!/(\d)$/i.test(e);break;case"skew":f=!/(deg|\d)$/i.test(e);break;case"rotate":f=!/(deg|\d)$/i.test(e)}return f||(g(c).transformCache[b]="("+e+")"),g(c).transformCache[b]}}}();for(var a=0;a=n||3!==f.split(" ").length||(f+=" 1"),f;case"inject":return 8>=n?4===e.split(" ").length&&(e=e.split(/\s+/).slice(0,3).join(" ")):3===e.split(" ").length&&(e+=" 1"),(8>=n?"rgb":"rgba")+"("+e.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(a){return a.replace(/-(\w)/g,function(a,b){return b.toUpperCase()})},SVGAttribute:function(a){var b="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(n||t.State.isAndroid&&!t.State.isChrome)&&(b+="|transform"),new RegExp("^("+b+")$","i").test(a)},prefixCheck:function(a){if(t.State.prefixMatches[a])return[t.State.prefixMatches[a],!0];for(var b=["","Webkit","Moz","ms","O"],c=0,d=b.length;d>c;c++){var e;if(e=0===c?a:b[c]+a.replace(/^\w/,function(a){return a.toUpperCase()}),p.isString(t.State.prefixElement.style[e]))return t.State.prefixMatches[a]=e,[e,!0]}return[a,!1]}},Values:{hexToRgb:function(a){var b,c=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,d=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return a=a.replace(c,function(a,b,c,d){return b+b+c+c+d+d}),b=d.exec(a),b?[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]:[0,0,0]},isCSSNullValue:function(a){return 0==a||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(a)},getUnitType:function(a){return/^(rotate|skew)/i.test(a)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(a)?"":"px"},getDisplayType:function(a){var b=a&&a.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(b)?"inline":/^(li)$/i.test(b)?"list-item":/^(tr)$/i.test(b)?"table-row":/^(table)$/i.test(b)?"table":/^(tbody)$/i.test(b)?"table-row-group":"block"},addClass:function(a,b){a.classList?a.classList.add(b):a.className+=(a.className.length?" ":"")+b},removeClass:function(a,b){a.classList?a.classList.remove(b):a.className=a.className.toString().replace(new RegExp("(^|\\s)"+b.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(a,c,e,f){function h(a,c){function e(){j&&v.setPropertyValue(a,"display","none")}var i=0;if(8>=n)i=m.css(a,c);else{var j=!1;if(/^(width|height)$/.test(c)&&0===v.getPropertyValue(a,"display")&&(j=!0,v.setPropertyValue(a,"display",v.Values.getDisplayType(a))),!f){if("height"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var k=a.offsetHeight-(parseFloat(v.getPropertyValue(a,"borderTopWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderBottomWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingTop"))||0)-(parseFloat(v.getPropertyValue(a,"paddingBottom"))||0);return e(),k}if("width"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var l=a.offsetWidth-(parseFloat(v.getPropertyValue(a,"borderLeftWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderRightWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingLeft"))||0)-(parseFloat(v.getPropertyValue(a,"paddingRight"))||0);return e(),l}}var o;o=g(a)===d?b.getComputedStyle(a,null):g(a).computedStyle?g(a).computedStyle:g(a).computedStyle=b.getComputedStyle(a,null),"borderColor"===c&&(c="borderTopColor"),i=9===n&&"filter"===c?o.getPropertyValue(c):o[c],(""===i||null===i)&&(i=a.style[c]),e()}if("auto"===i&&/^(top|right|bottom|left)$/i.test(c)){var p=h(a,"position");("fixed"===p||"absolute"===p&&/top|left/i.test(c))&&(i=m(a).position()[c]+"px")}return i}var i;if(v.Hooks.registered[c]){var j=c,k=v.Hooks.getRoot(j);e===d&&(e=v.getPropertyValue(a,v.Names.prefixCheck(k)[0])),v.Normalizations.registered[k]&&(e=v.Normalizations.registered[k]("extract",a,e)),i=v.Hooks.extractValue(j,e)}else if(v.Normalizations.registered[c]){var l,o;l=v.Normalizations.registered[c]("name",a),"transform"!==l&&(o=h(a,v.Names.prefixCheck(l)[0]),v.Values.isCSSNullValue(o)&&v.Hooks.templates[c]&&(o=v.Hooks.templates[c][1])),i=v.Normalizations.registered[c]("extract",a,o)}if(!/^[\d-]/.test(i))if(g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c))if(/^(height|width)$/i.test(c))try{i=a.getBBox()[c]}catch(p){i=0}else i=a.getAttribute(c);else i=h(a,v.Names.prefixCheck(c)[0]);return v.Values.isCSSNullValue(i)&&(i=0),t.debug>=2&&console.log("Get "+c+": "+i),i},setPropertyValue:function(a,c,d,e,f){var h=c;if("scroll"===c)f.container?f.container["scroll"+f.direction]=d:"Left"===f.direction?b.scrollTo(d,f.alternateValue):b.scrollTo(f.alternateValue,d);else if(v.Normalizations.registered[c]&&"transform"===v.Normalizations.registered[c]("name",a))v.Normalizations.registered[c]("inject",a,d),h="transform",d=g(a).transformCache[c];else{if(v.Hooks.registered[c]){var i=c,j=v.Hooks.getRoot(c);e=e||v.getPropertyValue(a,j),d=v.Hooks.injectValue(i,d,e),c=j}if(v.Normalizations.registered[c]&&(d=v.Normalizations.registered[c]("inject",a,d),c=v.Normalizations.registered[c]("name",a)),h=v.Names.prefixCheck(c)[0],8>=n)try{a.style[h]=d}catch(k){t.debug&&console.log("Browser does not support ["+d+"] for ["+h+"]")}else g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c)?a.setAttribute(c,d):a.style[h]=d;t.debug>=2&&console.log("Set "+c+" ("+h+"): "+d)}return[h,d]},flushTransformCache:function(a){function b(b){return parseFloat(v.getPropertyValue(a,b))}var c="";if((n||t.State.isAndroid&&!t.State.isChrome)&&g(a).isSVG){var d={translate:[b("translateX"),b("translateY")],skewX:[b("skewX")],skewY:[b("skewY")],scale:1!==b("scale")?[b("scale"),b("scale")]:[b("scaleX"),b("scaleY")],rotate:[b("rotateZ"),0,0]};m.each(g(a).transformCache,function(a){/^translate/i.test(a)?a="translate":/^scale/i.test(a)?a="scale":/^rotate/i.test(a)&&(a="rotate"),d[a]&&(c+=a+"("+d[a].join(" ")+") ",delete d[a])})}else{var e,f;m.each(g(a).transformCache,function(b){return e=g(a).transformCache[b],"transformPerspective"===b?(f=e,!0):(9===n&&"rotateZ"===b&&(b="rotate"),void(c+=b+e+" "))}),f&&(c="perspective"+f+" "+c)}v.setPropertyValue(a,"transform",c)}};v.Hooks.register(),v.Normalizations.register(),t.hook=function(a,b,c){var e=d;return a=f(a),m.each(a,function(a,f){if(g(f)===d&&t.init(f),c===d)e===d&&(e=t.CSS.getPropertyValue(f,b));else{var h=t.CSS.setPropertyValue(f,b,c);"transform"===h[0]&&t.CSS.flushTransformCache(f),e=h}}),e};var w=function(){function a(){return h?B.promise||null:i}function e(){function a(){function a(a,b){var c=d,e=d,g=d;return p.isArray(a)?(c=a[0],!p.isArray(a[1])&&/^[\d-]/.test(a[1])||p.isFunction(a[1])||v.RegEx.isHex.test(a[1])?g=a[1]:(p.isString(a[1])&&!v.RegEx.isHex.test(a[1])||p.isArray(a[1]))&&(e=b?a[1]:j(a[1],h.duration),a[2]!==d&&(g=a[2]))):c=a,b||(e=e||h.easing),p.isFunction(c)&&(c=c.call(f,y,x)),p.isFunction(g)&&(g=g.call(f,y,x)),[c||0,e,g]}function l(a,b){var c,d;return d=(b||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(a){return c=a,""}),c||(c=v.Values.getUnitType(a)),[d,c]}function n(){var a={myParent:f.parentNode||c.body,position:v.getPropertyValue(f,"position"),fontSize:v.getPropertyValue(f,"fontSize")},d=a.position===I.lastPosition&&a.myParent===I.lastParent,e=a.fontSize===I.lastFontSize;I.lastParent=a.myParent,I.lastPosition=a.position,I.lastFontSize=a.fontSize;var h=100,i={};if(e&&d)i.emToPx=I.lastEmToPx,i.percentToPxWidth=I.lastPercentToPxWidth,i.percentToPxHeight=I.lastPercentToPxHeight;else{var j=g(f).isSVG?c.createElementNS("http://www.w3.org/2000/svg","rect"):c.createElement("div");t.init(j),a.myParent.appendChild(j),m.each(["overflow","overflowX","overflowY"],function(a,b){t.CSS.setPropertyValue(j,b,"hidden")}),t.CSS.setPropertyValue(j,"position",a.position),t.CSS.setPropertyValue(j,"fontSize",a.fontSize),t.CSS.setPropertyValue(j,"boxSizing","content-box"),m.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(a,b){t.CSS.setPropertyValue(j,b,h+"%")}),t.CSS.setPropertyValue(j,"paddingLeft",h+"em"),i.percentToPxWidth=I.lastPercentToPxWidth=(parseFloat(v.getPropertyValue(j,"width",null,!0))||1)/h,i.percentToPxHeight=I.lastPercentToPxHeight=(parseFloat(v.getPropertyValue(j,"height",null,!0))||1)/h,i.emToPx=I.lastEmToPx=(parseFloat(v.getPropertyValue(j,"paddingLeft"))||1)/h,a.myParent.removeChild(j)}return null===I.remToPx&&(I.remToPx=parseFloat(v.getPropertyValue(c.body,"fontSize"))||16),null===I.vwToPx&&(I.vwToPx=parseFloat(b.innerWidth)/100,I.vhToPx=parseFloat(b.innerHeight)/100),i.remToPx=I.remToPx,i.vwToPx=I.vwToPx,i.vhToPx=I.vhToPx,t.debug>=1&&console.log("Unit ratios: "+JSON.stringify(i),f),i}if(h.begin&&0===y)try{h.begin.call(o,o)}catch(r){setTimeout(function(){throw r},1)}if("scroll"===C){var u,w,z,A=/^x$/i.test(h.axis)?"Left":"Top",D=parseFloat(h.offset)||0;h.container?p.isWrapped(h.container)||p.isNode(h.container)?(h.container=h.container[0]||h.container,u=h.container["scroll"+A],z=u+m(f).position()[A.toLowerCase()]+D):h.container=null:(u=t.State.scrollAnchor[t.State["scrollProperty"+A]],w=t.State.scrollAnchor[t.State["scrollProperty"+("Left"===A?"Top":"Left")]],z=m(f).offset()[A.toLowerCase()]+D),i={scroll:{rootPropertyValue:!1,startValue:u,currentValue:u,endValue:z,unitType:"",easing:h.easing,scrollData:{container:h.container,direction:A,alternateValue:w}},element:f},t.debug&&console.log("tweensContainer (scroll): ",i.scroll,f)}else if("reverse"===C){if(!g(f).tweensContainer)return void m.dequeue(f,h.queue);"none"===g(f).opts.display&&(g(f).opts.display="auto"),"hidden"===g(f).opts.visibility&&(g(f).opts.visibility="visible"),g(f).opts.loop=!1,g(f).opts.begin=null,g(f).opts.complete=null,s.easing||delete h.easing,s.duration||delete h.duration,h=m.extend({},g(f).opts,h);var E=m.extend(!0,{},g(f).tweensContainer);for(var F in E)if("element"!==F){var G=E[F].startValue;E[F].startValue=E[F].currentValue=E[F].endValue,E[F].endValue=G,p.isEmptyObject(s)||(E[F].easing=h.easing),t.debug&&console.log("reverse tweensContainer ("+F+"): "+JSON.stringify(E[F]),f)}i=E}else if("start"===C){var E;g(f).tweensContainer&&g(f).isAnimating===!0&&(E=g(f).tweensContainer),m.each(q,function(b,c){if(RegExp("^"+v.Lists.colors.join("$|^")+"$").test(b)){var e=a(c,!0),f=e[0],g=e[1],h=e[2];if(v.RegEx.isHex.test(f)){for(var i=["Red","Green","Blue"],j=v.Values.hexToRgb(f),k=h?v.Values.hexToRgb(h):d,l=0;lL;L++){var M={delay:E.delay,progress:E.progress};L===K-1&&(M.display=E.display,M.visibility=E.visibility,M.complete=E.complete),w(o,"reverse",M)}return a()}};t=m.extend(w,t),t.animate=w;var x=b.requestAnimationFrame||o;return t.State.isMobile||c.hidden===d||c.addEventListener("visibilitychange",function(){c.hidden?(x=function(a){return setTimeout(function(){a(!0)},16)},k()):x=b.requestAnimationFrame||o}),a.Velocity=t,a!==b&&(a.fn.velocity=w,a.fn.velocity.defaults=t.defaults),m.each(["Down","Up"],function(a,b){t.Redirects["slide"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j=i.begin,k=i.complete,l={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},n={};i.display===d&&(i.display="Down"===b?"inline"===t.CSS.Values.getDisplayType(a)?"inline-block":"block":"none"),i.begin=function(){j&&j.call(g,g);for(var c in l){n[c]=a.style[c];var d=t.CSS.getPropertyValue(a,c);l[c]="Down"===b?[d,0]:[0,d]}n.overflow=a.style.overflow,a.style.overflow="hidden"},i.complete=function(){for(var b in n)a.style[b]=n[b];k&&k.call(g,g),h&&h.resolver(g)},t(a,l,i)}}),m.each(["In","Out"],function(a,b){t.Redirects["fade"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j={opacity:"In"===b?1:0},k=i.complete;i.complete=e!==f-1?i.begin=null:function(){k&&k.call(g,g),h&&h.resolver(g)},i.display===d&&(i.display="In"===b?"auto":"none"),t(this,j,i)}}),t}(window.jQuery||window.Zepto||window,window,document)}),!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=na(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===ya||f.eventType===Aa)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ba&&(i>xa||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=ma(l.x)>ma(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:la(c/b),y:la(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Ca:ma(a)>=ma(b)?a>0?Da:Ea:b>0?Fa:Ga}function I(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],La)-J(a[1],a[0],La)}function L(a,b){return I(b[0],b[1],La)/I(a[0],a[1],La)}function M(){this.evEl=Na,this.evWin=Oa,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Ra,this.evWin=Sa,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ua,this.evWin=Va,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Aa|Ba)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xa,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(ya|za)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===ya)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Aa|Ba)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Ta={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Ua="touchstart",Va="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Ta[a.type];if(b===ya&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Aa|Ba)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}});var Wa={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Xa="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wa[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==ta,e=c.pointerType==va;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Aa|Ba)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Ya=v(ja.style,"touchAction"),Za=Ya!==d,$a="compute",_a="auto",ab="manipulation",bb="none",cb="pan-x",db="pan-y";T.prototype={set:function(a){a==$a&&(a=this.compute()),Za&&(this.manager.element.style[Ya]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Za){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bb),f=q(d,db),g=q(d,cb);return e||f&&c&Ha||g&&c&Ia?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var eb=1,fb=2,gb=4,hb=8,ib=hb,jb=16,kb=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hb>d&&b(!0),b(),d>=hb&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kb)},canEmit:function(){for(var a=0;af?Da:Ea,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ca:0>g?Fa:Ga,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fb||!(this.state&fb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(aa,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_a]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Aa|Ba)&&!f)this.reset();else if(a.eventType&ya)this.reset(),this._timer=e(function(){this.state=ib,this.tryEmit()},b.time,this);else if(a.eventType&Aa)return ib;return kb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ib&&(a&&a.eventType&Aa?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=na(),this.manager.emit(this.options.event,this._input)))}}),j(ba,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fb)}}),j(ca,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Ha|Ia,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Ha|Ia)?b=a.velocity:c&Ha?b=a.velocityX:c&Ia&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&ma(b)>this.options.velocity&&a.eventType&Aa},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(da,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ab]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance li > .collapsible-header"),b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}),h.not(b).removeClass("active").parent().removeClass("active"),h.not(b).parent().children(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function d(b){b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function e(a){var b=f(a);return b.length>0}function f(a){return a.closest("li > .collapsible-header")}var g=a(this),h=a(this).find("> li > .collapsible-header"),i=g.data("collapsible");g.off("click.collapse",".collapsible-header"),h.off("click.collapse"),b.accordion||"accordion"===i||void 0===i?(h=g.find("> li > .collapsible-header"),h.on("click.collapse",function(b){var d=a(b.target);e(d)&&(d=f(d)),d.toggleClass("active"),c(d)}),c(h.filter(".active").first())):h.each(function(){a(this).on("click.collapse",function(b){var c=a(b.target);e(c)&&(c=f(c)),c.toggleClass("active"),d(c)}),a(this).hasClass("active")&&d(a(this))})})},a(document).ready(function(){a(".collapsible").collapsible()})}(jQuery),function(a){a.fn.scrollTo=function(b){return a(this).scrollTop(a(this).scrollTop()-a(this).offset().top+a(b).offset().top),this},a.fn.dropdown=function(b){var c={inDuration:300,outDuration:225,constrain_width:!0,hover:!1,gutter:0,belowOrigin:!1};this.each(function(){function d(){void 0!==g.data("induration")&&(h.inDuration=g.data("inDuration")),void 0!==g.data("outduration")&&(h.outDuration=g.data("outDuration")),void 0!==g.data("constrainwidth")&&(h.constrain_width=g.data("constrainwidth")),void 0!==g.data("hover")&&(h.hover=g.data("hover")),void 0!==g.data("gutter")&&(h.gutter=g.data("gutter")),void 0!==g.data("beloworigin")&&(h.belowOrigin=g.data("beloworigin"))}function e(){d(),i.addClass("active"),h.constrain_width===!0&&i.css("width",g.outerWidth());var b=0;h.belowOrigin===!0&&(b=g.height());var c=g.offset().left,e=0,f=h.gutter;c+i.innerWidth()>a(window).width()&&(e=g.innerWidth()-i.innerWidth(),f=-1*f),i.css({position:"absolute",top:g.position().top+b,left:g.position().left+e+f}),i.stop(!0,!0).css("opacity",0).slideDown({queue:!1,duration:h.inDuration,easing:"easeOutCubic",complete:function(){a(this).css("height","")}}).animate({opacity:1},{queue:!1,duration:h.inDuration,easing:"easeOutSine"})}function f(){i.fadeOut(h.outDuration),i.removeClass("active")}var g=a(this),h=a.extend({},c,b),i=a("#"+g.attr("data-activates"));if(d(),g.after(i),h.hover){var j=!1;g.unbind("click."+g.attr("id")),g.on("mouseenter",function(){j===!1&&(e(),j=!0)}),g.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-content").is(i)||(i.stop(!0,!0),f(),j=!1)}),i.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-button").is(g)||(i.stop(!0,!0),f(),j=!1)})}else g.unbind("click."+g.attr("id")),g.bind("click."+g.attr("id"),function(b){g[0]==b.currentTarget&&0===a(b.target).closest(".dropdown-content").length?(b.preventDefault(),e()):g.hasClass("active")&&(f(),a(document).unbind("click."+i.attr("id"))),i.hasClass("active")&&a(document).bind("click."+i.attr("id"),function(b){!i.is(b.target)&&!g.is(b.target)&&!g.find(b.target).length>0&&(f(),a(document).unbind("click."+i.attr("id")))})});g.on("open",e),g.on("close",f)})},a(document).ready(function(){a(".dropdown-button").dropdown()})}(jQuery),function(a){var b=0,c=0,d=function(){return c++,"materialize-lean-overlay-"+c};a.fn.extend({openModal:function(c){a("body").css("overflow","hidden");var e={opacity:.5,in_duration:350,out_duration:250,ready:void 0,complete:void 0,dismissible:!0,starting_top:"4%"},f=d(),g=a(this),h=a('
'),i=++b;h.attr("id",f).css("z-index",1e3+2*i),g.data("overlay-id",f).css("z-index",1e3+2*i+1),a("body").append(h),c=a.extend(e,c),c.dismissible&&(h.click(function(){g.closeModal(c)}),a(document).on("keyup.leanModal"+f,function(a){27===a.keyCode&&g.closeModal(c)})),g.find(".modal-close").on("click.close",function(){g.closeModal(c)}),h.css({display:"block",opacity:0}),g.css({display:"block",opacity:0}),h.velocity({opacity:c.opacity},{duration:c.in_duration,queue:!1,ease:"easeOutCubic"}),g.data("associated-overlay",h[0]),g.hasClass("bottom-sheet")?g.velocity({bottom:"0",opacity:1},{duration:c.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready()}}):(a.Velocity.hook(g,"scaleX",.7),g.css({top:c.starting_top}),g.velocity({top:"10%",opacity:1,scaleX:"1"},{duration:c.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready()}}))}}),a.fn.extend({closeModal:function(c){var d={out_duration:250,complete:void 0},e=a(this),f=e.data("overlay-id"),g=a("#"+f);c=a.extend(d,c),a("body").css("overflow",""),e.find(".modal-close").off("click.close"),a(document).off("keyup.leanModal"+f),g.velocity({opacity:0},{duration:c.out_duration,queue:!1,ease:"easeOutQuart"}),e.hasClass("bottom-sheet")?e.velocity({bottom:"-100%",opacity:0},{duration:c.out_duration,queue:!1,ease:"easeOutCubic",complete:function(){g.css({display:"none"}),"function"==typeof c.complete&&c.complete(),g.remove(),b--}}):e.velocity({top:c.starting_top,opacity:0,scaleX:.7},{duration:c.out_duration,complete:function(){a(this).css("display","none"),"function"==typeof c.complete&&c.complete(),g.remove(),b--}})}}),a.fn.extend({leanModal:function(b){return this.each(function(){var c={starting_top:"4%"},d=a.extend(c,b);a(this).click(function(b){d.starting_top=(a(this).offset().top-a(window).scrollTop())/1.15;var c=a(this).attr("href")||"#"+a(this).data("target");a(c).openModal(d),b.preventDefault()})})}})}(jQuery),function(a){a.fn.materialbox=function(){return this.each(function(){function b(){d=!1;var b=g.parent(".material-placeholder"),e=(window.innerWidth,window.innerHeight,g.data("width")),h=g.data("height");g.velocity("stop",!0),a("#materialbox-overlay").velocity("stop",!0),a(".materialbox-caption").velocity("stop",!0),a("#materialbox-overlay").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){ -c=!1,a(this).remove()}}),g.velocity({width:e,height:h,left:0,top:0},{duration:f,queue:!1,easing:"easeOutQuad"}),a(".materialbox-caption").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){b.css({height:"",width:"",position:"",top:"",left:""}),g.css({height:"",top:"",left:"",width:"","max-width":"",position:"","z-index":""}),g.removeClass("active"),d=!0,a(this).remove()}})}if(!a(this).hasClass("initialized")){a(this).addClass("initialized");var c=!1,d=!0,e=275,f=200,g=a(this),h=a("
").addClass("material-placeholder");g.wrap(h),g.on("click",function(){var f=g.parent(".material-placeholder"),h=window.innerWidth,i=window.innerHeight,j=g.width(),k=g.height();if(d===!1)return b(),!1;if(c&&d===!0)return b(),!1;d=!1,g.addClass("active"),c=!0,f.css({width:f[0].getBoundingClientRect().width,height:f[0].getBoundingClientRect().height,position:"relative",top:0,left:0}),g.css({position:"absolute","z-index":1e3}).data("width",j).data("height",k);var l=a('
').css({opacity:0}).click(function(){d===!0&&b()});if(a("body").append(l),l.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"}),""!==g.data("caption")){var m=a('
');m.text(g.data("caption")),a("body").append(m),m.css({display:"inline"}),m.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"})}var n=0,o=j/h,p=k/i,q=0,r=0;o>p?(n=k/j,q=.9*h,r=.9*h*n):(n=j/k,q=.9*i*n,r=.9*i),g.hasClass("responsive-img")?g.velocity({"max-width":q,width:j},{duration:0,queue:!1,complete:function(){g.css({left:0,top:0}).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}}):g.css("left",0).css("top",0).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}),a(window).scroll(function(){c&&b()}),a(document).keyup(function(a){27===a.keyCode&&d===!0&&c&&b()})}})},a(document).ready(function(){a(".materialboxed").materialbox()})}(jQuery),function(a){a.fn.parallax=function(){var b=a(window).width();return this.each(function(){function c(c){var e;e=601>b?d.height()>0?d.height():d.children("img").height():d.height()>0?d.height():500;var f=d.children("img").first(),g=f.height(),h=g-e,i=d.offset().top+e,j=d.offset().top,k=a(window).scrollTop(),l=window.innerHeight,m=k+l,n=(m-j)/(e+l),o=Math.round(h*n);c&&f.css("display","block"),i>k&&k+l>j&&f.css("transform","translate3D(-50%,"+o+"px, 0)")}var d=a(this);d.addClass("parallax"),d.children("img").one("load",function(){c(!0)}).each(function(){this.complete&&a(this).load()}),a(window).scroll(function(){b=a(window).width(),c(!1)}),a(window).resize(function(){b=a(window).width(),c(!1)})})}}(jQuery),function(a){var b={init:function(){return this.each(function(){{var b=a(this);a(window).width()}b.width("100%");var c,d,e=b.find("li.tab a"),f=b.width(),g=b.find("li").first().outerWidth(),h=0;c=a(e.filter('[href="'+location.hash+'"]')),0===c.length&&(c=a(this).find("li.tab a.active").first()),0===c.length&&(c=a(this).find("li.tab a").first()),c.addClass("active"),h=e.index(c),0>h&&(h=0),d=a(c[0].hash),b.append('
');var i=b.find(".indicator");b.is(":visible")&&(i.css({right:f-(h+1)*g}),i.css({left:h*g})),a(window).resize(function(){f=b.width(),g=b.find("li").first().outerWidth(),0>h&&(h=0),0!==g&&0!==f&&(i.css({right:f-(h+1)*g}),i.css({left:h*g}))}),e.not(c).each(function(){a(this.hash).hide()}),b.on("click","a",function(j){if(a(this).parent().hasClass("disabled"))return void j.preventDefault();f=b.width(),g=b.find("li").first().outerWidth(),c.removeClass("active"),d.hide(),c=a(this),d=a(this.hash),e=b.find("li.tab a"),c.addClass("active");var k=h;h=e.index(a(this)),0>h&&(h=0),d.show(),h-k>=0?(i.velocity({right:f-(h+1)*g},{duration:300,queue:!1,easing:"easeOutQuad"}),i.velocity({left:h*g},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})):(i.velocity({left:h*g},{duration:300,queue:!1,easing:"easeOutQuad"}),i.velocity({right:f-(h+1)*g},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})),j.preventDefault()})})},select_tab:function(a){this.find('a[href="#'+a+'"]').trigger("click")}};a.fn.tabs=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)},a(document).ready(function(){a("ul.tabs").tabs()})}(jQuery),function(a){a.fn.tooltip=function(b){var c=null,d=!1,e=null,f=5,g={delay:350};return"remove"===b?(this.each(function(){a("#"+a(this).attr("data-tooltip-id")).remove()}),!1):(b=a.extend(g,b),this.each(function(){var g=Materialize.guid(),h=a(this);h.attr("data-tooltip-id",g);var i=a("").text(h.attr("data-tooltip")),j=a("
");j.addClass("material-tooltip").append(i).appendTo(a("body")).attr("id",g);var k=a("
").addClass("backdrop");k.appendTo(j),k.css({top:0,left:0}),h.off("mouseenter.tooltip mouseleave.tooltip"),h.on({"mouseenter.tooltip":function(){var a=h.data("delay");a=void 0===a||""===a?b.delay:a,c=0,e=setInterval(function(){if(c+=10,c>=a&&d===!1){d=!0,j.css({display:"block",left:"0px",top:"0px"}),j.children("span").text(h.attr("data-tooltip"));var b=h.outerWidth(),e=h.outerHeight(),g=h.attr("data-position"),i=j.outerHeight(),l=j.outerWidth(),m="0px",n="0px",o=8;"top"===g?(j.css({top:h.offset().top-i-f,left:h.offset().left+b/2-l/2}),m="-10px",k.css({borderRadius:"14px 14px 0 0",transformOrigin:"50% 90%",marginTop:i,marginLeft:l/2-k.width()/2})):"left"===g?(j.css({top:h.offset().top+e/2-i/2,left:h.offset().left-l-f}),n="-10px",k.css({width:"14px",height:"14px",borderRadius:"14px 0 0 14px",transformOrigin:"95% 50%",marginTop:i/2,marginLeft:l})):"right"===g?(j.css({top:h.offset().top+e/2-i/2,left:h.offset().left+b+f}),n="+10px",k.css({width:"14px",height:"14px",borderRadius:"0 14px 14px 0",transformOrigin:"5% 50%",marginTop:i/2,marginLeft:"0px"})):(j.css({top:h.offset().top+h.outerHeight()+f,left:h.offset().left+b/2-l/2}),m="+10px",k.css({marginLeft:l/2-k.width()/2})),o=l/8,8>o&&(o=8),("right"===g||"left"===g)&&(o=l/10,6>o&&(o=6)),j.velocity({marginTop:m,marginLeft:n},{duration:350,queue:!1}).velocity({opacity:1},{duration:300,delay:50,queue:!1}),k.css({display:"block"}).velocity({opacity:1},{duration:55,delay:0,queue:!1}).velocity({scale:o},{duration:300,delay:0,queue:!1,easing:"easeInOutQuad"})}},10)},"mouseleave.tooltip":function(){clearInterval(e),c=0,j.velocity({opacity:0,marginTop:0,marginLeft:0},{duration:225,queue:!1,delay:225}),k.velocity({opacity:0,scale:1},{duration:225,delay:275,queue:!1,complete:function(){k.css("display","none"),j.css("display","none"),d=!1}})}})}))},a(document).ready(function(){a(".tooltipped").tooltip()})}(jQuery),function(a){"use strict";function b(a){return null!==a&&a===a.window}function c(a){return b(a)?a:9===a.nodeType&&a.defaultView}function d(a){var b,d,e={top:0,left:0},f=a&&a.ownerDocument;return b=f.documentElement,"undefined"!=typeof a.getBoundingClientRect&&(e=a.getBoundingClientRect()),d=c(f),{top:e.top+d.pageYOffset-b.clientTop,left:e.left+d.pageXOffset-b.clientLeft}}function e(a){var b="";for(var c in a)a.hasOwnProperty(c)&&(b+=c+":"+a[c]+";");return b}function f(a){if(k.allowEvent(a)===!1)return null;for(var b=null,c=a.target||a.srcElement;null!==c.parentElement;){if(!(c instanceof SVGElement||-1===c.className.indexOf("waves-effect"))){b=c;break}if(c.classList.contains("waves-effect")){b=c;break}c=c.parentElement}return b}function g(b){var c=f(b);null!==c&&(j.show(b,c),"ontouchstart"in a&&(c.addEventListener("touchend",j.hide,!1),c.addEventListener("touchcancel",j.hide,!1)),c.addEventListener("mouseup",j.hide,!1),c.addEventListener("mouseleave",j.hide,!1))}var h=h||{},i=document.querySelectorAll.bind(document),j={duration:750,show:function(a,b){if(2===a.button)return!1;var c=b||this,f=document.createElement("div");f.className="waves-ripple",c.appendChild(f);var g=d(c),h=a.pageY-g.top,i=a.pageX-g.left,k="scale("+c.clientWidth/100*10+")";"touches"in a&&(h=a.touches[0].pageY-g.top,i=a.touches[0].pageX-g.left),f.setAttribute("data-hold",Date.now()),f.setAttribute("data-scale",k),f.setAttribute("data-x",i),f.setAttribute("data-y",h);var l={top:h+"px",left:i+"px"};f.className=f.className+" waves-notransition",f.setAttribute("style",e(l)),f.className=f.className.replace("waves-notransition",""),l["-webkit-transform"]=k,l["-moz-transform"]=k,l["-ms-transform"]=k,l["-o-transform"]=k,l.transform=k,l.opacity="1",l["-webkit-transition-duration"]=j.duration+"ms",l["-moz-transition-duration"]=j.duration+"ms",l["-o-transition-duration"]=j.duration+"ms",l["transition-duration"]=j.duration+"ms",l["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f.setAttribute("style",e(l))},hide:function(a){k.touchup(a);var b=this,c=(1.4*b.clientWidth,null),d=b.getElementsByClassName("waves-ripple");if(!(d.length>0))return!1;c=d[d.length-1];var f=c.getAttribute("data-x"),g=c.getAttribute("data-y"),h=c.getAttribute("data-scale"),i=Date.now()-Number(c.getAttribute("data-hold")),l=350-i;0>l&&(l=0),setTimeout(function(){var a={top:g+"px",left:f+"px",opacity:"0","-webkit-transition-duration":j.duration+"ms","-moz-transition-duration":j.duration+"ms","-o-transition-duration":j.duration+"ms","transition-duration":j.duration+"ms","-webkit-transform":h,"-moz-transform":h,"-ms-transform":h,"-o-transform":h,transform:h};c.setAttribute("style",e(a)),setTimeout(function(){try{b.removeChild(c)}catch(a){return!1}},j.duration)},l)},wrapInput:function(a){for(var b=0;b0&&(k.touches-=1)},500):"mousedown"===a.type&&k.touches>0&&(b=!1),b},touchup:function(a){k.allowEvent(a)}};h.displayEffect=function(b){b=b||{},"duration"in b&&(j.duration=b.duration),j.wrapInput(i(".waves-effect")),"ontouchstart"in a&&document.body.addEventListener("touchstart",g,!1),document.body.addEventListener("mousedown",g,!1)},h.attach=function(b){"input"===b.tagName.toLowerCase()&&(j.wrapInput([b]),b=b.parentElement),"ontouchstart"in a&&b.addEventListener("touchstart",g,!1),b.addEventListener("mousedown",g,!1)},a.Waves=h,document.addEventListener("DOMContentLoaded",function(){h.displayEffect()},!1)}(window),Materialize.toast=function(a,b,c,d){function e(a){var b=document.createElement("div");if(b.classList.add("toast"),c)for(var e=c.split(" "),f=0,g=e.length;g>f;f++)b.classList.add(e[f]);("object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&null!==a&&1===a.nodeType&&"string"==typeof a.nodeName)?b.appendChild(a):a instanceof jQuery?b.appendChild(a[0]):b.innerHTML=a;var h=new Hammer(b,{prevent_default:!1});return h.on("pan",function(a){var c=a.deltaX,d=80;b.classList.contains("panning")||b.classList.add("panning");var e=1-Math.abs(c/d);0>e&&(e=0),Vel(b,{left:c,opacity:e},{duration:50,queue:!1,easing:"easeOutQuad"})}),h.on("panend",function(a){var c=a.deltaX,e=80;Math.abs(c)>e?Vel(b,{marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),b.parentNode.removeChild(b)}}):(b.classList.remove("panning"),Vel(b,{left:0,opacity:1},{duration:300,easing:"easeOutExpo",queue:!1}))}),b}c=c||"";var f=document.getElementById("toast-container");null===f&&(f=document.createElement("div"),f.id="toast-container",document.body.appendChild(f));var g=e(a);a&&f.appendChild(g),g.style.top="35px",g.style.opacity=0,Vel(g,{top:"0px",opacity:1},{duration:300,easing:"easeOutCubic",queue:!1});var h=b,i=setInterval(function(){null===g.parentNode&&window.clearInterval(i),g.classList.contains("panning")||(h-=20),0>=h&&(Vel(g,{opacity:0,marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),this[0].parentNode.removeChild(this[0])}}),window.clearInterval(i))},20)},function(a){var b={init:function(b){var c={menuWidth:240,edge:"left",closeOnClick:!1};b=a.extend(c,b),a(this).each(function(){function c(c){g=!1,h=!1,a("body").css("overflow",""),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),"left"===b.edge?(f.css({width:"",right:"",left:"0"}),e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(e.removeAttr("style"),e.css("width",b.menuWidth))}})):(f.css({width:"",right:"0",left:""}),e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(e.removeAttr("style"),e.css("width",b.menuWidth))}}))}var d=a(this),e=a("#"+d.attr("data-activates"));240!=b.menuWidth&&e.css("width",b.menuWidth);var f=a('
');a("body").append(f),"left"==b.edge?(e.css("left",-1*(b.menuWidth+10)),f.css({left:0})):(e.addClass("right-aligned").css("right",-1*(b.menuWidth+10)).css("left",""),f.css({right:0})),e.hasClass("fixed")&&window.innerWidth>992&&e.css("left",0),e.hasClass("fixed")&&a(window).resize(function(){window.innerWidth>992?0!==a("#sidenav-overlay").css("opacity")&&h?c(!0):(e.removeAttr("style"),e.css("width",b.menuWidth)):h===!1&&("left"===b.edge?e.css("left",-1*(b.menuWidth+10)):e.css("right",-1*(b.menuWidth+10)))}),b.closeOnClick===!0&&e.on("click.itemclick","a:not(.collapsible-header)",function(){c()});var g=!1,h=!1;f.on("click",function(){c()}),f.hammer({prevent_default:!1}).bind("pan",function(d){if("touch"==d.gesture.pointerType){{var f=(d.gesture.direction,d.gesture.center.x);d.gesture.center.y,d.gesture.velocityX}if(a("body").css("overflow","hidden"),0===a("#sidenav-overlay").length){var g=a('
');g.css("opacity",0).click(function(){c()}),a("body").append(g)}if("left"===b.edge&&(f>b.menuWidth?f=b.menuWidth:0>f&&(f=0)),"left"===b.edge)f=b.menuWidth/2&&(h=!0),e.css("left",f-b.menuWidth);else{f=window.innerWidth-b.menuWidth/2&&(h=!1);var i=-1*(f-b.menuWidth/2);i>0&&(i=0),e.css("right",i)}var j;"left"===b.edge?(j=f/b.menuWidth,a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"})):(j=Math.abs((f-window.innerWidth)/b.menuWidth),a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(c){if("touch"==c.gesture.pointerType){var d=c.gesture.velocityX;g=!1,"left"===b.edge?h&&.3>=d||-.5>d?(e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),f.css({width:"50%",right:0,left:""})):(!h||d>.3)&&(a("body").css("overflow",""),e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),f.css({width:"10px",right:"",left:0})):h&&d>=-.3||d>.5?(e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),f.css({width:"50%",right:"",left:0})):(!h||-.3>d)&&(a("body").css("overflow",""),e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),f.css({width:"10px",right:0,left:""}))}}),d.click(function(){if(h===!0)h=!1,g=!1,c();else{a("body").css("overflow","hidden"),a("body").append(f),"left"===b.edge?(f.css({width:"50%",right:0,left:""}),e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"})):(f.css({width:"50%",right:"",left:0}),e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),e.css("left",""));var d=a('
');d.css("opacity",0).click(function(){h=!1,g=!1,c(),d.velocity({opacity:0},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}})}),a("body").append(d),d.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){h=!0,g=!1}})}return!1})})},show:function(){this.trigger("click")},hide:function(){a("#sidenav-overlay").trigger("click")}};a.fn.sideNav=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.sideNav"):b.init.apply(this,arguments)}}(jQuery),function(a){function b(b,c,d,e){var f=a();return a.each(g,function(a,g){if(g.height()>0){var h=g.offset().top,i=g.offset().left,j=i+g.width(),k=h+g.height(),l=!(i>c||e>j||h>d||b>k);l&&f.push(g)}}),f}function c(){++j;var c=f.scrollTop(),d=f.scrollLeft(),e=d+f.width(),g=c+f.height(),i=b(c+k.top+200,e+k.right,g+k.bottom,d+k.left);a.each(i,function(a,b){var c=b.data("scrollSpy:ticks");"number"!=typeof c&&b.triggerHandler("scrollSpy:enter"),b.data("scrollSpy:ticks",j)}),a.each(h,function(a,b){var c=b.data("scrollSpy:ticks");"number"==typeof c&&c!==j&&(b.triggerHandler("scrollSpy:exit"),b.data("scrollSpy:ticks",null))}),h=i}function d(){f.trigger("scrollSpy:winSize")}function e(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:l(),g=null,f=a.apply(d,e),d=e=null};return function(){var j=l();h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}}var f=a(window),g=[],h=[],i=!1,j=0,k={top:0,right:0,bottom:0,left:0},l=Date.now||function(){return(new Date).getTime()};a.scrollSpy=function(b,d){var h=[];b=a(b),b.each(function(b,c){g.push(a(c)),a(c).data("scrollSpy:id",b),a("a[href=#"+a(c).attr("id")+"]").click(function(b){b.preventDefault();var c=a(this.hash).offset().top+1;a("html, body").animate({scrollTop:c-200},{duration:400,queue:!1,easing:"easeOutCubic"})})}),d=d||{throttle:100},k.top=d.offsetTop||0,k.right=d.offsetRight||0,k.bottom=d.offsetBottom||0,k.left=d.offsetLeft||0;var j=e(c,d.throttle||100),l=function(){a(document).ready(j)};return i||(f.on("scroll",l),f.on("resize",l),i=!0),setTimeout(l,0),b.on("scrollSpy:enter",function(){h=a.grep(h,function(a){return 0!=a.height()});var b=a(this);h[0]?(a("a[href=#"+h[0].attr("id")+"]").removeClass("active"),b.data("scrollSpy:id")");d.html(f),b.is(":visible")?d.css("width",b.width()):d.css("width",a(window).width()/2),b.css("height",d.height())}Materialize.updateTextFields=function(){var b="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a(b).each(function(b,c){a(c).val().length>0||void 0!==a(this).attr("placeholder")||a(c)[0].validity.badInput===!0?a(this).siblings("label").addClass("active"):a(this).siblings("label, i").removeClass("active")})};var c="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a("input[autofocus]").siblings("label, i").addClass("active"),a(document).on("change",c,function(){(0!==a(this).val().length||void 0!==a(this).attr("placeholder"))&&a(this).siblings("label").addClass("active"),validate_field(a(this))}),a(document).ready(function(){Materialize.updateTextFields()}),a(document).on("reset",function(b){var d=a(b.target);d.is("form")&&(d.find(c).removeClass("valid").removeClass("invalid"),d.find(c).each(function(){""===a(this).attr("value")&&a(this).siblings("label, i").removeClass("active")}),d.find("select.initialized").each(function(){var a=d.find("option[selected]").text();d.siblings("input.select-dropdown").val(a)}))}),a(document).on("focus",c,function(){a(this).siblings("label, i").addClass("active")}),a(document).on("blur",c,function(){var b=a(this);0===b.val().length&&b[0].validity.badInput!==!0&&void 0===b.attr("placeholder")&&b.siblings("label, i").removeClass("active"),0===b.val().length&&b[0].validity.badInput!==!0&&void 0!==b.attr("placeholder")&&b.siblings("i").removeClass("active"),validate_field(b)}),window.validate_field=function(a){var b=void 0!==a.attr("length"),c=parseInt(a.attr("length")),d=a.val().length;0===a.val().length&&a[0].validity.badInput===!1?a.hasClass("validate")&&(a.removeClass("valid"),a.removeClass("invalid")):a.hasClass("validate")&&(a.is(":valid")&&b&&c>=d||a.is(":valid")&&!b?(a.removeClass("invalid"),a.addClass("valid")):(a.removeClass("valid"),a.addClass("invalid")))};var d=a(".hiddendiv").first();d.length||(d=a('
'),a("body").append(d));var e=".materialize-textarea";a(e).each(function(){var c=a(this);c.val().length&&b(c)}),a("body").on("keyup keydown autoresize",e,function(){b(a(this))}),a(document).on("change",'.file-field input[type="file"]',function(){for(var b=a(this).closest(".file-field"),c=b.find("input.file-path"),d=a(this)[0].files,e=[],f=0;f');a(this).after(b)});var i=".range-field";a(document).on("change",g,function(){var b=a(this).siblings(".thumb");b.find(".value").html(a(this).val())}),a(document).on("input mousedown touchstart",g,function(b){var c=a(this).siblings(".thumb");c.length<=0&&(c=a(''),a(this).append(c)),c.find(".value").html(a(this).val()),h=!0,a(this).addClass("active"),c.hasClass("active")||c.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),f=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left;var d=a(this).outerWidth();0>f?f=0:f>d&&(f=d),c.addClass("active").css("left",f),c.find(".value").html(a(this).val())}),a(document).on("mouseup touchend",i,function(){h=!1,a(this).removeClass("active")}),a(document).on("mousemove touchmove",i,function(b){var c,d=a(this).children(".thumb");if(h){d.hasClass("active")||d.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),c=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left;var e=a(this).outerWidth();0>c?c=0:c>e&&(c=e),d.addClass("active").css("left",c),d.find(".value").html(d.siblings(g).val())}}),a(document).on("mouseout touchleave",i,function(){if(!h){var b=a(this).children(".thumb");b.hasClass("active")&&b.velocity({height:"0",width:"0",top:"10px",marginLeft:"-6px"},{duration:100}),b.removeClass("active")}})}),a.fn.material_select=function(b){a(this).each(function(){if($select=a(this),!$select.hasClass("browser-default")){var c=$select.data("select-id");if(c&&($select.parent().find("span.caret").remove(),$select.parent().find("input").remove(),$select.unwrap(),a("ul#select-options-"+c).remove()),"destroy"===b)return void $select.data("select-id",null).removeClass("initialized");var d=Materialize.guid();$select.data("select-id",d);var e=a('
');e.addClass($select.attr("class"));var f,g=a(''),h=$select.children("option");f=void 0!==$select.find("option:selected")?$select.find("option:selected"):g.first(),h.each(function(){g.append(a('
  • '+a(this).html()+"
  • "))}),g.find("li").each(function(c){var d=$select;a(this).click(function(){a(this).hasClass("disabled")||(d.find("option").eq(c).prop("selected",!0),d.trigger("change"),d.siblings("input.select-dropdown").val(a(this).text()),"undefined"!=typeof b&&b())})}),$select.wrap(e);var i=a('');$select.is(":disabled")&&i.addClass("disabled");var j=f.html().replace(/"/g,"""),k=a('');$select.before(k),k.before(i),a("body").append(g),$select.is(":disabled")||k.dropdown({hover:!1}),$select.attr("tabindex")&&a(k[0]).attr("tabindex",$select.attr("tabindex")),$select.addClass("initialized"),k.on("focus",function(){a(this).trigger("open"),f=a(this).val(),selectedOption=g.find("li").filter(function(){return a(this).text().toLowerCase()===f.toLowerCase()})[0],activateOption(g,selectedOption)}),k.on("blur",function(){a(this).trigger("close")}),activateOption=function(b,c){b.find("li.active").removeClass("active"),a(c).addClass("active"),b.scrollTo(c)},filterQuery=[],onKeyDown=function(b){if(9==b.which)return void k.trigger("close");if(40==b.which&&!g.is(":visible"))return void k.trigger("open");if(13!=b.which||g.is(":visible")){b.preventDefault(),letter=String.fromCharCode(b.which).toLowerCase();var c=[9,13,27,38,40];letter&&-1===c.indexOf(b.which)&&(filterQuery.push(letter),string=filterQuery.join(""),newOption=g.find("li").filter(function(){return 0===a(this).text().toLowerCase().indexOf(string)})[0],newOption&&activateOption(g,newOption)),13==b.which&&(activeOption=g.find("li.active:not(.disabled)")[0],activeOption&&(a(activeOption).trigger("click"),k.trigger("close"))),40==b.which&&(newOption=g.find("li.active").next("li:not(.disabled)")[0],newOption&&activateOption(g,newOption)),27==b.which&&k.trigger("close"),38==b.which&&(newOption=g.find("li.active").prev("li:not(.disabled)")[0],newOption&&activateOption(g,newOption)),setTimeout(function(){filterQuery=[]},1e3)}},k.on("keydown",onKeyDown)}})}}(jQuery),function(a){var b={init:function(b){var c={indicators:!0,height:400,transition:500,interval:6e3};return b=a.extend(c,b),this.each(function(){function c(a,b){a.hasClass("center-align")?a.velocity({opacity:0,translateY:-100},{duration:b,queue:!1}):a.hasClass("right-align")?a.velocity({opacity:0,translateX:100},{duration:b,queue:!1}):a.hasClass("left-align")&&a.velocity({opacity:0,translateX:-100},{duration:b,queue:!1})}function d(a){a>=h.length?a=0:0>a&&(a=h.length-1),i=g.find(".active").index(),i!=a&&(e=h.eq(i),$caption=e.find(".caption"),e.removeClass("active"),e.velocity({opacity:0},{duration:b.transition,queue:!1,easing:"easeOutQuad",complete:function(){h.not(".active").velocity({opacity:0,translateX:0,translateY:0},{duration:0,queue:!1})}}),c($caption,b.transition),b.indicators&&j.eq(i).removeClass("active"),h.eq(a).velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,delay:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).addClass("active"),b.indicators&&j.eq(a).addClass("active"))}var e,f=a(this),g=f.find("ul.slides").first(),h=g.find("li"),i=g.find(".active").index();if(-1!=i&&(e=h.eq(i)),f.hasClass("fullscreen")||(f.height(b.indicators?b.height+40:b.height),g.height(b.height)),h.find(".caption").each(function(){c(a(this),0)}),h.find("img").each(function(){a(this).css("background-image","url("+a(this).attr("src")+")"),a(this).attr("src","data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==")}),b.indicators){var j=a('
      ');h.each(function(){var c=a('
    • ');c.click(function(){var c=g.parent(),e=c.find(a(this)).index();d(e),clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval)}),j.append(c)}),f.append(j),j=f.find("ul.indicators").find("li.indicator-item")}e?e.show():(h.first().addClass("active").velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),i=0,e=h.eq(i),b.indicators&&j.eq(i).addClass("active")),e.find("img").each(function(){e.find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,queue:!1,easing:"easeOutQuad"})}),$interval=setInterval(function(){i=g.find(".active").index(),d(i+1)},b.transition+b.interval);var k=!1,l=!1,m=!1;f.hammer({prevent_default:!1}).bind("pan",function(a){if("touch"===a.gesture.pointerType){clearInterval($interval);var b=a.gesture.direction,c=a.gesture.deltaX,d=a.gesture.velocityX;$curr_slide=g.find(".active"),$curr_slide.velocity({translateX:c},{duration:50,queue:!1,easing:"easeOutQuad"}),4===b&&(c>f.innerWidth()/2||-.65>d)?m=!0:2===b&&(c<-1*f.innerWidth()/2||d>.65)&&(l=!0);var e;l&&(e=$curr_slide.next(),0===e.length&&(e=h.first()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"})),m&&(e=$curr_slide.prev(),0===e.length&&(e=h.last()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(a){"touch"===a.gesture.pointerType&&($curr_slide=g.find(".active"),k=!1,curr_index=g.find(".active").index(),m||l?l?(d(curr_index+1),$curr_slide.velocity({translateX:-1*f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):m&&(d(curr_index-1),$curr_slide.velocity({translateX:f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):$curr_slide.velocity({translateX:0},{duration:300,queue:!1,easing:"easeOutQuad"}),l=!1,m=!1,clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval))}),f.on("sliderPause",function(){clearInterval($interval)}),f.on("sliderStart",function(){clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval)})})},pause:function(){a(this).trigger("sliderPause")},start:function(){a(this).trigger("sliderStart")}};a.fn.slider=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)}}(jQuery),function(a){a(document).ready(function(){a(document).on("click.card",".card",function(b){a(this).find("> .card-reveal").length&&(a(b.target).is(a(".card-reveal .card-title"))||a(b.target).is(a(".card-reveal .card-title i"))?a(this).find(".card-reveal").velocity({ -translateY:0},{duration:225,queue:!1,easing:"easeInOutQuad",complete:function(){a(this).css({display:"none"})}}):(a(b.target).is(a(".card .activator"))||a(b.target).is(a(".card .activator i")))&&a(this).find(".card-reveal").css({display:"block"}).velocity("stop",!1).velocity({translateY:"-100%"},{duration:300,queue:!1,easing:"easeInOutQuad"}))})})}(jQuery),function(a){a(document).ready(function(){a(document).on("click.chip",".chip .material-icons",function(){a(this).parent().remove()})})}(jQuery),function(a){a(document).ready(function(){a.fn.pushpin=function(b){var c={top:0,bottom:1/0,offset:0};return b=a.extend(c,b),$index=0,this.each(function(){function c(a){a.removeClass("pin-top"),a.removeClass("pinned"),a.removeClass("pin-bottom")}function d(d,e){d.each(function(){b.top<=e&&b.bottom>=e&&!a(this).hasClass("pinned")&&(c(a(this)),a(this).css("top",b.offset),a(this).addClass("pinned")),eb.bottom&&!a(this).hasClass("pin-bottom")&&(c(a(this)),a(this).addClass("pin-bottom"),a(this).css("top",b.bottom-g))})}var e=Materialize.guid(),f=a(this),g=a(this).offset().top;d(f,a(window).scrollTop()),a(window).on("scroll."+e,function(){var c=a(window).scrollTop()+b.offset;d(f,c)})})}})}(jQuery),function(a){a(document).ready(function(){a.fn.reverse=[].reverse,a(document).on("mouseenter.fixedActionBtn",".fixed-action-btn",function(){var c=a(this);b(c)}),a(document).on("mouseleave.fixedActionBtn",".fixed-action-btn",function(){var b=a(this);c(b)})}),a.fn.extend({openFAB:function(){var c=a(this);b(c)},closeFAB:function(){c($this)}});var b=function(b){if($this=b,$this.hasClass("active")===!1){$this.addClass("active"),$this.find("ul .btn-floating").velocity({scaleY:".4",scaleX:".4",translateY:"40px"},{duration:0});var c=0;$this.find("ul .btn-floating").reverse().each(function(){a(this).velocity({opacity:"1",scaleX:"1",scaleY:"1",translateY:"0"},{duration:80,delay:c}),c+=40})}},c=function(a){$this=a,$this.removeClass("active");$this.find("ul .btn-floating").velocity("stop",!0),$this.find("ul .btn-floating").velocity({opacity:"0",scaleX:".4",scaleY:".4",translateY:"40px"},{duration:80})}}(jQuery),function(a){Materialize.fadeInImage=function(b){var c=a(b);c.css({opacity:0}),a(c).velocity({opacity:1},{duration:650,queue:!1,easing:"easeOutSine"}),a(c).velocity({opacity:1},{duration:1300,queue:!1,easing:"swing",step:function(b,c){c.start=100;var d=b/100,e=150-(100-b)/1.75;100>e&&(e=100),b>=0&&a(this).css({"-webkit-filter":"grayscale("+d+")brightness("+e+"%)",filter:"grayscale("+d+")brightness("+e+"%)"})}})},Materialize.showStaggeredList=function(b){var c=0;a(b).find("li").velocity({translateX:"-100px"},{duration:0}),a(b).find("li").each(function(){a(this).velocity({opacity:"1",translateX:"0"},{duration:800,delay:c,easing:[60,10]}),c+=120})},a(document).ready(function(){var b=!1,c=!1;a(".dismissable").each(function(){a(this).hammer({prevent_default:!1}).bind("pan",function(d){if("touch"===d.gesture.pointerType){var e=a(this),f=d.gesture.direction,g=d.gesture.deltaX,h=d.gesture.velocityX;e.velocity({translateX:g},{duration:50,queue:!1,easing:"easeOutQuad"}),4===f&&(g>e.innerWidth()/2||-.75>h)&&(b=!0),2===f&&(g<-1*e.innerWidth()/2||h>.75)&&(c=!0)}}).bind("panend",function(d){if(Math.abs(d.gesture.deltaX)j+g&&e.done!==!0){var k=new Function(h);k(),e.done=!0}}}}},100)}}(jQuery),function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):this.Picker=a(jQuery)}(function(a){function b(f,g,i,l){function m(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",y.component.nodes(t.open),v.box),v.wrap),v.frame),v.holder)}function n(){w.data(g,y).addClass(v.input).attr("tabindex",-1).val(w.data("value")?y.get("select",u.format):f.value),u.editable||w.on("focus."+t.id+" click."+t.id,function(a){a.preventDefault(),y.$root[0].focus()}).on("keydown."+t.id,q),e(f,{haspopup:!0,expanded:!1,readonly:!1,owns:f.id+"_root"})}function o(){y.$root.on({keydown:q,focusin:function(a){y.$root.removeClass(v.focused),a.stopPropagation()},"mousedown click":function(b){var c=b.target;c!=y.$root.children()[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),y.$root[0].focus()))}}).on({focus:function(){w.addClass(v.target)},blur:function(){w.removeClass(v.target)}}).on("focus.toOpen",r).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(v.navDisabled)||b.hasClass(v.disabled),e=h();e=e&&(e.type||e.href),(d||e&&!a.contains(y.$root[0],e))&&y.$root[0].focus(),!d&&c.nav?y.set("highlight",y.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?y.set("select",c.pick):c.clear?y.clear().close(!0):c.close&&y.close(!0)}),e(y.$root[0],"hidden",!0)}function p(){var b;u.hiddenName===!0?(b=f.name,f.name=""):(b=["string"==typeof u.hiddenPrefix?u.hiddenPrefix:"","string"==typeof u.hiddenSuffix?u.hiddenSuffix:"_submit"],b=b[0]+f.name+b[1]),y._hidden=a('")[0],w.on("change."+t.id,function(){y._hidden.value=f.value?y.get("select",u.formatSubmit):""}),u.container?a(u.container).append(y._hidden):w.after(y._hidden)}function q(a){var b=a.keyCode,c=/^(8|46)$/.test(b);return 27==b?(y.close(),!1):void((32==b||c||!t.open&&y.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?y.clear().close():y.open()))}function r(a){a.stopPropagation(),"focus"==a.type&&y.$root.addClass(v.focused),y.open()}if(!f)return b;var s=!1,t={id:f.id||"P"+Math.abs(~~(Math.random()*new Date))},u=i?a.extend(!0,{},i.defaults,l):l||{},v=a.extend({},b.klasses(),u.klass),w=a(f),x=function(){return this.start()},y=x.prototype={constructor:x,$node:w,start:function(){return t&&t.start?y:(t.methods={},t.start=!0,t.open=!1,t.type=f.type,f.autofocus=f==h(),f.readOnly=!u.editable,f.id=f.id||t.id,"text"!=f.type&&(f.type="text"),y.component=new i(y,u),y.$root=a(b._.node("div",m(),v.picker,'id="'+f.id+'_root" tabindex="0"')),o(),u.formatSubmit&&p(),n(),u.container?a(u.container).append(y.$root):w.after(y.$root),y.on({start:y.component.onStart,render:y.component.onRender,stop:y.component.onStop,open:y.component.onOpen,close:y.component.onClose,set:y.component.onSet}).on({start:u.onStart,render:u.onRender,stop:u.onStop,open:u.onOpen,close:u.onClose,set:u.onSet}),s=c(y.$root.children()[0]),f.autofocus&&y.open(),y.trigger("start").trigger("render"))},render:function(a){return a?y.$root.html(m()):y.$root.find("."+v.box).html(y.component.nodes(t.open)),y.trigger("render")},stop:function(){return t.start?(y.close(),y._hidden&&y._hidden.parentNode.removeChild(y._hidden),y.$root.remove(),w.removeClass(v.input).removeData(g),setTimeout(function(){w.off("."+t.id)},0),f.type=t.type,f.readOnly=!1,y.trigger("stop"),t.methods={},t.start=!1,y):y},open:function(c){return t.open?y:(w.addClass(v.active),e(f,"expanded",!0),setTimeout(function(){y.$root.addClass(v.opened),e(y.$root[0],"hidden",!1)},0),c!==!1&&(t.open=!0,s&&k.css("overflow","hidden").css("padding-right","+="+d()),y.$root[0].focus(),j.on("click."+t.id+" focusin."+t.id,function(a){var b=a.target;b!=f&&b!=document&&3!=a.which&&y.close(b===y.$root.children()[0])}).on("keydown."+t.id,function(c){var d=c.keyCode,e=y.component.key[d],f=c.target;27==d?y.close(!0):f!=y.$root[0]||!e&&13!=d?a.contains(y.$root[0],f)&&13==d&&(c.preventDefault(),f.click()):(c.preventDefault(),e?b._.trigger(y.component.key.go,y,[b._.trigger(e)]):y.$root.find("."+v.highlighted).hasClass(v.disabled)||y.set("select",y.component.item.highlight).close())})),y.trigger("open"))},close:function(a){return a&&(y.$root.off("focus.toOpen")[0].focus(),setTimeout(function(){y.$root.on("focus.toOpen",r)},0)),w.removeClass(v.active),e(f,"expanded",!1),setTimeout(function(){y.$root.removeClass(v.opened+" "+v.focused),e(y.$root[0],"hidden",!0)},0),t.open?(t.open=!1,s&&k.css("overflow","").css("padding-right","-="+d()),j.off("."+t.id),y.trigger("close")):y},clear:function(a){return y.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in y.component.item&&(void 0===f&&(f=null),y.component.set(e,f,d)),("select"==e||"clear"==e)&&w.val("clear"==e?"":y.get(e,u.format)).trigger("change");y.render()}return d.muted?y:y.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=t[a])return t[a];if("valueSubmit"==a){if(y._hidden)return y._hidden.value;a="value"}if("value"==a)return f.value;if(a in y.component.item){if("string"==typeof c){var d=y.component.get(a);return d?b._.trigger(y.component.formats.toString,y.component,[c,d]):""}return y.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),t.methods[e]=t.methods[e]||[],t.methods[e].push(f)}return y},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('
      ').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(b,c,d){if(a.isPlainObject(c))for(var e in c)f(b,e,c[e]);else f(b,c,d)}function f(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function g(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d,f=b[d];c+=null==f?"":e+'="'+b[d]+'"'}return c}function h(){try{return document.activeElement}catch(a){}}var i=a(window),j=a(document),k=a(document.documentElement);return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+""):""},lead:function(a){return(10>a?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1===0},ariaAttr:g},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){var f=a(this);f.data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b}),function(a){"function"==typeof define&&define.amd?define(["picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return a[0]===!0?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=6,f=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var e,g=this;return c=void 0===c?a:c,c==-(1/0)||c==1/0?e=c:b.isPlainObject(c)&&f.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=f.isDate(c)?c:g.create().obj):c=f.isInteger(c)||f.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:e||c.getFullYear(),month:e||c.getMonth(),date:e||c.getDate(),day:e||c.getDay(),obj:e||c,pick:e||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return a===!0||b.isArray(a)||f.isDate(a)?d.create(a):a};return f.isInteger(a)||(a=e(a)),f.isInteger(c)||(c=e(c)),f.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:f.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return b?"string"==typeof b?b=c.parse(a,b):f.isInteger(b)&&(b=c.now(a,b,{rel:b})):b="min"==a?-(1/0):1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var e,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;dc.pick&&(g=!0)}return f.isInteger(a)}).length;if((!d||!d.nav)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||e||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!e&&0>l)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.monthk.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return f.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||f.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pickc.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,e={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?f.trigger(c,d,[b,e]):a.replace(/^!/,"").length;c&&(e[a]=b.substr(0,g)),b=b.substr(g)}),[e.yyyy||e.yy,+(e.mm||e.m)-1,e.dd||e.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?f.digits(a):b.date},dd:function(a,b){return a?2:f.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?f.digits(a):b.month+1},mm:function(a,b){return a?2:f.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return f.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return f.isInteger(a)&&f.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(f.isDate(a)||b.isArray(a))&&(f.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:b.isPlainObject(a)&&b.isPlainObject(c)?d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to):!1},c.prototype.isDateOverlap=function(a,c){var d=this,e=d.settings.firstDay?1:0;return f.isInteger(a)&&(f.isDate(c)||b.isArray(c))?(a=a%7+e,a===d.create(c).day+1):f.isInteger(c)&&(f.isDate(a)||b.isArray(a))?(c=c%7+e,c===d.create(a).day+1):b.isPlainObject(a)&&b.isPlainObject(c)?d.overlapRanges(a,c):!1},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():c===!1?(d.flipEnable(1),e=[]):c===!0?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,g=0;gi;i+=1){if(h=e[i],d.isDateExact(h,a)){c=e[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):f.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;g>i;i+=1)if(d.isDateExact(e[i],a)){e[i]=null;break}if(j)for(i=0;g>i;i+=1)if(d.isDateOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,g=b.item,h=g.now,i=g.select,j=g.highlight,k=g.view,l=g.disable,m=g.min,n=g.max,o=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),f.node("thead",f.node("tr",f.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysLetter).slice(0),c.weekdaysFull.slice(0)),p=function(a){return f.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&k.year>=n.year&&k.month>=n.month||!a&&k.year<=m.year&&k.month<=m.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+f.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},q=function(d){var e=c.showMonthsShort?c.monthsShort:c.monthsFull;return"short_months"==d&&(e=c.monthsShort),c.selectMonths&&void 0==d?f.node("select",f.group({min:0,max:11,i:1,node:"option",item:function(a){return[e[a],0,"value="+a+(k.month==a?" selected":"")+(k.year==m.year&&an.month?" disabled":"")]}}),c.klass.selectMonth+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):"short_months"==d?null!=i?f.node("div",e[i.month]):f.node("div",e[k.month]):f.node("div",e[k.month],c.klass.month)},r=function(d){var e=k.year,g=c.selectYears===!0?5:~~(c.selectYears/2);if(g){var h=m.year,i=n.year,j=e-g,l=e+g;if(h>j&&(l+=h-j,j=h),l>i){var o=j-h,p=l-i;j-=o>p?p:o,l=i}if(c.selectYears&&void 0==d)return f.node("select",f.group({min:j,max:l,i:1,node:"option",item:function(a){return[a,0,"value="+a+(e==a?" selected":"")]}}),c.klass.selectYear+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return"raw"==d?f.node("div",e):f.node("div",e,c.klass.year)};return createDayLabel=function(){return null!=i?f.node("div",i.date):f.node("div",h.date)},createWeekdayLabel=function(){var a;a=null!=i?i.day:h.day;var b=c.weekdaysFull[a];return b},f.node("div",f.node("div",createWeekdayLabel(),"picker__weekday-display")+f.node("div",q("short_months"),c.klass.month_display)+f.node("div",createDayLabel(),c.klass.day_display)+f.node("div",r("raw"),c.klass.year_display),c.klass.date_display)+f.node("div",f.node("div",(c.selectYears?q()+r():q()+r())+p()+p(1),c.klass.header)+f.node("table",o+f.node("tbody",f.group({min:0,max:e-1,i:1,node:"tr",item:function(a){var e=c.firstDay&&0===b.create([k.year,k.month,1]).day?-7:0;return[f.group({min:d*a-k.day+e+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([k.year,k.month,a+(c.firstDay?1:0)]);var d=i&&i.pick==a.pick,e=j&&j.pick==a.pick,g=l&&b.disabled(a)||a.pickn.pick,o=f.trigger(b.formats.toString,b,[c.format,a]);return[f.node("div",a.date,function(b){return b.push(k.month==a.month?c.klass.infocus:c.klass.outfocus),h.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),e&&b.push(c.klass.highlighted),g&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+f.ariaAttr({role:"gridcell",label:o,selected:d&&b.$node.val()===o?!0:null,activedescendant:e?!0:null,disabled:g?!0:null})),"",f.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+f.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0})),c.klass.calendar_container)+f.node("div",f.node("button",c.today,"btn-flat picker__today","type=button data-pick="+h.pick+(a&&!b.disabled(h)?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.clear,"btn-flat picker__clear","type=button data-clear=1"+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.close,"btn-flat picker__close","type=button data-close=true "+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysLetter:["S","M","T","W","T","F","S"],today:"Today",clear:"Clear",close:"Close",format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",date_display:a+"date-display",day_display:a+"day-display",month_display:a+"month-display",year_display:a+"year-display",calendar_container:a+"calendar-container",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)}),function(a){function b(){var b=+a(this).attr("length"),c=+a(this).val().length,d=b>=c;a(this).parent().find('span[class="character-counter"]').html(c+"/"+b),e(d,a(this))}function c(b){var c=a("").addClass("character-counter").css("float","right").css("font-size","12px").css("height",1);b.parent().append(c)}function d(){a(this).parent().find('span[class="character-counter"]').html("")}function e(a,b){var c=b.hasClass("invalid");a&&c?b.removeClass("invalid"):a||c||(b.removeClass("valid"),b.addClass("invalid"))}a.fn.characterCounter=function(){return this.each(function(){var e=void 0!==a(this).attr("length");e&&(a(this).on("input",b),a(this).on("focus",b),a(this).on("blur",d),c(a(this)))})},a(document).ready(function(){a("input, textarea").characterCounter()})}(jQuery); \ No newline at end of file diff --git a/bower.json b/bower.json index 32fa1277e3..397e919fdb 100644 --- a/bower.json +++ b/bower.json @@ -1,5 +1,5 @@ { - "name": "Materialize", + "name": "materialize", "description": "A modern responsive front-end framework based on Material Design", "keywords": [ "css", @@ -14,29 +14,18 @@ "design" ], "main": [ - "bin/materialize.css", - "bin/materialize.js", - "font/material-design-icons/Material-Design-Icons.eot", - "font/material-design-icons/Material-Design-Icons.svg", - "font/material-design-icons/Material-Design-Icons.ttf", - "font/material-design-icons/Material-Design-Icons.woff", - "font/material-design-icons/Material-Design-Icons.woff2", - "font/roboto/Roboto-Bold.ttf", - "font/roboto/Roboto-Bold.woff", - "font/roboto/Roboto-Bold.woff2", - "font/roboto/Roboto-Light.ttf", - "font/roboto/Roboto-Light.woff", - "font/roboto/Roboto-Light.woff2", - "font/roboto/Roboto-Medium.ttf", - "font/roboto/Roboto-Medium.woff", - "font/roboto/Roboto-Medium.woff2", - "font/roboto/Roboto-Regular.ttf", - "font/roboto/Roboto-Regular.woff", - "font/roboto/Roboto-Regular.woff2", - "font/roboto/Roboto-Thin.ttf", - "font/roboto/Roboto-Thin.woff", - "font/roboto/Roboto-Thin.woff2", - "sass/*" + "dist/js/materialize.js", + "dist/css/materialize.css", + "dist/fonts/roboto/Roboto-Bold.woff", + "dist/fonts/roboto/Roboto-Bold.woff2", + "dist/fonts/roboto/Roboto-Light.woff", + "dist/fonts/roboto/Roboto-Light.woff2", + "dist/fonts/roboto/Roboto-Medium.woff", + "dist/fonts/roboto/Roboto-Medium.woff2", + "dist/fonts/roboto/Roboto-Regular.woff", + "dist/fonts/roboto/Roboto-Regular.woff2", + "dist/fonts/roboto/Roboto-Thin.woff", + "dist/fonts/roboto/Roboto-Thin.woff2" ], "ignore": [ "jade/", @@ -46,6 +35,7 @@ "bower.json", "README.md", "images/", + "fonts", "js/jquery.timeago.js", "js/init.js", "js/prism.js", @@ -60,7 +50,7 @@ "Gruntfile.js" ], "dependencies": { - "jquery": ">=2.1.1" + "jquery": "^3.0.0 || ^2.1.4" }, "devDependencies": { } diff --git a/buttons.html b/buttons.html deleted file mode 100644 index 415a35d245..0000000000 --- a/buttons.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - - - Buttons - Materialize - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      -
      - -
      -
      -

      - There are 3 main button types described in material design. The raised button is a standard button that signify actions and seek to give depth to a mostly flat page. The floating circular action button is meant for very important functions. Flat buttons are usually used within elements that already have depth like cards or modals. -

      -

      Raised

      - button - cloudbutton - cloudbutton -
      
      -<a class="waves-effect waves-light btn">Stuff</a>
      -<a class="waves-effect waves-light btn"><i class="material-icons left">cloud</i>button</a>
      -<a class="waves-effect waves-light btn"><i class="material-icons right">cloud</i>button</a>
      -        
      -
      -
      -

      Floating

      - add

      -
      
      -  <a class="btn-floating btn-large waves-effect waves-light red"><i class="material-icons">add</i></a>
      -        
      -
      - -

      Fixed Action Button

      -

      If you want a fixed floating action button, you can add multiple actions that will appear on hover. Our demo is in the bottom righthand corner of the page.

      -
      
      -  <div class="fixed-action-btn" style="bottom: 45px; right: 24px;">
      -    <a class="btn-floating btn-large red">
      -      <i class="large material-icons">mode_edit</i>
      -    </a>
      -    <ul>
      -      <li><a class="btn-floating red"><i class="material-icons">insert_chart</i></i></a></li>
      -      <li><a class="btn-floating yellow darken-1"><i class="material-icons">format_quote</i></a></li>
      -      <li><a class="btn-floating green"><i class="material-icons">publish</i></a></li>
      -      <li><a class="btn-floating blue"><i class="material-icons">attach_file</i></a></li>
      -    </ul>
      -  </div>
      -        
      - -

      You can also open the Fixed Action Button Menu programatically, the below code will make your FAB Menu open:

      -
      
      -  $('.fixed-action-btn').openFAB();
      -          
      -

      You can also close them programatically:

      -
      
      -  $('.fixed-action-btn').closeFAB();
      -        
      - - -
      -
      -

      Flat

      - Button -
      
      -  <a class="waves-effect waves-teal btn-flat">Button</a>
      -        
      -
      -
      -

      Submit Button

      -

      When you use a button to submit a form, instead of using a input tag, use a button tag with a type submit

      - -
      
      -  <button class="btn waves-effect waves-light" type="submit" name="action">Submit
      -    <i class="material-icons right">send</i>
      -  </button>
      -        
      -
      -
      -

      Large

      -

      This button has a larger height for buttons that need more attention.

      - Button - cloudbutton - cloudbutton -
      
      -<a class="waves-effect waves-light btn-large">Button</a>
      -<a class="waves-effect waves-light btn-large"><i class="material-icons left">cloud</i>button</a>
      -<a class="waves-effect waves-light btn-large"><i class="material-icons right">cloud</i>button</a>
      -        
      -
      -
      -

      Disabled

      -

      This style can be applied to all button types

      - Button - Button - Button - add -
      
      -<a class="btn-large disabled">Button</a>
      -<a class="btn disabled">Button</a>
      -<a class="btn-flat disabled">Button</a>
      -<a class="btn-floating disabled"><i class="material-icons">add</i></a>
      -        
      -
      - -
      - -
      -
      -
      - - -
      -
      - -
      -
      -
      - -
      -
      - - -
      -
      -
      -
      -
      Help Materialize Grow
      -

      We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

      -
      - - - -
      - -
      -
      -
      Join the Discussion
      -

      We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

      - Chat -
      -
      -
      Connect
      - -
      - -
      -
      -
      -
      -
      - -
      - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cards.html b/cards.html deleted file mode 100644 index cc918edd57..0000000000 --- a/cards.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - - - - Cards - Materialize - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      -
      - -
      - - -
      -

      Cards are a convenient means of displaying content composed of different types of objects. They’re also well-suited for presenting similar objects whose size or supported actions can vary considerably, like photos with captions of variable length.

      -

      Basic Card

      -
      -
      - -
      -
      - Card Title -

      I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

      -
      - -
      -
      - -
      -
      -
      
      -      <div class="row">
      -        <div class="col s12 m6">
      -          <div class="card blue-grey darken-1">
      -            <div class="card-content white-text">
      -              <span class="card-title">Card Title</span>
      -              <p>I am a very simple card. I am good at containing small bits of information.
      -              I am convenient because I require little markup to use effectively.</p>
      -            </div>
      -            <div class="card-action">
      -              <a href="#">This is a link</a>
      -              <a href="#">This is a link</a>
      -            </div>
      -          </div>
      -        </div>
      -      </div>
      -            
      -
      -
      -
      -
      - -
      -
      - -
      -

      Image Card

      -
      -
      - - Card Title -
      -
      -

      I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

      -
      - -
      -
      -
      -



      -

      - Here is the standard card with an image thumbnail. -

      -
      -
      -
      -
      
      -      <div class="row">
      -        <div class="col s12 m7">
      -          <div class="card">
      -            <div class="card-image">
      -              <img src="images/sample-1.jpg">
      -              <span class="card-title">Card Title</span>
      -            </div>
      -            <div class="card-content">
      -              <p>I am a very simple card. I am good at containing small bits of information.
      -              I am convenient because I require little markup to use effectively.</p>
      -            </div>
      -            <div class="card-action">
      -              <a href="#">This is a link</a>
      -            </div>
      -          </div>
      -        </div>
      -      </div>
      -            
      -
      -
      -
      -
      - -
      -
      - -
      -

      Card Reveal

      -
      -
      - -
      -
      - Card Titlemore_vert - -

      This is a link

      -
      -
      - Card Titleclose -

      Here is some more information about this product that is only revealed once clicked on.

      -
      -
      -
      -
      -



      -

      - Here you can add a card that reveals more information once clicked. Just add the card-reveal div with a span.card-title inside to make this work. Add the class activator to an element inside the card to allow it to open the card reveal. -

      -
      -
      -
      -
      
      -  <div class="card">
      -    <div class="card-image waves-effect waves-block waves-light">
      -      <img class="activator" src="images/office.jpg">
      -    </div>
      -    <div class="card-content">
      -      <span class="card-title activator grey-text text-darken-4">Card Title<i class="material-icons right">more_vert</i></span>
      -      <p><a href="#">This is a link</a></p>
      -    </div>
      -    <div class="card-reveal">
      -      <span class="card-title grey-text text-darken-4">Card Title<i class="material-icons right">close</i></span>
      -      <p>Here is some more information about this product that is only revealed once clicked on.</p>
      -    </div>
      -  </div>
      -            
      -
      -
      -
      -
      - - -
      -
      - -
      -

      Card Sizes

      -

      If you want to have uniformly sized cards, you can use our premade size classes. Just add the size class in addition to the card class.

      -
      
      -  <div class="card small">
      -    <!-- Card Content -->
      -  </div>
      -            
      -
      -
      -
      -
      -

      Small

      -
      -
      - - Card Title -
      -
      -

      I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

      -
      - -
      -
      -
      -

      -

      - The Small Card limits the height of the card to 300px. -

      -
      -
      - -
      -
      -

      Medium

      -
      -
      - - Card Title -
      -
      -

      I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

      -
      - -
      -
      -
      -

      -

      - The Medium Card limits the height of the card to 400px. -

      -
      -
      - -
      -
      -

      Large

      -
      -
      - - Card Title -
      -
      -

      I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

      -
      - -
      -
      -
      -

      -

      - The Large Card limits the height of the card to 500px. -

      -
      -
      -
      - - -
      -
      - -
      -

      Card Panel

      -
      I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively. I am similar to what is called a panel in other frameworks. -
      -
      -
      -



      -

      - For a simpler card with less markup, try using a card panel which just has padding and a shadow effect -

      -
      -
      -
      -
      
      -    <div class="row">
      -      <div class="col s12 m5">
      -        <div class="card-panel teal">
      -          <span class="white-text">I am a very simple card. I am good at containing small bits of information.
      -          I am convenient because I require little markup to use effectively. I am similar to what is called a panel in other frameworks.
      -          </span>
      -        </div>
      -      </div>
      -    </div>
      -            
      -
      -
      -
      - - -
      - -
      -
      -
      - - -
      - -
      -
      - -
      -
      - - -
      -
      -
      -
      -
      Help Materialize Grow
      -

      We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

      -
      - - - -
      - -
      -
      -
      Join the Discussion
      -

      We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

      - Chat -
      -
      -
      Connect
      - -
      - -
      -
      -
      -
      -
      - -
      - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/chips.html b/chips.html deleted file mode 100644 index b69022b9b0..0000000000 --- a/chips.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - Chips - Materialize - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      -
      - -
      - -
      -

      Introduction

      -

      - Collapsibles can be used to represent small blocks of information. They are most commonly used either for contacts or for tags. -

      -
      - Contact Person - Jane Doe -
      -
      - Tag - close -
      -
      - -
      -

      Contacts

      -

      - To create a contact chip just add an img inside. -

      -
      
      -  <div class="chip">
      -    <img src="images/yuna.jpg" alt="Contact Person">
      -    Jane Doe
      -  </div>
      -        
      -
      - -
      -

      Tags

      -

      - To create a tag chip just add an close icon inside. -

      -
      
      -  <div class="chip">
      -    Tag
      -    <i class="material-icons">close</i>
      -  </div>
      -        
      -
      - -
      - - - -
      -
      -
      - - -
      -
      - -
      -
      -
      - -
      -
      - - -
      -
      -
      -
      -
      Help Materialize Grow
      -

      We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

      -
      - - - -
      - -
      -
      -
      Join the Discussion
      -

      We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

      - Chat -
      -
      -
      Connect
      - -
      - -
      -
      -
      -
      -
      - -
      - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/collapsible.html b/collapsible.html deleted file mode 100644 index 41f70d871a..0000000000 --- a/collapsible.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - - - - Collapsible - Materialize - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      -
      - -
      - -
      -

      Introduction

      -

      - Collapsibles are accordion elements that expand when clicked on. They allow you to hide content that is not immediately relevant to the user. -

      -
        -
      • -
        filter_dramaFirst
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        placeSecond
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        whatshotThird
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      -
      - -
      -

      Popout

      -

      - To create a popout collapsible, just add the class popout. -

      -
        -
      • -
        subtitlesFirst
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        gamesSecond
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        library_booksThird
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      -
      
      -  <ul class="collapsible popout" data-collapsible="accordion">
      -        
      -
      - - - -
      -

      Collapsible HTML Structure

      -
      
      -  <ul class="collapsible" data-collapsible="accordion">
      -    <li>
      -      <div class="collapsible-header"><i class="material-icons">filter_drama</i>First</div>
      -      <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
      -    </li>
      -    <li>
      -      <div class="collapsible-header"><i class="material-icons">place</i>Second</div>
      -      <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
      -    </li>
      -    <li>
      -      <div class="collapsible-header"><i class="material-icons">whatshot</i>Third</div>
      -      <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
      -    </li>
      -  </ul>
      -        
      -
      - -
      -

      Initialization

      -

      Collapsible elements only need initialization if they are added dynamically. You can also pass in options inside the initialization, however this can be done in the HTML markup as well.

      -
      
      -  $(document).ready(function(){
      -    $('.collapsible').collapsible({
      -      accordion : false // A setting that changes the collapsible behavior to expandable instead of the default accordion style
      -    });
      -  });
      -        
      - -

      -
      Preselected Section
      -

      If you want a collapsible with a preopened section just add the active class to the collapsible-header.

      -
        -
      • -
        filter_dramaFirst
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        placeSecond
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        whatshotThird
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      -
      
      -  <div class="collapsible-header active"><i class="mdi-maps-place"></i>Second</div>
      -        
      -
      - -
      -

      Options

      -

      There are two ways a collapsible can behave. It can either allow multiple sections to stay open, or it can only allow one section to stay open at a time, which is called an accordion. See below for a demo of each type

      -
      -
      -
      -
      Accordion
      -
      -
        -
      • -
        filter_dramaFirst
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        placeSecond
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        whatshotThird
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      -
      -
      -

      This is default behavior, but you can explicitly set it by setting the data-collapsible attribute in HTML.

      -
      
      -    <ul class="collapsible" data-collapsible="accordion">
      -            
      -
      -
      -
      -
      -
      -
      Expandable
      -
      -
        -
      • -
        filter_dramaFirst
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        placeSecond
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      • -
        whatshotThird
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

        -
      • -
      -
      -
      -
      
      -  <ul class="collapsible" data-collapsible="expandable">
      -            
      -
      -
      -
      - -
      - - - -
      - -
      - -
      -
      - - -
      -
      -
      -
      -
      Help Materialize Grow
      -

      We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

      -
      - - - -
      - -
      -
      -
      Join the Discussion
      -

      We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

      - Chat -
      -
      -
      Connect
      - -
      - -
      -
      -
      -
      -
      - -
      - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/collections.html b/collections.html deleted file mode 100644 index 17a6e06f1c..0000000000 --- a/collections.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - - - - Collections - Materialize - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      -
      - -
      - - -
      - -
      -
      -

      Collections allow you to group list objects together.

      -

      Basic

      -
        -
      • Alvin
      • -
      • Alvin
      • -
      • Alvin
      • -
      • Alvin
      • -
      -
      
      -    <ul class="collection">
      -      <li class="collection-item">Alvin</li>
      -      <li class="collection-item">Alvin</li>
      -      <li class="collection-item">Alvin</li>
      -      <li class="collection-item">Alvin</li>
      -    </ul>
      -            
      -
      -
      -
      -
      - - - -
      -
      -
      -

      Headers

      -
        -
      • First Names

      • -
      • Alvin
      • -
      • Alvin
      • -
      • Alvin
      • -
      • Alvin
      • -
      -
      
      -      <ul class="collection with-header">
      -        <li class="collection-header"><h4>First Names</h4></li>
      -        <li class="collection-item">Alvin</li>
      -        <li class="collection-item">Alvin</li>
      -        <li class="collection-item">Alvin</li>
      -        <li class="collection-item">Alvin</li>
      -      </ul>
      -            
      -
      -
      -
      - - -
      -
      -
      -

      Secondary content

      - -
      
      -      <ul class="collection with-header">
      -        <li class="collection-header"><h4>First Names</h4></li>
      -        <li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -        <li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -        <li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -        <li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -      </ul>
      -            
      -
      - -
      -
      - -
      -
      -
      -

      Avatar Content

      -
        -
      • - - Title -

        First Line
        - Second Line -

        - grade -
      • -
      • - folder - Title -

        First Line
        - Second Line -

        - grade -
      • -
      • - insert_chart - Title -

        First Line
        - Second Line -

        - grade -
      • -
      • - play_arrow - Title -

        First Line
        - Second Line -

        - grade -
      • -
      -
      
      -  <ul class="collection">
      -    <li class="collection-item avatar">
      -      <img src="images/yuna.jpg" alt="" class="circle">
      -      <span class="title">Title</span>
      -      <p>First Line <br>
      -         Second Line
      -      </p>
      -      <a href="#!" class="secondary-content"><i class="material-icons">grade</i></a>
      -    </li>
      -    <li class="collection-item avatar">
      -      <i class="material-icons circle">folder</i>
      -      <span class="title">Title</span>
      -      <p>First Line <br>
      -         Second Line
      -      </p>
      -      <a href="#!" class="secondary-content"><i class="material-icons">grade</i></a>
      -    </li>
      -    <li class="collection-item avatar">
      -      <i class="material-icons circle green">insert_chart</i>
      -      <span class="title">Title</span>
      -      <p>First Line <br>
      -         Second Line
      -      </p>
      -      <a href="#!" class="secondary-content"><i class="material-icons">grade</i></a>
      -    </li>
      -    <li class="collection-item avatar">
      -      <i class="material-icons circle red">play_arrow</i>
      -      <span class="title">Title</span>
      -      <p>First Line <br>
      -         Second Line
      -      </p>
      -      <a href="#!" class="secondary-content"><i class="material-icons">grade</i></a>
      -    </li>
      -  </ul>
      -            
      -
      - -
      -
      - -
      -
      -
      -

      Dismissable Content

      -

      You can just add the class dismissable to enable each collection item to be swiped away. This is only for touch enabled devices.

      - -
      
      -      <ul class="collection">
      -        <li class="collection-item dismissable"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -        <li class="collection-item dismissable"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -        <li class="collection-item dismissable"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -        <li class="collection-item dismissable"><div>Alvin<a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
      -      </ul>
      -            
      -
      - -
      -
      - - - -
      - - - -
      -
      - - -
      -
      -
      -
      -
      Help Materialize Grow
      -

      We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

      -
      - - - -
      - -
      -
      -
      Join the Discussion
      -

      We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

      - Chat -
      -
      -
      Connect
      - -
      - -
      -
      -
      -
      -
      - -
      - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/color.html b/color.html deleted file mode 100644 index 79c514a6d1..0000000000 --- a/color.html +++ /dev/null @@ -1,549 +0,0 @@ - - - - - - - - - Color - Materialize - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      -
      - -
      - -
      -

      Usage

      -

      - Here is a color palette based on the material design base colors. Each of these colors is defined with a base color class and an optional lighten or darken class. -

      -
      -
      Background Color
      -
      -

      To apply a background color, just add the color name and light/darkness as a class to the element.

      -
      This is a card panel with a teal lighten-2 class
      -
      
      -    <div class="card-panel teal lighten-2">This is a card panel with a teal lighten-2 class</div>
      -            
      -
      - -
      - -
      Text Color
      -
      -

      To apply a text color, just append -text to the color class like this:

      -
      This is a card panel with dark blue text
      -
      
      -    <div class="card-panel">
      -      <span class="blue-text text-darken-2">This is a card panel with dark blue text</span>
      -    </div>
      -            
      -
      -
      -
      - -
      -

      Sass

      -

      - For background colors, you can apply the color simply by extending the classes like the example below. -

      -
      
      -  .ilike-blue-container {
      -    @extend .blue, .lighten-4;
      -  }
      -        
      - -

      - For changing text color, you can apply the color simply by extending the classes like the example below. -

      -
      
      -  .ilike-blue-container {
      -    @extend .blue-text, .text-lighten-4;
      -  }
      -        
      -
      -
      - -

      Color Palette

      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - -
      -
      -
      - - -
      -
      - -
      -
      -
      - -
      -
      - -
      -
      -
      -
      -
      Help Materialize Grow
      -

      We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

      -
      - - - -
      - -
      -
      -
      Join the Discussion
      -

      We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

      - Chat -
      -
      -
      Connect
      - -
      - -
      -
      -
      -
      -
      - -
      - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/css/ghpages-materialize.css b/css/ghpages-materialize.css deleted file mode 100644 index 92a4d341c3..0000000000 --- a/css/ghpages-materialize.css +++ /dev/null @@ -1,8782 +0,0 @@ -.materialize-red.lighten-5 { - background-color: #fdeaeb !important; } - -.materialize-red-text.text-lighten-5 { - color: #fdeaeb !important; } - -.materialize-red.lighten-4 { - background-color: #f8c1c3 !important; } - -.materialize-red-text.text-lighten-4 { - color: #f8c1c3 !important; } - -.materialize-red.lighten-3 { - background-color: #f3989b !important; } - -.materialize-red-text.text-lighten-3 { - color: #f3989b !important; } - -.materialize-red.lighten-2 { - background-color: #ee6e73 !important; } - -.materialize-red-text.text-lighten-2 { - color: #ee6e73 !important; } - -.materialize-red.lighten-1 { - background-color: #ea454b !important; } - -.materialize-red-text.text-lighten-1 { - color: #ea454b !important; } - -.materialize-red { - background-color: #e51c23 !important; } - -.materialize-red-text { - color: #e51c23 !important; } - -.materialize-red.darken-1 { - background-color: #d0181e !important; } - -.materialize-red-text.text-darken-1 { - color: #d0181e !important; } - -.materialize-red.darken-2 { - background-color: #b9151b !important; } - -.materialize-red-text.text-darken-2 { - color: #b9151b !important; } - -.materialize-red.darken-3 { - background-color: #a21318 !important; } - -.materialize-red-text.text-darken-3 { - color: #a21318 !important; } - -.materialize-red.darken-4 { - background-color: #8b1014 !important; } - -.materialize-red-text.text-darken-4 { - color: #8b1014 !important; } - -.red.lighten-5 { - background-color: #FFEBEE !important; } - -.red-text.text-lighten-5 { - color: #FFEBEE !important; } - -.red.lighten-4 { - background-color: #FFCDD2 !important; } - -.red-text.text-lighten-4 { - color: #FFCDD2 !important; } - -.red.lighten-3 { - background-color: #EF9A9A !important; } - -.red-text.text-lighten-3 { - color: #EF9A9A !important; } - -.red.lighten-2 { - background-color: #E57373 !important; } - -.red-text.text-lighten-2 { - color: #E57373 !important; } - -.red.lighten-1 { - background-color: #EF5350 !important; } - -.red-text.text-lighten-1 { - color: #EF5350 !important; } - -.red { - background-color: #F44336 !important; } - -.red-text { - color: #F44336 !important; } - -.red.darken-1 { - background-color: #E53935 !important; } - -.red-text.text-darken-1 { - color: #E53935 !important; } - -.red.darken-2 { - background-color: #D32F2F !important; } - -.red-text.text-darken-2 { - color: #D32F2F !important; } - -.red.darken-3 { - background-color: #C62828 !important; } - -.red-text.text-darken-3 { - color: #C62828 !important; } - -.red.darken-4 { - background-color: #B71C1C !important; } - -.red-text.text-darken-4 { - color: #B71C1C !important; } - -.red.accent-1 { - background-color: #FF8A80 !important; } - -.red-text.text-accent-1 { - color: #FF8A80 !important; } - -.red.accent-2 { - background-color: #FF5252 !important; } - -.red-text.text-accent-2 { - color: #FF5252 !important; } - -.red.accent-3 { - background-color: #FF1744 !important; } - -.red-text.text-accent-3 { - color: #FF1744 !important; } - -.red.accent-4 { - background-color: #D50000 !important; } - -.red-text.text-accent-4 { - color: #D50000 !important; } - -.pink.lighten-5 { - background-color: #fce4ec !important; } - -.pink-text.text-lighten-5 { - color: #fce4ec !important; } - -.pink.lighten-4 { - background-color: #f8bbd0 !important; } - -.pink-text.text-lighten-4 { - color: #f8bbd0 !important; } - -.pink.lighten-3 { - background-color: #f48fb1 !important; } - -.pink-text.text-lighten-3 { - color: #f48fb1 !important; } - -.pink.lighten-2 { - background-color: #f06292 !important; } - -.pink-text.text-lighten-2 { - color: #f06292 !important; } - -.pink.lighten-1 { - background-color: #ec407a !important; } - -.pink-text.text-lighten-1 { - color: #ec407a !important; } - -.pink { - background-color: #e91e63 !important; } - -.pink-text { - color: #e91e63 !important; } - -.pink.darken-1 { - background-color: #d81b60 !important; } - -.pink-text.text-darken-1 { - color: #d81b60 !important; } - -.pink.darken-2 { - background-color: #c2185b !important; } - -.pink-text.text-darken-2 { - color: #c2185b !important; } - -.pink.darken-3 { - background-color: #ad1457 !important; } - -.pink-text.text-darken-3 { - color: #ad1457 !important; } - -.pink.darken-4 { - background-color: #880e4f !important; } - -.pink-text.text-darken-4 { - color: #880e4f !important; } - -.pink.accent-1 { - background-color: #ff80ab !important; } - -.pink-text.text-accent-1 { - color: #ff80ab !important; } - -.pink.accent-2 { - background-color: #ff4081 !important; } - -.pink-text.text-accent-2 { - color: #ff4081 !important; } - -.pink.accent-3 { - background-color: #f50057 !important; } - -.pink-text.text-accent-3 { - color: #f50057 !important; } - -.pink.accent-4 { - background-color: #c51162 !important; } - -.pink-text.text-accent-4 { - color: #c51162 !important; } - -.purple.lighten-5 { - background-color: #f3e5f5 !important; } - -.purple-text.text-lighten-5 { - color: #f3e5f5 !important; } - -.purple.lighten-4 { - background-color: #e1bee7 !important; } - -.purple-text.text-lighten-4 { - color: #e1bee7 !important; } - -.purple.lighten-3 { - background-color: #ce93d8 !important; } - -.purple-text.text-lighten-3 { - color: #ce93d8 !important; } - -.purple.lighten-2 { - background-color: #ba68c8 !important; } - -.purple-text.text-lighten-2 { - color: #ba68c8 !important; } - -.purple.lighten-1 { - background-color: #ab47bc !important; } - -.purple-text.text-lighten-1 { - color: #ab47bc !important; } - -.purple { - background-color: #9c27b0 !important; } - -.purple-text { - color: #9c27b0 !important; } - -.purple.darken-1 { - background-color: #8e24aa !important; } - -.purple-text.text-darken-1 { - color: #8e24aa !important; } - -.purple.darken-2 { - background-color: #7b1fa2 !important; } - -.purple-text.text-darken-2 { - color: #7b1fa2 !important; } - -.purple.darken-3 { - background-color: #6a1b9a !important; } - -.purple-text.text-darken-3 { - color: #6a1b9a !important; } - -.purple.darken-4 { - background-color: #4a148c !important; } - -.purple-text.text-darken-4 { - color: #4a148c !important; } - -.purple.accent-1 { - background-color: #ea80fc !important; } - -.purple-text.text-accent-1 { - color: #ea80fc !important; } - -.purple.accent-2 { - background-color: #e040fb !important; } - -.purple-text.text-accent-2 { - color: #e040fb !important; } - -.purple.accent-3 { - background-color: #d500f9 !important; } - -.purple-text.text-accent-3 { - color: #d500f9 !important; } - -.purple.accent-4 { - background-color: #aa00ff !important; } - -.purple-text.text-accent-4 { - color: #aa00ff !important; } - -.deep-purple.lighten-5 { - background-color: #ede7f6 !important; } - -.deep-purple-text.text-lighten-5 { - color: #ede7f6 !important; } - -.deep-purple.lighten-4 { - background-color: #d1c4e9 !important; } - -.deep-purple-text.text-lighten-4 { - color: #d1c4e9 !important; } - -.deep-purple.lighten-3 { - background-color: #b39ddb !important; } - -.deep-purple-text.text-lighten-3 { - color: #b39ddb !important; } - -.deep-purple.lighten-2 { - background-color: #9575cd !important; } - -.deep-purple-text.text-lighten-2 { - color: #9575cd !important; } - -.deep-purple.lighten-1 { - background-color: #7e57c2 !important; } - -.deep-purple-text.text-lighten-1 { - color: #7e57c2 !important; } - -.deep-purple { - background-color: #673ab7 !important; } - -.deep-purple-text { - color: #673ab7 !important; } - -.deep-purple.darken-1 { - background-color: #5e35b1 !important; } - -.deep-purple-text.text-darken-1 { - color: #5e35b1 !important; } - -.deep-purple.darken-2 { - background-color: #512da8 !important; } - -.deep-purple-text.text-darken-2 { - color: #512da8 !important; } - -.deep-purple.darken-3 { - background-color: #4527a0 !important; } - -.deep-purple-text.text-darken-3 { - color: #4527a0 !important; } - -.deep-purple.darken-4 { - background-color: #311b92 !important; } - -.deep-purple-text.text-darken-4 { - color: #311b92 !important; } - -.deep-purple.accent-1 { - background-color: #b388ff !important; } - -.deep-purple-text.text-accent-1 { - color: #b388ff !important; } - -.deep-purple.accent-2 { - background-color: #7c4dff !important; } - -.deep-purple-text.text-accent-2 { - color: #7c4dff !important; } - -.deep-purple.accent-3 { - background-color: #651fff !important; } - -.deep-purple-text.text-accent-3 { - color: #651fff !important; } - -.deep-purple.accent-4 { - background-color: #6200ea !important; } - -.deep-purple-text.text-accent-4 { - color: #6200ea !important; } - -.indigo.lighten-5 { - background-color: #e8eaf6 !important; } - -.indigo-text.text-lighten-5 { - color: #e8eaf6 !important; } - -.indigo.lighten-4 { - background-color: #c5cae9 !important; } - -.indigo-text.text-lighten-4 { - color: #c5cae9 !important; } - -.indigo.lighten-3 { - background-color: #9fa8da !important; } - -.indigo-text.text-lighten-3 { - color: #9fa8da !important; } - -.indigo.lighten-2 { - background-color: #7986cb !important; } - -.indigo-text.text-lighten-2 { - color: #7986cb !important; } - -.indigo.lighten-1 { - background-color: #5c6bc0 !important; } - -.indigo-text.text-lighten-1 { - color: #5c6bc0 !important; } - -.indigo { - background-color: #3f51b5 !important; } - -.indigo-text { - color: #3f51b5 !important; } - -.indigo.darken-1 { - background-color: #3949ab !important; } - -.indigo-text.text-darken-1 { - color: #3949ab !important; } - -.indigo.darken-2 { - background-color: #303f9f !important; } - -.indigo-text.text-darken-2 { - color: #303f9f !important; } - -.indigo.darken-3 { - background-color: #283593 !important; } - -.indigo-text.text-darken-3 { - color: #283593 !important; } - -.indigo.darken-4 { - background-color: #1a237e !important; } - -.indigo-text.text-darken-4 { - color: #1a237e !important; } - -.indigo.accent-1 { - background-color: #8c9eff !important; } - -.indigo-text.text-accent-1 { - color: #8c9eff !important; } - -.indigo.accent-2 { - background-color: #536dfe !important; } - -.indigo-text.text-accent-2 { - color: #536dfe !important; } - -.indigo.accent-3 { - background-color: #3d5afe !important; } - -.indigo-text.text-accent-3 { - color: #3d5afe !important; } - -.indigo.accent-4 { - background-color: #304ffe !important; } - -.indigo-text.text-accent-4 { - color: #304ffe !important; } - -.blue.lighten-5 { - background-color: #E3F2FD !important; } - -.blue-text.text-lighten-5 { - color: #E3F2FD !important; } - -.blue.lighten-4 { - background-color: #BBDEFB !important; } - -.blue-text.text-lighten-4 { - color: #BBDEFB !important; } - -.blue.lighten-3 { - background-color: #90CAF9 !important; } - -.blue-text.text-lighten-3 { - color: #90CAF9 !important; } - -.blue.lighten-2 { - background-color: #64B5F6 !important; } - -.blue-text.text-lighten-2 { - color: #64B5F6 !important; } - -.blue.lighten-1 { - background-color: #42A5F5 !important; } - -.blue-text.text-lighten-1 { - color: #42A5F5 !important; } - -.blue { - background-color: #2196F3 !important; } - -.blue-text { - color: #2196F3 !important; } - -.blue.darken-1 { - background-color: #1E88E5 !important; } - -.blue-text.text-darken-1 { - color: #1E88E5 !important; } - -.blue.darken-2 { - background-color: #1976D2 !important; } - -.blue-text.text-darken-2 { - color: #1976D2 !important; } - -.blue.darken-3 { - background-color: #1565C0 !important; } - -.blue-text.text-darken-3 { - color: #1565C0 !important; } - -.blue.darken-4 { - background-color: #0D47A1 !important; } - -.blue-text.text-darken-4 { - color: #0D47A1 !important; } - -.blue.accent-1 { - background-color: #82B1FF !important; } - -.blue-text.text-accent-1 { - color: #82B1FF !important; } - -.blue.accent-2 { - background-color: #448AFF !important; } - -.blue-text.text-accent-2 { - color: #448AFF !important; } - -.blue.accent-3 { - background-color: #2979FF !important; } - -.blue-text.text-accent-3 { - color: #2979FF !important; } - -.blue.accent-4 { - background-color: #2962FF !important; } - -.blue-text.text-accent-4 { - color: #2962FF !important; } - -.light-blue.lighten-5 { - background-color: #e1f5fe !important; } - -.light-blue-text.text-lighten-5 { - color: #e1f5fe !important; } - -.light-blue.lighten-4 { - background-color: #b3e5fc !important; } - -.light-blue-text.text-lighten-4 { - color: #b3e5fc !important; } - -.light-blue.lighten-3 { - background-color: #81d4fa !important; } - -.light-blue-text.text-lighten-3 { - color: #81d4fa !important; } - -.light-blue.lighten-2 { - background-color: #4fc3f7 !important; } - -.light-blue-text.text-lighten-2 { - color: #4fc3f7 !important; } - -.light-blue.lighten-1 { - background-color: #29b6f6 !important; } - -.light-blue-text.text-lighten-1 { - color: #29b6f6 !important; } - -.light-blue { - background-color: #03a9f4 !important; } - -.light-blue-text { - color: #03a9f4 !important; } - -.light-blue.darken-1 { - background-color: #039be5 !important; } - -.light-blue-text.text-darken-1 { - color: #039be5 !important; } - -.light-blue.darken-2 { - background-color: #0288d1 !important; } - -.light-blue-text.text-darken-2 { - color: #0288d1 !important; } - -.light-blue.darken-3 { - background-color: #0277bd !important; } - -.light-blue-text.text-darken-3 { - color: #0277bd !important; } - -.light-blue.darken-4 { - background-color: #01579b !important; } - -.light-blue-text.text-darken-4 { - color: #01579b !important; } - -.light-blue.accent-1 { - background-color: #80d8ff !important; } - -.light-blue-text.text-accent-1 { - color: #80d8ff !important; } - -.light-blue.accent-2 { - background-color: #40c4ff !important; } - -.light-blue-text.text-accent-2 { - color: #40c4ff !important; } - -.light-blue.accent-3 { - background-color: #00b0ff !important; } - -.light-blue-text.text-accent-3 { - color: #00b0ff !important; } - -.light-blue.accent-4 { - background-color: #0091ea !important; } - -.light-blue-text.text-accent-4 { - color: #0091ea !important; } - -.cyan.lighten-5 { - background-color: #e0f7fa !important; } - -.cyan-text.text-lighten-5 { - color: #e0f7fa !important; } - -.cyan.lighten-4 { - background-color: #b2ebf2 !important; } - -.cyan-text.text-lighten-4 { - color: #b2ebf2 !important; } - -.cyan.lighten-3 { - background-color: #80deea !important; } - -.cyan-text.text-lighten-3 { - color: #80deea !important; } - -.cyan.lighten-2 { - background-color: #4dd0e1 !important; } - -.cyan-text.text-lighten-2 { - color: #4dd0e1 !important; } - -.cyan.lighten-1 { - background-color: #26c6da !important; } - -.cyan-text.text-lighten-1 { - color: #26c6da !important; } - -.cyan { - background-color: #00bcd4 !important; } - -.cyan-text { - color: #00bcd4 !important; } - -.cyan.darken-1 { - background-color: #00acc1 !important; } - -.cyan-text.text-darken-1 { - color: #00acc1 !important; } - -.cyan.darken-2 { - background-color: #0097a7 !important; } - -.cyan-text.text-darken-2 { - color: #0097a7 !important; } - -.cyan.darken-3 { - background-color: #00838f !important; } - -.cyan-text.text-darken-3 { - color: #00838f !important; } - -.cyan.darken-4 { - background-color: #006064 !important; } - -.cyan-text.text-darken-4 { - color: #006064 !important; } - -.cyan.accent-1 { - background-color: #84ffff !important; } - -.cyan-text.text-accent-1 { - color: #84ffff !important; } - -.cyan.accent-2 { - background-color: #18ffff !important; } - -.cyan-text.text-accent-2 { - color: #18ffff !important; } - -.cyan.accent-3 { - background-color: #00e5ff !important; } - -.cyan-text.text-accent-3 { - color: #00e5ff !important; } - -.cyan.accent-4 { - background-color: #00b8d4 !important; } - -.cyan-text.text-accent-4 { - color: #00b8d4 !important; } - -.teal.lighten-5 { - background-color: #e0f2f1 !important; } - -.teal-text.text-lighten-5 { - color: #e0f2f1 !important; } - -.teal.lighten-4 { - background-color: #b2dfdb !important; } - -.teal-text.text-lighten-4 { - color: #b2dfdb !important; } - -.teal.lighten-3 { - background-color: #80cbc4 !important; } - -.teal-text.text-lighten-3 { - color: #80cbc4 !important; } - -.teal.lighten-2 { - background-color: #4db6ac !important; } - -.teal-text.text-lighten-2 { - color: #4db6ac !important; } - -.teal.lighten-1 { - background-color: #26a69a !important; } - -.teal-text.text-lighten-1 { - color: #26a69a !important; } - -.teal { - background-color: #009688 !important; } - -.teal-text { - color: #009688 !important; } - -.teal.darken-1 { - background-color: #00897b !important; } - -.teal-text.text-darken-1 { - color: #00897b !important; } - -.teal.darken-2 { - background-color: #00796b !important; } - -.teal-text.text-darken-2 { - color: #00796b !important; } - -.teal.darken-3 { - background-color: #00695c !important; } - -.teal-text.text-darken-3 { - color: #00695c !important; } - -.teal.darken-4 { - background-color: #004d40 !important; } - -.teal-text.text-darken-4 { - color: #004d40 !important; } - -.teal.accent-1 { - background-color: #a7ffeb !important; } - -.teal-text.text-accent-1 { - color: #a7ffeb !important; } - -.teal.accent-2 { - background-color: #64ffda !important; } - -.teal-text.text-accent-2 { - color: #64ffda !important; } - -.teal.accent-3 { - background-color: #1de9b6 !important; } - -.teal-text.text-accent-3 { - color: #1de9b6 !important; } - -.teal.accent-4 { - background-color: #00bfa5 !important; } - -.teal-text.text-accent-4 { - color: #00bfa5 !important; } - -.green.lighten-5 { - background-color: #E8F5E9 !important; } - -.green-text.text-lighten-5 { - color: #E8F5E9 !important; } - -.green.lighten-4 { - background-color: #C8E6C9 !important; } - -.green-text.text-lighten-4 { - color: #C8E6C9 !important; } - -.green.lighten-3 { - background-color: #A5D6A7 !important; } - -.green-text.text-lighten-3 { - color: #A5D6A7 !important; } - -.green.lighten-2 { - background-color: #81C784 !important; } - -.green-text.text-lighten-2 { - color: #81C784 !important; } - -.green.lighten-1 { - background-color: #66BB6A !important; } - -.green-text.text-lighten-1 { - color: #66BB6A !important; } - -.green { - background-color: #4CAF50 !important; } - -.green-text { - color: #4CAF50 !important; } - -.green.darken-1 { - background-color: #43A047 !important; } - -.green-text.text-darken-1 { - color: #43A047 !important; } - -.green.darken-2 { - background-color: #388E3C !important; } - -.green-text.text-darken-2 { - color: #388E3C !important; } - -.green.darken-3 { - background-color: #2E7D32 !important; } - -.green-text.text-darken-3 { - color: #2E7D32 !important; } - -.green.darken-4 { - background-color: #1B5E20 !important; } - -.green-text.text-darken-4 { - color: #1B5E20 !important; } - -.green.accent-1 { - background-color: #B9F6CA !important; } - -.green-text.text-accent-1 { - color: #B9F6CA !important; } - -.green.accent-2 { - background-color: #69F0AE !important; } - -.green-text.text-accent-2 { - color: #69F0AE !important; } - -.green.accent-3 { - background-color: #00E676 !important; } - -.green-text.text-accent-3 { - color: #00E676 !important; } - -.green.accent-4 { - background-color: #00C853 !important; } - -.green-text.text-accent-4 { - color: #00C853 !important; } - -.light-green.lighten-5 { - background-color: #f1f8e9 !important; } - -.light-green-text.text-lighten-5 { - color: #f1f8e9 !important; } - -.light-green.lighten-4 { - background-color: #dcedc8 !important; } - -.light-green-text.text-lighten-4 { - color: #dcedc8 !important; } - -.light-green.lighten-3 { - background-color: #c5e1a5 !important; } - -.light-green-text.text-lighten-3 { - color: #c5e1a5 !important; } - -.light-green.lighten-2 { - background-color: #aed581 !important; } - -.light-green-text.text-lighten-2 { - color: #aed581 !important; } - -.light-green.lighten-1 { - background-color: #9ccc65 !important; } - -.light-green-text.text-lighten-1 { - color: #9ccc65 !important; } - -.light-green { - background-color: #8bc34a !important; } - -.light-green-text { - color: #8bc34a !important; } - -.light-green.darken-1 { - background-color: #7cb342 !important; } - -.light-green-text.text-darken-1 { - color: #7cb342 !important; } - -.light-green.darken-2 { - background-color: #689f38 !important; } - -.light-green-text.text-darken-2 { - color: #689f38 !important; } - -.light-green.darken-3 { - background-color: #558b2f !important; } - -.light-green-text.text-darken-3 { - color: #558b2f !important; } - -.light-green.darken-4 { - background-color: #33691e !important; } - -.light-green-text.text-darken-4 { - color: #33691e !important; } - -.light-green.accent-1 { - background-color: #ccff90 !important; } - -.light-green-text.text-accent-1 { - color: #ccff90 !important; } - -.light-green.accent-2 { - background-color: #b2ff59 !important; } - -.light-green-text.text-accent-2 { - color: #b2ff59 !important; } - -.light-green.accent-3 { - background-color: #76ff03 !important; } - -.light-green-text.text-accent-3 { - color: #76ff03 !important; } - -.light-green.accent-4 { - background-color: #64dd17 !important; } - -.light-green-text.text-accent-4 { - color: #64dd17 !important; } - -.lime.lighten-5 { - background-color: #f9fbe7 !important; } - -.lime-text.text-lighten-5 { - color: #f9fbe7 !important; } - -.lime.lighten-4 { - background-color: #f0f4c3 !important; } - -.lime-text.text-lighten-4 { - color: #f0f4c3 !important; } - -.lime.lighten-3 { - background-color: #e6ee9c !important; } - -.lime-text.text-lighten-3 { - color: #e6ee9c !important; } - -.lime.lighten-2 { - background-color: #dce775 !important; } - -.lime-text.text-lighten-2 { - color: #dce775 !important; } - -.lime.lighten-1 { - background-color: #d4e157 !important; } - -.lime-text.text-lighten-1 { - color: #d4e157 !important; } - -.lime { - background-color: #cddc39 !important; } - -.lime-text { - color: #cddc39 !important; } - -.lime.darken-1 { - background-color: #c0ca33 !important; } - -.lime-text.text-darken-1 { - color: #c0ca33 !important; } - -.lime.darken-2 { - background-color: #afb42b !important; } - -.lime-text.text-darken-2 { - color: #afb42b !important; } - -.lime.darken-3 { - background-color: #9e9d24 !important; } - -.lime-text.text-darken-3 { - color: #9e9d24 !important; } - -.lime.darken-4 { - background-color: #827717 !important; } - -.lime-text.text-darken-4 { - color: #827717 !important; } - -.lime.accent-1 { - background-color: #f4ff81 !important; } - -.lime-text.text-accent-1 { - color: #f4ff81 !important; } - -.lime.accent-2 { - background-color: #eeff41 !important; } - -.lime-text.text-accent-2 { - color: #eeff41 !important; } - -.lime.accent-3 { - background-color: #c6ff00 !important; } - -.lime-text.text-accent-3 { - color: #c6ff00 !important; } - -.lime.accent-4 { - background-color: #aeea00 !important; } - -.lime-text.text-accent-4 { - color: #aeea00 !important; } - -.yellow.lighten-5 { - background-color: #fffde7 !important; } - -.yellow-text.text-lighten-5 { - color: #fffde7 !important; } - -.yellow.lighten-4 { - background-color: #fff9c4 !important; } - -.yellow-text.text-lighten-4 { - color: #fff9c4 !important; } - -.yellow.lighten-3 { - background-color: #fff59d !important; } - -.yellow-text.text-lighten-3 { - color: #fff59d !important; } - -.yellow.lighten-2 { - background-color: #fff176 !important; } - -.yellow-text.text-lighten-2 { - color: #fff176 !important; } - -.yellow.lighten-1 { - background-color: #ffee58 !important; } - -.yellow-text.text-lighten-1 { - color: #ffee58 !important; } - -.yellow { - background-color: #ffeb3b !important; } - -.yellow-text { - color: #ffeb3b !important; } - -.yellow.darken-1 { - background-color: #fdd835 !important; } - -.yellow-text.text-darken-1 { - color: #fdd835 !important; } - -.yellow.darken-2 { - background-color: #fbc02d !important; } - -.yellow-text.text-darken-2 { - color: #fbc02d !important; } - -.yellow.darken-3 { - background-color: #f9a825 !important; } - -.yellow-text.text-darken-3 { - color: #f9a825 !important; } - -.yellow.darken-4 { - background-color: #f57f17 !important; } - -.yellow-text.text-darken-4 { - color: #f57f17 !important; } - -.yellow.accent-1 { - background-color: #ffff8d !important; } - -.yellow-text.text-accent-1 { - color: #ffff8d !important; } - -.yellow.accent-2 { - background-color: #ffff00 !important; } - -.yellow-text.text-accent-2 { - color: #ffff00 !important; } - -.yellow.accent-3 { - background-color: #ffea00 !important; } - -.yellow-text.text-accent-3 { - color: #ffea00 !important; } - -.yellow.accent-4 { - background-color: #ffd600 !important; } - -.yellow-text.text-accent-4 { - color: #ffd600 !important; } - -.amber.lighten-5 { - background-color: #fff8e1 !important; } - -.amber-text.text-lighten-5 { - color: #fff8e1 !important; } - -.amber.lighten-4 { - background-color: #ffecb3 !important; } - -.amber-text.text-lighten-4 { - color: #ffecb3 !important; } - -.amber.lighten-3 { - background-color: #ffe082 !important; } - -.amber-text.text-lighten-3 { - color: #ffe082 !important; } - -.amber.lighten-2 { - background-color: #ffd54f !important; } - -.amber-text.text-lighten-2 { - color: #ffd54f !important; } - -.amber.lighten-1 { - background-color: #ffca28 !important; } - -.amber-text.text-lighten-1 { - color: #ffca28 !important; } - -.amber { - background-color: #ffc107 !important; } - -.amber-text { - color: #ffc107 !important; } - -.amber.darken-1 { - background-color: #ffb300 !important; } - -.amber-text.text-darken-1 { - color: #ffb300 !important; } - -.amber.darken-2 { - background-color: #ffa000 !important; } - -.amber-text.text-darken-2 { - color: #ffa000 !important; } - -.amber.darken-3 { - background-color: #ff8f00 !important; } - -.amber-text.text-darken-3 { - color: #ff8f00 !important; } - -.amber.darken-4 { - background-color: #ff6f00 !important; } - -.amber-text.text-darken-4 { - color: #ff6f00 !important; } - -.amber.accent-1 { - background-color: #ffe57f !important; } - -.amber-text.text-accent-1 { - color: #ffe57f !important; } - -.amber.accent-2 { - background-color: #ffd740 !important; } - -.amber-text.text-accent-2 { - color: #ffd740 !important; } - -.amber.accent-3 { - background-color: #ffc400 !important; } - -.amber-text.text-accent-3 { - color: #ffc400 !important; } - -.amber.accent-4 { - background-color: #ffab00 !important; } - -.amber-text.text-accent-4 { - color: #ffab00 !important; } - -.orange.lighten-5 { - background-color: #fff3e0 !important; } - -.orange-text.text-lighten-5 { - color: #fff3e0 !important; } - -.orange.lighten-4 { - background-color: #ffe0b2 !important; } - -.orange-text.text-lighten-4 { - color: #ffe0b2 !important; } - -.orange.lighten-3 { - background-color: #ffcc80 !important; } - -.orange-text.text-lighten-3 { - color: #ffcc80 !important; } - -.orange.lighten-2 { - background-color: #ffb74d !important; } - -.orange-text.text-lighten-2 { - color: #ffb74d !important; } - -.orange.lighten-1 { - background-color: #ffa726 !important; } - -.orange-text.text-lighten-1 { - color: #ffa726 !important; } - -.orange { - background-color: #ff9800 !important; } - -.orange-text { - color: #ff9800 !important; } - -.orange.darken-1 { - background-color: #fb8c00 !important; } - -.orange-text.text-darken-1 { - color: #fb8c00 !important; } - -.orange.darken-2 { - background-color: #f57c00 !important; } - -.orange-text.text-darken-2 { - color: #f57c00 !important; } - -.orange.darken-3 { - background-color: #ef6c00 !important; } - -.orange-text.text-darken-3 { - color: #ef6c00 !important; } - -.orange.darken-4 { - background-color: #e65100 !important; } - -.orange-text.text-darken-4 { - color: #e65100 !important; } - -.orange.accent-1 { - background-color: #ffd180 !important; } - -.orange-text.text-accent-1 { - color: #ffd180 !important; } - -.orange.accent-2 { - background-color: #ffab40 !important; } - -.orange-text.text-accent-2 { - color: #ffab40 !important; } - -.orange.accent-3 { - background-color: #ff9100 !important; } - -.orange-text.text-accent-3 { - color: #ff9100 !important; } - -.orange.accent-4 { - background-color: #ff6d00 !important; } - -.orange-text.text-accent-4 { - color: #ff6d00 !important; } - -.deep-orange.lighten-5 { - background-color: #fbe9e7 !important; } - -.deep-orange-text.text-lighten-5 { - color: #fbe9e7 !important; } - -.deep-orange.lighten-4 { - background-color: #ffccbc !important; } - -.deep-orange-text.text-lighten-4 { - color: #ffccbc !important; } - -.deep-orange.lighten-3 { - background-color: #ffab91 !important; } - -.deep-orange-text.text-lighten-3 { - color: #ffab91 !important; } - -.deep-orange.lighten-2 { - background-color: #ff8a65 !important; } - -.deep-orange-text.text-lighten-2 { - color: #ff8a65 !important; } - -.deep-orange.lighten-1 { - background-color: #ff7043 !important; } - -.deep-orange-text.text-lighten-1 { - color: #ff7043 !important; } - -.deep-orange { - background-color: #ff5722 !important; } - -.deep-orange-text { - color: #ff5722 !important; } - -.deep-orange.darken-1 { - background-color: #f4511e !important; } - -.deep-orange-text.text-darken-1 { - color: #f4511e !important; } - -.deep-orange.darken-2 { - background-color: #e64a19 !important; } - -.deep-orange-text.text-darken-2 { - color: #e64a19 !important; } - -.deep-orange.darken-3 { - background-color: #d84315 !important; } - -.deep-orange-text.text-darken-3 { - color: #d84315 !important; } - -.deep-orange.darken-4 { - background-color: #bf360c !important; } - -.deep-orange-text.text-darken-4 { - color: #bf360c !important; } - -.deep-orange.accent-1 { - background-color: #ff9e80 !important; } - -.deep-orange-text.text-accent-1 { - color: #ff9e80 !important; } - -.deep-orange.accent-2 { - background-color: #ff6e40 !important; } - -.deep-orange-text.text-accent-2 { - color: #ff6e40 !important; } - -.deep-orange.accent-3 { - background-color: #ff3d00 !important; } - -.deep-orange-text.text-accent-3 { - color: #ff3d00 !important; } - -.deep-orange.accent-4 { - background-color: #dd2c00 !important; } - -.deep-orange-text.text-accent-4 { - color: #dd2c00 !important; } - -.brown.lighten-5 { - background-color: #efebe9 !important; } - -.brown-text.text-lighten-5 { - color: #efebe9 !important; } - -.brown.lighten-4 { - background-color: #d7ccc8 !important; } - -.brown-text.text-lighten-4 { - color: #d7ccc8 !important; } - -.brown.lighten-3 { - background-color: #bcaaa4 !important; } - -.brown-text.text-lighten-3 { - color: #bcaaa4 !important; } - -.brown.lighten-2 { - background-color: #a1887f !important; } - -.brown-text.text-lighten-2 { - color: #a1887f !important; } - -.brown.lighten-1 { - background-color: #8d6e63 !important; } - -.brown-text.text-lighten-1 { - color: #8d6e63 !important; } - -.brown { - background-color: #795548 !important; } - -.brown-text { - color: #795548 !important; } - -.brown.darken-1 { - background-color: #6d4c41 !important; } - -.brown-text.text-darken-1 { - color: #6d4c41 !important; } - -.brown.darken-2 { - background-color: #5d4037 !important; } - -.brown-text.text-darken-2 { - color: #5d4037 !important; } - -.brown.darken-3 { - background-color: #4e342e !important; } - -.brown-text.text-darken-3 { - color: #4e342e !important; } - -.brown.darken-4 { - background-color: #3e2723 !important; } - -.brown-text.text-darken-4 { - color: #3e2723 !important; } - -.blue-grey.lighten-5 { - background-color: #eceff1 !important; } - -.blue-grey-text.text-lighten-5 { - color: #eceff1 !important; } - -.blue-grey.lighten-4 { - background-color: #cfd8dc !important; } - -.blue-grey-text.text-lighten-4 { - color: #cfd8dc !important; } - -.blue-grey.lighten-3 { - background-color: #b0bec5 !important; } - -.blue-grey-text.text-lighten-3 { - color: #b0bec5 !important; } - -.blue-grey.lighten-2 { - background-color: #90a4ae !important; } - -.blue-grey-text.text-lighten-2 { - color: #90a4ae !important; } - -.blue-grey.lighten-1 { - background-color: #78909c !important; } - -.blue-grey-text.text-lighten-1 { - color: #78909c !important; } - -.blue-grey { - background-color: #607d8b !important; } - -.blue-grey-text { - color: #607d8b !important; } - -.blue-grey.darken-1 { - background-color: #546e7a !important; } - -.blue-grey-text.text-darken-1 { - color: #546e7a !important; } - -.blue-grey.darken-2 { - background-color: #455a64 !important; } - -.blue-grey-text.text-darken-2 { - color: #455a64 !important; } - -.blue-grey.darken-3 { - background-color: #37474f !important; } - -.blue-grey-text.text-darken-3 { - color: #37474f !important; } - -.blue-grey.darken-4 { - background-color: #263238 !important; } - -.blue-grey-text.text-darken-4 { - color: #263238 !important; } - -.grey.lighten-5 { - background-color: #fafafa !important; } - -.grey-text.text-lighten-5 { - color: #fafafa !important; } - -.grey.lighten-4 { - background-color: #f5f5f5 !important; } - -.grey-text.text-lighten-4 { - color: #f5f5f5 !important; } - -.grey.lighten-3 { - background-color: #eeeeee !important; } - -.grey-text.text-lighten-3 { - color: #eeeeee !important; } - -.grey.lighten-2 { - background-color: #e0e0e0 !important; } - -.grey-text.text-lighten-2 { - color: #e0e0e0 !important; } - -.grey.lighten-1 { - background-color: #bdbdbd !important; } - -.grey-text.text-lighten-1 { - color: #bdbdbd !important; } - -.grey { - background-color: #9e9e9e !important; } - -.grey-text { - color: #9e9e9e !important; } - -.grey.darken-1 { - background-color: #757575 !important; } - -.grey-text.text-darken-1 { - color: #757575 !important; } - -.grey.darken-2 { - background-color: #616161 !important; } - -.grey-text.text-darken-2 { - color: #616161 !important; } - -.grey.darken-3 { - background-color: #424242 !important; } - -.grey-text.text-darken-3 { - color: #424242 !important; } - -.grey.darken-4 { - background-color: #212121 !important; } - -.grey-text.text-darken-4 { - color: #212121 !important; } - -.shades.black { - background-color: #000000 !important; } - -.shades-text.text-black { - color: #000000 !important; } - -.shades.white { - background-color: #FFFFFF !important; } - -.shades-text.text-white { - color: #FFFFFF !important; } - -.shades.transparent { - background-color: transparent !important; } - -.shades-text.text-transparent { - color: transparent !important; } - -.black { - background-color: #000000 !important; } - -.black-text { - color: #000000 !important; } - -.white { - background-color: #FFFFFF !important; } - -.white-text { - color: #FFFFFF !important; } - -.transparent { - background-color: transparent !important; } - -.transparent-text { - color: transparent !important; } - -/*** Colors ***/ -/*** Badges ***/ -/*** Buttons ***/ -/*** Cards ***/ -/*** Collapsible ***/ -/*** Dropdown ***/ -/*** Fonts ***/ -/*** Forms ***/ -/*** Global ***/ -/*** Navbar ***/ -/*** SideNav ***/ -/*** Photo Slider ***/ -/*** Tabs ***/ -/*** Tables ***/ -/*** Toasts ***/ -/*** Typography ***/ -/*** Collections ***/ -/* Progress Bar */ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ -html { - font-family: sans-serif; - /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; - /* 2 */ } - -/** - * Remove default margin. - */ -body { - margin: 0; } - -/* HTML5 display definitions - ========================================================================== */ -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ -article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { - display: block; } - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ -audio, canvas, progress, video { - display: inline-block; - /* 1 */ - vertical-align: baseline; - /* 2 */ } - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ -audio:not([controls]) { - display: none; - height: 0; } - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ -[hidden], template { - display: none; } - -/* Links - ========================================================================== */ -/** - * Remove the gray background color from active links in IE 10. - */ -a { - background-color: transparent; } - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ -a:active, a:hover { - outline: 0; } - -/* Text-level semantics - ========================================================================== */ -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ -abbr[title] { - border-bottom: 1px dotted; } - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ -b, strong { - font-weight: bold; } - -/** - * Address styling not present in Safari and Chrome. - */ -dfn { - font-style: italic; } - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ -h1 { - font-size: 2em; - margin: 0.67em 0; } - -/** - * Address styling not present in IE 8/9. - */ -mark { - background: #ff0; - color: #000; } - -/** - * Address inconsistent and variable font size in all browsers. - */ -small { - font-size: 80%; } - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -/* Embedded content - ========================================================================== */ -/** - * Remove border when inside `a` element in IE 8/9/10. - */ -img { - border: 0; } - -/** - * Correct overflow not hidden in IE 9/10/11. - */ -svg:not(:root) { - overflow: hidden; } - -/* Grouping content - ========================================================================== */ -/** - * Address margin not present in IE 8/9 and Safari. - */ -figure { - margin: 1em 40px; } - -/** - * Address differences between Firefox and other browsers. - */ -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; } - -/** - * Contain overflow in all browsers. - */ -pre { - overflow: auto; } - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ -code, kbd, pre, samp { - font-family: monospace, monospace; - font-size: 1em; } - -/* Forms - ========================================================================== */ -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ -button, input, optgroup, select, textarea { - color: inherit; - /* 1 */ - font: inherit; - /* 2 */ - margin: 0; - /* 3 */ } - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ -button { - overflow: visible; } - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ -button, select { - text-transform: none; } - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ -/* 1 */ -html input[type="button"], button, input[type="reset"], input[type="submit"] { - -webkit-appearance: button; - /* 2 */ - cursor: pointer; - /* 3 */ } - -/** - * Re-set default cursor for disabled elements. - */ -button[disabled], html input[disabled] { - cursor: default; } - -/** - * Remove inner padding and border in Firefox 4+. - */ -button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; - padding: 0; } - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ -input { - line-height: normal; } - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ -input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; - /* 1 */ - padding: 0; - /* 2 */ } - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ -input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { - height: auto; } - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ -input[type="search"] { - -webkit-appearance: textfield; - /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - /* 2 */ - box-sizing: content-box; } - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ -input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -/** - * Define consistent border, margin, and padding. - */ -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; } - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ -legend { - border: 0; - /* 1 */ - padding: 0; - /* 2 */ } - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ -textarea { - overflow: auto; } - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ -optgroup { - font-weight: bold; } - -/* Tables - ========================================================================== */ -/** - * Remove most spacing between table cells. - */ -table { - border-collapse: collapse; - border-spacing: 0; } - -td, th { - padding: 0; } - -html { - box-sizing: border-box; } - -*, *:before, *:after { - box-sizing: inherit; } - -ul { - list-style-type: none; } - -a { - color: #039be5; - text-decoration: none; - -webkit-tap-highlight-color: transparent; } - -.valign-wrapper { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-align: center; - -ms-flex-align: center; - -webkit-align-items: center; - align-items: center; } - .valign-wrapper .valign { - display: block; } - -ul { - padding: 0; } - ul li { - list-style-type: none; } - -.clearfix { - clear: both; } - -.z-depth-0 { - box-shadow: none !important; } - -.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); } - -.z-depth-1-half, .btn:hover, .btn-large:hover, .btn-floating:hover { - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); } - -.z-depth-2 { - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } - -.z-depth-3 { - box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); } - -.z-depth-4, .modal { - box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); } - -.z-depth-5 { - box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); } - -.hoverable:hover { - transition: box-shadow .25s; - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } - -.divider { - height: 1px; - overflow: hidden; - background-color: #e0e0e0; } - -blockquote { - margin: 20px 0; - padding-left: 1.5rem; - border-left: 5px solid #ee6e73; } - -i { - line-height: inherit; } - i.left { - float: left; - margin-right: 15px; } - i.right { - float: right; - margin-left: 15px; } - i.tiny { - font-size: 1rem; } - i.small { - font-size: 2rem; } - i.medium { - font-size: 4rem; } - i.large { - font-size: 6rem; } - -img.responsive-img, video.responsive-video { - max-width: 100%; - height: auto; } - -.pagination li { - display: inline-block; - font-size: 1.2rem; - padding: 0 10px; - line-height: 30px; - border-radius: 2px; - text-align: center; } - .pagination li a { - color: #444; } - .pagination li.active a { - color: #fff; } - .pagination li.active { - background-color: #ee6e73; } - .pagination li.disabled a { - cursor: default; - color: #999; } - .pagination li i { - font-size: 2rem; } -.pagination li.pages ul li { - display: inline-block; - float: none; } - -@media only screen and (max-width : 992px) { - .pagination { - width: 100%; } - .pagination li.prev, .pagination li.next { - width: 10%; } - .pagination li.pages { - width: 80%; - overflow: hidden; - white-space: nowrap; } } - -.parallax-container { - position: relative; - overflow: hidden; - height: 500px; } - -.parallax { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; } - .parallax img { - display: none; - position: absolute; - left: 50%; - bottom: 0; - min-width: 100%; - min-height: 100%; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - transform: translateX(-50%); } - -.pin-top, .pin-bottom { - position: relative; } - -.pinned { - position: fixed !important; } - -/********************* - Transition Classes -**********************/ -ul.staggered-list li { - opacity: 0; } - -.fade-in { - opacity: 0; - transform-origin: 0 50%; } - -/********************* - Media Query Classes -**********************/ -@media only screen and (max-width : 600px) { - .hide-on-small-only, .tabs-wrapper, .hide-on-small-and-down { - display: none !important; } } - -@media only screen and (max-width : 992px) { - .hide-on-med-and-down { - display: none !important; } } - -@media only screen and (min-width : 601px) { - .hide-on-med-and-up { - display: none !important; } } - -@media only screen and (min-width: 600px) and (max-width: 992px) { - .hide-on-med-only { - display: none !important; } } - -@media only screen and (min-width : 993px) { - .hide-on-large-only { - display: none !important; } } - -@media only screen and (min-width : 993px) { - .show-on-large { - display: initial !important; } } - -@media only screen and (min-width: 600px) and (max-width: 992px) { - .show-on-medium { - display: initial !important; } } - -@media only screen and (max-width : 600px) { - .show-on-small { - display: initial !important; } } - -@media only screen and (min-width : 601px) { - .show-on-medium-and-up { - display: initial !important; } } - -@media only screen and (max-width : 992px) { - .show-on-medium-and-down { - display: initial !important; } } - -@media only screen and (max-width : 600px) { - .center-on-small-only { - text-align: center; } } - -footer.page-footer { - margin-top: 20px; - padding-top: 20px; - background-color: #ee6e73; } - footer.page-footer .footer-copyright { - overflow: hidden; - height: 50px; - line-height: 50px; - color: rgba(255, 255, 255, 0.8); - background-color: rgba(51, 51, 51, 0.08); } - -table, th, td { - border: none; } - -table { - width: 100%; - display: table; } - table.bordered > thead > tr, table.bordered > tbody > tr { - border-bottom: 1px solid #d0d0d0; } - table.striped > tbody > tr:nth-child(odd) { - background-color: #f2f2f2; } - table.striped > tbody > tr > td { - border-radius: 0px; } - table.highlight > tbody > tr { - -webkit-transition: background-color .25s ease; - -moz-transition: background-color .25s ease; - -o-transition: background-color .25s ease; - -ms-transition: background-color .25s ease; - transition: background-color .25s ease; } - table.highlight > tbody > tr:hover { - background-color: #f2f2f2; } - table.centered thead tr th, table.centered tbody tr td { - text-align: center; } - -thead { - border-bottom: 1px solid #d0d0d0; } - -td, th { - padding: 15px 5px; - display: table-cell; - text-align: left; - vertical-align: middle; - border-radius: 2px; } - -@media only screen and (max-width : 992px) { - table.responsive-table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - display: block; - position: relative; - /* sort out borders */ } - table.responsive-table th, table.responsive-table td { - margin: 0; - vertical-align: top; } - table.responsive-table th { - text-align: left; } - table.responsive-table thead { - display: block; - float: left; } - table.responsive-table thead tr { - display: block; - padding: 0 10px 0 0; } - table.responsive-table thead tr th::before { - content: "\00a0"; } - table.responsive-table tbody { - display: block; - width: auto; - position: relative; - overflow-x: auto; - white-space: nowrap; } - table.responsive-table tbody tr { - display: inline-block; - vertical-align: top; } - table.responsive-table th { - display: block; - text-align: right; } - table.responsive-table td { - display: block; - min-height: 1.25em; - text-align: left; } - table.responsive-table tr { - padding: 0 10px; } - table.responsive-table thead { - border: 0; - border-right: 1px solid #d0d0d0; } - table.responsive-table.bordered th { - border-bottom: 0; - border-left: 0; } - table.responsive-table.bordered td { - border-left: 0; - border-right: 0; - border-bottom: 0; } - table.responsive-table.bordered tr { - border: 0; } - table.responsive-table.bordered tbody tr { - border-right: 1px solid #d0d0d0; } } - -.collection { - margin: 0.5rem 0 1rem 0; - border: 1px solid #e0e0e0; - border-radius: 2px; - overflow: hidden; - position: relative; } - .collection .collection-item { - background-color: #fff; - line-height: 1.5rem; - padding: 10px 20px; - margin: 0; - border-bottom: 1px solid #e0e0e0; } - .collection .collection-item.avatar { - min-height: 84px; - padding-left: 72px; - position: relative; } - .collection .collection-item.avatar .circle { - position: absolute; - width: 42px; - height: 42px; - overflow: hidden; - left: 15px; - display: inline-block; - vertical-align: middle; } - .collection .collection-item.avatar i.circle { - font-size: 18px; - line-height: 42px; - color: #fff; - background-color: #999; - text-align: center; } - .collection .collection-item.avatar .title { - font-size: 16px; } - .collection .collection-item.avatar p { - margin: 0; } - .collection .collection-item.avatar .secondary-content { - position: absolute; - top: 16px; - right: 16px; } - .collection .collection-item:last-child { - border-bottom: none; } - .collection .collection-item.active { - background-color: #26a69a; - color: #eafaf9; } - .collection .collection-item.active .secondary-content { - color: #fff; } - .collection a.collection-item { - display: block; - -webkit-transition: 0.25s; - -moz-transition: 0.25s; - -o-transition: 0.25s; - -ms-transition: 0.25s; - transition: 0.25s; - color: #26a69a; } - .collection a.collection-item:not(.active):hover { - background-color: #ddd; } - .collection.with-header .collection-header { - background-color: #fff; - border-bottom: 1px solid #e0e0e0; - padding: 10px 20px; } - .collection.with-header .collection-item { - padding-left: 30px; } - .collection.with-header .collection-item.avatar { - padding-left: 72px; } - -.secondary-content { - float: right; - color: #26a69a; } - -span.badge { - min-width: 3rem; - padding: 0 6px; - text-align: center; - font-size: 1rem; - line-height: inherit; - color: #757575; - position: absolute; - right: 15px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - span.badge.new { - font-weight: 300; - font-size: 0.8rem; - color: #fff; - background-color: #26a69a; - border-radius: 2px; } - span.badge.new:after { - content: " new"; } - -.video-container { - position: relative; - padding-bottom: 56.25%; - padding-top: 30px; - height: 0; - overflow: hidden; } - .video-container.no-controls { - padding-top: 0; } - .video-container iframe, .video-container object, .video-container embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; } - -.progress { - position: relative; - height: 4px; - display: block; - width: 100%; - background-color: #acece6; - border-radius: 2px; - margin: 0.5rem 0 1rem 0; - overflow: hidden; } - .progress .determinate { - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - background-color: #26a69a; - -webkit-transition: width .3s linear; - -moz-transition: width .3s linear; - -o-transition: width .3s linear; - -ms-transition: width .3s linear; - transition: width .3s linear; } - .progress .indeterminate { - background-color: #26a69a; } - .progress .indeterminate:before { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -moz-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -ms-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -o-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; } - .progress .indeterminate:after { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -moz-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -ms-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -o-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -webkit-animation-delay: 1.15s; - -moz-animation-delay: 1.15s; - -ms-animation-delay: 1.15s; - -o-animation-delay: 1.15s; - animation-delay: 1.15s; } - -@-webkit-keyframes indeterminate { - 0% { - left: -35%; - right: 100%; } - - 60% { - left: 100%; - right: -90%; } - - 100% { - left: 100%; - right: -90%; } } - -@-moz-keyframes indeterminate { - 0% { - left: -35%; - right: 100%; } - - 60% { - left: 100%; - right: -90%; } - - 100% { - left: 100%; - right: -90%; } } - -@keyframes indeterminate { - 0% { - left: -35%; - right: 100%; } - - 60% { - left: 100%; - right: -90%; } - - 100% { - left: 100%; - right: -90%; } } - -@-webkit-keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; } - - 60% { - left: 107%; - right: -8%; } - - 100% { - left: 107%; - right: -8%; } } - -@-moz-keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; } - - 60% { - left: 107%; - right: -8%; } - - 100% { - left: 107%; - right: -8%; } } - -@keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; } - - 60% { - left: 107%; - right: -8%; } - - 100% { - left: 107%; - right: -8%; } } - -/******************* - Utility Classes -*******************/ -.hide { - display: none !important; } - -.left-align { - text-align: left; } - -.right-align { - text-align: right; } - -.center, .center-align { - text-align: center; } - -.left { - float: left !important; } - -.right { - float: right !important; } - -.no-select, input[type=range], input[type=range] + .thumb { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - -.circle { - border-radius: 50%; } - -.center-block { - display: block; - margin-left: auto; - margin-right: auto; } - -.truncate { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; } - -.no-padding { - padding: 0 !important; } - -@font-face { - font-family: "Material-Design-Icons"; - src: url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"), url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"), url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"), url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"), url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg"); - font-weight: normal; - font-style: normal; } - -[class^="mdi-"], [class*="mdi-"] { - speak: none; - display: inline-block; - font-family: "Material-Design-Icons"; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-rendering: auto; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); } - [class^="mdi-"]:before, [class*="mdi-"]:before { - display: inline-block; - speak: none; - text-decoration: inherit; } - [class^="mdi-"].pull-left, [class*="mdi-"].pull-left { - margin-right: .3em; } - [class^="mdi-"].pull-right, [class*="mdi-"].pull-right { - margin-left: .3em; } - [class^="mdi-"].mdi-lg:before, [class^="mdi-"].mdi-lg:after, [class*="mdi-"].mdi-lg:before, [class*="mdi-"].mdi-lg:after { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; } - [class^="mdi-"].mdi-2x:before, [class^="mdi-"].mdi-2x:after, [class*="mdi-"].mdi-2x:before, [class*="mdi-"].mdi-2x:after { - font-size: 2em; } - [class^="mdi-"].mdi-3x:before, [class^="mdi-"].mdi-3x:after, [class*="mdi-"].mdi-3x:before, [class*="mdi-"].mdi-3x:after { - font-size: 3em; } - [class^="mdi-"].mdi-4x:before, [class^="mdi-"].mdi-4x:after, [class*="mdi-"].mdi-4x:before, [class*="mdi-"].mdi-4x:after { - font-size: 4em; } - [class^="mdi-"].mdi-5x:before, [class^="mdi-"].mdi-5x:after, [class*="mdi-"].mdi-5x:before, [class*="mdi-"].mdi-5x:after { - font-size: 5em; } - -[class^="mdi-device-signal-cellular-"]:after, [class^="mdi-device-battery-"]:after, [class^="mdi-device-battery-charging-"]:after, [class^="mdi-device-signal-cellular-connected-no-internet-"]:after, [class^="mdi-device-signal-wifi-"]:after, [class^="mdi-device-signal-wifi-statusbar-not-connected"]:after, .mdi-device-network-wifi:after { - opacity: .3; - position: absolute; - left: 0; - top: 0; - z-index: 1; - display: inline-block; - speak: none; - text-decoration: inherit; } - -[class^="mdi-device-signal-cellular-"]:after { - content: "\e758"; } - -[class^="mdi-device-battery-"]:after { - content: "\e735"; } - -[class^="mdi-device-battery-charging-"]:after { - content: "\e733"; } - -[class^="mdi-device-signal-cellular-connected-no-internet-"]:after { - content: "\e75d"; } - -[class^="mdi-device-signal-wifi-"]:after, .mdi-device-network-wifi:after { - content: "\e765"; } - -[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after { - content: "\e8f7"; } - -.mdi-device-signal-cellular-off:after, .mdi-device-signal-cellular-null:after, .mdi-device-signal-cellular-no-sim:after, .mdi-device-signal-wifi-off:after, .mdi-device-signal-wifi-4-bar:after, .mdi-device-signal-cellular-4-bar:after, .mdi-device-battery-alert:after, .mdi-device-signal-cellular-connected-no-internet-4-bar:after, .mdi-device-battery-std:after, .mdi-device-battery-full .mdi-device-battery-unknown:after { - content: ""; } - -.mdi-fw { - width: 1.28571429em; - text-align: center; } - -.mdi-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; } - -.mdi-ul > li { - position: relative; } - -.mdi-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; } - -.mdi-li.mdi-lg { - left: -1.85714286em; } - -.mdi-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; } - -.mdi-spin { - -webkit-animation: mdi-spin 2s infinite linear; - animation: mdi-spin 2s infinite linear; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; } - -.mdi-pulse { - -webkit-animation: mdi-spin 1s steps(8) infinite; - animation: mdi-spin 1s steps(8) infinite; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; } - -@-webkit-keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } - -@keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } - -.mdi-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); } - -.mdi-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); } - -.mdi-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); } - -.mdi-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); } - -.mdi-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); } - -:root .mdi-rotate-90, :root .mdi-rotate-180, :root .mdi-rotate-270, :root .mdi-flip-horizontal, :root .mdi-flip-vertical { - filter: none; } - -.mdi-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; } - -.mdi-stack-1x, .mdi-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; } - -.mdi-stack-1x { - line-height: inherit; } - -.mdi-stack-2x { - font-size: 2em; } - -.mdi-inverse { - color: #ffffff; } - -/* Start Icons */ -.mdi-action-3d-rotation:before { - content: "\e600"; } - -.mdi-action-accessibility:before { - content: "\e601"; } - -.mdi-action-account-balance-wallet:before { - content: "\e602"; } - -.mdi-action-account-balance:before { - content: "\e603"; } - -.mdi-action-account-box:before { - content: "\e604"; } - -.mdi-action-account-child:before { - content: "\e605"; } - -.mdi-action-account-circle:before { - content: "\e606"; } - -.mdi-action-add-shopping-cart:before { - content: "\e607"; } - -.mdi-action-alarm-add:before { - content: "\e608"; } - -.mdi-action-alarm-off:before { - content: "\e609"; } - -.mdi-action-alarm-on:before { - content: "\e60a"; } - -.mdi-action-alarm:before { - content: "\e60b"; } - -.mdi-action-android:before { - content: "\e60c"; } - -.mdi-action-announcement:before { - content: "\e60d"; } - -.mdi-action-aspect-ratio:before { - content: "\e60e"; } - -.mdi-action-assessment:before { - content: "\e60f"; } - -.mdi-action-assignment-ind:before { - content: "\e610"; } - -.mdi-action-assignment-late:before { - content: "\e611"; } - -.mdi-action-assignment-return:before { - content: "\e612"; } - -.mdi-action-assignment-returned:before { - content: "\e613"; } - -.mdi-action-assignment-turned-in:before { - content: "\e614"; } - -.mdi-action-assignment:before { - content: "\e615"; } - -.mdi-action-autorenew:before { - content: "\e616"; } - -.mdi-action-backup:before { - content: "\e617"; } - -.mdi-action-book:before { - content: "\e618"; } - -.mdi-action-bookmark-outline:before { - content: "\e619"; } - -.mdi-action-bookmark:before { - content: "\e61a"; } - -.mdi-action-bug-report:before { - content: "\e61b"; } - -.mdi-action-cached:before { - content: "\e61c"; } - -.mdi-action-check-circle:before { - content: "\e61d"; } - -.mdi-action-class:before { - content: "\e61e"; } - -.mdi-action-credit-card:before { - content: "\e61f"; } - -.mdi-action-dashboard:before { - content: "\e620"; } - -.mdi-action-delete:before { - content: "\e621"; } - -.mdi-action-description:before { - content: "\e622"; } - -.mdi-action-dns:before { - content: "\e623"; } - -.mdi-action-done-all:before { - content: "\e624"; } - -.mdi-action-done:before { - content: "\e625"; } - -.mdi-action-event:before { - content: "\e626"; } - -.mdi-action-exit-to-app:before { - content: "\e627"; } - -.mdi-action-explore:before { - content: "\e628"; } - -.mdi-action-extension:before { - content: "\e629"; } - -.mdi-action-face-unlock:before { - content: "\e62a"; } - -.mdi-action-favorite-outline:before { - content: "\e62b"; } - -.mdi-action-favorite:before { - content: "\e62c"; } - -.mdi-action-find-in-page:before { - content: "\e62d"; } - -.mdi-action-find-replace:before { - content: "\e62e"; } - -.mdi-action-flip-to-back:before { - content: "\e62f"; } - -.mdi-action-flip-to-front:before { - content: "\e630"; } - -.mdi-action-get-app:before { - content: "\e631"; } - -.mdi-action-grade:before { - content: "\e632"; } - -.mdi-action-group-work:before { - content: "\e633"; } - -.mdi-action-help:before { - content: "\e634"; } - -.mdi-action-highlight-remove:before { - content: "\e635"; } - -.mdi-action-history:before { - content: "\e636"; } - -.mdi-action-home:before { - content: "\e637"; } - -.mdi-action-https:before { - content: "\e638"; } - -.mdi-action-info-outline:before { - content: "\e639"; } - -.mdi-action-info:before { - content: "\e63a"; } - -.mdi-action-input:before { - content: "\e63b"; } - -.mdi-action-invert-colors:before { - content: "\e63c"; } - -.mdi-action-label-outline:before { - content: "\e63d"; } - -.mdi-action-label:before { - content: "\e63e"; } - -.mdi-action-language:before { - content: "\e63f"; } - -.mdi-action-launch:before { - content: "\e640"; } - -.mdi-action-list:before { - content: "\e641"; } - -.mdi-action-lock-open:before { - content: "\e642"; } - -.mdi-action-lock-outline:before { - content: "\e643"; } - -.mdi-action-lock:before { - content: "\e644"; } - -.mdi-action-loyalty:before { - content: "\e645"; } - -.mdi-action-markunread-mailbox:before { - content: "\e646"; } - -.mdi-action-note-add:before { - content: "\e647"; } - -.mdi-action-open-in-browser:before { - content: "\e648"; } - -.mdi-action-open-in-new:before { - content: "\e649"; } - -.mdi-action-open-with:before { - content: "\e64a"; } - -.mdi-action-pageview:before { - content: "\e64b"; } - -.mdi-action-payment:before { - content: "\e64c"; } - -.mdi-action-perm-camera-mic:before { - content: "\e64d"; } - -.mdi-action-perm-contact-cal:before { - content: "\e64e"; } - -.mdi-action-perm-data-setting:before { - content: "\e64f"; } - -.mdi-action-perm-device-info:before { - content: "\e650"; } - -.mdi-action-perm-identity:before { - content: "\e651"; } - -.mdi-action-perm-media:before { - content: "\e652"; } - -.mdi-action-perm-phone-msg:before { - content: "\e653"; } - -.mdi-action-perm-scan-wifi:before { - content: "\e654"; } - -.mdi-action-picture-in-picture:before { - content: "\e655"; } - -.mdi-action-polymer:before { - content: "\e656"; } - -.mdi-action-print:before { - content: "\e657"; } - -.mdi-action-query-builder:before { - content: "\e658"; } - -.mdi-action-question-answer:before { - content: "\e659"; } - -.mdi-action-receipt:before { - content: "\e65a"; } - -.mdi-action-redeem:before { - content: "\e65b"; } - -.mdi-action-reorder:before { - content: "\e65c"; } - -.mdi-action-report-problem:before { - content: "\e65d"; } - -.mdi-action-restore:before { - content: "\e65e"; } - -.mdi-action-room:before { - content: "\e65f"; } - -.mdi-action-schedule:before { - content: "\e660"; } - -.mdi-action-search:before { - content: "\e661"; } - -.mdi-action-settings-applications:before { - content: "\e662"; } - -.mdi-action-settings-backup-restore:before { - content: "\e663"; } - -.mdi-action-settings-bluetooth:before { - content: "\e664"; } - -.mdi-action-settings-cell:before { - content: "\e665"; } - -.mdi-action-settings-display:before { - content: "\e666"; } - -.mdi-action-settings-ethernet:before { - content: "\e667"; } - -.mdi-action-settings-input-antenna:before { - content: "\e668"; } - -.mdi-action-settings-input-component:before { - content: "\e669"; } - -.mdi-action-settings-input-composite:before { - content: "\e66a"; } - -.mdi-action-settings-input-hdmi:before { - content: "\e66b"; } - -.mdi-action-settings-input-svideo:before { - content: "\e66c"; } - -.mdi-action-settings-overscan:before { - content: "\e66d"; } - -.mdi-action-settings-phone:before { - content: "\e66e"; } - -.mdi-action-settings-power:before { - content: "\e66f"; } - -.mdi-action-settings-remote:before { - content: "\e670"; } - -.mdi-action-settings-voice:before { - content: "\e671"; } - -.mdi-action-settings:before { - content: "\e672"; } - -.mdi-action-shop-two:before { - content: "\e673"; } - -.mdi-action-shop:before { - content: "\e674"; } - -.mdi-action-shopping-basket:before { - content: "\e675"; } - -.mdi-action-shopping-cart:before { - content: "\e676"; } - -.mdi-action-speaker-notes:before { - content: "\e677"; } - -.mdi-action-spellcheck:before { - content: "\e678"; } - -.mdi-action-star-rate:before { - content: "\e679"; } - -.mdi-action-stars:before { - content: "\e67a"; } - -.mdi-action-store:before { - content: "\e67b"; } - -.mdi-action-subject:before { - content: "\e67c"; } - -.mdi-action-supervisor-account:before { - content: "\e67d"; } - -.mdi-action-swap-horiz:before { - content: "\e67e"; } - -.mdi-action-swap-vert-circle:before { - content: "\e67f"; } - -.mdi-action-swap-vert:before { - content: "\e680"; } - -.mdi-action-system-update-tv:before { - content: "\e681"; } - -.mdi-action-tab-unselected:before { - content: "\e682"; } - -.mdi-action-tab:before { - content: "\e683"; } - -.mdi-action-theaters:before { - content: "\e684"; } - -.mdi-action-thumb-down:before { - content: "\e685"; } - -.mdi-action-thumb-up:before { - content: "\e686"; } - -.mdi-action-thumbs-up-down:before { - content: "\e687"; } - -.mdi-action-toc:before { - content: "\e688"; } - -.mdi-action-today:before { - content: "\e689"; } - -.mdi-action-track-changes:before { - content: "\e68a"; } - -.mdi-action-translate:before { - content: "\e68b"; } - -.mdi-action-trending-down:before { - content: "\e68c"; } - -.mdi-action-trending-neutral:before { - content: "\e68d"; } - -.mdi-action-trending-up:before { - content: "\e68e"; } - -.mdi-action-turned-in-not:before { - content: "\e68f"; } - -.mdi-action-turned-in:before { - content: "\e690"; } - -.mdi-action-verified-user:before { - content: "\e691"; } - -.mdi-action-view-agenda:before { - content: "\e692"; } - -.mdi-action-view-array:before { - content: "\e693"; } - -.mdi-action-view-carousel:before { - content: "\e694"; } - -.mdi-action-view-column:before { - content: "\e695"; } - -.mdi-action-view-day:before { - content: "\e696"; } - -.mdi-action-view-headline:before { - content: "\e697"; } - -.mdi-action-view-list:before { - content: "\e698"; } - -.mdi-action-view-module:before { - content: "\e699"; } - -.mdi-action-view-quilt:before { - content: "\e69a"; } - -.mdi-action-view-stream:before { - content: "\e69b"; } - -.mdi-action-view-week:before { - content: "\e69c"; } - -.mdi-action-visibility-off:before { - content: "\e69d"; } - -.mdi-action-visibility:before { - content: "\e69e"; } - -.mdi-action-wallet-giftcard:before { - content: "\e69f"; } - -.mdi-action-wallet-membership:before { - content: "\e6a0"; } - -.mdi-action-wallet-travel:before { - content: "\e6a1"; } - -.mdi-action-work:before { - content: "\e6a2"; } - -.mdi-alert-error:before { - content: "\e6a3"; } - -.mdi-alert-warning:before { - content: "\e6a4"; } - -.mdi-av-album:before { - content: "\e6a5"; } - -.mdi-av-closed-caption:before { - content: "\e6a6"; } - -.mdi-av-equalizer:before { - content: "\e6a7"; } - -.mdi-av-explicit:before { - content: "\e6a8"; } - -.mdi-av-fast-forward:before { - content: "\e6a9"; } - -.mdi-av-fast-rewind:before { - content: "\e6aa"; } - -.mdi-av-games:before { - content: "\e6ab"; } - -.mdi-av-hearing:before { - content: "\e6ac"; } - -.mdi-av-high-quality:before { - content: "\e6ad"; } - -.mdi-av-loop:before { - content: "\e6ae"; } - -.mdi-av-mic-none:before { - content: "\e6af"; } - -.mdi-av-mic-off:before { - content: "\e6b0"; } - -.mdi-av-mic:before { - content: "\e6b1"; } - -.mdi-av-movie:before { - content: "\e6b2"; } - -.mdi-av-my-library-add:before { - content: "\e6b3"; } - -.mdi-av-my-library-books:before { - content: "\e6b4"; } - -.mdi-av-my-library-music:before { - content: "\e6b5"; } - -.mdi-av-new-releases:before { - content: "\e6b6"; } - -.mdi-av-not-interested:before { - content: "\e6b7"; } - -.mdi-av-pause-circle-fill:before { - content: "\e6b8"; } - -.mdi-av-pause-circle-outline:before { - content: "\e6b9"; } - -.mdi-av-pause:before { - content: "\e6ba"; } - -.mdi-av-play-arrow:before { - content: "\e6bb"; } - -.mdi-av-play-circle-fill:before { - content: "\e6bc"; } - -.mdi-av-play-circle-outline:before { - content: "\e6bd"; } - -.mdi-av-play-shopping-bag:before { - content: "\e6be"; } - -.mdi-av-playlist-add:before { - content: "\e6bf"; } - -.mdi-av-queue-music:before { - content: "\e6c0"; } - -.mdi-av-queue:before { - content: "\e6c1"; } - -.mdi-av-radio:before { - content: "\e6c2"; } - -.mdi-av-recent-actors:before { - content: "\e6c3"; } - -.mdi-av-repeat-one:before { - content: "\e6c4"; } - -.mdi-av-repeat:before { - content: "\e6c5"; } - -.mdi-av-replay:before { - content: "\e6c6"; } - -.mdi-av-shuffle:before { - content: "\e6c7"; } - -.mdi-av-skip-next:before { - content: "\e6c8"; } - -.mdi-av-skip-previous:before { - content: "\e6c9"; } - -.mdi-av-snooze:before { - content: "\e6ca"; } - -.mdi-av-stop:before { - content: "\e6cb"; } - -.mdi-av-subtitles:before { - content: "\e6cc"; } - -.mdi-av-surround-sound:before { - content: "\e6cd"; } - -.mdi-av-timer:before { - content: "\e6ce"; } - -.mdi-av-video-collection:before { - content: "\e6cf"; } - -.mdi-av-videocam-off:before { - content: "\e6d0"; } - -.mdi-av-videocam:before { - content: "\e6d1"; } - -.mdi-av-volume-down:before { - content: "\e6d2"; } - -.mdi-av-volume-mute:before { - content: "\e6d3"; } - -.mdi-av-volume-off:before { - content: "\e6d4"; } - -.mdi-av-volume-up:before { - content: "\e6d5"; } - -.mdi-av-web:before { - content: "\e6d6"; } - -.mdi-communication-business:before { - content: "\e6d7"; } - -.mdi-communication-call-end:before { - content: "\e6d8"; } - -.mdi-communication-call-made:before { - content: "\e6d9"; } - -.mdi-communication-call-merge:before { - content: "\e6da"; } - -.mdi-communication-call-missed:before { - content: "\e6db"; } - -.mdi-communication-call-received:before { - content: "\e6dc"; } - -.mdi-communication-call-split:before { - content: "\e6dd"; } - -.mdi-communication-call:before { - content: "\e6de"; } - -.mdi-communication-chat:before { - content: "\e6df"; } - -.mdi-communication-clear-all:before { - content: "\e6e0"; } - -.mdi-communication-comment:before { - content: "\e6e1"; } - -.mdi-communication-contacts:before { - content: "\e6e2"; } - -.mdi-communication-dialer-sip:before { - content: "\e6e3"; } - -.mdi-communication-dialpad:before { - content: "\e6e4"; } - -.mdi-communication-dnd-on:before { - content: "\e6e5"; } - -.mdi-communication-email:before { - content: "\e6e6"; } - -.mdi-communication-forum:before { - content: "\e6e7"; } - -.mdi-communication-import-export:before { - content: "\e6e8"; } - -.mdi-communication-invert-colors-off:before { - content: "\e6e9"; } - -.mdi-communication-invert-colors-on:before { - content: "\e6ea"; } - -.mdi-communication-live-help:before { - content: "\e6eb"; } - -.mdi-communication-location-off:before { - content: "\e6ec"; } - -.mdi-communication-location-on:before { - content: "\e6ed"; } - -.mdi-communication-message:before { - content: "\e6ee"; } - -.mdi-communication-messenger:before { - content: "\e6ef"; } - -.mdi-communication-no-sim:before { - content: "\e6f0"; } - -.mdi-communication-phone:before { - content: "\e6f1"; } - -.mdi-communication-portable-wifi-off:before { - content: "\e6f2"; } - -.mdi-communication-quick-contacts-dialer:before { - content: "\e6f3"; } - -.mdi-communication-quick-contacts-mail:before { - content: "\e6f4"; } - -.mdi-communication-ring-volume:before { - content: "\e6f5"; } - -.mdi-communication-stay-current-landscape:before { - content: "\e6f6"; } - -.mdi-communication-stay-current-portrait:before { - content: "\e6f7"; } - -.mdi-communication-stay-primary-landscape:before { - content: "\e6f8"; } - -.mdi-communication-stay-primary-portrait:before { - content: "\e6f9"; } - -.mdi-communication-swap-calls:before { - content: "\e6fa"; } - -.mdi-communication-textsms:before { - content: "\e6fb"; } - -.mdi-communication-voicemail:before { - content: "\e6fc"; } - -.mdi-communication-vpn-key:before { - content: "\e6fd"; } - -.mdi-content-add-box:before { - content: "\e6fe"; } - -.mdi-content-add-circle-outline:before { - content: "\e6ff"; } - -.mdi-content-add-circle:before { - content: "\e700"; } - -.mdi-content-add:before { - content: "\e701"; } - -.mdi-content-archive:before { - content: "\e702"; } - -.mdi-content-backspace:before { - content: "\e703"; } - -.mdi-content-block:before { - content: "\e704"; } - -.mdi-content-clear:before { - content: "\e705"; } - -.mdi-content-content-copy:before { - content: "\e706"; } - -.mdi-content-content-cut:before { - content: "\e707"; } - -.mdi-content-content-paste:before { - content: "\e708"; } - -.mdi-content-create:before { - content: "\e709"; } - -.mdi-content-drafts:before { - content: "\e70a"; } - -.mdi-content-filter-list:before { - content: "\e70b"; } - -.mdi-content-flag:before { - content: "\e70c"; } - -.mdi-content-forward:before { - content: "\e70d"; } - -.mdi-content-gesture:before { - content: "\e70e"; } - -.mdi-content-inbox:before { - content: "\e70f"; } - -.mdi-content-link:before { - content: "\e710"; } - -.mdi-content-mail:before { - content: "\e711"; } - -.mdi-content-markunread:before { - content: "\e712"; } - -.mdi-content-redo:before { - content: "\e713"; } - -.mdi-content-remove-circle-outline:before { - content: "\e714"; } - -.mdi-content-remove-circle:before { - content: "\e715"; } - -.mdi-content-remove:before { - content: "\e716"; } - -.mdi-content-reply-all:before { - content: "\e717"; } - -.mdi-content-reply:before { - content: "\e718"; } - -.mdi-content-report:before { - content: "\e719"; } - -.mdi-content-save:before { - content: "\e71a"; } - -.mdi-content-select-all:before { - content: "\e71b"; } - -.mdi-content-send:before { - content: "\e71c"; } - -.mdi-content-sort:before { - content: "\e71d"; } - -.mdi-content-text-format:before { - content: "\e71e"; } - -.mdi-content-undo:before { - content: "\e71f"; } - -.mdi-editor-attach-file:before { - content: "\e776"; } - -.mdi-editor-attach-money:before { - content: "\e777"; } - -.mdi-editor-border-all:before { - content: "\e778"; } - -.mdi-editor-border-bottom:before { - content: "\e779"; } - -.mdi-editor-border-clear:before { - content: "\e77a"; } - -.mdi-editor-border-color:before { - content: "\e77b"; } - -.mdi-editor-border-horizontal:before { - content: "\e77c"; } - -.mdi-editor-border-inner:before { - content: "\e77d"; } - -.mdi-editor-border-left:before { - content: "\e77e"; } - -.mdi-editor-border-outer:before { - content: "\e77f"; } - -.mdi-editor-border-right:before { - content: "\e780"; } - -.mdi-editor-border-style:before { - content: "\e781"; } - -.mdi-editor-border-top:before { - content: "\e782"; } - -.mdi-editor-border-vertical:before { - content: "\e783"; } - -.mdi-editor-format-align-center:before { - content: "\e784"; } - -.mdi-editor-format-align-justify:before { - content: "\e785"; } - -.mdi-editor-format-align-left:before { - content: "\e786"; } - -.mdi-editor-format-align-right:before { - content: "\e787"; } - -.mdi-editor-format-bold:before { - content: "\e788"; } - -.mdi-editor-format-clear:before { - content: "\e789"; } - -.mdi-editor-format-color-fill:before { - content: "\e78a"; } - -.mdi-editor-format-color-reset:before { - content: "\e78b"; } - -.mdi-editor-format-color-text:before { - content: "\e78c"; } - -.mdi-editor-format-indent-decrease:before { - content: "\e78d"; } - -.mdi-editor-format-indent-increase:before { - content: "\e78e"; } - -.mdi-editor-format-italic:before { - content: "\e78f"; } - -.mdi-editor-format-line-spacing:before { - content: "\e790"; } - -.mdi-editor-format-list-bulleted:before { - content: "\e791"; } - -.mdi-editor-format-list-numbered:before { - content: "\e792"; } - -.mdi-editor-format-paint:before { - content: "\e793"; } - -.mdi-editor-format-quote:before { - content: "\e794"; } - -.mdi-editor-format-size:before { - content: "\e795"; } - -.mdi-editor-format-strikethrough:before { - content: "\e796"; } - -.mdi-editor-format-textdirection-l-to-r:before { - content: "\e797"; } - -.mdi-editor-format-textdirection-r-to-l:before { - content: "\e798"; } - -.mdi-editor-format-underline:before { - content: "\e799"; } - -.mdi-editor-functions:before { - content: "\e79a"; } - -.mdi-editor-insert-chart:before { - content: "\e79b"; } - -.mdi-editor-insert-comment:before { - content: "\e79c"; } - -.mdi-editor-insert-drive-file:before { - content: "\e79d"; } - -.mdi-editor-insert-emoticon:before { - content: "\e79e"; } - -.mdi-editor-insert-invitation:before { - content: "\e79f"; } - -.mdi-editor-insert-link:before { - content: "\e7a0"; } - -.mdi-editor-insert-photo:before { - content: "\e7a1"; } - -.mdi-editor-merge-type:before { - content: "\e7a2"; } - -.mdi-editor-mode-comment:before { - content: "\e7a3"; } - -.mdi-editor-mode-edit:before { - content: "\e7a4"; } - -.mdi-editor-publish:before { - content: "\e7a5"; } - -.mdi-editor-vertical-align-bottom:before { - content: "\e7a6"; } - -.mdi-editor-vertical-align-center:before { - content: "\e7a7"; } - -.mdi-editor-vertical-align-top:before { - content: "\e7a8"; } - -.mdi-editor-wrap-text:before { - content: "\e7a9"; } - -.mdi-file-attachment:before { - content: "\e7aa"; } - -.mdi-file-cloud-circle:before { - content: "\e7ab"; } - -.mdi-file-cloud-done:before { - content: "\e7ac"; } - -.mdi-file-cloud-download:before { - content: "\e7ad"; } - -.mdi-file-cloud-off:before { - content: "\e7ae"; } - -.mdi-file-cloud-queue:before { - content: "\e7af"; } - -.mdi-file-cloud-upload:before { - content: "\e7b0"; } - -.mdi-file-cloud:before { - content: "\e7b1"; } - -.mdi-file-file-download:before { - content: "\e7b2"; } - -.mdi-file-file-upload:before { - content: "\e7b3"; } - -.mdi-file-folder-open:before { - content: "\e7b4"; } - -.mdi-file-folder-shared:before { - content: "\e7b5"; } - -.mdi-file-folder:before { - content: "\e7b6"; } - -.mdi-device-access-alarm:before { - content: "\e720"; } - -.mdi-device-access-alarms:before { - content: "\e721"; } - -.mdi-device-access-time:before { - content: "\e722"; } - -.mdi-device-add-alarm:before { - content: "\e723"; } - -.mdi-device-airplanemode-off:before { - content: "\e724"; } - -.mdi-device-airplanemode-on:before { - content: "\e725"; } - -.mdi-device-battery-20:before { - content: "\e726"; } - -.mdi-device-battery-30:before { - content: "\e727"; } - -.mdi-device-battery-50:before { - content: "\e728"; } - -.mdi-device-battery-60:before { - content: "\e729"; } - -.mdi-device-battery-80:before { - content: "\e72a"; } - -.mdi-device-battery-90:before { - content: "\e72b"; } - -.mdi-device-battery-alert:before { - content: "\e72c"; } - -.mdi-device-battery-charging-20:before { - content: "\e72d"; } - -.mdi-device-battery-charging-30:before { - content: "\e72e"; } - -.mdi-device-battery-charging-50:before { - content: "\e72f"; } - -.mdi-device-battery-charging-60:before { - content: "\e730"; } - -.mdi-device-battery-charging-80:before { - content: "\e731"; } - -.mdi-device-battery-charging-90:before { - content: "\e732"; } - -.mdi-device-battery-charging-full:before { - content: "\e733"; } - -.mdi-device-battery-full:before { - content: "\e734"; } - -.mdi-device-battery-std:before { - content: "\e735"; } - -.mdi-device-battery-unknown:before { - content: "\e736"; } - -.mdi-device-bluetooth-connected:before { - content: "\e737"; } - -.mdi-device-bluetooth-disabled:before { - content: "\e738"; } - -.mdi-device-bluetooth-searching:before { - content: "\e739"; } - -.mdi-device-bluetooth:before { - content: "\e73a"; } - -.mdi-device-brightness-auto:before { - content: "\e73b"; } - -.mdi-device-brightness-high:before { - content: "\e73c"; } - -.mdi-device-brightness-low:before { - content: "\e73d"; } - -.mdi-device-brightness-medium:before { - content: "\e73e"; } - -.mdi-device-data-usage:before { - content: "\e73f"; } - -.mdi-device-developer-mode:before { - content: "\e740"; } - -.mdi-device-devices:before { - content: "\e741"; } - -.mdi-device-dvr:before { - content: "\e742"; } - -.mdi-device-gps-fixed:before { - content: "\e743"; } - -.mdi-device-gps-not-fixed:before { - content: "\e744"; } - -.mdi-device-gps-off:before { - content: "\e745"; } - -.mdi-device-location-disabled:before { - content: "\e746"; } - -.mdi-device-location-searching:before { - content: "\e747"; } - -.mdi-device-multitrack-audio:before { - content: "\e748"; } - -.mdi-device-network-cell:before { - content: "\e749"; } - -.mdi-device-network-wifi:before { - content: "\e74a"; } - -.mdi-device-nfc:before { - content: "\e74b"; } - -.mdi-device-now-wallpaper:before { - content: "\e74c"; } - -.mdi-device-now-widgets:before { - content: "\e74d"; } - -.mdi-device-screen-lock-landscape:before { - content: "\e74e"; } - -.mdi-device-screen-lock-portrait:before { - content: "\e74f"; } - -.mdi-device-screen-lock-rotation:before { - content: "\e750"; } - -.mdi-device-screen-rotation:before { - content: "\e751"; } - -.mdi-device-sd-storage:before { - content: "\e752"; } - -.mdi-device-settings-system-daydream:before { - content: "\e753"; } - -.mdi-device-signal-cellular-0-bar:before { - content: "\e754"; } - -.mdi-device-signal-cellular-1-bar:before { - content: "\e755"; } - -.mdi-device-signal-cellular-2-bar:before { - content: "\e756"; } - -.mdi-device-signal-cellular-3-bar:before { - content: "\e757"; } - -.mdi-device-signal-cellular-4-bar:before { - content: "\e758"; } - -.mdi-signal-wifi-statusbar-connected-no-internet-after:before { - content: "\e8f6"; } - -.mdi-device-signal-cellular-connected-no-internet-0-bar:before { - content: "\e759"; } - -.mdi-device-signal-cellular-connected-no-internet-1-bar:before { - content: "\e75a"; } - -.mdi-device-signal-cellular-connected-no-internet-2-bar:before { - content: "\e75b"; } - -.mdi-device-signal-cellular-connected-no-internet-3-bar:before { - content: "\e75c"; } - -.mdi-device-signal-cellular-connected-no-internet-4-bar:before { - content: "\e75d"; } - -.mdi-device-signal-cellular-no-sim:before { - content: "\e75e"; } - -.mdi-device-signal-cellular-null:before { - content: "\e75f"; } - -.mdi-device-signal-cellular-off:before { - content: "\e760"; } - -.mdi-device-signal-wifi-0-bar:before { - content: "\e761"; } - -.mdi-device-signal-wifi-1-bar:before { - content: "\e762"; } - -.mdi-device-signal-wifi-2-bar:before { - content: "\e763"; } - -.mdi-device-signal-wifi-3-bar:before { - content: "\e764"; } - -.mdi-device-signal-wifi-4-bar:before { - content: "\e765"; } - -.mdi-device-signal-wifi-off:before { - content: "\e766"; } - -.mdi-device-signal-wifi-statusbar-1-bar:before { - content: "\e767"; } - -.mdi-device-signal-wifi-statusbar-2-bar:before { - content: "\e768"; } - -.mdi-device-signal-wifi-statusbar-3-bar:before { - content: "\e769"; } - -.mdi-device-signal-wifi-statusbar-4-bar:before { - content: "\e76a"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-:before { - content: "\e76b"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet:before { - content: "\e76f"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before { - content: "\e76c"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before { - content: "\e76d"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before { - content: "\e76e"; } - -.mdi-signal-wifi-statusbar-not-connected-after:before { - content: "\e8f7"; } - -.mdi-device-signal-wifi-statusbar-not-connected:before { - content: "\e770"; } - -.mdi-device-signal-wifi-statusbar-null:before { - content: "\e771"; } - -.mdi-device-storage:before { - content: "\e772"; } - -.mdi-device-usb:before { - content: "\e773"; } - -.mdi-device-wifi-lock:before { - content: "\e774"; } - -.mdi-device-wifi-tethering:before { - content: "\e775"; } - -.mdi-hardware-cast-connected:before { - content: "\e7b7"; } - -.mdi-hardware-cast:before { - content: "\e7b8"; } - -.mdi-hardware-computer:before { - content: "\e7b9"; } - -.mdi-hardware-desktop-mac:before { - content: "\e7ba"; } - -.mdi-hardware-desktop-windows:before { - content: "\e7bb"; } - -.mdi-hardware-dock:before { - content: "\e7bc"; } - -.mdi-hardware-gamepad:before { - content: "\e7bd"; } - -.mdi-hardware-headset-mic:before { - content: "\e7be"; } - -.mdi-hardware-headset:before { - content: "\e7bf"; } - -.mdi-hardware-keyboard-alt:before { - content: "\e7c0"; } - -.mdi-hardware-keyboard-arrow-down:before { - content: "\e7c1"; } - -.mdi-hardware-keyboard-arrow-left:before { - content: "\e7c2"; } - -.mdi-hardware-keyboard-arrow-right:before { - content: "\e7c3"; } - -.mdi-hardware-keyboard-arrow-up:before { - content: "\e7c4"; } - -.mdi-hardware-keyboard-backspace:before { - content: "\e7c5"; } - -.mdi-hardware-keyboard-capslock:before { - content: "\e7c6"; } - -.mdi-hardware-keyboard-control:before { - content: "\e7c7"; } - -.mdi-hardware-keyboard-hide:before { - content: "\e7c8"; } - -.mdi-hardware-keyboard-return:before { - content: "\e7c9"; } - -.mdi-hardware-keyboard-tab:before { - content: "\e7ca"; } - -.mdi-hardware-keyboard-voice:before { - content: "\e7cb"; } - -.mdi-hardware-keyboard:before { - content: "\e7cc"; } - -.mdi-hardware-laptop-chromebook:before { - content: "\e7cd"; } - -.mdi-hardware-laptop-mac:before { - content: "\e7ce"; } - -.mdi-hardware-laptop-windows:before { - content: "\e7cf"; } - -.mdi-hardware-laptop:before { - content: "\e7d0"; } - -.mdi-hardware-memory:before { - content: "\e7d1"; } - -.mdi-hardware-mouse:before { - content: "\e7d2"; } - -.mdi-hardware-phone-android:before { - content: "\e7d3"; } - -.mdi-hardware-phone-iphone:before { - content: "\e7d4"; } - -.mdi-hardware-phonelink-off:before { - content: "\e7d5"; } - -.mdi-hardware-phonelink:before { - content: "\e7d6"; } - -.mdi-hardware-security:before { - content: "\e7d7"; } - -.mdi-hardware-sim-card:before { - content: "\e7d8"; } - -.mdi-hardware-smartphone:before { - content: "\e7d9"; } - -.mdi-hardware-speaker:before { - content: "\e7da"; } - -.mdi-hardware-tablet-android:before { - content: "\e7db"; } - -.mdi-hardware-tablet-mac:before { - content: "\e7dc"; } - -.mdi-hardware-tablet:before { - content: "\e7dd"; } - -.mdi-hardware-tv:before { - content: "\e7de"; } - -.mdi-hardware-watch:before { - content: "\e7df"; } - -.mdi-image-add-to-photos:before { - content: "\e7e0"; } - -.mdi-image-adjust:before { - content: "\e7e1"; } - -.mdi-image-assistant-photo:before { - content: "\e7e2"; } - -.mdi-image-audiotrack:before { - content: "\e7e3"; } - -.mdi-image-blur-circular:before { - content: "\e7e4"; } - -.mdi-image-blur-linear:before { - content: "\e7e5"; } - -.mdi-image-blur-off:before { - content: "\e7e6"; } - -.mdi-image-blur-on:before { - content: "\e7e7"; } - -.mdi-image-brightness-1:before { - content: "\e7e8"; } - -.mdi-image-brightness-2:before { - content: "\e7e9"; } - -.mdi-image-brightness-3:before { - content: "\e7ea"; } - -.mdi-image-brightness-4:before { - content: "\e7eb"; } - -.mdi-image-brightness-5:before { - content: "\e7ec"; } - -.mdi-image-brightness-6:before { - content: "\e7ed"; } - -.mdi-image-brightness-7:before { - content: "\e7ee"; } - -.mdi-image-brush:before { - content: "\e7ef"; } - -.mdi-image-camera-alt:before { - content: "\e7f0"; } - -.mdi-image-camera-front:before { - content: "\e7f1"; } - -.mdi-image-camera-rear:before { - content: "\e7f2"; } - -.mdi-image-camera-roll:before { - content: "\e7f3"; } - -.mdi-image-camera:before { - content: "\e7f4"; } - -.mdi-image-center-focus-strong:before { - content: "\e7f5"; } - -.mdi-image-center-focus-weak:before { - content: "\e7f6"; } - -.mdi-image-collections:before { - content: "\e7f7"; } - -.mdi-image-color-lens:before { - content: "\e7f8"; } - -.mdi-image-colorize:before { - content: "\e7f9"; } - -.mdi-image-compare:before { - content: "\e7fa"; } - -.mdi-image-control-point-duplicate:before { - content: "\e7fb"; } - -.mdi-image-control-point:before { - content: "\e7fc"; } - -.mdi-image-crop-3-2:before { - content: "\e7fd"; } - -.mdi-image-crop-5-4:before { - content: "\e7fe"; } - -.mdi-image-crop-7-5:before { - content: "\e7ff"; } - -.mdi-image-crop-16-9:before { - content: "\e800"; } - -.mdi-image-crop-din:before { - content: "\e801"; } - -.mdi-image-crop-free:before { - content: "\e802"; } - -.mdi-image-crop-landscape:before { - content: "\e803"; } - -.mdi-image-crop-original:before { - content: "\e804"; } - -.mdi-image-crop-portrait:before { - content: "\e805"; } - -.mdi-image-crop-square:before { - content: "\e806"; } - -.mdi-image-crop:before { - content: "\e807"; } - -.mdi-image-dehaze:before { - content: "\e808"; } - -.mdi-image-details:before { - content: "\e809"; } - -.mdi-image-edit:before { - content: "\e80a"; } - -.mdi-image-exposure-minus-1:before { - content: "\e80b"; } - -.mdi-image-exposure-minus-2:before { - content: "\e80c"; } - -.mdi-image-exposure-plus-1:before { - content: "\e80d"; } - -.mdi-image-exposure-plus-2:before { - content: "\e80e"; } - -.mdi-image-exposure-zero:before { - content: "\e80f"; } - -.mdi-image-exposure:before { - content: "\e810"; } - -.mdi-image-filter-1:before { - content: "\e811"; } - -.mdi-image-filter-2:before { - content: "\e812"; } - -.mdi-image-filter-3:before { - content: "\e813"; } - -.mdi-image-filter-4:before { - content: "\e814"; } - -.mdi-image-filter-5:before { - content: "\e815"; } - -.mdi-image-filter-6:before { - content: "\e816"; } - -.mdi-image-filter-7:before { - content: "\e817"; } - -.mdi-image-filter-8:before { - content: "\e818"; } - -.mdi-image-filter-9-plus:before { - content: "\e819"; } - -.mdi-image-filter-9:before { - content: "\e81a"; } - -.mdi-image-filter-b-and-w:before { - content: "\e81b"; } - -.mdi-image-filter-center-focus:before { - content: "\e81c"; } - -.mdi-image-filter-drama:before { - content: "\e81d"; } - -.mdi-image-filter-frames:before { - content: "\e81e"; } - -.mdi-image-filter-hdr:before { - content: "\e81f"; } - -.mdi-image-filter-none:before { - content: "\e820"; } - -.mdi-image-filter-tilt-shift:before { - content: "\e821"; } - -.mdi-image-filter-vintage:before { - content: "\e822"; } - -.mdi-image-filter:before { - content: "\e823"; } - -.mdi-image-flare:before { - content: "\e824"; } - -.mdi-image-flash-auto:before { - content: "\e825"; } - -.mdi-image-flash-off:before { - content: "\e826"; } - -.mdi-image-flash-on:before { - content: "\e827"; } - -.mdi-image-flip:before { - content: "\e828"; } - -.mdi-image-gradient:before { - content: "\e829"; } - -.mdi-image-grain:before { - content: "\e82a"; } - -.mdi-image-grid-off:before { - content: "\e82b"; } - -.mdi-image-grid-on:before { - content: "\e82c"; } - -.mdi-image-hdr-off:before { - content: "\e82d"; } - -.mdi-image-hdr-on:before { - content: "\e82e"; } - -.mdi-image-hdr-strong:before { - content: "\e82f"; } - -.mdi-image-hdr-weak:before { - content: "\e830"; } - -.mdi-image-healing:before { - content: "\e831"; } - -.mdi-image-image-aspect-ratio:before { - content: "\e832"; } - -.mdi-image-image:before { - content: "\e833"; } - -.mdi-image-iso:before { - content: "\e834"; } - -.mdi-image-landscape:before { - content: "\e835"; } - -.mdi-image-leak-add:before { - content: "\e836"; } - -.mdi-image-leak-remove:before { - content: "\e837"; } - -.mdi-image-lens:before { - content: "\e838"; } - -.mdi-image-looks-3:before { - content: "\e839"; } - -.mdi-image-looks-4:before { - content: "\e83a"; } - -.mdi-image-looks-5:before { - content: "\e83b"; } - -.mdi-image-looks-6:before { - content: "\e83c"; } - -.mdi-image-looks-one:before { - content: "\e83d"; } - -.mdi-image-looks-two:before { - content: "\e83e"; } - -.mdi-image-looks:before { - content: "\e83f"; } - -.mdi-image-loupe:before { - content: "\e840"; } - -.mdi-image-movie-creation:before { - content: "\e841"; } - -.mdi-image-nature-people:before { - content: "\e842"; } - -.mdi-image-nature:before { - content: "\e843"; } - -.mdi-image-navigate-before:before { - content: "\e844"; } - -.mdi-image-navigate-next:before { - content: "\e845"; } - -.mdi-image-palette:before { - content: "\e846"; } - -.mdi-image-panorama-fisheye:before { - content: "\e847"; } - -.mdi-image-panorama-horizontal:before { - content: "\e848"; } - -.mdi-image-panorama-vertical:before { - content: "\e849"; } - -.mdi-image-panorama-wide-angle:before { - content: "\e84a"; } - -.mdi-image-panorama:before { - content: "\e84b"; } - -.mdi-image-photo-album:before { - content: "\e84c"; } - -.mdi-image-photo-camera:before { - content: "\e84d"; } - -.mdi-image-photo-library:before { - content: "\e84e"; } - -.mdi-image-photo:before { - content: "\e84f"; } - -.mdi-image-portrait:before { - content: "\e850"; } - -.mdi-image-remove-red-eye:before { - content: "\e851"; } - -.mdi-image-rotate-left:before { - content: "\e852"; } - -.mdi-image-rotate-right:before { - content: "\e853"; } - -.mdi-image-slideshow:before { - content: "\e854"; } - -.mdi-image-straighten:before { - content: "\e855"; } - -.mdi-image-style:before { - content: "\e856"; } - -.mdi-image-switch-camera:before { - content: "\e857"; } - -.mdi-image-switch-video:before { - content: "\e858"; } - -.mdi-image-tag-faces:before { - content: "\e859"; } - -.mdi-image-texture:before { - content: "\e85a"; } - -.mdi-image-timelapse:before { - content: "\e85b"; } - -.mdi-image-timer-3:before { - content: "\e85c"; } - -.mdi-image-timer-10:before { - content: "\e85d"; } - -.mdi-image-timer-auto:before { - content: "\e85e"; } - -.mdi-image-timer-off:before { - content: "\e85f"; } - -.mdi-image-timer:before { - content: "\e860"; } - -.mdi-image-tonality:before { - content: "\e861"; } - -.mdi-image-transform:before { - content: "\e862"; } - -.mdi-image-tune:before { - content: "\e863"; } - -.mdi-image-wb-auto:before { - content: "\e864"; } - -.mdi-image-wb-cloudy:before { - content: "\e865"; } - -.mdi-image-wb-incandescent:before { - content: "\e866"; } - -.mdi-image-wb-irradescent:before { - content: "\e867"; } - -.mdi-image-wb-sunny:before { - content: "\e868"; } - -.mdi-maps-beenhere:before { - content: "\e869"; } - -.mdi-maps-directions-bike:before { - content: "\e86a"; } - -.mdi-maps-directions-bus:before { - content: "\e86b"; } - -.mdi-maps-directions-car:before { - content: "\e86c"; } - -.mdi-maps-directions-ferry:before { - content: "\e86d"; } - -.mdi-maps-directions-subway:before { - content: "\e86e"; } - -.mdi-maps-directions-train:before { - content: "\e86f"; } - -.mdi-maps-directions-transit:before { - content: "\e870"; } - -.mdi-maps-directions-walk:before { - content: "\e871"; } - -.mdi-maps-directions:before { - content: "\e872"; } - -.mdi-maps-flight:before { - content: "\e873"; } - -.mdi-maps-hotel:before { - content: "\e874"; } - -.mdi-maps-layers-clear:before { - content: "\e875"; } - -.mdi-maps-layers:before { - content: "\e876"; } - -.mdi-maps-local-airport:before { - content: "\e877"; } - -.mdi-maps-local-atm:before { - content: "\e878"; } - -.mdi-maps-local-attraction:before { - content: "\e879"; } - -.mdi-maps-local-bar:before { - content: "\e87a"; } - -.mdi-maps-local-cafe:before { - content: "\e87b"; } - -.mdi-maps-local-car-wash:before { - content: "\e87c"; } - -.mdi-maps-local-convenience-store:before { - content: "\e87d"; } - -.mdi-maps-local-drink:before { - content: "\e87e"; } - -.mdi-maps-local-florist:before { - content: "\e87f"; } - -.mdi-maps-local-gas-station:before { - content: "\e880"; } - -.mdi-maps-local-grocery-store:before { - content: "\e881"; } - -.mdi-maps-local-hospital:before { - content: "\e882"; } - -.mdi-maps-local-hotel:before { - content: "\e883"; } - -.mdi-maps-local-laundry-service:before { - content: "\e884"; } - -.mdi-maps-local-library:before { - content: "\e885"; } - -.mdi-maps-local-mall:before { - content: "\e886"; } - -.mdi-maps-local-movies:before { - content: "\e887"; } - -.mdi-maps-local-offer:before { - content: "\e888"; } - -.mdi-maps-local-parking:before { - content: "\e889"; } - -.mdi-maps-local-pharmacy:before { - content: "\e88a"; } - -.mdi-maps-local-phone:before { - content: "\e88b"; } - -.mdi-maps-local-pizza:before { - content: "\e88c"; } - -.mdi-maps-local-play:before { - content: "\e88d"; } - -.mdi-maps-local-post-office:before { - content: "\e88e"; } - -.mdi-maps-local-print-shop:before { - content: "\e88f"; } - -.mdi-maps-local-restaurant:before { - content: "\e890"; } - -.mdi-maps-local-see:before { - content: "\e891"; } - -.mdi-maps-local-shipping:before { - content: "\e892"; } - -.mdi-maps-local-taxi:before { - content: "\e893"; } - -.mdi-maps-location-history:before { - content: "\e894"; } - -.mdi-maps-map:before { - content: "\e895"; } - -.mdi-maps-my-location:before { - content: "\e896"; } - -.mdi-maps-navigation:before { - content: "\e897"; } - -.mdi-maps-pin-drop:before { - content: "\e898"; } - -.mdi-maps-place:before { - content: "\e899"; } - -.mdi-maps-rate-review:before { - content: "\e89a"; } - -.mdi-maps-restaurant-menu:before { - content: "\e89b"; } - -.mdi-maps-satellite:before { - content: "\e89c"; } - -.mdi-maps-store-mall-directory:before { - content: "\e89d"; } - -.mdi-maps-terrain:before { - content: "\e89e"; } - -.mdi-maps-traffic:before { - content: "\e89f"; } - -.mdi-navigation-apps:before { - content: "\e8a0"; } - -.mdi-navigation-arrow-back:before { - content: "\e8a1"; } - -.mdi-navigation-arrow-drop-down-circle:before { - content: "\e8a2"; } - -.mdi-navigation-arrow-drop-down:before { - content: "\e8a3"; } - -.mdi-navigation-arrow-drop-up:before { - content: "\e8a4"; } - -.mdi-navigation-arrow-forward:before { - content: "\e8a5"; } - -.mdi-navigation-cancel:before { - content: "\e8a6"; } - -.mdi-navigation-check:before { - content: "\e8a7"; } - -.mdi-navigation-chevron-left:before { - content: "\e8a8"; } - -.mdi-navigation-chevron-right:before { - content: "\e8a9"; } - -.mdi-navigation-close:before { - content: "\e8aa"; } - -.mdi-navigation-expand-less:before { - content: "\e8ab"; } - -.mdi-navigation-expand-more:before { - content: "\e8ac"; } - -.mdi-navigation-fullscreen-exit:before { - content: "\e8ad"; } - -.mdi-navigation-fullscreen:before { - content: "\e8ae"; } - -.mdi-navigation-menu:before { - content: "\e8af"; } - -.mdi-navigation-more-horiz:before { - content: "\e8b0"; } - -.mdi-navigation-more-vert:before { - content: "\e8b1"; } - -.mdi-navigation-refresh:before { - content: "\e8b2"; } - -.mdi-navigation-unfold-less:before { - content: "\e8b3"; } - -.mdi-navigation-unfold-more:before { - content: "\e8b4"; } - -.mdi-notification-adb:before { - content: "\e8b5"; } - -.mdi-notification-bluetooth-audio:before { - content: "\e8b6"; } - -.mdi-notification-disc-full:before { - content: "\e8b7"; } - -.mdi-notification-dnd-forwardslash:before { - content: "\e8b8"; } - -.mdi-notification-do-not-disturb:before { - content: "\e8b9"; } - -.mdi-notification-drive-eta:before { - content: "\e8ba"; } - -.mdi-notification-event-available:before { - content: "\e8bb"; } - -.mdi-notification-event-busy:before { - content: "\e8bc"; } - -.mdi-notification-event-note:before { - content: "\e8bd"; } - -.mdi-notification-folder-special:before { - content: "\e8be"; } - -.mdi-notification-mms:before { - content: "\e8bf"; } - -.mdi-notification-more:before { - content: "\e8c0"; } - -.mdi-notification-network-locked:before { - content: "\e8c1"; } - -.mdi-notification-phone-bluetooth-speaker:before { - content: "\e8c2"; } - -.mdi-notification-phone-forwarded:before { - content: "\e8c3"; } - -.mdi-notification-phone-in-talk:before { - content: "\e8c4"; } - -.mdi-notification-phone-locked:before { - content: "\e8c5"; } - -.mdi-notification-phone-missed:before { - content: "\e8c6"; } - -.mdi-notification-phone-paused:before { - content: "\e8c7"; } - -.mdi-notification-play-download:before { - content: "\e8c8"; } - -.mdi-notification-play-install:before { - content: "\e8c9"; } - -.mdi-notification-sd-card:before { - content: "\e8ca"; } - -.mdi-notification-sim-card-alert:before { - content: "\e8cb"; } - -.mdi-notification-sms-failed:before { - content: "\e8cc"; } - -.mdi-notification-sms:before { - content: "\e8cd"; } - -.mdi-notification-sync-disabled:before { - content: "\e8ce"; } - -.mdi-notification-sync-problem:before { - content: "\e8cf"; } - -.mdi-notification-sync:before { - content: "\e8d0"; } - -.mdi-notification-system-update:before { - content: "\e8d1"; } - -.mdi-notification-tap-and-play:before { - content: "\e8d2"; } - -.mdi-notification-time-to-leave:before { - content: "\e8d3"; } - -.mdi-notification-vibration:before { - content: "\e8d4"; } - -.mdi-notification-voice-chat:before { - content: "\e8d5"; } - -.mdi-notification-vpn-lock:before { - content: "\e8d6"; } - -.mdi-social-cake:before { - content: "\e8d7"; } - -.mdi-social-domain:before { - content: "\e8d8"; } - -.mdi-social-group-add:before { - content: "\e8d9"; } - -.mdi-social-group:before { - content: "\e8da"; } - -.mdi-social-location-city:before { - content: "\e8db"; } - -.mdi-social-mood:before { - content: "\e8dc"; } - -.mdi-social-notifications-none:before { - content: "\e8dd"; } - -.mdi-social-notifications-off:before { - content: "\e8de"; } - -.mdi-social-notifications-on:before { - content: "\e8df"; } - -.mdi-social-notifications-paused:before { - content: "\e8e0"; } - -.mdi-social-notifications:before { - content: "\e8e1"; } - -.mdi-social-pages:before { - content: "\e8e2"; } - -.mdi-social-party-mode:before { - content: "\e8e3"; } - -.mdi-social-people-outline:before { - content: "\e8e4"; } - -.mdi-social-people:before { - content: "\e8e5"; } - -.mdi-social-person-add:before { - content: "\e8e6"; } - -.mdi-social-person-outline:before { - content: "\e8e7"; } - -.mdi-social-person:before { - content: "\e8e8"; } - -.mdi-social-plus-one:before { - content: "\e8e9"; } - -.mdi-social-poll:before { - content: "\e8ea"; } - -.mdi-social-public:before { - content: "\e8eb"; } - -.mdi-social-school:before { - content: "\e8ec"; } - -.mdi-social-share:before { - content: "\e8ed"; } - -.mdi-social-whatshot:before { - content: "\e8ee"; } - -.mdi-toggle-check-box-outline-blank:before { - content: "\e8ef"; } - -.mdi-toggle-check-box:before { - content: "\e8f0"; } - -.mdi-toggle-radio-button-off:before { - content: "\e8f1"; } - -.mdi-toggle-radio-button-on:before { - content: "\e8f2"; } - -.mdi-toggle-star-half:before { - content: "\e8f3"; } - -.mdi-toggle-star-outline:before { - content: "\e8f4"; } - -.mdi-toggle-star:before { - content: "\e8f5"; } - -.container { - margin: 0 auto; - max-width: 1280px; - width: 90%; } - -@media only screen and (min-width : 601px) { - .container { - width: 85%; } } - -@media only screen and (min-width : 993px) { - .container { - width: 70%; } } - -.container .row { - margin-left: -0.75rem; - margin-right: -0.75rem; } - -.section { - padding-top: 1rem; - padding-bottom: 1rem; } - .section.no-pad { - padding: 0; } - .section.no-pad-bot { - padding-bottom: 0; } - .section.no-pad-top { - padding-top: 0; } - -.row { - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; } - .row:after { - content: ""; - display: table; - clear: both; } - .row .col { - float: left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 0.75rem; } - .row .col.s1 { - width: 8.33333%; - margin-left: 0; } - .row .col.s2 { - width: 16.66667%; - margin-left: 0; } - .row .col.s3 { - width: 25%; - margin-left: 0; } - .row .col.s4 { - width: 33.33333%; - margin-left: 0; } - .row .col.s5 { - width: 41.66667%; - margin-left: 0; } - .row .col.s6 { - width: 50%; - margin-left: 0; } - .row .col.s7 { - width: 58.33333%; - margin-left: 0; } - .row .col.s8 { - width: 66.66667%; - margin-left: 0; } - .row .col.s9 { - width: 75%; - margin-left: 0; } - .row .col.s10 { - width: 83.33333%; - margin-left: 0; } - .row .col.s11 { - width: 91.66667%; - margin-left: 0; } - .row .col.s12 { - width: 100%; - margin-left: 0; } - .row .col.offset-s1 { - margin-left: 8.33333%; } - .row .col.offset-s2 { - margin-left: 16.66667%; } - .row .col.offset-s3 { - margin-left: 25%; } - .row .col.offset-s4 { - margin-left: 33.33333%; } - .row .col.offset-s5 { - margin-left: 41.66667%; } - .row .col.offset-s6 { - margin-left: 50%; } - .row .col.offset-s7 { - margin-left: 58.33333%; } - .row .col.offset-s8 { - margin-left: 66.66667%; } - .row .col.offset-s9 { - margin-left: 75%; } - .row .col.offset-s10 { - margin-left: 83.33333%; } - .row .col.offset-s11 { - margin-left: 91.66667%; } - .row .col.offset-s12 { - margin-left: 100%; } - @media only screen and (min-width : 601px) { - .row .col.m1 { - width: 8.33333%; - margin-left: 0; } - .row .col.m2 { - width: 16.66667%; - margin-left: 0; } - .row .col.m3 { - width: 25%; - margin-left: 0; } - .row .col.m4 { - width: 33.33333%; - margin-left: 0; } - .row .col.m5 { - width: 41.66667%; - margin-left: 0; } - .row .col.m6 { - width: 50%; - margin-left: 0; } - .row .col.m7 { - width: 58.33333%; - margin-left: 0; } - .row .col.m8 { - width: 66.66667%; - margin-left: 0; } - .row .col.m9 { - width: 75%; - margin-left: 0; } - .row .col.m10 { - width: 83.33333%; - margin-left: 0; } - .row .col.m11 { - width: 91.66667%; - margin-left: 0; } - .row .col.m12 { - width: 100%; - margin-left: 0; } - .row .col.offset-m1 { - margin-left: 8.33333%; } - .row .col.offset-m2 { - margin-left: 16.66667%; } - .row .col.offset-m3 { - margin-left: 25%; } - .row .col.offset-m4 { - margin-left: 33.33333%; } - .row .col.offset-m5 { - margin-left: 41.66667%; } - .row .col.offset-m6 { - margin-left: 50%; } - .row .col.offset-m7 { - margin-left: 58.33333%; } - .row .col.offset-m8 { - margin-left: 66.66667%; } - .row .col.offset-m9 { - margin-left: 75%; } - .row .col.offset-m10 { - margin-left: 83.33333%; } - .row .col.offset-m11 { - margin-left: 91.66667%; } - .row .col.offset-m12 { - margin-left: 100%; } } - @media only screen and (min-width : 993px) { - .row .col.l1 { - width: 8.33333%; - margin-left: 0; } - .row .col.l2 { - width: 16.66667%; - margin-left: 0; } - .row .col.l3 { - width: 25%; - margin-left: 0; } - .row .col.l4 { - width: 33.33333%; - margin-left: 0; } - .row .col.l5 { - width: 41.66667%; - margin-left: 0; } - .row .col.l6 { - width: 50%; - margin-left: 0; } - .row .col.l7 { - width: 58.33333%; - margin-left: 0; } - .row .col.l8 { - width: 66.66667%; - margin-left: 0; } - .row .col.l9 { - width: 75%; - margin-left: 0; } - .row .col.l10 { - width: 83.33333%; - margin-left: 0; } - .row .col.l11 { - width: 91.66667%; - margin-left: 0; } - .row .col.l12 { - width: 100%; - margin-left: 0; } - .row .col.offset-l1 { - margin-left: 8.33333%; } - .row .col.offset-l2 { - margin-left: 16.66667%; } - .row .col.offset-l3 { - margin-left: 25%; } - .row .col.offset-l4 { - margin-left: 33.33333%; } - .row .col.offset-l5 { - margin-left: 41.66667%; } - .row .col.offset-l6 { - margin-left: 50%; } - .row .col.offset-l7 { - margin-left: 58.33333%; } - .row .col.offset-l8 { - margin-left: 66.66667%; } - .row .col.offset-l9 { - margin-left: 75%; } - .row .col.offset-l10 { - margin-left: 83.33333%; } - .row .col.offset-l11 { - margin-left: 91.66667%; } - .row .col.offset-l12 { - margin-left: 100%; } } - -nav { - color: #fff; - background-color: #ee6e73; - width: 100%; - height: 56px; - line-height: 56px; } - nav a { - color: #fff; } - nav .nav-wrapper { - position: relative; - height: 100%; } - nav .nav-wrapper i { - display: block; - font-size: 2rem; } - @media only screen and (min-width : 993px) { - nav a.button-collapse { - display: none; } } - nav .button-collapse { - float: left; - position: relative; - z-index: 1; - height: 56px; } - nav .button-collapse i { - font-size: 2.7rem; - height: 56px; - line-height: 56px; } - nav .brand-logo { - position: absolute; - color: #fff; - display: inline-block; - font-size: 2.1rem; - padding: 0; - white-space: nowrap; } - nav .brand-logo.center { - left: 50%; - -webkit-transform: translateX(-50%); - -moz-transform: translateX(-50%); - -ms-transform: translateX(-50%); - -o-transform: translateX(-50%); - transform: translateX(-50%); } - @media only screen and (max-width : 992px) { - nav .brand-logo { - left: 50%; - -webkit-transform: translateX(-50%); - -moz-transform: translateX(-50%); - -ms-transform: translateX(-50%); - -o-transform: translateX(-50%); - transform: translateX(-50%); } - nav .brand-logo.left, nav .brand-logo.right { - padding: 0; - -webkit-transform: none; - -moz-transform: none; - -ms-transform: none; - -o-transform: none; - transform: none; } - nav .brand-logo.left { - left: 0.5rem; } - nav .brand-logo.right { - right: 0.5rem; - left: auto; } } - nav .brand-logo.right { - right: 0.5rem; - padding: 0; } - nav ul { - margin: 0; } - nav ul li { - -webkit-transition: background-color .3s; - -moz-transition: background-color .3s; - -o-transition: background-color .3s; - -ms-transition: background-color .3s; - transition: background-color .3s; - float: left; - padding: 0; } - nav ul li:hover, nav ul li.active { - background-color: rgba(0, 0, 0, 0.1); } - nav ul a { - font-size: 1rem; - color: #fff; - display: block; - padding: 0 15px; } - nav ul.left { - float: left; } - nav .input-field { - margin: 0; } - nav .input-field input { - height: 100%; - font-size: 1.2rem; - border: none; - padding-left: 2rem; } - nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid { - border: none; - box-shadow: none; } - nav .input-field label { - top: 0; - left: 0; } - nav .input-field label i { - color: rgba(255, 255, 255, 0.7); - -webkit-transition: color .3s; - -moz-transition: color .3s; - -o-transition: color .3s; - -ms-transition: color .3s; - transition: color .3s; } - nav .input-field label.active i { - color: #fff; } - nav .input-field label.active { - -webkit-transform: translateY(0); - -moz-transform: translateY(0); - -ms-transform: translateY(0); - -o-transform: translateY(0); - transform: translateY(0); } - -.navbar-fixed { - position: relative; - height: 56px; - z-index: 998; } - .navbar-fixed nav { - position: fixed; } - -@media only screen and (min-width : 601px) { - nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i { - height: 64px; - line-height: 64px; } - .navbar-fixed { - height: 64px; } } - -@font-face { - font-family: "Roboto"; - src: local(Roboto Thin), url("../font/roboto/Roboto-Thin.woff2") format("woff2"), url("../font/roboto/Roboto-Thin.woff") format("woff"), url("../font/roboto/Roboto-Thin.ttf") format("truetype"); - font-weight: 200; } - -@font-face { - font-family: "Roboto"; - src: local(Roboto Light), url("../font/roboto/Roboto-Light.woff2") format("woff2"), url("../font/roboto/Roboto-Light.woff") format("woff"), url("../font/roboto/Roboto-Light.ttf") format("truetype"); - font-weight: 300; } - -@font-face { - font-family: "Roboto"; - src: local(Roboto Regular), url("../font/roboto/Roboto-Regular.woff2") format("woff2"), url("../font/roboto/Roboto-Regular.woff") format("woff"), url("../font/roboto/Roboto-Regular.ttf") format("truetype"); - font-weight: 400; } - -@font-face { - font-family: "Roboto"; - src: url("../font/roboto/Roboto-Medium.woff2") format("woff2"), url("../font/roboto/Roboto-Medium.woff") format("woff"), url("../font/roboto/Roboto-Medium.ttf") format("truetype"); - font-weight: 500; } - -@font-face { - font-family: "Roboto"; - src: url("../font/roboto/Roboto-Bold.woff2") format("woff2"), url("../font/roboto/Roboto-Bold.woff") format("woff"), url("../font/roboto/Roboto-Bold.ttf") format("truetype"); - font-weight: 700; } - -a { - text-decoration: none; } - -html { - line-height: 1.5; - font-family: "Roboto", sans-serif; - font-weight: normal; - color: rgba(0, 0, 0, 0.87); } - @media only screen and (min-width: 0) { - html { - font-size: 14px; } } - @media only screen and (min-width: 992px) { - html { - font-size: 14.5px; } } - @media only screen and (min-width: 1200px) { - html { - font-size: 15px; } } - -h1, h2, h3, h4, h5, h6 { - font-weight: 400; - line-height: 1.1; } - -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - font-weight: inherit; } - -h1 { - font-size: 4.2rem; - line-height: 110%; - margin: 2.1rem 0 1.68rem 0; } - -h2 { - font-size: 3.56rem; - line-height: 110%; - margin: 1.78rem 0 1.424rem 0; } - -h3 { - font-size: 2.92rem; - line-height: 110%; - margin: 1.46rem 0 1.168rem 0; } - -h4 { - font-size: 2.28rem; - line-height: 110%; - margin: 1.14rem 0 0.912rem 0; } - -h5 { - font-size: 1.64rem; - line-height: 110%; - margin: 0.82rem 0 0.656rem 0; } - -h6 { - font-size: 1rem; - line-height: 110%; - margin: 0.5rem 0 0.4rem 0; } - -em { - font-style: italic; } - -strong { - font-weight: 500; } - -small { - font-size: 75%; } - -.light, footer.page-footer .footer-copyright { - font-weight: 300; } - -.thin { - font-weight: 200; } - -.flow-text { - font-weight: 300; } - @media only screen and (min-width: 360px) { - .flow-text { - font-size: 1.2rem; } } - @media only screen and (min-width: 390px) { - .flow-text { - font-size: 1.224rem; } } - @media only screen and (min-width: 420px) { - .flow-text { - font-size: 1.248rem; } } - @media only screen and (min-width: 450px) { - .flow-text { - font-size: 1.272rem; } } - @media only screen and (min-width: 480px) { - .flow-text { - font-size: 1.296rem; } } - @media only screen and (min-width: 510px) { - .flow-text { - font-size: 1.32rem; } } - @media only screen and (min-width: 540px) { - .flow-text { - font-size: 1.344rem; } } - @media only screen and (min-width: 570px) { - .flow-text { - font-size: 1.368rem; } } - @media only screen and (min-width: 600px) { - .flow-text { - font-size: 1.392rem; } } - @media only screen and (min-width: 630px) { - .flow-text { - font-size: 1.416rem; } } - @media only screen and (min-width: 660px) { - .flow-text { - font-size: 1.44rem; } } - @media only screen and (min-width: 690px) { - .flow-text { - font-size: 1.464rem; } } - @media only screen and (min-width: 720px) { - .flow-text { - font-size: 1.488rem; } } - @media only screen and (min-width: 750px) { - .flow-text { - font-size: 1.512rem; } } - @media only screen and (min-width: 780px) { - .flow-text { - font-size: 1.536rem; } } - @media only screen and (min-width: 810px) { - .flow-text { - font-size: 1.56rem; } } - @media only screen and (min-width: 840px) { - .flow-text { - font-size: 1.584rem; } } - @media only screen and (min-width: 870px) { - .flow-text { - font-size: 1.608rem; } } - @media only screen and (min-width: 900px) { - .flow-text { - font-size: 1.632rem; } } - @media only screen and (min-width: 930px) { - .flow-text { - font-size: 1.656rem; } } - @media only screen and (min-width: 960px) { - .flow-text { - font-size: 1.68rem; } } - @media only screen and (max-width: 360px) { - .flow-text { - font-size: 1.2rem; } } - -.card-panel { - transition: box-shadow .25s; - padding: 20px; - margin: 0.5rem 0 1rem 0; - border-radius: 2px; - background-color: #fff; } - -.card { - position: relative; - overflow: hidden; - margin: 0.5rem 0 1rem 0; - background-color: #fff; - transition: box-shadow .25s; - border-radius: 2px; } - .card .card-title { - color: #fff; - font-size: 24px; - font-weight: 300; } - .card .card-title.activator { - cursor: pointer; } - .card.small, .card.medium, .card.large { - position: relative; } - .card.small .card-image, .card.medium .card-image, .card.large .card-image { - overflow: hidden; } - .card.small .card-content, .card.medium .card-content, .card.large .card-content { - overflow: hidden; } - .card.small .card-action, .card.medium .card-action, .card.large .card-action { - position: absolute; - bottom: 0; - left: 0; - right: 0; } - .card.small { - height: 300px; } - .card.small .card-image { - height: 150px; } - .card.small .card-content { - height: 150px; } - .card.medium { - height: 400px; } - .card.medium .card-image { - height: 250px; } - .card.medium .card-content { - height: 150px; } - .card.large { - height: 500px; } - .card.large .card-image { - height: 330px; } - .card.large .card-content { - height: 170px; } - .card .card-image { - position: relative; } - .card .card-image img { - display: block; - border-radius: 2px 2px 0 0; - position: relative; - left: 0; - right: 0; - top: 0; - bottom: 0; - width: 100%; } - .card .card-image .card-title { - position: absolute; - bottom: 0; - left: 0; - padding: 20px; } - .card .card-content { - padding: 20px; - border-radius: 0 0 2px 2px; } - .card .card-content p { - margin: 0; - color: inherit; } - .card .card-content .card-title { - line-height: 48px; } - .card .card-action { - border-top: 1px solid rgba(160, 160, 160, 0.2); - padding: 20px; } - .card .card-action a { - color: #ffab40; - margin-right: 20px; - -webkit-transition: color .3s ease; - -moz-transition: color .3s ease; - -o-transition: color .3s ease; - -ms-transition: color .3s ease; - transition: color .3s ease; - text-transform: uppercase; } - .card .card-action a:hover { - color: #ffd8a6; } - .card .card-reveal { - padding: 20px; - position: absolute; - background-color: #fff; - width: 100%; - overflow-y: auto; - top: 100%; - height: 100%; - z-index: 1; - display: none; } - .card .card-reveal .card-title { - cursor: pointer; - display: block; } - -#toast-container { - display: block; - position: fixed; - z-index: 10000; } - @media only screen and (max-width : 600px) { - #toast-container { - min-width: 100%; - bottom: 0%; } } - @media only screen and (min-width : 601px) and (max-width : 992px) { - #toast-container { - min-width: 30%; - left: 5%; - bottom: 7%; } } - @media only screen and (min-width : 993px) { - #toast-container { - min-width: 8%; - top: 10%; - right: 7%; } } - -.toast { - border-radius: 2px; - top: 0; - width: auto; - clear: both; - margin-top: 10px; - position: relative; - max-width: 100%; - height: 48px; - line-height: 48px; - background-color: #323232; - padding: 0 25px; - font-size: 1.1rem; - font-weight: 300; - color: #fff; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-align: center; - -ms-flex-align: center; - -webkit-align-items: center; - align-items: center; - -webkit-justify-content: space-between; - justify-content: space-between; } - .toast .btn, .toast .btn-large, .toast .btn-flat { - margin: 0; - margin-left: 3rem; } - .toast.rounded { - border-radius: 24px; } - @media only screen and (max-width : 600px) { - .toast { - width: 100%; - border-radius: 0; } } - @media only screen and (min-width : 601px) and (max-width : 992px) { - .toast { - float: left; } } - @media only screen and (min-width : 993px) { - .toast { - float: right; } } - -.tabs { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - position: relative; - height: 48px; - background-color: #fff; - margin: 0 auto; - width: 100%; - white-space: nowrap; } - .tabs .tab { - -webkit-box-flex: 1; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - display: block; - float: left; - text-align: center; - line-height: 48px; - height: 48px; - padding: 0 20px; - margin: 0; - text-transform: uppercase; - letter-spacing: .8px; - width: 15%; } - .tabs .tab a { - color: #ee6e73; - display: block; - width: 100%; - height: 100%; - -webkit-transition: color .28s ease; - -moz-transition: color .28s ease; - -o-transition: color .28s ease; - -ms-transition: color .28s ease; - transition: color .28s ease; } - .tabs .tab a:hover { - color: #f9c9cb; } - .tabs .tab.disabled a { - color: #f9c9cb; - cursor: default; } - .tabs .indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: #f6b2b5; - will-change: left, right; } - -.tabs .tab { - padding: 0; } - -.material-tooltip { - padding: 10px 8px; - font-size: 1rem; - z-index: 2000; - background-color: transparent; - border-radius: 2px; - color: #fff; - min-height: 36px; - line-height: 1rem; - opacity: 0; - display: none; - position: absolute; - text-align: center; - overflow: hidden; - left: 0; - top: 0; - will-change: top, left; } - -.backdrop { - position: absolute; - opacity: 0; - display: none; - height: 7px; - width: 14px; - border-radius: 0 0 14px 14px; - background-color: #323232; - z-index: -1; - -webkit-transform-origin: 50% 10%; - -moz-transform-origin: 50% 10%; - -ms-transform-origin: 50% 10%; - -o-transform-origin: 50% 10%; - transform-origin: 50% 10%; - will-change: transform, opacity; } - -.btn, .btn-large, .btn-flat { - border: none; - border-radius: 2px; - display: inline-block; - height: 36px; - line-height: 36px; - outline: 0; - padding: 0 2rem; - text-transform: uppercase; - vertical-align: middle; - -webkit-tap-highlight-color: transparent; } - -.btn.disabled, .disabled.btn-large, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-large:disabled, .btn-floating:disabled { - background-color: #DFDFDF !important; - box-shadow: none; - color: #9F9F9F !important; - cursor: default; } - .btn.disabled *, .disabled.btn-large *, .btn-floating.disabled *, .btn-large.disabled *, .btn:disabled *, .btn-large:disabled *, .btn-large:disabled *, .btn-floating:disabled * { - pointer-events: none; } - .btn.disabled:hover, .disabled.btn-large:hover, .btn-floating.disabled:hover, .btn-large.disabled:hover, .btn:disabled:hover, .btn-large:disabled:hover, .btn-large:disabled:hover, .btn-floating:disabled:hover { - background-color: #DFDFDF; - color: #9F9F9F; } - -.btn i, .btn-large i, .btn-floating i, .btn-large i, .btn-flat i { - font-size: 1.3rem; - line-height: inherit; } - -.btn, .btn-large { - text-decoration: none; - color: #fff; - background-color: #26a69a; - text-align: center; - letter-spacing: .5px; - -webkit-transition: .2s ease-out; - -moz-transition: .2s ease-out; - -o-transition: .2s ease-out; - -ms-transition: .2s ease-out; - transition: .2s ease-out; - cursor: pointer; } - .btn:hover, .btn-large:hover { - background-color: #2bbbad; } - -.btn-floating { - display: inline-block; - color: #fff; - position: relative; - overflow: hidden; - z-index: 1; - width: 37px; - height: 37px; - line-height: 37px; - padding: 0; - background-color: #26a69a; - border-radius: 50%; - transition: .3s; - cursor: pointer; - vertical-align: middle; } - .btn-floating i { - width: inherit; - display: inline-block; - text-align: center; - color: #fff; - font-size: 1.6rem; - line-height: 37px; } - .btn-floating:before { - border-radius: 0; } - .btn-floating.btn-large { - width: 55.5px; - height: 55.5px; } - .btn-floating.btn-large i { - line-height: 55.5px; } - -button.btn-floating { - border: none; } - -.fixed-action-btn { - position: fixed; - right: 23px; - bottom: 23px; - padding-top: 15px; - margin-bottom: 0; - z-index: 998; } - .fixed-action-btn ul { - left: 0; - right: 0; - text-align: center; - position: absolute; - bottom: 64px; - margin: 0; } - .fixed-action-btn ul li { - margin-bottom: 15px; } - .fixed-action-btn ul a.btn-floating { - opacity: 0; } - -.btn-flat { - box-shadow: none; - background-color: transparent; - color: #343434; - cursor: pointer; } - .btn-flat.disabled { - color: #b3b3b3; - cursor: default; } - -.btn-large { - height: 54px; - line-height: 56px; } - .btn-large i { - font-size: 1.6rem; } - -.btn-block { - display: block; } - -.dropdown-content { - background-color: #fff; - margin: 0; - display: none; - min-width: 100px; - max-height: 650px; - overflow-y: auto; - opacity: 0; - position: absolute; - z-index: 999; - will-change: width, height; } - .dropdown-content li { - clear: both; - color: rgba(0, 0, 0, 0.87); - cursor: pointer; - line-height: 1.5rem; - width: 100%; - text-align: left; - text-transform: none; } - .dropdown-content li:hover, .dropdown-content li.active { - background-color: #eee; } - .dropdown-content li > a, .dropdown-content li > span { - font-size: 1.2rem; - color: #26a69a; - display: block; - padding: 1rem 1rem; } - .dropdown-content li > a > i { - height: inherit; - line-height: inherit; } - -/*! - * Waves v0.6.0 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE - */ -.waves-effect { - position: relative; - cursor: pointer; - display: inline-block; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: transparent; - vertical-align: middle; - z-index: 1; - will-change: opacity, transform; - -webkit-transition: all .3s ease-out; - -moz-transition: all .3s ease-out; - -o-transition: all .3s ease-out; - -ms-transition: all .3s ease-out; - transition: all .3s ease-out; } - .waves-effect .waves-ripple { - position: absolute; - border-radius: 50%; - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - opacity: 0; - background: rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.7s ease-out; - -moz-transition: all 0.7s ease-out; - -o-transition: all 0.7s ease-out; - -ms-transition: all 0.7s ease-out; - transition: all 0.7s ease-out; - -webkit-transition-property: -webkit-transform, opacity; - -moz-transition-property: -moz-transform, opacity; - -o-transition-property: -o-transform, opacity; - transition-property: transform, opacity; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - pointer-events: none; } - .waves-effect.waves-light .waves-ripple { - background-color: rgba(255, 255, 255, 0.45); } - .waves-effect.waves-red .waves-ripple { - background-color: rgba(244, 67, 54, 0.7); } - .waves-effect.waves-yellow .waves-ripple { - background-color: rgba(255, 235, 59, 0.7); } - .waves-effect.waves-orange .waves-ripple { - background-color: rgba(255, 152, 0, 0.7); } - .waves-effect.waves-purple .waves-ripple { - background-color: rgba(156, 39, 176, 0.7); } - .waves-effect.waves-green .waves-ripple { - background-color: rgba(76, 175, 80, 0.7); } - .waves-effect.waves-teal .waves-ripple { - background-color: rgba(0, 150, 136, 0.7); } - -.waves-notransition { - -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; - -ms-transition: none !important; - transition: none !important; } - -.waves-circle { - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); - -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); } - -.waves-input-wrapper { - border-radius: 0.2em; - vertical-align: bottom; } - .waves-input-wrapper .waves-button-input { - position: relative; - top: 0; - left: 0; - z-index: 1; } - -.waves-circle { - text-align: center; - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - border-radius: 50%; - -webkit-mask-image: none; } - -.waves-block { - display: block; } - -/* Firefox Bug: link not triggered */ -a.waves-effect .waves-ripple { - z-index: -1; } - -.modal { - display: none; - position: fixed; - left: 0; - right: 0; - background-color: #fafafa; - padding: 0; - max-height: 70%; - width: 55%; - margin: auto; - overflow-y: auto; - border-radius: 2px; - will-change: top, opacity; } - @media only screen and (max-width : 992px) { - .modal { - width: 80%; } } - .modal h1, .modal h2, .modal h3, .modal h4 { - margin-top: 0; } - .modal .modal-content { - padding: 24px; } - .modal .modal-close { - cursor: pointer; } - .modal .modal-footer { - border-radius: 0 0 2px 2px; - background-color: #fafafa; - padding: 4px 6px; - height: 56px; - width: 100%; } - .modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat { - float: right; - margin: 6px 0; } - -.lean-overlay { - position: fixed; - z-index: 999; - top: -100px; - left: 0; - bottom: 0; - right: 0; - height: 125%; - width: 100%; - background: #000; - display: none; - will-change: opacity; } - -.modal.modal-fixed-footer { - padding: 0; - height: 70%; } - .modal.modal-fixed-footer .modal-content { - position: absolute; - height: calc(100% - 56px); - max-height: 100%; - width: 100%; - overflow-y: auto; } - .modal.modal-fixed-footer .modal-footer { - border-top: 1px solid rgba(0, 0, 0, 0.1); - position: absolute; - bottom: 0; } - -.modal.bottom-sheet { - top: auto; - bottom: -100%; - margin: 0; - width: 100%; - max-height: 45%; - border-radius: 0; - will-change: bottom, opacity; } - -.collapsible { - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; - border-left: 1px solid #ddd; - margin: 0.5rem 0 1rem 0; } - -.collapsible-header { - display: block; - cursor: pointer; - min-height: 3rem; - line-height: 3rem; - padding: 0 1rem; - background-color: #fff; - border-bottom: 1px solid #ddd; } - .collapsible-header i { - width: 2rem; - font-size: 1.6rem; - line-height: 3rem; - display: block; - float: left; - text-align: center; - margin-right: 1rem; } - -.collapsible-body { - display: none; - border-bottom: 1px solid #ddd; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .collapsible-body p { - margin: 0; - padding: 2rem; } - -.side-nav .collapsible { - border: none; - box-shadow: none; } - .side-nav .collapsible li { - padding: 0; } -.side-nav .collapsible-header { - background-color: transparent; - border: none; - line-height: inherit; - height: inherit; - margin: 0 1rem; } - .side-nav .collapsible-header i { - line-height: inherit; } -.side-nav .collapsible-body { - border: 0; - background-color: #fff; } - .side-nav .collapsible-body li a { - margin: 0 1rem 0 2rem; } - -.collapsible.popout { - border: none; - box-shadow: none; } - .collapsible.popout > li { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); - margin: 0 24px; - transition: margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94); } - .collapsible.popout > li.active { - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); - margin: 16px 0; } - -.chip { - display: inline-block; - height: 32px; - font-size: 13px; - font-weight: 500; - color: rgba(0, 0, 0, 0.6); - line-height: 32px; - padding: 0 12px; - border-radius: 16px; - background-color: #E4E4E4; } - .chip img { - float: left; - margin: 0 8px 0 -12px; - height: 32px; - width: 32px; - border-radius: 50%; } - .chip i.material-icons { - cursor: pointer; - float: right; - font-size: 16px; - line-height: 32px; - padding-left: 8px; } - -.materialboxed { - display: block; - cursor: zoom-in; - position: relative; - -webkit-transition: opacity .4s; - -moz-transition: opacity .4s; - -o-transition: opacity .4s; - -ms-transition: opacity .4s; - transition: opacity .4s; } - .materialboxed:hover { - will-change: left, top, width, height; } - .materialboxed:hover:not(.active) { - opacity: .8; } - -.materialboxed.active { - cursor: zoom-out; } - -#materialbox-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #292929; - z-index: 999; - will-change: opacity; } - -.materialbox-caption { - position: fixed; - display: none; - color: #fff; - line-height: 50px; - bottom: 0; - width: 100%; - text-align: center; - padding: 0% 15%; - height: 50px; - z-index: 1000; - -webkit-font-smoothing: antialiased; } - -/* Remove Focus Boxes */ -select:focus { - outline: 1px solid #c9f3ef; } - -button:focus { - outline: none; - background-color: #2ab7a9; } - -label { - font-size: 0.8rem; - color: #9e9e9e; } - -/*************************** - Text Inputs + Textarea -****************************/ -::-webkit-input-placeholder { - color: #d1d1d1; } - -:-moz-placeholder { - /* Firefox 18- */ - color: #d1d1d1; } - -::-moz-placeholder { - /* Firefox 19+ */ - color: #d1d1d1; } - -:-ms-input-placeholder { - color: #d1d1d1; } - -input[type=text], input[type=password], input[type=email], input[type=url], input[type=time], input[type=date], input[type=datetime-local], input[type=tel], input[type=number], input[type=search], textarea.materialize-textarea { - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - border-radius: 0; - outline: none; - height: 3rem; - width: 100%; - font-size: 1rem; - margin: 0 0 15px 0; - padding: 0; - box-shadow: none; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - transition: all .3s; } - input[type=text]:disabled, input[type=text][readonly="readonly"], input[type=password]:disabled, input[type=password][readonly="readonly"], input[type=email]:disabled, input[type=email][readonly="readonly"], input[type=url]:disabled, input[type=url][readonly="readonly"], input[type=time]:disabled, input[type=time][readonly="readonly"], input[type=date]:disabled, input[type=date][readonly="readonly"], input[type=datetime-local]:disabled, input[type=datetime-local][readonly="readonly"], input[type=tel]:disabled, input[type=tel][readonly="readonly"], input[type=number]:disabled, input[type=number][readonly="readonly"], input[type=search]:disabled, input[type=search][readonly="readonly"], textarea.materialize-textarea:disabled, textarea.materialize-textarea[readonly="readonly"] { - color: rgba(0, 0, 0, 0.26); - border-bottom: 1px dotted rgba(0, 0, 0, 0.26); } - input[type=text]:disabled + label, input[type=text][readonly="readonly"] + label, input[type=password]:disabled + label, input[type=password][readonly="readonly"] + label, input[type=email]:disabled + label, input[type=email][readonly="readonly"] + label, input[type=url]:disabled + label, input[type=url][readonly="readonly"] + label, input[type=time]:disabled + label, input[type=time][readonly="readonly"] + label, input[type=date]:disabled + label, input[type=date][readonly="readonly"] + label, input[type=datetime-local]:disabled + label, input[type=datetime-local][readonly="readonly"] + label, input[type=tel]:disabled + label, input[type=tel][readonly="readonly"] + label, input[type=number]:disabled + label, input[type=number][readonly="readonly"] + label, input[type=search]:disabled + label, input[type=search][readonly="readonly"] + label, textarea.materialize-textarea:disabled + label, textarea.materialize-textarea[readonly="readonly"] + label { - color: rgba(0, 0, 0, 0.26); } - input[type=text]:focus:not([readonly]), input[type=password]:focus:not([readonly]), input[type=email]:focus:not([readonly]), input[type=url]:focus:not([readonly]), input[type=time]:focus:not([readonly]), input[type=date]:focus:not([readonly]), input[type=datetime-local]:focus:not([readonly]), input[type=tel]:focus:not([readonly]), input[type=number]:focus:not([readonly]), input[type=search]:focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { - border-bottom: 1px solid #26a69a; - box-shadow: 0 1px 0 0 #26a69a; } - input[type=text]:focus:not([readonly]) + label, input[type=password]:focus:not([readonly]) + label, input[type=email]:focus:not([readonly]) + label, input[type=url]:focus:not([readonly]) + label, input[type=time]:focus:not([readonly]) + label, input[type=date]:focus:not([readonly]) + label, input[type=datetime-local]:focus:not([readonly]) + label, input[type=tel]:focus:not([readonly]) + label, input[type=number]:focus:not([readonly]) + label, input[type=search]:focus:not([readonly]) + label, textarea.materialize-textarea:focus:not([readonly]) + label { - color: #26a69a; } - input[type=text].valid, input[type=text]:focus.valid, input[type=password].valid, input[type=password]:focus.valid, input[type=email].valid, input[type=email]:focus.valid, input[type=url].valid, input[type=url]:focus.valid, input[type=time].valid, input[type=time]:focus.valid, input[type=date].valid, input[type=date]:focus.valid, input[type=datetime-local].valid, input[type=datetime-local]:focus.valid, input[type=tel].valid, input[type=tel]:focus.valid, input[type=number].valid, input[type=number]:focus.valid, input[type=search].valid, input[type=search]:focus.valid, textarea.materialize-textarea.valid, textarea.materialize-textarea:focus.valid { - border-bottom: 1px solid #4CAF50; - box-shadow: 0 1px 0 0 #4CAF50; } - input[type=text].valid + label:after, input[type=text]:focus.valid + label:after, input[type=password].valid + label:after, input[type=password]:focus.valid + label:after, input[type=email].valid + label:after, input[type=email]:focus.valid + label:after, input[type=url].valid + label:after, input[type=url]:focus.valid + label:after, input[type=time].valid + label:after, input[type=time]:focus.valid + label:after, input[type=date].valid + label:after, input[type=date]:focus.valid + label:after, input[type=datetime-local].valid + label:after, input[type=datetime-local]:focus.valid + label:after, input[type=tel].valid + label:after, input[type=tel]:focus.valid + label:after, input[type=number].valid + label:after, input[type=number]:focus.valid + label:after, input[type=search].valid + label:after, input[type=search]:focus.valid + label:after, textarea.materialize-textarea.valid + label:after, textarea.materialize-textarea:focus.valid + label:after { - content: attr(data-success); - color: #4CAF50; - opacity: 1; } - input[type=text].invalid, input[type=text]:focus.invalid, input[type=password].invalid, input[type=password]:focus.invalid, input[type=email].invalid, input[type=email]:focus.invalid, input[type=url].invalid, input[type=url]:focus.invalid, input[type=time].invalid, input[type=time]:focus.invalid, input[type=date].invalid, input[type=date]:focus.invalid, input[type=datetime-local].invalid, input[type=datetime-local]:focus.invalid, input[type=tel].invalid, input[type=tel]:focus.invalid, input[type=number].invalid, input[type=number]:focus.invalid, input[type=search].invalid, input[type=search]:focus.invalid, textarea.materialize-textarea.invalid, textarea.materialize-textarea:focus.invalid { - border-bottom: 1px solid #F44336; - box-shadow: 0 1px 0 0 #F44336; } - input[type=text].invalid + label:after, input[type=text]:focus.invalid + label:after, input[type=password].invalid + label:after, input[type=password]:focus.invalid + label:after, input[type=email].invalid + label:after, input[type=email]:focus.invalid + label:after, input[type=url].invalid + label:after, input[type=url]:focus.invalid + label:after, input[type=time].invalid + label:after, input[type=time]:focus.invalid + label:after, input[type=date].invalid + label:after, input[type=date]:focus.invalid + label:after, input[type=datetime-local].invalid + label:after, input[type=datetime-local]:focus.invalid + label:after, input[type=tel].invalid + label:after, input[type=tel]:focus.invalid + label:after, input[type=number].invalid + label:after, input[type=number]:focus.invalid + label:after, input[type=search].invalid + label:after, input[type=search]:focus.invalid + label:after, textarea.materialize-textarea.invalid + label:after, textarea.materialize-textarea:focus.invalid + label:after { - content: attr(data-error); - color: #F44336; - opacity: 1; } - input[type=text] + label:after, input[type=password] + label:after, input[type=email] + label:after, input[type=url] + label:after, input[type=time] + label:after, input[type=date] + label:after, input[type=datetime-local] + label:after, input[type=tel] + label:after, input[type=number] + label:after, input[type=search] + label:after, textarea.materialize-textarea + label:after { - display: block; - content: ""; - position: absolute; - top: 65px; - opacity: 0; - transition: .2s opacity ease-out, .2s color ease-out; } - -.input-field { - position: relative; - margin-top: 1rem; } - .input-field label { - color: #9e9e9e; - position: absolute; - top: 0.8rem; - left: 0.75rem; - font-size: 1rem; - cursor: text; - -webkit-transition: .2s ease-out; - -moz-transition: .2s ease-out; - -o-transition: .2s ease-out; - -ms-transition: .2s ease-out; - transition: .2s ease-out; } - .input-field label.active { - font-size: 0.8rem; - -webkit-transform: translateY(-140%); - -moz-transform: translateY(-140%); - -ms-transform: translateY(-140%); - -o-transform: translateY(-140%); - transform: translateY(-140%); } - .input-field .prefix { - position: absolute; - width: 3rem; - font-size: 2rem; - -webkit-transition: color .2s; - -moz-transition: color .2s; - -o-transition: color .2s; - -ms-transition: color .2s; - transition: color .2s; } - .input-field .prefix.active { - color: #26a69a; } - .input-field .prefix ~ input, .input-field .prefix ~ textarea { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); } - .input-field .prefix ~ textarea { - padding-top: .8rem; } - .input-field .prefix ~ label { - margin-left: 3rem; } - @media only screen and (max-width : 992px) { - .input-field .prefix ~ input { - width: 86%; - width: calc(100% - 3rem); } } - @media only screen and (max-width : 600px) { - .input-field .prefix ~ input { - width: 80%; - width: calc(100% - 3rem); } } - -.input-field input[type=search] { - display: block; - line-height: inherit; - padding-left: 4rem; - width: calc(100% - 4rem); } - .input-field input[type=search]:focus { - background-color: #fff; - border: 0; - box-shadow: none; - color: #444; } - .input-field input[type=search]:focus + label i, .input-field input[type=search]:focus ~ .mdi-navigation-close, .input-field input[type=search]:focus ~ .material-icons { - color: #444; } - .input-field input[type=search] + label { - left: 1rem; } - .input-field input[type=search] ~ .mdi-navigation-close, .input-field input[type=search] ~ .material-icons { - position: absolute; - top: 0; - right: 1rem; - color: transparent; - cursor: pointer; - font-size: 2rem; - transition: .3s color; } - -textarea { - width: 100%; - height: 3rem; - background-color: transparent; } - textarea.materialize-textarea { - overflow-y: hidden; - /* prevents scroll bar flash */ - padding: 1.6rem 0; - /* prevents text jump on Enter keypress */ - resize: none; - min-height: 3rem; } - -.hiddendiv { - display: none; - white-space: pre-wrap; - word-wrap: break-word; - overflow-wrap: break-word; - /* future version of deprecated 'word-wrap' */ - padding-top: 1.2rem; - /* prevents text jump on Enter keypress */ } - -/*************** - Radio Buttons -***************/ -/* Remove default Radio Buttons */ -[type="radio"]:not(:checked), [type="radio"]:checked { - position: absolute; - left: -9999px; - visibility: hidden; } - -[type="radio"]:not(:checked) + label, [type="radio"]:checked + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-transition: .28s ease; - -moz-transition: .28s ease; - -o-transition: .28s ease; - -ms-transition: .28s ease; - transition: .28s ease; - -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -khtml-user-select: none; - /* webkit (konqueror) browsers */ - -ms-user-select: none; - /* IE10+ */ } - -[type="radio"] + label:before, [type="radio"] + label:after { - content: ''; - position: absolute; - left: 0; - top: 0; - margin: 4px; - width: 16px; - height: 16px; - z-index: 0; - -webkit-transition: .28s ease; - -moz-transition: .28s ease; - -o-transition: .28s ease; - -ms-transition: .28s ease; - transition: .28s ease; } - -/* Unchecked styles */ -[type="radio"]:not(:checked) + label:before { - border-radius: 50%; - border: 2px solid #5a5a5a; } - -[type="radio"]:not(:checked) + label:after { - border-radius: 50%; - border: 2px solid #5a5a5a; - z-index: -1; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); } - -/* Checked styles */ -[type="radio"]:checked + label:before { - border-radius: 50%; - border: 2px solid transparent; } - -[type="radio"]:checked + label:after { - border-radius: 50%; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; - -webkit-transform: scale(1.02); - -moz-transform: scale(1.02); - -ms-transform: scale(1.02); - -o-transform: scale(1.02); - transform: scale(1.02); } - -/* Radio With gap */ -[type="radio"].with-gap:checked + label:before { - border-radius: 50%; - border: 2px solid #26a69a; } - -[type="radio"].with-gap:checked + label:after { - border-radius: 50%; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; - -webkit-transform: scale(.5); - -moz-transform: scale(.5); - -ms-transform: scale(.5); - -o-transform: scale(.5); - transform: scale(.5); } - -/* Disabled Radio With gap */ -[type="radio"].with-gap:disabled:checked + label:before { - border: 2px solid rgba(0, 0, 0, 0.26); } - -[type="radio"].with-gap:disabled:checked + label:after { - border: none; - background-color: rgba(0, 0, 0, 0.26); } - -/* Disabled style */ -[type="radio"]:disabled:not(:checked) + label:before, [type="radio"]:disabled:checked + label:before { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.26); } - -[type="radio"]:disabled + label { - color: rgba(0, 0, 0, 0.26); } - -[type="radio"]:disabled:not(:checked) + label:before { - border-color: rgba(0, 0, 0, 0.26); } - -[type="radio"]:disabled:checked + label:after { - background-color: rgba(0, 0, 0, 0.26); - border-color: #BDBDBD; } - -/*************** - Checkboxes -***************/ -/* CUSTOM CSS CHECKBOXES */ -form p { - margin-bottom: 10px; - text-align: left; } - -form p:last-child { - margin-bottom: 0; } - -/* Remove default checkbox */ -[type="checkbox"]:not(:checked), [type="checkbox"]:checked { - position: absolute; - left: -9999px; - visibility: hidden; } - -[type="checkbox"] { - /* checkbox aspect */ } - [type="checkbox"] + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -khtml-user-select: none; - /* webkit (konqueror) browsers */ - -ms-user-select: none; - /* IE10+ */ } - [type="checkbox"] + label:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; - z-index: 0; - border: 2px solid #5a5a5a; - border-radius: 1px; - margin-top: 2px; - -webkit-transition: 0.2s; - -moz-transition: 0.2s; - -o-transition: 0.2s; - -ms-transition: 0.2s; - transition: 0.2s; } - [type="checkbox"]:not(:checked):disabled + label:before { - border: none; - background-color: rgba(0, 0, 0, 0.26); } - -[type="checkbox"]:checked + label:before { - top: -4px; - left: -3px; - width: 12px; - height: 22px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid #26a69a; - border-bottom: 2px solid #26a69a; - -webkit-transform: rotate(40deg); - -moz-transform: rotate(40deg); - -ms-transform: rotate(40deg); - -o-transform: rotate(40deg); - transform: rotate(40deg); - -webkit-backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - -moz-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - -o-transform-origin: 100% 100%; - transform-origin: 100% 100%; } -[type="checkbox"]:checked:disabled + label:before { - border-right: 2px solid rgba(0, 0, 0, 0.26); - border-bottom: 2px solid rgba(0, 0, 0, 0.26); } - -/* Indeterminate checkbox */ -[type="checkbox"]:indeterminate + label:before { - left: -10px; - top: -11px; - width: 10px; - height: 22px; - border-top: none; - border-left: none; - border-right: 2px solid #26a69a; - border-bottom: none; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); - -webkit-backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - -moz-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - -o-transform-origin: 100% 100%; - transform-origin: 100% 100%; } -[type="checkbox"]:indeterminate:disabled + label:before { - border-right: 2px solid rgba(0, 0, 0, 0.26); - background-color: transparent; } - -[type="checkbox"].filled-in + label:after { - border-radius: 2px; } -[type="checkbox"].filled-in + label:before, [type="checkbox"].filled-in + label:after { - content: ''; - left: 0; - position: absolute; - /* .1s delay is for check animation */ - transition: border .25s, background-color .25s, width .2s .1s, height .2s .1s, top .2s .1s, left .2s .1s; - z-index: 1; } -[type="checkbox"].filled-in:not(:checked) + label:before { - width: 0; - height: 0; - border: 3px solid transparent; - left: 6px; - top: 10px; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 20% 40%; - transform-origin: 100% 100%; } -[type="checkbox"].filled-in:not(:checked) + label:after { - height: 20px; - width: 20px; - background-color: transparent; - border: 2px solid #5a5a5a; - top: 0px; - z-index: 0; } -[type="checkbox"].filled-in:checked + label:before { - top: 0; - left: 1px; - width: 8px; - height: 13px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid #fff; - border-bottom: 2px solid #fff; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; } -[type="checkbox"].filled-in:checked + label:after { - top: 0px; - width: 20px; - height: 20px; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; } -[type="checkbox"].filled-in:disabled:not(:checked) + label:before { - background-color: transparent; - border: 2px solid transparent; } -[type="checkbox"].filled-in:disabled:not(:checked) + label:after { - border-color: transparent; - background-color: #BDBDBD; } -[type="checkbox"].filled-in:disabled:checked + label:before { - background-color: transparent; } -[type="checkbox"].filled-in:disabled:checked + label:after { - background-color: #BDBDBD; - border-color: #BDBDBD; } - -/*************** - Switch -***************/ -.switch, .switch * { - -webkit-user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -ms-user-select: none; } - -.switch label { - cursor: pointer; } - -.switch label input[type=checkbox] { - opacity: 0; - width: 0; - height: 0; } - -.switch label input[type=checkbox]:checked + .lever { - background-color: #84c7c1; } - -.switch label input[type=checkbox]:checked + .lever:after { - background-color: #26a69a; } - -.switch label .lever { - content: ""; - display: inline-block; - position: relative; - width: 40px; - height: 15px; - background-color: #818181; - border-radius: 15px; - margin-right: 10px; - transition: background 0.3s ease; - vertical-align: middle; - margin: 0 16px; } - -.switch label .lever:after { - content: ""; - position: absolute; - display: inline-block; - width: 21px; - height: 21px; - background-color: #F1F1F1; - border-radius: 21px; - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4); - left: -5px; - top: -3px; - transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease; } - -input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(38, 166, 154, 0.1); } - -input[type=checkbox]:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08); } - -.switch label input[type=checkbox]:checked + .lever:after { - left: 24px; } - -.switch input[type=checkbox][disabled] + .lever { - cursor: default; } - -.switch label input[type=checkbox][disabled] + .lever:after, .switch label input[type=checkbox][disabled]:checked + .lever:after { - background-color: #BDBDBD; } - -/*************** - Select Field -***************/ -.select-label { - position: absolute; } - -.select-wrapper { - position: relative; } - .select-wrapper input.select-dropdown { - position: relative; - cursor: pointer; - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - outline: none; - height: 3rem; - line-height: 3rem; - width: 100%; - font-size: 1rem; - margin: 0 0 15px 0; - padding: 0; - display: block; } - .select-wrapper span.caret { - color: initial; - position: absolute; - right: 0; - top: 16px; - font-size: 10px; } - .select-wrapper span.caret.disabled { - color: rgba(0, 0, 0, 0.26); } - .select-wrapper + label { - position: absolute; - top: -14px; - font-size: 0.8rem; } - -select { - display: none; } - -select.browser-default { - display: block; } - -select:disabled { - color: rgba(0, 0, 0, 0.3); } - -.select-wrapper input.select-dropdown:disabled { - color: rgba(0, 0, 0, 0.3); - cursor: default; - -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -ms-user-select: none; - /* IE10+ */ - border-bottom: 1px solid rgba(0, 0, 0, 0.3); } - -.select-wrapper i { - color: rgba(0, 0, 0, 0.3); } - -.select-dropdown li.disabled { - color: rgba(0, 0, 0, 0.3); - background-color: transparent; } - -/********************* - File Input -**********************/ -.file-field { - position: relative; } - .file-field .file-path-wrapper { - overflow: hidden; - padding-left: 10px; } - .file-field input.file-path { - width: 100%; } - .file-field .btn, .file-field .btn-large { - float: left; - height: 3rem; - line-height: 3rem; } - .file-field span { - cursor: pointer; } - .file-field input[type=file] { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - width: 100%; - margin: 0; - padding: 0; - font-size: 20px; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); } - -/*************** - Range -***************/ -.range-field { - position: relative; } - -input[type=range], input[type=range] + .thumb { - cursor: pointer; } - -input[type=range] { - position: relative; - background-color: transparent; - border: none; - outline: none; - width: 100%; - margin: 15px 0px; - padding: 0; } - -input[type=range] + .thumb { - position: absolute; - border: none; - height: 0; - width: 0; - border-radius: 50%; - background-color: #26a69a; - top: 10px; - margin-left: -6px; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -ms-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; - -webkit-transform: rotate(-45deg); - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - transform: rotate(-45deg); } - input[type=range] + .thumb .value { - display: block; - width: 30px; - text-align: center; - color: #26a69a; - font-size: 0; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); } - input[type=range] + .thumb.active { - border-radius: 50% 50% 50% 0; } - input[type=range] + .thumb.active .value { - color: #fff; - margin-left: -1px; - margin-top: 8px; - font-size: 10px; } - -input[type=range]:focus { - outline: none; } - -input[type=range] { - -webkit-appearance: none; } - -input[type=range]::-webkit-slider-runnable-track { - height: 3px; - background: #c2c0c2; - border: none; } - -input[type=range]::-webkit-slider-thumb { - -webkit-appearance: none; - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background-color: #26a69a; - transform-origin: 50% 50%; - margin: -5px 0 0 0; - -webkit-transition: 0.3s; - -moz-transition: 0.3s; - -o-transition: 0.3s; - -ms-transition: 0.3s; - transition: 0.3s; } - -input[type=range]:focus::-webkit-slider-runnable-track { - background: #ccc; } - -input[type=range] { - /* fix for FF unable to apply focus style bug */ - border: 1px solid white; - /*required for proper track sizing in FF*/ } - -input[type=range]::-moz-range-track { - height: 3px; - background: #ddd; - border: none; } - -input[type=range]::-moz-range-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: #26a69a; - margin-top: -5px; } - -/*hide the outline behind the border*/ -input[type=range]:-moz-focusring { - outline: 1px solid white; - outline-offset: -1px; } - -input[type=range]:focus::-moz-range-track { - background: #ccc; } - -input[type=range]::-ms-track { - height: 3px; - /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */ - background: transparent; - /*leave room for the larger thumb to overflow with a transparent border */ - border-color: transparent; - border-width: 6px 0; - /*remove default tick marks*/ - color: transparent; } - -input[type=range]::-ms-fill-lower { - background: #777; } - -input[type=range]::-ms-fill-upper { - background: #ddd; } - -input[type=range]::-ms-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: #26a69a; } - -input[type=range]:focus::-ms-fill-lower { - background: #888; } - -input[type=range]:focus::-ms-fill-upper { - background: #ccc; } - -/*************************** - Text Inputs + Textarea -****************************/ -select { - background-color: rgba(255, 255, 255, 0.9); - width: 100%; - padding: 5px; - border: 1px solid #f2f2f2; - border-radius: 2px; - height: 3rem; } - -/*************** - Nav List -***************/ -.table-of-contents.fixed { - position: fixed; } -.table-of-contents li { - padding: 2px 0; } -.table-of-contents a { - display: inline-block; - font-weight: 300; - color: #757575; - padding-left: 20px; - height: 1.5rem; - line-height: 1.5rem; - letter-spacing: .4; - display: inline-block; } - .table-of-contents a:hover { - color: #a8a8a8; - padding-left: 19px; - border-left: 1px solid #ea4a4f; } - .table-of-contents a.active { - font-weight: 500; - padding-left: 18px; - border-left: 2px solid #ea4a4f; } - -.side-nav { - position: fixed; - width: 240px; - left: -105%; - top: 0; - margin: 0; - height: 100%; - height: calc(100% + 60px); - height: -moz-calc(100%); - padding-bottom: 60px; - background-color: #fff; - z-index: 999; - overflow-y: auto; - will-change: left; } - .side-nav.right-aligned { - will-change: right; - right: -105%; - left: auto; } - .side-nav .collapsible { - margin: 0; } - .side-nav li { - float: none; - padding: 0 15px; } - .side-nav li:hover, .side-nav li.active { - background-color: #ddd; } - .side-nav a { - color: #444; - display: block; - font-size: 1rem; - height: 64px; - line-height: 64px; - padding: 0 15px; } - -.drag-target { - height: 100%; - width: 10px; - position: fixed; - top: 0; - z-index: 998; } - -.side-nav.fixed a { - display: block; - padding: 0 15px; - color: #444; } - -.side-nav.fixed { - left: 0; - position: fixed; } - .side-nav.fixed.right-aligned { - right: 0; - left: auto; } - -@media only screen and (max-width : 992px) { - .side-nav.fixed { - left: -105%; } - .side-nav.fixed.right-aligned { - right: -105%; - left: auto; } } - -.side-nav .collapsible-body li.active, .side-nav.fixed .collapsible-body li.active { - background-color: #ee6e73; } - .side-nav .collapsible-body li.active a, .side-nav.fixed .collapsible-body li.active a { - color: #fff; } - -#sidenav-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - height: 120vh; - background-color: rgba(0, 0, 0, 0.5); - z-index: 997; - will-change: opacity; } - -/* - @license - Copyright (c) 2014 The Polymer Project Authors. All rights reserved. - This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - Code distributed by Google as part of the polymer project is also - subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ -/**************************/ -/* STYLES FOR THE SPINNER */ -/**************************/ -/* - * Constants: - * STROKEWIDTH = 3px - * ARCSIZE = 270 degrees (amount of circle the arc takes up) - * ARCTIME = 1333ms (time it takes to expand and contract arc) - * ARCSTARTROT = 216 degrees (how much the start location of the arc - * should rotate each time, 216 gives us a - * 5 pointed star shape (it's 360/5 * 3). - * For a 7 pointed star, we might do - * 360/7 * 3 = 154.286) - * CONTAINERWIDTH = 28px - * SHRINK_TIME = 400ms - */ -.preloader-wrapper { - display: inline-block; - position: relative; - width: 48px; - height: 48px; } - .preloader-wrapper.small { - width: 36px; - height: 36px; } - .preloader-wrapper.big { - width: 64px; - height: 64px; } - .preloader-wrapper.active { - /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ - -webkit-animation: container-rotate 1568ms linear infinite; - animation: container-rotate 1568ms linear infinite; } - -@-webkit-keyframes container-rotate { - to { - -webkit-transform: rotate(360deg); } } - -@keyframes container-rotate { - to { - transform: rotate(360deg); } } - -.spinner-layer { - position: absolute; - width: 100%; - height: 100%; - opacity: 0; } - -.spinner-blue, .spinner-blue-only { - border-color: #4285f4; } - -.spinner-red, .spinner-red-only { - border-color: #db4437; } - -.spinner-yellow, .spinner-yellow-only { - border-color: #f4b400; } - -.spinner-green, .spinner-green-only { - border-color: #0f9d58; } - -/** - * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): - * - * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't - * guarantee that the animation will start _exactly_ after that value. So we avoid using - * animation-delay and instead set custom keyframes for each color (as redundant as it - * seems). - * - * We write out each animation in full (instead of separating animation-name, - * animation-duration, etc.) because under the polyfill, Safari does not recognize those - * specific properties properly, treats them as -webkit-animation, and overrides the - * other animation rules. See https://github.com/Polymer/platform/issues/53. - */ -.active .spinner-layer.spinner-blue { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-red { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-yellow { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-green { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-blue-only, .active .spinner-layer.spinner-red-only, .active .spinner-layer.spinner-yellow-only, .active .spinner-layer.spinner-green-only { - /* durations: 4 * ARCTIME */ - opacity: 1; - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -@-webkit-keyframes fill-unfill-rotate { - /* 0.5 * ARCSIZE */ - /* 1 * ARCSIZE */ - /* 1.5 * ARCSIZE */ - /* 2 * ARCSIZE */ - /* 2.5 * ARCSIZE */ - /* 3 * ARCSIZE */ - /* 3.5 * ARCSIZE */ - /* 4 * ARCSIZE */ - 12.5% { - -webkit-transform: rotate(135deg); } - - 25% { - -webkit-transform: rotate(270deg); } - - 37.5% { - -webkit-transform: rotate(405deg); } - - 50% { - -webkit-transform: rotate(540deg); } - - 62.5% { - -webkit-transform: rotate(675deg); } - - 75% { - -webkit-transform: rotate(810deg); } - - 87.5% { - -webkit-transform: rotate(945deg); } - - to { - -webkit-transform: rotate(1080deg); } } - -@keyframes fill-unfill-rotate { - /* 0.5 * ARCSIZE */ - /* 1 * ARCSIZE */ - /* 1.5 * ARCSIZE */ - /* 2 * ARCSIZE */ - /* 2.5 * ARCSIZE */ - /* 3 * ARCSIZE */ - /* 3.5 * ARCSIZE */ - /* 4 * ARCSIZE */ - 12.5% { - transform: rotate(135deg); } - - 25% { - transform: rotate(270deg); } - - 37.5% { - transform: rotate(405deg); } - - 50% { - transform: rotate(540deg); } - - 62.5% { - transform: rotate(675deg); } - - 75% { - transform: rotate(810deg); } - - 87.5% { - transform: rotate(945deg); } - - to { - transform: rotate(1080deg); } } - -@-webkit-keyframes blue-fade-in-out { - from { - opacity: 1; } - - 25% { - opacity: 1; } - - 26% { - opacity: 0; } - - 89% { - opacity: 0; } - - 90% { - opacity: 1; } - - 100% { - opacity: 1; } } - -@keyframes blue-fade-in-out { - from { - opacity: 1; } - - 25% { - opacity: 1; } - - 26% { - opacity: 0; } - - 89% { - opacity: 0; } - - 90% { - opacity: 1; } - - 100% { - opacity: 1; } } - -@-webkit-keyframes red-fade-in-out { - from { - opacity: 0; } - - 15% { - opacity: 0; } - - 25% { - opacity: 1; } - - 50% { - opacity: 1; } - - 51% { - opacity: 0; } } - -@keyframes red-fade-in-out { - from { - opacity: 0; } - - 15% { - opacity: 0; } - - 25% { - opacity: 1; } - - 50% { - opacity: 1; } - - 51% { - opacity: 0; } } - -@-webkit-keyframes yellow-fade-in-out { - from { - opacity: 0; } - - 40% { - opacity: 0; } - - 50% { - opacity: 1; } - - 75% { - opacity: 1; } - - 76% { - opacity: 0; } } - -@keyframes yellow-fade-in-out { - from { - opacity: 0; } - - 40% { - opacity: 0; } - - 50% { - opacity: 1; } - - 75% { - opacity: 1; } - - 76% { - opacity: 0; } } - -@-webkit-keyframes green-fade-in-out { - from { - opacity: 0; } - - 65% { - opacity: 0; } - - 75% { - opacity: 1; } - - 90% { - opacity: 1; } - - 100% { - opacity: 0; } } - -@keyframes green-fade-in-out { - from { - opacity: 0; } - - 65% { - opacity: 0; } - - 75% { - opacity: 1; } - - 90% { - opacity: 1; } - - 100% { - opacity: 0; } } - -/** - * Patch the gap that appear between the two adjacent div.circle-clipper while the - * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). - */ -.gap-patch { - position: absolute; - top: 0; - left: 45%; - width: 10%; - height: 100%; - overflow: hidden; - border-color: inherit; } - -.gap-patch .circle { - width: 1000%; - left: -450%; } - -.circle-clipper { - display: inline-block; - position: relative; - width: 50%; - height: 100%; - overflow: hidden; - border-color: inherit; } - .circle-clipper .circle { - width: 200%; - height: 100%; - border-width: 3px; - /* STROKEWIDTH */ - border-style: solid; - border-color: inherit; - border-bottom-color: transparent !important; - border-radius: 50%; - -webkit-animation: none; - animation: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; } - .circle-clipper.left .circle { - left: 0; - border-right-color: transparent !important; - -webkit-transform: rotate(129deg); - transform: rotate(129deg); } - .circle-clipper.right .circle { - left: -100%; - border-left-color: transparent !important; - -webkit-transform: rotate(-129deg); - transform: rotate(-129deg); } - -.active .circle-clipper.left .circle { - /* duration: ARCTIME */ - -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .circle-clipper.right .circle { - /* duration: ARCTIME */ - -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -@-webkit-keyframes left-spin { - from { - -webkit-transform: rotate(130deg); } - - 50% { - -webkit-transform: rotate(-5deg); } - - to { - -webkit-transform: rotate(130deg); } } - -@keyframes left-spin { - from { - transform: rotate(130deg); } - - 50% { - transform: rotate(-5deg); } - - to { - transform: rotate(130deg); } } - -@-webkit-keyframes right-spin { - from { - -webkit-transform: rotate(-130deg); } - - 50% { - -webkit-transform: rotate(5deg); } - - to { - -webkit-transform: rotate(-130deg); } } - -@keyframes right-spin { - from { - transform: rotate(-130deg); } - - 50% { - transform: rotate(5deg); } - - to { - transform: rotate(-130deg); } } - -#spinnerContainer.cooldown { - /* duration: SHRINK_TIME */ - -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); - animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); } - -@-webkit-keyframes fade-out { - from { - opacity: 1; } - - to { - opacity: 0; } } - -@keyframes fade-out { - from { - opacity: 1; } - - to { - opacity: 0; } } - -.slider { - position: relative; - height: 400px; - width: 100%; } - .slider.fullscreen { - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; } - .slider.fullscreen ul.slides { - height: 100%; } - .slider.fullscreen ul.indicators { - z-index: 2; - bottom: 30px; } - .slider .slides { - background-color: #9e9e9e; - margin: 0; - height: 400px; } - .slider .slides li { - opacity: 0; - position: absolute; - top: 0; - left: 0; - z-index: 1; - width: 100%; - height: inherit; - overflow: hidden; } - .slider .slides li img { - height: 100%; - width: 100%; - background-size: cover; - background-position: center; } - .slider .slides li .caption { - color: #fff; - position: absolute; - top: 15%; - left: 15%; - width: 70%; - opacity: 0; } - .slider .slides li .caption p { - color: #e0e0e0; } - .slider .slides li.active { - z-index: 2; } - .slider .indicators { - position: absolute; - text-align: center; - left: 0; - right: 0; - bottom: 0; - margin: 0; } - .slider .indicators .indicator-item { - display: inline-block; - position: relative; - cursor: pointer; - height: 16px; - width: 16px; - margin: 0 12px; - background-color: #e0e0e0; - -webkit-transition: background-color .3s; - -moz-transition: background-color .3s; - -o-transition: background-color .3s; - -ms-transition: background-color .3s; - transition: background-color .3s; - border-radius: 50%; } - .slider .indicators .indicator-item.active { - background-color: #4CAF50; } - -/* ========================================================================== - $BASE-PICKER - ========================================================================== */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. - */ -.picker { - font-size: 16px; - text-align: left; - line-height: 1.2; - color: #000000; - position: absolute; - z-index: 10000; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - -/** - * The picker input element. - */ -.picker__input { - cursor: default; } - -/** - * When the picker is opened, the input element is "activated". - */ -.picker__input.picker__input--active { - border-color: #0089ec; } - -/** - * The holder is the only "scrollable" top-level container element. - */ -.picker__holder { - width: 100%; - overflow-y: auto; - -webkit-overflow-scrolling: touch; } - -/*! - * Default mobile-first, responsive styling for pickadate.js - * Demo: http://amsul.github.io/pickadate.js - */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. - */ -/** - * Make the holder and frame fullscreen. - */ -.picker__holder, .picker__frame { - bottom: 0; - left: 0; - right: 0; - top: 100%; } - -/** - * The holder should overlay the entire screen. - */ -.picker__holder { - position: fixed; - -webkit-transition: background 0.15s ease-out, top 0s 0.15s; - -moz-transition: background 0.15s ease-out, top 0s 0.15s; - transition: background 0.15s ease-out, top 0s 0.15s; - -webkit-backface-visibility: hidden; } - -/** - * The frame that bounds the box contents of the picker. - */ -.picker__frame { - position: absolute; - margin: 0 auto; - min-width: 256px; - width: 300px; - max-height: 350px; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - -moz-opacity: 0; - opacity: 0; - -webkit-transition: all 0.15s ease-out; - -moz-transition: all 0.15s ease-out; - transition: all 0.15s ease-out; } - -@media (min-height: 28.875em) { - .picker__frame { - overflow: visible; - top: auto; - bottom: -100%; - max-height: 80%; } } - -@media (min-height: 40.125em) { - .picker__frame { - margin-bottom: 7.5%; } } - -/** - * The wrapper sets the stage to vertically align the box contents. - */ -.picker__wrap { - display: table; - width: 100%; - height: 100%; } - -@media (min-height: 28.875em) { - .picker__wrap { - display: block; } } - -/** - * The box contains all the picker contents. - */ -.picker__box { - background: #ffffff; - display: table-cell; - vertical-align: middle; } - -@media (min-height: 28.875em) { - .picker__box { - display: block; - border: 1px solid #777777; - border-top-color: #898989; - border-bottom-width: 0; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; - -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); } } - -/** - * When the picker opens... - */ -.picker--opened .picker__holder { - top: 0; - background: transparent; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)"; - zoom: 1; - background: rgba(0, 0, 0, 0.32); - -webkit-transition: background 0.15s ease-out; - -moz-transition: background 0.15s ease-out; - transition: background 0.15s ease-out; } - -.picker--opened .picker__frame { - top: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); - -moz-opacity: 1; - opacity: 1; } - -@media (min-height: 35.875em) { - .picker--opened .picker__frame { - top: 10%; - bottom: 20% auto; } } - -/** - * For `large` screens, transform into an inline picker. - */ -/* ========================================================================== - CUSTOM MATERIALIZE STYLES - ========================================================================== */ -.picker__input.picker__input--active { - border-color: #E3F2FD; } - -.picker__frame { - margin: 0 auto; - max-width: 325px; } - -@media (min-height: 38.875em) { - .picker--opened .picker__frame { - top: 10%; - bottom: auto; } } - -/* ========================================================================== - $BASE-DATE-PICKER - ========================================================================== */ -/** - * The picker box. - */ -.picker__box { - padding: 0 1em; } - -/** - * The header containing the month and year stuff. - */ -.picker__header { - text-align: center; - position: relative; - margin-top: .75em; } - -/** - * The month and year labels. - */ -.picker__month, .picker__year { - display: inline-block; - margin-left: .25em; - margin-right: .25em; } - -/** - * The month and year selectors. - */ -.picker__select--month, .picker__select--year { - height: 2em; - padding: 0; - margin-left: .25em; - margin-right: .25em; } - -.picker__select--month.browser-default { - display: inline; - background-color: #FFFFFF; - width: 40%; } - -.picker__select--year.browser-default { - display: inline; - background-color: #FFFFFF; - width: 25%; } - -.picker__select--month:focus, .picker__select--year:focus { - border-color: rgba(0, 0, 0, 0.05); } - -/** - * The month navigation buttons. - */ -.picker__nav--prev, .picker__nav--next { - position: absolute; - padding: .5em 1.25em; - width: 1em; - height: 1em; - box-sizing: content-box; - top: -0.25em; } - -.picker__nav--prev { - left: -1em; - padding-right: 1.25em; } - -.picker__nav--next { - right: -1em; - padding-left: 1.25em; } - -.picker__nav--disabled, .picker__nav--disabled:hover, .picker__nav--disabled:before, .picker__nav--disabled:before:hover { - cursor: default; - background: none; - border-right-color: #f5f5f5; - border-left-color: #f5f5f5; } - -/** - * The calendar table of dates - */ -.picker__table { - text-align: center; - border-collapse: collapse; - border-spacing: 0; - table-layout: fixed; - font-size: 1rem; - width: 100%; - margin-top: .75em; - margin-bottom: .5em; } - -.picker__table th, .picker__table td { - text-align: center; } - -.picker__table td { - margin: 0; - padding: 0; } - -/** - * The weekday labels - */ -.picker__weekday { - width: 14.285714286%; - font-size: .75em; - padding-bottom: .25em; - color: #999999; - font-weight: 500; - /* Increase the spacing a tad */ } - -@media (min-height: 33.875em) { - .picker__weekday { - padding-bottom: .5em; } } - -/** - * The days on the calendar - */ -.picker__day--today { - position: relative; - color: #595959; - letter-spacing: -.3; - padding: .75rem 0; - font-weight: 400; - border: 1px solid transparent; } - -.picker__day--disabled:before { - border-top-color: #aaaaaa; } - -.picker__day--infocus:hover { - cursor: pointer; - color: #000; - font-weight: 500; } - -.picker__day--outfocus { - display: none; - padding: .75rem 0; - color: #fff; } - -.picker__day--outfocus:hover { - cursor: pointer; - color: #dddddd; - font-weight: 500; } - -.picker__day--highlighted:hover, .picker--focused .picker__day--highlighted { - cursor: pointer; } - -.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected { - border-radius: 50%; - -webkit-transform: scale(.75); - -moz-transform: scale(.75); - -ms-transform: scale(.75); - -o-transform: scale(.75); - transform: scale(.75); - background: #0089ec; - color: #ffffff; } - -.picker__day--disabled, .picker__day--disabled:hover, .picker--focused .picker__day--disabled { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; } - -.picker__day--highlighted.picker__day--disabled, .picker__day--highlighted.picker__day--disabled:hover { - background: #bbbbbb; } - -/** - * The footer containing the "today", "clear", and "close" buttons. - */ -.picker__footer { - text-align: center; - display: flex; - align-items: center; - justify-content: space-between; } - -.picker__button--today, .picker__button--clear, .picker__button--close { - border: 1px solid #ffffff; - background: #ffffff; - font-size: .8em; - padding: .66em 0; - font-weight: bold; - width: 33%; - display: inline-block; - vertical-align: bottom; } - -.picker__button--today:hover, .picker__button--clear:hover, .picker__button--close:hover { - cursor: pointer; - color: #000000; - background: #b1dcfb; - border-bottom-color: #b1dcfb; } - -.picker__button--today:focus, .picker__button--clear:focus, .picker__button--close:focus { - background: #b1dcfb; - border-color: rgba(0, 0, 0, 0.05); - outline: none; } - -.picker__button--today:before, .picker__button--clear:before, .picker__button--close:before { - position: relative; - display: inline-block; - height: 0; } - -.picker__button--today:before, .picker__button--clear:before { - content: " "; - margin-right: .45em; } - -.picker__button--today:before { - top: -0.05em; - width: 0; - border-top: 0.66em solid #0059bc; - border-left: .66em solid transparent; } - -.picker__button--clear:before { - top: -0.25em; - width: .66em; - border-top: 3px solid #ee2200; } - -.picker__button--close:before { - content: "\D7"; - top: -0.1em; - vertical-align: top; - font-size: 1.1em; - margin-right: .35em; - color: #777777; } - -.picker__button--today[disabled], .picker__button--today[disabled]:hover { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; } - -.picker__button--today[disabled]:before { - border-top-color: #aaaaaa; } - -/* ========================================================================== - CUSTOM MATERIALIZE STYLES - ========================================================================== */ -.picker__box { - border-radius: 2px; - overflow: hidden; } - -.picker__date-display { - text-align: center; - background-color: #26a69a; - color: #fff; - padding-bottom: 15px; - font-weight: 300; } - -.picker__nav--prev:hover, .picker__nav--next:hover { - cursor: pointer; - color: #000000; - background: #a1ded8; } - -.picker__weekday-display { - background-color: #1f897f; - padding: 10px; - font-weight: 200; - letter-spacing: .5; - font-size: 1rem; - margin-bottom: 15px; } - -.picker__month-display { - text-transform: uppercase; - font-size: 2rem; } - -.picker__day-display { - font-size: 4.5rem; - font-weight: 400; } - -.picker__year-display { - font-size: 1.8rem; - color: rgba(255, 255, 255, 0.4); } - -.picker__box { - padding: 0; } - -.picker__calendar-container { - padding: 0 1rem; } - .picker__calendar-container thead { - border: none; } - -.picker__table { - margin-top: 0; - margin-bottom: .5em; } - -.picker__day--infocus { - color: #595959; - letter-spacing: -.3; - padding: .75rem 0; - font-weight: 400; - border: 1px solid transparent; } - -.picker__day.picker__day--today { - color: #26a69a; } - -.picker__day.picker__day--today.picker__day--selected { - color: #fff; } - -.picker__weekday { - font-size: .9rem; } - -.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected { - border-radius: 50%; - -webkit-transform: scale(.9); - -moz-transform: scale(.9); - -ms-transform: scale(.9); - -o-transform: scale(.9); - transform: scale(.9); - background-color: #26a69a; - color: #ffffff; } - .picker__day--selected.picker__day--outfocus, .picker__day--selected:hover.picker__day--outfocus, .picker--focused .picker__day--selected.picker__day--outfocus { - background-color: #a1ded8; } - -.picker__footer { - text-align: right; - padding: 5px 10px; } - -.picker__close, .picker__today { - font-size: 1.1rem; - padding: 0 1rem; - color: #26a69a; } - -.picker__nav--prev:before, .picker__nav--next:before { - content: " "; - border-top: .5em solid transparent; - border-bottom: .5em solid transparent; - border-right: 0.75em solid #676767; - width: 0; - height: 0; - display: block; - margin: 0 auto; } - -.picker__nav--next:before { - border-right: 0; - border-left: 0.75em solid #676767; } - -button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus { - background-color: #a1ded8; } - -/* ========================================================================== - $BASE-TIME-PICKER - ========================================================================== */ -/** - * The list of times. - */ -.picker__list { - list-style: none; - padding: 0.75em 0 4.2em; - margin: 0; } - -/** - * The times on the clock. - */ -.picker__list-item { - border-bottom: 1px solid #dddddd; - border-top: 1px solid #dddddd; - margin-bottom: -1px; - position: relative; - background: #ffffff; - padding: .75em 1.25em; } - -@media (min-height: 46.75em) { - .picker__list-item { - padding: .5em 1em; } } - -/* Hovered time */ -.picker__list-item:hover { - cursor: pointer; - color: #000000; - background: #b1dcfb; - border-color: #0089ec; - z-index: 10; } - -/* Highlighted and hovered/focused time */ -.picker__list-item--highlighted { - border-color: #0089ec; - z-index: 10; } - -.picker__list-item--highlighted:hover, .picker--focused .picker__list-item--highlighted { - cursor: pointer; - color: #000000; - background: #b1dcfb; } - -/* Selected and hovered/focused time */ -.picker__list-item--selected, .picker__list-item--selected:hover, .picker--focused .picker__list-item--selected { - background: #0089ec; - color: #ffffff; - z-index: 10; } - -/* Disabled time */ -.picker__list-item--disabled, .picker__list-item--disabled:hover, .picker--focused .picker__list-item--disabled { - background: #f5f5f5; - border-color: #f5f5f5; - color: #dddddd; - cursor: default; - border-color: #dddddd; - z-index: auto; } - -/** - * The clear button - */ -.picker--time .picker__button--clear { - display: block; - width: 80%; - margin: 1em auto 0; - padding: 1em 1.25em; - background: none; - border: 0; - font-weight: 500; - font-size: .67em; - text-align: center; - text-transform: uppercase; - color: #666; } - -.picker--time .picker__button--clear:hover, .picker--time .picker__button--clear:focus { - color: #000000; - background: #b1dcfb; - background: #ee2200; - border-color: #ee2200; - cursor: pointer; - color: #ffffff; - outline: none; } - -.picker--time .picker__button--clear:before { - top: -0.25em; - color: #666; - font-size: 1.25em; - font-weight: bold; } - -.picker--time .picker__button--clear:hover:before, .picker--time .picker__button--clear:focus:before { - color: #ffffff; } - -/* ========================================================================== - $DEFAULT-TIME-PICKER - ========================================================================== */ -/** - * The frame the bounds the time picker. - */ -.picker--time .picker__frame { - min-width: 256px; - max-width: 320px; } - -/** - * The picker box. - */ -.picker--time .picker__box { - font-size: 1em; - background: #f2f2f2; - padding: 0; } - -@media (min-height: 40.125em) { - .picker--time .picker__box { - margin-bottom: 5em; } } - -/*************** - HTML Styles -***************/ -body { - background-color: #fcfcfc; } - -p.box { - padding: 20px; } - -p { - color: rgba(0, 0, 0, 0.71); - padding: 0; - -webkit-font-smoothing: antialiased; } - -h1, h2, h3, h4, h5, h6 { - -webkit-font-smoothing: antialiased; } - -nav a { - -webkit-font-smoothing: antialiased; } -nav ul li:hover, nav ul li.active { - background-color: #ea454b; } - -.header { - color: #ee6e73; - font-weight: 300; } - -.caption { - font-size: 1.25rem; - font-weight: 300; - margin-bottom: 30px; } - -.preview { - background-color: #FFF; - border: 1px solid #eee; - padding: 20px 20px; } - -header, main, footer { - padding-left: 240px; } - -.parallax-demo header, .parallax-demo main, .parallax-demo footer { - padding-left: 0; } - -footer.example { - padding-left: 0; } - -@media only screen and (max-width : 992px) { - header, main, footer { - padding-left: 0; } } - -/******************** - Index Page Styles -********************/ -ul.side-nav.fixed li.logo { - text-align: center; - margin-top: 32px; - margin-bottom: 16px; - border-bottom: 1px solid #ddd; } - ul.side-nav.fixed li.logo:hover { - background-color: transparent; } - -ul.side-nav.fixed { - overflow: hidden; } - ul.side-nav.fixed li { - line-height: 44px; } - ul.side-nav.fixed li:hover, ul.side-nav.fixed li.active { - background-color: rgba(0, 0, 0, 0.05); } - ul.side-nav.fixed li a { - font-size: 13px; - line-height: 44px; - height: 44px; } - ul.side-nav.fixed ul.collapsible-accordion { - background-color: #FFF; } - ul.side-nav.fixed:hover { - overflow-y: auto; } - -.bold > a { - font-weight: bold; } - -#logo-container { - height: 57px; - margin-bottom: 32px; } - -nav.top-nav { - height: 122px; - box-shadow: none; } - nav.top-nav a.page-title { - line-height: 122px; - font-size: 48px; } - -a.button-collapse.top-nav { - position: absolute; - text-align: center; - height: 48px; - width: 48px; - left: 7.5%; - top: 0; - float: none; - margin-left: 1.5rem; - color: #fff; - font-size: 32px; - z-index: 2; } - a.button-collapse.top-nav.full { - line-height: 122px; } - -@media only screen and (max-width : 600px) { - a.button-collapse.top-nav { - left: 5%; } } - -@media only screen and (max-width : 992px) { - nav .nav-wrapper { - text-align: center; } - nav .nav-wrapper a.page-title { - font-size: 36px; } } - -@media only screen and (min-width : 993px) { - .container { - width: 85%; } } - -#front-page-logo { - display: inline-block; - height: 100%; - pointer-events: none; } - -@media only screen and (max-width: 992px) { - #front-page-nav ul.side-nav li { - float: none; - padding: 0 15px; } - #front-page-nav ul.side-nav li:hover { - background-color: #ddd; } - #front-page-nav ul.side-nav li .active { - background-color: transparent; } - #front-page-nav ul.side-nav a { - color: #444; } } - -#responsive-img { - width: 80%; - display: block; - margin: 0 auto; } - -#index-banner { - background-color: #ee6e73; } - #index-banner .container { - position: relative; } - #index-banner .header { - color: #FFF; } - #index-banner h4 { - margin-bottom: 40px; } - #index-banner h1 { - margin-top: 16px; } - -@media only screen and (max-width : 992px) { - #index-banner h1 { - margin-top: 60px; } - #index-banner h4 { - margin-bottom: 15px; } } - -@media only screen and (max-width : 600px) { - #index-banner h4 { - margin-bottom: 0; } } - -.github-commit { - padding: 14px 0; - height: 64px; - line-height: 36px; - background-color: #5c5757; - color: #e6e6e6; - font-size: .9rem; } - -@media only screen and (max-width : 992px) { - .github-commit { - text-align: center; } } - -#github-button { - background-color: #6f6d6d; - -webkit-transition: .25s ease; - -moz-transition: .25s ease; - -o-transition: .25s ease; - -ms-transition: .25s ease; - transition: .25s ease; } - #github-button:hover { - background-color: #797777; } - -.sha { - color: #f0f0f0; - margin: 0 6px 0 6px; } - -#download-button { - background-color: #f3989b; - width: 260px; - height: 70px; - line-height: 70px; - font-size: 18px; - font-weight: 400; } - #download-button:hover { - background-color: #f5a5a8; } - -.promo { - width: 100%; } - @media only screen and (max-width : 992px) { - .promo { - width: 60%; - margin: 0 auto; - display: block; } } - .promo i { - margin: 40px 0; - color: #ee6e73; - font-size: 7rem; - display: block; } - -.promo-caption { - font-size: 1.7rem; - font-weight: 500; - margin-top: 5px; - margin-bottom: 0; } - -#front-page-nav { - background-color: #FFF; - position: relative; } - #front-page-nav a { - color: #ee6e73; } - #front-page-nav li:hover { - background-color: #fdeaeb; } - #front-page-nav li.active { - background-color: #fdeaeb; } - #front-page-nav .container { - height: inherit; } - -.col.grid-example { - border: 1px solid #eee; - margin: 7px 0; - text-align: center; - line-height: 50px; - font-size: 28px; - background-color: tomato; - color: white; - padding: 0; } - .col.grid-example span { - font-weight: 200; - line-height: 50px; } - -.promo-example { - overflow: hidden; } - -/******************* - Flat Site Mockup -*******************/ -#site-layout-example-left { - background-color: #90a4ae; - height: 300px; } - -#site-layout-example-right { - background-color: #26a69a; - height: 300px; } - -#site-layout-example-top { - background-color: #E57373; - height: 42px; } - -.flat-text-header { - height: 35px; - width: 80%; - background-color: rgba(255, 255, 255, 0.15); - display: block; - margin: 27px auto; } - -.flat-text { - height: 25px; - width: 80%; - background-color: rgba(0, 0, 0, 0.15); - display: block; - margin: 27px auto; } - .flat-text.small { - width: 25%; - height: 25px; - background-color: rgba(0, 0, 0, 0.15); } - .flat-text.full-width { - width: 100%; } - -/********************** -**********************/ -/***************** - Chrome Browser -*****************/ -.browser-window { - text-align: left; - width: 100%; - height: auto; - display: inline-block; - border-radius: 5px 5px 2px 2px; - background-color: #fff; - margin: 20px 0px; - overflow: hidden; } - .browser-window .top-bar { - height: 30px; - border-radius: 5px 5px 0 0; - border-top: thin solid #eaeae9; - border-bottom: thin solid #dfdfde; - background: linear-gradient(#e7e7e6, #E2E2E1); } - -.browser-window .circle { - height: 10px; - width: 10px; - display: inline-block; - border-radius: 50%; - background-color: white; - margin-right: 1px; } - -#close-circle { - background-color: #FF5C5A; } - -#minimize-circle { - background-color: #FFBB50; } - -#maximize-circle { - background-color: #1BC656; } - -.browser-window .circles { - margin: 5px 12px; } - -.browser-window .content { - margin: 0; - width: 100%; - display: inline-block; - border-radius: 0 0 5px 5px; - background-color: #fafafa; } - -.browser-window .row { - margin: 0; } - -.clear { - clear: both; } - -/********************** -**********************/ -.dynamic-color .red, .dynamic-color .pink, .dynamic-color .purple, .dynamic-color .deep-purple, .dynamic-color .indigo, .dynamic-color .blue, .dynamic-color .light-blue, .dynamic-color .cyan, .dynamic-color .teal, .dynamic-color .green, .dynamic-color .light-green, .dynamic-color .lime, .dynamic-color .yellow, .dynamic-color .amber, .dynamic-color .orange, .dynamic-color .deep-orange, .dynamic-color .brown, .dynamic-color .grey, .dynamic-color .blue-grey, .dynamic-color .black, .dynamic-color .white, .dynamic-color .transparent { - height: 55px; - width: 100%; - padding: 0 15px; - line-height: 55px; - font-weight: 500; - font-size: 12px; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } -.dynamic-color .col { - margin-bottom: 55px; } - -.center { - text-align: center; - vertical-align: middle; } - -.material-icons.icon-demo { - line-height: 50px; } - -.icon-container i { - font-size: 3em; - margin-bottom: 10px; } - -.icon-container .icon-preview { - height: 120px; - text-align: center; } - -.icon-container span { - display: block; } - -.icon-holder { - display: block; - text-align: center; - width: 150px; - height: 115px; - float: left; - margin: 0 0px 15px 0px; } - .icon-holder p { - margin: 0 0; } - -.tabs-wrapper { - position: relative; - height: 48px; } - .tabs-wrapper .row.pinned { - position: fixed; - width: 100%; - top: 0; - z-index: 10; } - -.shadow-demo { - background-color: #26a69a; - width: 100px; - height: 100px; - margin: 20px auto; } - @media only screen and (max-width: 600px) { - .shadow-demo { - width: 150px; - height: 150px; } } - -.parallax-container .text-center { - position: absolute; - top: 50%; - left: 0; - right: 0; - margin-top: -27px; } - -ul.table-of-contents { - margin-top: 0; - padding-top: 48px; } - -code, pre { - position: relative; - font-size: 1.1rem; } - -.directory-markup { - font-size: 1rem; - line-height: 1.1rem !important; } - -pre[class*="language-"] { - padding: 25px 12px 7px 12px; - border: solid 1px rgba(51, 51, 51, 0.12); } - pre[class*="language-"]:before { - position: absolute; - padding: 1px 5px; - background: #e8e6e3; - top: 0; - left: 0; - font-family: "Roboto", sans-serif; - -webkit-font-smoothing: antialiased; - color: #555; - content: attr(class); - font-size: .9rem; - border: solid 1px rgba(51, 51, 51, 0.12); - border-top: none; - border-left: none; } - -.toc-wrapper { - position: relative; - margin-top: 42px; } - -#carbonads { - max-width: 150px; - display: inline-block; - position: relative; - text-align: left; - -webkit-font-smoothing: antialiased; } - #carbonads > span, #carbonads span.carbon-wrap { - height: 100px; - display: block; } - #carbonads a.carbon-img { - height: 100px; - display: inline-block; - margin-right: 10px; } - #carbonads a.carbon-text, #carbonads input[type="submit"] { - position: relative; - top: 0; - width: 150px; - vertical-align: top; - display: inline-block; - font-size: 13px; - color: #E57373; } - #carbonads a.carbon-poweredby { - position: relative; - left: 28px; - font-size: 11px; - color: #EF9A9A; } - -.buysellads #carbonads > span, .buysellads #carbonads span.carbon-wrap { - height: auto; } -.buysellads #carbonads a.carbon-text { - top: 5px; - left: 0; - width: 130px; - display: block; - font-size: 13px; - -webkit-font-smoothing: antialiased; - color: #E57373; } -.buysellads #carbonads a.carbon-poweredby { - top: 5px; } - -.buysellads-header #carbonads > span, .buysellads-header #carbonads span.carbon-wrap { - height: auto; } -.buysellads-header #carbonads a.carbon-text { - color: #fff; } -.buysellads-header #carbonads a.carbon-poweredby { - color: rgba(255, 255, 255, 0.8); } - -.buysellads { - -webkit-font-smoothing: antialiased; - position: relative; } - .buysellads .bsa_it.one { - width: 130px; - position: absolute; - left: 0; - top: 50px; } - .buysellads .bsa_it.one .bsa_it_p { - left: 0; - bottom: -15px; } - .buysellads .bsa_it.one .bsa_it_ad .bsa_it_t { - color: #E57373; } - .buysellads .bsa_it.one .bsa_it_ad .bsa_it_d { - color: #EF9A9A; } - .buysellads .bsa_it_ad a { - display: block; - width: 130px; } - -.buysellads-header { - margin-top: 30px; } - .buysellads-header .bsa_it.one .bsa_it_p { - bottom: -20px; } - -.bsa_it.one { - min-width: 230px; - max-width: 270px; - display: inline-block; - text-align: left; } - .bsa_it.one .bsa_it_ad { - border: 0; - padding: 0; - background-color: transparent; } - .bsa_it.one .bsa_it_ad .bsa_it_t { - color: #fff; } - .bsa_it.one .bsa_it_ad .bsa_it_d { - color: #FFCDD2; } - .bsa_it.one .bsa_it_p { - right: auto; - left: 40px; - bottom: -5px; } - .bsa_it.one .bsa_it_p a { - color: #FFCDD2; } - -footer { - font-size: .9rem; } - -body.parallax-demo footer { - margin-top: 0; } - -.image-container { - width: 100%; } - .image-container img { - max-width: 100%; } - -@media only screen and (max-width : 600px) { - .mobile-image { - max-width: 100%; } } - -.waves-color-demo .collection-item { - height: 57px; - line-height: 57px; } - .waves-color-demo .collection-item code { - line-height: 57px; } -.waves-color-demo .btn:not(.waves-light), .waves-color-demo .btn-large:not(.waves-light) { - background-color: #FFFFFF; - color: #212121; } - -.card-panel span, .card-content p { - -webkit-font-smoothing: antialiased; } - -#images .card-panel .row { - margin-bottom: 0; } - -.pushpin-demo { - position: relative; - height: 100px; } - -#pushpin-demo-1 { - display: block; - height: inherit; - background-color: #ddd; } - -.valign-demo { - height: 400px; - background-color: #ddd; } - -.talign-demo { - height: 100px; - background-color: #ddd; } - -#staggered-test li, #image-test { - opacity: 0; } - -#tx-live-lang-container { - background-color: #fcfcfc; - z-index: 999; } - #tx-live-lang-container #tx-live-lang-picker { - background-color: #fcfcfc; } - #tx-live-lang-container #tx-live-lang-picker li { - color: rgba(0, 0, 0, 0.87); } - #tx-live-lang-container #tx-live-lang-picker li:hover { - color: inherit; - background-color: #fdeaeb; } - #tx-live-lang-container .txlive-langselector-toggle { - border-bottom: 2px solid #ee6e73; } - #tx-live-lang-container .txlive-langselector-current { - color: rgba(0, 0, 0, 0.87); } - #tx-live-lang-container .txlive-langselector-marker { - border-bottom: 4px solid rgba(0, 0, 0, 0.61); } - -#download-thanks { - display: none; } - -#twitter-widget-0 { - width: 190px !important; } diff --git a/dialogs.html b/dialogs.html deleted file mode 100644 index 148674e517..0000000000 --- a/dialogs.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - Dialogs - Materialize - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      -
      -
      - -
      -

      Dialogs are content that are not original visible on a page but show up with extra information if needed. The transitions should make the appearance of the dialog make sense and not jarring to the user.

      -

      Toasts

      -

      Materialize provides an easy way for you to send unobtrusive alerts to your users through toasts. These toasts are also placed and sized responsively, try it out by clicking the button below on different device sizes.

      - Toast! -

      To do this, call the Materialize.toast() function programatically in JavaScript.

      -
      
      -  // Materialize.toast(message, displayLength, className, completeCallback);
      -  Materialize.toast('I am a toast!', 4000) // 4000 is the duration of the toast
      -        
      -

      One way to add this into your application is to add this as an onclick event to a button

      -
      
      -  <a class="btn" onclick="Materialize.toast('I am a toast', 4000)">Toast!</a>
      -        
      - -

      Custom HTML

      -

      You can pass in an HTML String as the first argument as well. Take a look at the example below, where we pass in text as well as a flat button. If you call an external function instead of in-line JavaScript, you will not need to escape quotation marks.

      - Toast with Action -
      
      -  var $toastContent = $('I am toast content');
      -  Materialize.toast($toastContent, 5000);
      -        
      - -

      Callback

      -

      You can have the toast callback a function when it has been dismissed

      - Toast! -
      
      -  <a class="btn" onclick="Materialize.toast('I am a toast', 4000,'',function(){alert('Your toast was dismissed')})">Toast!</a>
      -        
      - -

      Styling Toasts

      -

      We've added the ability to customize your toasts easily. You can pass in classes as an optional parameter into the toast function. We've added a rounded class for you, but you can create your own CSS classes and apply them to toasts. Checkout out our full example below.

      - - Round Toast! - -
      
      -  Materialize.toast('I am a toast!', 3000, 'rounded') // 'rounded' is the class I'm applying to the toast
      -        
      -
      - - - - -
      -

      Tooltips

      - -

      Tooltips are small, interactive, textual hints for mainly graphical elements. When using icons for actions you can use a tooltip to give people clarification on its function.

      - - - -

      Add the Tooltipped class to your element and add either top, bottom, left, right on data-tooltip to control the position.

      -
      
      -  <!-- data-position can be : bottom, top, left, or right -->
      -  <!-- data-delay controls delay before tooltip shows (in milliseconds)-->
      -  <a class="btn tooltipped" data-position="bottom" data-delay="50" data-tooltip="I am tooltip">Hover me!</a>
      -        
      -
      -

      Initialization

      -

      Tooltips are initialized automatically, but if you have dynamically added tooltips, you will need to initialize them.

      -
      
      -  $(document).ready(function(){
      -    $('.tooltipped').tooltip({delay: 50});
      -  });
      -        
      - -

      Removal

      -

      To remove the tooltip from the button, pass in 'remove' as the option to the tooltip function

      -
      
      -  // This will remove the tooltip functionality for the buttons on this page
      -  $('.tooltipped').tooltip('remove');
      -        
      -
      - -
      - - - -
      -
      -
      - - -
      -
      - -
      -
      -
      - -
      -
      - - -
      -
      -
      -
      -
      Help Materialize Grow
      -

      We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

      -
      - - - -
      - -
      -
      -
      Join the Discussion
      -

      We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

      - Chat -
      -
      -
      Connect
      - -
      - -
      -
      -
      -
      -
      - -
      - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dist/css/materialize.css b/dist/css/materialize.css index 6b76355de8..5d19b13de2 100644 --- a/dist/css/materialize.css +++ b/dist/css/materialize.css @@ -1,1651 +1,2149 @@ -/*! - * Materialize v0.97.0 (http://materializecss.com) - * Copyright 2014-2015 Materialize - * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) - */ +/*! + * Materialize v0.100.2 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +.materialize-red { + background-color: #e51c23 !important; +} + +.materialize-red-text { + color: #e51c23 !important; +} + .materialize-red.lighten-5 { - background-color: #fdeaeb !important; } + background-color: #fdeaeb !important; +} .materialize-red-text.text-lighten-5 { - color: #fdeaeb !important; } + color: #fdeaeb !important; +} .materialize-red.lighten-4 { - background-color: #f8c1c3 !important; } + background-color: #f8c1c3 !important; +} .materialize-red-text.text-lighten-4 { - color: #f8c1c3 !important; } + color: #f8c1c3 !important; +} .materialize-red.lighten-3 { - background-color: #f3989b !important; } + background-color: #f3989b !important; +} .materialize-red-text.text-lighten-3 { - color: #f3989b !important; } + color: #f3989b !important; +} .materialize-red.lighten-2 { - background-color: #ee6e73 !important; } + background-color: #ee6e73 !important; +} .materialize-red-text.text-lighten-2 { - color: #ee6e73 !important; } + color: #ee6e73 !important; +} .materialize-red.lighten-1 { - background-color: #ea454b !important; } + background-color: #ea454b !important; +} .materialize-red-text.text-lighten-1 { - color: #ea454b !important; } - -.materialize-red { - background-color: #e51c23 !important; } - -.materialize-red-text { - color: #e51c23 !important; } + color: #ea454b !important; +} .materialize-red.darken-1 { - background-color: #d0181e !important; } + background-color: #d0181e !important; +} .materialize-red-text.text-darken-1 { - color: #d0181e !important; } + color: #d0181e !important; +} .materialize-red.darken-2 { - background-color: #b9151b !important; } + background-color: #b9151b !important; +} .materialize-red-text.text-darken-2 { - color: #b9151b !important; } + color: #b9151b !important; +} .materialize-red.darken-3 { - background-color: #a21318 !important; } + background-color: #a21318 !important; +} .materialize-red-text.text-darken-3 { - color: #a21318 !important; } + color: #a21318 !important; +} .materialize-red.darken-4 { - background-color: #8b1014 !important; } + background-color: #8b1014 !important; +} .materialize-red-text.text-darken-4 { - color: #8b1014 !important; } + color: #8b1014 !important; +} + +.red { + background-color: #F44336 !important; +} + +.red-text { + color: #F44336 !important; +} .red.lighten-5 { - background-color: #FFEBEE !important; } + background-color: #FFEBEE !important; +} .red-text.text-lighten-5 { - color: #FFEBEE !important; } + color: #FFEBEE !important; +} .red.lighten-4 { - background-color: #FFCDD2 !important; } + background-color: #FFCDD2 !important; +} .red-text.text-lighten-4 { - color: #FFCDD2 !important; } + color: #FFCDD2 !important; +} .red.lighten-3 { - background-color: #EF9A9A !important; } + background-color: #EF9A9A !important; +} .red-text.text-lighten-3 { - color: #EF9A9A !important; } + color: #EF9A9A !important; +} .red.lighten-2 { - background-color: #E57373 !important; } + background-color: #E57373 !important; +} .red-text.text-lighten-2 { - color: #E57373 !important; } + color: #E57373 !important; +} .red.lighten-1 { - background-color: #EF5350 !important; } + background-color: #EF5350 !important; +} .red-text.text-lighten-1 { - color: #EF5350 !important; } - -.red { - background-color: #F44336 !important; } - -.red-text { - color: #F44336 !important; } + color: #EF5350 !important; +} .red.darken-1 { - background-color: #E53935 !important; } + background-color: #E53935 !important; +} .red-text.text-darken-1 { - color: #E53935 !important; } + color: #E53935 !important; +} .red.darken-2 { - background-color: #D32F2F !important; } + background-color: #D32F2F !important; +} .red-text.text-darken-2 { - color: #D32F2F !important; } + color: #D32F2F !important; +} .red.darken-3 { - background-color: #C62828 !important; } + background-color: #C62828 !important; +} .red-text.text-darken-3 { - color: #C62828 !important; } + color: #C62828 !important; +} .red.darken-4 { - background-color: #B71C1C !important; } + background-color: #B71C1C !important; +} .red-text.text-darken-4 { - color: #B71C1C !important; } + color: #B71C1C !important; +} .red.accent-1 { - background-color: #FF8A80 !important; } + background-color: #FF8A80 !important; +} .red-text.text-accent-1 { - color: #FF8A80 !important; } + color: #FF8A80 !important; +} .red.accent-2 { - background-color: #FF5252 !important; } + background-color: #FF5252 !important; +} .red-text.text-accent-2 { - color: #FF5252 !important; } + color: #FF5252 !important; +} .red.accent-3 { - background-color: #FF1744 !important; } + background-color: #FF1744 !important; +} .red-text.text-accent-3 { - color: #FF1744 !important; } + color: #FF1744 !important; +} .red.accent-4 { - background-color: #D50000 !important; } + background-color: #D50000 !important; +} .red-text.text-accent-4 { - color: #D50000 !important; } + color: #D50000 !important; +} + +.pink { + background-color: #e91e63 !important; +} + +.pink-text { + color: #e91e63 !important; +} .pink.lighten-5 { - background-color: #fce4ec !important; } + background-color: #fce4ec !important; +} .pink-text.text-lighten-5 { - color: #fce4ec !important; } + color: #fce4ec !important; +} .pink.lighten-4 { - background-color: #f8bbd0 !important; } + background-color: #f8bbd0 !important; +} .pink-text.text-lighten-4 { - color: #f8bbd0 !important; } + color: #f8bbd0 !important; +} .pink.lighten-3 { - background-color: #f48fb1 !important; } + background-color: #f48fb1 !important; +} .pink-text.text-lighten-3 { - color: #f48fb1 !important; } + color: #f48fb1 !important; +} .pink.lighten-2 { - background-color: #f06292 !important; } + background-color: #f06292 !important; +} .pink-text.text-lighten-2 { - color: #f06292 !important; } + color: #f06292 !important; +} .pink.lighten-1 { - background-color: #ec407a !important; } + background-color: #ec407a !important; +} .pink-text.text-lighten-1 { - color: #ec407a !important; } - -.pink { - background-color: #e91e63 !important; } - -.pink-text { - color: #e91e63 !important; } + color: #ec407a !important; +} .pink.darken-1 { - background-color: #d81b60 !important; } + background-color: #d81b60 !important; +} .pink-text.text-darken-1 { - color: #d81b60 !important; } + color: #d81b60 !important; +} .pink.darken-2 { - background-color: #c2185b !important; } + background-color: #c2185b !important; +} .pink-text.text-darken-2 { - color: #c2185b !important; } + color: #c2185b !important; +} .pink.darken-3 { - background-color: #ad1457 !important; } + background-color: #ad1457 !important; +} .pink-text.text-darken-3 { - color: #ad1457 !important; } + color: #ad1457 !important; +} .pink.darken-4 { - background-color: #880e4f !important; } + background-color: #880e4f !important; +} .pink-text.text-darken-4 { - color: #880e4f !important; } + color: #880e4f !important; +} .pink.accent-1 { - background-color: #ff80ab !important; } + background-color: #ff80ab !important; +} .pink-text.text-accent-1 { - color: #ff80ab !important; } + color: #ff80ab !important; +} .pink.accent-2 { - background-color: #ff4081 !important; } + background-color: #ff4081 !important; +} .pink-text.text-accent-2 { - color: #ff4081 !important; } + color: #ff4081 !important; +} .pink.accent-3 { - background-color: #f50057 !important; } + background-color: #f50057 !important; +} .pink-text.text-accent-3 { - color: #f50057 !important; } + color: #f50057 !important; +} .pink.accent-4 { - background-color: #c51162 !important; } + background-color: #c51162 !important; +} .pink-text.text-accent-4 { - color: #c51162 !important; } + color: #c51162 !important; +} + +.purple { + background-color: #9c27b0 !important; +} + +.purple-text { + color: #9c27b0 !important; +} .purple.lighten-5 { - background-color: #f3e5f5 !important; } + background-color: #f3e5f5 !important; +} .purple-text.text-lighten-5 { - color: #f3e5f5 !important; } + color: #f3e5f5 !important; +} .purple.lighten-4 { - background-color: #e1bee7 !important; } + background-color: #e1bee7 !important; +} .purple-text.text-lighten-4 { - color: #e1bee7 !important; } + color: #e1bee7 !important; +} .purple.lighten-3 { - background-color: #ce93d8 !important; } + background-color: #ce93d8 !important; +} .purple-text.text-lighten-3 { - color: #ce93d8 !important; } + color: #ce93d8 !important; +} .purple.lighten-2 { - background-color: #ba68c8 !important; } + background-color: #ba68c8 !important; +} .purple-text.text-lighten-2 { - color: #ba68c8 !important; } + color: #ba68c8 !important; +} .purple.lighten-1 { - background-color: #ab47bc !important; } + background-color: #ab47bc !important; +} .purple-text.text-lighten-1 { - color: #ab47bc !important; } - -.purple { - background-color: #9c27b0 !important; } - -.purple-text { - color: #9c27b0 !important; } + color: #ab47bc !important; +} .purple.darken-1 { - background-color: #8e24aa !important; } + background-color: #8e24aa !important; +} .purple-text.text-darken-1 { - color: #8e24aa !important; } + color: #8e24aa !important; +} .purple.darken-2 { - background-color: #7b1fa2 !important; } + background-color: #7b1fa2 !important; +} .purple-text.text-darken-2 { - color: #7b1fa2 !important; } + color: #7b1fa2 !important; +} .purple.darken-3 { - background-color: #6a1b9a !important; } + background-color: #6a1b9a !important; +} .purple-text.text-darken-3 { - color: #6a1b9a !important; } + color: #6a1b9a !important; +} .purple.darken-4 { - background-color: #4a148c !important; } + background-color: #4a148c !important; +} .purple-text.text-darken-4 { - color: #4a148c !important; } + color: #4a148c !important; +} .purple.accent-1 { - background-color: #ea80fc !important; } + background-color: #ea80fc !important; +} .purple-text.text-accent-1 { - color: #ea80fc !important; } + color: #ea80fc !important; +} .purple.accent-2 { - background-color: #e040fb !important; } + background-color: #e040fb !important; +} .purple-text.text-accent-2 { - color: #e040fb !important; } + color: #e040fb !important; +} .purple.accent-3 { - background-color: #d500f9 !important; } + background-color: #d500f9 !important; +} .purple-text.text-accent-3 { - color: #d500f9 !important; } + color: #d500f9 !important; +} .purple.accent-4 { - background-color: #aa00ff !important; } + background-color: #aa00ff !important; +} .purple-text.text-accent-4 { - color: #aa00ff !important; } + color: #aa00ff !important; +} + +.deep-purple { + background-color: #673ab7 !important; +} + +.deep-purple-text { + color: #673ab7 !important; +} .deep-purple.lighten-5 { - background-color: #ede7f6 !important; } + background-color: #ede7f6 !important; +} .deep-purple-text.text-lighten-5 { - color: #ede7f6 !important; } + color: #ede7f6 !important; +} .deep-purple.lighten-4 { - background-color: #d1c4e9 !important; } + background-color: #d1c4e9 !important; +} .deep-purple-text.text-lighten-4 { - color: #d1c4e9 !important; } + color: #d1c4e9 !important; +} .deep-purple.lighten-3 { - background-color: #b39ddb !important; } + background-color: #b39ddb !important; +} .deep-purple-text.text-lighten-3 { - color: #b39ddb !important; } + color: #b39ddb !important; +} .deep-purple.lighten-2 { - background-color: #9575cd !important; } + background-color: #9575cd !important; +} .deep-purple-text.text-lighten-2 { - color: #9575cd !important; } + color: #9575cd !important; +} .deep-purple.lighten-1 { - background-color: #7e57c2 !important; } + background-color: #7e57c2 !important; +} .deep-purple-text.text-lighten-1 { - color: #7e57c2 !important; } - -.deep-purple { - background-color: #673ab7 !important; } - -.deep-purple-text { - color: #673ab7 !important; } + color: #7e57c2 !important; +} .deep-purple.darken-1 { - background-color: #5e35b1 !important; } + background-color: #5e35b1 !important; +} .deep-purple-text.text-darken-1 { - color: #5e35b1 !important; } + color: #5e35b1 !important; +} .deep-purple.darken-2 { - background-color: #512da8 !important; } + background-color: #512da8 !important; +} .deep-purple-text.text-darken-2 { - color: #512da8 !important; } + color: #512da8 !important; +} .deep-purple.darken-3 { - background-color: #4527a0 !important; } + background-color: #4527a0 !important; +} .deep-purple-text.text-darken-3 { - color: #4527a0 !important; } + color: #4527a0 !important; +} .deep-purple.darken-4 { - background-color: #311b92 !important; } + background-color: #311b92 !important; +} .deep-purple-text.text-darken-4 { - color: #311b92 !important; } + color: #311b92 !important; +} .deep-purple.accent-1 { - background-color: #b388ff !important; } + background-color: #b388ff !important; +} .deep-purple-text.text-accent-1 { - color: #b388ff !important; } + color: #b388ff !important; +} .deep-purple.accent-2 { - background-color: #7c4dff !important; } + background-color: #7c4dff !important; +} .deep-purple-text.text-accent-2 { - color: #7c4dff !important; } + color: #7c4dff !important; +} .deep-purple.accent-3 { - background-color: #651fff !important; } + background-color: #651fff !important; +} .deep-purple-text.text-accent-3 { - color: #651fff !important; } + color: #651fff !important; +} .deep-purple.accent-4 { - background-color: #6200ea !important; } + background-color: #6200ea !important; +} .deep-purple-text.text-accent-4 { - color: #6200ea !important; } + color: #6200ea !important; +} + +.indigo { + background-color: #3f51b5 !important; +} + +.indigo-text { + color: #3f51b5 !important; +} .indigo.lighten-5 { - background-color: #e8eaf6 !important; } + background-color: #e8eaf6 !important; +} .indigo-text.text-lighten-5 { - color: #e8eaf6 !important; } + color: #e8eaf6 !important; +} .indigo.lighten-4 { - background-color: #c5cae9 !important; } + background-color: #c5cae9 !important; +} .indigo-text.text-lighten-4 { - color: #c5cae9 !important; } + color: #c5cae9 !important; +} .indigo.lighten-3 { - background-color: #9fa8da !important; } + background-color: #9fa8da !important; +} .indigo-text.text-lighten-3 { - color: #9fa8da !important; } + color: #9fa8da !important; +} .indigo.lighten-2 { - background-color: #7986cb !important; } + background-color: #7986cb !important; +} .indigo-text.text-lighten-2 { - color: #7986cb !important; } + color: #7986cb !important; +} .indigo.lighten-1 { - background-color: #5c6bc0 !important; } + background-color: #5c6bc0 !important; +} .indigo-text.text-lighten-1 { - color: #5c6bc0 !important; } - -.indigo { - background-color: #3f51b5 !important; } - -.indigo-text { - color: #3f51b5 !important; } + color: #5c6bc0 !important; +} .indigo.darken-1 { - background-color: #3949ab !important; } + background-color: #3949ab !important; +} .indigo-text.text-darken-1 { - color: #3949ab !important; } + color: #3949ab !important; +} .indigo.darken-2 { - background-color: #303f9f !important; } + background-color: #303f9f !important; +} .indigo-text.text-darken-2 { - color: #303f9f !important; } + color: #303f9f !important; +} .indigo.darken-3 { - background-color: #283593 !important; } + background-color: #283593 !important; +} .indigo-text.text-darken-3 { - color: #283593 !important; } + color: #283593 !important; +} .indigo.darken-4 { - background-color: #1a237e !important; } + background-color: #1a237e !important; +} .indigo-text.text-darken-4 { - color: #1a237e !important; } + color: #1a237e !important; +} .indigo.accent-1 { - background-color: #8c9eff !important; } + background-color: #8c9eff !important; +} .indigo-text.text-accent-1 { - color: #8c9eff !important; } + color: #8c9eff !important; +} .indigo.accent-2 { - background-color: #536dfe !important; } + background-color: #536dfe !important; +} .indigo-text.text-accent-2 { - color: #536dfe !important; } + color: #536dfe !important; +} .indigo.accent-3 { - background-color: #3d5afe !important; } + background-color: #3d5afe !important; +} .indigo-text.text-accent-3 { - color: #3d5afe !important; } + color: #3d5afe !important; +} .indigo.accent-4 { - background-color: #304ffe !important; } + background-color: #304ffe !important; +} .indigo-text.text-accent-4 { - color: #304ffe !important; } + color: #304ffe !important; +} + +.blue { + background-color: #2196F3 !important; +} + +.blue-text { + color: #2196F3 !important; +} .blue.lighten-5 { - background-color: #E3F2FD !important; } + background-color: #E3F2FD !important; +} .blue-text.text-lighten-5 { - color: #E3F2FD !important; } + color: #E3F2FD !important; +} .blue.lighten-4 { - background-color: #BBDEFB !important; } + background-color: #BBDEFB !important; +} .blue-text.text-lighten-4 { - color: #BBDEFB !important; } + color: #BBDEFB !important; +} .blue.lighten-3 { - background-color: #90CAF9 !important; } + background-color: #90CAF9 !important; +} .blue-text.text-lighten-3 { - color: #90CAF9 !important; } + color: #90CAF9 !important; +} .blue.lighten-2 { - background-color: #64B5F6 !important; } + background-color: #64B5F6 !important; +} .blue-text.text-lighten-2 { - color: #64B5F6 !important; } + color: #64B5F6 !important; +} .blue.lighten-1 { - background-color: #42A5F5 !important; } + background-color: #42A5F5 !important; +} .blue-text.text-lighten-1 { - color: #42A5F5 !important; } - -.blue { - background-color: #2196F3 !important; } - -.blue-text { - color: #2196F3 !important; } + color: #42A5F5 !important; +} .blue.darken-1 { - background-color: #1E88E5 !important; } + background-color: #1E88E5 !important; +} .blue-text.text-darken-1 { - color: #1E88E5 !important; } + color: #1E88E5 !important; +} .blue.darken-2 { - background-color: #1976D2 !important; } + background-color: #1976D2 !important; +} .blue-text.text-darken-2 { - color: #1976D2 !important; } + color: #1976D2 !important; +} .blue.darken-3 { - background-color: #1565C0 !important; } + background-color: #1565C0 !important; +} .blue-text.text-darken-3 { - color: #1565C0 !important; } + color: #1565C0 !important; +} .blue.darken-4 { - background-color: #0D47A1 !important; } + background-color: #0D47A1 !important; +} .blue-text.text-darken-4 { - color: #0D47A1 !important; } + color: #0D47A1 !important; +} .blue.accent-1 { - background-color: #82B1FF !important; } + background-color: #82B1FF !important; +} .blue-text.text-accent-1 { - color: #82B1FF !important; } + color: #82B1FF !important; +} .blue.accent-2 { - background-color: #448AFF !important; } + background-color: #448AFF !important; +} .blue-text.text-accent-2 { - color: #448AFF !important; } + color: #448AFF !important; +} .blue.accent-3 { - background-color: #2979FF !important; } + background-color: #2979FF !important; +} .blue-text.text-accent-3 { - color: #2979FF !important; } + color: #2979FF !important; +} .blue.accent-4 { - background-color: #2962FF !important; } + background-color: #2962FF !important; +} .blue-text.text-accent-4 { - color: #2962FF !important; } + color: #2962FF !important; +} + +.light-blue { + background-color: #03a9f4 !important; +} + +.light-blue-text { + color: #03a9f4 !important; +} .light-blue.lighten-5 { - background-color: #e1f5fe !important; } + background-color: #e1f5fe !important; +} .light-blue-text.text-lighten-5 { - color: #e1f5fe !important; } + color: #e1f5fe !important; +} .light-blue.lighten-4 { - background-color: #b3e5fc !important; } + background-color: #b3e5fc !important; +} .light-blue-text.text-lighten-4 { - color: #b3e5fc !important; } + color: #b3e5fc !important; +} .light-blue.lighten-3 { - background-color: #81d4fa !important; } + background-color: #81d4fa !important; +} .light-blue-text.text-lighten-3 { - color: #81d4fa !important; } + color: #81d4fa !important; +} .light-blue.lighten-2 { - background-color: #4fc3f7 !important; } + background-color: #4fc3f7 !important; +} .light-blue-text.text-lighten-2 { - color: #4fc3f7 !important; } + color: #4fc3f7 !important; +} .light-blue.lighten-1 { - background-color: #29b6f6 !important; } + background-color: #29b6f6 !important; +} .light-blue-text.text-lighten-1 { - color: #29b6f6 !important; } - -.light-blue { - background-color: #03a9f4 !important; } - -.light-blue-text { - color: #03a9f4 !important; } + color: #29b6f6 !important; +} .light-blue.darken-1 { - background-color: #039be5 !important; } + background-color: #039be5 !important; +} .light-blue-text.text-darken-1 { - color: #039be5 !important; } + color: #039be5 !important; +} .light-blue.darken-2 { - background-color: #0288d1 !important; } + background-color: #0288d1 !important; +} .light-blue-text.text-darken-2 { - color: #0288d1 !important; } + color: #0288d1 !important; +} .light-blue.darken-3 { - background-color: #0277bd !important; } + background-color: #0277bd !important; +} .light-blue-text.text-darken-3 { - color: #0277bd !important; } + color: #0277bd !important; +} .light-blue.darken-4 { - background-color: #01579b !important; } + background-color: #01579b !important; +} .light-blue-text.text-darken-4 { - color: #01579b !important; } + color: #01579b !important; +} .light-blue.accent-1 { - background-color: #80d8ff !important; } + background-color: #80d8ff !important; +} .light-blue-text.text-accent-1 { - color: #80d8ff !important; } + color: #80d8ff !important; +} .light-blue.accent-2 { - background-color: #40c4ff !important; } + background-color: #40c4ff !important; +} .light-blue-text.text-accent-2 { - color: #40c4ff !important; } + color: #40c4ff !important; +} .light-blue.accent-3 { - background-color: #00b0ff !important; } + background-color: #00b0ff !important; +} .light-blue-text.text-accent-3 { - color: #00b0ff !important; } + color: #00b0ff !important; +} .light-blue.accent-4 { - background-color: #0091ea !important; } + background-color: #0091ea !important; +} .light-blue-text.text-accent-4 { - color: #0091ea !important; } + color: #0091ea !important; +} + +.cyan { + background-color: #00bcd4 !important; +} + +.cyan-text { + color: #00bcd4 !important; +} .cyan.lighten-5 { - background-color: #e0f7fa !important; } + background-color: #e0f7fa !important; +} .cyan-text.text-lighten-5 { - color: #e0f7fa !important; } + color: #e0f7fa !important; +} .cyan.lighten-4 { - background-color: #b2ebf2 !important; } + background-color: #b2ebf2 !important; +} .cyan-text.text-lighten-4 { - color: #b2ebf2 !important; } + color: #b2ebf2 !important; +} .cyan.lighten-3 { - background-color: #80deea !important; } + background-color: #80deea !important; +} .cyan-text.text-lighten-3 { - color: #80deea !important; } + color: #80deea !important; +} .cyan.lighten-2 { - background-color: #4dd0e1 !important; } + background-color: #4dd0e1 !important; +} .cyan-text.text-lighten-2 { - color: #4dd0e1 !important; } + color: #4dd0e1 !important; +} .cyan.lighten-1 { - background-color: #26c6da !important; } + background-color: #26c6da !important; +} .cyan-text.text-lighten-1 { - color: #26c6da !important; } - -.cyan { - background-color: #00bcd4 !important; } - -.cyan-text { - color: #00bcd4 !important; } + color: #26c6da !important; +} .cyan.darken-1 { - background-color: #00acc1 !important; } + background-color: #00acc1 !important; +} .cyan-text.text-darken-1 { - color: #00acc1 !important; } + color: #00acc1 !important; +} .cyan.darken-2 { - background-color: #0097a7 !important; } + background-color: #0097a7 !important; +} .cyan-text.text-darken-2 { - color: #0097a7 !important; } + color: #0097a7 !important; +} .cyan.darken-3 { - background-color: #00838f !important; } + background-color: #00838f !important; +} .cyan-text.text-darken-3 { - color: #00838f !important; } + color: #00838f !important; +} .cyan.darken-4 { - background-color: #006064 !important; } + background-color: #006064 !important; +} .cyan-text.text-darken-4 { - color: #006064 !important; } + color: #006064 !important; +} .cyan.accent-1 { - background-color: #84ffff !important; } + background-color: #84ffff !important; +} .cyan-text.text-accent-1 { - color: #84ffff !important; } + color: #84ffff !important; +} .cyan.accent-2 { - background-color: #18ffff !important; } + background-color: #18ffff !important; +} .cyan-text.text-accent-2 { - color: #18ffff !important; } + color: #18ffff !important; +} .cyan.accent-3 { - background-color: #00e5ff !important; } + background-color: #00e5ff !important; +} .cyan-text.text-accent-3 { - color: #00e5ff !important; } + color: #00e5ff !important; +} .cyan.accent-4 { - background-color: #00b8d4 !important; } + background-color: #00b8d4 !important; +} .cyan-text.text-accent-4 { - color: #00b8d4 !important; } + color: #00b8d4 !important; +} + +.teal { + background-color: #009688 !important; +} + +.teal-text { + color: #009688 !important; +} .teal.lighten-5 { - background-color: #e0f2f1 !important; } + background-color: #e0f2f1 !important; +} .teal-text.text-lighten-5 { - color: #e0f2f1 !important; } + color: #e0f2f1 !important; +} .teal.lighten-4 { - background-color: #b2dfdb !important; } + background-color: #b2dfdb !important; +} .teal-text.text-lighten-4 { - color: #b2dfdb !important; } + color: #b2dfdb !important; +} .teal.lighten-3 { - background-color: #80cbc4 !important; } + background-color: #80cbc4 !important; +} .teal-text.text-lighten-3 { - color: #80cbc4 !important; } + color: #80cbc4 !important; +} .teal.lighten-2 { - background-color: #4db6ac !important; } + background-color: #4db6ac !important; +} .teal-text.text-lighten-2 { - color: #4db6ac !important; } + color: #4db6ac !important; +} .teal.lighten-1 { - background-color: #26a69a !important; } + background-color: #26a69a !important; +} .teal-text.text-lighten-1 { - color: #26a69a !important; } - -.teal { - background-color: #009688 !important; } - -.teal-text { - color: #009688 !important; } + color: #26a69a !important; +} .teal.darken-1 { - background-color: #00897b !important; } + background-color: #00897b !important; +} .teal-text.text-darken-1 { - color: #00897b !important; } + color: #00897b !important; +} .teal.darken-2 { - background-color: #00796b !important; } + background-color: #00796b !important; +} .teal-text.text-darken-2 { - color: #00796b !important; } + color: #00796b !important; +} .teal.darken-3 { - background-color: #00695c !important; } + background-color: #00695c !important; +} .teal-text.text-darken-3 { - color: #00695c !important; } + color: #00695c !important; +} .teal.darken-4 { - background-color: #004d40 !important; } + background-color: #004d40 !important; +} .teal-text.text-darken-4 { - color: #004d40 !important; } + color: #004d40 !important; +} .teal.accent-1 { - background-color: #a7ffeb !important; } + background-color: #a7ffeb !important; +} .teal-text.text-accent-1 { - color: #a7ffeb !important; } + color: #a7ffeb !important; +} .teal.accent-2 { - background-color: #64ffda !important; } + background-color: #64ffda !important; +} .teal-text.text-accent-2 { - color: #64ffda !important; } + color: #64ffda !important; +} .teal.accent-3 { - background-color: #1de9b6 !important; } + background-color: #1de9b6 !important; +} .teal-text.text-accent-3 { - color: #1de9b6 !important; } + color: #1de9b6 !important; +} .teal.accent-4 { - background-color: #00bfa5 !important; } + background-color: #00bfa5 !important; +} .teal-text.text-accent-4 { - color: #00bfa5 !important; } + color: #00bfa5 !important; +} + +.green { + background-color: #4CAF50 !important; +} + +.green-text { + color: #4CAF50 !important; +} .green.lighten-5 { - background-color: #E8F5E9 !important; } + background-color: #E8F5E9 !important; +} .green-text.text-lighten-5 { - color: #E8F5E9 !important; } + color: #E8F5E9 !important; +} .green.lighten-4 { - background-color: #C8E6C9 !important; } + background-color: #C8E6C9 !important; +} .green-text.text-lighten-4 { - color: #C8E6C9 !important; } + color: #C8E6C9 !important; +} .green.lighten-3 { - background-color: #A5D6A7 !important; } + background-color: #A5D6A7 !important; +} .green-text.text-lighten-3 { - color: #A5D6A7 !important; } + color: #A5D6A7 !important; +} .green.lighten-2 { - background-color: #81C784 !important; } + background-color: #81C784 !important; +} .green-text.text-lighten-2 { - color: #81C784 !important; } + color: #81C784 !important; +} .green.lighten-1 { - background-color: #66BB6A !important; } + background-color: #66BB6A !important; +} .green-text.text-lighten-1 { - color: #66BB6A !important; } - -.green { - background-color: #4CAF50 !important; } - -.green-text { - color: #4CAF50 !important; } + color: #66BB6A !important; +} .green.darken-1 { - background-color: #43A047 !important; } + background-color: #43A047 !important; +} .green-text.text-darken-1 { - color: #43A047 !important; } + color: #43A047 !important; +} .green.darken-2 { - background-color: #388E3C !important; } + background-color: #388E3C !important; +} .green-text.text-darken-2 { - color: #388E3C !important; } + color: #388E3C !important; +} .green.darken-3 { - background-color: #2E7D32 !important; } + background-color: #2E7D32 !important; +} .green-text.text-darken-3 { - color: #2E7D32 !important; } + color: #2E7D32 !important; +} .green.darken-4 { - background-color: #1B5E20 !important; } + background-color: #1B5E20 !important; +} .green-text.text-darken-4 { - color: #1B5E20 !important; } + color: #1B5E20 !important; +} .green.accent-1 { - background-color: #B9F6CA !important; } + background-color: #B9F6CA !important; +} .green-text.text-accent-1 { - color: #B9F6CA !important; } + color: #B9F6CA !important; +} .green.accent-2 { - background-color: #69F0AE !important; } + background-color: #69F0AE !important; +} .green-text.text-accent-2 { - color: #69F0AE !important; } + color: #69F0AE !important; +} .green.accent-3 { - background-color: #00E676 !important; } + background-color: #00E676 !important; +} .green-text.text-accent-3 { - color: #00E676 !important; } + color: #00E676 !important; +} .green.accent-4 { - background-color: #00C853 !important; } + background-color: #00C853 !important; +} .green-text.text-accent-4 { - color: #00C853 !important; } + color: #00C853 !important; +} + +.light-green { + background-color: #8bc34a !important; +} + +.light-green-text { + color: #8bc34a !important; +} .light-green.lighten-5 { - background-color: #f1f8e9 !important; } + background-color: #f1f8e9 !important; +} .light-green-text.text-lighten-5 { - color: #f1f8e9 !important; } + color: #f1f8e9 !important; +} .light-green.lighten-4 { - background-color: #dcedc8 !important; } + background-color: #dcedc8 !important; +} .light-green-text.text-lighten-4 { - color: #dcedc8 !important; } + color: #dcedc8 !important; +} .light-green.lighten-3 { - background-color: #c5e1a5 !important; } + background-color: #c5e1a5 !important; +} .light-green-text.text-lighten-3 { - color: #c5e1a5 !important; } + color: #c5e1a5 !important; +} .light-green.lighten-2 { - background-color: #aed581 !important; } + background-color: #aed581 !important; +} .light-green-text.text-lighten-2 { - color: #aed581 !important; } + color: #aed581 !important; +} .light-green.lighten-1 { - background-color: #9ccc65 !important; } + background-color: #9ccc65 !important; +} .light-green-text.text-lighten-1 { - color: #9ccc65 !important; } - -.light-green { - background-color: #8bc34a !important; } - -.light-green-text { - color: #8bc34a !important; } + color: #9ccc65 !important; +} .light-green.darken-1 { - background-color: #7cb342 !important; } + background-color: #7cb342 !important; +} .light-green-text.text-darken-1 { - color: #7cb342 !important; } + color: #7cb342 !important; +} .light-green.darken-2 { - background-color: #689f38 !important; } + background-color: #689f38 !important; +} .light-green-text.text-darken-2 { - color: #689f38 !important; } + color: #689f38 !important; +} .light-green.darken-3 { - background-color: #558b2f !important; } + background-color: #558b2f !important; +} .light-green-text.text-darken-3 { - color: #558b2f !important; } + color: #558b2f !important; +} .light-green.darken-4 { - background-color: #33691e !important; } + background-color: #33691e !important; +} .light-green-text.text-darken-4 { - color: #33691e !important; } + color: #33691e !important; +} .light-green.accent-1 { - background-color: #ccff90 !important; } + background-color: #ccff90 !important; +} .light-green-text.text-accent-1 { - color: #ccff90 !important; } + color: #ccff90 !important; +} .light-green.accent-2 { - background-color: #b2ff59 !important; } + background-color: #b2ff59 !important; +} .light-green-text.text-accent-2 { - color: #b2ff59 !important; } + color: #b2ff59 !important; +} .light-green.accent-3 { - background-color: #76ff03 !important; } + background-color: #76ff03 !important; +} .light-green-text.text-accent-3 { - color: #76ff03 !important; } + color: #76ff03 !important; +} .light-green.accent-4 { - background-color: #64dd17 !important; } + background-color: #64dd17 !important; +} .light-green-text.text-accent-4 { - color: #64dd17 !important; } + color: #64dd17 !important; +} + +.lime { + background-color: #cddc39 !important; +} + +.lime-text { + color: #cddc39 !important; +} .lime.lighten-5 { - background-color: #f9fbe7 !important; } + background-color: #f9fbe7 !important; +} .lime-text.text-lighten-5 { - color: #f9fbe7 !important; } + color: #f9fbe7 !important; +} .lime.lighten-4 { - background-color: #f0f4c3 !important; } + background-color: #f0f4c3 !important; +} .lime-text.text-lighten-4 { - color: #f0f4c3 !important; } + color: #f0f4c3 !important; +} .lime.lighten-3 { - background-color: #e6ee9c !important; } + background-color: #e6ee9c !important; +} .lime-text.text-lighten-3 { - color: #e6ee9c !important; } + color: #e6ee9c !important; +} .lime.lighten-2 { - background-color: #dce775 !important; } + background-color: #dce775 !important; +} .lime-text.text-lighten-2 { - color: #dce775 !important; } + color: #dce775 !important; +} .lime.lighten-1 { - background-color: #d4e157 !important; } + background-color: #d4e157 !important; +} .lime-text.text-lighten-1 { - color: #d4e157 !important; } - -.lime { - background-color: #cddc39 !important; } - -.lime-text { - color: #cddc39 !important; } + color: #d4e157 !important; +} .lime.darken-1 { - background-color: #c0ca33 !important; } + background-color: #c0ca33 !important; +} .lime-text.text-darken-1 { - color: #c0ca33 !important; } + color: #c0ca33 !important; +} .lime.darken-2 { - background-color: #afb42b !important; } + background-color: #afb42b !important; +} .lime-text.text-darken-2 { - color: #afb42b !important; } + color: #afb42b !important; +} .lime.darken-3 { - background-color: #9e9d24 !important; } + background-color: #9e9d24 !important; +} .lime-text.text-darken-3 { - color: #9e9d24 !important; } + color: #9e9d24 !important; +} .lime.darken-4 { - background-color: #827717 !important; } + background-color: #827717 !important; +} .lime-text.text-darken-4 { - color: #827717 !important; } + color: #827717 !important; +} .lime.accent-1 { - background-color: #f4ff81 !important; } + background-color: #f4ff81 !important; +} .lime-text.text-accent-1 { - color: #f4ff81 !important; } + color: #f4ff81 !important; +} .lime.accent-2 { - background-color: #eeff41 !important; } + background-color: #eeff41 !important; +} .lime-text.text-accent-2 { - color: #eeff41 !important; } + color: #eeff41 !important; +} .lime.accent-3 { - background-color: #c6ff00 !important; } + background-color: #c6ff00 !important; +} .lime-text.text-accent-3 { - color: #c6ff00 !important; } + color: #c6ff00 !important; +} .lime.accent-4 { - background-color: #aeea00 !important; } + background-color: #aeea00 !important; +} .lime-text.text-accent-4 { - color: #aeea00 !important; } + color: #aeea00 !important; +} + +.yellow { + background-color: #ffeb3b !important; +} + +.yellow-text { + color: #ffeb3b !important; +} .yellow.lighten-5 { - background-color: #fffde7 !important; } + background-color: #fffde7 !important; +} .yellow-text.text-lighten-5 { - color: #fffde7 !important; } + color: #fffde7 !important; +} .yellow.lighten-4 { - background-color: #fff9c4 !important; } + background-color: #fff9c4 !important; +} .yellow-text.text-lighten-4 { - color: #fff9c4 !important; } + color: #fff9c4 !important; +} .yellow.lighten-3 { - background-color: #fff59d !important; } + background-color: #fff59d !important; +} .yellow-text.text-lighten-3 { - color: #fff59d !important; } + color: #fff59d !important; +} .yellow.lighten-2 { - background-color: #fff176 !important; } + background-color: #fff176 !important; +} .yellow-text.text-lighten-2 { - color: #fff176 !important; } + color: #fff176 !important; +} .yellow.lighten-1 { - background-color: #ffee58 !important; } + background-color: #ffee58 !important; +} .yellow-text.text-lighten-1 { - color: #ffee58 !important; } - -.yellow { - background-color: #ffeb3b !important; } - -.yellow-text { - color: #ffeb3b !important; } + color: #ffee58 !important; +} .yellow.darken-1 { - background-color: #fdd835 !important; } + background-color: #fdd835 !important; +} .yellow-text.text-darken-1 { - color: #fdd835 !important; } + color: #fdd835 !important; +} .yellow.darken-2 { - background-color: #fbc02d !important; } + background-color: #fbc02d !important; +} .yellow-text.text-darken-2 { - color: #fbc02d !important; } + color: #fbc02d !important; +} .yellow.darken-3 { - background-color: #f9a825 !important; } + background-color: #f9a825 !important; +} .yellow-text.text-darken-3 { - color: #f9a825 !important; } + color: #f9a825 !important; +} .yellow.darken-4 { - background-color: #f57f17 !important; } + background-color: #f57f17 !important; +} .yellow-text.text-darken-4 { - color: #f57f17 !important; } + color: #f57f17 !important; +} .yellow.accent-1 { - background-color: #ffff8d !important; } + background-color: #ffff8d !important; +} .yellow-text.text-accent-1 { - color: #ffff8d !important; } + color: #ffff8d !important; +} .yellow.accent-2 { - background-color: #ffff00 !important; } + background-color: #ffff00 !important; +} .yellow-text.text-accent-2 { - color: #ffff00 !important; } + color: #ffff00 !important; +} .yellow.accent-3 { - background-color: #ffea00 !important; } + background-color: #ffea00 !important; +} .yellow-text.text-accent-3 { - color: #ffea00 !important; } + color: #ffea00 !important; +} .yellow.accent-4 { - background-color: #ffd600 !important; } + background-color: #ffd600 !important; +} .yellow-text.text-accent-4 { - color: #ffd600 !important; } + color: #ffd600 !important; +} + +.amber { + background-color: #ffc107 !important; +} + +.amber-text { + color: #ffc107 !important; +} .amber.lighten-5 { - background-color: #fff8e1 !important; } + background-color: #fff8e1 !important; +} .amber-text.text-lighten-5 { - color: #fff8e1 !important; } + color: #fff8e1 !important; +} .amber.lighten-4 { - background-color: #ffecb3 !important; } + background-color: #ffecb3 !important; +} .amber-text.text-lighten-4 { - color: #ffecb3 !important; } + color: #ffecb3 !important; +} .amber.lighten-3 { - background-color: #ffe082 !important; } + background-color: #ffe082 !important; +} .amber-text.text-lighten-3 { - color: #ffe082 !important; } + color: #ffe082 !important; +} .amber.lighten-2 { - background-color: #ffd54f !important; } + background-color: #ffd54f !important; +} .amber-text.text-lighten-2 { - color: #ffd54f !important; } + color: #ffd54f !important; +} .amber.lighten-1 { - background-color: #ffca28 !important; } + background-color: #ffca28 !important; +} .amber-text.text-lighten-1 { - color: #ffca28 !important; } - -.amber { - background-color: #ffc107 !important; } - -.amber-text { - color: #ffc107 !important; } + color: #ffca28 !important; +} .amber.darken-1 { - background-color: #ffb300 !important; } + background-color: #ffb300 !important; +} .amber-text.text-darken-1 { - color: #ffb300 !important; } + color: #ffb300 !important; +} .amber.darken-2 { - background-color: #ffa000 !important; } + background-color: #ffa000 !important; +} .amber-text.text-darken-2 { - color: #ffa000 !important; } + color: #ffa000 !important; +} .amber.darken-3 { - background-color: #ff8f00 !important; } + background-color: #ff8f00 !important; +} .amber-text.text-darken-3 { - color: #ff8f00 !important; } + color: #ff8f00 !important; +} .amber.darken-4 { - background-color: #ff6f00 !important; } + background-color: #ff6f00 !important; +} .amber-text.text-darken-4 { - color: #ff6f00 !important; } + color: #ff6f00 !important; +} .amber.accent-1 { - background-color: #ffe57f !important; } + background-color: #ffe57f !important; +} .amber-text.text-accent-1 { - color: #ffe57f !important; } + color: #ffe57f !important; +} .amber.accent-2 { - background-color: #ffd740 !important; } + background-color: #ffd740 !important; +} .amber-text.text-accent-2 { - color: #ffd740 !important; } + color: #ffd740 !important; +} .amber.accent-3 { - background-color: #ffc400 !important; } + background-color: #ffc400 !important; +} .amber-text.text-accent-3 { - color: #ffc400 !important; } + color: #ffc400 !important; +} .amber.accent-4 { - background-color: #ffab00 !important; } + background-color: #ffab00 !important; +} .amber-text.text-accent-4 { - color: #ffab00 !important; } + color: #ffab00 !important; +} + +.orange { + background-color: #ff9800 !important; +} + +.orange-text { + color: #ff9800 !important; +} .orange.lighten-5 { - background-color: #fff3e0 !important; } + background-color: #fff3e0 !important; +} .orange-text.text-lighten-5 { - color: #fff3e0 !important; } + color: #fff3e0 !important; +} .orange.lighten-4 { - background-color: #ffe0b2 !important; } + background-color: #ffe0b2 !important; +} .orange-text.text-lighten-4 { - color: #ffe0b2 !important; } + color: #ffe0b2 !important; +} .orange.lighten-3 { - background-color: #ffcc80 !important; } + background-color: #ffcc80 !important; +} .orange-text.text-lighten-3 { - color: #ffcc80 !important; } + color: #ffcc80 !important; +} .orange.lighten-2 { - background-color: #ffb74d !important; } + background-color: #ffb74d !important; +} .orange-text.text-lighten-2 { - color: #ffb74d !important; } + color: #ffb74d !important; +} .orange.lighten-1 { - background-color: #ffa726 !important; } + background-color: #ffa726 !important; +} .orange-text.text-lighten-1 { - color: #ffa726 !important; } - -.orange { - background-color: #ff9800 !important; } - -.orange-text { - color: #ff9800 !important; } + color: #ffa726 !important; +} .orange.darken-1 { - background-color: #fb8c00 !important; } + background-color: #fb8c00 !important; +} .orange-text.text-darken-1 { - color: #fb8c00 !important; } + color: #fb8c00 !important; +} .orange.darken-2 { - background-color: #f57c00 !important; } + background-color: #f57c00 !important; +} .orange-text.text-darken-2 { - color: #f57c00 !important; } + color: #f57c00 !important; +} .orange.darken-3 { - background-color: #ef6c00 !important; } + background-color: #ef6c00 !important; +} .orange-text.text-darken-3 { - color: #ef6c00 !important; } + color: #ef6c00 !important; +} .orange.darken-4 { - background-color: #e65100 !important; } + background-color: #e65100 !important; +} .orange-text.text-darken-4 { - color: #e65100 !important; } + color: #e65100 !important; +} .orange.accent-1 { - background-color: #ffd180 !important; } + background-color: #ffd180 !important; +} .orange-text.text-accent-1 { - color: #ffd180 !important; } + color: #ffd180 !important; +} .orange.accent-2 { - background-color: #ffab40 !important; } + background-color: #ffab40 !important; +} .orange-text.text-accent-2 { - color: #ffab40 !important; } + color: #ffab40 !important; +} .orange.accent-3 { - background-color: #ff9100 !important; } + background-color: #ff9100 !important; +} .orange-text.text-accent-3 { - color: #ff9100 !important; } + color: #ff9100 !important; +} .orange.accent-4 { - background-color: #ff6d00 !important; } + background-color: #ff6d00 !important; +} .orange-text.text-accent-4 { - color: #ff6d00 !important; } + color: #ff6d00 !important; +} + +.deep-orange { + background-color: #ff5722 !important; +} + +.deep-orange-text { + color: #ff5722 !important; +} .deep-orange.lighten-5 { - background-color: #fbe9e7 !important; } + background-color: #fbe9e7 !important; +} .deep-orange-text.text-lighten-5 { - color: #fbe9e7 !important; } + color: #fbe9e7 !important; +} .deep-orange.lighten-4 { - background-color: #ffccbc !important; } + background-color: #ffccbc !important; +} .deep-orange-text.text-lighten-4 { - color: #ffccbc !important; } + color: #ffccbc !important; +} .deep-orange.lighten-3 { - background-color: #ffab91 !important; } + background-color: #ffab91 !important; +} .deep-orange-text.text-lighten-3 { - color: #ffab91 !important; } + color: #ffab91 !important; +} .deep-orange.lighten-2 { - background-color: #ff8a65 !important; } + background-color: #ff8a65 !important; +} .deep-orange-text.text-lighten-2 { - color: #ff8a65 !important; } + color: #ff8a65 !important; +} .deep-orange.lighten-1 { - background-color: #ff7043 !important; } + background-color: #ff7043 !important; +} .deep-orange-text.text-lighten-1 { - color: #ff7043 !important; } - -.deep-orange { - background-color: #ff5722 !important; } - -.deep-orange-text { - color: #ff5722 !important; } + color: #ff7043 !important; +} .deep-orange.darken-1 { - background-color: #f4511e !important; } + background-color: #f4511e !important; +} .deep-orange-text.text-darken-1 { - color: #f4511e !important; } + color: #f4511e !important; +} .deep-orange.darken-2 { - background-color: #e64a19 !important; } + background-color: #e64a19 !important; +} .deep-orange-text.text-darken-2 { - color: #e64a19 !important; } + color: #e64a19 !important; +} .deep-orange.darken-3 { - background-color: #d84315 !important; } + background-color: #d84315 !important; +} .deep-orange-text.text-darken-3 { - color: #d84315 !important; } + color: #d84315 !important; +} .deep-orange.darken-4 { - background-color: #bf360c !important; } + background-color: #bf360c !important; +} .deep-orange-text.text-darken-4 { - color: #bf360c !important; } + color: #bf360c !important; +} .deep-orange.accent-1 { - background-color: #ff9e80 !important; } + background-color: #ff9e80 !important; +} .deep-orange-text.text-accent-1 { - color: #ff9e80 !important; } + color: #ff9e80 !important; +} .deep-orange.accent-2 { - background-color: #ff6e40 !important; } + background-color: #ff6e40 !important; +} .deep-orange-text.text-accent-2 { - color: #ff6e40 !important; } + color: #ff6e40 !important; +} .deep-orange.accent-3 { - background-color: #ff3d00 !important; } + background-color: #ff3d00 !important; +} .deep-orange-text.text-accent-3 { - color: #ff3d00 !important; } + color: #ff3d00 !important; +} .deep-orange.accent-4 { - background-color: #dd2c00 !important; } + background-color: #dd2c00 !important; +} .deep-orange-text.text-accent-4 { - color: #dd2c00 !important; } + color: #dd2c00 !important; +} + +.brown { + background-color: #795548 !important; +} + +.brown-text { + color: #795548 !important; +} .brown.lighten-5 { - background-color: #efebe9 !important; } + background-color: #efebe9 !important; +} .brown-text.text-lighten-5 { - color: #efebe9 !important; } + color: #efebe9 !important; +} .brown.lighten-4 { - background-color: #d7ccc8 !important; } + background-color: #d7ccc8 !important; +} .brown-text.text-lighten-4 { - color: #d7ccc8 !important; } + color: #d7ccc8 !important; +} .brown.lighten-3 { - background-color: #bcaaa4 !important; } + background-color: #bcaaa4 !important; +} .brown-text.text-lighten-3 { - color: #bcaaa4 !important; } + color: #bcaaa4 !important; +} .brown.lighten-2 { - background-color: #a1887f !important; } + background-color: #a1887f !important; +} .brown-text.text-lighten-2 { - color: #a1887f !important; } + color: #a1887f !important; +} .brown.lighten-1 { - background-color: #8d6e63 !important; } + background-color: #8d6e63 !important; +} .brown-text.text-lighten-1 { - color: #8d6e63 !important; } - -.brown { - background-color: #795548 !important; } - -.brown-text { - color: #795548 !important; } + color: #8d6e63 !important; +} .brown.darken-1 { - background-color: #6d4c41 !important; } + background-color: #6d4c41 !important; +} .brown-text.text-darken-1 { - color: #6d4c41 !important; } + color: #6d4c41 !important; +} .brown.darken-2 { - background-color: #5d4037 !important; } + background-color: #5d4037 !important; +} .brown-text.text-darken-2 { - color: #5d4037 !important; } + color: #5d4037 !important; +} .brown.darken-3 { - background-color: #4e342e !important; } + background-color: #4e342e !important; +} .brown-text.text-darken-3 { - color: #4e342e !important; } + color: #4e342e !important; +} .brown.darken-4 { - background-color: #3e2723 !important; } + background-color: #3e2723 !important; +} .brown-text.text-darken-4 { - color: #3e2723 !important; } + color: #3e2723 !important; +} + +.blue-grey { + background-color: #607d8b !important; +} + +.blue-grey-text { + color: #607d8b !important; +} .blue-grey.lighten-5 { - background-color: #eceff1 !important; } + background-color: #eceff1 !important; +} .blue-grey-text.text-lighten-5 { - color: #eceff1 !important; } + color: #eceff1 !important; +} .blue-grey.lighten-4 { - background-color: #cfd8dc !important; } + background-color: #cfd8dc !important; +} .blue-grey-text.text-lighten-4 { - color: #cfd8dc !important; } + color: #cfd8dc !important; +} .blue-grey.lighten-3 { - background-color: #b0bec5 !important; } + background-color: #b0bec5 !important; +} .blue-grey-text.text-lighten-3 { - color: #b0bec5 !important; } + color: #b0bec5 !important; +} .blue-grey.lighten-2 { - background-color: #90a4ae !important; } + background-color: #90a4ae !important; +} .blue-grey-text.text-lighten-2 { - color: #90a4ae !important; } + color: #90a4ae !important; +} .blue-grey.lighten-1 { - background-color: #78909c !important; } + background-color: #78909c !important; +} .blue-grey-text.text-lighten-1 { - color: #78909c !important; } - -.blue-grey { - background-color: #607d8b !important; } - -.blue-grey-text { - color: #607d8b !important; } + color: #78909c !important; +} .blue-grey.darken-1 { - background-color: #546e7a !important; } + background-color: #546e7a !important; +} .blue-grey-text.text-darken-1 { - color: #546e7a !important; } + color: #546e7a !important; +} .blue-grey.darken-2 { - background-color: #455a64 !important; } + background-color: #455a64 !important; +} .blue-grey-text.text-darken-2 { - color: #455a64 !important; } + color: #455a64 !important; +} .blue-grey.darken-3 { - background-color: #37474f !important; } + background-color: #37474f !important; +} .blue-grey-text.text-darken-3 { - color: #37474f !important; } + color: #37474f !important; +} .blue-grey.darken-4 { - background-color: #263238 !important; } + background-color: #263238 !important; +} .blue-grey-text.text-darken-4 { - color: #263238 !important; } + color: #263238 !important; +} + +.grey { + background-color: #9e9e9e !important; +} + +.grey-text { + color: #9e9e9e !important; +} .grey.lighten-5 { - background-color: #fafafa !important; } + background-color: #fafafa !important; +} .grey-text.text-lighten-5 { - color: #fafafa !important; } + color: #fafafa !important; +} .grey.lighten-4 { - background-color: #f5f5f5 !important; } + background-color: #f5f5f5 !important; +} .grey-text.text-lighten-4 { - color: #f5f5f5 !important; } + color: #f5f5f5 !important; +} .grey.lighten-3 { - background-color: #eeeeee !important; } + background-color: #eeeeee !important; +} .grey-text.text-lighten-3 { - color: #eeeeee !important; } + color: #eeeeee !important; +} .grey.lighten-2 { - background-color: #e0e0e0 !important; } + background-color: #e0e0e0 !important; +} .grey-text.text-lighten-2 { - color: #e0e0e0 !important; } + color: #e0e0e0 !important; +} .grey.lighten-1 { - background-color: #bdbdbd !important; } + background-color: #bdbdbd !important; +} .grey-text.text-lighten-1 { - color: #bdbdbd !important; } - -.grey { - background-color: #9e9e9e !important; } - -.grey-text { - color: #9e9e9e !important; } + color: #bdbdbd !important; +} .grey.darken-1 { - background-color: #757575 !important; } + background-color: #757575 !important; +} .grey-text.text-darken-1 { - color: #757575 !important; } + color: #757575 !important; +} .grey.darken-2 { - background-color: #616161 !important; } + background-color: #616161 !important; +} .grey-text.text-darken-2 { - color: #616161 !important; } + color: #616161 !important; +} .grey.darken-3 { - background-color: #424242 !important; } + background-color: #424242 !important; +} .grey-text.text-darken-3 { - color: #424242 !important; } + color: #424242 !important; +} .grey.darken-4 { - background-color: #212121 !important; } + background-color: #212121 !important; +} .grey-text.text-darken-4 { - color: #212121 !important; } - -.shades.black { - background-color: #000000 !important; } - -.shades-text.text-black { - color: #000000 !important; } - -.shades.white { - background-color: #FFFFFF !important; } - -.shades-text.text-white { - color: #FFFFFF !important; } - -.shades.transparent { - background-color: transparent !important; } - -.shades-text.text-transparent { - color: transparent !important; } + color: #212121 !important; +} .black { - background-color: #000000 !important; } + background-color: #000000 !important; +} .black-text { - color: #000000 !important; } + color: #000000 !important; +} .white { - background-color: #FFFFFF !important; } + background-color: #FFFFFF !important; +} .white-text { - color: #FFFFFF !important; } + color: #FFFFFF !important; +} .transparent { - background-color: transparent !important; } + background-color: transparent !important; +} .transparent-text { - color: transparent !important; } - -/*** Colors ***/ -/*** Badges ***/ -/*** Buttons ***/ -/*** Cards ***/ -/*** Collapsible ***/ -/*** Dropdown ***/ -/*** Fonts ***/ -/*** Forms ***/ -/*** Global ***/ -/*** Navbar ***/ -/*** SideNav ***/ -/*** Photo Slider ***/ -/*** Tabs ***/ -/*** Tables ***/ -/*** Toasts ***/ -/*** Typography ***/ -/*** Collections ***/ -/* Progress Bar */ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. + color: transparent !important; +} + +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. */ html { font-family: sans-serif; @@ -1653,725 +2151,993 @@ html { -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; - /* 2 */ } + /* 2 */ +} -/** - * Remove default margin. +/** + * Remove default margin. */ body { - margin: 0; } + margin: 0; +} -/* HTML5 display definitions +/* HTML5 display definitions ========================================================================== */ -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. */ -article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { - display: block; } +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ -audio, canvas, progress, video { +audio, +canvas, +progress, +video { display: inline-block; /* 1 */ vertical-align: baseline; - /* 2 */ } + /* 2 */ +} -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. */ audio:not([controls]) { display: none; - height: 0; } + height: 0; +} -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. */ -[hidden], template { - display: none; } +[hidden], +template { + display: none; +} -/* Links +/* Links ========================================================================== */ -/** - * Remove the gray background color from active links in IE 10. +/** + * Remove the gray background color from active links in IE 10. */ a { - background-color: transparent; } + background-color: transparent; +} -/** - * Improve readability when focused and also mouse hovered in all browsers. +/** + * Improve readability of focused elements when they are also in an + * active/hover state. */ -a:active, a:hover { - outline: 0; } +a:active, +a:hover { + outline: 0; +} -/* Text-level semantics +/* Text-level semantics ========================================================================== */ -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { - border-bottom: 1px dotted; } + border-bottom: 1px dotted; +} -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ -b, strong { - font-weight: bold; } +b, +strong { + font-weight: bold; +} -/** - * Address styling not present in Safari and Chrome. +/** + * Address styling not present in Safari and Chrome. */ dfn { - font-style: italic; } + font-style: italic; +} -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. */ h1 { font-size: 2em; - margin: 0.67em 0; } + margin: 0.67em 0; +} -/** - * Address styling not present in IE 8/9. +/** + * Address styling not present in IE 8/9. */ mark { background: #ff0; - color: #000; } + color: #000; +} -/** - * Address inconsistent and variable font size in all browsers. +/** + * Address inconsistent and variable font size in all browsers. */ small { - font-size: 80%; } + font-size: 80%; +} -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. */ -sub, sup { +sub, +sup { font-size: 75%; line-height: 0; position: relative; - vertical-align: baseline; } + vertical-align: baseline; +} sup { - top: -0.5em; } + top: -0.5em; +} sub { - bottom: -0.25em; } + bottom: -0.25em; +} -/* Embedded content +/* Embedded content ========================================================================== */ -/** - * Remove border when inside `a` element in IE 8/9/10. +/** + * Remove border when inside `a` element in IE 8/9/10. */ img { - border: 0; } + border: 0; +} -/** - * Correct overflow not hidden in IE 9/10/11. +/** + * Correct overflow not hidden in IE 9/10/11. */ svg:not(:root) { - overflow: hidden; } + overflow: hidden; +} -/* Grouping content +/* Grouping content ========================================================================== */ -/** - * Address margin not present in IE 8/9 and Safari. +/** + * Address margin not present in IE 8/9 and Safari. */ figure { - margin: 1em 40px; } + margin: 1em 40px; +} -/** - * Address differences between Firefox and other browsers. +/** + * Address differences between Firefox and other browsers. */ hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; } + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} -/** - * Contain overflow in all browsers. +/** + * Contain overflow in all browsers. */ pre { - overflow: auto; } + overflow: auto; +} -/** - * Address odd `em`-unit font size rendering in all browsers. +/** + * Address odd `em`-unit font size rendering in all browsers. */ -code, kbd, pre, samp { +code, +kbd, +pre, +samp { font-family: monospace, monospace; - font-size: 1em; } + font-size: 1em; +} -/* Forms +/* Forms ========================================================================== */ -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. */ -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */ -button, input, optgroup, select, textarea { +button, +input, +optgroup, +select, +textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; - /* 3 */ } + /* 3 */ +} -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. */ button { - overflow: visible; } - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. */ -button, select { - text-transform: none; } - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. */ -/* 1 */ -html input[type="button"], button, input[type="reset"], input[type="submit"] { +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; - /* 3 */ } + /* 3 */ +} -/** - * Re-set default cursor for disabled elements. +/** + * Re-set default cursor for disabled elements. */ -button[disabled], html input[disabled] { - cursor: default; } +button[disabled], +html input[disabled] { + cursor: default; +} -/** - * Remove inner padding and border in Firefox 4+. +/** + * Remove inner padding and border in Firefox 4+. */ -button::-moz-focus-inner, input::-moz-focus-inner { +button::-moz-focus-inner, +input::-moz-focus-inner { border: 0; - padding: 0; } + padding: 0; +} -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. */ input { - line-height: normal; } - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. */ -input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ padding: 0; - /* 2 */ } + /* 2 */ +} -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. */ -input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { - height: auto; } - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. */ input[type="search"] { -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; -webkit-box-sizing: content-box; + box-sizing: content-box; /* 2 */ - box-sizing: content-box; } +} -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). */ -input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} -/** - * Define consistent border, margin, and padding. +/** + * Define consistent border, margin, and padding. */ fieldset { border: 1px solid #c0c0c0; margin: 0 2px; - padding: 0.35em 0.625em 0.75em; } + padding: 0.35em 0.625em 0.75em; +} -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. */ legend { border: 0; /* 1 */ padding: 0; - /* 2 */ } + /* 2 */ +} -/** - * Remove default vertical scrollbar in IE 8/9/10/11. +/** + * Remove default vertical scrollbar in IE 8/9/10/11. */ textarea { - overflow: auto; } + overflow: auto; +} -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */ optgroup { - font-weight: bold; } + font-weight: bold; +} -/* Tables +/* Tables ========================================================================== */ -/** - * Remove most spacing between table cells. +/** + * Remove most spacing between table cells. */ table { border-collapse: collapse; - border-spacing: 0; } + border-spacing: 0; +} -td, th { - padding: 0; } +td, +th { + padding: 0; +} html { - box-sizing: border-box; } + -webkit-box-sizing: border-box; + box-sizing: border-box; +} *, *:before, *:after { - box-sizing: inherit; } + -webkit-box-sizing: inherit; + box-sizing: inherit; +} -ul { - list-style-type: none; } +ul:not(.browser-default) { + padding-left: 0; + list-style-type: none; +} + +ul:not(.browser-default) > li { + list-style-type: none; +} a { color: #039be5; text-decoration: none; - -webkit-tap-highlight-color: transparent; } + -webkit-tap-highlight-color: transparent; +} .valign-wrapper { display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; display: -webkit-flex; + display: -ms-flexbox; display: flex; - -webkit-flex-align: center; - -ms-flex-align: center; + -webkit-box-align: center; -webkit-align-items: center; - align-items: center; } - .valign-wrapper .valign { - display: block; } - -ul { - padding: 0; } - ul li { - list-style-type: none; } + -ms-flex-align: center; + align-items: center; +} .clearfix { - clear: both; } + clear: both; +} .z-depth-0 { - box-shadow: none !important; } + -webkit-box-shadow: none !important; + box-shadow: none !important; +} .z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); } + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); +} .z-depth-1-half, .btn:hover, .btn-large:hover, .btn-floating:hover { - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); } + -webkit-box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); + box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); +} .z-depth-2 { - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } + -webkit-box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); +} .z-depth-3 { - box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); } + -webkit-box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.3); + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.3); +} .z-depth-4, .modal { - box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); } + -webkit-box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3); + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3); +} .z-depth-5 { - box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); } + -webkit-box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.3); + box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.3); +} -.hoverable:hover { +.hoverable { + -webkit-transition: -webkit-box-shadow .25s; + transition: -webkit-box-shadow .25s; transition: box-shadow .25s; - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } + transition: box-shadow .25s, -webkit-box-shadow .25s; +} + +.hoverable:hover { + -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} .divider { height: 1px; overflow: hidden; - background-color: #e0e0e0; } + background-color: #e0e0e0; +} blockquote { margin: 20px 0; padding-left: 1.5rem; - border-left: 5px solid #ee6e73; } + border-left: 5px solid #ee6e73; +} i { - line-height: inherit; } - i.left { - float: left; - margin-right: 15px; } - i.right { - float: right; - margin-left: 15px; } - i.tiny { - font-size: 1rem; } - i.small { - font-size: 2rem; } - i.medium { - font-size: 4rem; } - i.large { - font-size: 6rem; } - -img.responsive-img, video.responsive-video { + line-height: inherit; +} + +i.left { + float: left; + margin-right: 15px; +} + +i.right { + float: right; + margin-left: 15px; +} + +i.tiny { + font-size: 1rem; +} + +i.small { + font-size: 2rem; +} + +i.medium { + font-size: 4rem; +} + +i.large { + font-size: 6rem; +} + +img.responsive-img, +video.responsive-video { max-width: 100%; - height: auto; } + height: auto; +} .pagination li { - float: left; + display: inline-block; + border-radius: 2px; + text-align: center; + vertical-align: top; + height: 30px; +} + +.pagination li a { + color: #444; + display: inline-block; font-size: 1.2rem; padding: 0 10px; line-height: 30px; - border-radius: 2px; - text-align: center; } - .pagination li a { - color: #444; } - .pagination li.active a { - color: #fff; } - .pagination li.active { - background-color: #ee6e73; } - .pagination li.disabled a { - cursor: default; - color: #999; } - .pagination li i { - font-size: 2rem; } +} + +.pagination li.active a { + color: #fff; +} + +.pagination li.active { + background-color: #ee6e73; +} + +.pagination li.disabled a { + cursor: default; + color: #999; +} + +.pagination li i { + font-size: 2rem; +} + .pagination li.pages ul li { display: inline-block; - float: none; } + float: none; +} -@media only screen and (max-width : 992px) { +@media only screen and (max-width: 992px) { .pagination { - width: 100%; } - .pagination li.prev, .pagination li.next { - width: 10%; } - .pagination li.pages { - width: 80%; - overflow: hidden; - white-space: nowrap; } } + width: 100%; + } + .pagination li.prev, + .pagination li.next { + width: 10%; + } + .pagination li.pages { + width: 80%; + overflow: hidden; + white-space: nowrap; + } +} + +.breadcrumb { + font-size: 18px; + color: rgba(255, 255, 255, 0.7); +} + +.breadcrumb i, +.breadcrumb [class^="mdi-"], .breadcrumb [class*="mdi-"], +.breadcrumb i.material-icons { + display: inline-block; + float: left; + font-size: 24px; +} + +.breadcrumb:before { + content: '\E5CC'; + color: rgba(255, 255, 255, 0.7); + vertical-align: top; + display: inline-block; + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 25px; + margin: 0 10px 0 8px; + -webkit-font-smoothing: antialiased; +} + +.breadcrumb:first-child:before { + display: none; +} + +.breadcrumb:last-child { + color: #fff; +} .parallax-container { position: relative; overflow: hidden; - height: 500px; } + height: 500px; +} -.parallax { +.parallax-container .parallax { position: absolute; top: 0; left: 0; right: 0; bottom: 0; - z-index: -1; } - .parallax img { - display: none; - position: absolute; - left: 50%; - bottom: 0; - min-width: 100%; - min-height: 100%; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - transform: translateX(-50%); } + z-index: -1; +} + +.parallax-container .parallax img { + display: none; + position: absolute; + left: 50%; + bottom: 0; + min-width: 100%; + min-height: 100%; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} .pin-top, .pin-bottom { - position: relative; } + position: relative; +} .pinned { - position: fixed !important; } + position: fixed !important; +} -/********************* - Transition Classes +/********************* + Transition Classes **********************/ ul.staggered-list li { - opacity: 0; } + opacity: 0; +} .fade-in { opacity: 0; - transform-origin: 0 50%; } + -webkit-transform-origin: 0 50%; + transform-origin: 0 50%; +} -/********************* - Media Query Classes +/********************* + Media Query Classes **********************/ -@media only screen and (max-width : 600px) { +@media only screen and (max-width: 600px) { .hide-on-small-only, .hide-on-small-and-down { - display: none !important; } } + display: none !important; + } +} -@media only screen and (max-width : 992px) { +@media only screen and (max-width: 992px) { .hide-on-med-and-down { - display: none !important; } } + display: none !important; + } +} -@media only screen and (min-width : 601px) { +@media only screen and (min-width: 601px) { .hide-on-med-and-up { - display: none !important; } } + display: none !important; + } +} @media only screen and (min-width: 600px) and (max-width: 992px) { .hide-on-med-only { - display: none !important; } } + display: none !important; + } +} -@media only screen and (min-width : 993px) { +@media only screen and (min-width: 993px) { .hide-on-large-only { - display: none !important; } } + display: none !important; + } +} -@media only screen and (min-width : 993px) { +@media only screen and (min-width: 993px) { .show-on-large { - display: initial !important; } } + display: block !important; + } +} @media only screen and (min-width: 600px) and (max-width: 992px) { .show-on-medium { - display: initial !important; } } + display: block !important; + } +} -@media only screen and (max-width : 600px) { +@media only screen and (max-width: 600px) { .show-on-small { - display: initial !important; } } + display: block !important; + } +} -@media only screen and (min-width : 601px) { +@media only screen and (min-width: 601px) { .show-on-medium-and-up { - display: initial !important; } } + display: block !important; + } +} -@media only screen and (max-width : 992px) { +@media only screen and (max-width: 992px) { .show-on-medium-and-down { - display: initial !important; } } + display: block !important; + } +} -@media only screen and (max-width : 600px) { +@media only screen and (max-width: 600px) { .center-on-small-only { - text-align: center; } } + text-align: center; + } +} -footer.page-footer { - margin-top: 20px; +.page-footer { padding-top: 20px; - background-color: #ee6e73; } - footer.page-footer .footer-copyright { - overflow: hidden; - height: 50px; - line-height: 50px; - color: rgba(255, 255, 255, 0.8); - background-color: rgba(51, 51, 51, 0.08); } + color: #fff; + background-color: #ee6e73; +} + +.page-footer .footer-copyright { + overflow: hidden; + min-height: 50px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 10px 0px; + color: rgba(255, 255, 255, 0.8); + background-color: rgba(51, 51, 51, 0.08); +} table, th, td { - border: none; } + border: none; +} table { width: 100%; - display: table; } - table.bordered > thead > tr, table.bordered > tbody > tr { - border-bottom: 1px solid #d0d0d0; } - table.striped > tbody > tr:nth-child(odd) { - background-color: #f2f2f2; } - table.striped > tbody > tr > td { - border-radius: 0px; } - table.hoverable > tbody > tr { - -webkit-transition: background-color .25s ease; - -moz-transition: background-color .25s ease; - -o-transition: background-color .25s ease; - -ms-transition: background-color .25s ease; - transition: background-color .25s ease; } - table.hoverable > tbody > tr:hover { - background-color: #f2f2f2; } - table.centered thead tr th, table.centered tbody tr td { - text-align: center; } + display: table; +} + +table.bordered > thead > tr, +table.bordered > tbody > tr { + border-bottom: 1px solid #d0d0d0; +} + +table.striped > tbody > tr:nth-child(odd) { + background-color: #f2f2f2; +} + +table.striped > tbody > tr > td { + border-radius: 0; +} + +table.highlight > tbody > tr { + -webkit-transition: background-color .25s ease; + transition: background-color .25s ease; +} + +table.highlight > tbody > tr:hover { + background-color: #f2f2f2; +} + +table.centered thead tr th, table.centered tbody tr td { + text-align: center; +} thead { - border-bottom: 1px solid #d0d0d0; } + border-bottom: 1px solid #d0d0d0; +} td, th { padding: 15px 5px; display: table-cell; text-align: left; vertical-align: middle; - border-radius: 2px; } + border-radius: 2px; +} -@media only screen and (max-width : 992px) { +@media only screen and (max-width: 992px) { table.responsive-table { width: 100%; border-collapse: collapse; border-spacing: 0; display: block; position: relative; - /* sort out borders */ } - table.responsive-table th, table.responsive-table td { - margin: 0; - vertical-align: top; } - table.responsive-table th { - text-align: left; } - table.responsive-table thead { - display: block; - float: left; } - table.responsive-table thead tr { - display: block; - padding: 0 10px 0 0; } - table.responsive-table thead tr th::before { - content: "\00a0"; } - table.responsive-table tbody { - display: block; - width: auto; - position: relative; - overflow-x: auto; - white-space: nowrap; } - table.responsive-table tbody tr { - display: inline-block; - vertical-align: top; } - table.responsive-table th { - display: block; - text-align: right; } - table.responsive-table td { - display: block; - min-height: 1.25em; - text-align: left; } - table.responsive-table tr { - padding: 0 10px; } - table.responsive-table thead { - border: 0; - border-right: 1px solid #d0d0d0; } - table.responsive-table.bordered th { - border-bottom: 0; - border-left: 0; } - table.responsive-table.bordered td { - border-left: 0; - border-right: 0; - border-bottom: 0; } - table.responsive-table.bordered tr { - border: 0; } - table.responsive-table.bordered tbody tr { - border-right: 1px solid #d0d0d0; } } + /* sort out borders */ + } + table.responsive-table td:empty:before { + content: '\00a0'; + } + table.responsive-table th, + table.responsive-table td { + margin: 0; + vertical-align: top; + } + table.responsive-table th { + text-align: left; + } + table.responsive-table thead { + display: block; + float: left; + } + table.responsive-table thead tr { + display: block; + padding: 0 10px 0 0; + } + table.responsive-table thead tr th::before { + content: "\00a0"; + } + table.responsive-table tbody { + display: block; + width: auto; + position: relative; + overflow-x: auto; + white-space: nowrap; + } + table.responsive-table tbody tr { + display: inline-block; + vertical-align: top; + } + table.responsive-table th { + display: block; + text-align: right; + } + table.responsive-table td { + display: block; + min-height: 1.25em; + text-align: left; + } + table.responsive-table tr { + padding: 0 10px; + } + table.responsive-table thead { + border: 0; + border-right: 1px solid #d0d0d0; + } + table.responsive-table.bordered th { + border-bottom: 0; + border-left: 0; + } + table.responsive-table.bordered td { + border-left: 0; + border-right: 0; + border-bottom: 0; + } + table.responsive-table.bordered tr { + border: 0; + } + table.responsive-table.bordered tbody tr { + border-right: 1px solid #d0d0d0; + } +} .collection { margin: 0.5rem 0 1rem 0; border: 1px solid #e0e0e0; border-radius: 2px; overflow: hidden; - position: relative; } - .collection .collection-item { - background-color: #fff; - line-height: 1.5rem; - padding: 10px 20px; - margin: 0; - border-bottom: 1px solid #e0e0e0; } - .collection .collection-item.avatar { - min-height: 84px; - padding-left: 72px; - position: relative; } - .collection .collection-item.avatar .circle { - position: absolute; - width: 42px; - height: 42px; - overflow: hidden; - left: 15px; - display: inline-block; - vertical-align: middle; } - .collection .collection-item.avatar i.circle { - font-size: 18px; - line-height: 42px; - color: #fff; - background-color: #999; - text-align: center; } - .collection .collection-item.avatar .title { - font-size: 16px; } - .collection .collection-item.avatar p { - margin: 0; } - .collection .collection-item.avatar .secondary-content { - position: absolute; - top: 16px; - right: 16px; } - .collection .collection-item:last-child { - border-bottom: none; } - .collection .collection-item.active { - background-color: #26a69a; - color: #eafaf9; } - .collection a.collection-item { - display: block; - -webkit-transition: 0.25s; - -moz-transition: 0.25s; - -o-transition: 0.25s; - -ms-transition: 0.25s; - transition: 0.25s; - color: #26a69a; } - .collection a.collection-item:not(.active):hover { - background-color: #ddd; } - .collection.with-header .collection-header { - background-color: #fff; - border-bottom: 1px solid #e0e0e0; - padding: 10px 20px; } - .collection.with-header .collection-item { - padding-left: 30px; } - .collection.with-header .collection-item.avatar { - padding-left: 72px; } + position: relative; +} -.secondary-content { - float: right; - color: #26a69a; } +.collection .collection-item { + background-color: #fff; + line-height: 1.5rem; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid #e0e0e0; +} -span.badge { - min-width: 3rem; - padding: 0 6px; +.collection .collection-item.avatar { + min-height: 84px; + padding-left: 72px; + position: relative; +} + +.collection .collection-item.avatar:not(.circle-clipper) > .circle, +.collection .collection-item.avatar :not(.circle-clipper) > .circle { + position: absolute; + width: 42px; + height: 42px; + overflow: hidden; + left: 15px; + display: inline-block; + vertical-align: middle; +} + +.collection .collection-item.avatar i.circle { + font-size: 18px; + line-height: 42px; + color: #fff; + background-color: #999; text-align: center; - font-size: 1rem; - line-height: inherit; - color: #757575; +} + +.collection .collection-item.avatar .title { + font-size: 16px; +} + +.collection .collection-item.avatar p { + margin: 0; +} + +.collection .collection-item.avatar .secondary-content { position: absolute; - right: 15px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - span.badge.new { - font-weight: 300; - font-size: 0.8rem; - color: #fff; - background-color: #26a69a; - border-radius: 2px; } - span.badge.new:after { - content: " new"; } + top: 16px; + right: 16px; +} + +.collection .collection-item:last-child { + border-bottom: none; +} + +.collection .collection-item.active { + background-color: #26a69a; + color: #eafaf9; +} + +.collection .collection-item.active .secondary-content { + color: #fff; +} + +.collection a.collection-item { + display: block; + -webkit-transition: .25s; + transition: .25s; + color: #26a69a; +} + +.collection a.collection-item:not(.active):hover { + background-color: #ddd; +} + +.collection.with-header .collection-header { + background-color: #fff; + border-bottom: 1px solid #e0e0e0; + padding: 10px 20px; +} + +.collection.with-header .collection-item { + padding-left: 30px; +} + +.collection.with-header .collection-item.avatar { + padding-left: 72px; +} + +.secondary-content { + float: right; + color: #26a69a; +} + +.collapsible .collection { + margin: 0; + border: none; +} .video-container { position: relative; padding-bottom: 56.25%; - padding-top: 30px; height: 0; - overflow: hidden; } - .video-container.no-controls { - padding-top: 0; } - .video-container iframe, .video-container object, .video-container embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; } + overflow: hidden; +} + +.video-container iframe, .video-container object, .video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} .progress { position: relative; @@ -2381,3349 +3147,1955 @@ span.badge { background-color: #acece6; border-radius: 2px; margin: 0.5rem 0 1rem 0; - overflow: hidden; } - .progress .determinate { - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - background-color: #26a69a; - -webkit-transition: width .3s linear; - -moz-transition: width .3s linear; - -o-transition: width .3s linear; - -ms-transition: width .3s linear; - transition: width .3s linear; } - .progress .indeterminate { - background-color: #26a69a; } - .progress .indeterminate:before { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -moz-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -ms-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - -o-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; } - .progress .indeterminate:after { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -moz-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -ms-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -o-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -webkit-animation-delay: 1.15s; - -moz-animation-delay: 1.15s; - -ms-animation-delay: 1.15s; - -o-animation-delay: 1.15s; - animation-delay: 1.15s; } + overflow: hidden; +} -@-webkit-keyframes indeterminate { - 0% { - left: -35%; - right: 100%; } +.progress .determinate { + position: absolute; + top: 0; + left: 0; + bottom: 0; + background-color: #26a69a; + -webkit-transition: width .3s linear; + transition: width .3s linear; +} - 60% { - left: 100%; - right: -90%; } +.progress .indeterminate { + background-color: #26a69a; +} - 100% { - left: 100%; - right: -90%; } } +.progress .indeterminate:before { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left: 0; + bottom: 0; + will-change: left, right; + -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; + animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; +} + +.progress .indeterminate:after { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left: 0; + bottom: 0; + will-change: left, right; + -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + -webkit-animation-delay: 1.15s; + animation-delay: 1.15s; +} -@-moz-keyframes indeterminate { +@-webkit-keyframes indeterminate { 0% { left: -35%; - right: 100%; } - + right: 100%; + } 60% { left: 100%; - right: -90%; } - + right: -90%; + } 100% { left: 100%; - right: -90%; } } + right: -90%; + } +} @keyframes indeterminate { 0% { left: -35%; - right: 100%; } - + right: 100%; + } 60% { left: 100%; - right: -90%; } - + right: -90%; + } 100% { left: 100%; - right: -90%; } } + right: -90%; + } +} @-webkit-keyframes indeterminate-short { 0% { left: -200%; - right: 100%; } - - 60% { - left: 107%; - right: -8%; } - - 100% { - left: 107%; - right: -8%; } } - -@-moz-keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; } - + right: 100%; + } 60% { left: 107%; - right: -8%; } - + right: -8%; + } 100% { left: 107%; - right: -8%; } } + right: -8%; + } +} @keyframes indeterminate-short { 0% { left: -200%; - right: 100%; } - + right: 100%; + } 60% { left: 107%; - right: -8%; } - + right: -8%; + } 100% { left: 107%; - right: -8%; } } + right: -8%; + } +} -/******************* - Utility Classes +/******************* + Utility Classes *******************/ .hide { - display: none !important; } + display: none !important; +} .left-align { - text-align: left; } + text-align: left; +} .right-align { - text-align: right; } + text-align: right; +} .center, .center-align { - text-align: center; } + text-align: center; +} .left { - float: left !important; } + float: left !important; +} .right { - float: right !important; } + float: right !important; +} -.no-select, input[type=range], input[type=range] + .thumb { - -webkit-touch-callout: none; +.no-select, input[type=range], +input[type=range] + .thumb { -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} .circle { - border-radius: 50%; } + border-radius: 50%; +} .center-block { display: block; margin-left: auto; - margin-right: auto; } + margin-right: auto; +} .truncate { display: block; white-space: nowrap; overflow: hidden; - text-overflow: ellipsis; } + text-overflow: ellipsis; +} .no-padding { - padding: 0 !important; } - -@font-face { - font-family: "Material-Design-Icons"; - src: url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"), url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"), url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"), url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"), url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg"); - font-weight: normal; - font-style: normal; } - -[class^="mdi-"], [class*="mdi-"] { - speak: none; - display: inline-block; - font-family: "Material-Design-Icons"; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-rendering: auto; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); } - [class^="mdi-"]:before, [class*="mdi-"]:before { - display: inline-block; - speak: none; - text-decoration: inherit; } - [class^="mdi-"].pull-left, [class*="mdi-"].pull-left { - margin-right: .3em; } - [class^="mdi-"].pull-right, [class*="mdi-"].pull-right { - margin-left: .3em; } - [class^="mdi-"].mdi-lg:before, [class^="mdi-"].mdi-lg:after, [class*="mdi-"].mdi-lg:before, [class*="mdi-"].mdi-lg:after { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; } - [class^="mdi-"].mdi-2x:before, [class^="mdi-"].mdi-2x:after, [class*="mdi-"].mdi-2x:before, [class*="mdi-"].mdi-2x:after { - font-size: 2em; } - [class^="mdi-"].mdi-3x:before, [class^="mdi-"].mdi-3x:after, [class*="mdi-"].mdi-3x:before, [class*="mdi-"].mdi-3x:after { - font-size: 3em; } - [class^="mdi-"].mdi-4x:before, [class^="mdi-"].mdi-4x:after, [class*="mdi-"].mdi-4x:before, [class*="mdi-"].mdi-4x:after { - font-size: 4em; } - [class^="mdi-"].mdi-5x:before, [class^="mdi-"].mdi-5x:after, [class*="mdi-"].mdi-5x:before, [class*="mdi-"].mdi-5x:after { - font-size: 5em; } - -[class^="mdi-device-signal-cellular-"]:after, [class^="mdi-device-battery-"]:after, [class^="mdi-device-battery-charging-"]:after, [class^="mdi-device-signal-cellular-connected-no-internet-"]:after, [class^="mdi-device-signal-wifi-"]:after, [class^="mdi-device-signal-wifi-statusbar-not-connected"]:after, .mdi-device-network-wifi:after { - opacity: .3; - position: absolute; - left: 0; - top: 0; - z-index: 1; - display: inline-block; - speak: none; - text-decoration: inherit; } + padding: 0 !important; +} -[class^="mdi-device-signal-cellular-"]:after { - content: "\e758"; } +span.badge { + min-width: 3rem; + padding: 0 6px; + margin-left: 14px; + text-align: center; + font-size: 1rem; + line-height: 22px; + height: 22px; + color: #757575; + float: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} -[class^="mdi-device-battery-"]:after { - content: "\e735"; } +span.badge.new { + font-weight: 300; + font-size: 0.8rem; + color: #fff; + background-color: #26a69a; + border-radius: 2px; +} -[class^="mdi-device-battery-charging-"]:after { - content: "\e733"; } +span.badge.new:after { + content: " new"; +} -[class^="mdi-device-signal-cellular-connected-no-internet-"]:after { - content: "\e75d"; } +span.badge[data-badge-caption]::after { + content: " " attr(data-badge-caption); +} -[class^="mdi-device-signal-wifi-"]:after, .mdi-device-network-wifi:after { - content: "\e765"; } +nav ul a span.badge { + display: inline-block; + float: none; + margin-left: 4px; + line-height: 22px; + height: 22px; + -webkit-font-smoothing: auto; +} -[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after { - content: "\e8f7"; } +.collection-item span.badge { + margin-top: calc(0.75rem - 11px); +} -.mdi-device-signal-cellular-off:after, .mdi-device-signal-cellular-null:after, .mdi-device-signal-cellular-no-sim:after, .mdi-device-signal-wifi-off:after, .mdi-device-signal-wifi-4-bar:after, .mdi-device-signal-cellular-4-bar:after, .mdi-device-battery-alert:after, .mdi-device-signal-cellular-connected-no-internet-4-bar:after, .mdi-device-battery-std:after, .mdi-device-battery-full .mdi-device-battery-unknown:after { - content: ""; } +.collapsible span.badge { + margin-left: auto; +} -.mdi-fw { - width: 1.28571429em; - text-align: center; } +.side-nav span.badge { + margin-top: calc(24px - 11px); +} -.mdi-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; } +/* This is needed for some mobile phones to display the Google Icon font properly */ +.material-icons { + text-rendering: optimizeLegibility; + -webkit-font-feature-settings: 'liga'; + -moz-font-feature-settings: 'liga'; + font-feature-settings: 'liga'; +} -.mdi-ul > li { - position: relative; } +.container { + margin: 0 auto; + max-width: 1280px; + width: 90%; +} -.mdi-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; } - -.mdi-li.mdi-lg { - left: -1.85714286em; } - -.mdi-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; } - -.mdi-spin { - -webkit-animation: mdi-spin 2s infinite linear; - animation: mdi-spin 2s infinite linear; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; } +@media only screen and (min-width: 601px) { + .container { + width: 85%; + } +} -.mdi-pulse { - -webkit-animation: mdi-spin 1s steps(8) infinite; - animation: mdi-spin 1s steps(8) infinite; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; } +@media only screen and (min-width: 993px) { + .container { + width: 70%; + } +} -@-webkit-keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } +.container .row { + margin-left: -0.75rem; + margin-right: -0.75rem; +} - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } +.section { + padding-top: 1rem; + padding-bottom: 1rem; +} -@keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } +.section.no-pad { + padding: 0; +} - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } +.section.no-pad-bot { + padding-bottom: 0; +} -.mdi-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); } - -.mdi-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); } - -.mdi-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); } - -.mdi-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); } - -.mdi-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); } - -:root .mdi-rotate-90, :root .mdi-rotate-180, :root .mdi-rotate-270, :root .mdi-flip-horizontal, :root .mdi-flip-vertical { - filter: none; } - -.mdi-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; } +.section.no-pad-top { + padding-top: 0; +} -.mdi-stack-1x, .mdi-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; } +.row { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; +} -.mdi-stack-1x { - line-height: inherit; } +.row:after { + content: ""; + display: table; + clear: both; +} -.mdi-stack-2x { - font-size: 2em; } +.row .col { + float: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0 0.75rem; + min-height: 1px; +} -.mdi-inverse { - color: #ffffff; } +.row .col[class*="push-"], .row .col[class*="pull-"] { + position: relative; +} -/* Start Icons */ -.mdi-action-3d-rotation:before { - content: "\e600"; } +.row .col.s1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-accessibility:before { - content: "\e601"; } +.row .col.s2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-account-balance-wallet:before { - content: "\e602"; } +.row .col.s3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-account-balance:before { - content: "\e603"; } +.row .col.s4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-account-box:before { - content: "\e604"; } +.row .col.s5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-account-child:before { - content: "\e605"; } +.row .col.s6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-account-circle:before { - content: "\e606"; } +.row .col.s7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-add-shopping-cart:before { - content: "\e607"; } +.row .col.s8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-alarm-add:before { - content: "\e608"; } +.row .col.s9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-alarm-off:before { - content: "\e609"; } +.row .col.s10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-alarm-on:before { - content: "\e60a"; } +.row .col.s11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-alarm:before { - content: "\e60b"; } +.row .col.s12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; +} -.mdi-action-android:before { - content: "\e60c"; } +.row .col.offset-s1 { + margin-left: 8.3333333333%; +} -.mdi-action-announcement:before { - content: "\e60d"; } +.row .col.pull-s1 { + right: 8.3333333333%; +} -.mdi-action-aspect-ratio:before { - content: "\e60e"; } +.row .col.push-s1 { + left: 8.3333333333%; +} -.mdi-action-assessment:before { - content: "\e60f"; } +.row .col.offset-s2 { + margin-left: 16.6666666667%; +} -.mdi-action-assignment-ind:before { - content: "\e610"; } +.row .col.pull-s2 { + right: 16.6666666667%; +} -.mdi-action-assignment-late:before { - content: "\e611"; } +.row .col.push-s2 { + left: 16.6666666667%; +} -.mdi-action-assignment-return:before { - content: "\e612"; } +.row .col.offset-s3 { + margin-left: 25%; +} -.mdi-action-assignment-returned:before { - content: "\e613"; } +.row .col.pull-s3 { + right: 25%; +} -.mdi-action-assignment-turned-in:before { - content: "\e614"; } +.row .col.push-s3 { + left: 25%; +} -.mdi-action-assignment:before { - content: "\e615"; } +.row .col.offset-s4 { + margin-left: 33.3333333333%; +} -.mdi-action-autorenew:before { - content: "\e616"; } +.row .col.pull-s4 { + right: 33.3333333333%; +} -.mdi-action-backup:before { - content: "\e617"; } +.row .col.push-s4 { + left: 33.3333333333%; +} + +.row .col.offset-s5 { + margin-left: 41.6666666667%; +} + +.row .col.pull-s5 { + right: 41.6666666667%; +} + +.row .col.push-s5 { + left: 41.6666666667%; +} + +.row .col.offset-s6 { + margin-left: 50%; +} + +.row .col.pull-s6 { + right: 50%; +} + +.row .col.push-s6 { + left: 50%; +} + +.row .col.offset-s7 { + margin-left: 58.3333333333%; +} + +.row .col.pull-s7 { + right: 58.3333333333%; +} + +.row .col.push-s7 { + left: 58.3333333333%; +} + +.row .col.offset-s8 { + margin-left: 66.6666666667%; +} + +.row .col.pull-s8 { + right: 66.6666666667%; +} + +.row .col.push-s8 { + left: 66.6666666667%; +} + +.row .col.offset-s9 { + margin-left: 75%; +} + +.row .col.pull-s9 { + right: 75%; +} + +.row .col.push-s9 { + left: 75%; +} + +.row .col.offset-s10 { + margin-left: 83.3333333333%; +} + +.row .col.pull-s10 { + right: 83.3333333333%; +} + +.row .col.push-s10 { + left: 83.3333333333%; +} + +.row .col.offset-s11 { + margin-left: 91.6666666667%; +} + +.row .col.pull-s11 { + right: 91.6666666667%; +} + +.row .col.push-s11 { + left: 91.6666666667%; +} + +.row .col.offset-s12 { + margin-left: 100%; +} + +.row .col.pull-s12 { + right: 100%; +} + +.row .col.push-s12 { + left: 100%; +} + +@media only screen and (min-width: 601px) { + .row .col.m1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.offset-m1 { + margin-left: 8.3333333333%; + } + .row .col.pull-m1 { + right: 8.3333333333%; + } + .row .col.push-m1 { + left: 8.3333333333%; + } + .row .col.offset-m2 { + margin-left: 16.6666666667%; + } + .row .col.pull-m2 { + right: 16.6666666667%; + } + .row .col.push-m2 { + left: 16.6666666667%; + } + .row .col.offset-m3 { + margin-left: 25%; + } + .row .col.pull-m3 { + right: 25%; + } + .row .col.push-m3 { + left: 25%; + } + .row .col.offset-m4 { + margin-left: 33.3333333333%; + } + .row .col.pull-m4 { + right: 33.3333333333%; + } + .row .col.push-m4 { + left: 33.3333333333%; + } + .row .col.offset-m5 { + margin-left: 41.6666666667%; + } + .row .col.pull-m5 { + right: 41.6666666667%; + } + .row .col.push-m5 { + left: 41.6666666667%; + } + .row .col.offset-m6 { + margin-left: 50%; + } + .row .col.pull-m6 { + right: 50%; + } + .row .col.push-m6 { + left: 50%; + } + .row .col.offset-m7 { + margin-left: 58.3333333333%; + } + .row .col.pull-m7 { + right: 58.3333333333%; + } + .row .col.push-m7 { + left: 58.3333333333%; + } + .row .col.offset-m8 { + margin-left: 66.6666666667%; + } + .row .col.pull-m8 { + right: 66.6666666667%; + } + .row .col.push-m8 { + left: 66.6666666667%; + } + .row .col.offset-m9 { + margin-left: 75%; + } + .row .col.pull-m9 { + right: 75%; + } + .row .col.push-m9 { + left: 75%; + } + .row .col.offset-m10 { + margin-left: 83.3333333333%; + } + .row .col.pull-m10 { + right: 83.3333333333%; + } + .row .col.push-m10 { + left: 83.3333333333%; + } + .row .col.offset-m11 { + margin-left: 91.6666666667%; + } + .row .col.pull-m11 { + right: 91.6666666667%; + } + .row .col.push-m11 { + left: 91.6666666667%; + } + .row .col.offset-m12 { + margin-left: 100%; + } + .row .col.pull-m12 { + right: 100%; + } + .row .col.push-m12 { + left: 100%; + } +} + +@media only screen and (min-width: 993px) { + .row .col.l1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.offset-l1 { + margin-left: 8.3333333333%; + } + .row .col.pull-l1 { + right: 8.3333333333%; + } + .row .col.push-l1 { + left: 8.3333333333%; + } + .row .col.offset-l2 { + margin-left: 16.6666666667%; + } + .row .col.pull-l2 { + right: 16.6666666667%; + } + .row .col.push-l2 { + left: 16.6666666667%; + } + .row .col.offset-l3 { + margin-left: 25%; + } + .row .col.pull-l3 { + right: 25%; + } + .row .col.push-l3 { + left: 25%; + } + .row .col.offset-l4 { + margin-left: 33.3333333333%; + } + .row .col.pull-l4 { + right: 33.3333333333%; + } + .row .col.push-l4 { + left: 33.3333333333%; + } + .row .col.offset-l5 { + margin-left: 41.6666666667%; + } + .row .col.pull-l5 { + right: 41.6666666667%; + } + .row .col.push-l5 { + left: 41.6666666667%; + } + .row .col.offset-l6 { + margin-left: 50%; + } + .row .col.pull-l6 { + right: 50%; + } + .row .col.push-l6 { + left: 50%; + } + .row .col.offset-l7 { + margin-left: 58.3333333333%; + } + .row .col.pull-l7 { + right: 58.3333333333%; + } + .row .col.push-l7 { + left: 58.3333333333%; + } + .row .col.offset-l8 { + margin-left: 66.6666666667%; + } + .row .col.pull-l8 { + right: 66.6666666667%; + } + .row .col.push-l8 { + left: 66.6666666667%; + } + .row .col.offset-l9 { + margin-left: 75%; + } + .row .col.pull-l9 { + right: 75%; + } + .row .col.push-l9 { + left: 75%; + } + .row .col.offset-l10 { + margin-left: 83.3333333333%; + } + .row .col.pull-l10 { + right: 83.3333333333%; + } + .row .col.push-l10 { + left: 83.3333333333%; + } + .row .col.offset-l11 { + margin-left: 91.6666666667%; + } + .row .col.pull-l11 { + right: 91.6666666667%; + } + .row .col.push-l11 { + left: 91.6666666667%; + } + .row .col.offset-l12 { + margin-left: 100%; + } + .row .col.pull-l12 { + right: 100%; + } + .row .col.push-l12 { + left: 100%; + } +} + +@media only screen and (min-width: 1201px) { + .row .col.xl1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.offset-xl1 { + margin-left: 8.3333333333%; + } + .row .col.pull-xl1 { + right: 8.3333333333%; + } + .row .col.push-xl1 { + left: 8.3333333333%; + } + .row .col.offset-xl2 { + margin-left: 16.6666666667%; + } + .row .col.pull-xl2 { + right: 16.6666666667%; + } + .row .col.push-xl2 { + left: 16.6666666667%; + } + .row .col.offset-xl3 { + margin-left: 25%; + } + .row .col.pull-xl3 { + right: 25%; + } + .row .col.push-xl3 { + left: 25%; + } + .row .col.offset-xl4 { + margin-left: 33.3333333333%; + } + .row .col.pull-xl4 { + right: 33.3333333333%; + } + .row .col.push-xl4 { + left: 33.3333333333%; + } + .row .col.offset-xl5 { + margin-left: 41.6666666667%; + } + .row .col.pull-xl5 { + right: 41.6666666667%; + } + .row .col.push-xl5 { + left: 41.6666666667%; + } + .row .col.offset-xl6 { + margin-left: 50%; + } + .row .col.pull-xl6 { + right: 50%; + } + .row .col.push-xl6 { + left: 50%; + } + .row .col.offset-xl7 { + margin-left: 58.3333333333%; + } + .row .col.pull-xl7 { + right: 58.3333333333%; + } + .row .col.push-xl7 { + left: 58.3333333333%; + } + .row .col.offset-xl8 { + margin-left: 66.6666666667%; + } + .row .col.pull-xl8 { + right: 66.6666666667%; + } + .row .col.push-xl8 { + left: 66.6666666667%; + } + .row .col.offset-xl9 { + margin-left: 75%; + } + .row .col.pull-xl9 { + right: 75%; + } + .row .col.push-xl9 { + left: 75%; + } + .row .col.offset-xl10 { + margin-left: 83.3333333333%; + } + .row .col.pull-xl10 { + right: 83.3333333333%; + } + .row .col.push-xl10 { + left: 83.3333333333%; + } + .row .col.offset-xl11 { + margin-left: 91.6666666667%; + } + .row .col.pull-xl11 { + right: 91.6666666667%; + } + .row .col.push-xl11 { + left: 91.6666666667%; + } + .row .col.offset-xl12 { + margin-left: 100%; + } + .row .col.pull-xl12 { + right: 100%; + } + .row .col.push-xl12 { + left: 100%; + } +} -.mdi-action-book:before { - content: "\e618"; } +nav { + color: #fff; + background-color: #ee6e73; + width: 100%; + height: 56px; + line-height: 56px; +} -.mdi-action-bookmark-outline:before { - content: "\e619"; } +nav.nav-extended { + height: auto; +} -.mdi-action-bookmark:before { - content: "\e61a"; } +nav.nav-extended .nav-wrapper { + min-height: 56px; + height: auto; +} -.mdi-action-bug-report:before { - content: "\e61b"; } +nav.nav-extended .nav-content { + position: relative; + line-height: normal; +} -.mdi-action-cached:before { - content: "\e61c"; } +nav a { + color: #fff; +} -.mdi-action-check-circle:before { - content: "\e61d"; } +nav i, +nav [class^="mdi-"], nav [class*="mdi-"], +nav i.material-icons { + display: block; + font-size: 24px; + height: 56px; + line-height: 56px; +} -.mdi-action-class:before { - content: "\e61e"; } +nav .nav-wrapper { + position: relative; + height: 100%; +} -.mdi-action-credit-card:before { - content: "\e61f"; } +@media only screen and (min-width: 993px) { + nav a.button-collapse { + display: none; + } +} -.mdi-action-dashboard:before { - content: "\e620"; } +nav .button-collapse { + float: left; + position: relative; + z-index: 1; + height: 56px; + margin: 0 18px; +} -.mdi-action-delete:before { - content: "\e621"; } +nav .button-collapse i { + height: 56px; + line-height: 56px; +} -.mdi-action-description:before { - content: "\e622"; } +nav .brand-logo { + position: absolute; + color: #fff; + display: inline-block; + font-size: 2.1rem; + padding: 0; +} -.mdi-action-dns:before { - content: "\e623"; } +nav .brand-logo.center { + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} -.mdi-action-done-all:before { - content: "\e624"; } - -.mdi-action-done:before { - content: "\e625"; } - -.mdi-action-event:before { - content: "\e626"; } - -.mdi-action-exit-to-app:before { - content: "\e627"; } - -.mdi-action-explore:before { - content: "\e628"; } - -.mdi-action-extension:before { - content: "\e629"; } - -.mdi-action-face-unlock:before { - content: "\e62a"; } - -.mdi-action-favorite-outline:before { - content: "\e62b"; } - -.mdi-action-favorite:before { - content: "\e62c"; } - -.mdi-action-find-in-page:before { - content: "\e62d"; } - -.mdi-action-find-replace:before { - content: "\e62e"; } - -.mdi-action-flip-to-back:before { - content: "\e62f"; } - -.mdi-action-flip-to-front:before { - content: "\e630"; } - -.mdi-action-get-app:before { - content: "\e631"; } - -.mdi-action-grade:before { - content: "\e632"; } - -.mdi-action-group-work:before { - content: "\e633"; } - -.mdi-action-help:before { - content: "\e634"; } - -.mdi-action-highlight-remove:before { - content: "\e635"; } - -.mdi-action-history:before { - content: "\e636"; } - -.mdi-action-home:before { - content: "\e637"; } - -.mdi-action-https:before { - content: "\e638"; } - -.mdi-action-info-outline:before { - content: "\e639"; } - -.mdi-action-info:before { - content: "\e63a"; } - -.mdi-action-input:before { - content: "\e63b"; } - -.mdi-action-invert-colors:before { - content: "\e63c"; } - -.mdi-action-label-outline:before { - content: "\e63d"; } - -.mdi-action-label:before { - content: "\e63e"; } - -.mdi-action-language:before { - content: "\e63f"; } - -.mdi-action-launch:before { - content: "\e640"; } - -.mdi-action-list:before { - content: "\e641"; } - -.mdi-action-lock-open:before { - content: "\e642"; } - -.mdi-action-lock-outline:before { - content: "\e643"; } - -.mdi-action-lock:before { - content: "\e644"; } - -.mdi-action-loyalty:before { - content: "\e645"; } - -.mdi-action-markunread-mailbox:before { - content: "\e646"; } - -.mdi-action-note-add:before { - content: "\e647"; } - -.mdi-action-open-in-browser:before { - content: "\e648"; } - -.mdi-action-open-in-new:before { - content: "\e649"; } - -.mdi-action-open-with:before { - content: "\e64a"; } - -.mdi-action-pageview:before { - content: "\e64b"; } - -.mdi-action-payment:before { - content: "\e64c"; } - -.mdi-action-perm-camera-mic:before { - content: "\e64d"; } - -.mdi-action-perm-contact-cal:before { - content: "\e64e"; } - -.mdi-action-perm-data-setting:before { - content: "\e64f"; } - -.mdi-action-perm-device-info:before { - content: "\e650"; } - -.mdi-action-perm-identity:before { - content: "\e651"; } - -.mdi-action-perm-media:before { - content: "\e652"; } - -.mdi-action-perm-phone-msg:before { - content: "\e653"; } - -.mdi-action-perm-scan-wifi:before { - content: "\e654"; } - -.mdi-action-picture-in-picture:before { - content: "\e655"; } - -.mdi-action-polymer:before { - content: "\e656"; } - -.mdi-action-print:before { - content: "\e657"; } - -.mdi-action-query-builder:before { - content: "\e658"; } - -.mdi-action-question-answer:before { - content: "\e659"; } - -.mdi-action-receipt:before { - content: "\e65a"; } - -.mdi-action-redeem:before { - content: "\e65b"; } - -.mdi-action-reorder:before { - content: "\e65c"; } - -.mdi-action-report-problem:before { - content: "\e65d"; } - -.mdi-action-restore:before { - content: "\e65e"; } - -.mdi-action-room:before { - content: "\e65f"; } - -.mdi-action-schedule:before { - content: "\e660"; } - -.mdi-action-search:before { - content: "\e661"; } - -.mdi-action-settings-applications:before { - content: "\e662"; } - -.mdi-action-settings-backup-restore:before { - content: "\e663"; } - -.mdi-action-settings-bluetooth:before { - content: "\e664"; } - -.mdi-action-settings-cell:before { - content: "\e665"; } - -.mdi-action-settings-display:before { - content: "\e666"; } - -.mdi-action-settings-ethernet:before { - content: "\e667"; } - -.mdi-action-settings-input-antenna:before { - content: "\e668"; } - -.mdi-action-settings-input-component:before { - content: "\e669"; } - -.mdi-action-settings-input-composite:before { - content: "\e66a"; } - -.mdi-action-settings-input-hdmi:before { - content: "\e66b"; } - -.mdi-action-settings-input-svideo:before { - content: "\e66c"; } - -.mdi-action-settings-overscan:before { - content: "\e66d"; } - -.mdi-action-settings-phone:before { - content: "\e66e"; } - -.mdi-action-settings-power:before { - content: "\e66f"; } - -.mdi-action-settings-remote:before { - content: "\e670"; } - -.mdi-action-settings-voice:before { - content: "\e671"; } - -.mdi-action-settings:before { - content: "\e672"; } - -.mdi-action-shop-two:before { - content: "\e673"; } - -.mdi-action-shop:before { - content: "\e674"; } - -.mdi-action-shopping-basket:before { - content: "\e675"; } - -.mdi-action-shopping-cart:before { - content: "\e676"; } - -.mdi-action-speaker-notes:before { - content: "\e677"; } - -.mdi-action-spellcheck:before { - content: "\e678"; } - -.mdi-action-star-rate:before { - content: "\e679"; } - -.mdi-action-stars:before { - content: "\e67a"; } - -.mdi-action-store:before { - content: "\e67b"; } - -.mdi-action-subject:before { - content: "\e67c"; } - -.mdi-action-supervisor-account:before { - content: "\e67d"; } - -.mdi-action-swap-horiz:before { - content: "\e67e"; } - -.mdi-action-swap-vert-circle:before { - content: "\e67f"; } - -.mdi-action-swap-vert:before { - content: "\e680"; } - -.mdi-action-system-update-tv:before { - content: "\e681"; } - -.mdi-action-tab-unselected:before { - content: "\e682"; } - -.mdi-action-tab:before { - content: "\e683"; } - -.mdi-action-theaters:before { - content: "\e684"; } - -.mdi-action-thumb-down:before { - content: "\e685"; } - -.mdi-action-thumb-up:before { - content: "\e686"; } - -.mdi-action-thumbs-up-down:before { - content: "\e687"; } - -.mdi-action-toc:before { - content: "\e688"; } - -.mdi-action-today:before { - content: "\e689"; } - -.mdi-action-track-changes:before { - content: "\e68a"; } - -.mdi-action-translate:before { - content: "\e68b"; } - -.mdi-action-trending-down:before { - content: "\e68c"; } - -.mdi-action-trending-neutral:before { - content: "\e68d"; } - -.mdi-action-trending-up:before { - content: "\e68e"; } - -.mdi-action-turned-in-not:before { - content: "\e68f"; } - -.mdi-action-turned-in:before { - content: "\e690"; } - -.mdi-action-verified-user:before { - content: "\e691"; } - -.mdi-action-view-agenda:before { - content: "\e692"; } - -.mdi-action-view-array:before { - content: "\e693"; } - -.mdi-action-view-carousel:before { - content: "\e694"; } - -.mdi-action-view-column:before { - content: "\e695"; } - -.mdi-action-view-day:before { - content: "\e696"; } - -.mdi-action-view-headline:before { - content: "\e697"; } - -.mdi-action-view-list:before { - content: "\e698"; } - -.mdi-action-view-module:before { - content: "\e699"; } - -.mdi-action-view-quilt:before { - content: "\e69a"; } - -.mdi-action-view-stream:before { - content: "\e69b"; } - -.mdi-action-view-week:before { - content: "\e69c"; } - -.mdi-action-visibility-off:before { - content: "\e69d"; } - -.mdi-action-visibility:before { - content: "\e69e"; } - -.mdi-action-wallet-giftcard:before { - content: "\e69f"; } - -.mdi-action-wallet-membership:before { - content: "\e6a0"; } - -.mdi-action-wallet-travel:before { - content: "\e6a1"; } - -.mdi-action-work:before { - content: "\e6a2"; } - -.mdi-alert-error:before { - content: "\e6a3"; } - -.mdi-alert-warning:before { - content: "\e6a4"; } - -.mdi-av-album:before { - content: "\e6a5"; } - -.mdi-av-closed-caption:before { - content: "\e6a6"; } - -.mdi-av-equalizer:before { - content: "\e6a7"; } - -.mdi-av-explicit:before { - content: "\e6a8"; } - -.mdi-av-fast-forward:before { - content: "\e6a9"; } - -.mdi-av-fast-rewind:before { - content: "\e6aa"; } - -.mdi-av-games:before { - content: "\e6ab"; } - -.mdi-av-hearing:before { - content: "\e6ac"; } - -.mdi-av-high-quality:before { - content: "\e6ad"; } - -.mdi-av-loop:before { - content: "\e6ae"; } - -.mdi-av-mic-none:before { - content: "\e6af"; } - -.mdi-av-mic-off:before { - content: "\e6b0"; } - -.mdi-av-mic:before { - content: "\e6b1"; } - -.mdi-av-movie:before { - content: "\e6b2"; } - -.mdi-av-my-library-add:before { - content: "\e6b3"; } - -.mdi-av-my-library-books:before { - content: "\e6b4"; } - -.mdi-av-my-library-music:before { - content: "\e6b5"; } - -.mdi-av-new-releases:before { - content: "\e6b6"; } - -.mdi-av-not-interested:before { - content: "\e6b7"; } - -.mdi-av-pause-circle-fill:before { - content: "\e6b8"; } - -.mdi-av-pause-circle-outline:before { - content: "\e6b9"; } - -.mdi-av-pause:before { - content: "\e6ba"; } - -.mdi-av-play-arrow:before { - content: "\e6bb"; } - -.mdi-av-play-circle-fill:before { - content: "\e6bc"; } - -.mdi-av-play-circle-outline:before { - content: "\e6bd"; } - -.mdi-av-play-shopping-bag:before { - content: "\e6be"; } - -.mdi-av-playlist-add:before { - content: "\e6bf"; } - -.mdi-av-queue-music:before { - content: "\e6c0"; } - -.mdi-av-queue:before { - content: "\e6c1"; } - -.mdi-av-radio:before { - content: "\e6c2"; } - -.mdi-av-recent-actors:before { - content: "\e6c3"; } - -.mdi-av-repeat-one:before { - content: "\e6c4"; } - -.mdi-av-repeat:before { - content: "\e6c5"; } - -.mdi-av-replay:before { - content: "\e6c6"; } - -.mdi-av-shuffle:before { - content: "\e6c7"; } - -.mdi-av-skip-next:before { - content: "\e6c8"; } - -.mdi-av-skip-previous:before { - content: "\e6c9"; } - -.mdi-av-snooze:before { - content: "\e6ca"; } - -.mdi-av-stop:before { - content: "\e6cb"; } - -.mdi-av-subtitles:before { - content: "\e6cc"; } - -.mdi-av-surround-sound:before { - content: "\e6cd"; } - -.mdi-av-timer:before { - content: "\e6ce"; } - -.mdi-av-video-collection:before { - content: "\e6cf"; } - -.mdi-av-videocam-off:before { - content: "\e6d0"; } - -.mdi-av-videocam:before { - content: "\e6d1"; } - -.mdi-av-volume-down:before { - content: "\e6d2"; } - -.mdi-av-volume-mute:before { - content: "\e6d3"; } - -.mdi-av-volume-off:before { - content: "\e6d4"; } - -.mdi-av-volume-up:before { - content: "\e6d5"; } - -.mdi-av-web:before { - content: "\e6d6"; } - -.mdi-communication-business:before { - content: "\e6d7"; } - -.mdi-communication-call-end:before { - content: "\e6d8"; } - -.mdi-communication-call-made:before { - content: "\e6d9"; } - -.mdi-communication-call-merge:before { - content: "\e6da"; } - -.mdi-communication-call-missed:before { - content: "\e6db"; } - -.mdi-communication-call-received:before { - content: "\e6dc"; } - -.mdi-communication-call-split:before { - content: "\e6dd"; } - -.mdi-communication-call:before { - content: "\e6de"; } - -.mdi-communication-chat:before { - content: "\e6df"; } - -.mdi-communication-clear-all:before { - content: "\e6e0"; } - -.mdi-communication-comment:before { - content: "\e6e1"; } - -.mdi-communication-contacts:before { - content: "\e6e2"; } - -.mdi-communication-dialer-sip:before { - content: "\e6e3"; } - -.mdi-communication-dialpad:before { - content: "\e6e4"; } - -.mdi-communication-dnd-on:before { - content: "\e6e5"; } - -.mdi-communication-email:before { - content: "\e6e6"; } - -.mdi-communication-forum:before { - content: "\e6e7"; } - -.mdi-communication-import-export:before { - content: "\e6e8"; } - -.mdi-communication-invert-colors-off:before { - content: "\e6e9"; } - -.mdi-communication-invert-colors-on:before { - content: "\e6ea"; } - -.mdi-communication-live-help:before { - content: "\e6eb"; } - -.mdi-communication-location-off:before { - content: "\e6ec"; } - -.mdi-communication-location-on:before { - content: "\e6ed"; } - -.mdi-communication-message:before { - content: "\e6ee"; } - -.mdi-communication-messenger:before { - content: "\e6ef"; } - -.mdi-communication-no-sim:before { - content: "\e6f0"; } - -.mdi-communication-phone:before { - content: "\e6f1"; } - -.mdi-communication-portable-wifi-off:before { - content: "\e6f2"; } - -.mdi-communication-quick-contacts-dialer:before { - content: "\e6f3"; } - -.mdi-communication-quick-contacts-mail:before { - content: "\e6f4"; } - -.mdi-communication-ring-volume:before { - content: "\e6f5"; } - -.mdi-communication-stay-current-landscape:before { - content: "\e6f6"; } - -.mdi-communication-stay-current-portrait:before { - content: "\e6f7"; } - -.mdi-communication-stay-primary-landscape:before { - content: "\e6f8"; } - -.mdi-communication-stay-primary-portrait:before { - content: "\e6f9"; } - -.mdi-communication-swap-calls:before { - content: "\e6fa"; } - -.mdi-communication-textsms:before { - content: "\e6fb"; } - -.mdi-communication-voicemail:before { - content: "\e6fc"; } - -.mdi-communication-vpn-key:before { - content: "\e6fd"; } - -.mdi-content-add-box:before { - content: "\e6fe"; } - -.mdi-content-add-circle-outline:before { - content: "\e6ff"; } - -.mdi-content-add-circle:before { - content: "\e700"; } - -.mdi-content-add:before { - content: "\e701"; } - -.mdi-content-archive:before { - content: "\e702"; } - -.mdi-content-backspace:before { - content: "\e703"; } - -.mdi-content-block:before { - content: "\e704"; } - -.mdi-content-clear:before { - content: "\e705"; } - -.mdi-content-content-copy:before { - content: "\e706"; } - -.mdi-content-content-cut:before { - content: "\e707"; } - -.mdi-content-content-paste:before { - content: "\e708"; } - -.mdi-content-create:before { - content: "\e709"; } - -.mdi-content-drafts:before { - content: "\e70a"; } - -.mdi-content-filter-list:before { - content: "\e70b"; } - -.mdi-content-flag:before { - content: "\e70c"; } - -.mdi-content-forward:before { - content: "\e70d"; } - -.mdi-content-gesture:before { - content: "\e70e"; } - -.mdi-content-inbox:before { - content: "\e70f"; } - -.mdi-content-link:before { - content: "\e710"; } - -.mdi-content-mail:before { - content: "\e711"; } - -.mdi-content-markunread:before { - content: "\e712"; } - -.mdi-content-redo:before { - content: "\e713"; } - -.mdi-content-remove-circle-outline:before { - content: "\e714"; } - -.mdi-content-remove-circle:before { - content: "\e715"; } - -.mdi-content-remove:before { - content: "\e716"; } - -.mdi-content-reply-all:before { - content: "\e717"; } - -.mdi-content-reply:before { - content: "\e718"; } - -.mdi-content-report:before { - content: "\e719"; } - -.mdi-content-save:before { - content: "\e71a"; } - -.mdi-content-select-all:before { - content: "\e71b"; } - -.mdi-content-send:before { - content: "\e71c"; } - -.mdi-content-sort:before { - content: "\e71d"; } - -.mdi-content-text-format:before { - content: "\e71e"; } - -.mdi-content-undo:before { - content: "\e71f"; } - -.mdi-editor-attach-file:before { - content: "\e776"; } - -.mdi-editor-attach-money:before { - content: "\e777"; } - -.mdi-editor-border-all:before { - content: "\e778"; } - -.mdi-editor-border-bottom:before { - content: "\e779"; } - -.mdi-editor-border-clear:before { - content: "\e77a"; } - -.mdi-editor-border-color:before { - content: "\e77b"; } - -.mdi-editor-border-horizontal:before { - content: "\e77c"; } - -.mdi-editor-border-inner:before { - content: "\e77d"; } - -.mdi-editor-border-left:before { - content: "\e77e"; } - -.mdi-editor-border-outer:before { - content: "\e77f"; } - -.mdi-editor-border-right:before { - content: "\e780"; } - -.mdi-editor-border-style:before { - content: "\e781"; } - -.mdi-editor-border-top:before { - content: "\e782"; } - -.mdi-editor-border-vertical:before { - content: "\e783"; } - -.mdi-editor-format-align-center:before { - content: "\e784"; } - -.mdi-editor-format-align-justify:before { - content: "\e785"; } - -.mdi-editor-format-align-left:before { - content: "\e786"; } - -.mdi-editor-format-align-right:before { - content: "\e787"; } - -.mdi-editor-format-bold:before { - content: "\e788"; } - -.mdi-editor-format-clear:before { - content: "\e789"; } - -.mdi-editor-format-color-fill:before { - content: "\e78a"; } - -.mdi-editor-format-color-reset:before { - content: "\e78b"; } - -.mdi-editor-format-color-text:before { - content: "\e78c"; } - -.mdi-editor-format-indent-decrease:before { - content: "\e78d"; } - -.mdi-editor-format-indent-increase:before { - content: "\e78e"; } - -.mdi-editor-format-italic:before { - content: "\e78f"; } - -.mdi-editor-format-line-spacing:before { - content: "\e790"; } - -.mdi-editor-format-list-bulleted:before { - content: "\e791"; } - -.mdi-editor-format-list-numbered:before { - content: "\e792"; } - -.mdi-editor-format-paint:before { - content: "\e793"; } - -.mdi-editor-format-quote:before { - content: "\e794"; } - -.mdi-editor-format-size:before { - content: "\e795"; } - -.mdi-editor-format-strikethrough:before { - content: "\e796"; } - -.mdi-editor-format-textdirection-l-to-r:before { - content: "\e797"; } - -.mdi-editor-format-textdirection-r-to-l:before { - content: "\e798"; } - -.mdi-editor-format-underline:before { - content: "\e799"; } - -.mdi-editor-functions:before { - content: "\e79a"; } - -.mdi-editor-insert-chart:before { - content: "\e79b"; } - -.mdi-editor-insert-comment:before { - content: "\e79c"; } - -.mdi-editor-insert-drive-file:before { - content: "\e79d"; } - -.mdi-editor-insert-emoticon:before { - content: "\e79e"; } - -.mdi-editor-insert-invitation:before { - content: "\e79f"; } - -.mdi-editor-insert-link:before { - content: "\e7a0"; } - -.mdi-editor-insert-photo:before { - content: "\e7a1"; } - -.mdi-editor-merge-type:before { - content: "\e7a2"; } - -.mdi-editor-mode-comment:before { - content: "\e7a3"; } - -.mdi-editor-mode-edit:before { - content: "\e7a4"; } - -.mdi-editor-publish:before { - content: "\e7a5"; } - -.mdi-editor-vertical-align-bottom:before { - content: "\e7a6"; } - -.mdi-editor-vertical-align-center:before { - content: "\e7a7"; } - -.mdi-editor-vertical-align-top:before { - content: "\e7a8"; } - -.mdi-editor-wrap-text:before { - content: "\e7a9"; } - -.mdi-file-attachment:before { - content: "\e7aa"; } - -.mdi-file-cloud-circle:before { - content: "\e7ab"; } - -.mdi-file-cloud-done:before { - content: "\e7ac"; } - -.mdi-file-cloud-download:before { - content: "\e7ad"; } - -.mdi-file-cloud-off:before { - content: "\e7ae"; } - -.mdi-file-cloud-queue:before { - content: "\e7af"; } - -.mdi-file-cloud-upload:before { - content: "\e7b0"; } - -.mdi-file-cloud:before { - content: "\e7b1"; } - -.mdi-file-file-download:before { - content: "\e7b2"; } - -.mdi-file-file-upload:before { - content: "\e7b3"; } - -.mdi-file-folder-open:before { - content: "\e7b4"; } - -.mdi-file-folder-shared:before { - content: "\e7b5"; } - -.mdi-file-folder:before { - content: "\e7b6"; } - -.mdi-device-access-alarm:before { - content: "\e720"; } - -.mdi-device-access-alarms:before { - content: "\e721"; } - -.mdi-device-access-time:before { - content: "\e722"; } - -.mdi-device-add-alarm:before { - content: "\e723"; } - -.mdi-device-airplanemode-off:before { - content: "\e724"; } - -.mdi-device-airplanemode-on:before { - content: "\e725"; } - -.mdi-device-battery-20:before { - content: "\e726"; } - -.mdi-device-battery-30:before { - content: "\e727"; } - -.mdi-device-battery-50:before { - content: "\e728"; } - -.mdi-device-battery-60:before { - content: "\e729"; } - -.mdi-device-battery-80:before { - content: "\e72a"; } - -.mdi-device-battery-90:before { - content: "\e72b"; } - -.mdi-device-battery-alert:before { - content: "\e72c"; } - -.mdi-device-battery-charging-20:before { - content: "\e72d"; } - -.mdi-device-battery-charging-30:before { - content: "\e72e"; } - -.mdi-device-battery-charging-50:before { - content: "\e72f"; } - -.mdi-device-battery-charging-60:before { - content: "\e730"; } - -.mdi-device-battery-charging-80:before { - content: "\e731"; } - -.mdi-device-battery-charging-90:before { - content: "\e732"; } - -.mdi-device-battery-charging-full:before { - content: "\e733"; } - -.mdi-device-battery-full:before { - content: "\e734"; } - -.mdi-device-battery-std:before { - content: "\e735"; } - -.mdi-device-battery-unknown:before { - content: "\e736"; } - -.mdi-device-bluetooth-connected:before { - content: "\e737"; } - -.mdi-device-bluetooth-disabled:before { - content: "\e738"; } - -.mdi-device-bluetooth-searching:before { - content: "\e739"; } - -.mdi-device-bluetooth:before { - content: "\e73a"; } - -.mdi-device-brightness-auto:before { - content: "\e73b"; } - -.mdi-device-brightness-high:before { - content: "\e73c"; } - -.mdi-device-brightness-low:before { - content: "\e73d"; } - -.mdi-device-brightness-medium:before { - content: "\e73e"; } - -.mdi-device-data-usage:before { - content: "\e73f"; } - -.mdi-device-developer-mode:before { - content: "\e740"; } - -.mdi-device-devices:before { - content: "\e741"; } - -.mdi-device-dvr:before { - content: "\e742"; } - -.mdi-device-gps-fixed:before { - content: "\e743"; } - -.mdi-device-gps-not-fixed:before { - content: "\e744"; } - -.mdi-device-gps-off:before { - content: "\e745"; } - -.mdi-device-location-disabled:before { - content: "\e746"; } - -.mdi-device-location-searching:before { - content: "\e747"; } - -.mdi-device-multitrack-audio:before { - content: "\e748"; } - -.mdi-device-network-cell:before { - content: "\e749"; } - -.mdi-device-network-wifi:before { - content: "\e74a"; } - -.mdi-device-nfc:before { - content: "\e74b"; } - -.mdi-device-now-wallpaper:before { - content: "\e74c"; } - -.mdi-device-now-widgets:before { - content: "\e74d"; } - -.mdi-device-screen-lock-landscape:before { - content: "\e74e"; } - -.mdi-device-screen-lock-portrait:before { - content: "\e74f"; } - -.mdi-device-screen-lock-rotation:before { - content: "\e750"; } - -.mdi-device-screen-rotation:before { - content: "\e751"; } - -.mdi-device-sd-storage:before { - content: "\e752"; } - -.mdi-device-settings-system-daydream:before { - content: "\e753"; } - -.mdi-device-signal-cellular-0-bar:before { - content: "\e754"; } - -.mdi-device-signal-cellular-1-bar:before { - content: "\e755"; } - -.mdi-device-signal-cellular-2-bar:before { - content: "\e756"; } - -.mdi-device-signal-cellular-3-bar:before { - content: "\e757"; } - -.mdi-device-signal-cellular-4-bar:before { - content: "\e758"; } - -.mdi-signal-wifi-statusbar-connected-no-internet-after:before { - content: "\e8f6"; } - -.mdi-device-signal-cellular-connected-no-internet-0-bar:before { - content: "\e759"; } - -.mdi-device-signal-cellular-connected-no-internet-1-bar:before { - content: "\e75a"; } - -.mdi-device-signal-cellular-connected-no-internet-2-bar:before { - content: "\e75b"; } - -.mdi-device-signal-cellular-connected-no-internet-3-bar:before { - content: "\e75c"; } - -.mdi-device-signal-cellular-connected-no-internet-4-bar:before { - content: "\e75d"; } - -.mdi-device-signal-cellular-no-sim:before { - content: "\e75e"; } - -.mdi-device-signal-cellular-null:before { - content: "\e75f"; } - -.mdi-device-signal-cellular-off:before { - content: "\e760"; } - -.mdi-device-signal-wifi-0-bar:before { - content: "\e761"; } - -.mdi-device-signal-wifi-1-bar:before { - content: "\e762"; } - -.mdi-device-signal-wifi-2-bar:before { - content: "\e763"; } - -.mdi-device-signal-wifi-3-bar:before { - content: "\e764"; } - -.mdi-device-signal-wifi-4-bar:before { - content: "\e765"; } - -.mdi-device-signal-wifi-off:before { - content: "\e766"; } - -.mdi-device-signal-wifi-statusbar-1-bar:before { - content: "\e767"; } - -.mdi-device-signal-wifi-statusbar-2-bar:before { - content: "\e768"; } - -.mdi-device-signal-wifi-statusbar-3-bar:before { - content: "\e769"; } - -.mdi-device-signal-wifi-statusbar-4-bar:before { - content: "\e76a"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-:before { - content: "\e76b"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet:before { - content: "\e76f"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before { - content: "\e76c"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before { - content: "\e76d"; } - -.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before { - content: "\e76e"; } - -.mdi-signal-wifi-statusbar-not-connected-after:before { - content: "\e8f7"; } - -.mdi-device-signal-wifi-statusbar-not-connected:before { - content: "\e770"; } - -.mdi-device-signal-wifi-statusbar-null:before { - content: "\e771"; } - -.mdi-device-storage:before { - content: "\e772"; } - -.mdi-device-usb:before { - content: "\e773"; } - -.mdi-device-wifi-lock:before { - content: "\e774"; } - -.mdi-device-wifi-tethering:before { - content: "\e775"; } - -.mdi-hardware-cast-connected:before { - content: "\e7b7"; } - -.mdi-hardware-cast:before { - content: "\e7b8"; } - -.mdi-hardware-computer:before { - content: "\e7b9"; } - -.mdi-hardware-desktop-mac:before { - content: "\e7ba"; } - -.mdi-hardware-desktop-windows:before { - content: "\e7bb"; } - -.mdi-hardware-dock:before { - content: "\e7bc"; } - -.mdi-hardware-gamepad:before { - content: "\e7bd"; } - -.mdi-hardware-headset-mic:before { - content: "\e7be"; } - -.mdi-hardware-headset:before { - content: "\e7bf"; } - -.mdi-hardware-keyboard-alt:before { - content: "\e7c0"; } - -.mdi-hardware-keyboard-arrow-down:before { - content: "\e7c1"; } - -.mdi-hardware-keyboard-arrow-left:before { - content: "\e7c2"; } - -.mdi-hardware-keyboard-arrow-right:before { - content: "\e7c3"; } - -.mdi-hardware-keyboard-arrow-up:before { - content: "\e7c4"; } - -.mdi-hardware-keyboard-backspace:before { - content: "\e7c5"; } - -.mdi-hardware-keyboard-capslock:before { - content: "\e7c6"; } - -.mdi-hardware-keyboard-control:before { - content: "\e7c7"; } - -.mdi-hardware-keyboard-hide:before { - content: "\e7c8"; } - -.mdi-hardware-keyboard-return:before { - content: "\e7c9"; } - -.mdi-hardware-keyboard-tab:before { - content: "\e7ca"; } - -.mdi-hardware-keyboard-voice:before { - content: "\e7cb"; } - -.mdi-hardware-keyboard:before { - content: "\e7cc"; } - -.mdi-hardware-laptop-chromebook:before { - content: "\e7cd"; } - -.mdi-hardware-laptop-mac:before { - content: "\e7ce"; } - -.mdi-hardware-laptop-windows:before { - content: "\e7cf"; } - -.mdi-hardware-laptop:before { - content: "\e7d0"; } - -.mdi-hardware-memory:before { - content: "\e7d1"; } - -.mdi-hardware-mouse:before { - content: "\e7d2"; } - -.mdi-hardware-phone-android:before { - content: "\e7d3"; } - -.mdi-hardware-phone-iphone:before { - content: "\e7d4"; } - -.mdi-hardware-phonelink-off:before { - content: "\e7d5"; } - -.mdi-hardware-phonelink:before { - content: "\e7d6"; } - -.mdi-hardware-security:before { - content: "\e7d7"; } - -.mdi-hardware-sim-card:before { - content: "\e7d8"; } - -.mdi-hardware-smartphone:before { - content: "\e7d9"; } - -.mdi-hardware-speaker:before { - content: "\e7da"; } - -.mdi-hardware-tablet-android:before { - content: "\e7db"; } - -.mdi-hardware-tablet-mac:before { - content: "\e7dc"; } - -.mdi-hardware-tablet:before { - content: "\e7dd"; } - -.mdi-hardware-tv:before { - content: "\e7de"; } - -.mdi-hardware-watch:before { - content: "\e7df"; } - -.mdi-image-add-to-photos:before { - content: "\e7e0"; } - -.mdi-image-adjust:before { - content: "\e7e1"; } - -.mdi-image-assistant-photo:before { - content: "\e7e2"; } - -.mdi-image-audiotrack:before { - content: "\e7e3"; } - -.mdi-image-blur-circular:before { - content: "\e7e4"; } - -.mdi-image-blur-linear:before { - content: "\e7e5"; } - -.mdi-image-blur-off:before { - content: "\e7e6"; } - -.mdi-image-blur-on:before { - content: "\e7e7"; } - -.mdi-image-brightness-1:before { - content: "\e7e8"; } - -.mdi-image-brightness-2:before { - content: "\e7e9"; } - -.mdi-image-brightness-3:before { - content: "\e7ea"; } - -.mdi-image-brightness-4:before { - content: "\e7eb"; } - -.mdi-image-brightness-5:before { - content: "\e7ec"; } - -.mdi-image-brightness-6:before { - content: "\e7ed"; } - -.mdi-image-brightness-7:before { - content: "\e7ee"; } - -.mdi-image-brush:before { - content: "\e7ef"; } - -.mdi-image-camera-alt:before { - content: "\e7f0"; } - -.mdi-image-camera-front:before { - content: "\e7f1"; } - -.mdi-image-camera-rear:before { - content: "\e7f2"; } - -.mdi-image-camera-roll:before { - content: "\e7f3"; } - -.mdi-image-camera:before { - content: "\e7f4"; } - -.mdi-image-center-focus-strong:before { - content: "\e7f5"; } - -.mdi-image-center-focus-weak:before { - content: "\e7f6"; } - -.mdi-image-collections:before { - content: "\e7f7"; } - -.mdi-image-color-lens:before { - content: "\e7f8"; } - -.mdi-image-colorize:before { - content: "\e7f9"; } - -.mdi-image-compare:before { - content: "\e7fa"; } - -.mdi-image-control-point-duplicate:before { - content: "\e7fb"; } - -.mdi-image-control-point:before { - content: "\e7fc"; } - -.mdi-image-crop-3-2:before { - content: "\e7fd"; } - -.mdi-image-crop-5-4:before { - content: "\e7fe"; } - -.mdi-image-crop-7-5:before { - content: "\e7ff"; } - -.mdi-image-crop-16-9:before { - content: "\e800"; } - -.mdi-image-crop-din:before { - content: "\e801"; } - -.mdi-image-crop-free:before { - content: "\e802"; } - -.mdi-image-crop-landscape:before { - content: "\e803"; } - -.mdi-image-crop-original:before { - content: "\e804"; } - -.mdi-image-crop-portrait:before { - content: "\e805"; } - -.mdi-image-crop-square:before { - content: "\e806"; } - -.mdi-image-crop:before { - content: "\e807"; } - -.mdi-image-dehaze:before { - content: "\e808"; } - -.mdi-image-details:before { - content: "\e809"; } - -.mdi-image-edit:before { - content: "\e80a"; } - -.mdi-image-exposure-minus-1:before { - content: "\e80b"; } - -.mdi-image-exposure-minus-2:before { - content: "\e80c"; } - -.mdi-image-exposure-plus-1:before { - content: "\e80d"; } - -.mdi-image-exposure-plus-2:before { - content: "\e80e"; } - -.mdi-image-exposure-zero:before { - content: "\e80f"; } - -.mdi-image-exposure:before { - content: "\e810"; } - -.mdi-image-filter-1:before { - content: "\e811"; } - -.mdi-image-filter-2:before { - content: "\e812"; } - -.mdi-image-filter-3:before { - content: "\e813"; } - -.mdi-image-filter-4:before { - content: "\e814"; } - -.mdi-image-filter-5:before { - content: "\e815"; } - -.mdi-image-filter-6:before { - content: "\e816"; } - -.mdi-image-filter-7:before { - content: "\e817"; } - -.mdi-image-filter-8:before { - content: "\e818"; } - -.mdi-image-filter-9-plus:before { - content: "\e819"; } - -.mdi-image-filter-9:before { - content: "\e81a"; } - -.mdi-image-filter-b-and-w:before { - content: "\e81b"; } - -.mdi-image-filter-center-focus:before { - content: "\e81c"; } - -.mdi-image-filter-drama:before { - content: "\e81d"; } - -.mdi-image-filter-frames:before { - content: "\e81e"; } - -.mdi-image-filter-hdr:before { - content: "\e81f"; } - -.mdi-image-filter-none:before { - content: "\e820"; } - -.mdi-image-filter-tilt-shift:before { - content: "\e821"; } - -.mdi-image-filter-vintage:before { - content: "\e822"; } - -.mdi-image-filter:before { - content: "\e823"; } - -.mdi-image-flare:before { - content: "\e824"; } - -.mdi-image-flash-auto:before { - content: "\e825"; } - -.mdi-image-flash-off:before { - content: "\e826"; } - -.mdi-image-flash-on:before { - content: "\e827"; } - -.mdi-image-flip:before { - content: "\e828"; } - -.mdi-image-gradient:before { - content: "\e829"; } - -.mdi-image-grain:before { - content: "\e82a"; } - -.mdi-image-grid-off:before { - content: "\e82b"; } - -.mdi-image-grid-on:before { - content: "\e82c"; } - -.mdi-image-hdr-off:before { - content: "\e82d"; } - -.mdi-image-hdr-on:before { - content: "\e82e"; } - -.mdi-image-hdr-strong:before { - content: "\e82f"; } - -.mdi-image-hdr-weak:before { - content: "\e830"; } - -.mdi-image-healing:before { - content: "\e831"; } - -.mdi-image-image-aspect-ratio:before { - content: "\e832"; } - -.mdi-image-image:before { - content: "\e833"; } - -.mdi-image-iso:before { - content: "\e834"; } - -.mdi-image-landscape:before { - content: "\e835"; } - -.mdi-image-leak-add:before { - content: "\e836"; } - -.mdi-image-leak-remove:before { - content: "\e837"; } - -.mdi-image-lens:before { - content: "\e838"; } - -.mdi-image-looks-3:before { - content: "\e839"; } - -.mdi-image-looks-4:before { - content: "\e83a"; } - -.mdi-image-looks-5:before { - content: "\e83b"; } - -.mdi-image-looks-6:before { - content: "\e83c"; } - -.mdi-image-looks-one:before { - content: "\e83d"; } - -.mdi-image-looks-two:before { - content: "\e83e"; } - -.mdi-image-looks:before { - content: "\e83f"; } - -.mdi-image-loupe:before { - content: "\e840"; } - -.mdi-image-movie-creation:before { - content: "\e841"; } - -.mdi-image-nature-people:before { - content: "\e842"; } - -.mdi-image-nature:before { - content: "\e843"; } - -.mdi-image-navigate-before:before { - content: "\e844"; } - -.mdi-image-navigate-next:before { - content: "\e845"; } - -.mdi-image-palette:before { - content: "\e846"; } - -.mdi-image-panorama-fisheye:before { - content: "\e847"; } - -.mdi-image-panorama-horizontal:before { - content: "\e848"; } - -.mdi-image-panorama-vertical:before { - content: "\e849"; } - -.mdi-image-panorama-wide-angle:before { - content: "\e84a"; } - -.mdi-image-panorama:before { - content: "\e84b"; } - -.mdi-image-photo-album:before { - content: "\e84c"; } - -.mdi-image-photo-camera:before { - content: "\e84d"; } - -.mdi-image-photo-library:before { - content: "\e84e"; } - -.mdi-image-photo:before { - content: "\e84f"; } - -.mdi-image-portrait:before { - content: "\e850"; } - -.mdi-image-remove-red-eye:before { - content: "\e851"; } - -.mdi-image-rotate-left:before { - content: "\e852"; } - -.mdi-image-rotate-right:before { - content: "\e853"; } - -.mdi-image-slideshow:before { - content: "\e854"; } - -.mdi-image-straighten:before { - content: "\e855"; } - -.mdi-image-style:before { - content: "\e856"; } - -.mdi-image-switch-camera:before { - content: "\e857"; } - -.mdi-image-switch-video:before { - content: "\e858"; } - -.mdi-image-tag-faces:before { - content: "\e859"; } - -.mdi-image-texture:before { - content: "\e85a"; } - -.mdi-image-timelapse:before { - content: "\e85b"; } - -.mdi-image-timer-3:before { - content: "\e85c"; } - -.mdi-image-timer-10:before { - content: "\e85d"; } - -.mdi-image-timer-auto:before { - content: "\e85e"; } - -.mdi-image-timer-off:before { - content: "\e85f"; } - -.mdi-image-timer:before { - content: "\e860"; } - -.mdi-image-tonality:before { - content: "\e861"; } - -.mdi-image-transform:before { - content: "\e862"; } - -.mdi-image-tune:before { - content: "\e863"; } - -.mdi-image-wb-auto:before { - content: "\e864"; } - -.mdi-image-wb-cloudy:before { - content: "\e865"; } - -.mdi-image-wb-incandescent:before { - content: "\e866"; } - -.mdi-image-wb-irradescent:before { - content: "\e867"; } - -.mdi-image-wb-sunny:before { - content: "\e868"; } - -.mdi-maps-beenhere:before { - content: "\e869"; } - -.mdi-maps-directions-bike:before { - content: "\e86a"; } - -.mdi-maps-directions-bus:before { - content: "\e86b"; } - -.mdi-maps-directions-car:before { - content: "\e86c"; } - -.mdi-maps-directions-ferry:before { - content: "\e86d"; } - -.mdi-maps-directions-subway:before { - content: "\e86e"; } - -.mdi-maps-directions-train:before { - content: "\e86f"; } - -.mdi-maps-directions-transit:before { - content: "\e870"; } - -.mdi-maps-directions-walk:before { - content: "\e871"; } - -.mdi-maps-directions:before { - content: "\e872"; } - -.mdi-maps-flight:before { - content: "\e873"; } - -.mdi-maps-hotel:before { - content: "\e874"; } - -.mdi-maps-layers-clear:before { - content: "\e875"; } - -.mdi-maps-layers:before { - content: "\e876"; } - -.mdi-maps-local-airport:before { - content: "\e877"; } - -.mdi-maps-local-atm:before { - content: "\e878"; } - -.mdi-maps-local-attraction:before { - content: "\e879"; } - -.mdi-maps-local-bar:before { - content: "\e87a"; } - -.mdi-maps-local-cafe:before { - content: "\e87b"; } - -.mdi-maps-local-car-wash:before { - content: "\e87c"; } - -.mdi-maps-local-convenience-store:before { - content: "\e87d"; } - -.mdi-maps-local-drink:before { - content: "\e87e"; } - -.mdi-maps-local-florist:before { - content: "\e87f"; } - -.mdi-maps-local-gas-station:before { - content: "\e880"; } - -.mdi-maps-local-grocery-store:before { - content: "\e881"; } - -.mdi-maps-local-hospital:before { - content: "\e882"; } - -.mdi-maps-local-hotel:before { - content: "\e883"; } - -.mdi-maps-local-laundry-service:before { - content: "\e884"; } - -.mdi-maps-local-library:before { - content: "\e885"; } - -.mdi-maps-local-mall:before { - content: "\e886"; } - -.mdi-maps-local-movies:before { - content: "\e887"; } - -.mdi-maps-local-offer:before { - content: "\e888"; } - -.mdi-maps-local-parking:before { - content: "\e889"; } - -.mdi-maps-local-pharmacy:before { - content: "\e88a"; } - -.mdi-maps-local-phone:before { - content: "\e88b"; } - -.mdi-maps-local-pizza:before { - content: "\e88c"; } - -.mdi-maps-local-play:before { - content: "\e88d"; } - -.mdi-maps-local-post-office:before { - content: "\e88e"; } - -.mdi-maps-local-print-shop:before { - content: "\e88f"; } - -.mdi-maps-local-restaurant:before { - content: "\e890"; } - -.mdi-maps-local-see:before { - content: "\e891"; } - -.mdi-maps-local-shipping:before { - content: "\e892"; } - -.mdi-maps-local-taxi:before { - content: "\e893"; } - -.mdi-maps-location-history:before { - content: "\e894"; } - -.mdi-maps-map:before { - content: "\e895"; } - -.mdi-maps-my-location:before { - content: "\e896"; } - -.mdi-maps-navigation:before { - content: "\e897"; } - -.mdi-maps-pin-drop:before { - content: "\e898"; } - -.mdi-maps-place:before { - content: "\e899"; } - -.mdi-maps-rate-review:before { - content: "\e89a"; } - -.mdi-maps-restaurant-menu:before { - content: "\e89b"; } - -.mdi-maps-satellite:before { - content: "\e89c"; } - -.mdi-maps-store-mall-directory:before { - content: "\e89d"; } - -.mdi-maps-terrain:before { - content: "\e89e"; } - -.mdi-maps-traffic:before { - content: "\e89f"; } - -.mdi-navigation-apps:before { - content: "\e8a0"; } - -.mdi-navigation-arrow-back:before { - content: "\e8a1"; } - -.mdi-navigation-arrow-drop-down-circle:before { - content: "\e8a2"; } - -.mdi-navigation-arrow-drop-down:before { - content: "\e8a3"; } - -.mdi-navigation-arrow-drop-up:before { - content: "\e8a4"; } - -.mdi-navigation-arrow-forward:before { - content: "\e8a5"; } - -.mdi-navigation-cancel:before { - content: "\e8a6"; } - -.mdi-navigation-check:before { - content: "\e8a7"; } - -.mdi-navigation-chevron-left:before { - content: "\e8a8"; } - -.mdi-navigation-chevron-right:before { - content: "\e8a9"; } - -.mdi-navigation-close:before { - content: "\e8aa"; } - -.mdi-navigation-expand-less:before { - content: "\e8ab"; } - -.mdi-navigation-expand-more:before { - content: "\e8ac"; } - -.mdi-navigation-fullscreen-exit:before { - content: "\e8ad"; } - -.mdi-navigation-fullscreen:before { - content: "\e8ae"; } - -.mdi-navigation-menu:before { - content: "\e8af"; } - -.mdi-navigation-more-horiz:before { - content: "\e8b0"; } - -.mdi-navigation-more-vert:before { - content: "\e8b1"; } - -.mdi-navigation-refresh:before { - content: "\e8b2"; } - -.mdi-navigation-unfold-less:before { - content: "\e8b3"; } - -.mdi-navigation-unfold-more:before { - content: "\e8b4"; } - -.mdi-notification-adb:before { - content: "\e8b5"; } - -.mdi-notification-bluetooth-audio:before { - content: "\e8b6"; } - -.mdi-notification-disc-full:before { - content: "\e8b7"; } - -.mdi-notification-dnd-forwardslash:before { - content: "\e8b8"; } - -.mdi-notification-do-not-disturb:before { - content: "\e8b9"; } - -.mdi-notification-drive-eta:before { - content: "\e8ba"; } - -.mdi-notification-event-available:before { - content: "\e8bb"; } - -.mdi-notification-event-busy:before { - content: "\e8bc"; } - -.mdi-notification-event-note:before { - content: "\e8bd"; } - -.mdi-notification-folder-special:before { - content: "\e8be"; } - -.mdi-notification-mms:before { - content: "\e8bf"; } - -.mdi-notification-more:before { - content: "\e8c0"; } - -.mdi-notification-network-locked:before { - content: "\e8c1"; } - -.mdi-notification-phone-bluetooth-speaker:before { - content: "\e8c2"; } - -.mdi-notification-phone-forwarded:before { - content: "\e8c3"; } - -.mdi-notification-phone-in-talk:before { - content: "\e8c4"; } - -.mdi-notification-phone-locked:before { - content: "\e8c5"; } - -.mdi-notification-phone-missed:before { - content: "\e8c6"; } - -.mdi-notification-phone-paused:before { - content: "\e8c7"; } - -.mdi-notification-play-download:before { - content: "\e8c8"; } - -.mdi-notification-play-install:before { - content: "\e8c9"; } - -.mdi-notification-sd-card:before { - content: "\e8ca"; } - -.mdi-notification-sim-card-alert:before { - content: "\e8cb"; } - -.mdi-notification-sms-failed:before { - content: "\e8cc"; } - -.mdi-notification-sms:before { - content: "\e8cd"; } - -.mdi-notification-sync-disabled:before { - content: "\e8ce"; } - -.mdi-notification-sync-problem:before { - content: "\e8cf"; } - -.mdi-notification-sync:before { - content: "\e8d0"; } - -.mdi-notification-system-update:before { - content: "\e8d1"; } - -.mdi-notification-tap-and-play:before { - content: "\e8d2"; } - -.mdi-notification-time-to-leave:before { - content: "\e8d3"; } - -.mdi-notification-vibration:before { - content: "\e8d4"; } - -.mdi-notification-voice-chat:before { - content: "\e8d5"; } - -.mdi-notification-vpn-lock:before { - content: "\e8d6"; } - -.mdi-social-cake:before { - content: "\e8d7"; } - -.mdi-social-domain:before { - content: "\e8d8"; } - -.mdi-social-group-add:before { - content: "\e8d9"; } - -.mdi-social-group:before { - content: "\e8da"; } - -.mdi-social-location-city:before { - content: "\e8db"; } - -.mdi-social-mood:before { - content: "\e8dc"; } - -.mdi-social-notifications-none:before { - content: "\e8dd"; } - -.mdi-social-notifications-off:before { - content: "\e8de"; } - -.mdi-social-notifications-on:before { - content: "\e8df"; } - -.mdi-social-notifications-paused:before { - content: "\e8e0"; } - -.mdi-social-notifications:before { - content: "\e8e1"; } - -.mdi-social-pages:before { - content: "\e8e2"; } - -.mdi-social-party-mode:before { - content: "\e8e3"; } - -.mdi-social-people-outline:before { - content: "\e8e4"; } - -.mdi-social-people:before { - content: "\e8e5"; } - -.mdi-social-person-add:before { - content: "\e8e6"; } - -.mdi-social-person-outline:before { - content: "\e8e7"; } - -.mdi-social-person:before { - content: "\e8e8"; } - -.mdi-social-plus-one:before { - content: "\e8e9"; } - -.mdi-social-poll:before { - content: "\e8ea"; } - -.mdi-social-public:before { - content: "\e8eb"; } - -.mdi-social-school:before { - content: "\e8ec"; } +@media only screen and (max-width: 992px) { + nav .brand-logo { + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + } + nav .brand-logo.left, nav .brand-logo.right { + padding: 0; + -webkit-transform: none; + transform: none; + } + nav .brand-logo.left { + left: 0.5rem; + } + nav .brand-logo.right { + right: 0.5rem; + left: auto; + } +} + +nav .brand-logo.right { + right: 0.5rem; + padding: 0; +} -.mdi-social-share:before { - content: "\e8ed"; } +nav .brand-logo i, +nav .brand-logo [class^="mdi-"], nav .brand-logo [class*="mdi-"], +nav .brand-logo i.material-icons { + float: left; + margin-right: 15px; +} -.mdi-social-whatshot:before { - content: "\e8ee"; } +nav .nav-title { + display: inline-block; + font-size: 32px; + padding: 28px 0; +} -.mdi-toggle-check-box-outline-blank:before { - content: "\e8ef"; } +nav ul { + margin: 0; +} -.mdi-toggle-check-box:before { - content: "\e8f0"; } +nav ul li { + -webkit-transition: background-color .3s; + transition: background-color .3s; + float: left; + padding: 0; +} -.mdi-toggle-radio-button-off:before { - content: "\e8f1"; } +nav ul li.active { + background-color: rgba(0, 0, 0, 0.1); +} -.mdi-toggle-radio-button-on:before { - content: "\e8f2"; } +nav ul a { + -webkit-transition: background-color .3s; + transition: background-color .3s; + font-size: 1rem; + color: #fff; + display: block; + padding: 0 15px; + cursor: pointer; +} -.mdi-toggle-star-half:before { - content: "\e8f3"; } +nav ul a.btn, nav ul a.btn-large, nav ul a.btn-large, nav ul a.btn-flat, nav ul a.btn-floating { + margin-top: -2px; + margin-left: 15px; + margin-right: 15px; +} -.mdi-toggle-star-outline:before { - content: "\e8f4"; } +nav ul a.btn > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-flat > .material-icons, nav ul a.btn-floating > .material-icons { + height: inherit; + line-height: inherit; +} -.mdi-toggle-star:before { - content: "\e8f5"; } +nav ul a:hover { + background-color: rgba(0, 0, 0, 0.1); +} -.container { - margin: 0 auto; - max-width: 1280px; - width: 90%; } +nav ul.left { + float: left; +} -@media only screen and (min-width : 601px) { - .container { - width: 85%; } } +nav form { + height: 100%; +} -@media only screen and (min-width : 993px) { - .container { - width: 70%; } } +nav .input-field { + margin: 0; + height: 100%; +} -.container .row { - margin-left: -0.75rem; - margin-right: -0.75rem; } +nav .input-field input { + height: 100%; + font-size: 1.2rem; + border: none; + padding-left: 2rem; +} -.section { - padding-top: 1rem; - padding-bottom: 1rem; } - .section.no-pad { - padding: 0; } - .section.no-pad-bot { - padding-bottom: 0; } - .section.no-pad-top { - padding-top: 0; } +nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} -.row { - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; } - .row:after { - content: ""; - display: table; - clear: both; } - .row .col { - float: left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 0.75rem; } - .row .col.s1 { - width: 8.33333%; - margin-left: 0; } - .row .col.s2 { - width: 16.66667%; - margin-left: 0; } - .row .col.s3 { - width: 25%; - margin-left: 0; } - .row .col.s4 { - width: 33.33333%; - margin-left: 0; } - .row .col.s5 { - width: 41.66667%; - margin-left: 0; } - .row .col.s6 { - width: 50%; - margin-left: 0; } - .row .col.s7 { - width: 58.33333%; - margin-left: 0; } - .row .col.s8 { - width: 66.66667%; - margin-left: 0; } - .row .col.s9 { - width: 75%; - margin-left: 0; } - .row .col.s10 { - width: 83.33333%; - margin-left: 0; } - .row .col.s11 { - width: 91.66667%; - margin-left: 0; } - .row .col.s12 { - width: 100%; - margin-left: 0; } - .row .col.offset-s1 { - margin-left: 8.33333%; } - .row .col.offset-s2 { - margin-left: 16.66667%; } - .row .col.offset-s3 { - margin-left: 25%; } - .row .col.offset-s4 { - margin-left: 33.33333%; } - .row .col.offset-s5 { - margin-left: 41.66667%; } - .row .col.offset-s6 { - margin-left: 50%; } - .row .col.offset-s7 { - margin-left: 58.33333%; } - .row .col.offset-s8 { - margin-left: 66.66667%; } - .row .col.offset-s9 { - margin-left: 75%; } - .row .col.offset-s10 { - margin-left: 83.33333%; } - .row .col.offset-s11 { - margin-left: 91.66667%; } - .row .col.offset-s12 { - margin-left: 100%; } - @media only screen and (min-width : 601px) { - .row .col.m1 { - width: 8.33333%; - margin-left: 0; } - .row .col.m2 { - width: 16.66667%; - margin-left: 0; } - .row .col.m3 { - width: 25%; - margin-left: 0; } - .row .col.m4 { - width: 33.33333%; - margin-left: 0; } - .row .col.m5 { - width: 41.66667%; - margin-left: 0; } - .row .col.m6 { - width: 50%; - margin-left: 0; } - .row .col.m7 { - width: 58.33333%; - margin-left: 0; } - .row .col.m8 { - width: 66.66667%; - margin-left: 0; } - .row .col.m9 { - width: 75%; - margin-left: 0; } - .row .col.m10 { - width: 83.33333%; - margin-left: 0; } - .row .col.m11 { - width: 91.66667%; - margin-left: 0; } - .row .col.m12 { - width: 100%; - margin-left: 0; } - .row .col.offset-m1 { - margin-left: 8.33333%; } - .row .col.offset-m2 { - margin-left: 16.66667%; } - .row .col.offset-m3 { - margin-left: 25%; } - .row .col.offset-m4 { - margin-left: 33.33333%; } - .row .col.offset-m5 { - margin-left: 41.66667%; } - .row .col.offset-m6 { - margin-left: 50%; } - .row .col.offset-m7 { - margin-left: 58.33333%; } - .row .col.offset-m8 { - margin-left: 66.66667%; } - .row .col.offset-m9 { - margin-left: 75%; } - .row .col.offset-m10 { - margin-left: 83.33333%; } - .row .col.offset-m11 { - margin-left: 91.66667%; } - .row .col.offset-m12 { - margin-left: 100%; } } - @media only screen and (min-width : 993px) { - .row .col.l1 { - width: 8.33333%; - margin-left: 0; } - .row .col.l2 { - width: 16.66667%; - margin-left: 0; } - .row .col.l3 { - width: 25%; - margin-left: 0; } - .row .col.l4 { - width: 33.33333%; - margin-left: 0; } - .row .col.l5 { - width: 41.66667%; - margin-left: 0; } - .row .col.l6 { - width: 50%; - margin-left: 0; } - .row .col.l7 { - width: 58.33333%; - margin-left: 0; } - .row .col.l8 { - width: 66.66667%; - margin-left: 0; } - .row .col.l9 { - width: 75%; - margin-left: 0; } - .row .col.l10 { - width: 83.33333%; - margin-left: 0; } - .row .col.l11 { - width: 91.66667%; - margin-left: 0; } - .row .col.l12 { - width: 100%; - margin-left: 0; } - .row .col.offset-l1 { - margin-left: 8.33333%; } - .row .col.offset-l2 { - margin-left: 16.66667%; } - .row .col.offset-l3 { - margin-left: 25%; } - .row .col.offset-l4 { - margin-left: 33.33333%; } - .row .col.offset-l5 { - margin-left: 41.66667%; } - .row .col.offset-l6 { - margin-left: 50%; } - .row .col.offset-l7 { - margin-left: 58.33333%; } - .row .col.offset-l8 { - margin-left: 66.66667%; } - .row .col.offset-l9 { - margin-left: 75%; } - .row .col.offset-l10 { - margin-left: 83.33333%; } - .row .col.offset-l11 { - margin-left: 91.66667%; } - .row .col.offset-l12 { - margin-left: 100%; } } +nav .input-field label { + top: 0; + left: 0; +} -nav { +nav .input-field label i { + color: rgba(255, 255, 255, 0.7); + -webkit-transition: color .3s; + transition: color .3s; +} + +nav .input-field label.active i { color: #fff; - background-color: #ee6e73; - width: 100%; - height: 56px; - line-height: 56px; } - nav a { - color: #fff; } - nav .nav-wrapper { - position: relative; - height: 100%; } - nav .nav-wrapper i { - display: block; - font-size: 2rem; } - @media only screen and (min-width : 993px) { - nav a.button-collapse { - display: none; } } - nav .button-collapse { - float: left; - position: relative; - z-index: 1; - height: 56px; } - nav .button-collapse i { - font-size: 2.7rem; - height: 56px; - line-height: 56px; } - nav .brand-logo { - position: absolute; - color: #fff; - display: inline-block; - font-size: 2.1rem; - padding: 0; - white-space: nowrap; } - nav .brand-logo.center { - left: 50%; - -webkit-transform: translateX(-50%); - -moz-transform: translateX(-50%); - -ms-transform: translateX(-50%); - -o-transform: translateX(-50%); - transform: translateX(-50%); } - @media only screen and (max-width : 992px) { - nav .brand-logo { - left: 50%; - -webkit-transform: translateX(-50%); - -moz-transform: translateX(-50%); - -ms-transform: translateX(-50%); - -o-transform: translateX(-50%); - transform: translateX(-50%); } } - nav .brand-logo.right { - right: 0.5rem; - padding: 0; } - nav ul { - margin: 0; } - nav ul li { - -webkit-transition: background-color .3s; - -moz-transition: background-color .3s; - -o-transition: background-color .3s; - -ms-transition: background-color .3s; - transition: background-color .3s; - float: left; - padding: 0; } - nav ul li:hover, nav ul li.active { - background-color: rgba(0, 0, 0, 0.1); } - nav ul a { - font-size: 1rem; - color: #fff; - display: block; - padding: 0 15px; } - nav ul.left { - float: left; } - nav .input-field { - margin: 0; } - nav .input-field input { - height: 100%; - font-size: 1.2rem; - border: none; - padding-left: 2rem; } - nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid { - border: none; - box-shadow: none; } - nav .input-field label { - top: 0; - left: 0; } - nav .input-field label i { - color: rgba(255, 255, 255, 0.7); - -webkit-transition: color .3s; - -moz-transition: color .3s; - -o-transition: color .3s; - -ms-transition: color .3s; - transition: color .3s; } - nav .input-field label.active i { - color: #fff; } - nav .input-field label.active { - -webkit-transform: translateY(0); - -moz-transform: translateY(0); - -ms-transform: translateY(0); - -o-transform: translateY(0); - transform: translateY(0); } +} .navbar-fixed { position: relative; height: 56px; - z-index: 998; } - .navbar-fixed nav { - position: fixed; } + z-index: 997; +} + +.navbar-fixed nav { + position: fixed; +} -@media only screen and (min-width : 601px) { +@media only screen and (min-width: 601px) { + nav.nav-extended .nav-wrapper { + min-height: 64px; + } nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i { height: 64px; - line-height: 64px; } + line-height: 64px; + } .navbar-fixed { - height: 64px; } } + height: 64px; + } +} @font-face { font-family: "Roboto"; - src: url("../font/roboto/Roboto-Thin.woff2") format("woff2"), url("../font/roboto/Roboto-Thin.woff") format("woff"), url("../font/roboto/Roboto-Thin.ttf") format("truetype"); - font-weight: 200; } + src: local(Roboto Thin), url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"), url("../fonts/roboto/Roboto-Thin.woff") format("woff"); + font-weight: 100; +} @font-face { font-family: "Roboto"; - src: url("../font/roboto/Roboto-Light.woff2") format("woff2"), url("../font/roboto/Roboto-Light.woff") format("woff"), url("../font/roboto/Roboto-Light.ttf") format("truetype"); - font-weight: 300; } + src: local(Roboto Light), url("../fonts/roboto/Roboto-Light.woff2") format("woff2"), url("../fonts/roboto/Roboto-Light.woff") format("woff"); + font-weight: 300; +} @font-face { font-family: "Roboto"; - src: url("../font/roboto/Roboto-Regular.woff2") format("woff2"), url("../font/roboto/Roboto-Regular.woff") format("woff"), url("../font/roboto/Roboto-Regular.ttf") format("truetype"); - font-weight: 400; } + src: local(Roboto Regular), url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"), url("../fonts/roboto/Roboto-Regular.woff") format("woff"); + font-weight: 400; +} @font-face { font-family: "Roboto"; - src: url("../font/roboto/Roboto-Medium.woff2") format("woff2"), url("../font/roboto/Roboto-Medium.woff") format("woff"), url("../font/roboto/Roboto-Medium.ttf") format("truetype"); - font-weight: 500; } + src: local(Roboto Medium), url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"), url("../fonts/roboto/Roboto-Medium.woff") format("woff"); + font-weight: 500; +} @font-face { font-family: "Roboto"; - src: url("../font/roboto/Roboto-Bold.woff2") format("woff2"), url("../font/roboto/Roboto-Bold.woff") format("woff"), url("../font/roboto/Roboto-Bold.ttf") format("truetype"); - font-weight: 700; } + src: local(Roboto Bold), url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"), url("../fonts/roboto/Roboto-Bold.woff") format("woff"); + font-weight: 700; +} a { - text-decoration: none; } + text-decoration: none; +} html { line-height: 1.5; font-family: "Roboto", sans-serif; font-weight: normal; - color: rgba(0, 0, 0, 0.87); } - @media only screen and (min-width: 0) { - html { - font-size: 14px; } } - @media only screen and (min-width: 992px) { - html { - font-size: 14.5px; } } - @media only screen and (min-width: 1200px) { - html { - font-size: 15px; } } + color: rgba(0, 0, 0, 0.87); +} + +@media only screen and (min-width: 0) { + html { + font-size: 14px; + } +} + +@media only screen and (min-width: 992px) { + html { + font-size: 14.5px; + } +} + +@media only screen and (min-width: 1200px) { + html { + font-size: 15px; + } +} h1, h2, h3, h4, h5, h6 { font-weight: 400; - line-height: 1.1; } + line-height: 1.1; +} h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - font-weight: inherit; } + font-weight: inherit; +} h1 { font-size: 4.2rem; line-height: 110%; - margin: 2.1rem 0 1.68rem 0; } + margin: 2.1rem 0 1.68rem 0; +} h2 { font-size: 3.56rem; line-height: 110%; - margin: 1.78rem 0 1.424rem 0; } + margin: 1.78rem 0 1.424rem 0; +} h3 { font-size: 2.92rem; line-height: 110%; - margin: 1.46rem 0 1.168rem 0; } + margin: 1.46rem 0 1.168rem 0; +} h4 { font-size: 2.28rem; line-height: 110%; - margin: 1.14rem 0 0.912rem 0; } + margin: 1.14rem 0 0.912rem 0; +} h5 { font-size: 1.64rem; line-height: 110%; - margin: 0.82rem 0 0.656rem 0; } + margin: 0.82rem 0 0.656rem 0; +} h6 { font-size: 1rem; line-height: 110%; - margin: 0.5rem 0 0.4rem 0; } + margin: 0.5rem 0 0.4rem 0; +} em { - font-style: italic; } + font-style: italic; +} strong { - font-weight: 500; } + font-weight: 500; +} small { - font-size: 75%; } + font-size: 75%; +} -.light, footer.page-footer .footer-copyright { - font-weight: 300; } +.light, .page-footer .footer-copyright { + font-weight: 300; +} .thin { - font-weight: 200; } + font-weight: 200; +} .flow-text { - font-weight: 300; } - @media only screen and (min-width: 360px) { - .flow-text { - font-size: 1.2rem; } } - @media only screen and (min-width: 390px) { - .flow-text { - font-size: 1.224rem; } } - @media only screen and (min-width: 420px) { - .flow-text { - font-size: 1.248rem; } } - @media only screen and (min-width: 450px) { - .flow-text { - font-size: 1.272rem; } } - @media only screen and (min-width: 480px) { - .flow-text { - font-size: 1.296rem; } } - @media only screen and (min-width: 510px) { - .flow-text { - font-size: 1.32rem; } } - @media only screen and (min-width: 540px) { - .flow-text { - font-size: 1.344rem; } } - @media only screen and (min-width: 570px) { - .flow-text { - font-size: 1.368rem; } } - @media only screen and (min-width: 600px) { - .flow-text { - font-size: 1.392rem; } } - @media only screen and (min-width: 630px) { - .flow-text { - font-size: 1.416rem; } } - @media only screen and (min-width: 660px) { - .flow-text { - font-size: 1.44rem; } } - @media only screen and (min-width: 690px) { - .flow-text { - font-size: 1.464rem; } } - @media only screen and (min-width: 720px) { - .flow-text { - font-size: 1.488rem; } } - @media only screen and (min-width: 750px) { - .flow-text { - font-size: 1.512rem; } } - @media only screen and (min-width: 780px) { - .flow-text { - font-size: 1.536rem; } } - @media only screen and (min-width: 810px) { - .flow-text { - font-size: 1.56rem; } } - @media only screen and (min-width: 840px) { - .flow-text { - font-size: 1.584rem; } } - @media only screen and (min-width: 870px) { - .flow-text { - font-size: 1.608rem; } } - @media only screen and (min-width: 900px) { - .flow-text { - font-size: 1.632rem; } } - @media only screen and (min-width: 930px) { - .flow-text { - font-size: 1.656rem; } } - @media only screen and (min-width: 960px) { - .flow-text { - font-size: 1.68rem; } } - @media only screen and (max-width: 360px) { - .flow-text { - font-size: 1.2rem; } } + font-weight: 300; +} + +@media only screen and (min-width: 360px) { + .flow-text { + font-size: 1.2rem; + } +} + +@media only screen and (min-width: 390px) { + .flow-text { + font-size: 1.224rem; + } +} + +@media only screen and (min-width: 420px) { + .flow-text { + font-size: 1.248rem; + } +} + +@media only screen and (min-width: 450px) { + .flow-text { + font-size: 1.272rem; + } +} + +@media only screen and (min-width: 480px) { + .flow-text { + font-size: 1.296rem; + } +} + +@media only screen and (min-width: 510px) { + .flow-text { + font-size: 1.32rem; + } +} + +@media only screen and (min-width: 540px) { + .flow-text { + font-size: 1.344rem; + } +} + +@media only screen and (min-width: 570px) { + .flow-text { + font-size: 1.368rem; + } +} + +@media only screen and (min-width: 600px) { + .flow-text { + font-size: 1.392rem; + } +} + +@media only screen and (min-width: 630px) { + .flow-text { + font-size: 1.416rem; + } +} + +@media only screen and (min-width: 660px) { + .flow-text { + font-size: 1.44rem; + } +} + +@media only screen and (min-width: 690px) { + .flow-text { + font-size: 1.464rem; + } +} + +@media only screen and (min-width: 720px) { + .flow-text { + font-size: 1.488rem; + } +} + +@media only screen and (min-width: 750px) { + .flow-text { + font-size: 1.512rem; + } +} + +@media only screen and (min-width: 780px) { + .flow-text { + font-size: 1.536rem; + } +} + +@media only screen and (min-width: 810px) { + .flow-text { + font-size: 1.56rem; + } +} + +@media only screen and (min-width: 840px) { + .flow-text { + font-size: 1.584rem; + } +} + +@media only screen and (min-width: 870px) { + .flow-text { + font-size: 1.608rem; + } +} + +@media only screen and (min-width: 900px) { + .flow-text { + font-size: 1.632rem; + } +} + +@media only screen and (min-width: 930px) { + .flow-text { + font-size: 1.656rem; + } +} + +@media only screen and (min-width: 960px) { + .flow-text { + font-size: 1.68rem; + } +} + +@media only screen and (max-width: 360px) { + .flow-text { + font-size: 1.2rem; + } +} + +.scale-transition { + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; + transition: -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; + transition: transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; + transition: transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63), -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; +} + +.scale-transition.scale-out { + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transition: -webkit-transform .2s !important; + transition: -webkit-transform .2s !important; + transition: transform .2s !important; + transition: transform .2s, -webkit-transform .2s !important; +} + +.scale-transition.scale-in { + -webkit-transform: scale(1); + transform: scale(1); +} .card-panel { + -webkit-transition: -webkit-box-shadow .25s; + transition: -webkit-box-shadow .25s; transition: box-shadow .25s; - padding: 20px; + transition: box-shadow .25s, -webkit-box-shadow .25s; + padding: 24px; margin: 0.5rem 0 1rem 0; border-radius: 2px; - background-color: #fff; } + background-color: #fff; +} .card { position: relative; - overflow: hidden; margin: 0.5rem 0 1rem 0; background-color: #fff; + -webkit-transition: -webkit-box-shadow .25s; + transition: -webkit-box-shadow .25s; transition: box-shadow .25s; - border-radius: 2px; } - .card .card-title { - color: #fff; - font-size: 24px; - font-weight: 300; } - .card .card-title.activator { - cursor: pointer; } - .card.small, .card.medium, .card.large { - position: relative; } - .card.small .card-image, .card.medium .card-image, .card.large .card-image { - overflow: hidden; } - .card.small .card-content, .card.medium .card-content, .card.large .card-content { - overflow: hidden; } - .card.small .card-action, .card.medium .card-action, .card.large .card-action { - position: absolute; - bottom: 0; - left: 0; - right: 0; } - .card.small { - height: 300px; } - .card.small .card-image { - height: 150px; } - .card.small .card-content { - height: 150px; } - .card.medium { - height: 400px; } - .card.medium .card-image { - height: 250px; } - .card.medium .card-content { - height: 150px; } - .card.large { - height: 500px; } - .card.large .card-image { - height: 330px; } - .card.large .card-content { - height: 170px; } - .card .card-image { - position: relative; } - .card .card-image img { - border-radius: 2px 2px 0 0; - position: relative; - left: 0; - right: 0; - top: 0; - bottom: 0; - width: 100%; } - .card .card-image .card-title { - position: absolute; - bottom: 0; - left: 0; - padding: 20px; } - .card .card-content { - padding: 20px; - border-radius: 0 0 2px 2px; } - .card .card-content p { - margin: 0; - color: inherit; } - .card .card-content .card-title { - line-height: 48px; } - .card .card-action { - border-top: 1px solid rgba(160, 160, 160, 0.2); - padding: 20px; } - .card .card-action a { - color: #ffab40; - margin-right: 20px; - -webkit-transition: color .3s ease; - -moz-transition: color .3s ease; - -o-transition: color .3s ease; - -ms-transition: color .3s ease; - transition: color .3s ease; - text-transform: uppercase; } - .card .card-action a:hover { - color: #ffd8a6; } - .card .card-reveal { - padding: 20px; - position: absolute; - background-color: #fff; - width: 100%; - overflow-y: auto; - top: 100%; - height: 100%; - z-index: 1; - display: none; } - .card .card-reveal .card-title { - cursor: pointer; - display: block; } + transition: box-shadow .25s, -webkit-box-shadow .25s; + border-radius: 2px; +} + +.card .card-title { + font-size: 24px; + font-weight: 300; +} + +.card .card-title.activator { + cursor: pointer; +} + +.card.small, .card.medium, .card.large { + position: relative; +} + +.card.small .card-image, .card.medium .card-image, .card.large .card-image { + max-height: 60%; + overflow: hidden; +} + +.card.small .card-image + .card-content, .card.medium .card-image + .card-content, .card.large .card-image + .card-content { + max-height: 40%; +} + +.card.small .card-content, .card.medium .card-content, .card.large .card-content { + max-height: 100%; + overflow: hidden; +} + +.card.small .card-action, .card.medium .card-action, .card.large .card-action { + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +.card.small { + height: 300px; +} + +.card.medium { + height: 400px; +} + +.card.large { + height: 500px; +} + +.card.horizontal { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.card.horizontal.small .card-image, .card.horizontal.medium .card-image, .card.horizontal.large .card-image { + height: 100%; + max-height: none; + overflow: visible; +} + +.card.horizontal.small .card-image img, .card.horizontal.medium .card-image img, .card.horizontal.large .card-image img { + height: 100%; +} + +.card.horizontal .card-image { + max-width: 50%; +} + +.card.horizontal .card-image img { + border-radius: 2px 0 0 2px; + max-width: 100%; + width: auto; +} + +.card.horizontal .card-stacked { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + position: relative; +} + +.card.horizontal .card-stacked .card-content { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} + +.card.sticky-action .card-action { + z-index: 2; +} + +.card.sticky-action .card-reveal { + z-index: 1; + padding-bottom: 64px; +} + +.card .card-image { + position: relative; +} + +.card .card-image img { + display: block; + border-radius: 2px 2px 0 0; + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100%; +} + +.card .card-image .card-title { + color: #fff; + position: absolute; + bottom: 0; + left: 0; + max-width: 100%; + padding: 24px; +} + +.card .card-content { + padding: 24px; + border-radius: 0 0 2px 2px; +} + +.card .card-content p { + margin: 0; + color: inherit; +} + +.card .card-content .card-title { + display: block; + line-height: 32px; + margin-bottom: 8px; +} + +.card .card-content .card-title i { + line-height: 32px; +} + +.card .card-action { + position: relative; + background-color: inherit; + border-top: 1px solid rgba(160, 160, 160, 0.2); + padding: 16px 24px; +} + +.card .card-action:last-child { + border-radius: 0 0 2px 2px; +} + +.card .card-action a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating) { + color: #ffab40; + margin-right: 24px; + -webkit-transition: color .3s ease; + transition: color .3s ease; + text-transform: uppercase; +} + +.card .card-action a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating):hover { + color: #ffd8a6; +} + +.card .card-reveal { + padding: 24px; + position: absolute; + background-color: #fff; + width: 100%; + overflow-y: auto; + left: 0; + top: 100%; + height: 100%; + z-index: 3; + display: none; +} + +.card .card-reveal .card-title { + cursor: pointer; + display: block; +} #toast-container { display: block; position: fixed; - z-index: 1001; } - @media only screen and (max-width : 600px) { - #toast-container { - min-width: 100%; - bottom: 0%; } } - @media only screen and (min-width : 601px) and (max-width : 992px) { - #toast-container { - min-width: 30%; - left: 5%; - bottom: 7%; } } - @media only screen and (min-width : 993px) { - #toast-container { - min-width: 8%; - top: 10%; - right: 7%; } } + z-index: 10000; +} + +@media only screen and (max-width: 600px) { + #toast-container { + min-width: 100%; + bottom: 0%; + } +} + +@media only screen and (min-width: 601px) and (max-width: 992px) { + #toast-container { + left: 5%; + bottom: 7%; + max-width: 90%; + } +} + +@media only screen and (min-width: 993px) { + #toast-container { + top: 10%; + right: 7%; + max-width: 86%; + } +} .toast { border-radius: 2px; - top: 0; + top: 35px; width: auto; - clear: both; margin-top: 10px; position: relative; max-width: 100%; - height: 48px; - line-height: 48px; + height: auto; + min-height: 48px; + line-height: 1.5em; + word-break: break-all; background-color: #323232; - padding: 0 25px; + padding: 10px 25px; font-size: 1.1rem; font-weight: 300; color: #fff; display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; display: -webkit-flex; + display: -ms-flexbox; display: flex; - -webkit-flex-align: center; - -ms-flex-align: center; + -webkit-box-align: center; -webkit-align-items: center; - align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; -webkit-justify-content: space-between; - justify-content: space-between; } - .toast .btn, .toast .btn-large, .toast .btn-flat { - margin: 0; - margin-left: 3rem; } - .toast.rounded { - border-radius: 24px; } - @media only screen and (max-width : 600px) { - .toast { - width: 100%; - border-radius: 0; } } - @media only screen and (min-width : 601px) and (max-width : 992px) { - .toast { - float: left; } } - @media only screen and (min-width : 993px) { - .toast { - float: right; } } + -ms-flex-pack: justify; + justify-content: space-between; + cursor: default; +} + +.toast .toast-action { + color: #eeff41; + font-weight: 500; + margin-right: -25px; + margin-left: 3rem; +} + +.toast.rounded { + border-radius: 24px; +} + +@media only screen and (max-width: 600px) { + .toast { + width: 100%; + border-radius: 0; + } +} .tabs { position: relative; + overflow-x: auto; + overflow-y: hidden; height: 48px; + width: 100%; background-color: #fff; margin: 0 auto; - width: 100%; - white-space: nowrap; } - .tabs .tab { - display: block; - float: left; - text-align: center; - line-height: 48px; - height: 48px; - padding: 0 20px; - margin: 0; - text-transform: uppercase; - letter-spacing: .8px; - width: 15%; } - .tabs .tab a { - color: #ee6e73; - display: block; - width: 100%; - height: 100%; - -webkit-transition: color .28s ease; - -moz-transition: color .28s ease; - -o-transition: color .28s ease; - -ms-transition: color .28s ease; - transition: color .28s ease; } - .tabs .tab a:hover { - color: #f9c9cb; } - .tabs .tab.disabled a { - color: #f9c9cb; - cursor: default; } - .tabs .indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: #f6b2b5; - will-change: left, right; } + white-space: nowrap; +} + +.tabs.tabs-transparent { + background-color: transparent; +} + +.tabs.tabs-transparent .tab a, +.tabs.tabs-transparent .tab.disabled a, +.tabs.tabs-transparent .tab.disabled a:hover { + color: rgba(255, 255, 255, 0.7); +} + +.tabs.tabs-transparent .tab a:hover, +.tabs.tabs-transparent .tab a.active { + color: #fff; +} + +.tabs.tabs-transparent .indicator { + background-color: #fff; +} + +.tabs.tabs-fixed-width { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.tabs.tabs-fixed-width .tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} .tabs .tab { - padding: 0; } + display: inline-block; + text-align: center; + line-height: 48px; + height: 48px; + padding: 0; + margin: 0; + text-transform: uppercase; +} + +.tabs .tab a { + color: rgba(238, 110, 115, 0.7); + display: block; + width: 100%; + height: 100%; + padding: 0 24px; + font-size: 14px; + text-overflow: ellipsis; + overflow: hidden; + -webkit-transition: color .28s ease; + transition: color .28s ease; +} + +.tabs .tab a:hover, .tabs .tab a.active { + background-color: transparent; + color: #ee6e73; +} + +.tabs .tab.disabled a, +.tabs .tab.disabled a:hover { + color: rgba(238, 110, 115, 0.7); + cursor: default; +} + +.tabs .indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: #f6b2b5; + will-change: left, right; +} + +@media only screen and (max-width: 992px) { + .tabs { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + } + .tabs .tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + } + .tabs .tab a { + padding: 0 12px; + } +} .material-tooltip { padding: 10px 8px; @@ -5733,58 +5105,104 @@ small { border-radius: 2px; color: #fff; min-height: 36px; - line-height: 1rem; + line-height: 120%; opacity: 0; - display: none; position: absolute; text-align: center; + max-width: calc(100% - 4px); overflow: hidden; left: 0; top: 0; - will-change: top, left; } + pointer-events: none; + visibility: hidden; +} .backdrop { position: absolute; opacity: 0; - display: none; height: 7px; width: 14px; - border-radius: 0 0 14px 14px; + border-radius: 0 0 50% 50%; background-color: #323232; z-index: -1; - -webkit-transform-origin: 50% 10%; - -moz-transform-origin: 50% 10%; - -ms-transform-origin: 50% 10%; - -o-transform-origin: 50% 10%; - transform-origin: 50% 10%; - will-change: transform, opacity; } - -.btn, .btn-large, .btn-flat { + -webkit-transform-origin: 50% 0%; + transform-origin: 50% 0%; + visibility: hidden; +} + +.btn, .btn-large, +.btn-flat { border: none; border-radius: 2px; display: inline-block; height: 36px; line-height: 36px; - outline: 0; padding: 0 2rem; text-transform: uppercase; vertical-align: middle; - -webkit-tap-highlight-color: transparent; } - -.btn.disabled, .disabled.btn-large, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-large:disabled, .btn-floating:disabled { + -webkit-tap-highlight-color: transparent; +} + +.btn.disabled, .disabled.btn-large, +.btn-floating.disabled, +.btn-large.disabled, +.btn-flat.disabled, +.btn:disabled, +.btn-large:disabled, +.btn-floating:disabled, +.btn-large:disabled, +.btn-flat:disabled, +.btn[disabled], +[disabled].btn-large, +.btn-floating[disabled], +.btn-large[disabled], +.btn-flat[disabled] { + pointer-events: none; + background-color: #DFDFDF !important; + -webkit-box-shadow: none; + box-shadow: none; + color: #9F9F9F !important; + cursor: default; +} + +.btn.disabled:hover, .disabled.btn-large:hover, +.btn-floating.disabled:hover, +.btn-large.disabled:hover, +.btn-flat.disabled:hover, +.btn:disabled:hover, +.btn-large:disabled:hover, +.btn-floating:disabled:hover, +.btn-large:disabled:hover, +.btn-flat:disabled:hover, +.btn[disabled]:hover, +[disabled].btn-large:hover, +.btn-floating[disabled]:hover, +.btn-large[disabled]:hover, +.btn-flat[disabled]:hover { background-color: #DFDFDF !important; - box-shadow: none; color: #9F9F9F !important; - cursor: default; } - .btn.disabled *, .disabled.btn-large *, .btn-floating.disabled *, .btn-large.disabled *, .btn:disabled *, .btn-large:disabled *, .btn-large:disabled *, .btn-floating:disabled * { - pointer-events: none; } - .btn.disabled:hover, .disabled.btn-large:hover, .btn-floating.disabled:hover, .btn-large.disabled:hover, .btn:disabled:hover, .btn-large:disabled:hover, .btn-large:disabled:hover, .btn-floating:disabled:hover { - background-color: #DFDFDF; - color: #9F9F9F; } - -.btn i, .btn-large i, .btn-floating i, .btn-large i, .btn-flat i { +} + +.btn, .btn-large, +.btn-floating, +.btn-large, +.btn-flat { + font-size: 1rem; + outline: 0; +} + +.btn i, .btn-large i, +.btn-floating i, +.btn-large i, +.btn-flat i { font-size: 1.3rem; - line-height: inherit; } + line-height: inherit; +} + +.btn:focus, .btn-large:focus, +.btn-floating:focus { + background-color: #1d7d74; +} .btn, .btn-large { text-decoration: none; @@ -5793,13 +5211,13 @@ small { text-align: center; letter-spacing: .5px; -webkit-transition: .2s ease-out; - -moz-transition: .2s ease-out; - -o-transition: .2s ease-out; - -ms-transition: .2s ease-out; transition: .2s ease-out; - cursor: pointer; } - .btn:hover, .btn-large:hover { - background-color: #2bbbad; } + cursor: pointer; +} + +.btn:hover, .btn-large:hover { + background-color: #2bbbad; +} .btn-floating { display: inline-block; @@ -5807,32 +5225,62 @@ small { position: relative; overflow: hidden; z-index: 1; - width: 37px; - height: 37px; - line-height: 37px; + width: 40px; + height: 40px; + line-height: 40px; padding: 0; background-color: #26a69a; border-radius: 50%; + -webkit-transition: .3s; transition: .3s; cursor: pointer; - vertical-align: middle; } - .btn-floating i { - width: inherit; - display: inline-block; - text-align: center; - color: #fff; - font-size: 1.6rem; - line-height: 37px; } - .btn-floating:before { - border-radius: 0; } - .btn-floating.btn-large { - width: 55.5px; - height: 55.5px; } - .btn-floating.btn-large i { - line-height: 55.5px; } + vertical-align: middle; +} + +.btn-floating:hover { + background-color: #26a69a; +} + +.btn-floating:before { + border-radius: 0; +} + +.btn-floating.btn-large { + width: 56px; + height: 56px; +} + +.btn-floating.btn-large.halfway-fab { + bottom: -28px; +} + +.btn-floating.btn-large i { + line-height: 56px; +} + +.btn-floating.halfway-fab { + position: absolute; + right: 24px; + bottom: -20px; +} + +.btn-floating.halfway-fab.left { + right: auto; + left: 24px; +} + +.btn-floating i { + width: inherit; + display: inline-block; + text-align: center; + color: #fff; + font-size: 1.6rem; + line-height: 40px; +} button.btn-floating { - border: none; } + border: none; +} .fixed-action-btn { position: fixed; @@ -5840,36 +5288,151 @@ button.btn-floating { bottom: 23px; padding-top: 15px; margin-bottom: 0; - z-index: 998; } - .fixed-action-btn ul { - left: 0; - right: 0; - text-align: center; - position: absolute; - bottom: 64px; - margin: 0; } - .fixed-action-btn ul li { - margin-bottom: 15px; } - .fixed-action-btn ul a.btn-floating { - opacity: 0; } + z-index: 997; +} + +.fixed-action-btn.active ul { + visibility: visible; +} + +.fixed-action-btn.horizontal { + padding: 0 0 0 15px; +} + +.fixed-action-btn.horizontal ul { + text-align: right; + right: 64px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + height: 100%; + left: auto; + width: 500px; + /*width 100% only goes to width of button container */ +} + +.fixed-action-btn.horizontal ul li { + display: inline-block; + margin: 15px 15px 0 0; +} + +.fixed-action-btn.toolbar { + padding: 0; + height: 56px; +} + +.fixed-action-btn.toolbar.active > a i { + opacity: 0; +} + +.fixed-action-btn.toolbar ul { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + top: 0; + bottom: 0; + z-index: 1; +} + +.fixed-action-btn.toolbar ul li { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + display: inline-block; + margin: 0; + height: 100%; + -webkit-transition: none; + transition: none; +} + +.fixed-action-btn.toolbar ul li a { + display: block; + overflow: hidden; + position: relative; + width: 100%; + height: 100%; + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + line-height: 56px; + z-index: 1; +} + +.fixed-action-btn.toolbar ul li a i { + line-height: inherit; +} + +.fixed-action-btn ul { + left: 0; + right: 0; + text-align: center; + position: absolute; + bottom: 64px; + margin: 0; + visibility: hidden; +} + +.fixed-action-btn ul li { + margin-bottom: 15px; +} + +.fixed-action-btn ul a.btn-floating { + opacity: 0; +} + +.fixed-action-btn .fab-backdrop { + position: absolute; + top: 0; + left: 0; + z-index: -1; + width: 40px; + height: 40px; + background-color: #26a69a; + border-radius: 50%; + -webkit-transform: scale(0); + transform: scale(0); +} .btn-flat { - box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; background-color: transparent; color: #343434; - cursor: pointer; } - .btn-flat.disabled { - color: #b3b3b3; - cursor: default; } + cursor: pointer; + -webkit-transition: background-color .2s; + transition: background-color .2s; +} + +.btn-flat:focus, .btn-flat:hover { + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-flat:focus { + background-color: rgba(0, 0, 0, 0.1); +} + +.btn-flat.disabled { + background-color: transparent !important; + color: #b3b2b2 !important; + cursor: default; +} .btn-large { height: 54px; - line-height: 56px; } - .btn-large i { - font-size: 1.6rem; } + line-height: 54px; +} + +.btn-large i { + font-size: 1.6rem; +} .btn-block { - display: block; } + display: block; +} .dropdown-content { background-color: #fff; @@ -5881,33 +5444,68 @@ button.btn-floating { opacity: 0; position: absolute; z-index: 999; - will-change: width, height; } - .dropdown-content li { - clear: both; - color: rgba(0, 0, 0, 0.87); - cursor: pointer; - line-height: 1.5rem; - width: 100%; - text-align: left; - text-transform: none; } - .dropdown-content li:hover, .dropdown-content li.active { - background-color: #eee; } - .dropdown-content li > a, .dropdown-content li > span { - font-size: 1.2rem; - color: #26a69a; - display: block; - padding: 1rem 1rem; } - .dropdown-content li > a > i { - height: inherit; - line-height: inherit; } - -/*! - * Waves v0.6.0 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE + will-change: width, height; +} + +.dropdown-content li { + clear: both; + color: rgba(0, 0, 0, 0.87); + cursor: pointer; + min-height: 50px; + line-height: 1.5rem; + width: 100%; + text-align: left; + text-transform: none; +} + +.dropdown-content li:hover, .dropdown-content li.active, .dropdown-content li.selected { + background-color: #eee; +} + +.dropdown-content li.active.selected { + background-color: #e1e1e1; +} + +.dropdown-content li.divider { + min-height: 0; + height: 1px; +} + +.dropdown-content li > a, .dropdown-content li > span { + font-size: 16px; + color: #26a69a; + display: block; + line-height: 22px; + padding: 14px 16px; +} + +.dropdown-content li > span > label { + top: 1px; + left: 0; + height: 18px; +} + +.dropdown-content li > a > i { + height: inherit; + line-height: inherit; + float: left; + margin: 0 24px 0 0; + width: 24px; +} + +.input-field.col .dropdown-content [type="checkbox"] + label { + top: 1px; + left: 0; + height: 18px; +} + +/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE */ .waves-effect { position: relative; @@ -5915,80 +5513,99 @@ button.btn-floating { display: inline-block; overflow: hidden; -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; -webkit-tap-highlight-color: transparent; vertical-align: middle; z-index: 1; - will-change: opacity, transform; - -webkit-transition: all .3s ease-out; - -moz-transition: all .3s ease-out; - -o-transition: all .3s ease-out; - -ms-transition: all .3s ease-out; - transition: all .3s ease-out; } - .waves-effect .waves-ripple { - position: absolute; - border-radius: 50%; - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - opacity: 0; - background: rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.7s ease-out; - -moz-transition: all 0.7s ease-out; - -o-transition: all 0.7s ease-out; - -ms-transition: all 0.7s ease-out; - transition: all 0.7s ease-out; - -webkit-transition-property: -webkit-transform, opacity; - -moz-transition-property: -moz-transform, opacity; - -o-transition-property: -o-transform, opacity; - transition-property: transform, opacity; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - pointer-events: none; } - .waves-effect.waves-light .waves-ripple { - background-color: rgba(255, 255, 255, 0.45); } - .waves-effect.waves-red .waves-ripple { - background-color: rgba(244, 67, 54, 0.7); } - .waves-effect.waves-yellow .waves-ripple { - background-color: rgba(255, 235, 59, 0.7); } - .waves-effect.waves-orange .waves-ripple { - background-color: rgba(255, 152, 0, 0.7); } - .waves-effect.waves-purple .waves-ripple { - background-color: rgba(156, 39, 176, 0.7); } - .waves-effect.waves-green .waves-ripple { - background-color: rgba(76, 175, 80, 0.7); } - .waves-effect.waves-teal .waves-ripple { - background-color: rgba(0, 150, 136, 0.7); } + -webkit-transition: .3s ease-out; + transition: .3s ease-out; +} + +.waves-effect .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + opacity: 0; + background: rgba(0, 0, 0, 0.2); + -webkit-transition: all 0.7s ease-out; + transition: all 0.7s ease-out; + -webkit-transition-property: opacity, -webkit-transform; + transition-property: opacity, -webkit-transform; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + -webkit-transform: scale(0); + transform: scale(0); + pointer-events: none; +} + +.waves-effect.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45); +} + +.waves-effect.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, 0.7); +} + +.waves-effect.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, 0.7); +} + +.waves-effect.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, 0.7); +} + +.waves-effect.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.7); +} + +.waves-effect.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.7); +} + +.waves-effect.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.7); +} + +.waves-effect input[type="button"], .waves-effect input[type="reset"], .waves-effect input[type="submit"] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none; +} + +.waves-effect img { + position: relative; + z-index: -1; +} .waves-notransition { -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; - -ms-transition: none !important; - transition: none !important; } + transition: none !important; +} .waves-circle { -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); - -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); } + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); +} .waves-input-wrapper { border-radius: 0.2em; - vertical-align: bottom; } - .waves-input-wrapper .waves-button-input { - position: relative; - top: 0; - left: 0; - z-index: 1; } + vertical-align: bottom; +} + +.waves-input-wrapper .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; +} .waves-circle { text-align: center; @@ -5996,14 +5613,17 @@ button.btn-floating { height: 2.5em; line-height: 2.5em; border-radius: 50%; - -webkit-mask-image: none; } + -webkit-mask-image: none; +} .waves-block { - display: block; } + display: block; +} /* Firefox Bug: link not triggered */ -a.waves-effect .waves-ripple { - z-index: -1; } +.waves-effect .waves-ripple { + z-index: -1; +} .modal { display: none; @@ -6017,30 +5637,44 @@ a.waves-effect .waves-ripple { margin: auto; overflow-y: auto; border-radius: 2px; - will-change: top, opacity; } - @media only screen and (max-width : 992px) { - .modal { - width: 80%; } } - .modal h1, .modal h2, .modal h3, .modal h4 { - margin-top: 0; } - .modal .modal-content { - padding: 24px; } - .modal .modal-close { - cursor: pointer; } - .modal .modal-footer { - border-radius: 0 0 2px 2px; - background-color: #fafafa; - padding: 4px 6px; - height: 56px; - width: 100%; } - .modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat { - float: right; - margin: 6px 0; } - -.lean-overlay { + will-change: top, opacity; +} + +@media only screen and (max-width: 992px) { + .modal { + width: 80%; + } +} + +.modal h1, .modal h2, .modal h3, .modal h4 { + margin-top: 0; +} + +.modal .modal-content { + padding: 24px; +} + +.modal .modal-close { + cursor: pointer; +} + +.modal .modal-footer { + border-radius: 0 0 2px 2px; + background-color: #fafafa; + padding: 4px 6px; + height: 56px; + width: 100%; + text-align: right; +} + +.modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat { + margin: 6px 0; +} + +.modal-overlay { position: fixed; z-index: 999; - top: -100px; + top: -25%; left: 0; bottom: 0; right: 0; @@ -6048,21 +5682,27 @@ a.waves-effect .waves-ripple { width: 100%; background: #000; display: none; - will-change: opacity; } + will-change: opacity; +} .modal.modal-fixed-footer { padding: 0; - height: 70%; } - .modal.modal-fixed-footer .modal-content { - position: absolute; - height: calc(100% - 56px); - max-height: 100%; - width: 100%; - overflow-y: auto; } - .modal.modal-fixed-footer .modal-footer { - border-top: 1px solid rgba(0, 0, 0, 0.1); - position: absolute; - bottom: 0; } + height: 70%; +} + +.modal.modal-fixed-footer .modal-content { + position: absolute; + height: calc(100% - 56px); + max-height: 100%; + width: 100%; + overflow-y: auto; +} + +.modal.modal-fixed-footer .modal-footer { + border-top: 1px solid rgba(0, 0, 0, 0.1); + position: absolute; + bottom: 0; +} .modal.bottom-sheet { top: auto; @@ -6071,96 +5711,230 @@ a.waves-effect .waves-ripple { width: 100%; max-height: 45%; border-radius: 0; - will-change: bottom, opacity; } + will-change: bottom, opacity; +} .collapsible { border-top: 1px solid #ddd; border-right: 1px solid #ddd; border-left: 1px solid #ddd; - margin: 0.5rem 0 1rem 0; } + margin: 0.5rem 0 1rem 0; +} .collapsible-header { - display: block; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; cursor: pointer; - height: 3rem; - line-height: 3rem; - padding: 0 1rem; + -webkit-tap-highlight-color: transparent; + line-height: 1.5; + padding: 1rem; background-color: #fff; - border-bottom: 1px solid #ddd; } - .collapsible-header i { - width: 2rem; - font-size: 1.6rem; - line-height: 3rem; - display: block; - float: left; - text-align: center; - margin-right: 1rem; } + border-bottom: 1px solid #ddd; +} + +.collapsible-header i { + width: 2rem; + font-size: 1.6rem; + display: inline-block; + text-align: center; + margin-right: 1rem; +} .collapsible-body { display: none; border-bottom: 1px solid #ddd; -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .collapsible-body p { - margin: 0; - padding: 2rem; } + box-sizing: border-box; + padding: 2rem; +} -.side-nav .collapsible { +.side-nav .collapsible, +.side-nav.fixed .collapsible { border: none; - box-shadow: none; } - .side-nav .collapsible li { - padding: 0; } -.side-nav .collapsible-header { + -webkit-box-shadow: none; + box-shadow: none; +} + +.side-nav .collapsible li, +.side-nav.fixed .collapsible li { + padding: 0; +} + +.side-nav .collapsible-header, +.side-nav.fixed .collapsible-header { background-color: transparent; border: none; line-height: inherit; height: inherit; - margin: 0 1rem; } - .side-nav .collapsible-header i { - line-height: inherit; } -.side-nav .collapsible-body { + padding: 0 16px; +} + +.side-nav .collapsible-header:hover, +.side-nav.fixed .collapsible-header:hover { + background-color: rgba(0, 0, 0, 0.05); +} + +.side-nav .collapsible-header i, +.side-nav.fixed .collapsible-header i { + line-height: inherit; +} + +.side-nav .collapsible-body, +.side-nav.fixed .collapsible-body { border: 0; - background-color: #fff; } - .side-nav .collapsible-body li a { - margin: 0 1rem 0 2rem; } + background-color: #fff; +} + +.side-nav .collapsible-body li a, +.side-nav.fixed .collapsible-body li a { + padding: 0 23.5px 0 31px; +} .collapsible.popout { border: none; - box-shadow: none; } - .collapsible.popout > li { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); - margin: 0 24px; - transition: margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94); } - .collapsible.popout > li.active { - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); - margin: 16px 0; } + -webkit-box-shadow: none; + box-shadow: none; +} + +.collapsible.popout > li { + -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + margin: 0 24px; + -webkit-transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.collapsible.popout > li.active { + -webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); + margin: 16px 0; +} + +.chip { + display: inline-block; + height: 32px; + font-size: 13px; + font-weight: 500; + color: rgba(0, 0, 0, 0.6); + line-height: 32px; + padding: 0 12px; + border-radius: 16px; + background-color: #e4e4e4; + margin-bottom: 5px; + margin-right: 5px; +} + +.chip > img { + float: left; + margin: 0 8px 0 -12px; + height: 32px; + width: 32px; + border-radius: 50%; +} + +.chip .close { + cursor: pointer; + float: right; + font-size: 16px; + line-height: 32px; + padding-left: 8px; +} + +.chips { + border: none; + border-bottom: 1px solid #9e9e9e; + -webkit-box-shadow: none; + box-shadow: none; + margin: 0 0 20px 0; + min-height: 45px; + outline: none; + -webkit-transition: all .3s; + transition: all .3s; +} + +.chips.focus { + border-bottom: 1px solid #26a69a; + -webkit-box-shadow: 0 1px 0 0 #26a69a; + box-shadow: 0 1px 0 0 #26a69a; +} + +.chips:hover { + cursor: text; +} + +.chips .chip.selected { + background-color: #26a69a; + color: #fff; +} + +.chips .input { + background: none; + border: 0; + color: rgba(0, 0, 0, 0.6); + display: inline-block; + font-size: 1rem; + height: 3rem; + line-height: 32px; + outline: 0; + margin: 0; + padding: 0 !important; + width: 120px !important; +} + +.chips .input:focus { + border: 0 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +.chips .autocomplete-content { + margin-top: 0; + margin-bottom: 0; +} + +.prefix ~ .chips { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.chips:empty ~ label { + font-size: 0.8rem; + -webkit-transform: translateY(-140%); + transform: translateY(-140%); +} .materialboxed { + display: block; + cursor: -webkit-zoom-in; cursor: zoom-in; position: relative; -webkit-transition: opacity .4s; - -moz-transition: opacity .4s; - -o-transition: opacity .4s; - -ms-transition: opacity .4s; - transition: opacity .4s; } - .materialboxed:hover { - will-change: left, top, width, height; } - .materialboxed:hover:not(.active) { - opacity: .8; } + transition: opacity .4s; + -webkit-backface-visibility: hidden; +} + +.materialboxed:hover:not(.active) { + opacity: .8; +} .materialboxed.active { - cursor: zoom-out; } + cursor: -webkit-zoom-out; + cursor: zoom-out; +} #materialbox-overlay { position: fixed; top: 0; - left: 0; right: 0; bottom: 0; + left: 0; background-color: #292929; - z-index: 999; - will-change: opacity; } + z-index: 1000; + will-change: opacity; +} .materialbox-caption { position: fixed; @@ -6168,43 +5942,59 @@ a.waves-effect .waves-ripple { color: #fff; line-height: 50px; bottom: 0; + left: 0; width: 100%; text-align: center; padding: 0% 15%; height: 50px; z-index: 1000; - -webkit-font-smoothing: antialiased; } + -webkit-font-smoothing: antialiased; +} -/* Remove Focus Boxes */ select:focus { - outline: 1px solid #c9f3ef; } + outline: 1px solid #c9f3ef; +} button:focus { outline: none; - background-color: #2ab7a9; } + background-color: #2ab7a9; +} label { font-size: 0.8rem; - color: #9e9e9e; } + color: #9e9e9e; +} -/*************************** - Text Inputs + Textarea -****************************/ +/* Text Inputs + Textarea + ========================================================================== */ +/* Style Placeholders */ ::-webkit-input-placeholder { - color: #d1d1d1; } - -:-moz-placeholder { - /* Firefox 18- */ - color: #d1d1d1; } - + color: #d1d1d1; +} ::-moz-placeholder { - /* Firefox 19+ */ - color: #d1d1d1; } - + color: #d1d1d1; +} :-ms-input-placeholder { - color: #d1d1d1; } - -input[type=text], input[type=password], input[type=email], input[type=url], input[type=time], input[type=date], input[type=datetime-local], input[type=tel], input[type=number], input[type=search], textarea.materialize-textarea { + color: #d1d1d1; +} +::placeholder { + color: #d1d1d1; +} + +/* Text inputs */ +input:not([type]), +input[type=text]:not(.browser-default), +input[type=password]:not(.browser-default), +input[type=email]:not(.browser-default), +input[type=url]:not(.browser-default), +input[type=time]:not(.browser-default), +input[type=date]:not(.browser-default), +input[type=datetime]:not(.browser-default), +input[type=datetime-local]:not(.browser-default), +input[type=tel]:not(.browser-default), +input[type=number]:not(.browser-default), +input[type=search]:not(.browser-default), +textarea.materialize-textarea { background-color: transparent; border: none; border-bottom: 1px solid #9e9e9e; @@ -6213,129 +6003,497 @@ input[type=text], input[type=password], input[type=email], input[type=url], inpu height: 3rem; width: 100%; font-size: 1rem; - margin: 0 0 15px 0; + margin: 0 0 20px 0; padding: 0; - box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - transition: all .3s; } - input[type=text]:disabled, input[type=text][readonly="readonly"], input[type=password]:disabled, input[type=password][readonly="readonly"], input[type=email]:disabled, input[type=email][readonly="readonly"], input[type=url]:disabled, input[type=url][readonly="readonly"], input[type=time]:disabled, input[type=time][readonly="readonly"], input[type=date]:disabled, input[type=date][readonly="readonly"], input[type=datetime-local]:disabled, input[type=datetime-local][readonly="readonly"], input[type=tel]:disabled, input[type=tel][readonly="readonly"], input[type=number]:disabled, input[type=number][readonly="readonly"], input[type=search]:disabled, input[type=search][readonly="readonly"], textarea.materialize-textarea:disabled, textarea.materialize-textarea[readonly="readonly"] { - color: rgba(0, 0, 0, 0.26); - border-bottom: 1px dotted rgba(0, 0, 0, 0.26); } - input[type=text]:disabled + label, input[type=text][readonly="readonly"] + label, input[type=password]:disabled + label, input[type=password][readonly="readonly"] + label, input[type=email]:disabled + label, input[type=email][readonly="readonly"] + label, input[type=url]:disabled + label, input[type=url][readonly="readonly"] + label, input[type=time]:disabled + label, input[type=time][readonly="readonly"] + label, input[type=date]:disabled + label, input[type=date][readonly="readonly"] + label, input[type=datetime-local]:disabled + label, input[type=datetime-local][readonly="readonly"] + label, input[type=tel]:disabled + label, input[type=tel][readonly="readonly"] + label, input[type=number]:disabled + label, input[type=number][readonly="readonly"] + label, input[type=search]:disabled + label, input[type=search][readonly="readonly"] + label, textarea.materialize-textarea:disabled + label, textarea.materialize-textarea[readonly="readonly"] + label { - color: rgba(0, 0, 0, 0.26); } - input[type=text]:focus:not([readonly]), input[type=password]:focus:not([readonly]), input[type=email]:focus:not([readonly]), input[type=url]:focus:not([readonly]), input[type=time]:focus:not([readonly]), input[type=date]:focus:not([readonly]), input[type=datetime-local]:focus:not([readonly]), input[type=tel]:focus:not([readonly]), input[type=number]:focus:not([readonly]), input[type=search]:focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) { - border-bottom: 1px solid #26a69a; - box-shadow: 0 1px 0 0 #26a69a; } - input[type=text]:focus:not([readonly]) + label, input[type=password]:focus:not([readonly]) + label, input[type=email]:focus:not([readonly]) + label, input[type=url]:focus:not([readonly]) + label, input[type=time]:focus:not([readonly]) + label, input[type=date]:focus:not([readonly]) + label, input[type=datetime-local]:focus:not([readonly]) + label, input[type=tel]:focus:not([readonly]) + label, input[type=number]:focus:not([readonly]) + label, input[type=search]:focus:not([readonly]) + label, textarea.materialize-textarea:focus:not([readonly]) + label { - color: #26a69a; } - input[type=text].valid, input[type=text]:focus.valid, input[type=password].valid, input[type=password]:focus.valid, input[type=email].valid, input[type=email]:focus.valid, input[type=url].valid, input[type=url]:focus.valid, input[type=time].valid, input[type=time]:focus.valid, input[type=date].valid, input[type=date]:focus.valid, input[type=datetime-local].valid, input[type=datetime-local]:focus.valid, input[type=tel].valid, input[type=tel]:focus.valid, input[type=number].valid, input[type=number]:focus.valid, input[type=search].valid, input[type=search]:focus.valid, textarea.materialize-textarea.valid, textarea.materialize-textarea:focus.valid { - border-bottom: 1px solid #4CAF50; - box-shadow: 0 1px 0 0 #4CAF50; } - input[type=text].valid + label:after, input[type=text]:focus.valid + label:after, input[type=password].valid + label:after, input[type=password]:focus.valid + label:after, input[type=email].valid + label:after, input[type=email]:focus.valid + label:after, input[type=url].valid + label:after, input[type=url]:focus.valid + label:after, input[type=time].valid + label:after, input[type=time]:focus.valid + label:after, input[type=date].valid + label:after, input[type=date]:focus.valid + label:after, input[type=datetime-local].valid + label:after, input[type=datetime-local]:focus.valid + label:after, input[type=tel].valid + label:after, input[type=tel]:focus.valid + label:after, input[type=number].valid + label:after, input[type=number]:focus.valid + label:after, input[type=search].valid + label:after, input[type=search]:focus.valid + label:after, textarea.materialize-textarea.valid + label:after, textarea.materialize-textarea:focus.valid + label:after { - content: attr(data-success); - color: #4CAF50; - opacity: 1; } - input[type=text].invalid, input[type=text]:focus.invalid, input[type=password].invalid, input[type=password]:focus.invalid, input[type=email].invalid, input[type=email]:focus.invalid, input[type=url].invalid, input[type=url]:focus.invalid, input[type=time].invalid, input[type=time]:focus.invalid, input[type=date].invalid, input[type=date]:focus.invalid, input[type=datetime-local].invalid, input[type=datetime-local]:focus.invalid, input[type=tel].invalid, input[type=tel]:focus.invalid, input[type=number].invalid, input[type=number]:focus.invalid, input[type=search].invalid, input[type=search]:focus.invalid, textarea.materialize-textarea.invalid, textarea.materialize-textarea:focus.invalid { - border-bottom: 1px solid #F44336; - box-shadow: 0 1px 0 0 #F44336; } - input[type=text].invalid + label:after, input[type=text]:focus.invalid + label:after, input[type=password].invalid + label:after, input[type=password]:focus.invalid + label:after, input[type=email].invalid + label:after, input[type=email]:focus.invalid + label:after, input[type=url].invalid + label:after, input[type=url]:focus.invalid + label:after, input[type=time].invalid + label:after, input[type=time]:focus.invalid + label:after, input[type=date].invalid + label:after, input[type=date]:focus.invalid + label:after, input[type=datetime-local].invalid + label:after, input[type=datetime-local]:focus.invalid + label:after, input[type=tel].invalid + label:after, input[type=tel]:focus.invalid + label:after, input[type=number].invalid + label:after, input[type=number]:focus.invalid + label:after, input[type=search].invalid + label:after, input[type=search]:focus.invalid + label:after, textarea.materialize-textarea.invalid + label:after, textarea.materialize-textarea:focus.invalid + label:after { - content: attr(data-error); - color: #F44336; - opacity: 1; } - input[type=text] + label:after, input[type=password] + label:after, input[type=email] + label:after, input[type=url] + label:after, input[type=time] + label:after, input[type=date] + label:after, input[type=datetime-local] + label:after, input[type=tel] + label:after, input[type=number] + label:after, input[type=search] + label:after, textarea.materialize-textarea + label:after { - display: block; - content: ""; - position: absolute; - top: 65px; - opacity: 0; - transition: .2s opacity ease-out, .2s color ease-out; } + box-sizing: content-box; + -webkit-transition: all 0.3s; + transition: all 0.3s; +} + +input:not([type]):disabled, input:not([type])[readonly="readonly"], +input[type=text]:not(.browser-default):disabled, +input[type=text]:not(.browser-default)[readonly="readonly"], +input[type=password]:not(.browser-default):disabled, +input[type=password]:not(.browser-default)[readonly="readonly"], +input[type=email]:not(.browser-default):disabled, +input[type=email]:not(.browser-default)[readonly="readonly"], +input[type=url]:not(.browser-default):disabled, +input[type=url]:not(.browser-default)[readonly="readonly"], +input[type=time]:not(.browser-default):disabled, +input[type=time]:not(.browser-default)[readonly="readonly"], +input[type=date]:not(.browser-default):disabled, +input[type=date]:not(.browser-default)[readonly="readonly"], +input[type=datetime]:not(.browser-default):disabled, +input[type=datetime]:not(.browser-default)[readonly="readonly"], +input[type=datetime-local]:not(.browser-default):disabled, +input[type=datetime-local]:not(.browser-default)[readonly="readonly"], +input[type=tel]:not(.browser-default):disabled, +input[type=tel]:not(.browser-default)[readonly="readonly"], +input[type=number]:not(.browser-default):disabled, +input[type=number]:not(.browser-default)[readonly="readonly"], +input[type=search]:not(.browser-default):disabled, +input[type=search]:not(.browser-default)[readonly="readonly"], +textarea.materialize-textarea:disabled, +textarea.materialize-textarea[readonly="readonly"] { + color: rgba(0, 0, 0, 0.42); + border-bottom: 1px dotted rgba(0, 0, 0, 0.42); +} + +input:not([type]):disabled + label, +input:not([type])[readonly="readonly"] + label, +input[type=text]:not(.browser-default):disabled + label, +input[type=text]:not(.browser-default)[readonly="readonly"] + label, +input[type=password]:not(.browser-default):disabled + label, +input[type=password]:not(.browser-default)[readonly="readonly"] + label, +input[type=email]:not(.browser-default):disabled + label, +input[type=email]:not(.browser-default)[readonly="readonly"] + label, +input[type=url]:not(.browser-default):disabled + label, +input[type=url]:not(.browser-default)[readonly="readonly"] + label, +input[type=time]:not(.browser-default):disabled + label, +input[type=time]:not(.browser-default)[readonly="readonly"] + label, +input[type=date]:not(.browser-default):disabled + label, +input[type=date]:not(.browser-default)[readonly="readonly"] + label, +input[type=datetime]:not(.browser-default):disabled + label, +input[type=datetime]:not(.browser-default)[readonly="readonly"] + label, +input[type=datetime-local]:not(.browser-default):disabled + label, +input[type=datetime-local]:not(.browser-default)[readonly="readonly"] + label, +input[type=tel]:not(.browser-default):disabled + label, +input[type=tel]:not(.browser-default)[readonly="readonly"] + label, +input[type=number]:not(.browser-default):disabled + label, +input[type=number]:not(.browser-default)[readonly="readonly"] + label, +input[type=search]:not(.browser-default):disabled + label, +input[type=search]:not(.browser-default)[readonly="readonly"] + label, +textarea.materialize-textarea:disabled + label, +textarea.materialize-textarea[readonly="readonly"] + label { + color: rgba(0, 0, 0, 0.42); +} + +input:not([type]):focus:not([readonly]), +input[type=text]:not(.browser-default):focus:not([readonly]), +input[type=password]:not(.browser-default):focus:not([readonly]), +input[type=email]:not(.browser-default):focus:not([readonly]), +input[type=url]:not(.browser-default):focus:not([readonly]), +input[type=time]:not(.browser-default):focus:not([readonly]), +input[type=date]:not(.browser-default):focus:not([readonly]), +input[type=datetime]:not(.browser-default):focus:not([readonly]), +input[type=datetime-local]:not(.browser-default):focus:not([readonly]), +input[type=tel]:not(.browser-default):focus:not([readonly]), +input[type=number]:not(.browser-default):focus:not([readonly]), +input[type=search]:not(.browser-default):focus:not([readonly]), +textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #26a69a; + -webkit-box-shadow: 0 1px 0 0 #26a69a; + box-shadow: 0 1px 0 0 #26a69a; +} + +input:not([type]):focus:not([readonly]) + label, +input[type=text]:not(.browser-default):focus:not([readonly]) + label, +input[type=password]:not(.browser-default):focus:not([readonly]) + label, +input[type=email]:not(.browser-default):focus:not([readonly]) + label, +input[type=url]:not(.browser-default):focus:not([readonly]) + label, +input[type=time]:not(.browser-default):focus:not([readonly]) + label, +input[type=date]:not(.browser-default):focus:not([readonly]) + label, +input[type=datetime]:not(.browser-default):focus:not([readonly]) + label, +input[type=datetime-local]:not(.browser-default):focus:not([readonly]) + label, +input[type=tel]:not(.browser-default):focus:not([readonly]) + label, +input[type=number]:not(.browser-default):focus:not([readonly]) + label, +input[type=search]:not(.browser-default):focus:not([readonly]) + label, +textarea.materialize-textarea:focus:not([readonly]) + label { + color: #26a69a; +} + +input:not([type]).validate + label, +input[type=text]:not(.browser-default).validate + label, +input[type=password]:not(.browser-default).validate + label, +input[type=email]:not(.browser-default).validate + label, +input[type=url]:not(.browser-default).validate + label, +input[type=time]:not(.browser-default).validate + label, +input[type=date]:not(.browser-default).validate + label, +input[type=datetime]:not(.browser-default).validate + label, +input[type=datetime-local]:not(.browser-default).validate + label, +input[type=tel]:not(.browser-default).validate + label, +input[type=number]:not(.browser-default).validate + label, +input[type=search]:not(.browser-default).validate + label, +textarea.materialize-textarea.validate + label { + width: 100%; +} + +input:not([type]).invalid + label:after, +input:not([type]).valid + label:after, +input[type=text]:not(.browser-default).invalid + label:after, +input[type=text]:not(.browser-default).valid + label:after, +input[type=password]:not(.browser-default).invalid + label:after, +input[type=password]:not(.browser-default).valid + label:after, +input[type=email]:not(.browser-default).invalid + label:after, +input[type=email]:not(.browser-default).valid + label:after, +input[type=url]:not(.browser-default).invalid + label:after, +input[type=url]:not(.browser-default).valid + label:after, +input[type=time]:not(.browser-default).invalid + label:after, +input[type=time]:not(.browser-default).valid + label:after, +input[type=date]:not(.browser-default).invalid + label:after, +input[type=date]:not(.browser-default).valid + label:after, +input[type=datetime]:not(.browser-default).invalid + label:after, +input[type=datetime]:not(.browser-default).valid + label:after, +input[type=datetime-local]:not(.browser-default).invalid + label:after, +input[type=datetime-local]:not(.browser-default).valid + label:after, +input[type=tel]:not(.browser-default).invalid + label:after, +input[type=tel]:not(.browser-default).valid + label:after, +input[type=number]:not(.browser-default).invalid + label:after, +input[type=number]:not(.browser-default).valid + label:after, +input[type=search]:not(.browser-default).invalid + label:after, +input[type=search]:not(.browser-default).valid + label:after, +textarea.materialize-textarea.invalid + label:after, +textarea.materialize-textarea.valid + label:after { + display: none; +} + +input:not([type]).invalid + label.active:after, +input:not([type]).valid + label.active:after, +input[type=text]:not(.browser-default).invalid + label.active:after, +input[type=text]:not(.browser-default).valid + label.active:after, +input[type=password]:not(.browser-default).invalid + label.active:after, +input[type=password]:not(.browser-default).valid + label.active:after, +input[type=email]:not(.browser-default).invalid + label.active:after, +input[type=email]:not(.browser-default).valid + label.active:after, +input[type=url]:not(.browser-default).invalid + label.active:after, +input[type=url]:not(.browser-default).valid + label.active:after, +input[type=time]:not(.browser-default).invalid + label.active:after, +input[type=time]:not(.browser-default).valid + label.active:after, +input[type=date]:not(.browser-default).invalid + label.active:after, +input[type=date]:not(.browser-default).valid + label.active:after, +input[type=datetime]:not(.browser-default).invalid + label.active:after, +input[type=datetime]:not(.browser-default).valid + label.active:after, +input[type=datetime-local]:not(.browser-default).invalid + label.active:after, +input[type=datetime-local]:not(.browser-default).valid + label.active:after, +input[type=tel]:not(.browser-default).invalid + label.active:after, +input[type=tel]:not(.browser-default).valid + label.active:after, +input[type=number]:not(.browser-default).invalid + label.active:after, +input[type=number]:not(.browser-default).valid + label.active:after, +input[type=search]:not(.browser-default).invalid + label.active:after, +input[type=search]:not(.browser-default).valid + label.active:after, +textarea.materialize-textarea.invalid + label.active:after, +textarea.materialize-textarea.valid + label.active:after { + display: block; +} + +/* Validation Sass Placeholders */ +input.valid:not([type]), input.valid:not([type]):focus, +input[type=text].valid:not(.browser-default), +input[type=text].valid:not(.browser-default):focus, +input[type=password].valid:not(.browser-default), +input[type=password].valid:not(.browser-default):focus, +input[type=email].valid:not(.browser-default), +input[type=email].valid:not(.browser-default):focus, +input[type=url].valid:not(.browser-default), +input[type=url].valid:not(.browser-default):focus, +input[type=time].valid:not(.browser-default), +input[type=time].valid:not(.browser-default):focus, +input[type=date].valid:not(.browser-default), +input[type=date].valid:not(.browser-default):focus, +input[type=datetime].valid:not(.browser-default), +input[type=datetime].valid:not(.browser-default):focus, +input[type=datetime-local].valid:not(.browser-default), +input[type=datetime-local].valid:not(.browser-default):focus, +input[type=tel].valid:not(.browser-default), +input[type=tel].valid:not(.browser-default):focus, +input[type=number].valid:not(.browser-default), +input[type=number].valid:not(.browser-default):focus, +input[type=search].valid:not(.browser-default), +input[type=search].valid:not(.browser-default):focus, +textarea.materialize-textarea.valid, +textarea.materialize-textarea.valid:focus, .select-wrapper.valid > input.select-dropdown { + border-bottom: 1px solid #4CAF50; + -webkit-box-shadow: 0 1px 0 0 #4CAF50; + box-shadow: 0 1px 0 0 #4CAF50; +} + +input.invalid:not([type]), input.invalid:not([type]):focus, +input[type=text].invalid:not(.browser-default), +input[type=text].invalid:not(.browser-default):focus, +input[type=password].invalid:not(.browser-default), +input[type=password].invalid:not(.browser-default):focus, +input[type=email].invalid:not(.browser-default), +input[type=email].invalid:not(.browser-default):focus, +input[type=url].invalid:not(.browser-default), +input[type=url].invalid:not(.browser-default):focus, +input[type=time].invalid:not(.browser-default), +input[type=time].invalid:not(.browser-default):focus, +input[type=date].invalid:not(.browser-default), +input[type=date].invalid:not(.browser-default):focus, +input[type=datetime].invalid:not(.browser-default), +input[type=datetime].invalid:not(.browser-default):focus, +input[type=datetime-local].invalid:not(.browser-default), +input[type=datetime-local].invalid:not(.browser-default):focus, +input[type=tel].invalid:not(.browser-default), +input[type=tel].invalid:not(.browser-default):focus, +input[type=number].invalid:not(.browser-default), +input[type=number].invalid:not(.browser-default):focus, +input[type=search].invalid:not(.browser-default), +input[type=search].invalid:not(.browser-default):focus, +textarea.materialize-textarea.invalid, +textarea.materialize-textarea.invalid:focus, .select-wrapper.invalid > input.select-dropdown { + border-bottom: 1px solid #F44336; + -webkit-box-shadow: 0 1px 0 0 #F44336; + box-shadow: 0 1px 0 0 #F44336; +} + +input:not([type]).valid + label:after, +input:not([type]):focus.valid + label:after, +input[type=text]:not(.browser-default).valid + label:after, +input[type=text]:not(.browser-default):focus.valid + label:after, +input[type=password]:not(.browser-default).valid + label:after, +input[type=password]:not(.browser-default):focus.valid + label:after, +input[type=email]:not(.browser-default).valid + label:after, +input[type=email]:not(.browser-default):focus.valid + label:after, +input[type=url]:not(.browser-default).valid + label:after, +input[type=url]:not(.browser-default):focus.valid + label:after, +input[type=time]:not(.browser-default).valid + label:after, +input[type=time]:not(.browser-default):focus.valid + label:after, +input[type=date]:not(.browser-default).valid + label:after, +input[type=date]:not(.browser-default):focus.valid + label:after, +input[type=datetime]:not(.browser-default).valid + label:after, +input[type=datetime]:not(.browser-default):focus.valid + label:after, +input[type=datetime-local]:not(.browser-default).valid + label:after, +input[type=datetime-local]:not(.browser-default):focus.valid + label:after, +input[type=tel]:not(.browser-default).valid + label:after, +input[type=tel]:not(.browser-default):focus.valid + label:after, +input[type=number]:not(.browser-default).valid + label:after, +input[type=number]:not(.browser-default):focus.valid + label:after, +input[type=search]:not(.browser-default).valid + label:after, +input[type=search]:not(.browser-default):focus.valid + label:after, +textarea.materialize-textarea.valid + label:after, +textarea.materialize-textarea:focus.valid + label:after, .select-wrapper.valid + label:after { + content: attr(data-success); + color: #4CAF50; + opacity: 1; + -webkit-transform: translateY(9px); + transform: translateY(9px); +} + +input:not([type]).invalid + label:after, +input:not([type]):focus.invalid + label:after, +input[type=text]:not(.browser-default).invalid + label:after, +input[type=text]:not(.browser-default):focus.invalid + label:after, +input[type=password]:not(.browser-default).invalid + label:after, +input[type=password]:not(.browser-default):focus.invalid + label:after, +input[type=email]:not(.browser-default).invalid + label:after, +input[type=email]:not(.browser-default):focus.invalid + label:after, +input[type=url]:not(.browser-default).invalid + label:after, +input[type=url]:not(.browser-default):focus.invalid + label:after, +input[type=time]:not(.browser-default).invalid + label:after, +input[type=time]:not(.browser-default):focus.invalid + label:after, +input[type=date]:not(.browser-default).invalid + label:after, +input[type=date]:not(.browser-default):focus.invalid + label:after, +input[type=datetime]:not(.browser-default).invalid + label:after, +input[type=datetime]:not(.browser-default):focus.invalid + label:after, +input[type=datetime-local]:not(.browser-default).invalid + label:after, +input[type=datetime-local]:not(.browser-default):focus.invalid + label:after, +input[type=tel]:not(.browser-default).invalid + label:after, +input[type=tel]:not(.browser-default):focus.invalid + label:after, +input[type=number]:not(.browser-default).invalid + label:after, +input[type=number]:not(.browser-default):focus.invalid + label:after, +input[type=search]:not(.browser-default).invalid + label:after, +input[type=search]:not(.browser-default):focus.invalid + label:after, +textarea.materialize-textarea.invalid + label:after, +textarea.materialize-textarea:focus.invalid + label:after, .select-wrapper.invalid + label:after { + content: attr(data-error); + color: #F44336; + opacity: 1; + -webkit-transform: translateY(9px); + transform: translateY(9px); +} + +input:not([type]) + label:after, +input[type=text]:not(.browser-default) + label:after, +input[type=password]:not(.browser-default) + label:after, +input[type=email]:not(.browser-default) + label:after, +input[type=url]:not(.browser-default) + label:after, +input[type=time]:not(.browser-default) + label:after, +input[type=date]:not(.browser-default) + label:after, +input[type=datetime]:not(.browser-default) + label:after, +input[type=datetime-local]:not(.browser-default) + label:after, +input[type=tel]:not(.browser-default) + label:after, +input[type=number]:not(.browser-default) + label:after, +input[type=search]:not(.browser-default) + label:after, +textarea.materialize-textarea + label:after, .select-wrapper + label:after { + display: block; + content: ""; + position: absolute; + top: 100%; + left: 0; + opacity: 0; + -webkit-transition: .2s opacity ease-out, .2s color ease-out; + transition: .2s opacity ease-out, .2s color ease-out; +} .input-field { position: relative; - margin-top: 1rem; } - .input-field label { - color: #9e9e9e; - position: absolute; - top: 0.8rem; - left: 0.75rem; - font-size: 1rem; - cursor: text; - -webkit-transition: .2s ease-out; - -moz-transition: .2s ease-out; - -o-transition: .2s ease-out; - -ms-transition: .2s ease-out; - transition: .2s ease-out; } - .input-field label.active { - font-size: 0.8rem; - -webkit-transform: translateY(-140%); - -moz-transform: translateY(-140%); - -ms-transform: translateY(-140%); - -o-transform: translateY(-140%); - transform: translateY(-140%); } - .input-field .prefix { - position: absolute; - width: 3rem; - font-size: 2rem; - -webkit-transition: color .2s; - -moz-transition: color .2s; - -o-transition: color .2s; - -ms-transition: color .2s; - transition: color .2s; } - .input-field .prefix.active { - color: #26a69a; } - .input-field .prefix ~ input, .input-field .prefix ~ textarea { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); } - .input-field .prefix ~ textarea { - padding-top: .8rem; } - .input-field .prefix ~ label { - margin-left: 3rem; } - @media only screen and (max-width : 992px) { - .input-field .prefix ~ input { - width: 86%; - width: calc(100% - 3rem); } } - @media only screen and (max-width : 600px) { - .input-field .prefix ~ input { - width: 80%; - width: calc(100% - 3rem); } } + margin-top: 1rem; +} + +.input-field.inline { + display: inline-block; + vertical-align: middle; + margin-left: 5px; +} +.input-field.inline input, +.input-field.inline .select-dropdown { + margin-bottom: 1rem; +} + +.input-field.col label { + left: 0.75rem; +} + +.input-field.col .prefix ~ label, +.input-field.col .prefix ~ .validate ~ label { + width: calc(100% - 3rem - 1.5rem); +} + +.input-field label { + color: #9e9e9e; + position: absolute; + top: 0; + left: 0; + height: 100%; + font-size: 1rem; + cursor: text; + -webkit-transition: -webkit-transform .2s ease-out; + transition: -webkit-transform .2s ease-out; + transition: transform .2s ease-out; + transition: transform .2s ease-out, -webkit-transform .2s ease-out; + -webkit-transform-origin: 0% 100%; + transform-origin: 0% 100%; + text-align: initial; + -webkit-transform: translateY(12px); + transform: translateY(12px); + pointer-events: none; +} + +.input-field label:not(.label-icon).active { + -webkit-transform: translateY(-14px) scale(0.8); + transform: translateY(-14px) scale(0.8); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; +} + +.input-field .prefix { + position: absolute; + width: 3rem; + font-size: 2rem; + -webkit-transition: color .2s; + transition: color .2s; +} + +.input-field .prefix.active { + color: #26a69a; +} + +.input-field .prefix ~ input, +.input-field .prefix ~ textarea, +.input-field .prefix ~ label, +.input-field .prefix ~ .validate ~ label, +.input-field .prefix ~ .autocomplete-content { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.input-field .prefix ~ label { + margin-left: 3rem; +} + +@media only screen and (max-width: 992px) { + .input-field .prefix ~ input { + width: 86%; + width: calc(100% - 3rem); + } +} + +@media only screen and (max-width: 600px) { + .input-field .prefix ~ input { + width: 80%; + width: calc(100% - 3rem); + } +} + +/* Search Field */ .input-field input[type=search] { display: block; line-height: inherit; +} + +.nav-wrapper .input-field input[type=search] { + height: inherit; padding-left: 4rem; - width: calc(100% - 4rem); } - .input-field input[type=search]:focus { - background-color: #fff; - border: 0; - box-shadow: none; - color: #444; } - .input-field input[type=search]:focus + label i, .input-field input[type=search]:focus ~ .mdi-navigation-close { - color: #444; } - .input-field input[type=search] + label { - left: 1rem; } - .input-field input[type=search] ~ .mdi-navigation-close { - position: absolute; - top: 0; - right: 1rem; - color: transparent; - cursor: pointer; - font-size: 2rem; - transition: .3s color; } + width: calc(100% - 4rem); + border: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.input-field input[type=search]:focus { + background-color: #fff; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + color: #444; +} + +.input-field input[type=search]:focus + label i, +.input-field input[type=search]:focus ~ .mdi-navigation-close, +.input-field input[type=search]:focus ~ .material-icons { + color: #444; +} + +.input-field input[type=search] + label { + left: 1rem; +} + +.input-field input[type=search] ~ .mdi-navigation-close, +.input-field input[type=search] ~ .material-icons { + position: absolute; + top: 0; + right: 1rem; + color: transparent; + cursor: pointer; + font-size: 2rem; + -webkit-transition: .3s color; + transition: .3s color; +} +/* Textarea */ textarea { width: 100%; height: 3rem; - background-color: transparent; } - textarea.materialize-textarea { - overflow-y: hidden; - /* prevents scroll bar flash */ - padding: 1.6rem 0; - /* prevents text jump on Enter keypress */ - resize: none; - min-height: 3rem; } + background-color: transparent; +} + +textarea.materialize-textarea { + overflow-y: hidden; + /* prevents scroll bar flash */ + padding: .8rem 0 1.6rem 0; + /* prevents text jump on Enter keypress */ + resize: none; + min-height: 3rem; +} + +textarea.materialize-textarea.validate + label { + height: 100%; +} + +textarea.materialize-textarea.validate + label::after { + top: calc(100% - 12px); +} + +textarea.materialize-textarea.validate + label:not(.label-icon).active { + -webkit-transform: translateY(-25px); + transform: translateY(-25px); +} .hiddendiv { display: none; @@ -6344,18 +6502,41 @@ textarea { overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */ padding-top: 1.2rem; - /* prevents text jump on Enter keypress */ } + /* prevents text jump on Enter keypress */ + position: absolute; + top: 0; +} -/*************** - Radio Buttons -***************/ -/* Remove default Radio Buttons */ -[type="radio"]:not(:checked), [type="radio"]:checked { +/* Autocomplete */ +.autocomplete-content { + margin-top: -20px; + margin-bottom: 20px; + display: block; + opacity: 1; + position: static; +} + +.autocomplete-content li .highlight { + color: #444; +} + +.autocomplete-content li img { + height: 40px; + width: 40px; + margin: 5px 15px; +} + +/* Radio Buttons + ========================================================================== */ +[type="radio"]:not(:checked), +[type="radio"]:checked { position: absolute; - left: -9999px; - visibility: hidden; } + opacity: 0; + pointer-events: none; +} -[type="radio"]:not(:checked) + label, [type="radio"]:checked + label { +[type="radio"]:not(:checked) + label, +[type="radio"]:checked + label { position: relative; padding-left: 35px; cursor: pointer; @@ -6364,20 +6545,15 @@ textarea { line-height: 25px; font-size: 1rem; -webkit-transition: .28s ease; - -moz-transition: .28s ease; - -o-transition: .28s ease; - -ms-transition: .28s ease; transition: .28s ease; -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -khtml-user-select: none; - /* webkit (konqueror) browsers */ - -ms-user-select: none; - /* IE10+ */ } + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} -[type="radio"] + label:before, [type="radio"] + label:after { +[type="radio"] + label:before, +[type="radio"] + label:after { content: ''; position: absolute; left: 0; @@ -6387,139 +6563,170 @@ textarea { height: 16px; z-index: 0; -webkit-transition: .28s ease; - -moz-transition: .28s ease; - -o-transition: .28s ease; - -ms-transition: .28s ease; - transition: .28s ease; } + transition: .28s ease; +} /* Unchecked styles */ -[type="radio"]:not(:checked) + label:before { +[type="radio"]:not(:checked) + label:before, +[type="radio"]:not(:checked) + label:after, +[type="radio"]:checked + label:before, +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { border-radius: 50%; - border: 2px solid #5a5a5a; } +} +[type="radio"]:not(:checked) + label:before, [type="radio"]:not(:checked) + label:after { - border-radius: 50%; border: 2px solid #5a5a5a; - z-index: -1; +} + +[type="radio"]:not(:checked) + label:after { -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); } + transform: scale(0); +} /* Checked styles */ [type="radio"]:checked + label:before { - border-radius: 50%; - border: 2px solid transparent; } + border: 2px solid transparent; +} -[type="radio"]:checked + label:after { - border-radius: 50%; +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { border: 2px solid #26a69a; +} + +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:after { background-color: #26a69a; - z-index: 0; +} + +[type="radio"]:checked + label:after { -webkit-transform: scale(1.02); - -moz-transform: scale(1.02); - -ms-transform: scale(1.02); - -o-transform: scale(1.02); - transform: scale(1.02); } + transform: scale(1.02); +} /* Radio With gap */ -[type="radio"].with-gap:checked + label:before { - border-radius: 50%; - border: 2px solid #26a69a; } - [type="radio"].with-gap:checked + label:after { - border-radius: 50%; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; - -webkit-transform: scale(.5); - -moz-transform: scale(.5); - -ms-transform: scale(.5); - -o-transform: scale(.5); - transform: scale(.5); } + -webkit-transform: scale(0.5); + transform: scale(0.5); +} + +/* Focused styles */ +[type="radio"].tabbed:focus + label:before { + -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); +} /* Disabled Radio With gap */ [type="radio"].with-gap:disabled:checked + label:before { - border: 2px solid rgba(0, 0, 0, 0.26); } + border: 2px solid rgba(0, 0, 0, 0.42); +} [type="radio"].with-gap:disabled:checked + label:after { border: none; - background-color: rgba(0, 0, 0, 0.26); } + background-color: rgba(0, 0, 0, 0.42); +} /* Disabled style */ -[type="radio"]:disabled:not(:checked) + label:before, [type="radio"]:disabled:checked + label:before { +[type="radio"]:disabled:not(:checked) + label:before, +[type="radio"]:disabled:checked + label:before { background-color: transparent; - border-color: rgba(0, 0, 0, 0.26); } + border-color: rgba(0, 0, 0, 0.42); +} [type="radio"]:disabled + label { - color: rgba(0, 0, 0, 0.26); } + color: rgba(0, 0, 0, 0.42); +} [type="radio"]:disabled:not(:checked) + label:before { - border-color: rgba(0, 0, 0, 0.26); } + border-color: rgba(0, 0, 0, 0.42); +} [type="radio"]:disabled:checked + label:after { - background-color: rgba(0, 0, 0, 0.26); - border-color: #BDBDBD; } + background-color: rgba(0, 0, 0, 0.42); + border-color: #949494; +} -/*************** - Checkboxes -***************/ +/* Checkboxes + ========================================================================== */ /* CUSTOM CSS CHECKBOXES */ form p { margin-bottom: 10px; - text-align: left; } + text-align: left; +} form p:last-child { - margin-bottom: 0; } + margin-bottom: 0; +} + +/* Remove default checkbox */ +[type="checkbox"]:not(:checked), +[type="checkbox"]:checked { + position: absolute; + opacity: 0; + pointer-events: none; +} + +[type="checkbox"] { + /* checkbox aspect */ +} + +[type="checkbox"] + label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} -/* Remove default checkbox */ -[type="checkbox"]:not(:checked), [type="checkbox"]:checked { +[type="checkbox"] + label:before, +[type="checkbox"]:not(.filled-in) + label:after { + content: ''; position: absolute; - left: -9999px; - visibility: hidden; } + top: 0; + left: 0; + width: 18px; + height: 18px; + z-index: 0; + border: 2px solid #5a5a5a; + border-radius: 1px; + margin-top: 2px; + -webkit-transition: .2s; + transition: .2s; +} -[type="checkbox"] { - /* checkbox aspect */ } - [type="checkbox"] + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -khtml-user-select: none; - /* webkit (konqueror) browsers */ - -ms-user-select: none; - /* IE10+ */ } - [type="checkbox"] + label:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; - z-index: 0; - border: 2px solid #5a5a5a; - border-radius: 1px; - margin-top: 2px; - -webkit-transition: 0.2s; - -moz-transition: 0.2s; - -o-transition: 0.2s; - -ms-transition: 0.2s; - transition: 0.2s; } - [type="checkbox"]:not(:checked):disabled + label:before { - border: none; - background-color: rgba(0, 0, 0, 0.26); } +[type="checkbox"]:not(.filled-in) + label:after { + border: 0; + -webkit-transform: scale(0); + transform: scale(0); +} + +[type="checkbox"]:not(:checked):disabled + label:before { + border: none; + background-color: rgba(0, 0, 0, 0.42); +} + +[type="checkbox"].tabbed:focus + label:after { + -webkit-transform: scale(1); + transform: scale(1); + border: 0; + border-radius: 50%; + -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); + background-color: rgba(0, 0, 0, 0.1); +} [type="checkbox"]:checked + label:before { top: -4px; - left: -3px; + left: -5px; width: 12px; height: 22px; border-top: 2px solid transparent; @@ -6527,24 +6734,22 @@ form p:last-child { border-right: 2px solid #26a69a; border-bottom: 2px solid #26a69a; -webkit-transform: rotate(40deg); - -moz-transform: rotate(40deg); - -ms-transform: rotate(40deg); - -o-transform: rotate(40deg); - transform: rotate(40deg); + transform: rotate(40deg); -webkit-backface-visibility: hidden; + backface-visibility: hidden; -webkit-transform-origin: 100% 100%; - -moz-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - -o-transform-origin: 100% 100%; - transform-origin: 100% 100%; } + transform-origin: 100% 100%; +} + [type="checkbox"]:checked:disabled + label:before { - border-right: 2px solid rgba(0, 0, 0, 0.26); - border-bottom: 2px solid rgba(0, 0, 0, 0.26); } + border-right: 2px solid rgba(0, 0, 0, 0.42); + border-bottom: 2px solid rgba(0, 0, 0, 0.42); +} /* Indeterminate checkbox */ [type="checkbox"]:indeterminate + label:before { - left: -10px; top: -11px; + left: -12px; width: 10px; height: 22px; border-top: none; @@ -6552,29 +6757,33 @@ form p:last-child { border-right: 2px solid #26a69a; border-bottom: none; -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); + transform: rotate(90deg); -webkit-backface-visibility: hidden; + backface-visibility: hidden; -webkit-transform-origin: 100% 100%; - -moz-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - -o-transform-origin: 100% 100%; - transform-origin: 100% 100%; } + transform-origin: 100% 100%; +} + [type="checkbox"]:indeterminate:disabled + label:before { - border-right: 2px solid rgba(0, 0, 0, 0.26); - background-color: transparent; } + border-right: 2px solid rgba(0, 0, 0, 0.42); + background-color: transparent; +} + +[type="checkbox"].filled-in + label:after { + border-radius: 2px; +} +[type="checkbox"].filled-in + label:before, [type="checkbox"].filled-in + label:after { - border-radius: 2px; } -[type="checkbox"].filled-in + label:before, [type="checkbox"].filled-in + label:after { content: ''; left: 0; position: absolute; /* .1s delay is for check animation */ - transition: border .25s, background-color .25s, width .2s .1s, height .2s .1s, top .2s .1s, left .2s .1s; - z-index: 1; } + -webkit-transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + z-index: 1; +} + [type="checkbox"].filled-in:not(:checked) + label:before { width: 0; height: 0; @@ -6582,16 +6791,20 @@ form p:last-child { left: 6px; top: 10px; -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 20% 40%; - transform-origin: 100% 100%; } + transform: rotateZ(37deg); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} + [type="checkbox"].filled-in:not(:checked) + label:after { height: 20px; width: 20px; background-color: transparent; border: 2px solid #5a5a5a; top: 0px; - z-index: 0; } + z-index: 0; +} + [type="checkbox"].filled-in:checked + label:before { top: 0; left: 1px; @@ -6602,192 +6815,358 @@ form p:last-child { border-right: 2px solid #fff; border-bottom: 2px solid #fff; -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); + transform: rotateZ(37deg); -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; } + transform-origin: 100% 100%; +} + [type="checkbox"].filled-in:checked + label:after { - top: 0px; + top: 0; width: 20px; height: 20px; border: 2px solid #26a69a; background-color: #26a69a; - z-index: 0; } + z-index: 0; +} + +[type="checkbox"].filled-in.tabbed:focus + label:after { + border-radius: 2px; + border-color: #5a5a5a; + background-color: rgba(0, 0, 0, 0.1); +} + +[type="checkbox"].filled-in.tabbed:checked:focus + label:after { + border-radius: 2px; + background-color: #26a69a; + border-color: #26a69a; +} + [type="checkbox"].filled-in:disabled:not(:checked) + label:before { background-color: transparent; - border: 2px solid transparent; } + border: 2px solid transparent; +} + [type="checkbox"].filled-in:disabled:not(:checked) + label:after { border-color: transparent; - background-color: #BDBDBD; } + background-color: #949494; +} + [type="checkbox"].filled-in:disabled:checked + label:before { - background-color: transparent; } + background-color: transparent; +} + [type="checkbox"].filled-in:disabled:checked + label:after { - background-color: #BDBDBD; - border-color: #BDBDBD; } + background-color: #949494; + border-color: #949494; +} -/*************** - Switch -***************/ -.switch, .switch * { +/* Switch + ========================================================================== */ +.switch, +.switch * { + -webkit-tap-highlight-color: transparent; -webkit-user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -ms-user-select: none; } + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} .switch label { - cursor: pointer; } + cursor: pointer; +} .switch label input[type=checkbox] { opacity: 0; width: 0; - height: 0; } + height: 0; +} .switch label input[type=checkbox]:checked + .lever { - background-color: #84c7c1; } + background-color: #84c7c1; +} + +.switch label input[type=checkbox]:checked + .lever:before, .switch label input[type=checkbox]:checked + .lever:after { + left: 18px; +} .switch label input[type=checkbox]:checked + .lever:after { - background-color: #26a69a; } + background-color: #26a69a; +} .switch label .lever { content: ""; display: inline-block; position: relative; - width: 40px; - height: 15px; - background-color: #818181; + width: 36px; + height: 14px; + background-color: rgba(0, 0, 0, 0.38); border-radius: 15px; margin-right: 10px; + -webkit-transition: background 0.3s ease; transition: background 0.3s ease; vertical-align: middle; - margin: 0 16px; } + margin: 0 16px; +} -.switch label .lever:after { +.switch label .lever:before, .switch label .lever:after { content: ""; position: absolute; display: inline-block; - width: 21px; - height: 21px; - background-color: #F1F1F1; - border-radius: 21px; - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4); - left: -5px; + width: 20px; + height: 20px; + border-radius: 50%; + left: 0; top: -3px; - transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease; } - -input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(38, 166, 154, 0.1); } + -webkit-transition: left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; + transition: left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; +} -input[type=checkbox]:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08); } +.switch label .lever:before { + background-color: rgba(38, 166, 154, 0.15); +} -.switch label input[type=checkbox]:checked + .lever:after { - left: 24px; } +.switch label .lever:after { + background-color: #F1F1F1; + -webkit-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); +} + +input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before { + -webkit-transform: scale(2.4); + transform: scale(2.4); + background-color: rgba(38, 166, 154, 0.15); +} + +input[type=checkbox]:not(:disabled) ~ .lever:active:before, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before { + -webkit-transform: scale(2.4); + transform: scale(2.4); + background-color: rgba(0, 0, 0, 0.08); +} .switch input[type=checkbox][disabled] + .lever { - cursor: default; } + cursor: default; + background-color: rgba(0, 0, 0, 0.12); +} -.switch label input[type=checkbox][disabled] + .lever:after, .switch label input[type=checkbox][disabled]:checked + .lever:after { - background-color: #BDBDBD; } +.switch label input[type=checkbox][disabled] + .lever:after, +.switch label input[type=checkbox][disabled]:checked + .lever:after { + background-color: #949494; +} + +/* Select Field + ========================================================================== */ +select { + display: none; +} + +select.browser-default { + display: block; +} + +select { + background-color: rgba(255, 255, 255, 0.9); + width: 100%; + padding: 5px; + border: 1px solid #f2f2f2; + border-radius: 2px; + height: 3rem; +} + +.input-field > select { + display: block; + position: absolute; + width: 0; + pointer-events: none; + height: 0; + top: 0; + left: 0; + opacity: 0; +} -/*************** - Select Field -***************/ .select-label { - position: absolute; } + position: absolute; +} .select-wrapper { - position: relative; } - .select-wrapper input.select-dropdown { - position: relative; - cursor: pointer; - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - outline: none; - height: 3rem; - line-height: 3rem; - width: 100%; - font-size: 1rem; - margin: 0 0 15px 0; - padding: 0; - display: block; } - .select-wrapper span.caret { - color: initial; - position: absolute; - right: 0; - top: 16px; - font-size: 10px; } - .select-wrapper span.caret.disabled { - color: rgba(0, 0, 0, 0.26); } - .select-wrapper + label { - position: absolute; - top: -14px; - font-size: 0.8rem; } + position: relative; +} -select { - display: none; } +.select-wrapper.valid + label, +.select-wrapper.invalid + label { + width: 100%; + pointer-events: none; +} -select.browser-default { - display: block; } +.select-wrapper input.select-dropdown { + position: relative; + cursor: pointer; + background-color: transparent; + border: none; + border-bottom: 1px solid #9e9e9e; + outline: none; + height: 3rem; + line-height: 3rem; + width: 100%; + font-size: 1rem; + margin: 0 0 20px 0; + padding: 0; + display: block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.select-wrapper span.caret { + color: initial; + position: absolute; + right: 0; + top: 0; + bottom: 0; + height: 10px; + margin: auto 0; + font-size: 10px; + line-height: 10px; +} + +.select-wrapper + label { + position: absolute; + top: -26px; + font-size: 0.8rem; +} select:disabled { - color: rgba(0, 0, 0, 0.3); } + color: rgba(0, 0, 0, 0.42); +} + +.select-wrapper.disabled span.caret, +.select-wrapper.disabled + label { + color: rgba(0, 0, 0, 0.42); +} .select-wrapper input.select-dropdown:disabled { - color: rgba(0, 0, 0, 0.3); + color: rgba(0, 0, 0, 0.42); cursor: default; -webkit-user-select: none; - /* webkit (safari, chrome) browsers */ - -moz-user-select: none; - /* mozilla browsers */ - -ms-user-select: none; - /* IE10+ */ - border-bottom: 1px solid rgba(0, 0, 0, 0.3); } + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} .select-wrapper i { - color: rgba(0, 0, 0, 0.3); } + color: rgba(0, 0, 0, 0.3); +} -.select-dropdown li.disabled { +.select-dropdown li.disabled, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { color: rgba(0, 0, 0, 0.3); - background-color: transparent; } + background-color: transparent; +} -/********************* - File Input -**********************/ +.select-dropdown.dropdown-content li.active { + background-color: transparent; +} + +.select-dropdown.dropdown-content li:hover { + background-color: rgba(0, 0, 0, 0.06); +} + +.select-dropdown.dropdown-content li.selected { + background-color: rgba(0, 0, 0, 0.03); +} + +.prefix ~ .select-wrapper { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.prefix ~ label { + margin-left: 3rem; +} + +.select-dropdown li img { + height: 40px; + width: 40px; + margin: 5px 15px; + float: right; +} + +.select-dropdown li.optgroup { + border-top: 1px solid #eee; +} + +.select-dropdown li.optgroup.selected > span { + color: rgba(0, 0, 0, 0.7); +} + +.select-dropdown li.optgroup > span { + color: rgba(0, 0, 0, 0.4); +} + +.select-dropdown li.optgroup ~ li.optgroup-option { + padding-left: 1rem; +} + +/* File Input + ========================================================================== */ .file-field { - position: relative; } - .file-field .file-path-wrapper { - overflow: hidden; - padding-left: 10px; } - .file-field input.file-path { - width: 100%; } - .file-field .btn, .file-field .btn-large { - float: left; - height: 3rem; - line-height: 3rem; } - .file-field span { - cursor: pointer; } - .file-field input[type=file] { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - width: 100%; - margin: 0; - padding: 0; - font-size: 20px; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); } + position: relative; +} -/*************** - Range -***************/ +.file-field .file-path-wrapper { + overflow: hidden; + padding-left: 10px; +} + +.file-field input.file-path { + width: 100%; +} + +.file-field .btn, .file-field .btn-large { + float: left; + height: 3rem; + line-height: 3rem; +} + +.file-field span { + cursor: pointer; +} + +.file-field input[type=file] { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + width: 100%; + margin: 0; + padding: 0; + font-size: 20px; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0); +} + +.file-field input[type=file]::-webkit-file-upload-button { + display: none; +} + +/* Range + ========================================================================== */ .range-field { - position: relative; } + position: relative; +} -input[type=range], input[type=range] + .thumb { - cursor: pointer; } +input[type=range], +input[type=range] + .thumb { + cursor: pointer; +} input[type=range] { position: relative; @@ -6795,57 +7174,60 @@ input[type=range] { border: none; outline: none; width: 100%; - margin: 15px 0px; - padding: 0; } + margin: 15px 0; + padding: 0; +} + +input[type=range]:focus { + outline: none; +} input[type=range] + .thumb { position: absolute; + top: 10px; + left: 0; border: none; height: 0; width: 0; border-radius: 50%; background-color: #26a69a; - top: 10px; - margin-left: -6px; + margin-left: 7px; -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -ms-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; + transform-origin: 50% 50%; -webkit-transform: rotate(-45deg); - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - transform: rotate(-45deg); } - input[type=range] + .thumb .value { - display: block; - width: 30px; - text-align: center; - color: #26a69a; - font-size: 0; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); } - input[type=range] + .thumb.active { - border-radius: 50% 50% 50% 0; } - input[type=range] + .thumb.active .value { - color: #fff; - margin-left: -1px; - margin-top: 8px; - font-size: 10px; } + transform: rotate(-45deg); +} -input[type=range]:focus { - outline: none; } +input[type=range] + .thumb .value { + display: block; + width: 30px; + text-align: center; + color: #26a69a; + font-size: 0; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} + +input[type=range] + .thumb.active { + border-radius: 50% 50% 50% 0; +} + +input[type=range] + .thumb.active .value { + color: #fff; + margin-left: -1px; + margin-top: 8px; + font-size: 10px; +} input[type=range] { - -webkit-appearance: none; } + -webkit-appearance: none; +} input[type=range]::-webkit-slider-runnable-track { height: 3px; background: #c2c0c2; - border: none; } + border: none; +} input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; @@ -6854,26 +7236,28 @@ input[type=range]::-webkit-slider-thumb { width: 14px; border-radius: 50%; background-color: #26a69a; - transform-origin: 50% 50%; + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; margin: -5px 0 0 0; - -webkit-transition: 0.3s; - -moz-transition: 0.3s; - -o-transition: 0.3s; - -ms-transition: 0.3s; - transition: 0.3s; } + -webkit-transition: .3s; + transition: .3s; +} input[type=range]:focus::-webkit-slider-runnable-track { - background: #ccc; } + background: #ccc; +} input[type=range] { /* fix for FF unable to apply focus style bug */ border: 1px solid white; - /*required for proper track sizing in FF*/ } + /*required for proper track sizing in FF*/ +} input[type=range]::-moz-range-track { height: 3px; background: #ddd; - border: none; } + border: none; +} input[type=range]::-moz-range-thumb { border: none; @@ -6881,63 +7265,62 @@ input[type=range]::-moz-range-thumb { width: 14px; border-radius: 50%; background: #26a69a; - margin-top: -5px; } + margin-top: -5px; +} -/*hide the outline behind the border*/ input[type=range]:-moz-focusring { - outline: 1px solid white; - outline-offset: -1px; } + outline: 1px solid #fff; + outline-offset: -1px; +} input[type=range]:focus::-moz-range-track { - background: #ccc; } + background: #ccc; +} input[type=range]::-ms-track { height: 3px; - /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */ background: transparent; - /*leave room for the larger thumb to overflow with a transparent border */ border-color: transparent; border-width: 6px 0; /*remove default tick marks*/ - color: transparent; } + color: transparent; +} input[type=range]::-ms-fill-lower { - background: #777; } + background: #777; +} input[type=range]::-ms-fill-upper { - background: #ddd; } + background: #ddd; +} input[type=range]::-ms-thumb { border: none; height: 14px; width: 14px; border-radius: 50%; - background: #26a69a; } + background: #26a69a; +} input[type=range]:focus::-ms-fill-lower { - background: #888; } + background: #888; +} input[type=range]:focus::-ms-fill-upper { - background: #ccc; } - -/*************************** - Text Inputs + Textarea -****************************/ -select { - background-color: rgba(255, 255, 255, 0.9); - width: 100%; - padding: 5px; - border: 1px solid #f2f2f2; - border-radius: 2px; - height: 3rem; } + background: #ccc; +} -/*************** - Nav List +/*************** + Nav List ***************/ .table-of-contents.fixed { - position: fixed; } + position: fixed; +} + .table-of-contents li { - padding: 2px 0; } + padding: 2px 0; +} + .table-of-contents a { display: inline-block; font-weight: 300; @@ -6946,22 +7329,29 @@ select { height: 1.5rem; line-height: 1.5rem; letter-spacing: .4; - display: inline-block; } - .table-of-contents a:hover { - color: #a8a8a8; - padding-left: 19px; - border-left: 1px solid #ea4a4f; } - .table-of-contents a.active { - font-weight: 500; - padding-left: 18px; - border-left: 2px solid #ea4a4f; } + display: inline-block; +} + +.table-of-contents a:hover { + color: #a8a8a8; + padding-left: 19px; + border-left: 1px solid #ee6e73; +} + +.table-of-contents a.active { + font-weight: 500; + padding-left: 18px; + border-left: 2px solid #ee6e73; +} .side-nav { position: fixed; - width: 240px; - left: -105%; + width: 300px; + left: 0; top: 0; margin: 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); height: 100%; height: calc(100% + 60px); height: -moz-calc(100%); @@ -6969,56 +7359,210 @@ select { background-color: #fff; z-index: 999; overflow-y: auto; - will-change: left; } - .side-nav.right-aligned { - will-change: right; - right: -105%; - left: auto; } - .side-nav .collapsible { - margin: 0; } - .side-nav li { - float: none; - padding: 0 15px; } - .side-nav li:hover, .side-nav li.active { - background-color: #ddd; } - .side-nav a { - color: #444; - display: block; - font-size: 1rem; - height: 64px; - line-height: 64px; - padding: 0 15px; } + will-change: transform; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform: translateX(-105%); + transform: translateX(-105%); +} + +.side-nav.right-aligned { + right: 0; + -webkit-transform: translateX(105%); + transform: translateX(105%); + left: auto; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.side-nav .collapsible { + margin: 0; +} + +.side-nav li { + float: none; + line-height: 48px; +} + +.side-nav li.active { + background-color: rgba(0, 0, 0, 0.05); +} + +.side-nav li > a { + color: rgba(0, 0, 0, 0.87); + display: block; + font-size: 14px; + font-weight: 500; + height: 48px; + line-height: 48px; + padding: 0 32px; +} + +.side-nav li > a:hover { + background-color: rgba(0, 0, 0, 0.05); +} + +.side-nav li > a.btn, .side-nav li > a.btn-large, .side-nav li > a.btn-large, .side-nav li > a.btn-flat, .side-nav li > a.btn-floating { + margin: 10px 15px; +} + +.side-nav li > a.btn, .side-nav li > a.btn-large, .side-nav li > a.btn-large, .side-nav li > a.btn-floating { + color: #fff; +} + +.side-nav li > a.btn-flat { + color: #343434; +} + +.side-nav li > a.btn:hover, .side-nav li > a.btn-large:hover, .side-nav li > a.btn-large:hover { + background-color: #2bbbad; +} + +.side-nav li > a.btn-floating:hover { + background-color: #26a69a; +} + +.side-nav li > a > i, +.side-nav li > a > [class^="mdi-"], .side-nav li > a li > a > [class*="mdi-"], +.side-nav li > a > i.material-icons { + float: left; + height: 48px; + line-height: 48px; + margin: 0 32px 0 0; + width: 24px; + color: rgba(0, 0, 0, 0.54); +} + +.side-nav .divider { + margin: 8px 0 0 0; +} + +.side-nav .subheader { + cursor: initial; + pointer-events: none; + color: rgba(0, 0, 0, 0.54); + font-size: 14px; + font-weight: 500; + line-height: 48px; +} + +.side-nav .subheader:hover { + background-color: transparent; +} + +.side-nav .user-view, +.side-nav .userView { + position: relative; + padding: 32px 32px 0; + margin-bottom: 8px; +} + +.side-nav .user-view > a, +.side-nav .userView > a { + height: auto; + padding: 0; +} + +.side-nav .user-view > a:hover, +.side-nav .userView > a:hover { + background-color: transparent; +} + +.side-nav .user-view .background, +.side-nav .userView .background { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; +} + +.side-nav .user-view .circle, .side-nav .user-view .name, .side-nav .user-view .email, +.side-nav .userView .circle, +.side-nav .userView .name, +.side-nav .userView .email { + display: block; +} + +.side-nav .user-view .circle, +.side-nav .userView .circle { + height: 64px; + width: 64px; +} + +.side-nav .user-view .name, +.side-nav .user-view .email, +.side-nav .userView .name, +.side-nav .userView .email { + font-size: 14px; + line-height: 24px; +} + +.side-nav .user-view .name, +.side-nav .userView .name { + margin-top: 16px; + font-weight: 500; +} + +.side-nav .user-view .email, +.side-nav .userView .email { + padding-bottom: 16px; + font-weight: 400; +} .drag-target { height: 100%; width: 10px; position: fixed; top: 0; - z-index: 998; } - -.side-nav.fixed a { - display: block; - padding: 0 15px; - color: #444; } + z-index: 998; +} .side-nav.fixed { left: 0; - position: fixed; } - .side-nav.fixed.right-aligned { - right: 0; - left: auto; } + -webkit-transform: translateX(0); + transform: translateX(0); + position: fixed; +} + +.side-nav.fixed.right-aligned { + right: 0; + left: auto; +} -@media only screen and (max-width : 992px) { +@media only screen and (max-width: 992px) { .side-nav.fixed { - left: -105%; } - .side-nav.fixed.right-aligned { - right: -105%; - left: auto; } } + -webkit-transform: translateX(-105%); + transform: translateX(-105%); + } + .side-nav.fixed.right-aligned { + -webkit-transform: translateX(105%); + transform: translateX(105%); + } + .side-nav a { + padding: 0 16px; + } + .side-nav .user-view, + .side-nav .userView { + padding: 16px 16px 0; + } +} + +.side-nav .collapsible-body > ul:not(.collapsible) > li.active, +.side-nav.fixed .collapsible-body > ul:not(.collapsible) > li.active { + background-color: #ee6e73; +} + +.side-nav .collapsible-body > ul:not(.collapsible) > li.active a, +.side-nav.fixed .collapsible-body > ul:not(.collapsible) > li.active a { + color: #fff; +} -.side-nav .collapsible-body li.active, .side-nav.fixed .collapsible-body li.active { - background-color: #ee6e73; } - .side-nav .collapsible-body li.active a, .side-nav.fixed .collapsible-body li.active a { - color: #fff; } +.side-nav .collapsible-body { + padding: 0; +} #sidenav-overlay { position: fixed; @@ -7028,508 +7572,891 @@ select { height: 120vh; background-color: rgba(0, 0, 0, 0.5); z-index: 997; - will-change: opacity; } - -/* - @license - Copyright (c) 2014 The Polymer Project Authors. All rights reserved. - This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - Code distributed by Google as part of the polymer project is also - subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + will-change: opacity; +} + +/* + @license + Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + Code distributed by Google as part of the polymer project is also + subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ /**************************/ /* STYLES FOR THE SPINNER */ /**************************/ -/* - * Constants: - * STROKEWIDTH = 3px - * ARCSIZE = 270 degrees (amount of circle the arc takes up) - * ARCTIME = 1333ms (time it takes to expand and contract arc) - * ARCSTARTROT = 216 degrees (how much the start location of the arc - * should rotate each time, 216 gives us a - * 5 pointed star shape (it's 360/5 * 3). - * For a 7 pointed star, we might do - * 360/7 * 3 = 154.286) - * CONTAINERWIDTH = 28px - * SHRINK_TIME = 400ms +/* + * Constants: + * STROKEWIDTH = 3px + * ARCSIZE = 270 degrees (amount of circle the arc takes up) + * ARCTIME = 1333ms (time it takes to expand and contract arc) + * ARCSTARTROT = 216 degrees (how much the start location of the arc + * should rotate each time, 216 gives us a + * 5 pointed star shape (it's 360/5 * 3). + * For a 7 pointed star, we might do + * 360/7 * 3 = 154.286) + * CONTAINERWIDTH = 28px + * SHRINK_TIME = 400ms */ .preloader-wrapper { display: inline-block; position: relative; - width: 48px; - height: 48px; } - .preloader-wrapper.small { - width: 36px; - height: 36px; } - .preloader-wrapper.big { - width: 64px; - height: 64px; } - .preloader-wrapper.active { - /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ - -webkit-animation: container-rotate 1568ms linear infinite; - animation: container-rotate 1568ms linear infinite; } + width: 50px; + height: 50px; +} + +.preloader-wrapper.small { + width: 36px; + height: 36px; +} + +.preloader-wrapper.big { + width: 64px; + height: 64px; +} + +.preloader-wrapper.active { + /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ + -webkit-animation: container-rotate 1568ms linear infinite; + animation: container-rotate 1568ms linear infinite; +} @-webkit-keyframes container-rotate { to { - -webkit-transform: rotate(360deg); } } + -webkit-transform: rotate(360deg); + } +} @keyframes container-rotate { to { - transform: rotate(360deg); } } + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} .spinner-layer { position: absolute; width: 100%; height: 100%; - opacity: 0; } - -.spinner-blue, .spinner-blue-only { - border-color: #4285f4; } - -.spinner-red, .spinner-red-only { - border-color: #db4437; } - -.spinner-yellow, .spinner-yellow-only { - border-color: #f4b400; } - -.spinner-green, .spinner-green-only { - border-color: #0f9d58; } - -/** - * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): - * - * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't - * guarantee that the animation will start _exactly_ after that value. So we avoid using - * animation-delay and instead set custom keyframes for each color (as redundant as it - * seems). - * - * We write out each animation in full (instead of separating animation-name, - * animation-duration, etc.) because under the polyfill, Safari does not recognize those - * specific properties properly, treats them as -webkit-animation, and overrides the - * other animation rules. See https://github.com/Polymer/platform/issues/53. + opacity: 0; + border-color: #26a69a; +} + +.spinner-blue, +.spinner-blue-only { + border-color: #4285f4; +} + +.spinner-red, +.spinner-red-only { + border-color: #db4437; +} + +.spinner-yellow, +.spinner-yellow-only { + border-color: #f4b400; +} + +.spinner-green, +.spinner-green-only { + border-color: #0f9d58; +} + +/** + * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): + * + * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't + * guarantee that the animation will start _exactly_ after that value. So we avoid using + * animation-delay and instead set custom keyframes for each color (as redundant as it + * seems). + * + * We write out each animation in full (instead of separating animation-name, + * animation-duration, etc.) because under the polyfill, Safari does not recognize those + * specific properties properly, treats them as -webkit-animation, and overrides the + * other animation rules. See https://github.com/Polymer/platform/issues/53. */ .active .spinner-layer.spinner-blue { /* durations: 4 * ARCTIME */ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} .active .spinner-layer.spinner-red { /* durations: 4 * ARCTIME */ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} .active .spinner-layer.spinner-yellow { /* durations: 4 * ARCTIME */ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} .active .spinner-layer.spinner-green { /* durations: 4 * ARCTIME */ -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } - -.active .spinner-layer.spinner-blue-only, .active .spinner-layer.spinner-red-only, .active .spinner-layer.spinner-yellow-only, .active .spinner-layer.spinner-green-only { + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.active .spinner-layer, +.active .spinner-layer.spinner-blue-only, +.active .spinner-layer.spinner-red-only, +.active .spinner-layer.spinner-yellow-only, +.active .spinner-layer.spinner-green-only { /* durations: 4 * ARCTIME */ opacity: 1; -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} @-webkit-keyframes fill-unfill-rotate { - /* 0.5 * ARCSIZE */ - /* 1 * ARCSIZE */ - /* 1.5 * ARCSIZE */ - /* 2 * ARCSIZE */ - /* 2.5 * ARCSIZE */ - /* 3 * ARCSIZE */ - /* 3.5 * ARCSIZE */ - /* 4 * ARCSIZE */ 12.5% { - -webkit-transform: rotate(135deg); } - + -webkit-transform: rotate(135deg); + } + /* 0.5 * ARCSIZE */ 25% { - -webkit-transform: rotate(270deg); } - + -webkit-transform: rotate(270deg); + } + /* 1 * ARCSIZE */ 37.5% { - -webkit-transform: rotate(405deg); } - + -webkit-transform: rotate(405deg); + } + /* 1.5 * ARCSIZE */ 50% { - -webkit-transform: rotate(540deg); } - + -webkit-transform: rotate(540deg); + } + /* 2 * ARCSIZE */ 62.5% { - -webkit-transform: rotate(675deg); } - + -webkit-transform: rotate(675deg); + } + /* 2.5 * ARCSIZE */ 75% { - -webkit-transform: rotate(810deg); } - + -webkit-transform: rotate(810deg); + } + /* 3 * ARCSIZE */ 87.5% { - -webkit-transform: rotate(945deg); } - + -webkit-transform: rotate(945deg); + } + /* 3.5 * ARCSIZE */ to { - -webkit-transform: rotate(1080deg); } } + -webkit-transform: rotate(1080deg); + } + /* 4 * ARCSIZE */ +} @keyframes fill-unfill-rotate { - /* 0.5 * ARCSIZE */ - /* 1 * ARCSIZE */ - /* 1.5 * ARCSIZE */ - /* 2 * ARCSIZE */ - /* 2.5 * ARCSIZE */ - /* 3 * ARCSIZE */ - /* 3.5 * ARCSIZE */ - /* 4 * ARCSIZE */ 12.5% { - transform: rotate(135deg); } - + -webkit-transform: rotate(135deg); + transform: rotate(135deg); + } + /* 0.5 * ARCSIZE */ 25% { - transform: rotate(270deg); } - + -webkit-transform: rotate(270deg); + transform: rotate(270deg); + } + /* 1 * ARCSIZE */ 37.5% { - transform: rotate(405deg); } - + -webkit-transform: rotate(405deg); + transform: rotate(405deg); + } + /* 1.5 * ARCSIZE */ 50% { - transform: rotate(540deg); } - + -webkit-transform: rotate(540deg); + transform: rotate(540deg); + } + /* 2 * ARCSIZE */ 62.5% { - transform: rotate(675deg); } - + -webkit-transform: rotate(675deg); + transform: rotate(675deg); + } + /* 2.5 * ARCSIZE */ 75% { - transform: rotate(810deg); } - + -webkit-transform: rotate(810deg); + transform: rotate(810deg); + } + /* 3 * ARCSIZE */ 87.5% { - transform: rotate(945deg); } - + -webkit-transform: rotate(945deg); + transform: rotate(945deg); + } + /* 3.5 * ARCSIZE */ to { - transform: rotate(1080deg); } } + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); + } + /* 4 * ARCSIZE */ +} @-webkit-keyframes blue-fade-in-out { from { - opacity: 1; } - + opacity: 1; + } 25% { - opacity: 1; } - + opacity: 1; + } 26% { - opacity: 0; } - + opacity: 0; + } 89% { - opacity: 0; } - + opacity: 0; + } 90% { - opacity: 1; } - + opacity: 1; + } 100% { - opacity: 1; } } + opacity: 1; + } +} @keyframes blue-fade-in-out { from { - opacity: 1; } - + opacity: 1; + } 25% { - opacity: 1; } - + opacity: 1; + } 26% { - opacity: 0; } - + opacity: 0; + } 89% { - opacity: 0; } - + opacity: 0; + } 90% { - opacity: 1; } - + opacity: 1; + } 100% { - opacity: 1; } } + opacity: 1; + } +} @-webkit-keyframes red-fade-in-out { from { - opacity: 0; } - + opacity: 0; + } 15% { - opacity: 0; } - + opacity: 0; + } 25% { - opacity: 1; } - + opacity: 1; + } 50% { - opacity: 1; } - + opacity: 1; + } 51% { - opacity: 0; } } + opacity: 0; + } +} @keyframes red-fade-in-out { from { - opacity: 0; } - + opacity: 0; + } 15% { - opacity: 0; } - + opacity: 0; + } 25% { - opacity: 1; } - + opacity: 1; + } 50% { - opacity: 1; } - + opacity: 1; + } 51% { - opacity: 0; } } + opacity: 0; + } +} @-webkit-keyframes yellow-fade-in-out { from { - opacity: 0; } - + opacity: 0; + } 40% { - opacity: 0; } - + opacity: 0; + } 50% { - opacity: 1; } - + opacity: 1; + } 75% { - opacity: 1; } - + opacity: 1; + } 76% { - opacity: 0; } } + opacity: 0; + } +} @keyframes yellow-fade-in-out { from { - opacity: 0; } - + opacity: 0; + } 40% { - opacity: 0; } - + opacity: 0; + } 50% { - opacity: 1; } - + opacity: 1; + } 75% { - opacity: 1; } - + opacity: 1; + } 76% { - opacity: 0; } } + opacity: 0; + } +} @-webkit-keyframes green-fade-in-out { from { - opacity: 0; } - + opacity: 0; + } 65% { - opacity: 0; } + opacity: 0; + } + 75% { + opacity: 1; + } + 90% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes green-fade-in-out { + from { + opacity: 0; + } + 65% { + opacity: 0; + } 75% { - opacity: 1; } + opacity: 1; + } + 90% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +/** + * Patch the gap that appear between the two adjacent div.circle-clipper while the + * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). + */ +.gap-patch { + position: absolute; + top: 0; + left: 45%; + width: 10%; + height: 100%; + overflow: hidden; + border-color: inherit; +} + +.gap-patch .circle { + width: 1000%; + left: -450%; +} + +.circle-clipper { + display: inline-block; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; + border-color: inherit; +} + +.circle-clipper .circle { + width: 200%; + height: 100%; + border-width: 3px; + /* STROKEWIDTH */ + border-style: solid; + border-color: inherit; + border-bottom-color: transparent !important; + border-radius: 50%; + -webkit-animation: none; + animation: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; +} + +.circle-clipper.left .circle { + left: 0; + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + transform: rotate(129deg); +} + +.circle-clipper.right .circle { + left: -100%; + border-left-color: transparent !important; + -webkit-transform: rotate(-129deg); + transform: rotate(-129deg); +} + +.active .circle-clipper.left .circle { + /* duration: ARCTIME */ + -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.active .circle-clipper.right .circle { + /* duration: ARCTIME */ + -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +@-webkit-keyframes left-spin { + from { + -webkit-transform: rotate(130deg); + } + 50% { + -webkit-transform: rotate(-5deg); + } + to { + -webkit-transform: rotate(130deg); + } +} + +@keyframes left-spin { + from { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); + } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); + } + to { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); + } +} + +@-webkit-keyframes right-spin { + from { + -webkit-transform: rotate(-130deg); + } + 50% { + -webkit-transform: rotate(5deg); + } + to { + -webkit-transform: rotate(-130deg); + } +} + +@keyframes right-spin { + from { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); + } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); + } + to { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); + } +} + +#spinnerContainer.cooldown { + /* duration: SHRINK_TIME */ + -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); + animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); +} + +@-webkit-keyframes fade-out { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@keyframes fade-out { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +.slider { + position: relative; + height: 400px; + width: 100%; +} + +.slider.fullscreen { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.slider.fullscreen ul.slides { + height: 100%; +} + +.slider.fullscreen ul.indicators { + z-index: 2; + bottom: 30px; +} + +.slider .slides { + background-color: #9e9e9e; + margin: 0; + height: 400px; +} + +.slider .slides li { + opacity: 0; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: inherit; + overflow: hidden; +} + +.slider .slides li img { + height: 100%; + width: 100%; + background-size: cover; + background-position: center; +} + +.slider .slides li .caption { + color: #fff; + position: absolute; + top: 15%; + left: 15%; + width: 70%; + opacity: 0; +} + +.slider .slides li .caption p { + color: #e0e0e0; +} + +.slider .slides li.active { + z-index: 2; +} + +.slider .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; +} + +.slider .indicators .indicator-item { + display: inline-block; + position: relative; + cursor: pointer; + height: 16px; + width: 16px; + margin: 0 12px; + background-color: #e0e0e0; + -webkit-transition: background-color .3s; + transition: background-color .3s; + border-radius: 50%; +} - 90% { - opacity: 1; } +.slider .indicators .indicator-item.active { + background-color: #4CAF50; +} - 100% { - opacity: 0; } } +.carousel { + overflow: hidden; + position: relative; + width: 100%; + height: 400px; + -webkit-perspective: 500px; + perspective: 500px; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transform-origin: 0% 50%; + transform-origin: 0% 50%; +} + +.carousel.carousel-slider { + top: 0; + left: 0; +} -@keyframes green-fade-in-out { - from { - opacity: 0; } +.carousel.carousel-slider .carousel-fixed-item { + position: absolute; + left: 0; + right: 0; + bottom: 20px; + z-index: 1; +} - 65% { - opacity: 0; } +.carousel.carousel-slider .carousel-fixed-item.with-indicators { + bottom: 68px; +} - 75% { - opacity: 1; } +.carousel.carousel-slider .carousel-item { + width: 100%; + height: 100%; + min-height: 400px; + position: absolute; + top: 0; + left: 0; +} - 90% { - opacity: 1; } +.carousel.carousel-slider .carousel-item h2 { + font-size: 24px; + font-weight: 500; + line-height: 32px; +} - 100% { - opacity: 0; } } +.carousel.carousel-slider .carousel-item p { + font-size: 15px; +} -/** - * Patch the gap that appear between the two adjacent div.circle-clipper while the - * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). - */ -.gap-patch { +.carousel .carousel-item { + display: none; + width: 200px; + height: 200px; position: absolute; top: 0; - left: 45%; - width: 10%; - height: 100%; - overflow: hidden; - border-color: inherit; } + left: 0; +} -.gap-patch .circle { - width: 1000%; - left: -450%; } +.carousel .carousel-item > img { + width: 100%; +} -.circle-clipper { +.carousel .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; +} + +.carousel .indicators .indicator-item { display: inline-block; position: relative; - width: 50%; - height: 100%; - overflow: hidden; - border-color: inherit; } - .circle-clipper .circle { - width: 200%; - height: 100%; - border-width: 3px; - /* STROKEWIDTH */ - border-style: solid; - border-color: inherit; - border-bottom-color: transparent !important; - border-radius: 50%; - -webkit-animation: none; - animation: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; } - .circle-clipper.left .circle { - left: 0; - border-right-color: transparent !important; - -webkit-transform: rotate(129deg); - transform: rotate(129deg); } - .circle-clipper.right .circle { - left: -100%; - border-left-color: transparent !important; - -webkit-transform: rotate(-129deg); - transform: rotate(-129deg); } + cursor: pointer; + height: 8px; + width: 8px; + margin: 24px 4px; + background-color: rgba(255, 255, 255, 0.5); + -webkit-transition: background-color .3s; + transition: background-color .3s; + border-radius: 50%; +} -.active .circle-clipper.left .circle { - /* duration: ARCTIME */ - -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } +.carousel .indicators .indicator-item.active { + background-color: #fff; +} -.active .circle-clipper.right .circle { - /* duration: ARCTIME */ - -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } +.carousel.scrolling .carousel-item .materialboxed, +.carousel .carousel-item:not(.active) .materialboxed { + pointer-events: none; +} -@-webkit-keyframes left-spin { - from { - -webkit-transform: rotate(130deg); } +.tap-target-wrapper { + width: 800px; + height: 800px; + position: fixed; + z-index: 1000; + visibility: hidden; + -webkit-transition: visibility 0s .3s; + transition: visibility 0s .3s; +} + +.tap-target-wrapper.open { + visibility: visible; + -webkit-transition: visibility 0s; + transition: visibility 0s; +} + +.tap-target-wrapper.open .tap-target { + -webkit-transform: scale(1); + transform: scale(1); + opacity: .95; + -webkit-transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); +} + +.tap-target-wrapper.open .tap-target-wave::before { + -webkit-transform: scale(1); + transform: scale(1); +} + +.tap-target-wrapper.open .tap-target-wave::after { + visibility: visible; + -webkit-animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + -webkit-transition: opacity .3s, visibility 0s 1s, -webkit-transform .3s; + transition: opacity .3s, visibility 0s 1s, -webkit-transform .3s; + transition: opacity .3s, transform .3s, visibility 0s 1s; + transition: opacity .3s, transform .3s, visibility 0s 1s, -webkit-transform .3s; +} + +.tap-target { + position: absolute; + font-size: 1rem; + border-radius: 50%; + background-color: #ee6e73; + -webkit-box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2); + box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2); + width: 100%; + height: 100%; + opacity: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); +} + +.tap-target-content { + position: relative; + display: table-cell; +} - 50% { - -webkit-transform: rotate(-5deg); } +.tap-target-wave { + position: absolute; + border-radius: 50%; + z-index: 10001; +} - to { - -webkit-transform: rotate(130deg); } } +.tap-target-wave::before, .tap-target-wave::after { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #ffffff; +} -@keyframes left-spin { - from { - transform: rotate(130deg); } +.tap-target-wave::before { + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; +} + +.tap-target-wave::after { + visibility: hidden; + -webkit-transition: opacity .3s, visibility 0s, -webkit-transform .3s; + transition: opacity .3s, visibility 0s, -webkit-transform .3s; + transition: opacity .3s, transform .3s, visibility 0s; + transition: opacity .3s, transform .3s, visibility 0s, -webkit-transform .3s; + z-index: -1; +} + +.tap-target-origin { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 10002; + position: absolute !important; +} + +.tap-target-origin:not(.btn):not(.btn-large), .tap-target-origin:not(.btn):not(.btn-large):hover { + background: none; +} - 50% { - transform: rotate(-5deg); } +@media only screen and (max-width: 600px) { + .tap-target, .tap-target-wrapper { + width: 600px; + height: 600px; + } +} - to { - transform: rotate(130deg); } } +.pulse { + overflow: initial; + position: relative; +} -@-webkit-keyframes right-spin { - from { - -webkit-transform: rotate(-130deg); } +.pulse::before { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: inherit; + border-radius: inherit; + -webkit-transition: opacity .3s, -webkit-transform .3s; + transition: opacity .3s, -webkit-transform .3s; + transition: opacity .3s, transform .3s; + transition: opacity .3s, transform .3s, -webkit-transform .3s; + -webkit-animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + z-index: -1; +} +@-webkit-keyframes pulse-animation { + 0% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } 50% { - -webkit-transform: rotate(5deg); } - - to { - -webkit-transform: rotate(-130deg); } } - -@keyframes right-spin { - from { - transform: rotate(-130deg); } + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } + 100% { + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } +} +@keyframes pulse-animation { + 0% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } 50% { - transform: rotate(5deg); } - - to { - transform: rotate(-130deg); } } - -#spinnerContainer.cooldown { - /* duration: SHRINK_TIME */ - -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); - animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); } - -@-webkit-keyframes fade-out { - from { - opacity: 1; } - - to { - opacity: 0; } } - -@keyframes fade-out { - from { - opacity: 1; } - - to { - opacity: 0; } } + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } + 100% { + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } +} -.slider { - position: relative; - height: 400px; - width: 100%; } - .slider.fullscreen { - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; } - .slider.fullscreen ul.slides { - height: 100%; } - .slider.fullscreen ul.indicators { - z-index: 2; - bottom: 30px; } - .slider .slides { - background-color: #9e9e9e; - margin: 0; - height: 400px; } - .slider .slides li { - opacity: 0; - position: absolute; - top: 0; - left: 0; - z-index: 1; - width: 100%; - height: inherit; - overflow: hidden; } - .slider .slides li img { - height: 100%; - width: 100%; - background-size: cover; - background-position: center; } - .slider .slides li .caption { - color: #fff; - position: absolute; - top: 15%; - left: 15%; - width: 70%; - opacity: 0; } - .slider .slides li .caption p { - color: #e0e0e0; } - .slider .slides li.active { - z-index: 2; } - .slider .indicators { - position: absolute; - text-align: center; - left: 0; - right: 0; - bottom: 0; - margin: 0; } - .slider .indicators .indicator-item { - display: inline-block; - position: relative; - cursor: pointer; - height: 16px; - width: 16px; - margin: 0 12px; - background-color: #e0e0e0; - -webkit-transition: background-color .3s; - -moz-transition: background-color .3s; - -o-transition: background-color .3s; - -ms-transition: background-color .3s; - transition: background-color .3s; - border-radius: 50%; } - .slider .indicators .indicator-item.active { - background-color: #4CAF50; } - -/* ========================================================================== - $BASE-PICKER +/* ========================================================================== + $BASE-PICKER ========================================================================== */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. +/** + * Note: the root picker element should *NOT* be styled more than what's here. */ .picker { font-size: 16px; @@ -7541,56 +8468,63 @@ select { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; - user-select: none; } + user-select: none; + outline: none; +} -/** - * The picker input element. +/** + * The picker input element. */ .picker__input { - cursor: default; } + cursor: default; +} -/** - * When the picker is opened, the input element is "activated". +/** + * When the picker is opened, the input element is "activated". */ .picker__input.picker__input--active { - border-color: #0089ec; } + border-color: #0089ec; +} -/** - * The holder is the only "scrollable" top-level container element. +/** + * The holder is the only "scrollable" top-level container element. */ .picker__holder { width: 100%; overflow-y: auto; - -webkit-overflow-scrolling: touch; } + -webkit-overflow-scrolling: touch; +} -/*! - * Default mobile-first, responsive styling for pickadate.js - * Demo: http://amsul.github.io/pickadate.js +/*! + * Default mobile-first, responsive styling for pickadate.js + * Demo: http://amsul.github.io/pickadate.js */ -/** - * Note: the root picker element should *NOT* be styled more than what's here. +/** + * Note: the root picker element should *NOT* be styled more than what's here. */ -/** - * Make the holder and frame fullscreen. +/** + * Make the holder and frame fullscreen. */ -.picker__holder, .picker__frame { +.picker__holder, +.picker__frame { bottom: 0; left: 0; right: 0; - top: 100%; } + top: 100%; +} -/** - * The holder should overlay the entire screen. +/** + * The holder should overlay the entire screen. */ .picker__holder { position: fixed; -webkit-transition: background 0.15s ease-out, top 0s 0.15s; - -moz-transition: background 0.15s ease-out, top 0s 0.15s; transition: background 0.15s ease-out, top 0s 0.15s; - -webkit-backface-visibility: hidden; } + -webkit-backface-visibility: hidden; +} -/** - * The frame that bounds the box contents of the picker. +/** + * The frame that bounds the box contents of the picker. */ .picker__frame { position: absolute; @@ -7603,39 +8537,47 @@ select { -moz-opacity: 0; opacity: 0; -webkit-transition: all 0.15s ease-out; - -moz-transition: all 0.15s ease-out; - transition: all 0.15s ease-out; } + transition: all 0.15s ease-out; +} @media (min-height: 28.875em) { .picker__frame { overflow: visible; top: auto; bottom: -100%; - max-height: 80%; } } + max-height: 80%; + } +} @media (min-height: 40.125em) { .picker__frame { - margin-bottom: 7.5%; } } + margin-bottom: 7.5%; + } +} -/** - * The wrapper sets the stage to vertically align the box contents. +/** + * The wrapper sets the stage to vertically align the box contents. */ .picker__wrap { display: table; width: 100%; - height: 100%; } + height: 100%; +} @media (min-height: 28.875em) { .picker__wrap { - display: block; } } + display: block; + } +} -/** - * The box contains all the picker contents. +/** + * The box contains all the picker contents. */ .picker__box { background: #ffffff; display: table-cell; - vertical-align: middle; } + vertical-align: middle; +} @media (min-height: 28.875em) { .picker__box { @@ -7643,15 +8585,14 @@ select { border: 1px solid #777777; border-top-color: #898989; border-bottom-width: 0; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); - box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); } } + box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); + } +} -/** - * When the picker opens... +/** + * When the picker opens... */ .picker--opened .picker__holder { top: 0; @@ -7660,113 +8601,154 @@ select { zoom: 1; background: rgba(0, 0, 0, 0.32); -webkit-transition: background 0.15s ease-out; - -moz-transition: background 0.15s ease-out; - transition: background 0.15s ease-out; } + transition: background 0.15s ease-out; +} .picker--opened .picker__frame { top: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter: alpha(opacity=100); -moz-opacity: 1; - opacity: 1; } + opacity: 1; +} @media (min-height: 35.875em) { .picker--opened .picker__frame { top: 10%; - bottom: 20% auto; } } + bottom: auto; + } +} -/** - * For `large` screens, transform into an inline picker. +/** + * For `large` screens, transform into an inline picker. */ -/* ========================================================================== - CUSTOM MATERIALIZE STYLES +/* ========================================================================== + CUSTOM MATERIALIZE STYLES ========================================================================== */ .picker__input.picker__input--active { - border-color: #E3F2FD; } + border-color: #E3F2FD; +} .picker__frame { margin: 0 auto; - max-width: 325px; } + max-width: 325px; +} @media (min-height: 38.875em) { .picker--opened .picker__frame { top: 10%; - bottom: auto; } } + bottom: auto; + } +} -/* ========================================================================== - $BASE-DATE-PICKER +@media only screen and (min-width: 601px) { + .picker__box { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + } + .picker__frame { + width: 80%; + max-width: 600px; + } +} + +/* ========================================================================== + $BASE-DATE-PICKER ========================================================================== */ -/** - * The picker box. +/** + * The picker box. */ .picker__box { - padding: 0 1em; } + padding: 0; + border-radius: 2px; + overflow: hidden; +} -/** - * The header containing the month and year stuff. +/** + * The header containing the month and year stuff. */ .picker__header { text-align: center; position: relative; - margin-top: .75em; } + margin-top: .75em; +} -/** - * The month and year labels. +/** + * The month and year labels. */ -.picker__month, .picker__year { +.picker__month, +.picker__year { display: inline-block; margin-left: .25em; - margin-right: .25em; } + margin-right: .25em; +} -/** - * The month and year selectors. +/** + * The month and year selectors. */ -.picker__select--month, .picker__select--year { +.picker__select--month, +.picker__select--year { height: 2em; padding: 0; margin-left: .25em; - margin-right: .25em; } + margin-right: .25em; +} .picker__select--month.browser-default { display: inline; background-color: #FFFFFF; - width: 40%; } + width: 40%; +} .picker__select--year.browser-default { display: inline; background-color: #FFFFFF; - width: 25%; } + width: 26%; +} -.picker__select--month:focus, .picker__select--year:focus { - border-color: rgba(0, 0, 0, 0.05); } +.picker__select--month:focus, +.picker__select--year:focus { + border-color: rgba(0, 0, 0, 0.05); +} -/** - * The month navigation buttons. +/** + * The month navigation buttons. */ -.picker__nav--prev, .picker__nav--next { +.picker__nav--prev, +.picker__nav--next { position: absolute; padding: .5em 1.25em; width: 1em; height: 1em; - box-sizing: content-box; - top: -0.25em; } + -webkit-box-sizing: content-box; + box-sizing: content-box; + top: -0.25em; +} .picker__nav--prev { left: -1em; - padding-right: 1.25em; } + padding-right: 1.25em; +} .picker__nav--next { right: -1em; - padding-left: 1.25em; } + padding-left: 1.25em; +} -.picker__nav--disabled, .picker__nav--disabled:hover, .picker__nav--disabled:before, .picker__nav--disabled:before:hover { +.picker__nav--disabled, +.picker__nav--disabled:hover, +.picker__nav--disabled:before, +.picker__nav--disabled:before:hover { cursor: default; background: none; border-right-color: #f5f5f5; - border-left-color: #f5f5f5; } + border-left-color: #f5f5f5; +} -/** - * The calendar table of dates +/** + * The calendar table of dates */ .picker__table { text-align: center; @@ -7776,17 +8758,20 @@ select { font-size: 1rem; width: 100%; margin-top: .75em; - margin-bottom: .5em; } + margin-bottom: .5em; +} .picker__table th, .picker__table td { - text-align: center; } + text-align: center; +} .picker__table td { margin: 0; - padding: 0; } + padding: 0; +} -/** - * The weekday labels +/** + * The weekday labels */ .picker__weekday { width: 14.285714286%; @@ -7794,14 +8779,17 @@ select { padding-bottom: .25em; color: #999999; font-weight: 500; - /* Increase the spacing a tad */ } + /* Increase the spacing a tad */ +} @media (min-height: 33.875em) { .picker__weekday { - padding-bottom: .5em; } } + padding-bottom: .5em; + } +} -/** - * The days on the calendar +/** + * The days on the calendar */ .picker__day--today { position: relative; @@ -7809,58 +8797,70 @@ select { letter-spacing: -.3; padding: .75rem 0; font-weight: 400; - border: 1px solid transparent; } + border: 1px solid transparent; +} .picker__day--disabled:before { - border-top-color: #aaaaaa; } + border-top-color: #aaaaaa; +} .picker__day--infocus:hover { cursor: pointer; color: #000; - font-weight: 500; } + font-weight: 500; +} .picker__day--outfocus { display: none; padding: .75rem 0; - color: #fff; } + color: #fff; +} .picker__day--outfocus:hover { cursor: pointer; color: #dddddd; - font-weight: 500; } + font-weight: 500; +} -.picker__day--highlighted:hover, .picker--focused .picker__day--highlighted { - cursor: pointer; } +.picker__day--highlighted:hover, +.picker--focused .picker__day--highlighted { + cursor: pointer; +} -.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected { +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { border-radius: 50%; - -webkit-transform: scale(.75); - -moz-transform: scale(.75); - -ms-transform: scale(.75); - -o-transform: scale(.75); - transform: scale(.75); + -webkit-transform: scale(0.75); + transform: scale(0.75); background: #0089ec; - color: #ffffff; } + color: #ffffff; +} -.picker__day--disabled, .picker__day--disabled:hover, .picker--focused .picker__day--disabled { +.picker__day--disabled, +.picker__day--disabled:hover, +.picker--focused .picker__day--disabled { background: #f5f5f5; border-color: #f5f5f5; color: #dddddd; - cursor: default; } + cursor: default; +} -.picker__day--highlighted.picker__day--disabled, .picker__day--highlighted.picker__day--disabled:hover { - background: #bbbbbb; } +.picker__day--highlighted.picker__day--disabled, +.picker__day--highlighted.picker__day--disabled:hover { + background: #bbbbbb; +} -/** - * The footer containing the "today", "clear", and "close" buttons. +/** + * The footer containing the "today", "clear", and "close" buttons. */ .picker__footer { - text-align: center; - display: flex; - align-items: center; - justify-content: space-between; } + text-align: right; +} -.picker__button--today, .picker__button--clear, .picker__button--close { +.picker__button--today, +.picker__button--clear, +.picker__button--close { border: 1px solid #ffffff; background: #ffffff; font-size: .8em; @@ -7868,38 +8868,52 @@ select { font-weight: bold; width: 33%; display: inline-block; - vertical-align: bottom; } + vertical-align: bottom; +} -.picker__button--today:hover, .picker__button--clear:hover, .picker__button--close:hover { +.picker__button--today:hover, +.picker__button--clear:hover, +.picker__button--close:hover { cursor: pointer; color: #000000; background: #b1dcfb; - border-bottom-color: #b1dcfb; } + border-bottom-color: #b1dcfb; +} -.picker__button--today:focus, .picker__button--clear:focus, .picker__button--close:focus { +.picker__button--today:focus, +.picker__button--clear:focus, +.picker__button--close:focus { background: #b1dcfb; border-color: rgba(0, 0, 0, 0.05); - outline: none; } + outline: none; +} -.picker__button--today:before, .picker__button--clear:before, .picker__button--close:before { +.picker__button--today:before, +.picker__button--clear:before, +.picker__button--close:before { position: relative; display: inline-block; - height: 0; } + height: 0; +} -.picker__button--today:before, .picker__button--clear:before { +.picker__button--today:before, +.picker__button--clear:before { content: " "; - margin-right: .45em; } + margin-right: .45em; +} .picker__button--today:before { top: -0.05em; width: 0; border-top: 0.66em solid #0059bc; - border-left: .66em solid transparent; } + border-left: .66em solid transparent; +} .picker__button--clear:before { top: -0.25em; width: .66em; - border-top: 3px solid #ee2200; } + border-top: 3px solid #ee2200; +} .picker__button--close:before { content: "\D7"; @@ -7907,106 +8921,161 @@ select { vertical-align: top; font-size: 1.1em; margin-right: .35em; - color: #777777; } + color: #777777; +} -.picker__button--today[disabled], .picker__button--today[disabled]:hover { +.picker__button--today[disabled], +.picker__button--today[disabled]:hover { background: #f5f5f5; border-color: #f5f5f5; color: #dddddd; - cursor: default; } + cursor: default; +} .picker__button--today[disabled]:before { - border-top-color: #aaaaaa; } + border-top-color: #aaaaaa; +} -/* ========================================================================== - CUSTOM MATERIALIZE STYLES +/* ========================================================================== + CUSTOM MATERIALIZE STYLES ========================================================================== */ -.picker__box { - border-radius: 2px; - overflow: hidden; } - +/*.picker__box { + border-radius: 2px; + overflow: hidden; +}*/ .picker__date-display { - text-align: center; + text-align: left; background-color: #26a69a; color: #fff; - padding-bottom: 15px; - font-weight: 300; } - -.picker__nav--prev:hover, .picker__nav--next:hover { + padding: 18px; + font-weight: 300; +} + +@media only screen and (min-width: 601px) { + .picker__date-display { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + } + .picker__weekday-display { + display: block; + } + .picker__container__wrapper { + -webkit-box-flex: 2; + -webkit-flex: 2; + -ms-flex: 2; + flex: 2; + } +} + +.picker__nav--prev:hover, +.picker__nav--next:hover { cursor: pointer; color: #000000; - background: #a1ded8; } + background: #a1ded8; +} .picker__weekday-display { - background-color: #1f897f; - padding: 10px; - font-weight: 200; - letter-spacing: .5; - font-size: 1rem; - margin-bottom: 15px; } + font-weight: 500; + font-size: 2.8rem; + margin-right: 5px; + margin-top: 4px; +} .picker__month-display { - text-transform: uppercase; - font-size: 2rem; } + font-size: 2.8rem; + font-weight: 500; +} .picker__day-display { - font-size: 4.5rem; - font-weight: 400; } + font-size: 2.8rem; + font-weight: 500; + margin-right: 5px; +} .picker__year-display { - font-size: 1.8rem; - color: rgba(255, 255, 255, 0.4); } - -.picker__box { - padding: 0; } + font-size: 1.5rem; + font-weight: 500; + color: rgba(255, 255, 255, 0.7); +} +/*.picker__box { + padding: 0; +}*/ .picker__calendar-container { - padding: 0 1rem; } - .picker__calendar-container thead { - border: none; } + padding: 0 1rem; +} + +.picker__calendar-container thead { + border: none; +} .picker__table { margin-top: 0; - margin-bottom: .5em; } + margin-bottom: .5em; +} .picker__day--infocus { - color: #595959; - letter-spacing: -.3; - padding: .75rem 0; + color: rgba(0, 0, 0, 0.87); + letter-spacing: -.3px; + padding: 0.75rem 0; font-weight: 400; - border: 1px solid transparent; } + border: 1px solid transparent; +} + +@media only screen and (min-width: 601px) { + .picker__day--infocus { + padding: 1.1rem 0; + } +} .picker__day.picker__day--today { - color: #26a69a; } + color: #26a69a; +} .picker__day.picker__day--today.picker__day--selected { - color: #fff; } + color: #fff; +} .picker__weekday { - font-size: .9rem; } + font-size: .9rem; +} -.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected { +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { border-radius: 50%; - -webkit-transform: scale(.9); - -moz-transform: scale(.9); - -ms-transform: scale(.9); - -o-transform: scale(.9); - transform: scale(.9); + -webkit-transform: scale(0.9); + transform: scale(0.9); background-color: #26a69a; - color: #ffffff; } - .picker__day--selected.picker__day--outfocus, .picker__day--selected:hover.picker__day--outfocus, .picker--focused .picker__day--selected.picker__day--outfocus { - background-color: #a1ded8; } + color: #ffffff; +} + +.picker__day--selected.picker__day--outfocus, +.picker__day--selected:hover.picker__day--outfocus, +.picker--focused .picker__day--selected.picker__day--outfocus { + background-color: #a1ded8; +} .picker__footer { text-align: right; - padding: 5px 10px; } + padding: 5px 10px; +} -.picker__close, .picker__today { +.picker__close, .picker__today, .picker__clear { font-size: 1.1rem; padding: 0 1rem; - color: #26a69a; } + color: #26a69a; +} + +.picker__clear { + color: #f44336; + float: left; +} -.picker__nav--prev:before, .picker__nav--next:before { +.picker__nav--prev:before, +.picker__nav--next:before { content: " "; border-top: .5em solid transparent; border-bottom: .5em solid transparent; @@ -8014,76 +9083,93 @@ select { width: 0; height: 0; display: block; - margin: 0 auto; } + margin: 0 auto; +} .picker__nav--next:before { border-right: 0; - border-left: 0.75em solid #676767; } + border-left: 0.75em solid #676767; +} button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus { - background-color: #a1ded8; } + background-color: #a1ded8; +} -/* ========================================================================== - $BASE-TIME-PICKER +/* ========================================================================== + $BASE-TIME-PICKER ========================================================================== */ -/** - * The list of times. +/** + * The list of times. */ .picker__list { list-style: none; padding: 0.75em 0 4.2em; - margin: 0; } + margin: 0; +} -/** - * The times on the clock. +/** + * The times on the clock. */ .picker__list-item { - border-bottom: 1px solid #dddddd; - border-top: 1px solid #dddddd; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; margin-bottom: -1px; position: relative; - background: #ffffff; - padding: .75em 1.25em; } + background: #fff; + padding: .75em 1.25em; +} @media (min-height: 46.75em) { .picker__list-item { - padding: .5em 1em; } } + padding: .5em 1em; + } +} /* Hovered time */ .picker__list-item:hover { cursor: pointer; - color: #000000; + color: #000; background: #b1dcfb; border-color: #0089ec; - z-index: 10; } + z-index: 10; +} /* Highlighted and hovered/focused time */ .picker__list-item--highlighted { border-color: #0089ec; - z-index: 10; } + z-index: 10; +} -.picker__list-item--highlighted:hover, .picker--focused .picker__list-item--highlighted { +.picker__list-item--highlighted:hover, +.picker--focused .picker__list-item--highlighted { cursor: pointer; - color: #000000; - background: #b1dcfb; } + color: #000; + background: #b1dcfb; +} /* Selected and hovered/focused time */ -.picker__list-item--selected, .picker__list-item--selected:hover, .picker--focused .picker__list-item--selected { +.picker__list-item--selected, +.picker__list-item--selected:hover, +.picker--focused .picker__list-item--selected { background: #0089ec; - color: #ffffff; - z-index: 10; } + color: #fff; + z-index: 10; +} /* Disabled time */ -.picker__list-item--disabled, .picker__list-item--disabled:hover, .picker--focused .picker__list-item--disabled { +.picker__list-item--disabled, +.picker__list-item--disabled:hover, +.picker--focused .picker__list-item--disabled { background: #f5f5f5; border-color: #f5f5f5; - color: #dddddd; + color: #ddd; cursor: default; - border-color: #dddddd; - z-index: auto; } + border-color: #ddd; + z-index: auto; +} -/** - * The clear button +/** + * The clear button */ .picker--time .picker__button--clear { display: block; @@ -8096,44 +9182,208 @@ button.picker__today:focus, button.picker__clear:focus, button.picker__close:foc font-size: .67em; text-align: center; text-transform: uppercase; - color: #666; } + color: rgba(0, 0, 0, 0.87); +} -.picker--time .picker__button--clear:hover, .picker--time .picker__button--clear:focus { - color: #000000; +.picker--time .picker__button--clear:hover, +.picker--time .picker__button--clear:focus { + color: #000; background: #b1dcfb; background: #ee2200; border-color: #ee2200; cursor: pointer; - color: #ffffff; - outline: none; } + color: #fff; + outline: none; +} .picker--time .picker__button--clear:before { top: -0.25em; - color: #666; + color: rgba(0, 0, 0, 0.87); font-size: 1.25em; - font-weight: bold; } + font-weight: bold; +} -.picker--time .picker__button--clear:hover:before, .picker--time .picker__button--clear:focus:before { - color: #ffffff; } +.picker--time .picker__button--clear:hover:before, +.picker--time .picker__button--clear:focus:before { + color: #fff; +} -/* ========================================================================== - $DEFAULT-TIME-PICKER +/* ========================================================================== + $DEFAULT-TIME-PICKER ========================================================================== */ -/** - * The frame the bounds the time picker. +/** + * The frame the bounds the time picker. */ .picker--time .picker__frame { min-width: 256px; - max-width: 320px; } + max-width: 320px; +} -/** - * The picker box. +/** + * The picker box. */ .picker--time .picker__box { font-size: 1em; background: #f2f2f2; - padding: 0; } + padding: 0; +} @media (min-height: 40.125em) { .picker--time .picker__box { - margin-bottom: 5em; } } + margin-bottom: 5em; + } +} + +/* ========================================================================== + $DEFAULT-TIME-PICKER + ========================================================================== */ +.clockpicker-display { + font-size: 4rem; + font-weight: bold; + text-align: center; + color: rgba(255, 255, 255, 0.6); + font-weight: 400; + clear: both; + position: relative; +} + +.clockpicker-span-am-pm { + font-size: 1.3rem; + position: absolute; + right: 1rem; + bottom: 0.3rem; + line-height: 2rem; + font-weight: 500; +} + +@media only screen and (min-width: 601px) { + .clockpicker-display { + top: 32%; + } + .clockpicker-span-am-pm { + position: relative; + right: auto; + bottom: auto; + text-align: center; + margin-top: 1.2rem; + } +} + +.text-primary { + color: white; +} + +.clockpicker-span-hours { + margin-right: 3px; +} + +.clockpicker-span-minutes { + margin-left: 3px; +} + +.clockpicker-span-hours, +.clockpicker-span-minutes, +.clockpicker-span-am-pm div { + cursor: pointer; +} + +.clockpicker-moving { + cursor: move; +} + +.clockpicker-plate { + background-color: #eee; + border-radius: 50%; + width: 270px; + height: 270px; + overflow: visible; + position: relative; + margin: auto; + margin-top: 25px; + margin-bottom: 5px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.clockpicker-canvas, +.clockpicker-dial { + width: 270px; + height: 270px; + position: absolute; + left: -1px; + top: -1px; +} + +.clockpicker-minutes { + visibility: hidden; +} + +.clockpicker-tick { + border-radius: 50%; + color: rgba(0, 0, 0, 0.87); + line-height: 40px; + text-align: center; + width: 40px; + height: 40px; + position: absolute; + cursor: pointer; +} + +.clockpicker-tick.active, +.clockpicker-tick:hover { + background-color: rgba(38, 166, 154, 0.25); +} + +.clockpicker-dial { + -webkit-transition: -webkit-transform 350ms, opacity 350ms; + -webkit-transition: opacity 350ms, -webkit-transform 350ms; + transition: opacity 350ms, -webkit-transform 350ms; + transition: transform 350ms, opacity 350ms; + transition: transform 350ms, opacity 350ms, -webkit-transform 350ms; +} + +.clockpicker-dial-out { + opacity: 0; +} + +.clockpicker-hours.clockpicker-dial-out { + -webkit-transform: scale(1.2, 1.2); + transform: scale(1.2, 1.2); +} + +.clockpicker-minutes.clockpicker-dial-out { + -webkit-transform: scale(0.8, 0.8); + transform: scale(0.8, 0.8); +} + +.clockpicker-canvas { + -webkit-transition: opacity 175ms; + transition: opacity 175ms; +} + +.clockpicker-canvas-out { + opacity: 0.25; +} + +.clockpicker-canvas-bearing { + stroke: none; + fill: #26a69a; +} + +.clockpicker-canvas-bg { + stroke: none; + fill: #26a69a; +} + +.clockpicker-canvas-bg-trans { + fill: #26a69a; +} + +.clockpicker-canvas line { + stroke: #26a69a; + stroke-width: 4; + stroke-linecap: round; + /*shape-rendering: crispEdges;*/ +} diff --git a/dist/css/materialize.min.css b/dist/css/materialize.min.css index fccfb80bf5..de1a4e3143 100644 --- a/dist/css/materialize.min.css +++ b/dist/css/materialize.min.css @@ -1,16 +1,16 @@ -/*! - * Materialize v0.97.0 (http://materializecss.com) - * Copyright 2014-2015 Materialize - * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) - */ -.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#aa00ff !important}.purple-text.text-accent-4{color:#aa00ff !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ffff00 !important}.yellow-text.text-accent-2{color:#ffff00 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eeeeee !important}.grey-text.text-lighten-3{color:#eeeeee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.shades.black{background-color:#000000 !important}.shades-text.text-black{color:#000000 !important}.shades.white{background-color:#FFFFFF !important}.shades-text.text-white{color:#FFFFFF !important}.shades.transparent{background-color:transparent !important}.shades-text.text-transparent{color:transparent !important}.black{background-color:#000000 !important}.black-text{color:#000000 !important}.white{background-color:#FFFFFF !important}.white-text{color:#FFFFFF !important}.transparent{background-color:transparent !important}.transparent-text{color:transparent !important}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}html input[type="button"],button,input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}ul{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.valign-wrapper .valign{display:block}ul{padding:0}ul li{list-style-type:none}.clearfix{clear:both}.z-depth-0{box-shadow:none !important}.z-depth-1,nav,.card-panel,.card,.toast,.btn,.btn-large,.btn-floating,.dropdown-content,.collapsible,.side-nav{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.z-depth-1-half,.btn:hover,.btn-large:hover,.btn-floating:hover{box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15)}.z-depth-2{box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.z-depth-3{box-shadow:0 12px 15px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19)}.z-depth-4,.modal{box-shadow:0 16px 28px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21)}.z-depth-5{box-shadow:0 27px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22)}.hoverable:hover{transition:box-shadow .25s;box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #ee6e73}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{float:left;font-size:1.2rem;padding:0 10px;line-height:30px;border-radius:2px;text-align:center}.pagination li a{color:#444}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width : 992px){.pagination{width:100%}.pagination li.prev,.pagination li.next{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax img{display:none;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;transform-origin:0 50%}@media only screen and (max-width : 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important;}}@media only screen and (max-width : 992px){.hide-on-med-and-down{display:none !important;}}@media only screen and (min-width : 601px){.hide-on-med-and-up{display:none !important;}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important;}}@media only screen and (min-width : 993px){.hide-on-large-only{display:none !important;}}@media only screen and (min-width : 993px){.show-on-large{display:initial !important;}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:initial !important;}}@media only screen and (max-width : 600px){.show-on-small{display:initial !important;}}@media only screen and (min-width : 601px){.show-on-medium-and-up{display:initial !important;}}@media only screen and (max-width : 992px){.show-on-medium-and-down{display:initial !important;}}@media only screen and (max-width : 600px){.center-on-small-only{text-align:center;}}footer.page-footer{margin-top:20px;padding-top:20px;background-color:#ee6e73}footer.page-footer .footer-copyright{overflow:hidden;height:50px;line-height:50px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table}table.bordered>thead>tr,table.bordered>tbody>tr{border-bottom:1px solid #d0d0d0}table.striped>tbody>tr:nth-child(odd){background-color:#f2f2f2}table.striped>tbody>tr>td{border-radius:0px}table.hoverable>tbody>tr{-webkit-transition:background-color .25s ease;-moz-transition:background-color .25s ease;-o-transition:background-color .25s ease;-ms-transition:background-color .25s ease;transition:background-color .25s ease}table.hoverable>tbody>tr:hover{background-color:#f2f2f2}table.centered thead tr th,table.centered tbody tr td{text-align:center}thead{border-bottom:1px solid #d0d0d0}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width : 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid #d0d0d0}table.responsive-table.bordered th{border-bottom:0;border-left:0}table.responsive-table.bordered td{border-left:0;border-right:0;border-bottom:0}table.responsive-table.bordered tr{border:0}table.responsive-table.bordered tbody tr{border-right:1px solid #d0d0d0}}.collection{margin:0.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar .circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection a.collection-item{display:block;-webkit-transition:0.25s;-moz-transition:0.25s;-o-transition:0.25s;-ms-transition:0.25s;transition:0.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.collection.with-header .collection-item.avatar{padding-left:72px}.secondary-content{float:right;color:#26a69a}span.badge{min-width:3rem;padding:0 6px;text-align:center;font-size:1rem;line-height:inherit;color:#757575;position:absolute;right:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}span.badge.new{font-weight:300;font-size:0.8rem;color:#fff;background-color:#26a69a;border-radius:2px}span.badge.new:after{content:" new"}.video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.video-container.no-controls{padding-top:0}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:0.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;background-color:inherit;top:0;left:0;bottom:0;background-color:#26a69a;-webkit-transition:width .3s linear;-moz-transition:width .3s linear;-o-transition:width .3s linear;-ms-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-moz-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-ms-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-o-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-moz-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-ms-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-o-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;-moz-animation-delay:1.15s;-ms-animation-delay:1.15s;-o-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-moz-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@-moz-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select,input[type=range],input[type=range]+.thumb{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}@font-face{font-family:"Material-Design-Icons";src:url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"),url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"),url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"),url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"),url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg");font-weight:normal;font-style:normal;}[class^="mdi-"],[class*="mdi-"]{speak:none;display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;font-variant:normal;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}[class^="mdi-"]:before,[class*="mdi-"]:before{display:inline-block;speak:none;text-decoration:inherit}[class^="mdi-"].pull-left,[class*="mdi-"].pull-left{margin-right:.3em}[class^="mdi-"].pull-right,[class*="mdi-"].pull-right{margin-left:.3em}[class^="mdi-"].mdi-lg:before,[class^="mdi-"].mdi-lg:after,[class*="mdi-"].mdi-lg:before,[class*="mdi-"].mdi-lg:after{font-size:1.33333333em;line-height:0.75em;vertical-align:-15%}[class^="mdi-"].mdi-2x:before,[class^="mdi-"].mdi-2x:after,[class*="mdi-"].mdi-2x:before,[class*="mdi-"].mdi-2x:after{font-size:2em}[class^="mdi-"].mdi-3x:before,[class^="mdi-"].mdi-3x:after,[class*="mdi-"].mdi-3x:before,[class*="mdi-"].mdi-3x:after{font-size:3em}[class^="mdi-"].mdi-4x:before,[class^="mdi-"].mdi-4x:after,[class*="mdi-"].mdi-4x:before,[class*="mdi-"].mdi-4x:after{font-size:4em}[class^="mdi-"].mdi-5x:before,[class^="mdi-"].mdi-5x:after,[class*="mdi-"].mdi-5x:before,[class*="mdi-"].mdi-5x:after{font-size:5em}[class^="mdi-device-signal-cellular-"]:after,[class^="mdi-device-battery-"]:after,[class^="mdi-device-battery-charging-"]:after,[class^="mdi-device-signal-cellular-connected-no-internet-"]:after,[class^="mdi-device-signal-wifi-"]:after,[class^="mdi-device-signal-wifi-statusbar-not-connected"]:after,.mdi-device-network-wifi:after{opacity:.3;position:absolute;left:0;top:0;z-index:1;display:inline-block;speak:none;text-decoration:inherit}[class^="mdi-device-signal-cellular-"]:after{content:"\e758"}[class^="mdi-device-battery-"]:after{content:"\e735"}[class^="mdi-device-battery-charging-"]:after{content:"\e733"}[class^="mdi-device-signal-cellular-connected-no-internet-"]:after{content:"\e75d"}[class^="mdi-device-signal-wifi-"]:after,.mdi-device-network-wifi:after{content:"\e765"}[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after{content:"\e8f7"}.mdi-device-signal-cellular-off:after,.mdi-device-signal-cellular-null:after,.mdi-device-signal-cellular-no-sim:after,.mdi-device-signal-wifi-off:after,.mdi-device-signal-wifi-4-bar:after,.mdi-device-signal-cellular-4-bar:after,.mdi-device-battery-alert:after,.mdi-device-signal-cellular-connected-no-internet-4-bar:after,.mdi-device-battery-std:after,.mdi-device-battery-full .mdi-device-battery-unknown:after{content:""}.mdi-fw{width:1.28571429em;text-align:center}.mdi-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.mdi-ul>li{position:relative}.mdi-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:0.14285714em;text-align:center}.mdi-li.mdi-lg{left:-1.85714286em}.mdi-border{padding:.2em .25em .15em;border:solid 0.08em #eeeeee;border-radius:.1em}.mdi-spin{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%}.mdi-pulse{-webkit-animation:mdi-spin 1s steps(8) infinite;animation:mdi-spin 1s steps(8) infinite;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.mdi-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.mdi-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .mdi-rotate-90,:root .mdi-rotate-180,:root .mdi-rotate-270,:root .mdi-flip-horizontal,:root .mdi-flip-vertical{filter:none}.mdi-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.mdi-stack-1x,.mdi-stack-2x{position:absolute;left:0;width:100%;text-align:center}.mdi-stack-1x{line-height:inherit}.mdi-stack-2x{font-size:2em}.mdi-inverse{color:#ffffff}.mdi-action-3d-rotation:before{content:"\e600"}.mdi-action-accessibility:before{content:"\e601"}.mdi-action-account-balance-wallet:before{content:"\e602"}.mdi-action-account-balance:before{content:"\e603"}.mdi-action-account-box:before{content:"\e604"}.mdi-action-account-child:before{content:"\e605"}.mdi-action-account-circle:before{content:"\e606"}.mdi-action-add-shopping-cart:before{content:"\e607"}.mdi-action-alarm-add:before{content:"\e608"}.mdi-action-alarm-off:before{content:"\e609"}.mdi-action-alarm-on:before{content:"\e60a"}.mdi-action-alarm:before{content:"\e60b"}.mdi-action-android:before{content:"\e60c"}.mdi-action-announcement:before{content:"\e60d"}.mdi-action-aspect-ratio:before{content:"\e60e"}.mdi-action-assessment:before{content:"\e60f"}.mdi-action-assignment-ind:before{content:"\e610"}.mdi-action-assignment-late:before{content:"\e611"}.mdi-action-assignment-return:before{content:"\e612"}.mdi-action-assignment-returned:before{content:"\e613"}.mdi-action-assignment-turned-in:before{content:"\e614"}.mdi-action-assignment:before{content:"\e615"}.mdi-action-autorenew:before{content:"\e616"}.mdi-action-backup:before{content:"\e617"}.mdi-action-book:before{content:"\e618"}.mdi-action-bookmark-outline:before{content:"\e619"}.mdi-action-bookmark:before{content:"\e61a"}.mdi-action-bug-report:before{content:"\e61b"}.mdi-action-cached:before{content:"\e61c"}.mdi-action-check-circle:before{content:"\e61d"}.mdi-action-class:before{content:"\e61e"}.mdi-action-credit-card:before{content:"\e61f"}.mdi-action-dashboard:before{content:"\e620"}.mdi-action-delete:before{content:"\e621"}.mdi-action-description:before{content:"\e622"}.mdi-action-dns:before{content:"\e623"}.mdi-action-done-all:before{content:"\e624"}.mdi-action-done:before{content:"\e625"}.mdi-action-event:before{content:"\e626"}.mdi-action-exit-to-app:before{content:"\e627"}.mdi-action-explore:before{content:"\e628"}.mdi-action-extension:before{content:"\e629"}.mdi-action-face-unlock:before{content:"\e62a"}.mdi-action-favorite-outline:before{content:"\e62b"}.mdi-action-favorite:before{content:"\e62c"}.mdi-action-find-in-page:before{content:"\e62d"}.mdi-action-find-replace:before{content:"\e62e"}.mdi-action-flip-to-back:before{content:"\e62f"}.mdi-action-flip-to-front:before{content:"\e630"}.mdi-action-get-app:before{content:"\e631"}.mdi-action-grade:before{content:"\e632"}.mdi-action-group-work:before{content:"\e633"}.mdi-action-help:before{content:"\e634"}.mdi-action-highlight-remove:before{content:"\e635"}.mdi-action-history:before{content:"\e636"}.mdi-action-home:before{content:"\e637"}.mdi-action-https:before{content:"\e638"}.mdi-action-info-outline:before{content:"\e639"}.mdi-action-info:before{content:"\e63a"}.mdi-action-input:before{content:"\e63b"}.mdi-action-invert-colors:before{content:"\e63c"}.mdi-action-label-outline:before{content:"\e63d"}.mdi-action-label:before{content:"\e63e"}.mdi-action-language:before{content:"\e63f"}.mdi-action-launch:before{content:"\e640"}.mdi-action-list:before{content:"\e641"}.mdi-action-lock-open:before{content:"\e642"}.mdi-action-lock-outline:before{content:"\e643"}.mdi-action-lock:before{content:"\e644"}.mdi-action-loyalty:before{content:"\e645"}.mdi-action-markunread-mailbox:before{content:"\e646"}.mdi-action-note-add:before{content:"\e647"}.mdi-action-open-in-browser:before{content:"\e648"}.mdi-action-open-in-new:before{content:"\e649"}.mdi-action-open-with:before{content:"\e64a"}.mdi-action-pageview:before{content:"\e64b"}.mdi-action-payment:before{content:"\e64c"}.mdi-action-perm-camera-mic:before{content:"\e64d"}.mdi-action-perm-contact-cal:before{content:"\e64e"}.mdi-action-perm-data-setting:before{content:"\e64f"}.mdi-action-perm-device-info:before{content:"\e650"}.mdi-action-perm-identity:before{content:"\e651"}.mdi-action-perm-media:before{content:"\e652"}.mdi-action-perm-phone-msg:before{content:"\e653"}.mdi-action-perm-scan-wifi:before{content:"\e654"}.mdi-action-picture-in-picture:before{content:"\e655"}.mdi-action-polymer:before{content:"\e656"}.mdi-action-print:before{content:"\e657"}.mdi-action-query-builder:before{content:"\e658"}.mdi-action-question-answer:before{content:"\e659"}.mdi-action-receipt:before{content:"\e65a"}.mdi-action-redeem:before{content:"\e65b"}.mdi-action-reorder:before{content:"\e65c"}.mdi-action-report-problem:before{content:"\e65d"}.mdi-action-restore:before{content:"\e65e"}.mdi-action-room:before{content:"\e65f"}.mdi-action-schedule:before{content:"\e660"}.mdi-action-search:before{content:"\e661"}.mdi-action-settings-applications:before{content:"\e662"}.mdi-action-settings-backup-restore:before{content:"\e663"}.mdi-action-settings-bluetooth:before{content:"\e664"}.mdi-action-settings-cell:before{content:"\e665"}.mdi-action-settings-display:before{content:"\e666"}.mdi-action-settings-ethernet:before{content:"\e667"}.mdi-action-settings-input-antenna:before{content:"\e668"}.mdi-action-settings-input-component:before{content:"\e669"}.mdi-action-settings-input-composite:before{content:"\e66a"}.mdi-action-settings-input-hdmi:before{content:"\e66b"}.mdi-action-settings-input-svideo:before{content:"\e66c"}.mdi-action-settings-overscan:before{content:"\e66d"}.mdi-action-settings-phone:before{content:"\e66e"}.mdi-action-settings-power:before{content:"\e66f"}.mdi-action-settings-remote:before{content:"\e670"}.mdi-action-settings-voice:before{content:"\e671"}.mdi-action-settings:before{content:"\e672"}.mdi-action-shop-two:before{content:"\e673"}.mdi-action-shop:before{content:"\e674"}.mdi-action-shopping-basket:before{content:"\e675"}.mdi-action-shopping-cart:before{content:"\e676"}.mdi-action-speaker-notes:before{content:"\e677"}.mdi-action-spellcheck:before{content:"\e678"}.mdi-action-star-rate:before{content:"\e679"}.mdi-action-stars:before{content:"\e67a"}.mdi-action-store:before{content:"\e67b"}.mdi-action-subject:before{content:"\e67c"}.mdi-action-supervisor-account:before{content:"\e67d"}.mdi-action-swap-horiz:before{content:"\e67e"}.mdi-action-swap-vert-circle:before{content:"\e67f"}.mdi-action-swap-vert:before{content:"\e680"}.mdi-action-system-update-tv:before{content:"\e681"}.mdi-action-tab-unselected:before{content:"\e682"}.mdi-action-tab:before{content:"\e683"}.mdi-action-theaters:before{content:"\e684"}.mdi-action-thumb-down:before{content:"\e685"}.mdi-action-thumb-up:before{content:"\e686"}.mdi-action-thumbs-up-down:before{content:"\e687"}.mdi-action-toc:before{content:"\e688"}.mdi-action-today:before{content:"\e689"}.mdi-action-track-changes:before{content:"\e68a"}.mdi-action-translate:before{content:"\e68b"}.mdi-action-trending-down:before{content:"\e68c"}.mdi-action-trending-neutral:before{content:"\e68d"}.mdi-action-trending-up:before{content:"\e68e"}.mdi-action-turned-in-not:before{content:"\e68f"}.mdi-action-turned-in:before{content:"\e690"}.mdi-action-verified-user:before{content:"\e691"}.mdi-action-view-agenda:before{content:"\e692"}.mdi-action-view-array:before{content:"\e693"}.mdi-action-view-carousel:before{content:"\e694"}.mdi-action-view-column:before{content:"\e695"}.mdi-action-view-day:before{content:"\e696"}.mdi-action-view-headline:before{content:"\e697"}.mdi-action-view-list:before{content:"\e698"}.mdi-action-view-module:before{content:"\e699"}.mdi-action-view-quilt:before{content:"\e69a"}.mdi-action-view-stream:before{content:"\e69b"}.mdi-action-view-week:before{content:"\e69c"}.mdi-action-visibility-off:before{content:"\e69d"}.mdi-action-visibility:before{content:"\e69e"}.mdi-action-wallet-giftcard:before{content:"\e69f"}.mdi-action-wallet-membership:before{content:"\e6a0"}.mdi-action-wallet-travel:before{content:"\e6a1"}.mdi-action-work:before{content:"\e6a2"}.mdi-alert-error:before{content:"\e6a3"}.mdi-alert-warning:before{content:"\e6a4"}.mdi-av-album:before{content:"\e6a5"}.mdi-av-closed-caption:before{content:"\e6a6"}.mdi-av-equalizer:before{content:"\e6a7"}.mdi-av-explicit:before{content:"\e6a8"}.mdi-av-fast-forward:before{content:"\e6a9"}.mdi-av-fast-rewind:before{content:"\e6aa"}.mdi-av-games:before{content:"\e6ab"}.mdi-av-hearing:before{content:"\e6ac"}.mdi-av-high-quality:before{content:"\e6ad"}.mdi-av-loop:before{content:"\e6ae"}.mdi-av-mic-none:before{content:"\e6af"}.mdi-av-mic-off:before{content:"\e6b0"}.mdi-av-mic:before{content:"\e6b1"}.mdi-av-movie:before{content:"\e6b2"}.mdi-av-my-library-add:before{content:"\e6b3"}.mdi-av-my-library-books:before{content:"\e6b4"}.mdi-av-my-library-music:before{content:"\e6b5"}.mdi-av-new-releases:before{content:"\e6b6"}.mdi-av-not-interested:before{content:"\e6b7"}.mdi-av-pause-circle-fill:before{content:"\e6b8"}.mdi-av-pause-circle-outline:before{content:"\e6b9"}.mdi-av-pause:before{content:"\e6ba"}.mdi-av-play-arrow:before{content:"\e6bb"}.mdi-av-play-circle-fill:before{content:"\e6bc"}.mdi-av-play-circle-outline:before{content:"\e6bd"}.mdi-av-play-shopping-bag:before{content:"\e6be"}.mdi-av-playlist-add:before{content:"\e6bf"}.mdi-av-queue-music:before{content:"\e6c0"}.mdi-av-queue:before{content:"\e6c1"}.mdi-av-radio:before{content:"\e6c2"}.mdi-av-recent-actors:before{content:"\e6c3"}.mdi-av-repeat-one:before{content:"\e6c4"}.mdi-av-repeat:before{content:"\e6c5"}.mdi-av-replay:before{content:"\e6c6"}.mdi-av-shuffle:before{content:"\e6c7"}.mdi-av-skip-next:before{content:"\e6c8"}.mdi-av-skip-previous:before{content:"\e6c9"}.mdi-av-snooze:before{content:"\e6ca"}.mdi-av-stop:before{content:"\e6cb"}.mdi-av-subtitles:before{content:"\e6cc"}.mdi-av-surround-sound:before{content:"\e6cd"}.mdi-av-timer:before{content:"\e6ce"}.mdi-av-video-collection:before{content:"\e6cf"}.mdi-av-videocam-off:before{content:"\e6d0"}.mdi-av-videocam:before{content:"\e6d1"}.mdi-av-volume-down:before{content:"\e6d2"}.mdi-av-volume-mute:before{content:"\e6d3"}.mdi-av-volume-off:before{content:"\e6d4"}.mdi-av-volume-up:before{content:"\e6d5"}.mdi-av-web:before{content:"\e6d6"}.mdi-communication-business:before{content:"\e6d7"}.mdi-communication-call-end:before{content:"\e6d8"}.mdi-communication-call-made:before{content:"\e6d9"}.mdi-communication-call-merge:before{content:"\e6da"}.mdi-communication-call-missed:before{content:"\e6db"}.mdi-communication-call-received:before{content:"\e6dc"}.mdi-communication-call-split:before{content:"\e6dd"}.mdi-communication-call:before{content:"\e6de"}.mdi-communication-chat:before{content:"\e6df"}.mdi-communication-clear-all:before{content:"\e6e0"}.mdi-communication-comment:before{content:"\e6e1"}.mdi-communication-contacts:before{content:"\e6e2"}.mdi-communication-dialer-sip:before{content:"\e6e3"}.mdi-communication-dialpad:before{content:"\e6e4"}.mdi-communication-dnd-on:before{content:"\e6e5"}.mdi-communication-email:before{content:"\e6e6"}.mdi-communication-forum:before{content:"\e6e7"}.mdi-communication-import-export:before{content:"\e6e8"}.mdi-communication-invert-colors-off:before{content:"\e6e9"}.mdi-communication-invert-colors-on:before{content:"\e6ea"}.mdi-communication-live-help:before{content:"\e6eb"}.mdi-communication-location-off:before{content:"\e6ec"}.mdi-communication-location-on:before{content:"\e6ed"}.mdi-communication-message:before{content:"\e6ee"}.mdi-communication-messenger:before{content:"\e6ef"}.mdi-communication-no-sim:before{content:"\e6f0"}.mdi-communication-phone:before{content:"\e6f1"}.mdi-communication-portable-wifi-off:before{content:"\e6f2"}.mdi-communication-quick-contacts-dialer:before{content:"\e6f3"}.mdi-communication-quick-contacts-mail:before{content:"\e6f4"}.mdi-communication-ring-volume:before{content:"\e6f5"}.mdi-communication-stay-current-landscape:before{content:"\e6f6"}.mdi-communication-stay-current-portrait:before{content:"\e6f7"}.mdi-communication-stay-primary-landscape:before{content:"\e6f8"}.mdi-communication-stay-primary-portrait:before{content:"\e6f9"}.mdi-communication-swap-calls:before{content:"\e6fa"}.mdi-communication-textsms:before{content:"\e6fb"}.mdi-communication-voicemail:before{content:"\e6fc"}.mdi-communication-vpn-key:before{content:"\e6fd"}.mdi-content-add-box:before{content:"\e6fe"}.mdi-content-add-circle-outline:before{content:"\e6ff"}.mdi-content-add-circle:before{content:"\e700"}.mdi-content-add:before{content:"\e701"}.mdi-content-archive:before{content:"\e702"}.mdi-content-backspace:before{content:"\e703"}.mdi-content-block:before{content:"\e704"}.mdi-content-clear:before{content:"\e705"}.mdi-content-content-copy:before{content:"\e706"}.mdi-content-content-cut:before{content:"\e707"}.mdi-content-content-paste:before{content:"\e708"}.mdi-content-create:before{content:"\e709"}.mdi-content-drafts:before{content:"\e70a"}.mdi-content-filter-list:before{content:"\e70b"}.mdi-content-flag:before{content:"\e70c"}.mdi-content-forward:before{content:"\e70d"}.mdi-content-gesture:before{content:"\e70e"}.mdi-content-inbox:before{content:"\e70f"}.mdi-content-link:before{content:"\e710"}.mdi-content-mail:before{content:"\e711"}.mdi-content-markunread:before{content:"\e712"}.mdi-content-redo:before{content:"\e713"}.mdi-content-remove-circle-outline:before{content:"\e714"}.mdi-content-remove-circle:before{content:"\e715"}.mdi-content-remove:before{content:"\e716"}.mdi-content-reply-all:before{content:"\e717"}.mdi-content-reply:before{content:"\e718"}.mdi-content-report:before{content:"\e719"}.mdi-content-save:before{content:"\e71a"}.mdi-content-select-all:before{content:"\e71b"}.mdi-content-send:before{content:"\e71c"}.mdi-content-sort:before{content:"\e71d"}.mdi-content-text-format:before{content:"\e71e"}.mdi-content-undo:before{content:"\e71f"}.mdi-editor-attach-file:before{content:"\e776"}.mdi-editor-attach-money:before{content:"\e777"}.mdi-editor-border-all:before{content:"\e778"}.mdi-editor-border-bottom:before{content:"\e779"}.mdi-editor-border-clear:before{content:"\e77a"}.mdi-editor-border-color:before{content:"\e77b"}.mdi-editor-border-horizontal:before{content:"\e77c"}.mdi-editor-border-inner:before{content:"\e77d"}.mdi-editor-border-left:before{content:"\e77e"}.mdi-editor-border-outer:before{content:"\e77f"}.mdi-editor-border-right:before{content:"\e780"}.mdi-editor-border-style:before{content:"\e781"}.mdi-editor-border-top:before{content:"\e782"}.mdi-editor-border-vertical:before{content:"\e783"}.mdi-editor-format-align-center:before{content:"\e784"}.mdi-editor-format-align-justify:before{content:"\e785"}.mdi-editor-format-align-left:before{content:"\e786"}.mdi-editor-format-align-right:before{content:"\e787"}.mdi-editor-format-bold:before{content:"\e788"}.mdi-editor-format-clear:before{content:"\e789"}.mdi-editor-format-color-fill:before{content:"\e78a"}.mdi-editor-format-color-reset:before{content:"\e78b"}.mdi-editor-format-color-text:before{content:"\e78c"}.mdi-editor-format-indent-decrease:before{content:"\e78d"}.mdi-editor-format-indent-increase:before{content:"\e78e"}.mdi-editor-format-italic:before{content:"\e78f"}.mdi-editor-format-line-spacing:before{content:"\e790"}.mdi-editor-format-list-bulleted:before{content:"\e791"}.mdi-editor-format-list-numbered:before{content:"\e792"}.mdi-editor-format-paint:before{content:"\e793"}.mdi-editor-format-quote:before{content:"\e794"}.mdi-editor-format-size:before{content:"\e795"}.mdi-editor-format-strikethrough:before{content:"\e796"}.mdi-editor-format-textdirection-l-to-r:before{content:"\e797"}.mdi-editor-format-textdirection-r-to-l:before{content:"\e798"}.mdi-editor-format-underline:before{content:"\e799"}.mdi-editor-functions:before{content:"\e79a"}.mdi-editor-insert-chart:before{content:"\e79b"}.mdi-editor-insert-comment:before{content:"\e79c"}.mdi-editor-insert-drive-file:before{content:"\e79d"}.mdi-editor-insert-emoticon:before{content:"\e79e"}.mdi-editor-insert-invitation:before{content:"\e79f"}.mdi-editor-insert-link:before{content:"\e7a0"}.mdi-editor-insert-photo:before{content:"\e7a1"}.mdi-editor-merge-type:before{content:"\e7a2"}.mdi-editor-mode-comment:before{content:"\e7a3"}.mdi-editor-mode-edit:before{content:"\e7a4"}.mdi-editor-publish:before{content:"\e7a5"}.mdi-editor-vertical-align-bottom:before{content:"\e7a6"}.mdi-editor-vertical-align-center:before{content:"\e7a7"}.mdi-editor-vertical-align-top:before{content:"\e7a8"}.mdi-editor-wrap-text:before{content:"\e7a9"}.mdi-file-attachment:before{content:"\e7aa"}.mdi-file-cloud-circle:before{content:"\e7ab"}.mdi-file-cloud-done:before{content:"\e7ac"}.mdi-file-cloud-download:before{content:"\e7ad"}.mdi-file-cloud-off:before{content:"\e7ae"}.mdi-file-cloud-queue:before{content:"\e7af"}.mdi-file-cloud-upload:before{content:"\e7b0"}.mdi-file-cloud:before{content:"\e7b1"}.mdi-file-file-download:before{content:"\e7b2"}.mdi-file-file-upload:before{content:"\e7b3"}.mdi-file-folder-open:before{content:"\e7b4"}.mdi-file-folder-shared:before{content:"\e7b5"}.mdi-file-folder:before{content:"\e7b6"}.mdi-device-access-alarm:before{content:"\e720"}.mdi-device-access-alarms:before{content:"\e721"}.mdi-device-access-time:before{content:"\e722"}.mdi-device-add-alarm:before{content:"\e723"}.mdi-device-airplanemode-off:before{content:"\e724"}.mdi-device-airplanemode-on:before{content:"\e725"}.mdi-device-battery-20:before{content:"\e726"}.mdi-device-battery-30:before{content:"\e727"}.mdi-device-battery-50:before{content:"\e728"}.mdi-device-battery-60:before{content:"\e729"}.mdi-device-battery-80:before{content:"\e72a"}.mdi-device-battery-90:before{content:"\e72b"}.mdi-device-battery-alert:before{content:"\e72c"}.mdi-device-battery-charging-20:before{content:"\e72d"}.mdi-device-battery-charging-30:before{content:"\e72e"}.mdi-device-battery-charging-50:before{content:"\e72f"}.mdi-device-battery-charging-60:before{content:"\e730"}.mdi-device-battery-charging-80:before{content:"\e731"}.mdi-device-battery-charging-90:before{content:"\e732"}.mdi-device-battery-charging-full:before{content:"\e733"}.mdi-device-battery-full:before{content:"\e734"}.mdi-device-battery-std:before{content:"\e735"}.mdi-device-battery-unknown:before{content:"\e736"}.mdi-device-bluetooth-connected:before{content:"\e737"}.mdi-device-bluetooth-disabled:before{content:"\e738"}.mdi-device-bluetooth-searching:before{content:"\e739"}.mdi-device-bluetooth:before{content:"\e73a"}.mdi-device-brightness-auto:before{content:"\e73b"}.mdi-device-brightness-high:before{content:"\e73c"}.mdi-device-brightness-low:before{content:"\e73d"}.mdi-device-brightness-medium:before{content:"\e73e"}.mdi-device-data-usage:before{content:"\e73f"}.mdi-device-developer-mode:before{content:"\e740"}.mdi-device-devices:before{content:"\e741"}.mdi-device-dvr:before{content:"\e742"}.mdi-device-gps-fixed:before{content:"\e743"}.mdi-device-gps-not-fixed:before{content:"\e744"}.mdi-device-gps-off:before{content:"\e745"}.mdi-device-location-disabled:before{content:"\e746"}.mdi-device-location-searching:before{content:"\e747"}.mdi-device-multitrack-audio:before{content:"\e748"}.mdi-device-network-cell:before{content:"\e749"}.mdi-device-network-wifi:before{content:"\e74a"}.mdi-device-nfc:before{content:"\e74b"}.mdi-device-now-wallpaper:before{content:"\e74c"}.mdi-device-now-widgets:before{content:"\e74d"}.mdi-device-screen-lock-landscape:before{content:"\e74e"}.mdi-device-screen-lock-portrait:before{content:"\e74f"}.mdi-device-screen-lock-rotation:before{content:"\e750"}.mdi-device-screen-rotation:before{content:"\e751"}.mdi-device-sd-storage:before{content:"\e752"}.mdi-device-settings-system-daydream:before{content:"\e753"}.mdi-device-signal-cellular-0-bar:before{content:"\e754"}.mdi-device-signal-cellular-1-bar:before{content:"\e755"}.mdi-device-signal-cellular-2-bar:before{content:"\e756"}.mdi-device-signal-cellular-3-bar:before{content:"\e757"}.mdi-device-signal-cellular-4-bar:before{content:"\e758"}.mdi-signal-wifi-statusbar-connected-no-internet-after:before{content:"\e8f6"}.mdi-device-signal-cellular-connected-no-internet-0-bar:before{content:"\e759"}.mdi-device-signal-cellular-connected-no-internet-1-bar:before{content:"\e75a"}.mdi-device-signal-cellular-connected-no-internet-2-bar:before{content:"\e75b"}.mdi-device-signal-cellular-connected-no-internet-3-bar:before{content:"\e75c"}.mdi-device-signal-cellular-connected-no-internet-4-bar:before{content:"\e75d"}.mdi-device-signal-cellular-no-sim:before{content:"\e75e"}.mdi-device-signal-cellular-null:before{content:"\e75f"}.mdi-device-signal-cellular-off:before{content:"\e760"}.mdi-device-signal-wifi-0-bar:before{content:"\e761"}.mdi-device-signal-wifi-1-bar:before{content:"\e762"}.mdi-device-signal-wifi-2-bar:before{content:"\e763"}.mdi-device-signal-wifi-3-bar:before{content:"\e764"}.mdi-device-signal-wifi-4-bar:before{content:"\e765"}.mdi-device-signal-wifi-off:before{content:"\e766"}.mdi-device-signal-wifi-statusbar-1-bar:before{content:"\e767"}.mdi-device-signal-wifi-statusbar-2-bar:before{content:"\e768"}.mdi-device-signal-wifi-statusbar-3-bar:before{content:"\e769"}.mdi-device-signal-wifi-statusbar-4-bar:before{content:"\e76a"}.mdi-device-signal-wifi-statusbar-connected-no-internet-:before{content:"\e76b"}.mdi-device-signal-wifi-statusbar-connected-no-internet:before{content:"\e76f"}.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before{content:"\e76c"}.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before{content:"\e76d"}.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before{content:"\e76e"}.mdi-signal-wifi-statusbar-not-connected-after:before{content:"\e8f7"}.mdi-device-signal-wifi-statusbar-not-connected:before{content:"\e770"}.mdi-device-signal-wifi-statusbar-null:before{content:"\e771"}.mdi-device-storage:before{content:"\e772"}.mdi-device-usb:before{content:"\e773"}.mdi-device-wifi-lock:before{content:"\e774"}.mdi-device-wifi-tethering:before{content:"\e775"}.mdi-hardware-cast-connected:before{content:"\e7b7"}.mdi-hardware-cast:before{content:"\e7b8"}.mdi-hardware-computer:before{content:"\e7b9"}.mdi-hardware-desktop-mac:before{content:"\e7ba"}.mdi-hardware-desktop-windows:before{content:"\e7bb"}.mdi-hardware-dock:before{content:"\e7bc"}.mdi-hardware-gamepad:before{content:"\e7bd"}.mdi-hardware-headset-mic:before{content:"\e7be"}.mdi-hardware-headset:before{content:"\e7bf"}.mdi-hardware-keyboard-alt:before{content:"\e7c0"}.mdi-hardware-keyboard-arrow-down:before{content:"\e7c1"}.mdi-hardware-keyboard-arrow-left:before{content:"\e7c2"}.mdi-hardware-keyboard-arrow-right:before{content:"\e7c3"}.mdi-hardware-keyboard-arrow-up:before{content:"\e7c4"}.mdi-hardware-keyboard-backspace:before{content:"\e7c5"}.mdi-hardware-keyboard-capslock:before{content:"\e7c6"}.mdi-hardware-keyboard-control:before{content:"\e7c7"}.mdi-hardware-keyboard-hide:before{content:"\e7c8"}.mdi-hardware-keyboard-return:before{content:"\e7c9"}.mdi-hardware-keyboard-tab:before{content:"\e7ca"}.mdi-hardware-keyboard-voice:before{content:"\e7cb"}.mdi-hardware-keyboard:before{content:"\e7cc"}.mdi-hardware-laptop-chromebook:before{content:"\e7cd"}.mdi-hardware-laptop-mac:before{content:"\e7ce"}.mdi-hardware-laptop-windows:before{content:"\e7cf"}.mdi-hardware-laptop:before{content:"\e7d0"}.mdi-hardware-memory:before{content:"\e7d1"}.mdi-hardware-mouse:before{content:"\e7d2"}.mdi-hardware-phone-android:before{content:"\e7d3"}.mdi-hardware-phone-iphone:before{content:"\e7d4"}.mdi-hardware-phonelink-off:before{content:"\e7d5"}.mdi-hardware-phonelink:before{content:"\e7d6"}.mdi-hardware-security:before{content:"\e7d7"}.mdi-hardware-sim-card:before{content:"\e7d8"}.mdi-hardware-smartphone:before{content:"\e7d9"}.mdi-hardware-speaker:before{content:"\e7da"}.mdi-hardware-tablet-android:before{content:"\e7db"}.mdi-hardware-tablet-mac:before{content:"\e7dc"}.mdi-hardware-tablet:before{content:"\e7dd"}.mdi-hardware-tv:before{content:"\e7de"}.mdi-hardware-watch:before{content:"\e7df"}.mdi-image-add-to-photos:before{content:"\e7e0"}.mdi-image-adjust:before{content:"\e7e1"}.mdi-image-assistant-photo:before{content:"\e7e2"}.mdi-image-audiotrack:before{content:"\e7e3"}.mdi-image-blur-circular:before{content:"\e7e4"}.mdi-image-blur-linear:before{content:"\e7e5"}.mdi-image-blur-off:before{content:"\e7e6"}.mdi-image-blur-on:before{content:"\e7e7"}.mdi-image-brightness-1:before{content:"\e7e8"}.mdi-image-brightness-2:before{content:"\e7e9"}.mdi-image-brightness-3:before{content:"\e7ea"}.mdi-image-brightness-4:before{content:"\e7eb"}.mdi-image-brightness-5:before{content:"\e7ec"}.mdi-image-brightness-6:before{content:"\e7ed"}.mdi-image-brightness-7:before{content:"\e7ee"}.mdi-image-brush:before{content:"\e7ef"}.mdi-image-camera-alt:before{content:"\e7f0"}.mdi-image-camera-front:before{content:"\e7f1"}.mdi-image-camera-rear:before{content:"\e7f2"}.mdi-image-camera-roll:before{content:"\e7f3"}.mdi-image-camera:before{content:"\e7f4"}.mdi-image-center-focus-strong:before{content:"\e7f5"}.mdi-image-center-focus-weak:before{content:"\e7f6"}.mdi-image-collections:before{content:"\e7f7"}.mdi-image-color-lens:before{content:"\e7f8"}.mdi-image-colorize:before{content:"\e7f9"}.mdi-image-compare:before{content:"\e7fa"}.mdi-image-control-point-duplicate:before{content:"\e7fb"}.mdi-image-control-point:before{content:"\e7fc"}.mdi-image-crop-3-2:before{content:"\e7fd"}.mdi-image-crop-5-4:before{content:"\e7fe"}.mdi-image-crop-7-5:before{content:"\e7ff"}.mdi-image-crop-16-9:before{content:"\e800"}.mdi-image-crop-din:before{content:"\e801"}.mdi-image-crop-free:before{content:"\e802"}.mdi-image-crop-landscape:before{content:"\e803"}.mdi-image-crop-original:before{content:"\e804"}.mdi-image-crop-portrait:before{content:"\e805"}.mdi-image-crop-square:before{content:"\e806"}.mdi-image-crop:before{content:"\e807"}.mdi-image-dehaze:before{content:"\e808"}.mdi-image-details:before{content:"\e809"}.mdi-image-edit:before{content:"\e80a"}.mdi-image-exposure-minus-1:before{content:"\e80b"}.mdi-image-exposure-minus-2:before{content:"\e80c"}.mdi-image-exposure-plus-1:before{content:"\e80d"}.mdi-image-exposure-plus-2:before{content:"\e80e"}.mdi-image-exposure-zero:before{content:"\e80f"}.mdi-image-exposure:before{content:"\e810"}.mdi-image-filter-1:before{content:"\e811"}.mdi-image-filter-2:before{content:"\e812"}.mdi-image-filter-3:before{content:"\e813"}.mdi-image-filter-4:before{content:"\e814"}.mdi-image-filter-5:before{content:"\e815"}.mdi-image-filter-6:before{content:"\e816"}.mdi-image-filter-7:before{content:"\e817"}.mdi-image-filter-8:before{content:"\e818"}.mdi-image-filter-9-plus:before{content:"\e819"}.mdi-image-filter-9:before{content:"\e81a"}.mdi-image-filter-b-and-w:before{content:"\e81b"}.mdi-image-filter-center-focus:before{content:"\e81c"}.mdi-image-filter-drama:before{content:"\e81d"}.mdi-image-filter-frames:before{content:"\e81e"}.mdi-image-filter-hdr:before{content:"\e81f"}.mdi-image-filter-none:before{content:"\e820"}.mdi-image-filter-tilt-shift:before{content:"\e821"}.mdi-image-filter-vintage:before{content:"\e822"}.mdi-image-filter:before{content:"\e823"}.mdi-image-flare:before{content:"\e824"}.mdi-image-flash-auto:before{content:"\e825"}.mdi-image-flash-off:before{content:"\e826"}.mdi-image-flash-on:before{content:"\e827"}.mdi-image-flip:before{content:"\e828"}.mdi-image-gradient:before{content:"\e829"}.mdi-image-grain:before{content:"\e82a"}.mdi-image-grid-off:before{content:"\e82b"}.mdi-image-grid-on:before{content:"\e82c"}.mdi-image-hdr-off:before{content:"\e82d"}.mdi-image-hdr-on:before{content:"\e82e"}.mdi-image-hdr-strong:before{content:"\e82f"}.mdi-image-hdr-weak:before{content:"\e830"}.mdi-image-healing:before{content:"\e831"}.mdi-image-image-aspect-ratio:before{content:"\e832"}.mdi-image-image:before{content:"\e833"}.mdi-image-iso:before{content:"\e834"}.mdi-image-landscape:before{content:"\e835"}.mdi-image-leak-add:before{content:"\e836"}.mdi-image-leak-remove:before{content:"\e837"}.mdi-image-lens:before{content:"\e838"}.mdi-image-looks-3:before{content:"\e839"}.mdi-image-looks-4:before{content:"\e83a"}.mdi-image-looks-5:before{content:"\e83b"}.mdi-image-looks-6:before{content:"\e83c"}.mdi-image-looks-one:before{content:"\e83d"}.mdi-image-looks-two:before{content:"\e83e"}.mdi-image-looks:before{content:"\e83f"}.mdi-image-loupe:before{content:"\e840"}.mdi-image-movie-creation:before{content:"\e841"}.mdi-image-nature-people:before{content:"\e842"}.mdi-image-nature:before{content:"\e843"}.mdi-image-navigate-before:before{content:"\e844"}.mdi-image-navigate-next:before{content:"\e845"}.mdi-image-palette:before{content:"\e846"}.mdi-image-panorama-fisheye:before{content:"\e847"}.mdi-image-panorama-horizontal:before{content:"\e848"}.mdi-image-panorama-vertical:before{content:"\e849"}.mdi-image-panorama-wide-angle:before{content:"\e84a"}.mdi-image-panorama:before{content:"\e84b"}.mdi-image-photo-album:before{content:"\e84c"}.mdi-image-photo-camera:before{content:"\e84d"}.mdi-image-photo-library:before{content:"\e84e"}.mdi-image-photo:before{content:"\e84f"}.mdi-image-portrait:before{content:"\e850"}.mdi-image-remove-red-eye:before{content:"\e851"}.mdi-image-rotate-left:before{content:"\e852"}.mdi-image-rotate-right:before{content:"\e853"}.mdi-image-slideshow:before{content:"\e854"}.mdi-image-straighten:before{content:"\e855"}.mdi-image-style:before{content:"\e856"}.mdi-image-switch-camera:before{content:"\e857"}.mdi-image-switch-video:before{content:"\e858"}.mdi-image-tag-faces:before{content:"\e859"}.mdi-image-texture:before{content:"\e85a"}.mdi-image-timelapse:before{content:"\e85b"}.mdi-image-timer-3:before{content:"\e85c"}.mdi-image-timer-10:before{content:"\e85d"}.mdi-image-timer-auto:before{content:"\e85e"}.mdi-image-timer-off:before{content:"\e85f"}.mdi-image-timer:before{content:"\e860"}.mdi-image-tonality:before{content:"\e861"}.mdi-image-transform:before{content:"\e862"}.mdi-image-tune:before{content:"\e863"}.mdi-image-wb-auto:before{content:"\e864"}.mdi-image-wb-cloudy:before{content:"\e865"}.mdi-image-wb-incandescent:before{content:"\e866"}.mdi-image-wb-irradescent:before{content:"\e867"}.mdi-image-wb-sunny:before{content:"\e868"}.mdi-maps-beenhere:before{content:"\e869"}.mdi-maps-directions-bike:before{content:"\e86a"}.mdi-maps-directions-bus:before{content:"\e86b"}.mdi-maps-directions-car:before{content:"\e86c"}.mdi-maps-directions-ferry:before{content:"\e86d"}.mdi-maps-directions-subway:before{content:"\e86e"}.mdi-maps-directions-train:before{content:"\e86f"}.mdi-maps-directions-transit:before{content:"\e870"}.mdi-maps-directions-walk:before{content:"\e871"}.mdi-maps-directions:before{content:"\e872"}.mdi-maps-flight:before{content:"\e873"}.mdi-maps-hotel:before{content:"\e874"}.mdi-maps-layers-clear:before{content:"\e875"}.mdi-maps-layers:before{content:"\e876"}.mdi-maps-local-airport:before{content:"\e877"}.mdi-maps-local-atm:before{content:"\e878"}.mdi-maps-local-attraction:before{content:"\e879"}.mdi-maps-local-bar:before{content:"\e87a"}.mdi-maps-local-cafe:before{content:"\e87b"}.mdi-maps-local-car-wash:before{content:"\e87c"}.mdi-maps-local-convenience-store:before{content:"\e87d"}.mdi-maps-local-drink:before{content:"\e87e"}.mdi-maps-local-florist:before{content:"\e87f"}.mdi-maps-local-gas-station:before{content:"\e880"}.mdi-maps-local-grocery-store:before{content:"\e881"}.mdi-maps-local-hospital:before{content:"\e882"}.mdi-maps-local-hotel:before{content:"\e883"}.mdi-maps-local-laundry-service:before{content:"\e884"}.mdi-maps-local-library:before{content:"\e885"}.mdi-maps-local-mall:before{content:"\e886"}.mdi-maps-local-movies:before{content:"\e887"}.mdi-maps-local-offer:before{content:"\e888"}.mdi-maps-local-parking:before{content:"\e889"}.mdi-maps-local-pharmacy:before{content:"\e88a"}.mdi-maps-local-phone:before{content:"\e88b"}.mdi-maps-local-pizza:before{content:"\e88c"}.mdi-maps-local-play:before{content:"\e88d"}.mdi-maps-local-post-office:before{content:"\e88e"}.mdi-maps-local-print-shop:before{content:"\e88f"}.mdi-maps-local-restaurant:before{content:"\e890"}.mdi-maps-local-see:before{content:"\e891"}.mdi-maps-local-shipping:before{content:"\e892"}.mdi-maps-local-taxi:before{content:"\e893"}.mdi-maps-location-history:before{content:"\e894"}.mdi-maps-map:before{content:"\e895"}.mdi-maps-my-location:before{content:"\e896"}.mdi-maps-navigation:before{content:"\e897"}.mdi-maps-pin-drop:before{content:"\e898"}.mdi-maps-place:before{content:"\e899"}.mdi-maps-rate-review:before{content:"\e89a"}.mdi-maps-restaurant-menu:before{content:"\e89b"}.mdi-maps-satellite:before{content:"\e89c"}.mdi-maps-store-mall-directory:before{content:"\e89d"}.mdi-maps-terrain:before{content:"\e89e"}.mdi-maps-traffic:before{content:"\e89f"}.mdi-navigation-apps:before{content:"\e8a0"}.mdi-navigation-arrow-back:before{content:"\e8a1"}.mdi-navigation-arrow-drop-down-circle:before{content:"\e8a2"}.mdi-navigation-arrow-drop-down:before{content:"\e8a3"}.mdi-navigation-arrow-drop-up:before{content:"\e8a4"}.mdi-navigation-arrow-forward:before{content:"\e8a5"}.mdi-navigation-cancel:before{content:"\e8a6"}.mdi-navigation-check:before{content:"\e8a7"}.mdi-navigation-chevron-left:before{content:"\e8a8"}.mdi-navigation-chevron-right:before{content:"\e8a9"}.mdi-navigation-close:before{content:"\e8aa"}.mdi-navigation-expand-less:before{content:"\e8ab"}.mdi-navigation-expand-more:before{content:"\e8ac"}.mdi-navigation-fullscreen-exit:before{content:"\e8ad"}.mdi-navigation-fullscreen:before{content:"\e8ae"}.mdi-navigation-menu:before{content:"\e8af"}.mdi-navigation-more-horiz:before{content:"\e8b0"}.mdi-navigation-more-vert:before{content:"\e8b1"}.mdi-navigation-refresh:before{content:"\e8b2"}.mdi-navigation-unfold-less:before{content:"\e8b3"}.mdi-navigation-unfold-more:before{content:"\e8b4"}.mdi-notification-adb:before{content:"\e8b5"}.mdi-notification-bluetooth-audio:before{content:"\e8b6"}.mdi-notification-disc-full:before{content:"\e8b7"}.mdi-notification-dnd-forwardslash:before{content:"\e8b8"}.mdi-notification-do-not-disturb:before{content:"\e8b9"}.mdi-notification-drive-eta:before{content:"\e8ba"}.mdi-notification-event-available:before{content:"\e8bb"}.mdi-notification-event-busy:before{content:"\e8bc"}.mdi-notification-event-note:before{content:"\e8bd"}.mdi-notification-folder-special:before{content:"\e8be"}.mdi-notification-mms:before{content:"\e8bf"}.mdi-notification-more:before{content:"\e8c0"}.mdi-notification-network-locked:before{content:"\e8c1"}.mdi-notification-phone-bluetooth-speaker:before{content:"\e8c2"}.mdi-notification-phone-forwarded:before{content:"\e8c3"}.mdi-notification-phone-in-talk:before{content:"\e8c4"}.mdi-notification-phone-locked:before{content:"\e8c5"}.mdi-notification-phone-missed:before{content:"\e8c6"}.mdi-notification-phone-paused:before{content:"\e8c7"}.mdi-notification-play-download:before{content:"\e8c8"}.mdi-notification-play-install:before{content:"\e8c9"}.mdi-notification-sd-card:before{content:"\e8ca"}.mdi-notification-sim-card-alert:before{content:"\e8cb"}.mdi-notification-sms-failed:before{content:"\e8cc"}.mdi-notification-sms:before{content:"\e8cd"}.mdi-notification-sync-disabled:before{content:"\e8ce"}.mdi-notification-sync-problem:before{content:"\e8cf"}.mdi-notification-sync:before{content:"\e8d0"}.mdi-notification-system-update:before{content:"\e8d1"}.mdi-notification-tap-and-play:before{content:"\e8d2"}.mdi-notification-time-to-leave:before{content:"\e8d3"}.mdi-notification-vibration:before{content:"\e8d4"}.mdi-notification-voice-chat:before{content:"\e8d5"}.mdi-notification-vpn-lock:before{content:"\e8d6"}.mdi-social-cake:before{content:"\e8d7"}.mdi-social-domain:before{content:"\e8d8"}.mdi-social-group-add:before{content:"\e8d9"}.mdi-social-group:before{content:"\e8da"}.mdi-social-location-city:before{content:"\e8db"}.mdi-social-mood:before{content:"\e8dc"}.mdi-social-notifications-none:before{content:"\e8dd"}.mdi-social-notifications-off:before{content:"\e8de"}.mdi-social-notifications-on:before{content:"\e8df"}.mdi-social-notifications-paused:before{content:"\e8e0"}.mdi-social-notifications:before{content:"\e8e1"}.mdi-social-pages:before{content:"\e8e2"}.mdi-social-party-mode:before{content:"\e8e3"}.mdi-social-people-outline:before{content:"\e8e4"}.mdi-social-people:before{content:"\e8e5"}.mdi-social-person-add:before{content:"\e8e6"}.mdi-social-person-outline:before{content:"\e8e7"}.mdi-social-person:before{content:"\e8e8"}.mdi-social-plus-one:before{content:"\e8e9"}.mdi-social-poll:before{content:"\e8ea"}.mdi-social-public:before{content:"\e8eb"}.mdi-social-school:before{content:"\e8ec"}.mdi-social-share:before{content:"\e8ed"}.mdi-social-whatshot:before{content:"\e8ee"}.mdi-toggle-check-box-outline-blank:before{content:"\e8ef"}.mdi-toggle-check-box:before{content:"\e8f0"}.mdi-toggle-radio-button-off:before{content:"\e8f1"}.mdi-toggle-radio-button-on:before{content:"\e8f2"}.mdi-toggle-star-half:before{content:"\e8f3"}.mdi-toggle-star-outline:before{content:"\e8f4"}.mdi-toggle-star:before{content:"\e8f5"}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width : 601px){.container{width:85%}}@media only screen and (min-width : 993px){.container{width:70%}}.container .row{margin-left:-0.75rem;margin-right:-0.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0.75rem}.row .col.s1{width:8.33333%;margin-left:0}.row .col.s2{width:16.66667%;margin-left:0}.row .col.s3{width:25%;margin-left:0}.row .col.s4{width:33.33333%;margin-left:0}.row .col.s5{width:41.66667%;margin-left:0}.row .col.s6{width:50%;margin-left:0}.row .col.s7{width:58.33333%;margin-left:0}.row .col.s8{width:66.66667%;margin-left:0}.row .col.s9{width:75%;margin-left:0}.row .col.s10{width:83.33333%;margin-left:0}.row .col.s11{width:91.66667%;margin-left:0}.row .col.s12{width:100%;margin-left:0}.row .col.offset-s1{margin-left:8.33333%}.row .col.offset-s2{margin-left:16.66667%}.row .col.offset-s3{margin-left:25%}.row .col.offset-s4{margin-left:33.33333%}.row .col.offset-s5{margin-left:41.66667%}.row .col.offset-s6{margin-left:50%}.row .col.offset-s7{margin-left:58.33333%}.row .col.offset-s8{margin-left:66.66667%}.row .col.offset-s9{margin-left:75%}.row .col.offset-s10{margin-left:83.33333%}.row .col.offset-s11{margin-left:91.66667%}.row .col.offset-s12{margin-left:100%}@media only screen and (min-width : 601px){.row .col.m1{width:8.33333%;margin-left:0}.row .col.m2{width:16.66667%;margin-left:0}.row .col.m3{width:25%;margin-left:0}.row .col.m4{width:33.33333%;margin-left:0}.row .col.m5{width:41.66667%;margin-left:0}.row .col.m6{width:50%;margin-left:0}.row .col.m7{width:58.33333%;margin-left:0}.row .col.m8{width:66.66667%;margin-left:0}.row .col.m9{width:75%;margin-left:0}.row .col.m10{width:83.33333%;margin-left:0}.row .col.m11{width:91.66667%;margin-left:0}.row .col.m12{width:100%;margin-left:0}.row .col.offset-m1{margin-left:8.33333%}.row .col.offset-m2{margin-left:16.66667%}.row .col.offset-m3{margin-left:25%}.row .col.offset-m4{margin-left:33.33333%}.row .col.offset-m5{margin-left:41.66667%}.row .col.offset-m6{margin-left:50%}.row .col.offset-m7{margin-left:58.33333%}.row .col.offset-m8{margin-left:66.66667%}.row .col.offset-m9{margin-left:75%}.row .col.offset-m10{margin-left:83.33333%}.row .col.offset-m11{margin-left:91.66667%}.row .col.offset-m12{margin-left:100%}}@media only screen and (min-width : 993px){.row .col.l1{width:8.33333%;margin-left:0}.row .col.l2{width:16.66667%;margin-left:0}.row .col.l3{width:25%;margin-left:0}.row .col.l4{width:33.33333%;margin-left:0}.row .col.l5{width:41.66667%;margin-left:0}.row .col.l6{width:50%;margin-left:0}.row .col.l7{width:58.33333%;margin-left:0}.row .col.l8{width:66.66667%;margin-left:0}.row .col.l9{width:75%;margin-left:0}.row .col.l10{width:83.33333%;margin-left:0}.row .col.l11{width:91.66667%;margin-left:0}.row .col.l12{width:100%;margin-left:0}.row .col.offset-l1{margin-left:8.33333%}.row .col.offset-l2{margin-left:16.66667%}.row .col.offset-l3{margin-left:25%}.row .col.offset-l4{margin-left:33.33333%}.row .col.offset-l5{margin-left:41.66667%}.row .col.offset-l6{margin-left:50%}.row .col.offset-l7{margin-left:58.33333%}.row .col.offset-l8{margin-left:66.66667%}.row .col.offset-l9{margin-left:75%}.row .col.offset-l10{margin-left:83.33333%}.row .col.offset-l11{margin-left:91.66667%}.row .col.offset-l12{margin-left:100%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav a{color:#fff}nav .nav-wrapper{position:relative;height:100%}nav .nav-wrapper i{display:block;font-size:2rem}@media only screen and (min-width : 993px){nav a.button-collapse{display:none}}nav .button-collapse{float:left;position:relative;z-index:1;height:56px}nav .button-collapse i{font-size:2.7rem;height:56px;line-height:56px}nav .brand-logo{position:absolute;color:#fff;display:inline-block;font-size:2.1rem;padding:0;white-space:nowrap}nav .brand-logo.center{left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}@media only screen and (max-width : 992px){nav .brand-logo{left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%);}}nav .brand-logo.right{right:0.5rem;padding:0}nav ul{margin:0}nav ul li{-webkit-transition:background-color .3s;-moz-transition:background-color .3s;-o-transition:background-color .3s;-ms-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}nav ul li:hover,nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{font-size:1rem;color:#fff;display:block;padding:0 15px}nav ul.left{float:left}nav .input-field{margin:0}nav .input-field input{height:100%;font-size:1.2rem;border:none;padding-left:2rem}nav .input-field input:focus,nav .input-field input[type=text]:valid,nav .input-field input[type=password]:valid,nav .input-field input[type=email]:valid,nav .input-field input[type=url]:valid,nav .input-field input[type=date]:valid{border:none;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);-webkit-transition:color .3s;-moz-transition:color .3s;-o-transition:color .3s;-ms-transition:color .3s;transition:color .3s}nav .input-field label.active i{color:#fff}nav .input-field label.active{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.navbar-fixed{position:relative;height:56px;z-index:998}.navbar-fixed nav{position:fixed}@media only screen and (min-width : 601px){nav,nav .nav-wrapper i,nav a.button-collapse,nav a.button-collapse i{height:64px;line-height:64px}.navbar-fixed{height:64px}}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Thin.woff2") format("woff2"),url("../font/roboto/Roboto-Thin.woff") format("woff"),url("../font/roboto/Roboto-Thin.ttf") format("truetype");font-weight:200;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Light.woff2") format("woff2"),url("../font/roboto/Roboto-Light.woff") format("woff"),url("../font/roboto/Roboto-Light.ttf") format("truetype");font-weight:300;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Regular.woff2") format("woff2"),url("../font/roboto/Roboto-Regular.woff") format("woff"),url("../font/roboto/Roboto-Regular.ttf") format("truetype");font-weight:400;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Medium.woff2") format("woff2"),url("../font/roboto/Roboto-Medium.woff") format("woff"),url("../font/roboto/Roboto-Medium.ttf") format("truetype");font-weight:500;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Bold.woff2") format("woff2"),url("../font/roboto/Roboto-Bold.woff") format("woff"),url("../font/roboto/Roboto-Bold.ttf") format("truetype");font-weight:700;}a{text-decoration:none}html{line-height:1.5;font-family:"Roboto", sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px;}}@media only screen and (min-width: 992px){html{font-size:14.5px;}}@media only screen and (min-width: 1200px){html{font-size:15px;}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.1}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:110%;margin:2.1rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:110%;margin:1.78rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:110%;margin:1.46rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:110%;margin:1.14rem 0 0.912rem 0}h5{font-size:1.64rem;line-height:110%;margin:0.82rem 0 0.656rem 0}h6{font-size:1rem;line-height:110%;margin:0.5rem 0 0.4rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light,footer.page-footer .footer-copyright{font-weight:300}.thin{font-weight:200}.flow-text{font-weight:300}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem;}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem;}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem;}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem;}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem;}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem;}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem;}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem;}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem;}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem;}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem;}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem;}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem;}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem;}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem;}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem;}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem;}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem;}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem;}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem;}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem;}}@media only screen and (max-width: 360px){.flow-text{font-size:1.2rem;}}.card-panel{transition:box-shadow .25s;padding:20px;margin:0.5rem 0 1rem 0;border-radius:2px;background-color:#fff}.card{position:relative;overflow:hidden;margin:0.5rem 0 1rem 0;background-color:#fff;transition:box-shadow .25s;border-radius:2px}.card .card-title{color:#fff;font-size:24px;font-weight:300}.card .card-title.activator{cursor:pointer}.card.small,.card.medium,.card.large{position:relative}.card.small .card-image,.card.medium .card-image,.card.large .card-image{overflow:hidden}.card.small .card-content,.card.medium .card-content,.card.large .card-content{overflow:hidden}.card.small .card-action,.card.medium .card-action,.card.large .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.small .card-image{height:150px}.card.small .card-content{height:150px}.card.medium{height:400px}.card.medium .card-image{height:250px}.card.medium .card-content{height:150px}.card.large{height:500px}.card.large .card-image{height:330px}.card.large .card-content{height:170px}.card .card-image{position:relative}.card .card-image img{border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{position:absolute;bottom:0;left:0;padding:20px}.card .card-content{padding:20px;border-radius:0 0 2px 2px}.card .card-content p{margin:0;color:inherit}.card .card-content .card-title{line-height:48px}.card .card-action{border-top:1px solid rgba(160,160,160,0.2);padding:20px}.card .card-action a{color:#ffab40;margin-right:20px;-webkit-transition:color .3s ease;-moz-transition:color .3s ease;-o-transition:color .3s ease;-ms-transition:color .3s ease;transition:color .3s ease;text-transform:uppercase}.card .card-action a:hover{color:#ffd8a6}.card .card-reveal{padding:20px;position:absolute;background-color:#fff;width:100%;overflow-y:auto;top:100%;height:100%;z-index:1;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}#toast-container{display:block;position:fixed;z-index:1001}@media only screen and (max-width : 600px){#toast-container{min-width:100%;bottom:0%;}}@media only screen and (min-width : 601px) and (max-width : 992px){#toast-container{min-width:30%;left:5%;bottom:7%;}}@media only screen and (min-width : 993px){#toast-container{min-width:8%;top:10%;right:7%;}}.toast{border-radius:2px;top:0;width:auto;clear:both;margin-top:10px;position:relative;max-width:100%;height:48px;line-height:48px;background-color:#323232;padding:0 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.toast .btn,.toast .btn-large,.toast .btn-flat{margin:0;margin-left:3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width : 600px){.toast{width:100%;border-radius:0;}}@media only screen and (min-width : 601px) and (max-width : 992px){.toast{float:left;}}@media only screen and (min-width : 993px){.toast{float:right;}}.tabs{position:relative;height:48px;background-color:#fff;margin:0 auto;width:100%;white-space:nowrap}.tabs .tab{display:block;float:left;text-align:center;line-height:48px;height:48px;padding:0 20px;margin:0;text-transform:uppercase;letter-spacing:.8px;width:15%}.tabs .tab a{color:#ee6e73;display:block;width:100%;height:100%;-webkit-transition:color .28s ease;-moz-transition:color .28s ease;-o-transition:color .28s ease;-ms-transition:color .28s ease;transition:color .28s ease}.tabs .tab a:hover{color:#f9c9cb}.tabs .tab.disabled a{color:#f9c9cb;cursor:default}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#f6b2b5;will-change:left, right}.tabs .tab{padding:0}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:2000;background-color:transparent;border-radius:2px;color:#fff;min-height:36px;line-height:1rem;opacity:0;display:none;position:absolute;text-align:center;overflow:hidden;left:0;top:0;will-change:top, left}.backdrop{position:absolute;opacity:0;display:none;height:7px;width:14px;border-radius:0 0 14px 14px;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 10%;-moz-transform-origin:50% 10%;-ms-transform-origin:50% 10%;-o-transform-origin:50% 10%;transform-origin:50% 10%;will-change:transform, opacity}.btn,.btn-large,.btn-flat{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;outline:0;padding:0 2rem;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn.disabled,.disabled.btn-large,.btn-floating.disabled,.btn-large.disabled,.btn:disabled,.btn-large:disabled,.btn-large:disabled,.btn-floating:disabled{background-color:#DFDFDF !important;box-shadow:none;color:#9F9F9F !important;cursor:default}.btn.disabled *,.disabled.btn-large *,.btn-floating.disabled *,.btn-large.disabled *,.btn:disabled *,.btn-large:disabled *,.btn-large:disabled *,.btn-floating:disabled *{pointer-events:none}.btn.disabled:hover,.disabled.btn-large:hover,.btn-floating.disabled:hover,.btn-large.disabled:hover,.btn:disabled:hover,.btn-large:disabled:hover,.btn-large:disabled:hover,.btn-floating:disabled:hover{background-color:#DFDFDF;color:#9F9F9F}.btn i,.btn-large i,.btn-floating i,.btn-large i,.btn-flat i{font-size:1.3rem;line-height:inherit}.btn,.btn-large{text-decoration:none;color:#fff;background-color:#26a69a;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.btn:hover,.btn-large:hover{background-color:#2bbbad}.btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:37px;height:37px;line-height:37px;padding:0;background-color:#26a69a;border-radius:50%;transition:.3s;cursor:pointer;vertical-align:middle}.btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:37px}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:55.5px;height:55.5px}.btn-floating.btn-large i{line-height:55.5px}button.btn-floating{border:none}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:998}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0}.fixed-action-btn ul li{margin-bottom:15px}.fixed-action-btn ul a.btn-floating{opacity:0}.btn-flat{box-shadow:none;background-color:transparent;color:#343434;cursor:pointer}.btn-flat.disabled{color:#b3b3b3;cursor:default}.btn-large{height:54px;line-height:56px}.btn-large i{font-size:1.6rem}.btn-block{display:block}.dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;max-height:650px;overflow-y:auto;opacity:0;position:absolute;z-index:999;will-change:width, height}.dropdown-content li{clear:both;color:rgba(0,0,0,0.87);cursor:pointer;line-height:1.5rem;width:100%;text-align:left;text-transform:none}.dropdown-content li:hover,.dropdown-content li.active{background-color:#eee}.dropdown-content li>a,.dropdown-content li>span{font-size:1.2rem;color:#26a69a;display:block;padding:1rem 1rem}.dropdown-content li>a>i{height:inherit;line-height:inherit}/*! - * Waves v0.6.0 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE - */.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;will-change:opacity, transform;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;-moz-transition:all 0.7s ease-out;-o-transition:all 0.7s ease-out;-ms-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:-webkit-transform, opacity;-moz-transition-property:-moz-transform, opacity;-o-transition-property:-o-transform, opacity;transition-property:transform, opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;-ms-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}a.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top, opacity}@media only screen and (max-width : 992px){.modal{width:80%;}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-close{cursor:pointer}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-flat{float:right;margin:6px 0}.lean-overlay{position:fixed;z-index:999;top:-100px;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 56px);max-height:100%;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:absolute;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:0.5rem 0 1rem 0}.collapsible-header{display:block;cursor:pointer;height:3rem;line-height:3rem;padding:0 1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header i{width:2rem;font-size:1.6rem;line-height:3rem;display:block;float:left;text-align:center;margin-right:1rem}.collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.collapsible-body p{margin:0;padding:2rem}.side-nav .collapsible{border:none;box-shadow:none}.side-nav .collapsible li{padding:0}.side-nav .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;margin:0 1rem}.side-nav .collapsible-header i{line-height:inherit}.side-nav .collapsible-body{border:0;background-color:#fff}.side-nav .collapsible-body li a{margin:0 1rem 0 2rem}.collapsible.popout{border:none;box-shadow:none}.collapsible.popout>li{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);margin:0 24px;transition:margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.collapsible.popout>li.active{box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);margin:16px 0}.materialboxed{cursor:zoom-in;position:relative;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s;transition:opacity .4s}.materialboxed:hover{will-change:left, top, width, height}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#292929;z-index:999;will-change:opacity}.materialbox-caption{position:fixed;display:none;color:#fff;line-height:50px;bottom:0;width:100%;text-align:center;padding:0% 15%;height:50px;z-index:1000;-webkit-font-smoothing:antialiased}select:focus{outline:1px solid #c9f3ef}button:focus{outline:none;background-color:#2ab7a9}label{font-size:0.8rem;color:#9e9e9e}::-webkit-input-placeholder{color:#d1d1d1}:-moz-placeholder{color:#d1d1d1}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}input[type=text],input[type=password],input[type=email],input[type=url],input[type=time],input[type=date],input[type=datetime-local],input[type=tel],input[type=number],input[type=search],textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:3rem;width:100%;font-size:1rem;margin:0 0 15px 0;padding:0;box-shadow:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;transition:all .3s}input[type=text]:disabled,input[type=text][readonly="readonly"],input[type=password]:disabled,input[type=password][readonly="readonly"],input[type=email]:disabled,input[type=email][readonly="readonly"],input[type=url]:disabled,input[type=url][readonly="readonly"],input[type=time]:disabled,input[type=time][readonly="readonly"],input[type=date]:disabled,input[type=date][readonly="readonly"],input[type=datetime-local]:disabled,input[type=datetime-local][readonly="readonly"],input[type=tel]:disabled,input[type=tel][readonly="readonly"],input[type=number]:disabled,input[type=number][readonly="readonly"],input[type=search]:disabled,input[type=search][readonly="readonly"],textarea.materialize-textarea:disabled,textarea.materialize-textarea[readonly="readonly"]{color:rgba(0,0,0,0.26);border-bottom:1px dotted rgba(0,0,0,0.26)}input[type=text]:disabled+label,input[type=text][readonly="readonly"]+label,input[type=password]:disabled+label,input[type=password][readonly="readonly"]+label,input[type=email]:disabled+label,input[type=email][readonly="readonly"]+label,input[type=url]:disabled+label,input[type=url][readonly="readonly"]+label,input[type=time]:disabled+label,input[type=time][readonly="readonly"]+label,input[type=date]:disabled+label,input[type=date][readonly="readonly"]+label,input[type=datetime-local]:disabled+label,input[type=datetime-local][readonly="readonly"]+label,input[type=tel]:disabled+label,input[type=tel][readonly="readonly"]+label,input[type=number]:disabled+label,input[type=number][readonly="readonly"]+label,input[type=search]:disabled+label,input[type=search][readonly="readonly"]+label,textarea.materialize-textarea:disabled+label,textarea.materialize-textarea[readonly="readonly"]+label{color:rgba(0,0,0,0.26)}input[type=text]:focus:not([readonly]),input[type=password]:focus:not([readonly]),input[type=email]:focus:not([readonly]),input[type=url]:focus:not([readonly]),input[type=time]:focus:not([readonly]),input[type=date]:focus:not([readonly]),input[type=datetime-local]:focus:not([readonly]),input[type=tel]:focus:not([readonly]),input[type=number]:focus:not([readonly]),input[type=search]:focus:not([readonly]),textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #26a69a;box-shadow:0 1px 0 0 #26a69a}input[type=text]:focus:not([readonly])+label,input[type=password]:focus:not([readonly])+label,input[type=email]:focus:not([readonly])+label,input[type=url]:focus:not([readonly])+label,input[type=time]:focus:not([readonly])+label,input[type=date]:focus:not([readonly])+label,input[type=datetime-local]:focus:not([readonly])+label,input[type=tel]:focus:not([readonly])+label,input[type=number]:focus:not([readonly])+label,input[type=search]:focus:not([readonly])+label,textarea.materialize-textarea:focus:not([readonly])+label{color:#26a69a}input[type=text].valid,input[type=text]:focus.valid,input[type=password].valid,input[type=password]:focus.valid,input[type=email].valid,input[type=email]:focus.valid,input[type=url].valid,input[type=url]:focus.valid,input[type=time].valid,input[type=time]:focus.valid,input[type=date].valid,input[type=date]:focus.valid,input[type=datetime-local].valid,input[type=datetime-local]:focus.valid,input[type=tel].valid,input[type=tel]:focus.valid,input[type=number].valid,input[type=number]:focus.valid,input[type=search].valid,input[type=search]:focus.valid,textarea.materialize-textarea.valid,textarea.materialize-textarea:focus.valid{border-bottom:1px solid #4CAF50;box-shadow:0 1px 0 0 #4CAF50}input[type=text].valid+label:after,input[type=text]:focus.valid+label:after,input[type=password].valid+label:after,input[type=password]:focus.valid+label:after,input[type=email].valid+label:after,input[type=email]:focus.valid+label:after,input[type=url].valid+label:after,input[type=url]:focus.valid+label:after,input[type=time].valid+label:after,input[type=time]:focus.valid+label:after,input[type=date].valid+label:after,input[type=date]:focus.valid+label:after,input[type=datetime-local].valid+label:after,input[type=datetime-local]:focus.valid+label:after,input[type=tel].valid+label:after,input[type=tel]:focus.valid+label:after,input[type=number].valid+label:after,input[type=number]:focus.valid+label:after,input[type=search].valid+label:after,input[type=search]:focus.valid+label:after,textarea.materialize-textarea.valid+label:after,textarea.materialize-textarea:focus.valid+label:after{content:attr(data-success);color:#4CAF50;opacity:1}input[type=text].invalid,input[type=text]:focus.invalid,input[type=password].invalid,input[type=password]:focus.invalid,input[type=email].invalid,input[type=email]:focus.invalid,input[type=url].invalid,input[type=url]:focus.invalid,input[type=time].invalid,input[type=time]:focus.invalid,input[type=date].invalid,input[type=date]:focus.invalid,input[type=datetime-local].invalid,input[type=datetime-local]:focus.invalid,input[type=tel].invalid,input[type=tel]:focus.invalid,input[type=number].invalid,input[type=number]:focus.invalid,input[type=search].invalid,input[type=search]:focus.invalid,textarea.materialize-textarea.invalid,textarea.materialize-textarea:focus.invalid{border-bottom:1px solid #F44336;box-shadow:0 1px 0 0 #F44336}input[type=text].invalid+label:after,input[type=text]:focus.invalid+label:after,input[type=password].invalid+label:after,input[type=password]:focus.invalid+label:after,input[type=email].invalid+label:after,input[type=email]:focus.invalid+label:after,input[type=url].invalid+label:after,input[type=url]:focus.invalid+label:after,input[type=time].invalid+label:after,input[type=time]:focus.invalid+label:after,input[type=date].invalid+label:after,input[type=date]:focus.invalid+label:after,input[type=datetime-local].invalid+label:after,input[type=datetime-local]:focus.invalid+label:after,input[type=tel].invalid+label:after,input[type=tel]:focus.invalid+label:after,input[type=number].invalid+label:after,input[type=number]:focus.invalid+label:after,input[type=search].invalid+label:after,input[type=search]:focus.invalid+label:after,textarea.materialize-textarea.invalid+label:after,textarea.materialize-textarea:focus.invalid+label:after{content:attr(data-error);color:#F44336;opacity:1}input[type=text]+label:after,input[type=password]+label:after,input[type=email]+label:after,input[type=url]+label:after,input[type=time]+label:after,input[type=date]+label:after,input[type=datetime-local]+label:after,input[type=tel]+label:after,input[type=number]+label:after,input[type=search]+label:after,textarea.materialize-textarea+label:after{display:block;content:"";position:absolute;top:65px;opacity:0;transition:.2s opacity ease-out,.2s color ease-out}.input-field{position:relative;margin-top:1rem}.input-field label{color:#9e9e9e;position:absolute;top:0.8rem;left:0.75rem;font-size:1rem;cursor:text;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out}.input-field label.active{font-size:0.8rem;-webkit-transform:translateY(-140%);-moz-transform:translateY(-140%);-ms-transform:translateY(-140%);-o-transform:translateY(-140%);transform:translateY(-140%)}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;-webkit-transition:color .2s;-moz-transition:color .2s;-o-transition:color .2s;-ms-transition:color .2s;transition:color .2s}.input-field .prefix.active{color:#26a69a}.input-field .prefix ~ input,.input-field .prefix ~ textarea{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.input-field .prefix ~ textarea{padding-top:.8rem}.input-field .prefix ~ label{margin-left:3rem}@media only screen and (max-width : 992px){.input-field .prefix ~ input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width : 600px){.input-field .prefix ~ input{width:80%;width:calc(100% - 3rem)}}.input-field input[type=search]{display:block;line-height:inherit;padding-left:4rem;width:calc(100% - 4rem)}.input-field input[type=search]:focus{background-color:#fff;border:0;box-shadow:none;color:#444}.input-field input[type=search]:focus+label i,.input-field input[type=search]:focus ~ .mdi-navigation-close{color:#444}.input-field input[type=search]+label{left:1rem}.input-field input[type=search] ~ .mdi-navigation-close{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;transition:.3s color}textarea{width:100%;height:3rem;background-color:transparent}textarea.materialize-textarea{overflow-y:hidden;padding:1.6rem 0;resize:none;min-height:3rem}.hiddendiv{display:none;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem}[type="radio"]:not(:checked),[type="radio"]:checked{position:absolute;left:-9999px;visibility:hidden}[type="radio"]:not(:checked)+label,[type="radio"]:checked+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}[type="radio"]+label:before,[type="radio"]+label:after{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease}[type="radio"]:not(:checked)+label:before{border-radius:50%;border:2px solid #5a5a5a}[type="radio"]:not(:checked)+label:after{border-radius:50%;border:2px solid #5a5a5a;z-index:-1;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0)}[type="radio"]:checked+label:before{border-radius:50%;border:2px solid transparent}[type="radio"]:checked+label:after{border-radius:50%;border:2px solid #26a69a;background-color:#26a69a;z-index:0;-webkit-transform:scale(1.02);-moz-transform:scale(1.02);-ms-transform:scale(1.02);-o-transform:scale(1.02);transform:scale(1.02)}[type="radio"].with-gap:checked+label:before{border-radius:50%;border:2px solid #26a69a}[type="radio"].with-gap:checked+label:after{border-radius:50%;border:2px solid #26a69a;background-color:#26a69a;z-index:0;-webkit-transform:scale(.5);-moz-transform:scale(.5);-ms-transform:scale(.5);-o-transform:scale(.5);transform:scale(.5)}[type="radio"].with-gap:disabled:checked+label:before{border:2px solid rgba(0,0,0,0.26)}[type="radio"].with-gap:disabled:checked+label:after{border:none;background-color:rgba(0,0,0,0.26)}[type="radio"]:disabled:not(:checked)+label:before,[type="radio"]:disabled:checked+label:before{background-color:transparent;border-color:rgba(0,0,0,0.26)}[type="radio"]:disabled+label{color:rgba(0,0,0,0.26)}[type="radio"]:disabled:not(:checked)+label:before{border-color:rgba(0,0,0,0.26)}[type="radio"]:disabled:checked+label:after{background-color:rgba(0,0,0,0.26);border-color:#BDBDBD}form p{margin-bottom:10px;text-align:left}form p:last-child{margin-bottom:0}[type="checkbox"]:not(:checked),[type="checkbox"]:checked{position:absolute;left:-9999px;visibility:hidden}[type="checkbox"]{}[type="checkbox"]+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}[type="checkbox"]+label:before{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:2px;-webkit-transition:0.2s;-moz-transition:0.2s;-o-transition:0.2s;-ms-transition:0.2s;transition:0.2s}[type="checkbox"]:not(:checked):disabled+label:before{border:none;background-color:rgba(0,0,0,0.26)}[type="checkbox"]:checked+label:before{top:-4px;left:-3px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #26a69a;border-bottom:2px solid #26a69a;-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked:disabled+label:before{border-right:2px solid rgba(0,0,0,0.26);border-bottom:2px solid rgba(0,0,0,0.26)}[type="checkbox"]:indeterminate+label:before{left:-10px;top:-11px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #26a69a;border-bottom:none;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:indeterminate:disabled+label:before{border-right:2px solid rgba(0,0,0,0.26);background-color:transparent}[type="checkbox"].filled-in+label:after{border-radius:2px}[type="checkbox"].filled-in+label:before,[type="checkbox"].filled-in+label:after{content:'';left:0;position:absolute;transition:border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s;z-index:1}[type="checkbox"].filled-in:not(:checked)+label:before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:20% 40%;transform-origin:100% 100%}[type="checkbox"].filled-in:not(:checked)+label:after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0px;z-index:0}[type="checkbox"].filled-in:checked+label:before{top:0;left:1px;width:8px;height:13px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:checked+label:after{top:0px;width:20px;height:20px;border:2px solid #26a69a;background-color:#26a69a;z-index:0}[type="checkbox"].filled-in:disabled:not(:checked)+label:before{background-color:transparent;border:2px solid transparent}[type="checkbox"].filled-in:disabled:not(:checked)+label:after{border-color:transparent;background-color:#BDBDBD}[type="checkbox"].filled-in:disabled:checked+label:before{background-color:transparent}[type="checkbox"].filled-in:disabled:checked+label:after{background-color:#BDBDBD;border-color:#BDBDBD}.switch,.switch *{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.switch label{cursor:pointer}.switch label input[type=checkbox]{opacity:0;width:0;height:0}.switch label input[type=checkbox]:checked+.lever{background-color:#84c7c1}.switch label input[type=checkbox]:checked+.lever:after{background-color:#26a69a}.switch label .lever{content:"";display:inline-block;position:relative;width:40px;height:15px;background-color:#818181;border-radius:15px;margin-right:10px;transition:background 0.3s ease;vertical-align:middle;margin:0 16px}.switch label .lever:after{content:"";position:absolute;display:inline-block;width:21px;height:21px;background-color:#F1F1F1;border-radius:21px;box-shadow:0 1px 3px 1px rgba(0,0,0,0.4);left:-5px;top:-3px;transition:left 0.3s ease,background .3s ease,box-shadow 0.1s ease}input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(38,166,154,0.1)}input[type=checkbox]:not(:disabled) ~ .lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,0,0,0.08)}.switch label input[type=checkbox]:checked+.lever:after{left:24px}.switch input[type=checkbox][disabled]+.lever{cursor:default}.switch label input[type=checkbox][disabled]+.lever:after,.switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#BDBDBD}.select-label{position:absolute}.select-wrapper{position:relative}.select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;outline:none;height:3rem;line-height:3rem;width:100%;font-size:1rem;margin:0 0 15px 0;padding:0;display:block}.select-wrapper span.caret{color:initial;position:absolute;right:0;top:16px;font-size:10px}.select-wrapper span.caret.disabled{color:rgba(0,0,0,0.26)}.select-wrapper+label{position:absolute;top:-14px;font-size:0.8rem}select{display:none}select.browser-default{display:block}select:disabled{color:rgba(0,0,0,0.3)}.select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,0.3);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;border-bottom:1px solid rgba(0,0,0,0.3)}.select-wrapper i{color:rgba(0,0,0,0.3)}.select-dropdown li.disabled{color:rgba(0,0,0,0.3);background-color:transparent}.file-field{position:relative}.file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.file-field input.file-path{width:100%}.file-field .btn,.file-field .btn-large{float:left;height:3rem;line-height:3rem}.file-field span{cursor:pointer}.file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.range-field{position:relative}input[type=range],input[type=range]+.thumb{cursor:pointer}input[type=range]{position:relative;background-color:transparent;border:none;outline:none;width:100%;margin:15px 0px;padding:0}input[type=range]+.thumb{position:absolute;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;top:10px;margin-left:-6px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-ms-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#26a69a;font-size:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}input[type=range]:focus{outline:none}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:14px;width:14px;border-radius:50%;background-color:#26a69a;transform-origin:50% 50%;margin:-5px 0 0 0;-webkit-transition:0.3s;-moz-transition:0.3s;-o-transition:0.3s;-ms-transition:0.3s;transition:0.3s}input[type=range]:focus::-webkit-slider-runnable-track{background:#ccc}input[type=range]{border:1px solid white}input[type=range]::-moz-range-track{height:3px;background:#ddd;border:none}input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;margin-top:-5px}input[type=range]:-moz-focusring{outline:1px solid white;outline-offset:-1px}input[type=range]:focus::-moz-range-track{background:#ccc}input[type=range]::-ms-track{height:3px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#777}input[type=range]::-ms-fill-upper{background:#ddd}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a}input[type=range]:focus::-ms-fill-lower{background:#888}input[type=range]:focus::-ms-fill-upper{background:#ccc}select{background-color:rgba(255,255,255,0.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.table-of-contents.fixed{position:fixed}.table-of-contents li{padding:2px 0}.table-of-contents a{display:inline-block;font-weight:300;color:#757575;padding-left:20px;height:1.5rem;line-height:1.5rem;letter-spacing:.4;display:inline-block}.table-of-contents a:hover{color:#a8a8a8;padding-left:19px;border-left:1px solid #ea4a4f}.table-of-contents a.active{font-weight:500;padding-left:18px;border-left:2px solid #ea4a4f}.side-nav{position:fixed;width:240px;left:-105%;top:0;margin:0;height:100%;height:calc(100% + 60px);height:-moz-calc(100%);padding-bottom:60px;background-color:#fff;z-index:999;overflow-y:auto;will-change:left}.side-nav.right-aligned{will-change:right;right:-105%;left:auto}.side-nav .collapsible{margin:0}.side-nav li{float:none;padding:0 15px}.side-nav li:hover,.side-nav li.active{background-color:#ddd}.side-nav a{color:#444;display:block;font-size:1rem;height:64px;line-height:64px;padding:0 15px}.drag-target{height:100%;width:10px;position:fixed;top:0;z-index:998}.side-nav.fixed a{display:block;padding:0 15px;color:#444}.side-nav.fixed{left:0;position:fixed}.side-nav.fixed.right-aligned{right:0;left:auto}@media only screen and (max-width : 992px){.side-nav.fixed{left:-105%}.side-nav.fixed.right-aligned{right:-105%;left:auto}}.side-nav .collapsible-body li.active,.side-nav.fixed .collapsible-body li.active{background-color:#ee6e73}.side-nav .collapsible-body li.active a,.side-nav.fixed .collapsible-body li.active a{color:#fff}#sidenav-overlay{position:fixed;top:0;left:0;right:0;height:120vh;background-color:rgba(0,0,0,0.5);z-index:997;will-change:opacity}.preloader-wrapper{display:inline-block;position:relative;width:48px;height:48px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.slider{position:relative;height:400px;width:100%}.slider.fullscreen{height:100%;width:100%;position:absolute;top:0;left:0;right:0;bottom:0}.slider.fullscreen ul.slides{height:100%}.slider.fullscreen ul.indicators{z-index:2;bottom:30px}.slider .slides{background-color:#9e9e9e;margin:0;height:400px}.slider .slides li{opacity:0;position:absolute;top:0;left:0;z-index:1;width:100%;height:inherit;overflow:hidden}.slider .slides li img{height:100%;width:100%;background-size:cover;background-position:center}.slider .slides li .caption{color:#fff;position:absolute;top:15%;left:15%;width:70%;opacity:0}.slider .slides li .caption p{color:#e0e0e0}.slider .slides li.active{z-index:2}.slider .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.slider .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:16px;width:16px;margin:0 12px;background-color:#e0e0e0;-webkit-transition:background-color .3s;-moz-transition:background-color .3s;-o-transition:background-color .3s;-ms-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.slider .indicators .indicator-item.active{background-color:#4CAF50}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}/*! - * Default mobile-first, responsive styling for pickadate.js - * Demo: http://amsul.github.io/pickadate.js - */.picker__holder,.picker__frame{bottom:0;left:0;right:0;top:100%}.picker__holder{position:fixed;-webkit-transition:background 0.15s ease-out,top 0s 0.15s;-moz-transition:background 0.15s ease-out,top 0s 0.15s;transition:background 0.15s ease-out,top 0s 0.15s;-webkit-backface-visibility:hidden}.picker__frame{position:absolute;margin:0 auto;min-width:256px;width:300px;max-height:350px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;-webkit-transition:all 0.15s ease-out;-moz-transition:all 0.15s ease-out;transition:all 0.15s ease-out}@media (min-height: 28.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}}@media (min-height: 40.125em){.picker__frame{margin-bottom:7.5%}}.picker__wrap{display:table;width:100%;height:100%}@media (min-height: 28.875em){.picker__wrap{display:block}}.picker__box{background:#ffffff;display:table-cell;vertical-align:middle}@media (min-height: 28.875em){.picker__box{display:block;border:1px solid #777777;border-top-color:#898989;border-bottom-width:0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 12px 36px 16px rgba(0,0,0,0.24);-moz-box-shadow:0 12px 36px 16px rgba(0,0,0,0.24);box-shadow:0 12px 36px 16px rgba(0,0,0,0.24)}}.picker--opened .picker__holder{top:0;background:transparent;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)";zoom:1;background:rgba(0,0,0,0.32);-webkit-transition:background 0.15s ease-out;-moz-transition:background 0.15s ease-out;transition:background 0.15s ease-out}.picker--opened .picker__frame{top:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1}@media (min-height: 35.875em){.picker--opened .picker__frame{top:10%;bottom:20% auto}}.picker__input.picker__input--active{border-color:#E3F2FD}.picker__frame{margin:0 auto;max-width:325px}@media (min-height: 38.875em){.picker--opened .picker__frame{top:10%;bottom:auto}}.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{display:inline-block;margin-left:.25em;margin-right:.25em}.picker__select--month,.picker__select--year{height:2em;padding:0;margin-left:.25em;margin-right:.25em}.picker__select--month.browser-default{display:inline;background-color:#FFFFFF;width:40%}.picker__select--year.browser-default{display:inline;background-color:#FFFFFF;width:25%}.picker__select--month:focus,.picker__select--year:focus{border-color:rgba(0,0,0,0.05)}.picker__nav--prev,.picker__nav--next{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-0.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:none;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:1rem;width:100%;margin-top:.75em;margin-bottom:.5em}.picker__table th,.picker__table td{text-align:center}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999999;font-weight:500}@media (min-height: 33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day--today{position:relative;color:#595959;letter-spacing:-.3;padding:.75rem 0;font-weight:400;border:1px solid transparent}.picker__day--disabled:before{border-top-color:#aaaaaa}.picker__day--infocus:hover{cursor:pointer;color:#000;font-weight:500}.picker__day--outfocus{display:none;padding:.75rem 0;color:#fff}.picker__day--outfocus:hover{cursor:pointer;color:#dddddd;font-weight:500}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{cursor:pointer}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(.75);-moz-transform:scale(.75);-ms-transform:scale(.75);-o-transform:scale(.75);transform:scale(.75);background:#0089ec;color:#ffffff}.picker__day--disabled,.picker__day--disabled:hover,.picker--focused .picker__day--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbbbbb}.picker__footer{text-align:center;display:flex;align-items:center;justify-content:space-between}.picker__button--today,.picker__button--clear,.picker__button--close{border:1px solid #ffffff;background:#ffffff;font-size:.8em;padding:.66em 0;font-weight:bold;width:33%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover,.picker__button--close:hover{cursor:pointer;color:#000000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus,.picker__button--close:focus{background:#b1dcfb;border-color:rgba(0,0,0,0.05);outline:none}.picker__button--today:before,.picker__button--clear:before,.picker__button--close:before{position:relative;display:inline-block;height:0}.picker__button--today:before,.picker__button--clear:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-0.05em;width:0;border-top:0.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-0.25em;width:.66em;border-top:3px solid #ee2200}.picker__button--close:before{content:"\D7";top:-0.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaaaaa}.picker__box{border-radius:2px;overflow:hidden}.picker__date-display{text-align:center;background-color:#26a69a;color:#fff;padding-bottom:15px;font-weight:300}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000000;background:#a1ded8}.picker__weekday-display{background-color:#1f897f;padding:10px;font-weight:200;letter-spacing:.5;font-size:1rem;margin-bottom:15px}.picker__month-display{text-transform:uppercase;font-size:2rem}.picker__day-display{font-size:4.5rem;font-weight:400}.picker__year-display{font-size:1.8rem;color:rgba(255,255,255,0.4)}.picker__box{padding:0}.picker__calendar-container{padding:0 1rem}.picker__calendar-container thead{border:none}.picker__table{margin-top:0;margin-bottom:.5em}.picker__day--infocus{color:#595959;letter-spacing:-.3;padding:.75rem 0;font-weight:400;border:1px solid transparent}.picker__day.picker__day--today{color:#26a69a}.picker__day.picker__day--today.picker__day--selected{color:#fff}.picker__weekday{font-size:.9rem}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);-o-transform:scale(.9);transform:scale(.9);background-color:#26a69a;color:#ffffff}.picker__day--selected.picker__day--outfocus,.picker__day--selected:hover.picker__day--outfocus,.picker--focused .picker__day--selected.picker__day--outfocus{background-color:#a1ded8}.picker__footer{text-align:right;padding:5px 10px}.picker__close,.picker__today{font-size:1.1rem;padding:0 1rem;color:#26a69a}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:0.75em solid #676767;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:0.75em solid #676767}button.picker__today:focus,button.picker__clear:focus,button.picker__close:focus{background-color:#a1ded8}.picker__list{list-style:none;padding:0.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #dddddd;border-top:1px solid #dddddd;margin-bottom:-1px;position:relative;background:#ffffff;padding:.75em 1.25em}@media (min-height: 46.75em){.picker__list-item{padding:.5em 1em}}.picker__list-item:hover{cursor:pointer;color:#000000;background:#b1dcfb;border-color:#0089ec;z-index:10}.picker__list-item--highlighted{border-color:#0089ec;z-index:10}.picker__list-item--highlighted:hover,.picker--focused .picker__list-item--highlighted{cursor:pointer;color:#000000;background:#b1dcfb}.picker__list-item--selected,.picker__list-item--selected:hover,.picker--focused .picker__list-item--selected{background:#0089ec;color:#ffffff;z-index:10}.picker__list-item--disabled,.picker__list-item--disabled:hover,.picker--focused .picker__list-item--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default;border-color:#dddddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:none;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:hover,.picker--time .picker__button--clear:focus{color:#000000;background:#b1dcfb;background:#ee2200;border-color:#ee2200;cursor:pointer;color:#ffffff;outline:none}.picker--time .picker__button--clear:before{top:-0.25em;color:#666;font-size:1.25em;font-weight:bold}.picker--time .picker__button--clear:hover:before,.picker--time .picker__button--clear:focus:before{color:#ffffff}.picker--time .picker__frame{min-width:256px;max-width:320px}.picker--time .picker__box{font-size:1em;background:#f2f2f2;padding:0}@media (min-height: 40.125em){.picker--time .picker__box{margin-bottom:5em}} \ No newline at end of file +/*! + * Materialize v0.100.2 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#a0f !important}.purple-text.text-accent-4{color:#a0f !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ff0 !important}.yellow-text.text-accent-2{color:#ff0 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eee !important}.grey-text.text-lighten-3{color:#eee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.black{background-color:#000 !important}.black-text{color:#000 !important}.white{background-color:#fff !important}.white-text{color:#fff !important}.transparent{background-color:transparent !important}.transparent-text{color:transparent !important}/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;box-sizing:inherit}ul:not(.browser-default){padding-left:0;list-style-type:none}ul:not(.browser-default)>li{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.clearfix{clear:both}.z-depth-0{-webkit-box-shadow:none !important;box-shadow:none !important}.z-depth-1,nav,.card-panel,.card,.toast,.btn,.btn-large,.btn-floating,.dropdown-content,.collapsible,.side-nav{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12),0 3px 1px -2px rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12),0 3px 1px -2px rgba(0,0,0,0.2)}.z-depth-1-half,.btn:hover,.btn-large:hover,.btn-floating:hover{-webkit-box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2);box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2)}.z-depth-2{-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3)}.z-depth-3{-webkit-box-shadow:0 6px 10px 0 rgba(0,0,0,0.14),0 1px 18px 0 rgba(0,0,0,0.12),0 3px 5px -1px rgba(0,0,0,0.3);box-shadow:0 6px 10px 0 rgba(0,0,0,0.14),0 1px 18px 0 rgba(0,0,0,0.12),0 3px 5px -1px rgba(0,0,0,0.3)}.z-depth-4,.modal{-webkit-box-shadow:0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.3);box-shadow:0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.3)}.z-depth-5{-webkit-box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -5px rgba(0,0,0,0.3);box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -5px rgba(0,0,0,0.3)}.hoverable{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s}.hoverable:hover{-webkit-box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #ee6e73}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{display:inline-block;border-radius:2px;text-align:center;vertical-align:top;height:30px}.pagination li a{color:#444;display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width: 992px){.pagination{width:100%}.pagination li.prev,.pagination li.next{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.breadcrumb{font-size:18px;color:rgba(255,255,255,0.7)}.breadcrumb i,.breadcrumb [class^="mdi-"],.breadcrumb [class*="mdi-"],.breadcrumb i.material-icons{display:inline-block;float:left;font-size:24px}.breadcrumb:before{content:'\E5CC';color:rgba(255,255,255,0.7);vertical-align:top;display:inline-block;font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:25px;margin:0 10px 0 8px;-webkit-font-smoothing:antialiased}.breadcrumb:first-child:before{display:none}.breadcrumb:last-child{color:#fff}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax-container .parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax-container .parallax img{display:none;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-transform:translateX(-50%);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%}@media only screen and (max-width: 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important}}@media only screen and (max-width: 992px){.hide-on-med-and-down{display:none !important}}@media only screen and (min-width: 601px){.hide-on-med-and-up{display:none !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important}}@media only screen and (min-width: 993px){.hide-on-large-only{display:none !important}}@media only screen and (min-width: 993px){.show-on-large{display:block !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:block !important}}@media only screen and (max-width: 600px){.show-on-small{display:block !important}}@media only screen and (min-width: 601px){.show-on-medium-and-up{display:block !important}}@media only screen and (max-width: 992px){.show-on-medium-and-down{display:block !important}}@media only screen and (max-width: 600px){.center-on-small-only{text-align:center}}.page-footer{padding-top:20px;color:#fff;background-color:#ee6e73}.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:10px 0px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table}table.bordered>thead>tr,table.bordered>tbody>tr{border-bottom:1px solid #d0d0d0}table.striped>tbody>tr:nth-child(odd){background-color:#f2f2f2}table.striped>tbody>tr>td{border-radius:0}table.highlight>tbody>tr{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}table.highlight>tbody>tr:hover{background-color:#f2f2f2}table.centered thead tr th,table.centered tbody tr td{text-align:center}thead{border-bottom:1px solid #d0d0d0}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width: 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table td:empty:before{content:'\00a0'}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid #d0d0d0}table.responsive-table.bordered th{border-bottom:0;border-left:0}table.responsive-table.bordered td{border-left:0;border-right:0;border-bottom:0}table.responsive-table.bordered tr{border:0}table.responsive-table.bordered tbody tr{border-right:1px solid #d0d0d0}}.collection{margin:.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar:not(.circle-clipper)>.circle,.collection .collection-item.avatar :not(.circle-clipper)>.circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection .collection-item.active .secondary-content{color:#fff}.collection a.collection-item{display:block;-webkit-transition:.25s;transition:.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.collection.with-header .collection-item.avatar{padding-left:72px}.secondary-content{float:right;color:#26a69a}.collapsible .collection{margin:0;border:none}.video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#26a69a;-webkit-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select,input[type=range],input[type=range]+.thumb{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}span.badge{min-width:3rem;padding:0 6px;margin-left:14px;text-align:center;font-size:1rem;line-height:22px;height:22px;color:#757575;float:right;-webkit-box-sizing:border-box;box-sizing:border-box}span.badge.new{font-weight:300;font-size:0.8rem;color:#fff;background-color:#26a69a;border-radius:2px}span.badge.new:after{content:" new"}span.badge[data-badge-caption]::after{content:" " attr(data-badge-caption)}nav ul a span.badge{display:inline-block;float:none;margin-left:4px;line-height:22px;height:22px;-webkit-font-smoothing:auto}.collection-item span.badge{margin-top:calc(.75rem - 11px)}.collapsible span.badge{margin-left:auto}.side-nav span.badge{margin-top:calc(24px - 11px)}.material-icons{text-rendering:optimizeLegibility;-webkit-font-feature-settings:'liga';-moz-font-feature-settings:'liga';font-feature-settings:'liga'}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width: 601px){.container{width:85%}}@media only screen and (min-width: 993px){.container{width:70%}}.container .row{margin-left:-.75rem;margin-right:-.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 .75rem;min-height:1px}.row .col[class*="push-"],.row .col[class*="pull-"]{position:relative}.row .col.s1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.s4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.s7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.s10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-s1{margin-left:8.3333333333%}.row .col.pull-s1{right:8.3333333333%}.row .col.push-s1{left:8.3333333333%}.row .col.offset-s2{margin-left:16.6666666667%}.row .col.pull-s2{right:16.6666666667%}.row .col.push-s2{left:16.6666666667%}.row .col.offset-s3{margin-left:25%}.row .col.pull-s3{right:25%}.row .col.push-s3{left:25%}.row .col.offset-s4{margin-left:33.3333333333%}.row .col.pull-s4{right:33.3333333333%}.row .col.push-s4{left:33.3333333333%}.row .col.offset-s5{margin-left:41.6666666667%}.row .col.pull-s5{right:41.6666666667%}.row .col.push-s5{left:41.6666666667%}.row .col.offset-s6{margin-left:50%}.row .col.pull-s6{right:50%}.row .col.push-s6{left:50%}.row .col.offset-s7{margin-left:58.3333333333%}.row .col.pull-s7{right:58.3333333333%}.row .col.push-s7{left:58.3333333333%}.row .col.offset-s8{margin-left:66.6666666667%}.row .col.pull-s8{right:66.6666666667%}.row .col.push-s8{left:66.6666666667%}.row .col.offset-s9{margin-left:75%}.row .col.pull-s9{right:75%}.row .col.push-s9{left:75%}.row .col.offset-s10{margin-left:83.3333333333%}.row .col.pull-s10{right:83.3333333333%}.row .col.push-s10{left:83.3333333333%}.row .col.offset-s11{margin-left:91.6666666667%}.row .col.pull-s11{right:91.6666666667%}.row .col.push-s11{left:91.6666666667%}.row .col.offset-s12{margin-left:100%}.row .col.pull-s12{right:100%}.row .col.push-s12{left:100%}@media only screen and (min-width: 601px){.row .col.m1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.m4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.m7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.m10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-m1{margin-left:8.3333333333%}.row .col.pull-m1{right:8.3333333333%}.row .col.push-m1{left:8.3333333333%}.row .col.offset-m2{margin-left:16.6666666667%}.row .col.pull-m2{right:16.6666666667%}.row .col.push-m2{left:16.6666666667%}.row .col.offset-m3{margin-left:25%}.row .col.pull-m3{right:25%}.row .col.push-m3{left:25%}.row .col.offset-m4{margin-left:33.3333333333%}.row .col.pull-m4{right:33.3333333333%}.row .col.push-m4{left:33.3333333333%}.row .col.offset-m5{margin-left:41.6666666667%}.row .col.pull-m5{right:41.6666666667%}.row .col.push-m5{left:41.6666666667%}.row .col.offset-m6{margin-left:50%}.row .col.pull-m6{right:50%}.row .col.push-m6{left:50%}.row .col.offset-m7{margin-left:58.3333333333%}.row .col.pull-m7{right:58.3333333333%}.row .col.push-m7{left:58.3333333333%}.row .col.offset-m8{margin-left:66.6666666667%}.row .col.pull-m8{right:66.6666666667%}.row .col.push-m8{left:66.6666666667%}.row .col.offset-m9{margin-left:75%}.row .col.pull-m9{right:75%}.row .col.push-m9{left:75%}.row .col.offset-m10{margin-left:83.3333333333%}.row .col.pull-m10{right:83.3333333333%}.row .col.push-m10{left:83.3333333333%}.row .col.offset-m11{margin-left:91.6666666667%}.row .col.pull-m11{right:91.6666666667%}.row .col.push-m11{left:91.6666666667%}.row .col.offset-m12{margin-left:100%}.row .col.pull-m12{right:100%}.row .col.push-m12{left:100%}}@media only screen and (min-width: 993px){.row .col.l1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.l4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.l7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.l10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-l1{margin-left:8.3333333333%}.row .col.pull-l1{right:8.3333333333%}.row .col.push-l1{left:8.3333333333%}.row .col.offset-l2{margin-left:16.6666666667%}.row .col.pull-l2{right:16.6666666667%}.row .col.push-l2{left:16.6666666667%}.row .col.offset-l3{margin-left:25%}.row .col.pull-l3{right:25%}.row .col.push-l3{left:25%}.row .col.offset-l4{margin-left:33.3333333333%}.row .col.pull-l4{right:33.3333333333%}.row .col.push-l4{left:33.3333333333%}.row .col.offset-l5{margin-left:41.6666666667%}.row .col.pull-l5{right:41.6666666667%}.row .col.push-l5{left:41.6666666667%}.row .col.offset-l6{margin-left:50%}.row .col.pull-l6{right:50%}.row .col.push-l6{left:50%}.row .col.offset-l7{margin-left:58.3333333333%}.row .col.pull-l7{right:58.3333333333%}.row .col.push-l7{left:58.3333333333%}.row .col.offset-l8{margin-left:66.6666666667%}.row .col.pull-l8{right:66.6666666667%}.row .col.push-l8{left:66.6666666667%}.row .col.offset-l9{margin-left:75%}.row .col.pull-l9{right:75%}.row .col.push-l9{left:75%}.row .col.offset-l10{margin-left:83.3333333333%}.row .col.pull-l10{right:83.3333333333%}.row .col.push-l10{left:83.3333333333%}.row .col.offset-l11{margin-left:91.6666666667%}.row .col.pull-l11{right:91.6666666667%}.row .col.push-l11{left:91.6666666667%}.row .col.offset-l12{margin-left:100%}.row .col.pull-l12{right:100%}.row .col.push-l12{left:100%}}@media only screen and (min-width: 1201px){.row .col.xl1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.xl4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.xl7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.xl10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-xl1{margin-left:8.3333333333%}.row .col.pull-xl1{right:8.3333333333%}.row .col.push-xl1{left:8.3333333333%}.row .col.offset-xl2{margin-left:16.6666666667%}.row .col.pull-xl2{right:16.6666666667%}.row .col.push-xl2{left:16.6666666667%}.row .col.offset-xl3{margin-left:25%}.row .col.pull-xl3{right:25%}.row .col.push-xl3{left:25%}.row .col.offset-xl4{margin-left:33.3333333333%}.row .col.pull-xl4{right:33.3333333333%}.row .col.push-xl4{left:33.3333333333%}.row .col.offset-xl5{margin-left:41.6666666667%}.row .col.pull-xl5{right:41.6666666667%}.row .col.push-xl5{left:41.6666666667%}.row .col.offset-xl6{margin-left:50%}.row .col.pull-xl6{right:50%}.row .col.push-xl6{left:50%}.row .col.offset-xl7{margin-left:58.3333333333%}.row .col.pull-xl7{right:58.3333333333%}.row .col.push-xl7{left:58.3333333333%}.row .col.offset-xl8{margin-left:66.6666666667%}.row .col.pull-xl8{right:66.6666666667%}.row .col.push-xl8{left:66.6666666667%}.row .col.offset-xl9{margin-left:75%}.row .col.pull-xl9{right:75%}.row .col.push-xl9{left:75%}.row .col.offset-xl10{margin-left:83.3333333333%}.row .col.pull-xl10{right:83.3333333333%}.row .col.push-xl10{left:83.3333333333%}.row .col.offset-xl11{margin-left:91.6666666667%}.row .col.pull-xl11{right:91.6666666667%}.row .col.push-xl11{left:91.6666666667%}.row .col.offset-xl12{margin-left:100%}.row .col.pull-xl12{right:100%}.row .col.push-xl12{left:100%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav.nav-extended{height:auto}nav.nav-extended .nav-wrapper{min-height:56px;height:auto}nav.nav-extended .nav-content{position:relative;line-height:normal}nav a{color:#fff}nav i,nav [class^="mdi-"],nav [class*="mdi-"],nav i.material-icons{display:block;font-size:24px;height:56px;line-height:56px}nav .nav-wrapper{position:relative;height:100%}@media only screen and (min-width: 993px){nav a.button-collapse{display:none}}nav .button-collapse{float:left;position:relative;z-index:1;height:56px;margin:0 18px}nav .button-collapse i{height:56px;line-height:56px}nav .brand-logo{position:absolute;color:#fff;display:inline-block;font-size:2.1rem;padding:0}nav .brand-logo.center{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}@media only screen and (max-width: 992px){nav .brand-logo{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}nav .brand-logo.left,nav .brand-logo.right{padding:0;-webkit-transform:none;transform:none}nav .brand-logo.left{left:0.5rem}nav .brand-logo.right{right:0.5rem;left:auto}}nav .brand-logo.right{right:0.5rem;padding:0}nav .brand-logo i,nav .brand-logo [class^="mdi-"],nav .brand-logo [class*="mdi-"],nav .brand-logo i.material-icons{float:left;margin-right:15px}nav .nav-title{display:inline-block;font-size:32px;padding:28px 0}nav ul{margin:0}nav ul li{-webkit-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{-webkit-transition:background-color .3s;transition:background-color .3s;font-size:1rem;color:#fff;display:block;padding:0 15px;cursor:pointer}nav ul a.btn,nav ul a.btn-large,nav ul a.btn-large,nav ul a.btn-flat,nav ul a.btn-floating{margin-top:-2px;margin-left:15px;margin-right:15px}nav ul a.btn>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-flat>.material-icons,nav ul a.btn-floating>.material-icons{height:inherit;line-height:inherit}nav ul a:hover{background-color:rgba(0,0,0,0.1)}nav ul.left{float:left}nav form{height:100%}nav .input-field{margin:0;height:100%}nav .input-field input{height:100%;font-size:1.2rem;border:none;padding-left:2rem}nav .input-field input:focus,nav .input-field input[type=text]:valid,nav .input-field input[type=password]:valid,nav .input-field input[type=email]:valid,nav .input-field input[type=url]:valid,nav .input-field input[type=date]:valid{border:none;-webkit-box-shadow:none;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);-webkit-transition:color .3s;transition:color .3s}nav .input-field label.active i{color:#fff}.navbar-fixed{position:relative;height:56px;z-index:997}.navbar-fixed nav{position:fixed}@media only screen and (min-width: 601px){nav.nav-extended .nav-wrapper{min-height:64px}nav,nav .nav-wrapper i,nav a.button-collapse,nav a.button-collapse i{height:64px;line-height:64px}.navbar-fixed{height:64px}}@font-face{font-family:"Roboto";src:local(Roboto Thin),url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"),url("../fonts/roboto/Roboto-Thin.woff") format("woff");font-weight:100}@font-face{font-family:"Roboto";src:local(Roboto Light),url("../fonts/roboto/Roboto-Light.woff2") format("woff2"),url("../fonts/roboto/Roboto-Light.woff") format("woff");font-weight:300}@font-face{font-family:"Roboto";src:local(Roboto Regular),url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"),url("../fonts/roboto/Roboto-Regular.woff") format("woff");font-weight:400}@font-face{font-family:"Roboto";src:local(Roboto Medium),url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"),url("../fonts/roboto/Roboto-Medium.woff") format("woff");font-weight:500}@font-face{font-family:"Roboto";src:local(Roboto Bold),url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"),url("../fonts/roboto/Roboto-Bold.woff") format("woff");font-weight:700}a{text-decoration:none}html{line-height:1.5;font-family:"Roboto", sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px}}@media only screen and (min-width: 992px){html{font-size:14.5px}}@media only screen and (min-width: 1200px){html{font-size:15px}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.1}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:110%;margin:2.1rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:110%;margin:1.78rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:110%;margin:1.46rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:110%;margin:1.14rem 0 .912rem 0}h5{font-size:1.64rem;line-height:110%;margin:.82rem 0 .656rem 0}h6{font-size:1rem;line-height:110%;margin:.5rem 0 .4rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light,.page-footer .footer-copyright{font-weight:300}.thin{font-weight:200}.flow-text{font-weight:300}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem}}@media only screen and (max-width: 360px){.flow-text{font-size:1.2rem}}.scale-transition{-webkit-transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63), -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important}.scale-transition.scale-out{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .2s !important;transition:-webkit-transform .2s !important;transition:transform .2s !important;transition:transform .2s, -webkit-transform .2s !important}.scale-transition.scale-in{-webkit-transform:scale(1);transform:scale(1)}.card-panel{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;padding:24px;margin:.5rem 0 1rem 0;border-radius:2px;background-color:#fff}.card{position:relative;margin:.5rem 0 1rem 0;background-color:#fff;-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;border-radius:2px}.card .card-title{font-size:24px;font-weight:300}.card .card-title.activator{cursor:pointer}.card.small,.card.medium,.card.large{position:relative}.card.small .card-image,.card.medium .card-image,.card.large .card-image{max-height:60%;overflow:hidden}.card.small .card-image+.card-content,.card.medium .card-image+.card-content,.card.large .card-image+.card-content{max-height:40%}.card.small .card-content,.card.medium .card-content,.card.large .card-content{max-height:100%;overflow:hidden}.card.small .card-action,.card.medium .card-action,.card.large .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.medium{height:400px}.card.large{height:500px}.card.horizontal{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.card.horizontal.small .card-image,.card.horizontal.medium .card-image,.card.horizontal.large .card-image{height:100%;max-height:none;overflow:visible}.card.horizontal.small .card-image img,.card.horizontal.medium .card-image img,.card.horizontal.large .card-image img{height:100%}.card.horizontal .card-image{max-width:50%}.card.horizontal .card-image img{border-radius:2px 0 0 2px;max-width:100%;width:auto}.card.horizontal .card-stacked{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.card.horizontal .card-stacked .card-content{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.card.sticky-action .card-action{z-index:2}.card.sticky-action .card-reveal{z-index:1;padding-bottom:64px}.card .card-image{position:relative}.card .card-image img{display:block;border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{color:#fff;position:absolute;bottom:0;left:0;max-width:100%;padding:24px}.card .card-content{padding:24px;border-radius:0 0 2px 2px}.card .card-content p{margin:0;color:inherit}.card .card-content .card-title{display:block;line-height:32px;margin-bottom:8px}.card .card-content .card-title i{line-height:32px}.card .card-action{position:relative;background-color:inherit;border-top:1px solid rgba(160,160,160,0.2);padding:16px 24px}.card .card-action:last-child{border-radius:0 0 2px 2px}.card .card-action a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating){color:#ffab40;margin-right:24px;-webkit-transition:color .3s ease;transition:color .3s ease;text-transform:uppercase}.card .card-action a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating):hover{color:#ffd8a6}.card .card-reveal{padding:24px;position:absolute;background-color:#fff;width:100%;overflow-y:auto;left:0;top:100%;height:100%;z-index:3;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}#toast-container{display:block;position:fixed;z-index:10000}@media only screen and (max-width: 600px){#toast-container{min-width:100%;bottom:0%}}@media only screen and (min-width: 601px) and (max-width: 992px){#toast-container{left:5%;bottom:7%;max-width:90%}}@media only screen and (min-width: 993px){#toast-container{top:10%;right:7%;max-width:86%}}.toast{border-radius:2px;top:35px;width:auto;margin-top:10px;position:relative;max-width:100%;height:auto;min-height:48px;line-height:1.5em;word-break:break-all;background-color:#323232;padding:10px 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;cursor:default}.toast .toast-action{color:#eeff41;font-weight:500;margin-right:-25px;margin-left:3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width: 600px){.toast{width:100%;border-radius:0}}.tabs{position:relative;overflow-x:auto;overflow-y:hidden;height:48px;width:100%;background-color:#fff;margin:0 auto;white-space:nowrap}.tabs.tabs-transparent{background-color:transparent}.tabs.tabs-transparent .tab a,.tabs.tabs-transparent .tab.disabled a,.tabs.tabs-transparent .tab.disabled a:hover{color:rgba(255,255,255,0.7)}.tabs.tabs-transparent .tab a:hover,.tabs.tabs-transparent .tab a.active{color:#fff}.tabs.tabs-transparent .indicator{background-color:#fff}.tabs.tabs-fixed-width{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs.tabs-fixed-width .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab{display:inline-block;text-align:center;line-height:48px;height:48px;padding:0;margin:0;text-transform:uppercase}.tabs .tab a{color:rgba(238,110,115,0.7);display:block;width:100%;height:100%;padding:0 24px;font-size:14px;text-overflow:ellipsis;overflow:hidden;-webkit-transition:color .28s ease;transition:color .28s ease}.tabs .tab a:hover,.tabs .tab a.active{background-color:transparent;color:#ee6e73}.tabs .tab.disabled a,.tabs .tab.disabled a:hover{color:rgba(238,110,115,0.7);cursor:default}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#f6b2b5;will-change:left, right}@media only screen and (max-width: 992px){.tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab a{padding:0 12px}}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:2000;background-color:transparent;border-radius:2px;color:#fff;min-height:36px;line-height:120%;opacity:0;position:absolute;text-align:center;max-width:calc(100% - 4px);overflow:hidden;left:0;top:0;pointer-events:none;visibility:hidden}.backdrop{position:absolute;opacity:0;height:7px;width:14px;border-radius:0 0 50% 50%;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 0%;transform-origin:50% 0%;visibility:hidden}.btn,.btn-large,.btn-flat{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;padding:0 2rem;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn.disabled,.disabled.btn-large,.btn-floating.disabled,.btn-large.disabled,.btn-flat.disabled,.btn:disabled,.btn-large:disabled,.btn-floating:disabled,.btn-large:disabled,.btn-flat:disabled,.btn[disabled],[disabled].btn-large,.btn-floating[disabled],.btn-large[disabled],.btn-flat[disabled]{pointer-events:none;background-color:#DFDFDF !important;-webkit-box-shadow:none;box-shadow:none;color:#9F9F9F !important;cursor:default}.btn.disabled:hover,.disabled.btn-large:hover,.btn-floating.disabled:hover,.btn-large.disabled:hover,.btn-flat.disabled:hover,.btn:disabled:hover,.btn-large:disabled:hover,.btn-floating:disabled:hover,.btn-large:disabled:hover,.btn-flat:disabled:hover,.btn[disabled]:hover,[disabled].btn-large:hover,.btn-floating[disabled]:hover,.btn-large[disabled]:hover,.btn-flat[disabled]:hover{background-color:#DFDFDF !important;color:#9F9F9F !important}.btn,.btn-large,.btn-floating,.btn-large,.btn-flat{font-size:1rem;outline:0}.btn i,.btn-large i,.btn-floating i,.btn-large i,.btn-flat i{font-size:1.3rem;line-height:inherit}.btn:focus,.btn-large:focus,.btn-floating:focus{background-color:#1d7d74}.btn,.btn-large{text-decoration:none;color:#fff;background-color:#26a69a;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.btn:hover,.btn-large:hover{background-color:#2bbbad}.btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:40px;height:40px;line-height:40px;padding:0;background-color:#26a69a;border-radius:50%;-webkit-transition:.3s;transition:.3s;cursor:pointer;vertical-align:middle}.btn-floating:hover{background-color:#26a69a}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:56px;height:56px}.btn-floating.btn-large.halfway-fab{bottom:-28px}.btn-floating.btn-large i{line-height:56px}.btn-floating.halfway-fab{position:absolute;right:24px;bottom:-20px}.btn-floating.halfway-fab.left{right:auto;left:24px}.btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:40px}button.btn-floating{border:none}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:997}.fixed-action-btn.active ul{visibility:visible}.fixed-action-btn.horizontal{padding:0 0 0 15px}.fixed-action-btn.horizontal ul{text-align:right;right:64px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%;left:auto;width:500px}.fixed-action-btn.horizontal ul li{display:inline-block;margin:15px 15px 0 0}.fixed-action-btn.toolbar{padding:0;height:56px}.fixed-action-btn.toolbar.active>a i{opacity:0}.fixed-action-btn.toolbar ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;top:0;bottom:0;z-index:1}.fixed-action-btn.toolbar ul li{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:inline-block;margin:0;height:100%;-webkit-transition:none;transition:none}.fixed-action-btn.toolbar ul li a{display:block;overflow:hidden;position:relative;width:100%;height:100%;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;color:#fff;line-height:56px;z-index:1}.fixed-action-btn.toolbar ul li a i{line-height:inherit}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0;visibility:hidden}.fixed-action-btn ul li{margin-bottom:15px}.fixed-action-btn ul a.btn-floating{opacity:0}.fixed-action-btn .fab-backdrop{position:absolute;top:0;left:0;z-index:-1;width:40px;height:40px;background-color:#26a69a;border-radius:50%;-webkit-transform:scale(0);transform:scale(0)}.btn-flat{-webkit-box-shadow:none;box-shadow:none;background-color:transparent;color:#343434;cursor:pointer;-webkit-transition:background-color .2s;transition:background-color .2s}.btn-flat:focus,.btn-flat:hover{-webkit-box-shadow:none;box-shadow:none}.btn-flat:focus{background-color:rgba(0,0,0,0.1)}.btn-flat.disabled{background-color:transparent !important;color:#b3b2b2 !important;cursor:default}.btn-large{height:54px;line-height:54px}.btn-large i{font-size:1.6rem}.btn-block{display:block}.dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;max-height:650px;overflow-y:auto;opacity:0;position:absolute;z-index:999;will-change:width, height}.dropdown-content li{clear:both;color:rgba(0,0,0,0.87);cursor:pointer;min-height:50px;line-height:1.5rem;width:100%;text-align:left;text-transform:none}.dropdown-content li:hover,.dropdown-content li.active,.dropdown-content li.selected{background-color:#eee}.dropdown-content li.active.selected{background-color:#e1e1e1}.dropdown-content li.divider{min-height:0;height:1px}.dropdown-content li>a,.dropdown-content li>span{font-size:16px;color:#26a69a;display:block;line-height:22px;padding:14px 16px}.dropdown-content li>span>label{top:1px;left:0;height:18px}.dropdown-content li>a>i{height:inherit;line-height:inherit;float:left;margin:0 24px 0 0;width:24px}.input-field.col .dropdown-content [type="checkbox"]+label{top:1px;left:0;height:18px}/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;-webkit-transition:.3s ease-out;transition:.3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:transform, opacity;transition-property:transform, opacity, -webkit-transform;-webkit-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-effect input[type="button"],.waves-effect input[type="reset"],.waves-effect input[type="submit"]{border:0;font-style:normal;font-size:inherit;text-transform:inherit;background:none}.waves-effect img{position:relative;z-index:-1}.waves-notransition{-webkit-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top, opacity}@media only screen and (max-width: 992px){.modal{width:80%}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-close{cursor:pointer}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%;text-align:right}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-flat{margin:6px 0}.modal-overlay{position:fixed;z-index:999;top:-25%;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 56px);max-height:100%;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:absolute;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:.5rem 0 1rem 0}.collapsible-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;-webkit-tap-highlight-color:transparent;line-height:1.5;padding:1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header i{width:2rem;font-size:1.6rem;display:inline-block;text-align:center;margin-right:1rem}.collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;padding:2rem}.side-nav .collapsible,.side-nav.fixed .collapsible{border:none;-webkit-box-shadow:none;box-shadow:none}.side-nav .collapsible li,.side-nav.fixed .collapsible li{padding:0}.side-nav .collapsible-header,.side-nav.fixed .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;padding:0 16px}.side-nav .collapsible-header:hover,.side-nav.fixed .collapsible-header:hover{background-color:rgba(0,0,0,0.05)}.side-nav .collapsible-header i,.side-nav.fixed .collapsible-header i{line-height:inherit}.side-nav .collapsible-body,.side-nav.fixed .collapsible-body{border:0;background-color:#fff}.side-nav .collapsible-body li a,.side-nav.fixed .collapsible-body li a{padding:0 23.5px 0 31px}.collapsible.popout{border:none;-webkit-box-shadow:none;box-shadow:none}.collapsible.popout>li{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);margin:0 24px;-webkit-transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.collapsible.popout>li.active{-webkit-box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);margin:16px 0}.chip{display:inline-block;height:32px;font-size:13px;font-weight:500;color:rgba(0,0,0,0.6);line-height:32px;padding:0 12px;border-radius:16px;background-color:#e4e4e4;margin-bottom:5px;margin-right:5px}.chip>img{float:left;margin:0 8px 0 -12px;height:32px;width:32px;border-radius:50%}.chip .close{cursor:pointer;float:right;font-size:16px;line-height:32px;padding-left:8px}.chips{border:none;border-bottom:1px solid #9e9e9e;-webkit-box-shadow:none;box-shadow:none;margin:0 0 20px 0;min-height:45px;outline:none;-webkit-transition:all .3s;transition:all .3s}.chips.focus{border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}.chips:hover{cursor:text}.chips .chip.selected{background-color:#26a69a;color:#fff}.chips .input{background:none;border:0;color:rgba(0,0,0,0.6);display:inline-block;font-size:1rem;height:3rem;line-height:32px;outline:0;margin:0;padding:0 !important;width:120px !important}.chips .input:focus{border:0 !important;-webkit-box-shadow:none !important;box-shadow:none !important}.chips .autocomplete-content{margin-top:0;margin-bottom:0}.prefix ~ .chips{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.chips:empty ~ label{font-size:0.8rem;-webkit-transform:translateY(-140%);transform:translateY(-140%)}.materialboxed{display:block;cursor:-webkit-zoom-in;cursor:zoom-in;position:relative;-webkit-transition:opacity .4s;transition:opacity .4s;-webkit-backface-visibility:hidden}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:-webkit-zoom-out;cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#292929;z-index:1000;will-change:opacity}.materialbox-caption{position:fixed;display:none;color:#fff;line-height:50px;bottom:0;left:0;width:100%;text-align:center;padding:0% 15%;height:50px;z-index:1000;-webkit-font-smoothing:antialiased}select:focus{outline:1px solid #c9f3ef}button:focus{outline:none;background-color:#2ab7a9}label{font-size:.8rem;color:#9e9e9e}::-webkit-input-placeholder{color:#d1d1d1}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}::placeholder{color:#d1d1d1}input:not([type]),input[type=text]:not(.browser-default),input[type=password]:not(.browser-default),input[type=email]:not(.browser-default),input[type=url]:not(.browser-default),input[type=time]:not(.browser-default),input[type=date]:not(.browser-default),input[type=datetime]:not(.browser-default),input[type=datetime-local]:not(.browser-default),input[type=tel]:not(.browser-default),input[type=number]:not(.browser-default),input[type=search]:not(.browser-default),textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:3rem;width:100%;font-size:1rem;margin:0 0 20px 0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-transition:all 0.3s;transition:all 0.3s}input:not([type]):disabled,input:not([type])[readonly="readonly"],input[type=text]:not(.browser-default):disabled,input[type=text]:not(.browser-default)[readonly="readonly"],input[type=password]:not(.browser-default):disabled,input[type=password]:not(.browser-default)[readonly="readonly"],input[type=email]:not(.browser-default):disabled,input[type=email]:not(.browser-default)[readonly="readonly"],input[type=url]:not(.browser-default):disabled,input[type=url]:not(.browser-default)[readonly="readonly"],input[type=time]:not(.browser-default):disabled,input[type=time]:not(.browser-default)[readonly="readonly"],input[type=date]:not(.browser-default):disabled,input[type=date]:not(.browser-default)[readonly="readonly"],input[type=datetime]:not(.browser-default):disabled,input[type=datetime]:not(.browser-default)[readonly="readonly"],input[type=datetime-local]:not(.browser-default):disabled,input[type=datetime-local]:not(.browser-default)[readonly="readonly"],input[type=tel]:not(.browser-default):disabled,input[type=tel]:not(.browser-default)[readonly="readonly"],input[type=number]:not(.browser-default):disabled,input[type=number]:not(.browser-default)[readonly="readonly"],input[type=search]:not(.browser-default):disabled,input[type=search]:not(.browser-default)[readonly="readonly"],textarea.materialize-textarea:disabled,textarea.materialize-textarea[readonly="readonly"]{color:rgba(0,0,0,0.42);border-bottom:1px dotted rgba(0,0,0,0.42)}input:not([type]):disabled+label,input:not([type])[readonly="readonly"]+label,input[type=text]:not(.browser-default):disabled+label,input[type=text]:not(.browser-default)[readonly="readonly"]+label,input[type=password]:not(.browser-default):disabled+label,input[type=password]:not(.browser-default)[readonly="readonly"]+label,input[type=email]:not(.browser-default):disabled+label,input[type=email]:not(.browser-default)[readonly="readonly"]+label,input[type=url]:not(.browser-default):disabled+label,input[type=url]:not(.browser-default)[readonly="readonly"]+label,input[type=time]:not(.browser-default):disabled+label,input[type=time]:not(.browser-default)[readonly="readonly"]+label,input[type=date]:not(.browser-default):disabled+label,input[type=date]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime]:not(.browser-default):disabled+label,input[type=datetime]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime-local]:not(.browser-default):disabled+label,input[type=datetime-local]:not(.browser-default)[readonly="readonly"]+label,input[type=tel]:not(.browser-default):disabled+label,input[type=tel]:not(.browser-default)[readonly="readonly"]+label,input[type=number]:not(.browser-default):disabled+label,input[type=number]:not(.browser-default)[readonly="readonly"]+label,input[type=search]:not(.browser-default):disabled+label,input[type=search]:not(.browser-default)[readonly="readonly"]+label,textarea.materialize-textarea:disabled+label,textarea.materialize-textarea[readonly="readonly"]+label{color:rgba(0,0,0,0.42)}input:not([type]):focus:not([readonly]),input[type=text]:not(.browser-default):focus:not([readonly]),input[type=password]:not(.browser-default):focus:not([readonly]),input[type=email]:not(.browser-default):focus:not([readonly]),input[type=url]:not(.browser-default):focus:not([readonly]),input[type=time]:not(.browser-default):focus:not([readonly]),input[type=date]:not(.browser-default):focus:not([readonly]),input[type=datetime]:not(.browser-default):focus:not([readonly]),input[type=datetime-local]:not(.browser-default):focus:not([readonly]),input[type=tel]:not(.browser-default):focus:not([readonly]),input[type=number]:not(.browser-default):focus:not([readonly]),input[type=search]:not(.browser-default):focus:not([readonly]),textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}input:not([type]):focus:not([readonly])+label,input[type=text]:not(.browser-default):focus:not([readonly])+label,input[type=password]:not(.browser-default):focus:not([readonly])+label,input[type=email]:not(.browser-default):focus:not([readonly])+label,input[type=url]:not(.browser-default):focus:not([readonly])+label,input[type=time]:not(.browser-default):focus:not([readonly])+label,input[type=date]:not(.browser-default):focus:not([readonly])+label,input[type=datetime]:not(.browser-default):focus:not([readonly])+label,input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,input[type=tel]:not(.browser-default):focus:not([readonly])+label,input[type=number]:not(.browser-default):focus:not([readonly])+label,input[type=search]:not(.browser-default):focus:not([readonly])+label,textarea.materialize-textarea:focus:not([readonly])+label{color:#26a69a}input:not([type]).validate+label,input[type=text]:not(.browser-default).validate+label,input[type=password]:not(.browser-default).validate+label,input[type=email]:not(.browser-default).validate+label,input[type=url]:not(.browser-default).validate+label,input[type=time]:not(.browser-default).validate+label,input[type=date]:not(.browser-default).validate+label,input[type=datetime]:not(.browser-default).validate+label,input[type=datetime-local]:not(.browser-default).validate+label,input[type=tel]:not(.browser-default).validate+label,input[type=number]:not(.browser-default).validate+label,input[type=search]:not(.browser-default).validate+label,textarea.materialize-textarea.validate+label{width:100%}input:not([type]).invalid+label:after,input:not([type]).valid+label:after,input[type=text]:not(.browser-default).invalid+label:after,input[type=text]:not(.browser-default).valid+label:after,input[type=password]:not(.browser-default).invalid+label:after,input[type=password]:not(.browser-default).valid+label:after,input[type=email]:not(.browser-default).invalid+label:after,input[type=email]:not(.browser-default).valid+label:after,input[type=url]:not(.browser-default).invalid+label:after,input[type=url]:not(.browser-default).valid+label:after,input[type=time]:not(.browser-default).invalid+label:after,input[type=time]:not(.browser-default).valid+label:after,input[type=date]:not(.browser-default).invalid+label:after,input[type=date]:not(.browser-default).valid+label:after,input[type=datetime]:not(.browser-default).invalid+label:after,input[type=datetime]:not(.browser-default).valid+label:after,input[type=datetime-local]:not(.browser-default).invalid+label:after,input[type=datetime-local]:not(.browser-default).valid+label:after,input[type=tel]:not(.browser-default).invalid+label:after,input[type=tel]:not(.browser-default).valid+label:after,input[type=number]:not(.browser-default).invalid+label:after,input[type=number]:not(.browser-default).valid+label:after,input[type=search]:not(.browser-default).invalid+label:after,input[type=search]:not(.browser-default).valid+label:after,textarea.materialize-textarea.invalid+label:after,textarea.materialize-textarea.valid+label:after{display:none}input:not([type]).invalid+label.active:after,input:not([type]).valid+label.active:after,input[type=text]:not(.browser-default).invalid+label.active:after,input[type=text]:not(.browser-default).valid+label.active:after,input[type=password]:not(.browser-default).invalid+label.active:after,input[type=password]:not(.browser-default).valid+label.active:after,input[type=email]:not(.browser-default).invalid+label.active:after,input[type=email]:not(.browser-default).valid+label.active:after,input[type=url]:not(.browser-default).invalid+label.active:after,input[type=url]:not(.browser-default).valid+label.active:after,input[type=time]:not(.browser-default).invalid+label.active:after,input[type=time]:not(.browser-default).valid+label.active:after,input[type=date]:not(.browser-default).invalid+label.active:after,input[type=date]:not(.browser-default).valid+label.active:after,input[type=datetime]:not(.browser-default).invalid+label.active:after,input[type=datetime]:not(.browser-default).valid+label.active:after,input[type=datetime-local]:not(.browser-default).invalid+label.active:after,input[type=datetime-local]:not(.browser-default).valid+label.active:after,input[type=tel]:not(.browser-default).invalid+label.active:after,input[type=tel]:not(.browser-default).valid+label.active:after,input[type=number]:not(.browser-default).invalid+label.active:after,input[type=number]:not(.browser-default).valid+label.active:after,input[type=search]:not(.browser-default).invalid+label.active:after,input[type=search]:not(.browser-default).valid+label.active:after,textarea.materialize-textarea.invalid+label.active:after,textarea.materialize-textarea.valid+label.active:after{display:block}input.valid:not([type]),input.valid:not([type]):focus,input[type=text].valid:not(.browser-default),input[type=text].valid:not(.browser-default):focus,input[type=password].valid:not(.browser-default),input[type=password].valid:not(.browser-default):focus,input[type=email].valid:not(.browser-default),input[type=email].valid:not(.browser-default):focus,input[type=url].valid:not(.browser-default),input[type=url].valid:not(.browser-default):focus,input[type=time].valid:not(.browser-default),input[type=time].valid:not(.browser-default):focus,input[type=date].valid:not(.browser-default),input[type=date].valid:not(.browser-default):focus,input[type=datetime].valid:not(.browser-default),input[type=datetime].valid:not(.browser-default):focus,input[type=datetime-local].valid:not(.browser-default),input[type=datetime-local].valid:not(.browser-default):focus,input[type=tel].valid:not(.browser-default),input[type=tel].valid:not(.browser-default):focus,input[type=number].valid:not(.browser-default),input[type=number].valid:not(.browser-default):focus,input[type=search].valid:not(.browser-default),input[type=search].valid:not(.browser-default):focus,textarea.materialize-textarea.valid,textarea.materialize-textarea.valid:focus,.select-wrapper.valid>input.select-dropdown{border-bottom:1px solid #4CAF50;-webkit-box-shadow:0 1px 0 0 #4CAF50;box-shadow:0 1px 0 0 #4CAF50}input.invalid:not([type]),input.invalid:not([type]):focus,input[type=text].invalid:not(.browser-default),input[type=text].invalid:not(.browser-default):focus,input[type=password].invalid:not(.browser-default),input[type=password].invalid:not(.browser-default):focus,input[type=email].invalid:not(.browser-default),input[type=email].invalid:not(.browser-default):focus,input[type=url].invalid:not(.browser-default),input[type=url].invalid:not(.browser-default):focus,input[type=time].invalid:not(.browser-default),input[type=time].invalid:not(.browser-default):focus,input[type=date].invalid:not(.browser-default),input[type=date].invalid:not(.browser-default):focus,input[type=datetime].invalid:not(.browser-default),input[type=datetime].invalid:not(.browser-default):focus,input[type=datetime-local].invalid:not(.browser-default),input[type=datetime-local].invalid:not(.browser-default):focus,input[type=tel].invalid:not(.browser-default),input[type=tel].invalid:not(.browser-default):focus,input[type=number].invalid:not(.browser-default),input[type=number].invalid:not(.browser-default):focus,input[type=search].invalid:not(.browser-default),input[type=search].invalid:not(.browser-default):focus,textarea.materialize-textarea.invalid,textarea.materialize-textarea.invalid:focus,.select-wrapper.invalid>input.select-dropdown{border-bottom:1px solid #F44336;-webkit-box-shadow:0 1px 0 0 #F44336;box-shadow:0 1px 0 0 #F44336}input:not([type]).valid+label:after,input:not([type]):focus.valid+label:after,input[type=text]:not(.browser-default).valid+label:after,input[type=text]:not(.browser-default):focus.valid+label:after,input[type=password]:not(.browser-default).valid+label:after,input[type=password]:not(.browser-default):focus.valid+label:after,input[type=email]:not(.browser-default).valid+label:after,input[type=email]:not(.browser-default):focus.valid+label:after,input[type=url]:not(.browser-default).valid+label:after,input[type=url]:not(.browser-default):focus.valid+label:after,input[type=time]:not(.browser-default).valid+label:after,input[type=time]:not(.browser-default):focus.valid+label:after,input[type=date]:not(.browser-default).valid+label:after,input[type=date]:not(.browser-default):focus.valid+label:after,input[type=datetime]:not(.browser-default).valid+label:after,input[type=datetime]:not(.browser-default):focus.valid+label:after,input[type=datetime-local]:not(.browser-default).valid+label:after,input[type=datetime-local]:not(.browser-default):focus.valid+label:after,input[type=tel]:not(.browser-default).valid+label:after,input[type=tel]:not(.browser-default):focus.valid+label:after,input[type=number]:not(.browser-default).valid+label:after,input[type=number]:not(.browser-default):focus.valid+label:after,input[type=search]:not(.browser-default).valid+label:after,input[type=search]:not(.browser-default):focus.valid+label:after,textarea.materialize-textarea.valid+label:after,textarea.materialize-textarea:focus.valid+label:after,.select-wrapper.valid+label:after{content:attr(data-success);color:#4CAF50;opacity:1;-webkit-transform:translateY(9px);transform:translateY(9px)}input:not([type]).invalid+label:after,input:not([type]):focus.invalid+label:after,input[type=text]:not(.browser-default).invalid+label:after,input[type=text]:not(.browser-default):focus.invalid+label:after,input[type=password]:not(.browser-default).invalid+label:after,input[type=password]:not(.browser-default):focus.invalid+label:after,input[type=email]:not(.browser-default).invalid+label:after,input[type=email]:not(.browser-default):focus.invalid+label:after,input[type=url]:not(.browser-default).invalid+label:after,input[type=url]:not(.browser-default):focus.invalid+label:after,input[type=time]:not(.browser-default).invalid+label:after,input[type=time]:not(.browser-default):focus.invalid+label:after,input[type=date]:not(.browser-default).invalid+label:after,input[type=date]:not(.browser-default):focus.invalid+label:after,input[type=datetime]:not(.browser-default).invalid+label:after,input[type=datetime]:not(.browser-default):focus.invalid+label:after,input[type=datetime-local]:not(.browser-default).invalid+label:after,input[type=datetime-local]:not(.browser-default):focus.invalid+label:after,input[type=tel]:not(.browser-default).invalid+label:after,input[type=tel]:not(.browser-default):focus.invalid+label:after,input[type=number]:not(.browser-default).invalid+label:after,input[type=number]:not(.browser-default):focus.invalid+label:after,input[type=search]:not(.browser-default).invalid+label:after,input[type=search]:not(.browser-default):focus.invalid+label:after,textarea.materialize-textarea.invalid+label:after,textarea.materialize-textarea:focus.invalid+label:after,.select-wrapper.invalid+label:after{content:attr(data-error);color:#F44336;opacity:1;-webkit-transform:translateY(9px);transform:translateY(9px)}input:not([type])+label:after,input[type=text]:not(.browser-default)+label:after,input[type=password]:not(.browser-default)+label:after,input[type=email]:not(.browser-default)+label:after,input[type=url]:not(.browser-default)+label:after,input[type=time]:not(.browser-default)+label:after,input[type=date]:not(.browser-default)+label:after,input[type=datetime]:not(.browser-default)+label:after,input[type=datetime-local]:not(.browser-default)+label:after,input[type=tel]:not(.browser-default)+label:after,input[type=number]:not(.browser-default)+label:after,input[type=search]:not(.browser-default)+label:after,textarea.materialize-textarea+label:after,.select-wrapper+label:after{display:block;content:"";position:absolute;top:100%;left:0;opacity:0;-webkit-transition:.2s opacity ease-out, .2s color ease-out;transition:.2s opacity ease-out, .2s color ease-out}.input-field{position:relative;margin-top:1rem}.input-field.inline{display:inline-block;vertical-align:middle;margin-left:5px}.input-field.inline input,.input-field.inline .select-dropdown{margin-bottom:1rem}.input-field.col label{left:.75rem}.input-field.col .prefix ~ label,.input-field.col .prefix ~ .validate ~ label{width:calc(100% - 3rem - 1.5rem)}.input-field label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;-webkit-transition:-webkit-transform .2s ease-out;transition:-webkit-transform .2s ease-out;transition:transform .2s ease-out;transition:transform .2s ease-out, -webkit-transform .2s ease-out;-webkit-transform-origin:0% 100%;transform-origin:0% 100%;text-align:initial;-webkit-transform:translateY(12px);transform:translateY(12px);pointer-events:none}.input-field label:not(.label-icon).active{-webkit-transform:translateY(-14px) scale(0.8);transform:translateY(-14px) scale(0.8);-webkit-transform-origin:0 0;transform-origin:0 0}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;-webkit-transition:color .2s;transition:color .2s}.input-field .prefix.active{color:#26a69a}.input-field .prefix ~ input,.input-field .prefix ~ textarea,.input-field .prefix ~ label,.input-field .prefix ~ .validate ~ label,.input-field .prefix ~ .autocomplete-content{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.input-field .prefix ~ label{margin-left:3rem}@media only screen and (max-width: 992px){.input-field .prefix ~ input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width: 600px){.input-field .prefix ~ input{width:80%;width:calc(100% - 3rem)}}.input-field input[type=search]{display:block;line-height:inherit}.nav-wrapper .input-field input[type=search]{height:inherit;padding-left:4rem;width:calc(100% - 4rem);border:0;-webkit-box-shadow:none;box-shadow:none}.input-field input[type=search]:focus{background-color:#fff;border:0;-webkit-box-shadow:none;box-shadow:none;color:#444}.input-field input[type=search]:focus+label i,.input-field input[type=search]:focus ~ .mdi-navigation-close,.input-field input[type=search]:focus ~ .material-icons{color:#444}.input-field input[type=search]+label{left:1rem}.input-field input[type=search] ~ .mdi-navigation-close,.input-field input[type=search] ~ .material-icons{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;-webkit-transition:.3s color;transition:.3s color}textarea{width:100%;height:3rem;background-color:transparent}textarea.materialize-textarea{overflow-y:hidden;padding:.8rem 0 1.6rem 0;resize:none;min-height:3rem}textarea.materialize-textarea.validate+label{height:100%}textarea.materialize-textarea.validate+label::after{top:calc(100% - 12px)}textarea.materialize-textarea.validate+label:not(.label-icon).active{-webkit-transform:translateY(-25px);transform:translateY(-25px)}.hiddendiv{display:none;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem;position:absolute;top:0}.autocomplete-content{margin-top:-20px;margin-bottom:20px;display:block;opacity:1;position:static}.autocomplete-content li .highlight{color:#444}.autocomplete-content li img{height:40px;width:40px;margin:5px 15px}[type="radio"]:not(:checked),[type="radio"]:checked{position:absolute;opacity:0;pointer-events:none}[type="radio"]:not(:checked)+label,[type="radio"]:checked+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="radio"]+label:before,[type="radio"]+label:after{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;transition:.28s ease}[type="radio"]:not(:checked)+label:before,[type="radio"]:not(:checked)+label:after,[type="radio"]:checked+label:before,[type="radio"]:checked+label:after,[type="radio"].with-gap:checked+label:before,[type="radio"].with-gap:checked+label:after{border-radius:50%}[type="radio"]:not(:checked)+label:before,[type="radio"]:not(:checked)+label:after{border:2px solid #5a5a5a}[type="radio"]:not(:checked)+label:after{-webkit-transform:scale(0);transform:scale(0)}[type="radio"]:checked+label:before{border:2px solid transparent}[type="radio"]:checked+label:after,[type="radio"].with-gap:checked+label:before,[type="radio"].with-gap:checked+label:after{border:2px solid #26a69a}[type="radio"]:checked+label:after,[type="radio"].with-gap:checked+label:after{background-color:#26a69a}[type="radio"]:checked+label:after{-webkit-transform:scale(1.02);transform:scale(1.02)}[type="radio"].with-gap:checked+label:after{-webkit-transform:scale(0.5);transform:scale(0.5)}[type="radio"].tabbed:focus+label:before{-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1)}[type="radio"].with-gap:disabled:checked+label:before{border:2px solid rgba(0,0,0,0.42)}[type="radio"].with-gap:disabled:checked+label:after{border:none;background-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+label:before,[type="radio"]:disabled:checked+label:before{background-color:transparent;border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled+label{color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+label:before{border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:checked+label:after{background-color:rgba(0,0,0,0.42);border-color:#949494}form p{margin-bottom:10px;text-align:left}form p:last-child{margin-bottom:0}[type="checkbox"]:not(:checked),[type="checkbox"]:checked{position:absolute;opacity:0;pointer-events:none}[type="checkbox"]+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="checkbox"]+label:before,[type="checkbox"]:not(.filled-in)+label:after{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:2px;-webkit-transition:.2s;transition:.2s}[type="checkbox"]:not(.filled-in)+label:after{border:0;-webkit-transform:scale(0);transform:scale(0)}[type="checkbox"]:not(:checked):disabled+label:before{border:none;background-color:rgba(0,0,0,0.42)}[type="checkbox"].tabbed:focus+label:after{-webkit-transform:scale(1);transform:scale(1);border:0;border-radius:50%;-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1);background-color:rgba(0,0,0,0.1)}[type="checkbox"]:checked+label:before{top:-4px;left:-5px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #26a69a;border-bottom:2px solid #26a69a;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked:disabled+label:before{border-right:2px solid rgba(0,0,0,0.42);border-bottom:2px solid rgba(0,0,0,0.42)}[type="checkbox"]:indeterminate+label:before{top:-11px;left:-12px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #26a69a;border-bottom:none;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:indeterminate:disabled+label:before{border-right:2px solid rgba(0,0,0,0.42);background-color:transparent}[type="checkbox"].filled-in+label:after{border-radius:2px}[type="checkbox"].filled-in+label:before,[type="checkbox"].filled-in+label:after{content:'';left:0;position:absolute;-webkit-transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;z-index:1}[type="checkbox"].filled-in:not(:checked)+label:before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:not(:checked)+label:after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0px;z-index:0}[type="checkbox"].filled-in:checked+label:before{top:0;left:1px;width:8px;height:13px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:checked+label:after{top:0;width:20px;height:20px;border:2px solid #26a69a;background-color:#26a69a;z-index:0}[type="checkbox"].filled-in.tabbed:focus+label:after{border-radius:2px;border-color:#5a5a5a;background-color:rgba(0,0,0,0.1)}[type="checkbox"].filled-in.tabbed:checked:focus+label:after{border-radius:2px;background-color:#26a69a;border-color:#26a69a}[type="checkbox"].filled-in:disabled:not(:checked)+label:before{background-color:transparent;border:2px solid transparent}[type="checkbox"].filled-in:disabled:not(:checked)+label:after{border-color:transparent;background-color:#949494}[type="checkbox"].filled-in:disabled:checked+label:before{background-color:transparent}[type="checkbox"].filled-in:disabled:checked+label:after{background-color:#949494;border-color:#949494}.switch,.switch *{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{cursor:pointer}.switch label input[type=checkbox]{opacity:0;width:0;height:0}.switch label input[type=checkbox]:checked+.lever{background-color:#84c7c1}.switch label input[type=checkbox]:checked+.lever:before,.switch label input[type=checkbox]:checked+.lever:after{left:18px}.switch label input[type=checkbox]:checked+.lever:after{background-color:#26a69a}.switch label .lever{content:"";display:inline-block;position:relative;width:36px;height:14px;background-color:rgba(0,0,0,0.38);border-radius:15px;margin-right:10px;-webkit-transition:background 0.3s ease;transition:background 0.3s ease;vertical-align:middle;margin:0 16px}.switch label .lever:before,.switch label .lever:after{content:"";position:absolute;display:inline-block;width:20px;height:20px;border-radius:50%;left:0;top:-3px;-webkit-transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease}.switch label .lever:before{background-color:rgba(38,166,154,0.15)}.switch label .lever:after{background-color:#F1F1F1;-webkit-box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12);box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(38,166,154,0.15)}input[type=checkbox]:not(:disabled) ~ .lever:active:before,input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(0,0,0,0.08)}.switch input[type=checkbox][disabled]+.lever{cursor:default;background-color:rgba(0,0,0,0.12)}.switch label input[type=checkbox][disabled]+.lever:after,.switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#949494}select{display:none}select.browser-default{display:block}select{background-color:rgba(255,255,255,0.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.input-field>select{display:block;position:absolute;width:0;pointer-events:none;height:0;top:0;left:0;opacity:0}.select-label{position:absolute}.select-wrapper{position:relative}.select-wrapper.valid+label,.select-wrapper.invalid+label{width:100%;pointer-events:none}.select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;outline:none;height:3rem;line-height:3rem;width:100%;font-size:1rem;margin:0 0 20px 0;padding:0;display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-wrapper span.caret{color:initial;position:absolute;right:0;top:0;bottom:0;height:10px;margin:auto 0;font-size:10px;line-height:10px}.select-wrapper+label{position:absolute;top:-26px;font-size:.8rem}select:disabled{color:rgba(0,0,0,0.42)}.select-wrapper.disabled span.caret,.select-wrapper.disabled+label{color:rgba(0,0,0,0.42)}.select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,0.42);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-wrapper i{color:rgba(0,0,0,0.3)}.select-dropdown li.disabled,.select-dropdown li.disabled>span,.select-dropdown li.optgroup{color:rgba(0,0,0,0.3);background-color:transparent}.select-dropdown.dropdown-content li.active{background-color:transparent}.select-dropdown.dropdown-content li:hover{background-color:rgba(0,0,0,0.06)}.select-dropdown.dropdown-content li.selected{background-color:rgba(0,0,0,0.03)}.prefix ~ .select-wrapper{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.prefix ~ label{margin-left:3rem}.select-dropdown li img{height:40px;width:40px;margin:5px 15px;float:right}.select-dropdown li.optgroup{border-top:1px solid #eee}.select-dropdown li.optgroup.selected>span{color:rgba(0,0,0,0.7)}.select-dropdown li.optgroup>span{color:rgba(0,0,0,0.4)}.select-dropdown li.optgroup ~ li.optgroup-option{padding-left:1rem}.file-field{position:relative}.file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.file-field input.file-path{width:100%}.file-field .btn,.file-field .btn-large{float:left;height:3rem;line-height:3rem}.file-field span{cursor:pointer}.file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.file-field input[type=file]::-webkit-file-upload-button{display:none}.range-field{position:relative}input[type=range],input[type=range]+.thumb{cursor:pointer}input[type=range]{position:relative;background-color:transparent;border:none;outline:none;width:100%;margin:15px 0;padding:0}input[type=range]:focus{outline:none}input[type=range]+.thumb{position:absolute;top:10px;left:0;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;margin-left:7px;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#26a69a;font-size:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:14px;width:14px;border-radius:50%;background-color:#26a69a;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;margin:-5px 0 0 0;-webkit-transition:.3s;transition:.3s}input[type=range]:focus::-webkit-slider-runnable-track{background:#ccc}input[type=range]{border:1px solid white}input[type=range]::-moz-range-track{height:3px;background:#ddd;border:none}input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;margin-top:-5px}input[type=range]:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input[type=range]:focus::-moz-range-track{background:#ccc}input[type=range]::-ms-track{height:3px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#777}input[type=range]::-ms-fill-upper{background:#ddd}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a}input[type=range]:focus::-ms-fill-lower{background:#888}input[type=range]:focus::-ms-fill-upper{background:#ccc}.table-of-contents.fixed{position:fixed}.table-of-contents li{padding:2px 0}.table-of-contents a{display:inline-block;font-weight:300;color:#757575;padding-left:20px;height:1.5rem;line-height:1.5rem;letter-spacing:.4;display:inline-block}.table-of-contents a:hover{color:#a8a8a8;padding-left:19px;border-left:1px solid #ee6e73}.table-of-contents a.active{font-weight:500;padding-left:18px;border-left:2px solid #ee6e73}.side-nav{position:fixed;width:300px;left:0;top:0;margin:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);height:100%;height:calc(100% + 60px);height:-moz-calc(100%);padding-bottom:60px;background-color:#fff;z-index:999;overflow-y:auto;will-change:transform;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(-105%);transform:translateX(-105%)}.side-nav.right-aligned{right:0;-webkit-transform:translateX(105%);transform:translateX(105%);left:auto;-webkit-transform:translateX(100%);transform:translateX(100%)}.side-nav .collapsible{margin:0}.side-nav li{float:none;line-height:48px}.side-nav li.active{background-color:rgba(0,0,0,0.05)}.side-nav li>a{color:rgba(0,0,0,0.87);display:block;font-size:14px;font-weight:500;height:48px;line-height:48px;padding:0 32px}.side-nav li>a:hover{background-color:rgba(0,0,0,0.05)}.side-nav li>a.btn,.side-nav li>a.btn-large,.side-nav li>a.btn-large,.side-nav li>a.btn-flat,.side-nav li>a.btn-floating{margin:10px 15px}.side-nav li>a.btn,.side-nav li>a.btn-large,.side-nav li>a.btn-large,.side-nav li>a.btn-floating{color:#fff}.side-nav li>a.btn-flat{color:#343434}.side-nav li>a.btn:hover,.side-nav li>a.btn-large:hover,.side-nav li>a.btn-large:hover{background-color:#2bbbad}.side-nav li>a.btn-floating:hover{background-color:#26a69a}.side-nav li>a>i,.side-nav li>a>[class^="mdi-"],.side-nav li>a li>a>[class*="mdi-"],.side-nav li>a>i.material-icons{float:left;height:48px;line-height:48px;margin:0 32px 0 0;width:24px;color:rgba(0,0,0,0.54)}.side-nav .divider{margin:8px 0 0 0}.side-nav .subheader{cursor:initial;pointer-events:none;color:rgba(0,0,0,0.54);font-size:14px;font-weight:500;line-height:48px}.side-nav .subheader:hover{background-color:transparent}.side-nav .user-view,.side-nav .userView{position:relative;padding:32px 32px 0;margin-bottom:8px}.side-nav .user-view>a,.side-nav .userView>a{height:auto;padding:0}.side-nav .user-view>a:hover,.side-nav .userView>a:hover{background-color:transparent}.side-nav .user-view .background,.side-nav .userView .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.side-nav .user-view .circle,.side-nav .user-view .name,.side-nav .user-view .email,.side-nav .userView .circle,.side-nav .userView .name,.side-nav .userView .email{display:block}.side-nav .user-view .circle,.side-nav .userView .circle{height:64px;width:64px}.side-nav .user-view .name,.side-nav .user-view .email,.side-nav .userView .name,.side-nav .userView .email{font-size:14px;line-height:24px}.side-nav .user-view .name,.side-nav .userView .name{margin-top:16px;font-weight:500}.side-nav .user-view .email,.side-nav .userView .email{padding-bottom:16px;font-weight:400}.drag-target{height:100%;width:10px;position:fixed;top:0;z-index:998}.side-nav.fixed{left:0;-webkit-transform:translateX(0);transform:translateX(0);position:fixed}.side-nav.fixed.right-aligned{right:0;left:auto}@media only screen and (max-width: 992px){.side-nav.fixed{-webkit-transform:translateX(-105%);transform:translateX(-105%)}.side-nav.fixed.right-aligned{-webkit-transform:translateX(105%);transform:translateX(105%)}.side-nav a{padding:0 16px}.side-nav .user-view,.side-nav .userView{padding:16px 16px 0}}.side-nav .collapsible-body>ul:not(.collapsible)>li.active,.side-nav.fixed .collapsible-body>ul:not(.collapsible)>li.active{background-color:#ee6e73}.side-nav .collapsible-body>ul:not(.collapsible)>li.active a,.side-nav.fixed .collapsible-body>ul:not(.collapsible)>li.active a{color:#fff}.side-nav .collapsible-body{padding:0}#sidenav-overlay{position:fixed;top:0;left:0;right:0;height:120vh;background-color:rgba(0,0,0,0.5);z-index:997;will-change:opacity}.preloader-wrapper{display:inline-block;position:relative;width:50px;height:50px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#26a69a}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer,.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.slider{position:relative;height:400px;width:100%}.slider.fullscreen{height:100%;width:100%;position:absolute;top:0;left:0;right:0;bottom:0}.slider.fullscreen ul.slides{height:100%}.slider.fullscreen ul.indicators{z-index:2;bottom:30px}.slider .slides{background-color:#9e9e9e;margin:0;height:400px}.slider .slides li{opacity:0;position:absolute;top:0;left:0;z-index:1;width:100%;height:inherit;overflow:hidden}.slider .slides li img{height:100%;width:100%;background-size:cover;background-position:center}.slider .slides li .caption{color:#fff;position:absolute;top:15%;left:15%;width:70%;opacity:0}.slider .slides li .caption p{color:#e0e0e0}.slider .slides li.active{z-index:2}.slider .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.slider .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:16px;width:16px;margin:0 12px;background-color:#e0e0e0;-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.slider .indicators .indicator-item.active{background-color:#4CAF50}.carousel{overflow:hidden;position:relative;width:100%;height:400px;-webkit-perspective:500px;perspective:500px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform-origin:0% 50%;transform-origin:0% 50%}.carousel.carousel-slider{top:0;left:0}.carousel.carousel-slider .carousel-fixed-item{position:absolute;left:0;right:0;bottom:20px;z-index:1}.carousel.carousel-slider .carousel-fixed-item.with-indicators{bottom:68px}.carousel.carousel-slider .carousel-item{width:100%;height:100%;min-height:400px;position:absolute;top:0;left:0}.carousel.carousel-slider .carousel-item h2{font-size:24px;font-weight:500;line-height:32px}.carousel.carousel-slider .carousel-item p{font-size:15px}.carousel .carousel-item{display:none;width:200px;height:200px;position:absolute;top:0;left:0}.carousel .carousel-item>img{width:100%}.carousel .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.carousel .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:8px;width:8px;margin:24px 4px;background-color:rgba(255,255,255,0.5);-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.carousel .indicators .indicator-item.active{background-color:#fff}.carousel.scrolling .carousel-item .materialboxed,.carousel .carousel-item:not(.active) .materialboxed{pointer-events:none}.tap-target-wrapper{width:800px;height:800px;position:fixed;z-index:1000;visibility:hidden;-webkit-transition:visibility 0s .3s;transition:visibility 0s .3s}.tap-target-wrapper.open{visibility:visible;-webkit-transition:visibility 0s;transition:visibility 0s}.tap-target-wrapper.open .tap-target{-webkit-transform:scale(1);transform:scale(1);opacity:.95;-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-wrapper.open .tap-target-wave::before{-webkit-transform:scale(1);transform:scale(1)}.tap-target-wrapper.open .tap-target-wave::after{visibility:visible;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;-webkit-transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s 1s;transition:opacity .3s, transform .3s, visibility 0s 1s, -webkit-transform .3s}.tap-target{position:absolute;font-size:1rem;border-radius:50%;background-color:#ee6e73;-webkit-box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);width:100%;height:100%;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-content{position:relative;display:table-cell}.tap-target-wave{position:absolute;border-radius:50%;z-index:10001}.tap-target-wave::before,.tap-target-wave::after{content:'';display:block;position:absolute;width:100%;height:100%;border-radius:50%;background-color:#ffffff}.tap-target-wave::before{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s}.tap-target-wave::after{visibility:hidden;-webkit-transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s;transition:opacity .3s, transform .3s, visibility 0s, -webkit-transform .3s;z-index:-1}.tap-target-origin{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);z-index:10002;position:absolute !important}.tap-target-origin:not(.btn):not(.btn-large),.tap-target-origin:not(.btn):not(.btn-large):hover{background:none}@media only screen and (max-width: 600px){.tap-target,.tap-target-wrapper{width:600px;height:600px}}.pulse{overflow:initial;position:relative}.pulse::before{content:'';display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:inherit;border-radius:inherit;-webkit-transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, transform .3s;transition:opacity .3s, transform .3s, -webkit-transform .3s;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;z-index:-1}@-webkit-keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}@keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}/*! + * Default mobile-first, responsive styling for pickadate.js + * Demo: http://amsul.github.io/pickadate.js + */.picker__holder,.picker__frame{bottom:0;left:0;right:0;top:100%}.picker__holder{position:fixed;-webkit-transition:background 0.15s ease-out, top 0s 0.15s;transition:background 0.15s ease-out, top 0s 0.15s;-webkit-backface-visibility:hidden}.picker__frame{position:absolute;margin:0 auto;min-width:256px;width:300px;max-height:350px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;-webkit-transition:all 0.15s ease-out;transition:all 0.15s ease-out}@media (min-height: 28.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}}@media (min-height: 40.125em){.picker__frame{margin-bottom:7.5%}}.picker__wrap{display:table;width:100%;height:100%}@media (min-height: 28.875em){.picker__wrap{display:block}}.picker__box{background:#ffffff;display:table-cell;vertical-align:middle}@media (min-height: 28.875em){.picker__box{display:block;border:1px solid #777777;border-top-color:#898989;border-bottom-width:0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 12px 36px 16px rgba(0,0,0,0.24);box-shadow:0 12px 36px 16px rgba(0,0,0,0.24)}}.picker--opened .picker__holder{top:0;background:transparent;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)";zoom:1;background:rgba(0,0,0,0.32);-webkit-transition:background 0.15s ease-out;transition:background 0.15s ease-out}.picker--opened .picker__frame{top:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1}@media (min-height: 35.875em){.picker--opened .picker__frame{top:10%;bottom:auto}}.picker__input.picker__input--active{border-color:#E3F2FD}.picker__frame{margin:0 auto;max-width:325px}@media (min-height: 38.875em){.picker--opened .picker__frame{top:10%;bottom:auto}}@media only screen and (min-width: 601px){.picker__box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.picker__frame{width:80%;max-width:600px}}.picker__box{padding:0;border-radius:2px;overflow:hidden}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{display:inline-block;margin-left:.25em;margin-right:.25em}.picker__select--month,.picker__select--year{height:2em;padding:0;margin-left:.25em;margin-right:.25em}.picker__select--month.browser-default{display:inline;background-color:#FFFFFF;width:40%}.picker__select--year.browser-default{display:inline;background-color:#FFFFFF;width:26%}.picker__select--month:focus,.picker__select--year:focus{border-color:rgba(0,0,0,0.05)}.picker__nav--prev,.picker__nav--next{position:absolute;padding:.5em 1.25em;width:1em;height:1em;-webkit-box-sizing:content-box;box-sizing:content-box;top:-0.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:none;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:1rem;width:100%;margin-top:.75em;margin-bottom:.5em}.picker__table th,.picker__table td{text-align:center}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999999;font-weight:500}@media (min-height: 33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day--today{position:relative;color:#595959;letter-spacing:-.3;padding:.75rem 0;font-weight:400;border:1px solid transparent}.picker__day--disabled:before{border-top-color:#aaaaaa}.picker__day--infocus:hover{cursor:pointer;color:#000;font-weight:500}.picker__day--outfocus{display:none;padding:.75rem 0;color:#fff}.picker__day--outfocus:hover{cursor:pointer;color:#dddddd;font-weight:500}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{cursor:pointer}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(0.75);transform:scale(0.75);background:#0089ec;color:#ffffff}.picker__day--disabled,.picker__day--disabled:hover,.picker--focused .picker__day--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbbbbb}.picker__footer{text-align:right}.picker__button--today,.picker__button--clear,.picker__button--close{border:1px solid #ffffff;background:#ffffff;font-size:.8em;padding:.66em 0;font-weight:bold;width:33%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover,.picker__button--close:hover{cursor:pointer;color:#000000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus,.picker__button--close:focus{background:#b1dcfb;border-color:rgba(0,0,0,0.05);outline:none}.picker__button--today:before,.picker__button--clear:before,.picker__button--close:before{position:relative;display:inline-block;height:0}.picker__button--today:before,.picker__button--clear:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-0.05em;width:0;border-top:0.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-0.25em;width:.66em;border-top:3px solid #ee2200}.picker__button--close:before{content:"\D7";top:-0.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaaaaa}.picker__date-display{text-align:left;background-color:#26a69a;color:#fff;padding:18px;font-weight:300}@media only screen and (min-width: 601px){.picker__date-display{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.picker__weekday-display{display:block}.picker__container__wrapper{-webkit-box-flex:2;-webkit-flex:2;-ms-flex:2;flex:2}}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000000;background:#a1ded8}.picker__weekday-display{font-weight:500;font-size:2.8rem;margin-right:5px;margin-top:4px}.picker__month-display{font-size:2.8rem;font-weight:500}.picker__day-display{font-size:2.8rem;font-weight:500;margin-right:5px}.picker__year-display{font-size:1.5rem;font-weight:500;color:rgba(255,255,255,0.7)}.picker__calendar-container{padding:0 1rem}.picker__calendar-container thead{border:none}.picker__table{margin-top:0;margin-bottom:.5em}.picker__day--infocus{color:rgba(0,0,0,0.87);letter-spacing:-.3px;padding:0.75rem 0;font-weight:400;border:1px solid transparent}@media only screen and (min-width: 601px){.picker__day--infocus{padding:1.1rem 0}}.picker__day.picker__day--today{color:#26a69a}.picker__day.picker__day--today.picker__day--selected{color:#fff}.picker__weekday{font-size:.9rem}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(0.9);transform:scale(0.9);background-color:#26a69a;color:#ffffff}.picker__day--selected.picker__day--outfocus,.picker__day--selected:hover.picker__day--outfocus,.picker--focused .picker__day--selected.picker__day--outfocus{background-color:#a1ded8}.picker__footer{text-align:right;padding:5px 10px}.picker__close,.picker__today,.picker__clear{font-size:1.1rem;padding:0 1rem;color:#26a69a}.picker__clear{color:#f44336;float:left}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:0.75em solid #676767;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:0.75em solid #676767}button.picker__today:focus,button.picker__clear:focus,button.picker__close:focus{background-color:#a1ded8}.picker__list{list-style:none;padding:0.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:1px solid #ddd;margin-bottom:-1px;position:relative;background:#fff;padding:.75em 1.25em}@media (min-height: 46.75em){.picker__list-item{padding:.5em 1em}}.picker__list-item:hover{cursor:pointer;color:#000;background:#b1dcfb;border-color:#0089ec;z-index:10}.picker__list-item--highlighted{border-color:#0089ec;z-index:10}.picker__list-item--highlighted:hover,.picker--focused .picker__list-item--highlighted{cursor:pointer;color:#000;background:#b1dcfb}.picker__list-item--selected,.picker__list-item--selected:hover,.picker--focused .picker__list-item--selected{background:#0089ec;color:#fff;z-index:10}.picker__list-item--disabled,.picker__list-item--disabled:hover,.picker--focused .picker__list-item--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default;border-color:#ddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:none;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:rgba(0,0,0,0.87)}.picker--time .picker__button--clear:hover,.picker--time .picker__button--clear:focus{color:#000;background:#b1dcfb;background:#ee2200;border-color:#ee2200;cursor:pointer;color:#fff;outline:none}.picker--time .picker__button--clear:before{top:-0.25em;color:rgba(0,0,0,0.87);font-size:1.25em;font-weight:bold}.picker--time .picker__button--clear:hover:before,.picker--time .picker__button--clear:focus:before{color:#fff}.picker--time .picker__frame{min-width:256px;max-width:320px}.picker--time .picker__box{font-size:1em;background:#f2f2f2;padding:0}@media (min-height: 40.125em){.picker--time .picker__box{margin-bottom:5em}}.clockpicker-display{font-size:4rem;font-weight:bold;text-align:center;color:rgba(255,255,255,0.6);font-weight:400;clear:both;position:relative}.clockpicker-span-am-pm{font-size:1.3rem;position:absolute;right:1rem;bottom:0.3rem;line-height:2rem;font-weight:500}@media only screen and (min-width: 601px){.clockpicker-display{top:32%}.clockpicker-span-am-pm{position:relative;right:auto;bottom:auto;text-align:center;margin-top:1.2rem}}.text-primary{color:#fff}.clockpicker-span-hours{margin-right:3px}.clockpicker-span-minutes{margin-left:3px}.clockpicker-span-hours,.clockpicker-span-minutes,.clockpicker-span-am-pm div{cursor:pointer}.clockpicker-moving{cursor:move}.clockpicker-plate{background-color:#eee;border-radius:50%;width:270px;height:270px;overflow:visible;position:relative;margin:auto;margin-top:25px;margin-bottom:5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.clockpicker-canvas,.clockpicker-dial{width:270px;height:270px;position:absolute;left:-1px;top:-1px}.clockpicker-minutes{visibility:hidden}.clockpicker-tick{border-radius:50%;color:rgba(0,0,0,0.87);line-height:40px;text-align:center;width:40px;height:40px;position:absolute;cursor:pointer}.clockpicker-tick.active,.clockpicker-tick:hover{background-color:rgba(38,166,154,0.25)}.clockpicker-dial{-webkit-transition:-webkit-transform 350ms, opacity 350ms;-webkit-transition:opacity 350ms, -webkit-transform 350ms;transition:opacity 350ms, -webkit-transform 350ms;transition:transform 350ms, opacity 350ms;transition:transform 350ms, opacity 350ms, -webkit-transform 350ms}.clockpicker-dial-out{opacity:0}.clockpicker-hours.clockpicker-dial-out{-webkit-transform:scale(1.2, 1.2);transform:scale(1.2, 1.2)}.clockpicker-minutes.clockpicker-dial-out{-webkit-transform:scale(0.8, 0.8);transform:scale(0.8, 0.8)}.clockpicker-canvas{-webkit-transition:opacity 175ms;transition:opacity 175ms}.clockpicker-canvas-out{opacity:0.25}.clockpicker-canvas-bearing{stroke:none;fill:#26a69a}.clockpicker-canvas-bg{stroke:none;fill:#26a69a}.clockpicker-canvas-bg-trans{fill:#26a69a}.clockpicker-canvas line{stroke:#26a69a;stroke-width:4;stroke-linecap:round} diff --git a/dist/font/material-design-icons/LICENSE.txt b/dist/font/material-design-icons/LICENSE.txt deleted file mode 100644 index 542f6537df..0000000000 --- a/dist/font/material-design-icons/LICENSE.txt +++ /dev/null @@ -1,428 +0,0 @@ -https://github.com/google/material-design-icons/blob/master/LICENSE -https://github.com/FezVrasta/bootstrap-material-design/blob/master/fonts/LICENSE.txt - -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - - including for purposes of Section 3(b); and - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public licenses. -Notwithstanding, Creative Commons may elect to apply one of its public -licenses to material it publishes and in those instances will be -considered the "Licensor." Except for the limited purpose of indicating -that material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the public -licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/dist/font/material-design-icons/Material-Design-Icons.eot b/dist/font/material-design-icons/Material-Design-Icons.eot deleted file mode 100644 index d9c296e41f..0000000000 Binary files a/dist/font/material-design-icons/Material-Design-Icons.eot and /dev/null differ diff --git a/dist/font/material-design-icons/Material-Design-Icons.svg b/dist/font/material-design-icons/Material-Design-Icons.svg deleted file mode 100644 index def1e9b5e9..0000000000 --- a/dist/font/material-design-icons/Material-Design-Icons.svg +++ /dev/null @@ -1,769 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dist/font/material-design-icons/Material-Design-Icons.ttf b/dist/font/material-design-icons/Material-Design-Icons.ttf deleted file mode 100644 index e12f0cc41b..0000000000 Binary files a/dist/font/material-design-icons/Material-Design-Icons.ttf and /dev/null differ diff --git a/dist/font/material-design-icons/Material-Design-Icons.woff b/dist/font/material-design-icons/Material-Design-Icons.woff deleted file mode 100644 index 201581f258..0000000000 Binary files a/dist/font/material-design-icons/Material-Design-Icons.woff and /dev/null differ diff --git a/dist/font/material-design-icons/Material-Design-Icons.woff2 b/dist/font/material-design-icons/Material-Design-Icons.woff2 deleted file mode 100644 index 5efd1b93c4..0000000000 Binary files a/dist/font/material-design-icons/Material-Design-Icons.woff2 and /dev/null differ diff --git a/dist/font/roboto/Roboto-Bold.ttf b/dist/font/roboto/Roboto-Bold.ttf deleted file mode 100644 index 68822caf24..0000000000 Binary files a/dist/font/roboto/Roboto-Bold.ttf and /dev/null differ diff --git a/dist/font/roboto/Roboto-Bold.woff b/dist/font/roboto/Roboto-Bold.woff deleted file mode 100644 index 1f75afdcc8..0000000000 Binary files a/dist/font/roboto/Roboto-Bold.woff and /dev/null differ diff --git a/dist/font/roboto/Roboto-Bold.woff2 b/dist/font/roboto/Roboto-Bold.woff2 deleted file mode 100644 index 350d1c3a2d..0000000000 Binary files a/dist/font/roboto/Roboto-Bold.woff2 and /dev/null differ diff --git a/dist/font/roboto/Roboto-Light.ttf b/dist/font/roboto/Roboto-Light.ttf deleted file mode 100644 index aa45340757..0000000000 Binary files a/dist/font/roboto/Roboto-Light.ttf and /dev/null differ diff --git a/dist/font/roboto/Roboto-Light.woff b/dist/font/roboto/Roboto-Light.woff deleted file mode 100644 index 3480c6c8b7..0000000000 Binary files a/dist/font/roboto/Roboto-Light.woff and /dev/null differ diff --git a/dist/font/roboto/Roboto-Light.woff2 b/dist/font/roboto/Roboto-Light.woff2 deleted file mode 100644 index 9a4d98c462..0000000000 Binary files a/dist/font/roboto/Roboto-Light.woff2 and /dev/null differ diff --git a/dist/font/roboto/Roboto-Medium.ttf b/dist/font/roboto/Roboto-Medium.ttf deleted file mode 100644 index a3c1a1f170..0000000000 Binary files a/dist/font/roboto/Roboto-Medium.ttf and /dev/null differ diff --git a/dist/font/roboto/Roboto-Medium.woff b/dist/font/roboto/Roboto-Medium.woff deleted file mode 100644 index 1186773fd0..0000000000 Binary files a/dist/font/roboto/Roboto-Medium.woff and /dev/null differ diff --git a/dist/font/roboto/Roboto-Medium.woff2 b/dist/font/roboto/Roboto-Medium.woff2 deleted file mode 100644 index d10a59261f..0000000000 Binary files a/dist/font/roboto/Roboto-Medium.woff2 and /dev/null differ diff --git a/dist/font/roboto/Roboto-Regular.ttf b/dist/font/roboto/Roboto-Regular.ttf deleted file mode 100644 index 0e58508a64..0000000000 Binary files a/dist/font/roboto/Roboto-Regular.ttf and /dev/null differ diff --git a/dist/font/roboto/Roboto-Regular.woff b/dist/font/roboto/Roboto-Regular.woff deleted file mode 100644 index f823258a4e..0000000000 Binary files a/dist/font/roboto/Roboto-Regular.woff and /dev/null differ diff --git a/dist/font/roboto/Roboto-Regular.woff2 b/dist/font/roboto/Roboto-Regular.woff2 deleted file mode 100644 index b7082ef310..0000000000 Binary files a/dist/font/roboto/Roboto-Regular.woff2 and /dev/null differ diff --git a/dist/font/roboto/Roboto-Thin.ttf b/dist/font/roboto/Roboto-Thin.ttf deleted file mode 100644 index 8779333b1a..0000000000 Binary files a/dist/font/roboto/Roboto-Thin.ttf and /dev/null differ diff --git a/dist/font/roboto/Roboto-Thin.woff b/dist/font/roboto/Roboto-Thin.woff deleted file mode 100644 index 2a98c1e41d..0000000000 Binary files a/dist/font/roboto/Roboto-Thin.woff and /dev/null differ diff --git a/dist/font/roboto/Roboto-Thin.woff2 b/dist/font/roboto/Roboto-Thin.woff2 deleted file mode 100644 index a38025a158..0000000000 Binary files a/dist/font/roboto/Roboto-Thin.woff2 and /dev/null differ diff --git a/dist/fonts/roboto/Roboto-Bold.woff b/dist/fonts/roboto/Roboto-Bold.woff new file mode 100644 index 0000000000..c55d1e72ba Binary files /dev/null and b/dist/fonts/roboto/Roboto-Bold.woff differ diff --git a/dist/fonts/roboto/Roboto-Bold.woff2 b/dist/fonts/roboto/Roboto-Bold.woff2 new file mode 100644 index 0000000000..ab12197439 Binary files /dev/null and b/dist/fonts/roboto/Roboto-Bold.woff2 differ diff --git a/dist/fonts/roboto/Roboto-Light.woff b/dist/fonts/roboto/Roboto-Light.woff new file mode 100644 index 0000000000..3f9e8c5e9d Binary files /dev/null and b/dist/fonts/roboto/Roboto-Light.woff differ diff --git a/dist/fonts/roboto/Roboto-Light.woff2 b/dist/fonts/roboto/Roboto-Light.woff2 new file mode 100644 index 0000000000..0707d9ab13 Binary files /dev/null and b/dist/fonts/roboto/Roboto-Light.woff2 differ diff --git a/dist/fonts/roboto/Roboto-Medium.woff b/dist/fonts/roboto/Roboto-Medium.woff new file mode 100644 index 0000000000..ced7907e94 Binary files /dev/null and b/dist/fonts/roboto/Roboto-Medium.woff differ diff --git a/dist/fonts/roboto/Roboto-Medium.woff2 b/dist/fonts/roboto/Roboto-Medium.woff2 new file mode 100644 index 0000000000..723a32343b Binary files /dev/null and b/dist/fonts/roboto/Roboto-Medium.woff2 differ diff --git a/dist/fonts/roboto/Roboto-Regular.woff b/dist/fonts/roboto/Roboto-Regular.woff new file mode 100644 index 0000000000..e401bcf528 Binary files /dev/null and b/dist/fonts/roboto/Roboto-Regular.woff differ diff --git a/dist/fonts/roboto/Roboto-Regular.woff2 b/dist/fonts/roboto/Roboto-Regular.woff2 new file mode 100644 index 0000000000..5bd7bd6500 Binary files /dev/null and b/dist/fonts/roboto/Roboto-Regular.woff2 differ diff --git a/dist/fonts/roboto/Roboto-Thin.woff b/dist/fonts/roboto/Roboto-Thin.woff new file mode 100644 index 0000000000..175d076546 Binary files /dev/null and b/dist/fonts/roboto/Roboto-Thin.woff differ diff --git a/dist/fonts/roboto/Roboto-Thin.woff2 b/dist/fonts/roboto/Roboto-Thin.woff2 new file mode 100644 index 0000000000..29172398b9 Binary files /dev/null and b/dist/fonts/roboto/Roboto-Thin.woff2 differ diff --git a/dist/js/materialize.js b/dist/js/materialize.js index 748dba478b..3d06957ef0 100644 --- a/dist/js/materialize.js +++ b/dist/js/materialize.js @@ -1,303 +1,1435 @@ /*! - * Materialize v0.97.0 (http://materializecss.com) - * Copyright 2014-2015 Materialize + * Materialize v0.100.2 (http://materializecss.com) + * Copyright 2014-2017 Materialize * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) */ -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -jQuery.easing['jswing'] = jQuery.easing['swing']; - -jQuery.extend( jQuery.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert(jQuery.easing.default); - return jQuery.easing[jQuery.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; - } - }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright © 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */; // Custom Easing - jQuery.extend( jQuery.easing, - { - easeInOutMaterial: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return c/4*((t-=2)*t*t + 2) + b; - } +var _createClass = 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; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +// Check for jQuery. +if (typeof jQuery === 'undefined') { + // Check if require is a defined function. + if (typeof require === 'function') { + jQuery = $ = require('jquery'); + // Else use the dollar sign alias. + } else { + jQuery = $; + } +} +; /* + * jQuery Easing v1.4.0 - http://gsgd.co.uk/sandbox/jquery/easing/ + * Open source under the BSD License. + * Copyright © 2008 George McGinley Smith + * All rights reserved. + * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE + */ + +(function (factory) { + if (typeof define === "function" && define.amd) { + define(['jquery'], function ($) { + return factory($); }); + } else if (typeof module === "object" && typeof module.exports === "object") { + exports = factory(require('jquery')); + } else { + factory(jQuery); + } +})(function ($) { + + // Preserve the original jQuery "swing" easing as "jswing" + $.easing['jswing'] = $.easing['swing']; + + var pow = Math.pow, + sqrt = Math.sqrt, + sin = Math.sin, + cos = Math.cos, + PI = Math.PI, + c1 = 1.70158, + c2 = c1 * 1.525, + c3 = c1 + 1, + c4 = 2 * PI / 3, + c5 = 2 * PI / 4.5; + + // x is the fraction of animation progress, in the range 0..1 + function bounceOut(x) { + var n1 = 7.5625, + d1 = 2.75; + if (x < 1 / d1) { + return n1 * x * x; + } else if (x < 2 / d1) { + return n1 * (x -= 1.5 / d1) * x + .75; + } else if (x < 2.5 / d1) { + return n1 * (x -= 2.25 / d1) * x + .9375; + } else { + return n1 * (x -= 2.625 / d1) * x + .984375; + } + } -;/*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ + $.extend($.easing, { + def: 'easeOutQuad', + swing: function (x) { + return $.easing[$.easing.def](x); + }, + easeInQuad: function (x) { + return x * x; + }, + easeOutQuad: function (x) { + return 1 - (1 - x) * (1 - x); + }, + easeInOutQuad: function (x) { + return x < 0.5 ? 2 * x * x : 1 - pow(-2 * x + 2, 2) / 2; + }, + easeInCubic: function (x) { + return x * x * x; + }, + easeOutCubic: function (x) { + return 1 - pow(1 - x, 3); + }, + easeInOutCubic: function (x) { + return x < 0.5 ? 4 * x * x * x : 1 - pow(-2 * x + 2, 3) / 2; + }, + easeInQuart: function (x) { + return x * x * x * x; + }, + easeOutQuart: function (x) { + return 1 - pow(1 - x, 4); + }, + easeInOutQuart: function (x) { + return x < 0.5 ? 8 * x * x * x * x : 1 - pow(-2 * x + 2, 4) / 2; + }, + easeInQuint: function (x) { + return x * x * x * x * x; + }, + easeOutQuint: function (x) { + return 1 - pow(1 - x, 5); + }, + easeInOutQuint: function (x) { + return x < 0.5 ? 16 * x * x * x * x * x : 1 - pow(-2 * x + 2, 5) / 2; + }, + easeInSine: function (x) { + return 1 - cos(x * PI / 2); + }, + easeOutSine: function (x) { + return sin(x * PI / 2); + }, + easeInOutSine: function (x) { + return -(cos(PI * x) - 1) / 2; + }, + easeInExpo: function (x) { + return x === 0 ? 0 : pow(2, 10 * x - 10); + }, + easeOutExpo: function (x) { + return x === 1 ? 1 : 1 - pow(2, -10 * x); + }, + easeInOutExpo: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? pow(2, 20 * x - 10) / 2 : (2 - pow(2, -20 * x + 10)) / 2; + }, + easeInCirc: function (x) { + return 1 - sqrt(1 - pow(x, 2)); + }, + easeOutCirc: function (x) { + return sqrt(1 - pow(x - 1, 2)); + }, + easeInOutCirc: function (x) { + return x < 0.5 ? (1 - sqrt(1 - pow(2 * x, 2))) / 2 : (sqrt(1 - pow(-2 * x + 2, 2)) + 1) / 2; + }, + easeInElastic: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : -pow(2, 10 * x - 10) * sin((x * 10 - 10.75) * c4); + }, + easeOutElastic: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - 0.75) * c4) + 1; + }, + easeInOutElastic: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(pow(2, 20 * x - 10) * sin((20 * x - 11.125) * c5)) / 2 : pow(2, -20 * x + 10) * sin((20 * x - 11.125) * c5) / 2 + 1; + }, + easeInBack: function (x) { + return c3 * x * x * x - c1 * x * x; + }, + easeOutBack: function (x) { + return 1 + c3 * pow(x - 1, 3) + c1 * pow(x - 1, 2); + }, + easeInOutBack: function (x) { + return x < 0.5 ? pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2; + }, + easeInBounce: function (x) { + return 1 - bounceOut(1 - x); + }, + easeOutBounce: bounceOut, + easeInOutBounce: function (x) { + return x < 0.5 ? (1 - bounceOut(1 - 2 * x)) / 2 : (1 + bounceOut(2 * x - 1)) / 2; + } + }); +});; // Custom Easing +jQuery.extend(jQuery.easing, { + easeInOutMaterial: function (x, t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t + b; + return c / 4 * ((t -= 2) * t * t + 2) + b; + } +});; /*! VelocityJS.org (1.2.3). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ /*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */ -!function(e){function t(e){var t=e.length,r=$.type(e);return"function"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===r||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?a[o.call(e)]||"object":typeof e},$.isArray=Array.isArray||function(e){return"array"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||"object"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof i&&(u=i,i=arguments[s]||{},s++),"object"!=typeof i&&"function"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||"fx")+"queue";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||"fx";var a=$.queue(r,t),n=a.shift();"inprogress"===n&&(n=a.shift()),n&&("fx"===t&&a.unshift("inprogress"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando="velocity"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i="Boolean Number String Function Array Date RegExp Object Error".split(" "),s=0;sn;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var C=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];$.each(C,function(e,t){x.setPropertyValue(w,"display",t)})}x.setPropertyValue(w,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&x.setPropertyValue(w,"visibility",u.visibility);for(var T in S)if("element"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,"tween"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?"":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j]("extract",null,N[1]):N[1]),"transform"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d="(0px, 0px, 0px)",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&"none"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&x.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&x.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="",t.getElementsByTagName("span").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h="swing",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,"velocity",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft="pageXOffset",v.State.scrollPropertyTop="pageYOffset"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft="scrollLeft",v.State.scrollPropertyTop="scrollTop");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e=f)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;en&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e=f||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=f?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=f?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,"display","none")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,"display")&&(u=!0,x.setPropertyValue(e,"display",x.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(x.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(x.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===f&&"filter"===r?d.getPropertyValue(r):d[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,"position");("fixed"===g||"absolute"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+"px")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c]("extract",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r]("name",e),"transform"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r]("extract",e,d)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&"transform"===x.Normalizations.registered[r]("name",e))x.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r]("inject",e,a),r=x.Normalizations.registered[r]("name",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r="";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===f&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}x.setPropertyValue(e,"transform",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,"position"),fontSize:x.getPropertyValue(n,"fontSize")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");v.init(u),e.myParent.appendChild(u),$.each(["overflow","overflowX","overflowY"],function(e,t){v.CSS.setPropertyValue(u,t,"hidden")}),v.CSS.setPropertyValue(u,"position",e.position),v.CSS.setPropertyValue(u,"fontSize",e.fontSize),v.CSS.setPropertyValue(u,"boxSizing","content-box"),$.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){v.CSS.setPropertyValue(u,t,s+"%")}),v.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,"fontSize"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if("scroll"===k){var S=/^x$/i.test(o.axis)?"Left":"Top",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container["scroll"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State["scrollProperty"+S]],A=v.State.scrollAnchor[v.State["scrollProperty"+("Left"===S?"Top":"Left")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:"",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log("tweensContainer (scroll): ",s.scroll,n)}else if("reverse"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);"none"===i(n).opts.display&&(i(n).opts.display="auto"),"hidden"===i(n).opts.visibility&&(i(n).opts.visibility="visible"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if("element"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log("reverse tweensContainer ("+j+"): "+JSON.stringify(E[j]),n)}s=E}else if("start"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp("^"+x.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;cO;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)});;!function(a,b,c,d){"use strict";function k(a,b,c){return setTimeout(q(a,c),b)}function l(a,b,c){return Array.isArray(a)?(m(a,c[b],c),!0):!1}function m(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function x(a){return a.trim().split(/\s+/g)}function y(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function B(a,b){for(var c,f,g=b[0].toUpperCase()+b.slice(1),h=0;h1&&!c.firstMultiple?c.firstMultiple=gb(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=hb(d);b.timeStamp=j(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=lb(h,i),b.distance=kb(h,i),eb(c,b),b.offsetDirection=jb(b.deltaX,b.deltaY),b.scale=g?nb(g.pointers,d):1,b.rotation=g?mb(g.pointers,d):0,fb(c,b);var k=a.element;v(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function eb(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===O||f.eventType===Q)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function fb(a,b){var f,g,h,j,c=a.lastInterval||b,e=b.timeStamp-c.timeStamp;if(b.eventType!=R&&(e>N||c.velocity===d)){var k=c.deltaX-b.deltaX,l=c.deltaY-b.deltaY,m=ib(e,k,l);g=m.x,h=m.y,f=i(m.x)>i(m.y)?m.x:m.y,j=jb(k,l),a.lastInterval=b}else f=c.velocity,g=c.velocityX,h=c.velocityY,j=c.direction;b.velocity=f,b.velocityX=g,b.velocityY=h,b.direction=j}function gb(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:h(c/b),y:h(d/b)}}function ib(a,b,c){return{x:b/a||0,y:c/a||0}}function jb(a,b){return a===b?S:i(a)>=i(b)?a>0?T:U:b>0?V:W}function kb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function lb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function mb(a,b){return lb(b[1],b[0],_)-lb(a[1],a[0],_)}function nb(a,b){return kb(b[0],b[1],_)/kb(a[0],a[1],_)}function rb(){this.evEl=pb,this.evWin=qb,this.allow=!0,this.pressed=!1,ab.apply(this,arguments)}function wb(){this.evEl=ub,this.evWin=vb,ab.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Ab(){this.evTarget=yb,this.evWin=zb,this.started=!1,ab.apply(this,arguments)}function Bb(a,b){var c=z(a.touches),d=z(a.changedTouches);return b&(Q|R)&&(c=A(c.concat(d),"identifier",!0)),[c,d]}function Eb(){this.evTarget=Db,this.targetIds={},ab.apply(this,arguments)}function Fb(a,b){var c=z(a.touches),d=this.targetIds;if(b&(O|P)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=z(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return v(a.target,i)}),b===O)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Q|R)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var xb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},yb="touchstart",zb="touchstart touchmove touchend touchcancel";p(Ab,ab,{handler:function(a){var b=xb[a.type];if(b===O&&(this.started=!0),this.started){var c=Bb.call(this,a,b);b&(Q|R)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}});var Cb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},Db="touchstart touchmove touchend touchcancel";p(Eb,ab,{handler:function(a){var b=Cb[a.type],c=Fb.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}),p(Gb,ab,{handler:function(a,b,c){var d=c.pointerType==J,e=c.pointerType==L;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Q|R)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Hb=B(f.style,"touchAction"),Ib=Hb!==d,Jb="compute",Kb="auto",Lb="manipulation",Mb="none",Nb="pan-x",Ob="pan-y";Pb.prototype={set:function(a){a==Jb&&(a=this.compute()),Ib&&(this.manager.element.style[Hb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return m(this.manager.recognizers,function(b){r(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),Qb(a.join(" "))},preventDefaults:function(a){if(!Ib){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return b.preventDefault(),void 0;var d=this.actions,e=w(d,Mb),f=w(d,Ob),g=w(d,Nb);return e||f&&c&X||g&&c&Y?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var Rb=1,Sb=2,Tb=4,Ub=8,Vb=Ub,Wb=16,Xb=32;Yb.prototype={defaults:{},set:function(a){return n(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(l(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_b(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return l(a,"dropRecognizeWith",this)?this:(a=_b(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(l(a,"requireFailure",this))return this;var b=this.requireFail;return a=_b(a,this),-1===y(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(l(a,"dropRequireFailure",this))return this;a=_b(a,this);var b=y(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function d(d){b.manager.emit(b.options.event+(d?Zb(c):""),a)}var b=this,c=this.state;Ub>c&&d(!0),d(),c>=Ub&&d(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):(this.state=Xb,void 0)},canEmit:function(){for(var a=0;af?T:U,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?S:0>g?V:W,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return ac.prototype.attrTest.call(this,a)&&(this.state&Sb||!(this.state&Sb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),p(cc,ac,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Sb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),p(dc,Yb,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Kb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Q|R)&&!e)this.reset();else if(a.eventType&O)this.reset(),this._timer=k(function(){this.state=Vb,this.tryEmit()},b.time,this);else if(a.eventType&Q)return Vb;return Xb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===Vb&&(a&&a.eventType&Q?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=j(),this.manager.emit(this.options.event,this._input)))}}),p(ec,ac,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Sb)}}),p(fc,ac,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:X|Y,pointers:1},getTouchAction:function(){return bc.prototype.getTouchAction.call(this)},attrTest:function(a){var c,b=this.options.direction;return b&(X|Y)?c=a.velocity:b&X?c=a.velocityX:b&Y&&(c=a.velocityY),this._super.attrTest.call(this,a)&&b&a.direction&&a.distance>this.options.threshold&&i(c)>this.options.velocity&&a.eventType&Q},emit:function(a){var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),p(gc,Yb,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Lb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance 0 && t - 1 in e; + }if (!e.jQuery) { + var r = function (e, t) { + return new r.fn.init(e, t); + };r.isWindow = function (e) { + return null != e && e == e.window; + }, r.type = function (e) { + return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[i.call(e)] || "object" : typeof e; + }, r.isArray = Array.isArray || function (e) { + return "array" === r.type(e); + }, r.isPlainObject = function (e) { + var t;if (!e || "object" !== r.type(e) || e.nodeType || r.isWindow(e)) return !1;try { + if (e.constructor && !o.call(e, "constructor") && !o.call(e.constructor.prototype, "isPrototypeOf")) return !1; + } catch (a) { + return !1; + }for (t in e) {}return void 0 === t || o.call(e, t); + }, r.each = function (e, r, a) { + var n, + o = 0, + i = e.length, + s = t(e);if (a) { + if (s) for (; i > o && (n = r.apply(e[o], a), n !== !1); o++) {} else for (o in e) { + if (n = r.apply(e[o], a), n === !1) break; + } + } else if (s) for (; i > o && (n = r.call(e[o], o, e[o]), n !== !1); o++) {} else for (o in e) { + if (n = r.call(e[o], o, e[o]), n === !1) break; + }return e; + }, r.data = function (e, t, n) { + if (void 0 === n) { + var o = e[r.expando], + i = o && a[o];if (void 0 === t) return i;if (i && t in i) return i[t]; + } else if (void 0 !== t) { + var o = e[r.expando] || (e[r.expando] = ++r.uuid);return a[o] = a[o] || {}, a[o][t] = n, n; + } + }, r.removeData = function (e, t) { + var n = e[r.expando], + o = n && a[n];o && r.each(t, function (e, t) { + delete o[t]; + }); + }, r.extend = function () { + var e, + t, + a, + n, + o, + i, + s = arguments[0] || {}, + l = 1, + u = arguments.length, + c = !1;for ("boolean" == typeof s && (c = s, s = arguments[l] || {}, l++), "object" != typeof s && "function" !== r.type(s) && (s = {}), l === u && (s = this, l--); u > l; l++) { + if (null != (o = arguments[l])) for (n in o) { + e = s[n], a = o[n], s !== a && (c && a && (r.isPlainObject(a) || (t = r.isArray(a))) ? (t ? (t = !1, i = e && r.isArray(e) ? e : []) : i = e && r.isPlainObject(e) ? e : {}, s[n] = r.extend(c, i, a)) : void 0 !== a && (s[n] = a)); + } + }return s; + }, r.queue = function (e, a, n) { + function o(e, r) { + var a = r || [];return null != e && (t(Object(e)) ? !function (e, t) { + for (var r = +t.length, a = 0, n = e.length; r > a;) { + e[n++] = t[a++]; + }if (r !== r) for (; void 0 !== t[a];) { + e[n++] = t[a++]; + }return e.length = n, e; + }(a, "string" == typeof e ? [e] : e) : [].push.call(a, e)), a; + }if (e) { + a = (a || "fx") + "queue";var i = r.data(e, a);return n ? (!i || r.isArray(n) ? i = r.data(e, a, o(n)) : i.push(n), i) : i || []; + } + }, r.dequeue = function (e, t) { + r.each(e.nodeType ? [e] : e, function (e, a) { + t = t || "fx";var n = r.queue(a, t), + o = n.shift();"inprogress" === o && (o = n.shift()), o && ("fx" === t && n.unshift("inprogress"), o.call(a, function () { + r.dequeue(a, t); + })); + }); + }, r.fn = r.prototype = { init: function (e) { + if (e.nodeType) return this[0] = e, this;throw new Error("Not a DOM node."); + }, offset: function () { + var t = this[0].getBoundingClientRect ? this[0].getBoundingClientRect() : { top: 0, left: 0 };return { top: t.top + (e.pageYOffset || document.scrollTop || 0) - (document.clientTop || 0), left: t.left + (e.pageXOffset || document.scrollLeft || 0) - (document.clientLeft || 0) }; + }, position: function () { + function e() { + for (var e = this.offsetParent || document; e && "html" === !e.nodeType.toLowerCase && "static" === e.style.position;) { + e = e.offsetParent; + }return e || document; + }var t = this[0], + e = e.apply(t), + a = this.offset(), + n = /^(?:body|html)$/i.test(e.nodeName) ? { top: 0, left: 0 } : r(e).offset();return a.top -= parseFloat(t.style.marginTop) || 0, a.left -= parseFloat(t.style.marginLeft) || 0, e.style && (n.top += parseFloat(e.style.borderTopWidth) || 0, n.left += parseFloat(e.style.borderLeftWidth) || 0), { top: a.top - n.top, left: a.left - n.left }; + } };var a = {};r.expando = "velocity" + new Date().getTime(), r.uuid = 0;for (var n = {}, o = n.hasOwnProperty, i = n.toString, s = "Boolean Number String Function Array Date RegExp Object Error".split(" "), l = 0; l < s.length; l++) { + n["[object " + s[l] + "]"] = s[l].toLowerCase(); + }r.fn.init.prototype = r.fn, e.Velocity = { Utilities: r }; + } +}(window), function (e) { + "object" == typeof module && "object" == typeof module.exports ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : e(); +}(function () { + return function (e, t, r, a) { + function n(e) { + for (var t = -1, r = e ? e.length : 0, a = []; ++t < r;) { + var n = e[t];n && a.push(n); + }return a; + }function o(e) { + return m.isWrapped(e) ? e = [].slice.call(e) : m.isNode(e) && (e = [e]), e; + }function i(e) { + var t = f.data(e, "velocity");return null === t ? a : t; + }function s(e) { + return function (t) { + return Math.round(t * e) * (1 / e); + }; + }function l(e, r, a, n) { + function o(e, t) { + return 1 - 3 * t + 3 * e; + }function i(e, t) { + return 3 * t - 6 * e; + }function s(e) { + return 3 * e; + }function l(e, t, r) { + return ((o(t, r) * e + i(t, r)) * e + s(t)) * e; + }function u(e, t, r) { + return 3 * o(t, r) * e * e + 2 * i(t, r) * e + s(t); + }function c(t, r) { + for (var n = 0; m > n; ++n) { + var o = u(r, e, a);if (0 === o) return r;var i = l(r, e, a) - t;r -= i / o; + }return r; + }function p() { + for (var t = 0; b > t; ++t) { + w[t] = l(t * x, e, a); + } + }function f(t, r, n) { + var o, + i, + s = 0;do { + i = r + (n - r) / 2, o = l(i, e, a) - t, o > 0 ? n = i : r = i; + } while (Math.abs(o) > h && ++s < v);return i; + }function d(t) { + for (var r = 0, n = 1, o = b - 1; n != o && w[n] <= t; ++n) { + r += x; + }--n;var i = (t - w[n]) / (w[n + 1] - w[n]), + s = r + i * x, + l = u(s, e, a);return l >= y ? c(t, s) : 0 == l ? s : f(t, r, r + x); + }function g() { + V = !0, (e != r || a != n) && p(); + }var m = 4, + y = .001, + h = 1e-7, + v = 10, + b = 11, + x = 1 / (b - 1), + S = "Float32Array" in t;if (4 !== arguments.length) return !1;for (var P = 0; 4 > P; ++P) { + if ("number" != typeof arguments[P] || isNaN(arguments[P]) || !isFinite(arguments[P])) return !1; + }e = Math.min(e, 1), a = Math.min(a, 1), e = Math.max(e, 0), a = Math.max(a, 0);var w = S ? new Float32Array(b) : new Array(b), + V = !1, + C = function (t) { + return V || g(), e === r && a === n ? t : 0 === t ? 0 : 1 === t ? 1 : l(d(t), r, n); + };C.getControlPoints = function () { + return [{ x: e, y: r }, { x: a, y: n }]; + };var T = "generateBezier(" + [e, r, a, n] + ")";return C.toString = function () { + return T; + }, C; + }function u(e, t) { + var r = e;return m.isString(e) ? b.Easings[e] || (r = !1) : r = m.isArray(e) && 1 === e.length ? s.apply(null, e) : m.isArray(e) && 2 === e.length ? x.apply(null, e.concat([t])) : m.isArray(e) && 4 === e.length ? l.apply(null, e) : !1, r === !1 && (r = b.Easings[b.defaults.easing] ? b.defaults.easing : v), r; + }function c(e) { + if (e) { + var t = new Date().getTime(), + r = b.State.calls.length;r > 1e4 && (b.State.calls = n(b.State.calls));for (var o = 0; r > o; o++) { + if (b.State.calls[o]) { + var s = b.State.calls[o], + l = s[0], + u = s[2], + d = s[3], + g = !!d, + y = null;d || (d = b.State.calls[o][3] = t - 16);for (var h = Math.min((t - d) / u.duration, 1), v = 0, x = l.length; x > v; v++) { + var P = l[v], + V = P.element;if (i(V)) { + var C = !1;if (u.display !== a && null !== u.display && "none" !== u.display) { + if ("flex" === u.display) { + var T = ["-webkit-box", "-moz-box", "-ms-flexbox", "-webkit-flex"];f.each(T, function (e, t) { + S.setPropertyValue(V, "display", t); + }); + }S.setPropertyValue(V, "display", u.display); + }u.visibility !== a && "hidden" !== u.visibility && S.setPropertyValue(V, "visibility", u.visibility);for (var k in P) { + if ("element" !== k) { + var A, + F = P[k], + j = m.isString(F.easing) ? b.Easings[F.easing] : F.easing;if (1 === h) A = F.endValue;else { + var E = F.endValue - F.startValue;if (A = F.startValue + E * j(h, u, E), !g && A === F.currentValue) continue; + }if (F.currentValue = A, "tween" === k) y = A;else { + if (S.Hooks.registered[k]) { + var H = S.Hooks.getRoot(k), + N = i(V).rootPropertyValueCache[H];N && (F.rootPropertyValue = N); + }var L = S.setPropertyValue(V, k, F.currentValue + (0 === parseFloat(A) ? "" : F.unitType), F.rootPropertyValue, F.scrollData);S.Hooks.registered[k] && (i(V).rootPropertyValueCache[H] = S.Normalizations.registered[H] ? S.Normalizations.registered[H]("extract", null, L[1]) : L[1]), "transform" === L[0] && (C = !0); + } + } + }u.mobileHA && i(V).transformCache.translate3d === a && (i(V).transformCache.translate3d = "(0px, 0px, 0px)", C = !0), C && S.flushTransformCache(V); + } + }u.display !== a && "none" !== u.display && (b.State.calls[o][2].display = !1), u.visibility !== a && "hidden" !== u.visibility && (b.State.calls[o][2].visibility = !1), u.progress && u.progress.call(s[1], s[1], h, Math.max(0, d + u.duration - t), d, y), 1 === h && p(o); + } + } + }b.State.isTicking && w(c); + }function p(e, t) { + if (!b.State.calls[e]) return !1;for (var r = b.State.calls[e][0], n = b.State.calls[e][1], o = b.State.calls[e][2], s = b.State.calls[e][4], l = !1, u = 0, c = r.length; c > u; u++) { + var p = r[u].element;if (t || o.loop || ("none" === o.display && S.setPropertyValue(p, "display", o.display), "hidden" === o.visibility && S.setPropertyValue(p, "visibility", o.visibility)), o.loop !== !0 && (f.queue(p)[1] === a || !/\.velocityQueueEntryFlag/i.test(f.queue(p)[1])) && i(p)) { + i(p).isAnimating = !1, i(p).rootPropertyValueCache = {};var d = !1;f.each(S.Lists.transforms3D, function (e, t) { + var r = /^scale/.test(t) ? 1 : 0, + n = i(p).transformCache[t];i(p).transformCache[t] !== a && new RegExp("^\\(" + r + "[^.]").test(n) && (d = !0, delete i(p).transformCache[t]); + }), o.mobileHA && (d = !0, delete i(p).transformCache.translate3d), d && S.flushTransformCache(p), S.Values.removeClass(p, "velocity-animating"); + }if (!t && o.complete && !o.loop && u === c - 1) try { + o.complete.call(n, n); + } catch (g) { + setTimeout(function () { + throw g; + }, 1); + }s && o.loop !== !0 && s(n), i(p) && o.loop === !0 && !t && (f.each(i(p).tweensContainer, function (e, t) { + /^rotate/.test(e) && 360 === parseFloat(t.endValue) && (t.endValue = 0, t.startValue = 360), /^backgroundPosition/.test(e) && 100 === parseFloat(t.endValue) && "%" === t.unitType && (t.endValue = 0, t.startValue = 100); + }), b(p, "reverse", { loop: !0, delay: o.delay })), o.queue !== !1 && f.dequeue(p, o.queue); + }b.State.calls[e] = !1;for (var m = 0, y = b.State.calls.length; y > m; m++) { + if (b.State.calls[m] !== !1) { + l = !0;break; + } + }l === !1 && (b.State.isTicking = !1, delete b.State.calls, b.State.calls = []); + }var f, + d = function () { + if (r.documentMode) return r.documentMode;for (var e = 7; e > 4; e--) { + var t = r.createElement("div");if (t.innerHTML = "", t.getElementsByTagName("span").length) return t = null, e; + }return a; + }(), + g = function () { + var e = 0;return t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || function (t) { + var r, + a = new Date().getTime();return r = Math.max(0, 16 - (a - e)), e = a + r, setTimeout(function () { + t(a + r); + }, r); + }; + }(), + m = { isString: function (e) { + return "string" == typeof e; + }, isArray: Array.isArray || function (e) { + return "[object Array]" === Object.prototype.toString.call(e); + }, isFunction: function (e) { + return "[object Function]" === Object.prototype.toString.call(e); + }, isNode: function (e) { + return e && e.nodeType; + }, isNodeList: function (e) { + return "object" == typeof e && /^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e)) && e.length !== a && (0 === e.length || "object" == typeof e[0] && e[0].nodeType > 0); + }, isWrapped: function (e) { + return e && (e.jquery || t.Zepto && t.Zepto.zepto.isZ(e)); + }, isSVG: function (e) { + return t.SVGElement && e instanceof t.SVGElement; + }, isEmptyObject: function (e) { + for (var t in e) { + return !1; + }return !0; + } }, + y = !1;if (e.fn && e.fn.jquery ? (f = e, y = !0) : f = t.Velocity.Utilities, 8 >= d && !y) throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if (7 >= d) return void (jQuery.fn.velocity = jQuery.fn.animate);var h = 400, + v = "swing", + b = { State: { isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), isAndroid: /Android/i.test(navigator.userAgent), isGingerbread: /Android 2\.3\.[3-7]/i.test(navigator.userAgent), isChrome: t.chrome, isFirefox: /Firefox/i.test(navigator.userAgent), prefixElement: r.createElement("div"), prefixMatches: {}, scrollAnchor: null, scrollPropertyLeft: null, scrollPropertyTop: null, isTicking: !1, calls: [] }, CSS: {}, Utilities: f, Redirects: {}, Easings: {}, Promise: t.Promise, defaults: { queue: "", duration: h, easing: v, begin: a, complete: a, progress: a, display: a, visibility: a, loop: !1, delay: !1, mobileHA: !0, _cacheValues: !0 }, init: function (e) { + f.data(e, "velocity", { isSVG: m.isSVG(e), isAnimating: !1, computedStyle: null, tweensContainer: null, rootPropertyValueCache: {}, transformCache: {} }); + }, hook: null, mock: !1, version: { major: 1, minor: 2, patch: 2 }, debug: !1 };t.pageYOffset !== a ? (b.State.scrollAnchor = t, b.State.scrollPropertyLeft = "pageXOffset", b.State.scrollPropertyTop = "pageYOffset") : (b.State.scrollAnchor = r.documentElement || r.body.parentNode || r.body, b.State.scrollPropertyLeft = "scrollLeft", b.State.scrollPropertyTop = "scrollTop");var x = function () { + function e(e) { + return -e.tension * e.x - e.friction * e.v; + }function t(t, r, a) { + var n = { x: t.x + a.dx * r, v: t.v + a.dv * r, tension: t.tension, friction: t.friction };return { dx: n.v, dv: e(n) }; + }function r(r, a) { + var n = { dx: r.v, dv: e(r) }, + o = t(r, .5 * a, n), + i = t(r, .5 * a, o), + s = t(r, a, i), + l = 1 / 6 * (n.dx + 2 * (o.dx + i.dx) + s.dx), + u = 1 / 6 * (n.dv + 2 * (o.dv + i.dv) + s.dv);return r.x = r.x + l * a, r.v = r.v + u * a, r; + }return function a(e, t, n) { + var o, + i, + s, + l = { x: -1, v: 0, tension: null, friction: null }, + u = [0], + c = 0, + p = 1e-4, + f = .016;for (e = parseFloat(e) || 500, t = parseFloat(t) || 20, n = n || null, l.tension = e, l.friction = t, o = null !== n, o ? (c = a(e, t), i = c / n * f) : i = f; s = r(s || l, i), u.push(1 + s.x), c += 16, Math.abs(s.x) > p && Math.abs(s.v) > p;) {}return o ? function (e) { + return u[e * (u.length - 1) | 0]; + } : c; + }; + }();b.Easings = { linear: function (e) { + return e; + }, swing: function (e) { + return .5 - Math.cos(e * Math.PI) / 2; + }, spring: function (e) { + return 1 - Math.cos(4.5 * e * Math.PI) * Math.exp(6 * -e); + } }, f.each([["ease", [.25, .1, .25, 1]], ["ease-in", [.42, 0, 1, 1]], ["ease-out", [0, 0, .58, 1]], ["ease-in-out", [.42, 0, .58, 1]], ["easeInSine", [.47, 0, .745, .715]], ["easeOutSine", [.39, .575, .565, 1]], ["easeInOutSine", [.445, .05, .55, .95]], ["easeInQuad", [.55, .085, .68, .53]], ["easeOutQuad", [.25, .46, .45, .94]], ["easeInOutQuad", [.455, .03, .515, .955]], ["easeInCubic", [.55, .055, .675, .19]], ["easeOutCubic", [.215, .61, .355, 1]], ["easeInOutCubic", [.645, .045, .355, 1]], ["easeInQuart", [.895, .03, .685, .22]], ["easeOutQuart", [.165, .84, .44, 1]], ["easeInOutQuart", [.77, 0, .175, 1]], ["easeInQuint", [.755, .05, .855, .06]], ["easeOutQuint", [.23, 1, .32, 1]], ["easeInOutQuint", [.86, 0, .07, 1]], ["easeInExpo", [.95, .05, .795, .035]], ["easeOutExpo", [.19, 1, .22, 1]], ["easeInOutExpo", [1, 0, 0, 1]], ["easeInCirc", [.6, .04, .98, .335]], ["easeOutCirc", [.075, .82, .165, 1]], ["easeInOutCirc", [.785, .135, .15, .86]]], function (e, t) { + b.Easings[t[0]] = l.apply(null, t[1]); + });var S = b.CSS = { RegEx: { isHex: /^#([A-f\d]{3}){1,2}$/i, valueUnwrap: /^[A-z]+\((.*)\)$/i, wrappedValueAlreadyExtracted: /[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/, valueSplit: /([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi }, Lists: { colors: ["fill", "stroke", "stopColor", "color", "backgroundColor", "borderColor", "borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor", "outlineColor"], transformsBase: ["translateX", "translateY", "scale", "scaleX", "scaleY", "skewX", "skewY", "rotateZ"], transforms3D: ["transformPerspective", "translateZ", "scaleZ", "rotateX", "rotateY"] }, Hooks: { templates: { textShadow: ["Color X Y Blur", "black 0px 0px 0px"], boxShadow: ["Color X Y Blur Spread", "black 0px 0px 0px 0px"], clip: ["Top Right Bottom Left", "0px 0px 0px 0px"], backgroundPosition: ["X Y", "0% 0%"], transformOrigin: ["X Y Z", "50% 50% 0px"], perspectiveOrigin: ["X Y", "50% 50%"] }, registered: {}, register: function () { + for (var e = 0; e < S.Lists.colors.length; e++) { + var t = "color" === S.Lists.colors[e] ? "0 0 0 1" : "255 255 255 1";S.Hooks.templates[S.Lists.colors[e]] = ["Red Green Blue Alpha", t]; + }var r, a, n;if (d) for (r in S.Hooks.templates) { + a = S.Hooks.templates[r], n = a[0].split(" ");var o = a[1].match(S.RegEx.valueSplit);"Color" === n[0] && (n.push(n.shift()), o.push(o.shift()), S.Hooks.templates[r] = [n.join(" "), o.join(" ")]); + }for (r in S.Hooks.templates) { + a = S.Hooks.templates[r], n = a[0].split(" ");for (var e in n) { + var i = r + n[e], + s = e;S.Hooks.registered[i] = [r, s]; + } + } + }, getRoot: function (e) { + var t = S.Hooks.registered[e];return t ? t[0] : e; + }, cleanRootPropertyValue: function (e, t) { + return S.RegEx.valueUnwrap.test(t) && (t = t.match(S.RegEx.valueUnwrap)[1]), S.Values.isCSSNullValue(t) && (t = S.Hooks.templates[e][1]), t; + }, extractValue: function (e, t) { + var r = S.Hooks.registered[e];if (r) { + var a = r[0], + n = r[1];return t = S.Hooks.cleanRootPropertyValue(a, t), t.toString().match(S.RegEx.valueSplit)[n]; + }return t; + }, injectValue: function (e, t, r) { + var a = S.Hooks.registered[e];if (a) { + var n, + o, + i = a[0], + s = a[1];return r = S.Hooks.cleanRootPropertyValue(i, r), n = r.toString().match(S.RegEx.valueSplit), n[s] = t, o = n.join(" "); + }return r; + } }, Normalizations: { registered: { clip: function (e, t, r) { + switch (e) {case "name": + return "clip";case "extract": + var a;return S.RegEx.wrappedValueAlreadyExtracted.test(r) ? a = r : (a = r.toString().match(S.RegEx.valueUnwrap), a = a ? a[1].replace(/,(\s+)?/g, " ") : r), a;case "inject": + return "rect(" + r + ")";} + }, blur: function (e, t, r) { + switch (e) {case "name": + return b.State.isFirefox ? "filter" : "-webkit-filter";case "extract": + var a = parseFloat(r);if (!a && 0 !== a) { + var n = r.toString().match(/blur\(([0-9]+[A-z]+)\)/i);a = n ? n[1] : 0; + }return a;case "inject": + return parseFloat(r) ? "blur(" + r + ")" : "none";} + }, opacity: function (e, t, r) { + if (8 >= d) switch (e) {case "name": + return "filter";case "extract": + var a = r.toString().match(/alpha\(opacity=(.*)\)/i);return r = a ? a[1] / 100 : 1;case "inject": + return t.style.zoom = 1, parseFloat(r) >= 1 ? "" : "alpha(opacity=" + parseInt(100 * parseFloat(r), 10) + ")";} else switch (e) {case "name": + return "opacity";case "extract": + return r;case "inject": + return r;} + } }, register: function () { + 9 >= d || b.State.isGingerbread || (S.Lists.transformsBase = S.Lists.transformsBase.concat(S.Lists.transforms3D));for (var e = 0; e < S.Lists.transformsBase.length; e++) { + !function () { + var t = S.Lists.transformsBase[e];S.Normalizations.registered[t] = function (e, r, n) { + switch (e) {case "name": + return "transform";case "extract": + return i(r) === a || i(r).transformCache[t] === a ? /^scale/i.test(t) ? 1 : 0 : i(r).transformCache[t].replace(/[()]/g, "");case "inject": + var o = !1;switch (t.substr(0, t.length - 1)) {case "translate": + o = !/(%|px|em|rem|vw|vh|\d)$/i.test(n);break;case "scal":case "scale": + b.State.isAndroid && i(r).transformCache[t] === a && 1 > n && (n = 1), o = !/(\d)$/i.test(n);break;case "skew": + o = !/(deg|\d)$/i.test(n);break;case "rotate": + o = !/(deg|\d)$/i.test(n);}return o || (i(r).transformCache[t] = "(" + n + ")"), i(r).transformCache[t];} + }; + }(); + }for (var e = 0; e < S.Lists.colors.length; e++) { + !function () { + var t = S.Lists.colors[e];S.Normalizations.registered[t] = function (e, r, n) { + switch (e) {case "name": + return t;case "extract": + var o;if (S.RegEx.wrappedValueAlreadyExtracted.test(n)) o = n;else { + var i, + s = { black: "rgb(0, 0, 0)", blue: "rgb(0, 0, 255)", gray: "rgb(128, 128, 128)", green: "rgb(0, 128, 0)", red: "rgb(255, 0, 0)", white: "rgb(255, 255, 255)" };/^[A-z]+$/i.test(n) ? i = s[n] !== a ? s[n] : s.black : S.RegEx.isHex.test(n) ? i = "rgb(" + S.Values.hexToRgb(n).join(" ") + ")" : /^rgba?\(/i.test(n) || (i = s.black), o = (i || n).toString().match(S.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g, " "); + }return 8 >= d || 3 !== o.split(" ").length || (o += " 1"), o;case "inject": + return 8 >= d ? 4 === n.split(" ").length && (n = n.split(/\s+/).slice(0, 3).join(" ")) : 3 === n.split(" ").length && (n += " 1"), (8 >= d ? "rgb" : "rgba") + "(" + n.replace(/\s+/g, ",").replace(/\.(\d)+(?=,)/g, "") + ")";} + }; + }(); + } + } }, Names: { camelCase: function (e) { + return e.replace(/-(\w)/g, function (e, t) { + return t.toUpperCase(); + }); + }, SVGAttribute: function (e) { + var t = "width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return (d || b.State.isAndroid && !b.State.isChrome) && (t += "|transform"), new RegExp("^(" + t + ")$", "i").test(e); + }, prefixCheck: function (e) { + if (b.State.prefixMatches[e]) return [b.State.prefixMatches[e], !0];for (var t = ["", "Webkit", "Moz", "ms", "O"], r = 0, a = t.length; a > r; r++) { + var n;if (n = 0 === r ? e : t[r] + e.replace(/^\w/, function (e) { + return e.toUpperCase(); + }), m.isString(b.State.prefixElement.style[n])) return b.State.prefixMatches[e] = n, [n, !0]; + }return [e, !1]; + } }, Values: { hexToRgb: function (e) { + var t, + r = /^#?([a-f\d])([a-f\d])([a-f\d])$/i, + a = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return e = e.replace(r, function (e, t, r, a) { + return t + t + r + r + a + a; + }), t = a.exec(e), t ? [parseInt(t[1], 16), parseInt(t[2], 16), parseInt(t[3], 16)] : [0, 0, 0]; + }, isCSSNullValue: function (e) { + return 0 == e || /^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e); + }, getUnitType: function (e) { + return (/^(rotate|skew)/i.test(e) ? "deg" : /(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e) ? "" : "px" + ); + }, getDisplayType: function (e) { + var t = e && e.tagName.toString().toLowerCase();return (/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t) ? "inline" : /^(li)$/i.test(t) ? "list-item" : /^(tr)$/i.test(t) ? "table-row" : /^(table)$/i.test(t) ? "table" : /^(tbody)$/i.test(t) ? "table-row-group" : "block" + ); + }, addClass: function (e, t) { + e.classList ? e.classList.add(t) : e.className += (e.className.length ? " " : "") + t; + }, removeClass: function (e, t) { + e.classList ? e.classList.remove(t) : e.className = e.className.toString().replace(new RegExp("(^|\\s)" + t.split(" ").join("|") + "(\\s|$)", "gi"), " "); + } }, getPropertyValue: function (e, r, n, o) { + function s(e, r) { + function n() { + u && S.setPropertyValue(e, "display", "none"); + }var l = 0;if (8 >= d) l = f.css(e, r);else { + var u = !1;if (/^(width|height)$/.test(r) && 0 === S.getPropertyValue(e, "display") && (u = !0, S.setPropertyValue(e, "display", S.Values.getDisplayType(e))), !o) { + if ("height" === r && "border-box" !== S.getPropertyValue(e, "boxSizing").toString().toLowerCase()) { + var c = e.offsetHeight - (parseFloat(S.getPropertyValue(e, "borderTopWidth")) || 0) - (parseFloat(S.getPropertyValue(e, "borderBottomWidth")) || 0) - (parseFloat(S.getPropertyValue(e, "paddingTop")) || 0) - (parseFloat(S.getPropertyValue(e, "paddingBottom")) || 0);return n(), c; + }if ("width" === r && "border-box" !== S.getPropertyValue(e, "boxSizing").toString().toLowerCase()) { + var p = e.offsetWidth - (parseFloat(S.getPropertyValue(e, "borderLeftWidth")) || 0) - (parseFloat(S.getPropertyValue(e, "borderRightWidth")) || 0) - (parseFloat(S.getPropertyValue(e, "paddingLeft")) || 0) - (parseFloat(S.getPropertyValue(e, "paddingRight")) || 0);return n(), p; + } + }var g;g = i(e) === a ? t.getComputedStyle(e, null) : i(e).computedStyle ? i(e).computedStyle : i(e).computedStyle = t.getComputedStyle(e, null), "borderColor" === r && (r = "borderTopColor"), l = 9 === d && "filter" === r ? g.getPropertyValue(r) : g[r], ("" === l || null === l) && (l = e.style[r]), n(); + }if ("auto" === l && /^(top|right|bottom|left)$/i.test(r)) { + var m = s(e, "position");("fixed" === m || "absolute" === m && /top|left/i.test(r)) && (l = f(e).position()[r] + "px"); + }return l; + }var l;if (S.Hooks.registered[r]) { + var u = r, + c = S.Hooks.getRoot(u);n === a && (n = S.getPropertyValue(e, S.Names.prefixCheck(c)[0])), S.Normalizations.registered[c] && (n = S.Normalizations.registered[c]("extract", e, n)), l = S.Hooks.extractValue(u, n); + } else if (S.Normalizations.registered[r]) { + var p, g;p = S.Normalizations.registered[r]("name", e), "transform" !== p && (g = s(e, S.Names.prefixCheck(p)[0]), S.Values.isCSSNullValue(g) && S.Hooks.templates[r] && (g = S.Hooks.templates[r][1])), l = S.Normalizations.registered[r]("extract", e, g); + }if (!/^[\d-]/.test(l)) if (i(e) && i(e).isSVG && S.Names.SVGAttribute(r)) { + if (/^(height|width)$/i.test(r)) try { + l = e.getBBox()[r]; + } catch (m) { + l = 0; + } else l = e.getAttribute(r); + } else l = s(e, S.Names.prefixCheck(r)[0]);return S.Values.isCSSNullValue(l) && (l = 0), b.debug >= 2 && console.log("Get " + r + ": " + l), l; + }, setPropertyValue: function (e, r, a, n, o) { + var s = r;if ("scroll" === r) o.container ? o.container["scroll" + o.direction] = a : "Left" === o.direction ? t.scrollTo(a, o.alternateValue) : t.scrollTo(o.alternateValue, a);else if (S.Normalizations.registered[r] && "transform" === S.Normalizations.registered[r]("name", e)) S.Normalizations.registered[r]("inject", e, a), s = "transform", a = i(e).transformCache[r];else { + if (S.Hooks.registered[r]) { + var l = r, + u = S.Hooks.getRoot(r);n = n || S.getPropertyValue(e, u), a = S.Hooks.injectValue(l, a, n), r = u; + }if (S.Normalizations.registered[r] && (a = S.Normalizations.registered[r]("inject", e, a), r = S.Normalizations.registered[r]("name", e)), s = S.Names.prefixCheck(r)[0], 8 >= d) try { + e.style[s] = a; + } catch (c) { + b.debug && console.log("Browser does not support [" + a + "] for [" + s + "]"); + } else i(e) && i(e).isSVG && S.Names.SVGAttribute(r) ? e.setAttribute(r, a) : e.style[s] = a;b.debug >= 2 && console.log("Set " + r + " (" + s + "): " + a); + }return [s, a]; + }, flushTransformCache: function (e) { + function t(t) { + return parseFloat(S.getPropertyValue(e, t)); + }var r = "";if ((d || b.State.isAndroid && !b.State.isChrome) && i(e).isSVG) { + var a = { translate: [t("translateX"), t("translateY")], skewX: [t("skewX")], skewY: [t("skewY")], scale: 1 !== t("scale") ? [t("scale"), t("scale")] : [t("scaleX"), t("scaleY")], rotate: [t("rotateZ"), 0, 0] };f.each(i(e).transformCache, function (e) { + /^translate/i.test(e) ? e = "translate" : /^scale/i.test(e) ? e = "scale" : /^rotate/i.test(e) && (e = "rotate"), a[e] && (r += e + "(" + a[e].join(" ") + ") ", delete a[e]); + }); + } else { + var n, o;f.each(i(e).transformCache, function (t) { + return n = i(e).transformCache[t], "transformPerspective" === t ? (o = n, !0) : (9 === d && "rotateZ" === t && (t = "rotate"), void (r += t + n + " ")); + }), o && (r = "perspective" + o + " " + r); + }S.setPropertyValue(e, "transform", r); + } };S.Hooks.register(), S.Normalizations.register(), b.hook = function (e, t, r) { + var n = a;return e = o(e), f.each(e, function (e, o) { + if (i(o) === a && b.init(o), r === a) n === a && (n = b.CSS.getPropertyValue(o, t));else { + var s = b.CSS.setPropertyValue(o, t, r);"transform" === s[0] && b.CSS.flushTransformCache(o), n = s; + } + }), n; + };var P = function () { + function e() { + return s ? k.promise || null : l; + }function n() { + function e(e) { + function p(e, t) { + var r = a, + n = a, + i = a;return m.isArray(e) ? (r = e[0], !m.isArray(e[1]) && /^[\d-]/.test(e[1]) || m.isFunction(e[1]) || S.RegEx.isHex.test(e[1]) ? i = e[1] : (m.isString(e[1]) && !S.RegEx.isHex.test(e[1]) || m.isArray(e[1])) && (n = t ? e[1] : u(e[1], s.duration), e[2] !== a && (i = e[2]))) : r = e, t || (n = n || s.easing), m.isFunction(r) && (r = r.call(o, V, w)), m.isFunction(i) && (i = i.call(o, V, w)), [r || 0, n, i]; + }function d(e, t) { + var r, a;return a = (t || "0").toString().toLowerCase().replace(/[%A-z]+$/, function (e) { + return r = e, ""; + }), r || (r = S.Values.getUnitType(e)), [a, r]; + }function h() { + var e = { myParent: o.parentNode || r.body, position: S.getPropertyValue(o, "position"), fontSize: S.getPropertyValue(o, "fontSize") }, + a = e.position === L.lastPosition && e.myParent === L.lastParent, + n = e.fontSize === L.lastFontSize;L.lastParent = e.myParent, L.lastPosition = e.position, L.lastFontSize = e.fontSize;var s = 100, + l = {};if (n && a) l.emToPx = L.lastEmToPx, l.percentToPxWidth = L.lastPercentToPxWidth, l.percentToPxHeight = L.lastPercentToPxHeight;else { + var u = i(o).isSVG ? r.createElementNS("http://www.w3.org/2000/svg", "rect") : r.createElement("div");b.init(u), e.myParent.appendChild(u), f.each(["overflow", "overflowX", "overflowY"], function (e, t) { + b.CSS.setPropertyValue(u, t, "hidden"); + }), b.CSS.setPropertyValue(u, "position", e.position), b.CSS.setPropertyValue(u, "fontSize", e.fontSize), b.CSS.setPropertyValue(u, "boxSizing", "content-box"), f.each(["minWidth", "maxWidth", "width", "minHeight", "maxHeight", "height"], function (e, t) { + b.CSS.setPropertyValue(u, t, s + "%"); + }), b.CSS.setPropertyValue(u, "paddingLeft", s + "em"), l.percentToPxWidth = L.lastPercentToPxWidth = (parseFloat(S.getPropertyValue(u, "width", null, !0)) || 1) / s, l.percentToPxHeight = L.lastPercentToPxHeight = (parseFloat(S.getPropertyValue(u, "height", null, !0)) || 1) / s, l.emToPx = L.lastEmToPx = (parseFloat(S.getPropertyValue(u, "paddingLeft")) || 1) / s, e.myParent.removeChild(u); + }return null === L.remToPx && (L.remToPx = parseFloat(S.getPropertyValue(r.body, "fontSize")) || 16), null === L.vwToPx && (L.vwToPx = parseFloat(t.innerWidth) / 100, L.vhToPx = parseFloat(t.innerHeight) / 100), l.remToPx = L.remToPx, l.vwToPx = L.vwToPx, l.vhToPx = L.vhToPx, b.debug >= 1 && console.log("Unit ratios: " + JSON.stringify(l), o), l; + }if (s.begin && 0 === V) try { + s.begin.call(g, g); + } catch (x) { + setTimeout(function () { + throw x; + }, 1); + }if ("scroll" === A) { + var P, + C, + T, + F = /^x$/i.test(s.axis) ? "Left" : "Top", + j = parseFloat(s.offset) || 0;s.container ? m.isWrapped(s.container) || m.isNode(s.container) ? (s.container = s.container[0] || s.container, P = s.container["scroll" + F], T = P + f(o).position()[F.toLowerCase()] + j) : s.container = null : (P = b.State.scrollAnchor[b.State["scrollProperty" + F]], C = b.State.scrollAnchor[b.State["scrollProperty" + ("Left" === F ? "Top" : "Left")]], T = f(o).offset()[F.toLowerCase()] + j), l = { scroll: { rootPropertyValue: !1, startValue: P, currentValue: P, endValue: T, unitType: "", easing: s.easing, scrollData: { container: s.container, direction: F, alternateValue: C } }, element: o }, b.debug && console.log("tweensContainer (scroll): ", l.scroll, o); + } else if ("reverse" === A) { + if (!i(o).tweensContainer) return void f.dequeue(o, s.queue);"none" === i(o).opts.display && (i(o).opts.display = "auto"), "hidden" === i(o).opts.visibility && (i(o).opts.visibility = "visible"), i(o).opts.loop = !1, i(o).opts.begin = null, i(o).opts.complete = null, v.easing || delete s.easing, v.duration || delete s.duration, s = f.extend({}, i(o).opts, s);var E = f.extend(!0, {}, i(o).tweensContainer);for (var H in E) { + if ("element" !== H) { + var N = E[H].startValue;E[H].startValue = E[H].currentValue = E[H].endValue, E[H].endValue = N, m.isEmptyObject(v) || (E[H].easing = s.easing), b.debug && console.log("reverse tweensContainer (" + H + "): " + JSON.stringify(E[H]), o); + } + }l = E; + } else if ("start" === A) { + var E;i(o).tweensContainer && i(o).isAnimating === !0 && (E = i(o).tweensContainer), f.each(y, function (e, t) { + if (RegExp("^" + S.Lists.colors.join("$|^") + "$").test(e)) { + var r = p(t, !0), + n = r[0], + o = r[1], + i = r[2];if (S.RegEx.isHex.test(n)) { + for (var s = ["Red", "Green", "Blue"], l = S.Values.hexToRgb(n), u = i ? S.Values.hexToRgb(i) : a, c = 0; c < s.length; c++) { + var f = [l[c]];o && f.push(o), u !== a && f.push(u[c]), y[e + s[c]] = f; + }delete y[e]; + } + } + });for (var z in y) { + var O = p(y[z]), + q = O[0], + $ = O[1], + M = O[2];z = S.Names.camelCase(z);var I = S.Hooks.getRoot(z), + B = !1;if (i(o).isSVG || "tween" === I || S.Names.prefixCheck(I)[1] !== !1 || S.Normalizations.registered[I] !== a) { + (s.display !== a && null !== s.display && "none" !== s.display || s.visibility !== a && "hidden" !== s.visibility) && /opacity|filter/.test(z) && !M && 0 !== q && (M = 0), s._cacheValues && E && E[z] ? (M === a && (M = E[z].endValue + E[z].unitType), B = i(o).rootPropertyValueCache[I]) : S.Hooks.registered[z] ? M === a ? (B = S.getPropertyValue(o, I), M = S.getPropertyValue(o, z, B)) : B = S.Hooks.templates[I][1] : M === a && (M = S.getPropertyValue(o, z));var W, + G, + Y, + D = !1;if (W = d(z, M), M = W[0], Y = W[1], W = d(z, q), q = W[0].replace(/^([+-\/*])=/, function (e, t) { + return D = t, ""; + }), G = W[1], M = parseFloat(M) || 0, q = parseFloat(q) || 0, "%" === G && (/^(fontSize|lineHeight)$/.test(z) ? (q /= 100, G = "em") : /^scale/.test(z) ? (q /= 100, G = "") : /(Red|Green|Blue)$/i.test(z) && (q = q / 100 * 255, G = "")), /[\/*]/.test(D)) G = Y;else if (Y !== G && 0 !== M) if (0 === q) G = Y;else { + n = n || h();var Q = /margin|padding|left|right|width|text|word|letter/i.test(z) || /X$/.test(z) || "x" === z ? "x" : "y";switch (Y) {case "%": + M *= "x" === Q ? n.percentToPxWidth : n.percentToPxHeight;break;case "px": + break;default: + M *= n[Y + "ToPx"];}switch (G) {case "%": + M *= 1 / ("x" === Q ? n.percentToPxWidth : n.percentToPxHeight);break;case "px": + break;default: + M *= 1 / n[G + "ToPx"];} + }switch (D) {case "+": + q = M + q;break;case "-": + q = M - q;break;case "*": + q = M * q;break;case "/": + q = M / q;}l[z] = { rootPropertyValue: B, startValue: M, currentValue: M, endValue: q, unitType: G, easing: $ }, b.debug && console.log("tweensContainer (" + z + "): " + JSON.stringify(l[z]), o); + } else b.debug && console.log("Skipping [" + I + "] due to a lack of browser support."); + }l.element = o; + }l.element && (S.Values.addClass(o, "velocity-animating"), R.push(l), "" === s.queue && (i(o).tweensContainer = l, i(o).opts = s), i(o).isAnimating = !0, V === w - 1 ? (b.State.calls.push([R, g, s, null, k.resolver]), b.State.isTicking === !1 && (b.State.isTicking = !0, c())) : V++); + }var n, + o = this, + s = f.extend({}, b.defaults, v), + l = {};switch (i(o) === a && b.init(o), parseFloat(s.delay) && s.queue !== !1 && f.queue(o, s.queue, function (e) { + b.velocityQueueEntryFlag = !0, i(o).delayTimer = { setTimeout: setTimeout(e, parseFloat(s.delay)), next: e }; + }), s.duration.toString().toLowerCase()) {case "fast": + s.duration = 200;break;case "normal": + s.duration = h;break;case "slow": + s.duration = 600;break;default: + s.duration = parseFloat(s.duration) || 1;}b.mock !== !1 && (b.mock === !0 ? s.duration = s.delay = 1 : (s.duration *= parseFloat(b.mock) || 1, s.delay *= parseFloat(b.mock) || 1)), s.easing = u(s.easing, s.duration), s.begin && !m.isFunction(s.begin) && (s.begin = null), s.progress && !m.isFunction(s.progress) && (s.progress = null), s.complete && !m.isFunction(s.complete) && (s.complete = null), s.display !== a && null !== s.display && (s.display = s.display.toString().toLowerCase(), "auto" === s.display && (s.display = b.CSS.Values.getDisplayType(o))), s.visibility !== a && null !== s.visibility && (s.visibility = s.visibility.toString().toLowerCase()), s.mobileHA = s.mobileHA && b.State.isMobile && !b.State.isGingerbread, s.queue === !1 ? s.delay ? setTimeout(e, s.delay) : e() : f.queue(o, s.queue, function (t, r) { + return r === !0 ? (k.promise && k.resolver(g), !0) : (b.velocityQueueEntryFlag = !0, void e(t)); + }), "" !== s.queue && "fx" !== s.queue || "inprogress" === f.queue(o)[0] || f.dequeue(o); + }var s, + l, + d, + g, + y, + v, + x = arguments[0] && (arguments[0].p || f.isPlainObject(arguments[0].properties) && !arguments[0].properties.names || m.isString(arguments[0].properties));if (m.isWrapped(this) ? (s = !1, d = 0, g = this, l = this) : (s = !0, d = 1, g = x ? arguments[0].elements || arguments[0].e : arguments[0]), g = o(g)) { + x ? (y = arguments[0].properties || arguments[0].p, v = arguments[0].options || arguments[0].o) : (y = arguments[d], v = arguments[d + 1]);var w = g.length, + V = 0;if (!/^(stop|finish)$/i.test(y) && !f.isPlainObject(v)) { + var C = d + 1;v = {};for (var T = C; T < arguments.length; T++) { + m.isArray(arguments[T]) || !/^(fast|normal|slow)$/i.test(arguments[T]) && !/^\d/.test(arguments[T]) ? m.isString(arguments[T]) || m.isArray(arguments[T]) ? v.easing = arguments[T] : m.isFunction(arguments[T]) && (v.complete = arguments[T]) : v.duration = arguments[T]; + } + }var k = { promise: null, resolver: null, rejecter: null };s && b.Promise && (k.promise = new b.Promise(function (e, t) { + k.resolver = e, k.rejecter = t; + }));var A;switch (y) {case "scroll": + A = "scroll";break;case "reverse": + A = "reverse";break;case "finish":case "stop": + f.each(g, function (e, t) { + i(t) && i(t).delayTimer && (clearTimeout(i(t).delayTimer.setTimeout), i(t).delayTimer.next && i(t).delayTimer.next(), delete i(t).delayTimer); + });var F = [];return f.each(b.State.calls, function (e, t) { + t && f.each(t[1], function (r, n) { + var o = v === a ? "" : v;return o === !0 || t[2].queue === o || v === a && t[2].queue === !1 ? void f.each(g, function (r, a) { + a === n && ((v === !0 || m.isString(v)) && (f.each(f.queue(a, m.isString(v) ? v : ""), function (e, t) { + m.isFunction(t) && t(null, !0); + }), f.queue(a, m.isString(v) ? v : "", [])), "stop" === y ? (i(a) && i(a).tweensContainer && o !== !1 && f.each(i(a).tweensContainer, function (e, t) { + t.endValue = t.currentValue; + }), F.push(e)) : "finish" === y && (t[2].duration = 1)); + }) : !0; + }); + }), "stop" === y && (f.each(F, function (e, t) { + p(t, !0); + }), k.promise && k.resolver(g)), e();default: + if (!f.isPlainObject(y) || m.isEmptyObject(y)) { + if (m.isString(y) && b.Redirects[y]) { + var j = f.extend({}, v), + E = j.duration, + H = j.delay || 0;return j.backwards === !0 && (g = f.extend(!0, [], g).reverse()), f.each(g, function (e, t) { + parseFloat(j.stagger) ? j.delay = H + parseFloat(j.stagger) * e : m.isFunction(j.stagger) && (j.delay = H + j.stagger.call(t, e, w)), j.drag && (j.duration = parseFloat(E) || (/^(callout|transition)/.test(y) ? 1e3 : h), j.duration = Math.max(j.duration * (j.backwards ? 1 - e / w : (e + 1) / w), .75 * j.duration, 200)), b.Redirects[y].call(t, t, j || {}, e, w, g, k.promise ? k : a); + }), e(); + }var N = "Velocity: First argument (" + y + ") was not a property map, a known action, or a registered redirect. Aborting.";return k.promise ? k.rejecter(new Error(N)) : console.log(N), e(); + }A = "start";}var L = { lastParent: null, lastPosition: null, lastFontSize: null, lastPercentToPxWidth: null, lastPercentToPxHeight: null, lastEmToPx: null, remToPx: null, vwToPx: null, vhToPx: null }, + R = [];f.each(g, function (e, t) { + m.isNode(t) && n.call(t); + });var z, + j = f.extend({}, b.defaults, v);if (j.loop = parseInt(j.loop), z = 2 * j.loop - 1, j.loop) for (var O = 0; z > O; O++) { + var q = { delay: j.delay, progress: j.progress };O === z - 1 && (q.display = j.display, q.visibility = j.visibility, q.complete = j.complete), P(g, "reverse", q); + }return e(); + } + };b = f.extend(P, b), b.animate = P;var w = t.requestAnimationFrame || g;return b.State.isMobile || r.hidden === a || r.addEventListener("visibilitychange", function () { + r.hidden ? (w = function (e) { + return setTimeout(function () { + e(!0); + }, 16); + }, c()) : w = t.requestAnimationFrame || g; + }), e.Velocity = b, e !== t && (e.fn.velocity = P, e.fn.velocity.defaults = b.defaults), f.each(["Down", "Up"], function (e, t) { + b.Redirects["slide" + t] = function (e, r, n, o, i, s) { + var l = f.extend({}, r), + u = l.begin, + c = l.complete, + p = { height: "", marginTop: "", marginBottom: "", paddingTop: "", paddingBottom: "" }, + d = {};l.display === a && (l.display = "Down" === t ? "inline" === b.CSS.Values.getDisplayType(e) ? "inline-block" : "block" : "none"), l.begin = function () { + u && u.call(i, i);for (var r in p) { + d[r] = e.style[r];var a = b.CSS.getPropertyValue(e, r);p[r] = "Down" === t ? [a, 0] : [0, a]; + }d.overflow = e.style.overflow, e.style.overflow = "hidden"; + }, l.complete = function () { + for (var t in d) { + e.style[t] = d[t]; + }c && c.call(i, i), s && s.resolver(i); + }, b(e, p, l); + }; + }), f.each(["In", "Out"], function (e, t) { + b.Redirects["fade" + t] = function (e, r, n, o, i, s) { + var l = f.extend({}, r), + u = { opacity: "In" === t ? 1 : 0 }, + c = l.complete;l.complete = n !== o - 1 ? l.begin = null : function () { + c && c.call(i, i), s && s.resolver(i); + }, l.display === a && (l.display = "In" === t ? "auto" : "none"), b(this, u, l); + }; + }), b; + }(window.jQuery || window.Zepto || window, window, document); +})); +;!function (a, b, c, d) { + "use strict"; + function k(a, b, c) { + return setTimeout(q(a, c), b); + }function l(a, b, c) { + return Array.isArray(a) ? (m(a, c[b], c), !0) : !1; + }function m(a, b, c) { + var e;if (a) if (a.forEach) a.forEach(b, c);else if (a.length !== d) for (e = 0; e < a.length;) { + b.call(c, a[e], e, a), e++; + } else for (e in a) { + a.hasOwnProperty(e) && b.call(c, a[e], e, a); } -}(function($, Hammer) { - function hammerify(el, options) { - var $el = $(el); - if(!$el.data("hammer")) { - $el.data("hammer", new Hammer($el[0], options)); + }function n(a, b, c) { + for (var e = Object.keys(b), f = 0; f < e.length;) { + (!c || c && a[e[f]] === d) && (a[e[f]] = b[e[f]]), f++; + }return a; + }function o(a, b) { + return n(a, b, !0); + }function p(a, b, c) { + var e, + d = b.prototype;e = a.prototype = Object.create(d), e.constructor = a, e._super = d, c && n(e, c); + }function q(a, b) { + return function () { + return a.apply(b, arguments); + }; + }function r(a, b) { + return typeof a == g ? a.apply(b ? b[0] || d : d, b) : a; + }function s(a, b) { + return a === d ? b : a; + }function t(a, b, c) { + m(x(b), function (b) { + a.addEventListener(b, c, !1); + }); + }function u(a, b, c) { + m(x(b), function (b) { + a.removeEventListener(b, c, !1); + }); + }function v(a, b) { + for (; a;) { + if (a == b) return !0;a = a.parentNode; + }return !1; + }function w(a, b) { + return a.indexOf(b) > -1; + }function x(a) { + return a.trim().split(/\s+/g); + }function y(a, b, c) { + if (a.indexOf && !c) return a.indexOf(b);for (var d = 0; d < a.length;) { + if (c && a[d][c] == b || !c && a[d] === b) return d;d++; + }return -1; + }function z(a) { + return Array.prototype.slice.call(a, 0); + }function A(a, b, c) { + for (var d = [], e = [], f = 0; f < a.length;) { + var g = b ? a[f][b] : a[f];y(e, g) < 0 && d.push(a[f]), e[f] = g, f++; + }return c && (d = b ? d.sort(function (a, c) { + return a[b] > c[b]; + }) : d.sort()), d; + }function B(a, b) { + for (var c, f, g = b[0].toUpperCase() + b.slice(1), h = 0; h < e.length;) { + if (c = e[h], f = c ? c + g : b, f in a) return f;h++; + }return d; + }function D() { + return C++; + }function E(a) { + var b = a.ownerDocument;return b.defaultView || b.parentWindow; + }function ab(a, b) { + var c = this;this.manager = a, this.callback = b, this.element = a.element, this.target = a.options.inputTarget, this.domHandler = function (b) { + r(a.options.enable, [a]) && c.handler(b); + }, this.init(); + }function bb(a) { + var b, + c = a.options.inputClass;return b = c ? c : H ? wb : I ? Eb : G ? Gb : rb, new b(a, cb); + }function cb(a, b, c) { + var d = c.pointers.length, + e = c.changedPointers.length, + f = b & O && 0 === d - e, + g = b & (Q | R) && 0 === d - e;c.isFirst = !!f, c.isFinal = !!g, f && (a.session = {}), c.eventType = b, db(a, c), a.emit("hammer.input", c), a.recognize(c), a.session.prevInput = c; + }function db(a, b) { + var c = a.session, + d = b.pointers, + e = d.length;c.firstInput || (c.firstInput = gb(b)), e > 1 && !c.firstMultiple ? c.firstMultiple = gb(b) : 1 === e && (c.firstMultiple = !1);var f = c.firstInput, + g = c.firstMultiple, + h = g ? g.center : f.center, + i = b.center = hb(d);b.timeStamp = j(), b.deltaTime = b.timeStamp - f.timeStamp, b.angle = lb(h, i), b.distance = kb(h, i), eb(c, b), b.offsetDirection = jb(b.deltaX, b.deltaY), b.scale = g ? nb(g.pointers, d) : 1, b.rotation = g ? mb(g.pointers, d) : 0, fb(c, b);var k = a.element;v(b.srcEvent.target, k) && (k = b.srcEvent.target), b.target = k; + }function eb(a, b) { + var c = b.center, + d = a.offsetDelta || {}, + e = a.prevDelta || {}, + f = a.prevInput || {};(b.eventType === O || f.eventType === Q) && (e = a.prevDelta = { x: f.deltaX || 0, y: f.deltaY || 0 }, d = a.offsetDelta = { x: c.x, y: c.y }), b.deltaX = e.x + (c.x - d.x), b.deltaY = e.y + (c.y - d.y); + }function fb(a, b) { + var f, + g, + h, + j, + c = a.lastInterval || b, + e = b.timeStamp - c.timeStamp;if (b.eventType != R && (e > N || c.velocity === d)) { + var k = c.deltaX - b.deltaX, + l = c.deltaY - b.deltaY, + m = ib(e, k, l);g = m.x, h = m.y, f = i(m.x) > i(m.y) ? m.x : m.y, j = jb(k, l), a.lastInterval = b; + } else f = c.velocity, g = c.velocityX, h = c.velocityY, j = c.direction;b.velocity = f, b.velocityX = g, b.velocityY = h, b.direction = j; + }function gb(a) { + for (var b = [], c = 0; c < a.pointers.length;) { + b[c] = { clientX: h(a.pointers[c].clientX), clientY: h(a.pointers[c].clientY) }, c++; + }return { timeStamp: j(), pointers: b, center: hb(b), deltaX: a.deltaX, deltaY: a.deltaY }; + }function hb(a) { + var b = a.length;if (1 === b) return { x: h(a[0].clientX), y: h(a[0].clientY) };for (var c = 0, d = 0, e = 0; b > e;) { + c += a[e].clientX, d += a[e].clientY, e++; + }return { x: h(c / b), y: h(d / b) }; + }function ib(a, b, c) { + return { x: b / a || 0, y: c / a || 0 }; + }function jb(a, b) { + return a === b ? S : i(a) >= i(b) ? a > 0 ? T : U : b > 0 ? V : W; + }function kb(a, b, c) { + c || (c = $);var d = b[c[0]] - a[c[0]], + e = b[c[1]] - a[c[1]];return Math.sqrt(d * d + e * e); + }function lb(a, b, c) { + c || (c = $);var d = b[c[0]] - a[c[0]], + e = b[c[1]] - a[c[1]];return 180 * Math.atan2(e, d) / Math.PI; + }function mb(a, b) { + return lb(b[1], b[0], _) - lb(a[1], a[0], _); + }function nb(a, b) { + return kb(b[0], b[1], _) / kb(a[0], a[1], _); + }function rb() { + this.evEl = pb, this.evWin = qb, this.allow = !0, this.pressed = !1, ab.apply(this, arguments); + }function wb() { + this.evEl = ub, this.evWin = vb, ab.apply(this, arguments), this.store = this.manager.session.pointerEvents = []; + }function Ab() { + this.evTarget = yb, this.evWin = zb, this.started = !1, ab.apply(this, arguments); + }function Bb(a, b) { + var c = z(a.touches), + d = z(a.changedTouches);return b & (Q | R) && (c = A(c.concat(d), "identifier", !0)), [c, d]; + }function Eb() { + this.evTarget = Db, this.targetIds = {}, ab.apply(this, arguments); + }function Fb(a, b) { + var c = z(a.touches), + d = this.targetIds;if (b & (O | P) && 1 === c.length) return d[c[0].identifier] = !0, [c, c];var e, + f, + g = z(a.changedTouches), + h = [], + i = this.target;if (f = c.filter(function (a) { + return v(a.target, i); + }), b === O) for (e = 0; e < f.length;) { + d[f[e].identifier] = !0, e++; + }for (e = 0; e < g.length;) { + d[g[e].identifier] && h.push(g[e]), b & (Q | R) && delete d[g[e].identifier], e++; + }return h.length ? [A(f.concat(h), "identifier", !0), h] : void 0; + }function Gb() { + ab.apply(this, arguments);var a = q(this.handler, this);this.touch = new Eb(this.manager, a), this.mouse = new rb(this.manager, a); + }function Pb(a, b) { + this.manager = a, this.set(b); + }function Qb(a) { + if (w(a, Mb)) return Mb;var b = w(a, Nb), + c = w(a, Ob);return b && c ? Nb + " " + Ob : b || c ? b ? Nb : Ob : w(a, Lb) ? Lb : Kb; + }function Yb(a) { + this.id = D(), this.manager = null, this.options = o(a || {}, this.defaults), this.options.enable = s(this.options.enable, !0), this.state = Rb, this.simultaneous = {}, this.requireFail = []; + }function Zb(a) { + return a & Wb ? "cancel" : a & Ub ? "end" : a & Tb ? "move" : a & Sb ? "start" : ""; + }function $b(a) { + return a == W ? "down" : a == V ? "up" : a == T ? "left" : a == U ? "right" : ""; + }function _b(a, b) { + var c = b.manager;return c ? c.get(a) : a; + }function ac() { + Yb.apply(this, arguments); + }function bc() { + ac.apply(this, arguments), this.pX = null, this.pY = null; + }function cc() { + ac.apply(this, arguments); + }function dc() { + Yb.apply(this, arguments), this._timer = null, this._input = null; + }function ec() { + ac.apply(this, arguments); + }function fc() { + ac.apply(this, arguments); + }function gc() { + Yb.apply(this, arguments), this.pTime = !1, this.pCenter = !1, this._timer = null, this._input = null, this.count = 0; + }function hc(a, b) { + return b = b || {}, b.recognizers = s(b.recognizers, hc.defaults.preset), new kc(a, b); + }function kc(a, b) { + b = b || {}, this.options = o(b, hc.defaults), this.options.inputTarget = this.options.inputTarget || a, this.handlers = {}, this.session = {}, this.recognizers = [], this.element = a, this.input = bb(this), this.touchAction = new Pb(this, this.options.touchAction), lc(this, !0), m(b.recognizers, function (a) { + var b = this.add(new a[0](a[1]));a[2] && b.recognizeWith(a[2]), a[3] && b.requireFailure(a[3]); + }, this); + }function lc(a, b) { + var c = a.element;m(a.options.cssProps, function (a, d) { + c.style[B(c.style, d)] = b ? a : ""; + }); + }function mc(a, c) { + var d = b.createEvent("Event");d.initEvent(a, !0, !0), d.gesture = c, c.target.dispatchEvent(d); + }var e = ["", "webkit", "moz", "MS", "ms", "o"], + f = b.createElement("div"), + g = "function", + h = Math.round, + i = Math.abs, + j = Date.now, + C = 1, + F = /mobile|tablet|ip(ad|hone|od)|android/i, + G = "ontouchstart" in a, + H = B(a, "PointerEvent") !== d, + I = G && F.test(navigator.userAgent), + J = "touch", + K = "pen", + L = "mouse", + M = "kinect", + N = 25, + O = 1, + P = 2, + Q = 4, + R = 8, + S = 1, + T = 2, + U = 4, + V = 8, + W = 16, + X = T | U, + Y = V | W, + Z = X | Y, + $ = ["x", "y"], + _ = ["clientX", "clientY"];ab.prototype = { handler: function () {}, init: function () { + this.evEl && t(this.element, this.evEl, this.domHandler), this.evTarget && t(this.target, this.evTarget, this.domHandler), this.evWin && t(E(this.element), this.evWin, this.domHandler); + }, destroy: function () { + this.evEl && u(this.element, this.evEl, this.domHandler), this.evTarget && u(this.target, this.evTarget, this.domHandler), this.evWin && u(E(this.element), this.evWin, this.domHandler); + } };var ob = { mousedown: O, mousemove: P, mouseup: Q }, + pb = "mousedown", + qb = "mousemove mouseup";p(rb, ab, { handler: function (a) { + var b = ob[a.type];b & O && 0 === a.button && (this.pressed = !0), b & P && 1 !== a.which && (b = Q), this.pressed && this.allow && (b & Q && (this.pressed = !1), this.callback(this.manager, b, { pointers: [a], changedPointers: [a], pointerType: L, srcEvent: a })); + } });var sb = { pointerdown: O, pointermove: P, pointerup: Q, pointercancel: R, pointerout: R }, + tb = { 2: J, 3: K, 4: L, 5: M }, + ub = "pointerdown", + vb = "pointermove pointerup pointercancel";a.MSPointerEvent && (ub = "MSPointerDown", vb = "MSPointerMove MSPointerUp MSPointerCancel"), p(wb, ab, { handler: function (a) { + var b = this.store, + c = !1, + d = a.type.toLowerCase().replace("ms", ""), + e = sb[d], + f = tb[a.pointerType] || a.pointerType, + g = f == J, + h = y(b, a.pointerId, "pointerId");e & O && (0 === a.button || g) ? 0 > h && (b.push(a), h = b.length - 1) : e & (Q | R) && (c = !0), 0 > h || (b[h] = a, this.callback(this.manager, e, { pointers: b, changedPointers: [a], pointerType: f, srcEvent: a }), c && b.splice(h, 1)); + } });var xb = { touchstart: O, touchmove: P, touchend: Q, touchcancel: R }, + yb = "touchstart", + zb = "touchstart touchmove touchend touchcancel";p(Ab, ab, { handler: function (a) { + var b = xb[a.type];if (b === O && (this.started = !0), this.started) { + var c = Bb.call(this, a, b);b & (Q | R) && 0 === c[0].length - c[1].length && (this.started = !1), this.callback(this.manager, b, { pointers: c[0], changedPointers: c[1], pointerType: J, srcEvent: a }); + } + } });var Cb = { touchstart: O, touchmove: P, touchend: Q, touchcancel: R }, + Db = "touchstart touchmove touchend touchcancel";p(Eb, ab, { handler: function (a) { + var b = Cb[a.type], + c = Fb.call(this, a, b);c && this.callback(this.manager, b, { pointers: c[0], changedPointers: c[1], pointerType: J, srcEvent: a }); + } }), p(Gb, ab, { handler: function (a, b, c) { + var d = c.pointerType == J, + e = c.pointerType == L;if (d) this.mouse.allow = !1;else if (e && !this.mouse.allow) return;b & (Q | R) && (this.mouse.allow = !0), this.callback(a, b, c); + }, destroy: function () { + this.touch.destroy(), this.mouse.destroy(); + } });var Hb = B(f.style, "touchAction"), + Ib = Hb !== d, + Jb = "compute", + Kb = "auto", + Lb = "manipulation", + Mb = "none", + Nb = "pan-x", + Ob = "pan-y";Pb.prototype = { set: function (a) { + a == Jb && (a = this.compute()), Ib && (this.manager.element.style[Hb] = a), this.actions = a.toLowerCase().trim(); + }, update: function () { + this.set(this.manager.options.touchAction); + }, compute: function () { + var a = [];return m(this.manager.recognizers, function (b) { + r(b.options.enable, [b]) && (a = a.concat(b.getTouchAction())); + }), Qb(a.join(" ")); + }, preventDefaults: function (a) { + if (!Ib) { + var b = a.srcEvent, + c = a.offsetDirection;if (this.manager.session.prevented) return b.preventDefault(), void 0;var d = this.actions, + e = w(d, Mb), + f = w(d, Ob), + g = w(d, Nb);return e || f && c & X || g && c & Y ? this.preventSrc(b) : void 0; + } + }, preventSrc: function (a) { + this.manager.session.prevented = !0, a.preventDefault(); + } };var Rb = 1, + Sb = 2, + Tb = 4, + Ub = 8, + Vb = Ub, + Wb = 16, + Xb = 32;Yb.prototype = { defaults: {}, set: function (a) { + return n(this.options, a), this.manager && this.manager.touchAction.update(), this; + }, recognizeWith: function (a) { + if (l(a, "recognizeWith", this)) return this;var b = this.simultaneous;return a = _b(a, this), b[a.id] || (b[a.id] = a, a.recognizeWith(this)), this; + }, dropRecognizeWith: function (a) { + return l(a, "dropRecognizeWith", this) ? this : (a = _b(a, this), delete this.simultaneous[a.id], this); + }, requireFailure: function (a) { + if (l(a, "requireFailure", this)) return this;var b = this.requireFail;return a = _b(a, this), -1 === y(b, a) && (b.push(a), a.requireFailure(this)), this; + }, dropRequireFailure: function (a) { + if (l(a, "dropRequireFailure", this)) return this;a = _b(a, this);var b = y(this.requireFail, a);return b > -1 && this.requireFail.splice(b, 1), this; + }, hasRequireFailures: function () { + return this.requireFail.length > 0; + }, canRecognizeWith: function (a) { + return !!this.simultaneous[a.id]; + }, emit: function (a) { + function d(d) { + b.manager.emit(b.options.event + (d ? Zb(c) : ""), a); + }var b = this, + c = this.state;Ub > c && d(!0), d(), c >= Ub && d(!0); + }, tryEmit: function (a) { + return this.canEmit() ? this.emit(a) : (this.state = Xb, void 0); + }, canEmit: function () { + for (var a = 0; a < this.requireFail.length;) { + if (!(this.requireFail[a].state & (Xb | Rb))) return !1;a++; + }return !0; + }, recognize: function (a) { + var b = n({}, a);return r(this.options.enable, [this, b]) ? (this.state & (Vb | Wb | Xb) && (this.state = Rb), this.state = this.process(b), this.state & (Sb | Tb | Ub | Wb) && this.tryEmit(b), void 0) : (this.reset(), this.state = Xb, void 0); + }, process: function () {}, getTouchAction: function () {}, reset: function () {} }, p(ac, Yb, { defaults: { pointers: 1 }, attrTest: function (a) { + var b = this.options.pointers;return 0 === b || a.pointers.length === b; + }, process: function (a) { + var b = this.state, + c = a.eventType, + d = b & (Sb | Tb), + e = this.attrTest(a);return d && (c & R || !e) ? b | Wb : d || e ? c & Q ? b | Ub : b & Sb ? b | Tb : Sb : Xb; + } }), p(bc, ac, { defaults: { event: "pan", threshold: 10, pointers: 1, direction: Z }, getTouchAction: function () { + var a = this.options.direction, + b = [];return a & X && b.push(Ob), a & Y && b.push(Nb), b; + }, directionTest: function (a) { + var b = this.options, + c = !0, + d = a.distance, + e = a.direction, + f = a.deltaX, + g = a.deltaY;return e & b.direction || (b.direction & X ? (e = 0 === f ? S : 0 > f ? T : U, c = f != this.pX, d = Math.abs(a.deltaX)) : (e = 0 === g ? S : 0 > g ? V : W, c = g != this.pY, d = Math.abs(a.deltaY))), a.direction = e, c && d > b.threshold && e & b.direction; + }, attrTest: function (a) { + return ac.prototype.attrTest.call(this, a) && (this.state & Sb || !(this.state & Sb) && this.directionTest(a)); + }, emit: function (a) { + this.pX = a.deltaX, this.pY = a.deltaY;var b = $b(a.direction);b && this.manager.emit(this.options.event + b, a), this._super.emit.call(this, a); + } }), p(cc, ac, { defaults: { event: "pinch", threshold: 0, pointers: 2 }, getTouchAction: function () { + return [Mb]; + }, attrTest: function (a) { + return this._super.attrTest.call(this, a) && (Math.abs(a.scale - 1) > this.options.threshold || this.state & Sb); + }, emit: function (a) { + if (this._super.emit.call(this, a), 1 !== a.scale) { + var b = a.scale < 1 ? "in" : "out";this.manager.emit(this.options.event + b, a); + } + } }), p(dc, Yb, { defaults: { event: "press", pointers: 1, time: 500, threshold: 5 }, getTouchAction: function () { + return [Kb]; + }, process: function (a) { + var b = this.options, + c = a.pointers.length === b.pointers, + d = a.distance < b.threshold, + e = a.deltaTime > b.time;if (this._input = a, !d || !c || a.eventType & (Q | R) && !e) this.reset();else if (a.eventType & O) this.reset(), this._timer = k(function () { + this.state = Vb, this.tryEmit(); + }, b.time, this);else if (a.eventType & Q) return Vb;return Xb; + }, reset: function () { + clearTimeout(this._timer); + }, emit: function (a) { + this.state === Vb && (a && a.eventType & Q ? this.manager.emit(this.options.event + "up", a) : (this._input.timeStamp = j(), this.manager.emit(this.options.event, this._input))); + } }), p(ec, ac, { defaults: { event: "rotate", threshold: 0, pointers: 2 }, getTouchAction: function () { + return [Mb]; + }, attrTest: function (a) { + return this._super.attrTest.call(this, a) && (Math.abs(a.rotation) > this.options.threshold || this.state & Sb); + } }), p(fc, ac, { defaults: { event: "swipe", threshold: 10, velocity: .65, direction: X | Y, pointers: 1 }, getTouchAction: function () { + return bc.prototype.getTouchAction.call(this); + }, attrTest: function (a) { + var c, + b = this.options.direction;return b & (X | Y) ? c = a.velocity : b & X ? c = a.velocityX : b & Y && (c = a.velocityY), this._super.attrTest.call(this, a) && b & a.direction && a.distance > this.options.threshold && i(c) > this.options.velocity && a.eventType & Q; + }, emit: function (a) { + var b = $b(a.direction);b && this.manager.emit(this.options.event + b, a), this.manager.emit(this.options.event, a); + } }), p(gc, Yb, { defaults: { event: "tap", pointers: 1, taps: 1, interval: 300, time: 250, threshold: 2, posThreshold: 10 }, getTouchAction: function () { + return [Lb]; + }, process: function (a) { + var b = this.options, + c = a.pointers.length === b.pointers, + d = a.distance < b.threshold, + e = a.deltaTime < b.time;if (this.reset(), a.eventType & O && 0 === this.count) return this.failTimeout();if (d && e && c) { + if (a.eventType != Q) return this.failTimeout();var f = this.pTime ? a.timeStamp - this.pTime < b.interval : !0, + g = !this.pCenter || kb(this.pCenter, a.center) < b.posThreshold;this.pTime = a.timeStamp, this.pCenter = a.center, g && f ? this.count += 1 : this.count = 1, this._input = a;var h = this.count % b.taps;if (0 === h) return this.hasRequireFailures() ? (this._timer = k(function () { + this.state = Vb, this.tryEmit(); + }, b.interval, this), Sb) : Vb; + }return Xb; + }, failTimeout: function () { + return this._timer = k(function () { + this.state = Xb; + }, this.options.interval, this), Xb; + }, reset: function () { + clearTimeout(this._timer); + }, emit: function () { + this.state == Vb && (this._input.tapCount = this.count, this.manager.emit(this.options.event, this._input)); + } }), hc.VERSION = "2.0.4", hc.defaults = { domEvents: !1, touchAction: Jb, enable: !0, inputTarget: null, inputClass: null, preset: [[ec, { enable: !1 }], [cc, { enable: !1 }, ["rotate"]], [fc, { direction: X }], [bc, { direction: X }, ["swipe"]], [gc], [gc, { event: "doubletap", taps: 2 }, ["tap"]], [dc]], cssProps: { userSelect: "default", touchSelect: "none", touchCallout: "none", contentZooming: "none", userDrag: "none", tapHighlightColor: "rgba(0,0,0,0)" } };var ic = 1, + jc = 2;kc.prototype = { set: function (a) { + return n(this.options, a), a.touchAction && this.touchAction.update(), a.inputTarget && (this.input.destroy(), this.input.target = a.inputTarget, this.input.init()), this; + }, stop: function (a) { + this.session.stopped = a ? jc : ic; + }, recognize: function (a) { + var b = this.session;if (!b.stopped) { + this.touchAction.preventDefaults(a);var c, + d = this.recognizers, + e = b.curRecognizer;(!e || e && e.state & Vb) && (e = b.curRecognizer = null);for (var f = 0; f < d.length;) { + c = d[f], b.stopped === jc || e && c != e && !c.canRecognizeWith(e) ? c.reset() : c.recognize(a), !e && c.state & (Sb | Tb | Ub) && (e = b.curRecognizer = c), f++; + } + } + }, get: function (a) { + if (a instanceof Yb) return a;for (var b = this.recognizers, c = 0; c < b.length; c++) { + if (b[c].options.event == a) return b[c]; + }return null; + }, add: function (a) { + if (l(a, "add", this)) return this;var b = this.get(a.options.event);return b && this.remove(b), this.recognizers.push(a), a.manager = this, this.touchAction.update(), a; + }, remove: function (a) { + if (l(a, "remove", this)) return this;var b = this.recognizers;return a = this.get(a), b.splice(y(b, a), 1), this.touchAction.update(), this; + }, on: function (a, b) { + var c = this.handlers;return m(x(a), function (a) { + c[a] = c[a] || [], c[a].push(b); + }), this; + }, off: function (a, b) { + var c = this.handlers;return m(x(a), function (a) { + b ? c[a].splice(y(c[a], b), 1) : delete c[a]; + }), this; + }, emit: function (a, b) { + this.options.domEvents && mc(a, b);var c = this.handlers[a] && this.handlers[a].slice();if (c && c.length) { + b.type = a, b.preventDefault = function () { + b.srcEvent.preventDefault(); + };for (var d = 0; d < c.length;) { + c[d](b), d++; } + } + }, destroy: function () { + this.element && lc(this, !1), this.handlers = {}, this.session = {}, this.input.destroy(), this.element = null; + } }, n(hc, { INPUT_START: O, INPUT_MOVE: P, INPUT_END: Q, INPUT_CANCEL: R, STATE_POSSIBLE: Rb, STATE_BEGAN: Sb, STATE_CHANGED: Tb, STATE_ENDED: Ub, STATE_RECOGNIZED: Vb, STATE_CANCELLED: Wb, STATE_FAILED: Xb, DIRECTION_NONE: S, DIRECTION_LEFT: T, DIRECTION_RIGHT: U, DIRECTION_UP: V, DIRECTION_DOWN: W, DIRECTION_HORIZONTAL: X, DIRECTION_VERTICAL: Y, DIRECTION_ALL: Z, Manager: kc, Input: ab, TouchAction: Pb, TouchInput: Eb, MouseInput: rb, PointerEventInput: wb, TouchMouseInput: Gb, SingleTouchInput: Ab, Recognizer: Yb, AttrRecognizer: ac, Tap: gc, Pan: bc, Swipe: fc, Pinch: cc, Rotate: ec, Press: dc, on: t, off: u, each: m, merge: o, extend: n, inherit: p, bindFn: q, prefixed: B }), typeof define == g && define.amd ? define(function () { + return hc; + }) : "undefined" != typeof module && module.exports ? module.exports = hc : a[c] = hc; +}(window, document, "Hammer");;(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['jquery', 'hammerjs'], factory); + } else if (typeof exports === 'object') { + factory(require('jquery'), require('hammerjs')); + } else { + factory(jQuery, Hammer); + } +})(function ($, Hammer) { + function hammerify(el, options) { + var $el = $(el); + if (!$el.data("hammer")) { + $el.data("hammer", new Hammer($el[0], options)); } + } - $.fn.hammer = function(options) { - return this.each(function() { - hammerify(this, options); - }); + $.fn.hammer = function (options) { + return this.each(function () { + hammerify(this, options); + }); + }; + + // extend the emit method to also trigger jQuery events + Hammer.Manager.prototype.emit = function (originalEmit) { + return function (type, data) { + originalEmit.call(this, type, data); + $(this.element).trigger({ + type: type, + gesture: data + }); }; + }(Hammer.Manager.prototype.emit); +}); +; // Required for Meteor package, the use of window prevents export by Meteor +(function (window) { + if (window.Package) { + Materialize = {}; + } else { + window.Materialize = {}; + } +})(window); - // extend the emit method to also trigger jQuery events - Hammer.Manager.prototype.emit = (function(originalEmit) { - return function(type, data) { - originalEmit.call(this, type, data); - $(this.element).trigger({ - type: type, - gesture: data - }); - }; - })(Hammer.Manager.prototype.emit); -})); -;Materialize = {}; +if (typeof exports !== 'undefined' && !exports.nodeType) { + if (typeof module !== 'undefined' && !module.nodeType && module.exports) { + exports = module.exports = Materialize; + } + exports.default = Materialize; +} + +/* + * raf.js + * https://github.com/ngryman/raf.js + * + * original requestAnimationFrame polyfill by Erik Möller + * inspired from paul_irish gist and post + * + * Copyright (c) 2013 ngryman + * Licensed under the MIT license. + */ +(function (window) { + var lastTime = 0, + vendors = ['webkit', 'moz'], + requestAnimationFrame = window.requestAnimationFrame, + cancelAnimationFrame = window.cancelAnimationFrame, + i = vendors.length; + + // try to un-prefix existing raf + while (--i >= 0 && !requestAnimationFrame) { + requestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame']; + cancelAnimationFrame = window[vendors[i] + 'CancelRequestAnimationFrame']; + } + + // polyfill with setTimeout fallback + // heavily inspired from @darius gist mod: https://gist.github.com/paulirish/1579671#comment-837945 + if (!requestAnimationFrame || !cancelAnimationFrame) { + requestAnimationFrame = function (callback) { + var now = +Date.now(), + nextTime = Math.max(lastTime + 16, now); + return setTimeout(function () { + callback(lastTime = nextTime); + }, nextTime - now); + }; + + cancelAnimationFrame = clearTimeout; + } + + // export to window + window.requestAnimationFrame = requestAnimationFrame; + window.cancelAnimationFrame = cancelAnimationFrame; +})(window); + +/** + * Generate approximated selector string for a jQuery object + * @param {jQuery} obj jQuery object to be parsed + * @returns {string} + */ +Materialize.objectSelectorString = function (obj) { + var tagStr = obj.prop('tagName') || ''; + var idStr = obj.attr('id') || ''; + var classStr = obj.attr('class') || ''; + return (tagStr + idStr + classStr).replace(/\s/g, ''); +}; -// Unique ID -Materialize.guid = (function() { +// Unique Random ID +Materialize.guid = function () { function s4() { - return Math.floor((1 + Math.random()) * 0x10000) - .toString(16) - .substring(1); + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); } - return function() { - return s4() + s4() + '-' + s4() + '-' + s4() + '-' + - s4() + '-' + s4() + s4() + s4(); + return function () { + return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); + }; +}(); + +/** + * Escapes hash from special characters + * @param {string} hash String returned from this.hash + * @returns {string} + */ +Materialize.escapeHash = function (hash) { + return hash.replace(/(:|\.|\[|\]|,|=)/g, "\\$1"); +}; + +Materialize.elementOrParentIsFixed = function (element) { + var $element = $(element); + var $checkElements = $element.add($element.parents()); + var isFixed = false; + $checkElements.each(function () { + if ($(this).css("position") === "fixed") { + isFixed = true; + return false; + } + }); + return isFixed; +}; + +/** + * Get time in ms + * @license https://raw.github.com/jashkenas/underscore/master/LICENSE + * @type {function} + * @return {number} + */ +var getTime = Date.now || function () { + return new Date().getTime(); +}; + +/** + * Returns a function, that, when invoked, will only be triggered at most once + * during a given window of time. Normally, the throttled function will run + * as much as it can, without ever going more than once per `wait` duration; + * but if you'd like to disable the execution on the leading edge, pass + * `{leading: false}`. To disable execution on the trailing edge, ditto. + * @license https://raw.github.com/jashkenas/underscore/master/LICENSE + * @param {function} func + * @param {number} wait + * @param {Object=} options + * @returns {Function} + */ +Materialize.throttle = function (func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + options || (options = {}); + var later = function () { + previous = options.leading === false ? 0 : getTime(); + timeout = null; + result = func.apply(context, args); + context = args = null; + }; + return function () { + var now = getTime(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; }; -})(); - -Materialize.elementOrParentIsFixed = function(element) { - var $element = $(element); - var $checkElements = $element.add($element.parents()); - var isFixed = false; - $checkElements.each(function(){ - if ($(this).css("position") === "fixed") { - isFixed = true; - return false; - } - }); - return isFixed; }; // Velocity has conflicts when loaded with jQuery, this will check for it +// First, check if in noConflict mode var Vel; -if ($) { +if (jQuery) { + Vel = jQuery.Velocity; +} else if ($) { Vel = $.Velocity; -} -else { +} else { Vel = Velocity; } + +if (Vel) { + Materialize.Vel = Vel; +} else { + Materialize.Vel = Velocity; +} ;(function ($) { - $.fn.collapsible = function(options) { + $.fn.collapsible = function (options, methodParam) { var defaults = { - accordion: undefined + accordion: undefined, + onOpen: undefined, + onClose: undefined }; + var methodName = options; options = $.extend(defaults, options); - - return this.each(function() { + return this.each(function () { var $this = $(this); @@ -305,57 +1437,91 @@ else { var collapsible_type = $this.data("collapsible"); - // Turn off any existing event handlers - $this.off('click.collapse', '.collapsible-header'); - $panel_headers.off('click.collapse'); - - - /**************** - Helper Functions - ****************/ + /**************** + Helper Functions + ****************/ // Accordion Open function accordionOpen(object) { $panel_headers = $this.find('> li > .collapsible-header'); if (object.hasClass('active')) { - object.parent().addClass('active'); - } - else { - object.parent().removeClass('active'); + object.parent().addClass('active'); + } else { + object.parent().removeClass('active'); } - if (object.parent().hasClass('active')){ - object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}}); - } - else{ - object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}}); + if (object.parent().hasClass('active')) { + object.siblings('.collapsible-body').stop(true, false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function () { + $(this).css('height', ''); + } }); + } else { + object.siblings('.collapsible-body').stop(true, false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function () { + $(this).css('height', ''); + } }); } $panel_headers.not(object).removeClass('active').parent().removeClass('active'); - $panel_headers.not(object).parent().children('.collapsible-body').stop(true,false).slideUp( - { - duration: 350, - easing: "easeOutQuart", - queue: false, - complete: - function() { + + // Close previously open accordion elements. + $panel_headers.not(object).parent().children('.collapsible-body').stop(true, false).each(function () { + if ($(this).is(':visible')) { + $(this).slideUp({ + duration: 350, + easing: "easeOutQuart", + queue: false, + complete: function () { $(this).css('height', ''); + execCallbacks($(this).siblings('.collapsible-header')); } - }); + }); + } + }); } // Expandable Open function expandableOpen(object) { if (object.hasClass('active')) { - object.parent().addClass('active'); + object.parent().addClass('active'); + } else { + object.parent().removeClass('active'); } - else { - object.parent().removeClass('active'); + if (object.parent().hasClass('active')) { + object.siblings('.collapsible-body').stop(true, false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function () { + $(this).css('height', ''); + } }); + } else { + object.siblings('.collapsible-body').stop(true, false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function () { + $(this).css('height', ''); + } }); + } + } + + // Open collapsible. object: .collapsible-header + function collapsibleOpen(object, noToggle) { + if (!noToggle) { + object.toggleClass('active'); } - if (object.parent().hasClass('active')){ - object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}}); + + if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { + // Handle Accordion + accordionOpen(object); + } else { + // Handle Expandables + expandableOpen(object); } - else{ - object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}}); + + execCallbacks(object); + } + + // Handle callbacks + function execCallbacks(object) { + if (object.hasClass('active')) { + if (typeof options.onOpen === "function") { + options.onOpen.call(this, object.parent()); + } + } else { + if (typeof options.onClose === "function") { + options.onClose.call(this, object.parent()); + } } } @@ -381,412 +1547,709 @@ else { return object.closest('li > .collapsible-header'); } + // Turn off any existing event handlers + function removeEventHandlers() { + $this.off('click.collapse', '> li > .collapsible-header'); + } + /***** End Helper Functions *****/ + // Methods + if (methodName === 'destroy') { + removeEventHandlers(); + return; + } else if (methodParam >= 0 && methodParam < $panel_headers.length) { + var $curr_header = $panel_headers.eq(methodParam); + if ($curr_header.length && (methodName === 'open' || methodName === 'close' && $curr_header.hasClass('active'))) { + collapsibleOpen($curr_header); + } + return; + } + removeEventHandlers(); - if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion - // Add click handler to only direct collapsible header children - $panel_headers = $this.find('> li > .collapsible-header'); - $panel_headers.on('click.collapse', function (e) { - var element = $(e.target); + // Add click handler to only direct collapsible header children + $this.on('click.collapse', '> li > .collapsible-header', function (e) { + var element = $(e.target); - if (isChildrenOfPanelHeader(element)) { - element = getPanelHeader(element); - } + if (isChildrenOfPanelHeader(element)) { + element = getPanelHeader(element); + } - element.toggleClass('active'); - accordionOpen(element); - }); - // Open first active - accordionOpen($panel_headers.filter('.active').first()); - } - else { // Handle Expandables - $panel_headers.each(function () { - // Add click handler to only direct collapsible header children - $(this).on('click.collapse', function (e) { - var element = $(e.target); - if (isChildrenOfPanelHeader(element)) { - element = getPanelHeader(element); - } - element.toggleClass('active'); - expandableOpen(element); - }); - // Open any bodies that have the active class - if ($(this).hasClass('active')) { - expandableOpen($(this)); - } + collapsibleOpen(element); + }); + // Open first active + if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { + // Handle Accordion + collapsibleOpen($panel_headers.filter('.active').first(), true); + } else { + // Handle Expandables + $panel_headers.filter('.active').each(function () { + collapsibleOpen($(this), true); }); } - }); }; - $(document).ready(function(){ + $(document).ready(function () { $('.collapsible').collapsible(); }); -}( jQuery ));;(function ($) { +})(jQuery);;(function ($) { // Add posibility to scroll to selected option // usefull for select for example - $.fn.scrollTo = function(elem) { + $.fn.scrollTo = function (elem) { $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top); return this; }; - $.fn.dropdown = function (option) { + $.fn.dropdown = function (options) { var defaults = { inDuration: 300, outDuration: 225, - constrain_width: true, // Constrains width of dropdown to the activator + constrainWidth: true, // Constrains width of dropdown to the activator hover: false, gutter: 0, // Spacing from edge - belowOrigin: false + belowOrigin: false, + alignment: 'left', + stopPropagation: false }; - this.each(function(){ - var origin = $(this); - var options = $.extend({}, defaults, option); - - // Dropdown menu - var activates = $("#"+ origin.attr('data-activates')); - - function updateOptions() { - if (origin.data('induration') !== undefined) - options.inDuration = origin.data('inDuration'); - if (origin.data('outduration') !== undefined) - options.outDuration = origin.data('outDuration'); - if (origin.data('constrainwidth') !== undefined) - options.constrain_width = origin.data('constrainwidth'); - if (origin.data('hover') !== undefined) - options.hover = origin.data('hover'); - if (origin.data('gutter') !== undefined) - options.gutter = origin.data('gutter'); - if (origin.data('beloworigin') !== undefined) - options.belowOrigin = origin.data('beloworigin'); + // Open dropdown. + if (options === "open") { + this.each(function () { + $(this).trigger('open'); + }); + return false; } - updateOptions(); - - // Attach dropdown to its activator - origin.after(activates); - - /* - Helper function to position and resize dropdown. - Used in hover and click handler. - */ - function placeDropdown() { - // Check html data attributes - updateOptions(); - - // Set Dropdown state - activates.addClass('active'); + // Close dropdown. + if (options === "close") { + this.each(function () { + $(this).trigger('close'); + }); + return false; + } - // Constrain width - if (options.constrain_width === true) { - activates.css('width', origin.outerWidth()); - } - var offset = 0; - if (options.belowOrigin === true) { - offset = origin.height(); + this.each(function () { + var origin = $(this); + var curr_options = $.extend({}, defaults, options); + var isFocused = false; + + // Dropdown menu + var activates = $("#" + origin.attr('data-activates')); + + function updateOptions() { + if (origin.data('induration') !== undefined) curr_options.inDuration = origin.data('induration'); + if (origin.data('outduration') !== undefined) curr_options.outDuration = origin.data('outduration'); + if (origin.data('constrainwidth') !== undefined) curr_options.constrainWidth = origin.data('constrainwidth'); + if (origin.data('hover') !== undefined) curr_options.hover = origin.data('hover'); + if (origin.data('gutter') !== undefined) curr_options.gutter = origin.data('gutter'); + if (origin.data('beloworigin') !== undefined) curr_options.belowOrigin = origin.data('beloworigin'); + if (origin.data('alignment') !== undefined) curr_options.alignment = origin.data('alignment'); + if (origin.data('stoppropagation') !== undefined) curr_options.stopPropagation = origin.data('stoppropagation'); } - // Handle edge alignment - var offsetLeft = origin.offset().left; - var width_difference = 0; - var gutter_spacing = options.gutter; + updateOptions(); + // Attach dropdown to its activator + origin.after(activates); - if (offsetLeft + activates.innerWidth() > $(window).width()) { - width_difference = origin.innerWidth() - activates.innerWidth(); - gutter_spacing = gutter_spacing * -1; - } + /* + Helper function to position and resize dropdown. + Used in hover and click handler. + */ + function placeDropdown(eventType) { + // Check for simultaneous focus and click events. + if (eventType === 'focus') { + isFocused = true; + } - // Position dropdown - activates.css({ - position: 'absolute', - top: origin.position().top + offset, - left: origin.position().left + width_difference + gutter_spacing - }); + // Check html data attributes + updateOptions(); + // Set Dropdown state + activates.addClass('active'); + origin.addClass('active'); + var originWidth = origin[0].getBoundingClientRect().width; - // Show dropdown - activates.stop(true, true).css('opacity', 0) - .slideDown({ - queue: false, - duration: options.inDuration, - easing: 'easeOutCubic', - complete: function() { - $(this).css('height', ''); + // Constrain width + if (curr_options.constrainWidth === true) { + activates.css('width', originWidth); + } else { + activates.css('white-space', 'nowrap'); } - }) - .animate( {opacity: 1}, {queue: false, duration: options.inDuration, easing: 'easeOutSine'}); - } - function hideDropdown() { - activates.fadeOut(options.outDuration); - activates.removeClass('active'); - } - - // Hover - if (options.hover) { - var open = false; - origin.unbind('click.' + origin.attr('id')); - // Hover handler to show dropdown - origin.on('mouseenter', function(e){ // Mouse over - if (open === false) { - placeDropdown(); - open = true; - } - }); - origin.on('mouseleave', function(e){ - // If hover on origin then to something other than dropdown content, then close - var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element - if(!$(toEl).closest('.dropdown-content').is(activates)) { - activates.stop(true, true); - hideDropdown(); - open = false; + // Offscreen detection + var windowHeight = window.innerHeight; + var originHeight = origin.innerHeight(); + var offsetLeft = origin.offset().left; + var offsetTop = origin.offset().top - $(window).scrollTop(); + var currAlignment = curr_options.alignment; + var gutterSpacing = 0; + var leftPosition = 0; + + // Below Origin + var verticalOffset = 0; + if (curr_options.belowOrigin === true) { + verticalOffset = originHeight; } - }); - activates.on('mouseleave', function(e){ // Mouse out - var toEl = e.toElement || e.relatedTarget; - if(!$(toEl).closest('.dropdown-button').is(origin)) { - activates.stop(true, true); - hideDropdown(); - open = false; + // Check for scrolling positioned container. + var scrollYOffset = 0; + var scrollXOffset = 0; + var wrapper = origin.parent(); + if (!wrapper.is('body')) { + if (wrapper[0].scrollHeight > wrapper[0].clientHeight) { + scrollYOffset = wrapper[0].scrollTop; + } + if (wrapper[0].scrollWidth > wrapper[0].clientWidth) { + scrollXOffset = wrapper[0].scrollLeft; + } } - }); - - // Click - } else { - - // Click handler to show dropdown - origin.unbind('click.' + origin.attr('id')); - origin.bind('click.'+origin.attr('id'), function(e){ - - if ( origin[0] == e.currentTarget && ($(e.target).closest('.dropdown-content').length === 0) ) { - e.preventDefault(); // Prevents button click from moving window - placeDropdown(); + if (offsetLeft + activates.innerWidth() > $(window).width()) { + // Dropdown goes past screen on right, force right alignment + currAlignment = 'right'; + } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) { + // Dropdown goes past screen on left, force left alignment + currAlignment = 'left'; } - // If origin is clicked and menu is open, close menu - else { - if (origin.hasClass('active')) { - hideDropdown(); - $(document).unbind('click.' + activates.attr('id')); + // Vertical bottom offscreen detection + if (offsetTop + activates.innerHeight() > windowHeight) { + // If going upwards still goes offscreen, just crop height of dropdown. + if (offsetTop + originHeight - activates.innerHeight() < 0) { + var adjustedHeight = windowHeight - offsetTop - verticalOffset; + activates.css('max-height', adjustedHeight); + } else { + // Flow upwards. + if (!verticalOffset) { + verticalOffset += originHeight; + } + verticalOffset -= activates.innerHeight(); } } - // If menu open, add click close handler to document - if (activates.hasClass('active')) { - $(document).bind('click.'+ activates.attr('id'), function (e) { - if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length > 0) ) { - hideDropdown(); - $(document).unbind('click.' + activates.attr('id')); - } + + // Handle edge alignment + if (currAlignment === 'left') { + gutterSpacing = curr_options.gutter; + leftPosition = origin.position().left + gutterSpacing; + } else if (currAlignment === 'right') { + // Material icons fix + activates.stop(true, true).css({ + opacity: 0, + left: 0 }); - } - }); - } // End else + var offsetRight = origin.position().left + originWidth - activates.width(); + gutterSpacing = -curr_options.gutter; + leftPosition = offsetRight + gutterSpacing; + } - // Listen to open and close event - useful for select component - origin.on('open', placeDropdown); - origin.on('close', hideDropdown); + // Position dropdown + activates.css({ + position: 'absolute', + top: origin.position().top + verticalOffset + scrollYOffset, + left: leftPosition + scrollXOffset + }); + // Show dropdown + activates.slideDown({ + queue: false, + duration: curr_options.inDuration, + easing: 'easeOutCubic', + complete: function () { + $(this).css('height', ''); + } + }).animate({ opacity: 1 }, { queue: false, duration: curr_options.inDuration, easing: 'easeOutSine' }); - }); - }; // End dropdown plugin + // Add click close handler to document + setTimeout(function () { + $(document).on('click.' + activates.attr('id'), function (e) { + hideDropdown(); + $(document).off('click.' + activates.attr('id')); + }); + }, 0); + } - $(document).ready(function(){ - $('.dropdown-button').dropdown(); - }); -}( jQuery )); -;(function($) { - var _stack = 0, - _lastID = 0, - _generateID = function() { - _lastID++; - return 'materialize-lean-overlay-' + _lastID; - }; + function hideDropdown() { + // Check for simultaneous focus and click events. + isFocused = false; + activates.fadeOut(curr_options.outDuration); + activates.removeClass('active'); + origin.removeClass('active'); + $(document).off('click.' + activates.attr('id')); + setTimeout(function () { + activates.css('max-height', ''); + }, curr_options.outDuration); + } - $.fn.extend({ - openModal: function(options) { + // Hover + if (curr_options.hover) { + var open = false; + origin.off('click.' + origin.attr('id')); + // Hover handler to show dropdown + origin.on('mouseenter', function (e) { + // Mouse over + if (open === false) { + placeDropdown(); + open = true; + } + }); + origin.on('mouseleave', function (e) { + // If hover on origin then to something other than dropdown content, then close + var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element + if (!$(toEl).closest('.dropdown-content').is(activates)) { + activates.stop(true, true); + hideDropdown(); + open = false; + } + }); - $('body').css('overflow', 'hidden'); + activates.on('mouseleave', function (e) { + // Mouse out + var toEl = e.toElement || e.relatedTarget; + if (!$(toEl).closest('.dropdown-button').is(origin)) { + activates.stop(true, true); + hideDropdown(); + open = false; + } + }); - var defaults = { - opacity: 0.5, - in_duration: 350, - out_duration: 250, - ready: undefined, - complete: undefined, - dismissible: true, - starting_top: '4%' - }, - overlayID = _generateID(), - $modal = $(this), - $overlay = $('
      '), - lStack = (++_stack); + // Click + } else { + // Click handler to show dropdown + origin.off('click.' + origin.attr('id')); + origin.on('click.' + origin.attr('id'), function (e) { + if (!isFocused) { + if (origin[0] == e.currentTarget && !origin.hasClass('active') && $(e.target).closest('.dropdown-content').length === 0) { + e.preventDefault(); // Prevents button click from moving window + if (curr_options.stopPropagation) { + e.stopPropagation(); + } + placeDropdown('click'); + } + // If origin is clicked and menu is open, close menu + else if (origin.hasClass('active')) { + hideDropdown(); + $(document).off('click.' + activates.attr('id')); + } + } + }); + } // End else + + // Listen to open and close event - useful for select component + origin.on('open', function (e, eventType) { + placeDropdown(eventType); + }); + origin.on('close', hideDropdown); + }); + }; // End dropdown plugin + + $(document).ready(function () { + $('.dropdown-button').dropdown(); + }); +})(jQuery); +;(function ($, Vel) { + 'use strict'; + + var _defaults = { + opacity: 0.5, + inDuration: 250, + outDuration: 250, + ready: undefined, + complete: undefined, + dismissible: true, + startingTop: '4%', + endingTop: '10%' + }; - // Store a reference of the overlay - $overlay.attr('id', overlayID).css('z-index', 1000 + lStack * 2); - $modal.data('overlay-id', overlayID).css('z-index', 1000 + lStack * 2 + 1); + /** + * @class + * + */ - $("body").append($overlay); + var Modal = function () { + /** + * Construct Modal instance and set up overlay + * @constructor + * @param {jQuery} $el + * @param {Object} options + */ + function Modal($el, options) { + _classCallCheck(this, Modal); - // Override defaults - options = $.extend(defaults, options); + // If exists, destroy and reinitialize + if (!!$el[0].M_Modal) { + $el[0].M_Modal.destroy(); + } - if (options.dismissible) { - $overlay.click(function() { - $modal.closeModal(options); - }); - // Return on ESC - $(document).on('keyup.leanModal' + overlayID, function(e) { - if (e.keyCode === 27) { // ESC key - $modal.closeModal(options); + /** + * The jQuery element + * @type {jQuery} + */ + this.$el = $el; + + /** + * Options for the modal + * @member Modal#options + * @prop {Number} [opacity=0.5] - Opacity of the modal overlay + * @prop {Number} [inDuration=250] - Length in ms of enter transition + * @prop {Number} [outDuration=250] - Length in ms of exit transition + * @prop {Function} ready - Callback function called when modal is finished entering + * @prop {Function} complete - Callback function called when modal is finished exiting + * @prop {Boolean} [dismissible=true] - Allow modal to be dismissed by keyboard or overlay click + * @prop {String} [startingTop='4%'] - startingTop + * @prop {String} [endingTop='10%'] - endingTop + */ + this.options = $.extend({}, Modal.defaults, options); + + /** + * Describes open/close state of modal + * @type {Boolean} + */ + this.isOpen = false; + + this.$el[0].M_Modal = this; + this.id = $el.attr('id'); + this.openingTrigger = undefined; + this.$overlay = $(''); + + Modal._increment++; + Modal._count++; + this.$overlay[0].style.zIndex = 1000 + Modal._increment * 2; + this.$el[0].style.zIndex = 1000 + Modal._increment * 2 + 1; + this.setupEventHandlers(); + } + + _createClass(Modal, [{ + key: 'getInstance', + + + /** + * Get Instance + */ + value: function getInstance() { + return this; + } + + /** + * Teardown component + */ + + }, { + key: 'destroy', + value: function destroy() { + this.removeEventHandlers(); + this.$el[0].removeAttribute('style'); + if (!!this.$overlay[0].parentNode) { + this.$overlay[0].parentNode.removeChild(this.$overlay[0]); + } + this.$el[0].M_Modal = undefined; + Modal._count--; + } + + /** + * Setup Event Handlers + */ + + }, { + key: 'setupEventHandlers', + value: function setupEventHandlers() { + this.handleOverlayClickBound = this.handleOverlayClick.bind(this); + this.handleModalCloseClickBound = this.handleModalCloseClick.bind(this); + + if (Modal._count === 1) { + document.body.addEventListener('click', this.handleTriggerClick); + } + this.$overlay[0].addEventListener('click', this.handleOverlayClickBound); + this.$el[0].addEventListener('click', this.handleModalCloseClickBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: 'removeEventHandlers', + value: function removeEventHandlers() { + if (Modal._count === 0) { + document.body.removeEventListener('click', this.handleTriggerClick); + } + this.$overlay[0].removeEventListener('click', this.handleOverlayClickBound); + this.$el[0].removeEventListener('click', this.handleModalCloseClickBound); + } + + /** + * Handle Trigger Click + * @param {Event} e + */ + + }, { + key: 'handleTriggerClick', + value: function handleTriggerClick(e) { + var $trigger = $(e.target).closest('.modal-trigger'); + if (e.target && $trigger.length) { + var modalId = $trigger[0].getAttribute('href'); + if (modalId) { + modalId = modalId.slice(1); + } else { + modalId = $trigger[0].getAttribute('data-target'); } - }); + var modalInstance = document.getElementById(modalId).M_Modal; + if (modalInstance) { + modalInstance.open($trigger); + } + e.preventDefault(); + } } - $modal.find(".modal-close").on('click.close', function(e) { - $modal.closeModal(options); - }); + /** + * Handle Overlay Click + */ - $overlay.css({ display : "block", opacity : 0 }); + }, { + key: 'handleOverlayClick', + value: function handleOverlayClick() { + if (this.options.dismissible) { + this.close(); + } + } - $modal.css({ - display : "block", - opacity: 0 - }); + /** + * Handle Modal Close Click + * @param {Event} e + */ + + }, { + key: 'handleModalCloseClick', + value: function handleModalCloseClick(e) { + var $closeTrigger = $(e.target).closest('.modal-close'); + if (e.target && $closeTrigger.length) { + this.close(); + } + } + + /** + * Handle Keydown + * @param {Event} e + */ + + }, { + key: 'handleKeydown', + value: function handleKeydown(e) { + // ESC key + if (e.keyCode === 27 && this.options.dismissible) { + this.close(); + } + } + + /** + * Animate in modal + */ + + }, { + key: 'animateIn', + value: function animateIn() { + var _this = this; + + // Set initial styles + $.extend(this.$el[0].style, { + display: 'block', + opacity: 0 + }); + $.extend(this.$overlay[0].style, { + display: 'block', + opacity: 0 + }); - $overlay.velocity({opacity: options.opacity}, {duration: options.in_duration, queue: false, ease: "easeOutCubic"}); - $modal.data('associated-overlay', $overlay[0]); + // Animate overlay + Vel(this.$overlay[0], { opacity: this.options.opacity }, { duration: this.options.inDuration, queue: false, ease: 'easeOutCubic' }); - // Define Bottom Sheet animation - if ($modal.hasClass('bottom-sheet')) { - $modal.velocity({bottom: "0", opacity: 1}, { - duration: options.in_duration, + // Define modal animation options + var enterVelocityOptions = { + duration: this.options.inDuration, queue: false, - ease: "easeOutCubic", + ease: 'easeOutCubic', // Handle modal ready callback - complete: function() { - if (typeof(options.ready) === "function") { - options.ready(); + complete: function () { + if (typeof _this.options.ready === 'function') { + _this.options.ready.call(_this, _this.$el, _this.openingTrigger); } } - }); + }; + + // Bottom sheet animation + if (this.$el[0].classList.contains('bottom-sheet')) { + Vel(this.$el[0], { bottom: 0, opacity: 1 }, enterVelocityOptions); + + // Normal modal animation + } else { + Vel.hook(this.$el[0], 'scaleX', 0.7); + this.$el[0].style.top = this.options.startingTop; + Vel(this.$el[0], { top: this.options.endingTop, opacity: 1, scaleX: 1 }, enterVelocityOptions); + } } - else { - $.Velocity.hook($modal, "scaleX", 0.7); - $modal.css({ top: options.starting_top }); - $modal.velocity({top: "10%", opacity: 1, scaleX: '1'}, { - duration: options.in_duration, + + /** + * Animate out modal + */ + + }, { + key: 'animateOut', + value: function animateOut() { + var _this2 = this; + + // Animate overlay + Vel(this.$overlay[0], { opacity: 0 }, { duration: this.options.outDuration, queue: false, ease: 'easeOutQuart' }); + + // Define modal animation options + var exitVelocityOptions = { + duration: this.options.outDuration, queue: false, - ease: "easeOutCubic", + ease: 'easeOutCubic', // Handle modal ready callback - complete: function() { - if (typeof(options.ready) === "function") { - options.ready(); + complete: function () { + _this2.$el[0].style.display = 'none'; + // Call complete callback + if (typeof _this2.options.complete === 'function') { + _this2.options.complete.call(_this2, _this2.$el); } + _this2.$overlay[0].parentNode.removeChild(_this2.$overlay[0]); } - }); + }; + + // Bottom sheet animation + if (this.$el[0].classList.contains('bottom-sheet')) { + Vel(this.$el[0], { bottom: '-100%', opacity: 0 }, exitVelocityOptions); + + // Normal modal animation + } else { + Vel(this.$el[0], { top: this.options.startingTop, opacity: 0, scaleX: 0.7 }, exitVelocityOptions); + } } + /** + * Open Modal + * @param {jQuery} [$trigger] + */ - } - }); + }, { + key: 'open', + value: function open($trigger) { + if (this.isOpen) { + return; + } - $.fn.extend({ - closeModal: function(options) { - var defaults = { - out_duration: 250, - complete: undefined - }, - $modal = $(this), - overlayID = $modal.data('overlay-id'), - $overlay = $('#' + overlayID); + this.isOpen = true; + var body = document.body; + body.style.overflow = 'hidden'; + this.$el[0].classList.add('open'); + body.appendChild(this.$overlay[0]); - options = $.extend(defaults, options); + // Set opening trigger, undefined indicates modal was opened by javascript + this.openingTrigger = !!$trigger ? $trigger : undefined; + + if (this.options.dismissible) { + this.handleKeydownBound = this.handleKeydown.bind(this); + document.addEventListener('keydown', this.handleKeydownBound); + } + + this.animateIn(); - // Disable scrolling - $('body').css('overflow', ''); + return this; + } - $modal.find('.modal-close').off('click.close'); - $(document).off('keyup.leanModal' + overlayID); + /** + * Close Modal + */ - $overlay.velocity( { opacity: 0}, {duration: options.out_duration, queue: false, ease: "easeOutQuart"}); + }, { + key: 'close', + value: function close() { + if (!this.isOpen) { + return; + } + this.isOpen = false; + this.$el[0].classList.remove('open'); + document.body.style.overflow = ''; - // Define Bottom Sheet animation - if ($modal.hasClass('bottom-sheet')) { - $modal.velocity({bottom: "-100%", opacity: 0}, { - duration: options.out_duration, - queue: false, - ease: "easeOutCubic", - // Handle modal ready callback - complete: function() { - $overlay.css({display:"none"}); + if (this.options.dismissible) { + document.removeEventListener('keydown', this.handleKeydownBound); + } - // Call complete callback - if (typeof(options.complete) === "function") { - options.complete(); - } - $overlay.remove(); - _stack--; - } + this.animateOut(); + + return this; + } + }], [{ + key: 'init', + value: function init($els, options) { + var arr = []; + $els.each(function () { + arr.push(new Modal($(this), options)); }); + return arr; } - else { - $modal.velocity( - { top: options.starting_top, opacity: 0, scaleX: 0.7}, { - duration: options.out_duration, - complete: - function() { - - $(this).css('display', 'none'); - // Call complete callback - if (typeof(options.complete) === "function") { - options.complete(); - } - $overlay.remove(); - _stack--; - } - } - ); + }, { + key: 'defaults', + get: function () { + return _defaults; } - } - }); + }]); - $.fn.extend({ - leanModal: function(option) { - return this.each(function() { + return Modal; + }(); - var defaults = { - starting_top: '4%' - }, - // Override defaults - options = $.extend(defaults, option); - - // Close Handlers - $(this).click(function(e) { - options.starting_top = ($(this).offset().top - $(window).scrollTop()) /1.15; - var modal_id = $(this).attr("href") || '#' + $(this).data('target'); - $(modal_id).openModal(options); - e.preventDefault(); - }); // done set on click - }); // done return + /** + * @static + * @memberof Modal + */ + + + Modal._increment = 0; + + /** + * @static + * @memberof Modal + */ + Modal._count = 0; + + Materialize.Modal = Modal; + + $.fn.modal = function (methodOrOptions) { + // Call plugin method if valid method name is passed in + if (Modal.prototype[methodOrOptions]) { + // Getter methods + if (methodOrOptions.slice(0, 3) === 'get') { + return this.first()[0].M_Modal[methodOrOptions](); + + // Void methods + } else { + return this.each(function () { + this.M_Modal[methodOrOptions](); + }); + } + + // Initialize plugin if options or no argument is passed in + } else if (typeof methodOrOptions === 'object' || !methodOrOptions) { + Modal.init(this, arguments[0]); + return this; + + // Return error if an unrecognized method name is passed in + } else { + $.error('Method ' + methodOrOptions + ' does not exist on jQuery.modal'); } - }); -})(jQuery); + }; +})(jQuery, Materialize.Vel); ;(function ($) { $.fn.materialbox = function () { - return this.each(function() { + return this.each(function () { if ($(this).hasClass('initialized')) { return; @@ -802,35 +2265,34 @@ else { var placeholder = $('
      ').addClass('material-placeholder'); var originalWidth = 0; var originalHeight = 0; + var ancestorsChanged; + var ancestor; + var originInlineStyles = origin.attr('style'); origin.wrap(placeholder); - - origin.on('click', function(){ + // Start click handler + origin.on('click', function () { var placeholder = origin.parent('.material-placeholder'); var windowWidth = window.innerWidth; var windowHeight = window.innerHeight; var originalWidth = origin.width(); var originalHeight = origin.height(); - // If already modal, return to original if (doneAnimating === false) { returnToOriginal(); return false; - } - else if (overlayActive && doneAnimating===true) { + } else if (overlayActive && doneAnimating === true) { returnToOriginal(); return false; } - // Set states doneAnimating = false; origin.addClass('active'); overlayActive = true; // Set positioning for placeholder - placeholder.css({ width: placeholder[0].getBoundingClientRect().width, height: placeholder[0].getBoundingClientRect().height, @@ -839,27 +2301,51 @@ else { left: 0 }); - + // Find ancestor with overflow: hidden; and remove it + ancestorsChanged = undefined; + ancestor = placeholder[0].parentNode; + var count = 0; + while (ancestor !== null && !$(ancestor).is(document)) { + var curr = $(ancestor); + if (curr.css('overflow') !== 'visible') { + curr.css('overflow', 'visible'); + if (ancestorsChanged === undefined) { + ancestorsChanged = curr; + } else { + ancestorsChanged = ancestorsChanged.add(curr); + } + } + ancestor = ancestor.parentNode; + } // Set css on origin - origin.css({position: 'absolute', 'z-index': 1000}) - .data('width', originalWidth) - .data('height', originalHeight); + origin.css({ + position: 'absolute', + 'z-index': 1000, + 'will-change': 'left, top, width, height' + }).data('width', originalWidth).data('height', originalHeight); // Add overlay - var overlay = $('
      ') - .css({ - opacity: 0 - }) - .click(function(){ - if (doneAnimating === true) - returnToOriginal(); - }); - // Animate Overlay - $('body').append(overlay); - overlay.velocity({opacity: 1}, {duration: inDuration, queue: false, easing: 'easeOutQuad'} - ); + var overlay = $('
      ').css({ + opacity: 0 + }).click(function () { + if (doneAnimating === true) returnToOriginal(); + }); + + // Put before in origin image to preserve z-index layering. + origin.before(overlay); + + // Set dimensions if needed + var overlayOffset = overlay[0].getBoundingClientRect(); + overlay.css({ + width: windowWidth, + height: windowHeight, + left: -1 * overlayOffset.left, + top: -1 * overlayOffset.top + }); + // Animate Overlay + overlay.velocity({ opacity: 1 }, { duration: inDuration, queue: false, easing: 'easeOutQuad' }); // Add and animate caption if it exists if (origin.data('caption') !== "") { @@ -867,11 +2353,9 @@ else { $photo_caption.text(origin.data('caption')); $('body').append($photo_caption); $photo_caption.css({ "display": "inline" }); - $photo_caption.velocity({opacity: 1}, {duration: inDuration, queue: false, easing: 'easeOutQuad'}); + $photo_caption.velocity({ opacity: 1 }, { duration: inDuration, queue: false, easing: 'easeOutQuad' }); } - - // Resize Image var ratio = 0; var widthPercent = originalWidth / windowWidth; @@ -883,1581 +2367,1994 @@ else { ratio = originalHeight / originalWidth; newWidth = windowWidth * 0.9; newHeight = windowWidth * 0.9 * ratio; - } - else { + } else { ratio = originalWidth / originalHeight; - newWidth = (windowHeight * 0.9) * ratio; + newWidth = windowHeight * 0.9 * ratio; newHeight = windowHeight * 0.9; } // Animate image + set z-index - if(origin.hasClass('responsive-img')) { - origin.velocity({'max-width': newWidth, 'width': originalWidth}, {duration: 0, queue: false, - complete: function(){ - origin.css({left: 0, top: 0}) - .velocity( - { - height: newHeight, - width: newWidth, - left: $(document).scrollLeft() + windowWidth/2 - origin.parent('.material-placeholder').offset().left - newWidth/2, - top: $(document).scrollTop() + windowHeight/2 - origin.parent('.material-placeholder').offset().top - newHeight/ 2 - }, - { - duration: inDuration, - queue: false, - easing: 'easeOutQuad', - complete: function(){doneAnimating = true;} + if (origin.hasClass('responsive-img')) { + origin.velocity({ 'max-width': newWidth, 'width': originalWidth }, { duration: 0, queue: false, + complete: function () { + origin.css({ left: 0, top: 0 }).velocity({ + height: newHeight, + width: newWidth, + left: $(document).scrollLeft() + windowWidth / 2 - origin.parent('.material-placeholder').offset().left - newWidth / 2, + top: $(document).scrollTop() + windowHeight / 2 - origin.parent('.material-placeholder').offset().top - newHeight / 2 + }, { + duration: inDuration, + queue: false, + easing: 'easeOutQuad', + complete: function () { + doneAnimating = true; } - ); + }); } // End Complete }); // End Velocity - } - else { - origin.css('left', 0) - .css('top', 0) - .velocity( - { - height: newHeight, - width: newWidth, - left: $(document).scrollLeft() + windowWidth/2 - origin.parent('.material-placeholder').offset().left - newWidth/2, - top: $(document).scrollTop() + windowHeight/2 - origin.parent('.material-placeholder').offset().top - newHeight/ 2 - }, - { - duration: inDuration, - queue: false, - easing: 'easeOutQuad', - complete: function(){doneAnimating = true;} + } else { + origin.css('left', 0).css('top', 0).velocity({ + height: newHeight, + width: newWidth, + left: $(document).scrollLeft() + windowWidth / 2 - origin.parent('.material-placeholder').offset().left - newWidth / 2, + top: $(document).scrollTop() + windowHeight / 2 - origin.parent('.material-placeholder').offset().top - newHeight / 2 + }, { + duration: inDuration, + queue: false, + easing: 'easeOutQuad', + complete: function () { + doneAnimating = true; } - ); // End Velocity - } - - }); // End origin on click - - - // Return on scroll - $(window).scroll(function() { - if (overlayActive ) { - returnToOriginal(); + }); // End Velocity } - }); - // Return on ESC - $(document).keyup(function(e) { + // Handle Exit triggers + $(window).on('scroll.materialbox', function () { + if (overlayActive) { + returnToOriginal(); + } + }); - if (e.keyCode === 27 && doneAnimating === true) { // ESC key + $(window).on('resize.materialbox', function () { if (overlayActive) { returnToOriginal(); } - } - }); + }); + + $(document).on('keyup.materialbox', function (e) { + // ESC key + if (e.keyCode === 27 && doneAnimating === true && overlayActive) { + returnToOriginal(); + } + }); + }); // End click handler // This function returns the modaled image to the original spot function returnToOriginal() { - doneAnimating = false; + doneAnimating = false; - var placeholder = origin.parent('.material-placeholder'); - var windowWidth = window.innerWidth; - var windowHeight = window.innerHeight; - var originalWidth = origin.data('width'); - var originalHeight = origin.data('height'); + var placeholder = origin.parent('.material-placeholder'); + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var originalWidth = origin.data('width'); + var originalHeight = origin.data('height'); + + origin.velocity("stop", true); + $('#materialbox-overlay').velocity("stop", true); + $('.materialbox-caption').velocity("stop", true); + + // disable exit handlers + $(window).off('scroll.materialbox'); + $(document).off('keyup.materialbox'); + $(window).off('resize.materialbox'); + + $('#materialbox-overlay').velocity({ opacity: 0 }, { + duration: outDuration, // Delay prevents animation overlapping + queue: false, easing: 'easeOutQuad', + complete: function () { + // Remove Overlay + overlayActive = false; + $(this).remove(); + } + }); - origin.velocity("stop", true); - $('#materialbox-overlay').velocity("stop", true); - $('.materialbox-caption').velocity("stop", true); + // Resize Image + origin.velocity({ + width: originalWidth, + height: originalHeight, + left: 0, + top: 0 + }, { + duration: outDuration, + queue: false, easing: 'easeOutQuad', + complete: function () { + placeholder.css({ + height: '', + width: '', + position: '', + top: '', + left: '' + }); + origin.removeAttr('style'); + origin.attr('style', originInlineStyles); - $('#materialbox-overlay').velocity({opacity: 0}, { - duration: outDuration, // Delay prevents animation overlapping - queue: false, easing: 'easeOutQuad', - complete: function(){ - // Remove Overlay - overlayActive = false; - $(this).remove(); - } - }); + // Remove class + origin.removeClass('active'); + doneAnimating = true; - // Resize Image - origin.velocity( - { - width: originalWidth, - height: originalHeight, - left: 0, - top: 0 - }, - { - duration: outDuration, - queue: false, easing: 'easeOutQuad' + // Remove overflow overrides on ancestors + if (ancestorsChanged) { + ancestorsChanged.css('overflow', ''); } - ); + } + }); - // Remove Caption + reset css settings on image - $('.materialbox-caption').velocity({opacity: 0}, { - duration: outDuration, // Delay prevents animation overlapping - queue: false, easing: 'easeOutQuad', - complete: function(){ - placeholder.css({ - height: '', - width: '', - position: '', - top: '', - left: '' - }); + // Remove Caption + reset css settings on image + $('.materialbox-caption').velocity({ opacity: 0 }, { + duration: outDuration, // Delay prevents animation overlapping + queue: false, easing: 'easeOutQuad', + complete: function () { + $(this).remove(); + } + }); + } + }); + }; - origin.css({ - height: '', - top: '', - left: '', - width: '', - 'max-width': '', - position: '', - 'z-index': '' - }); + $(document).ready(function () { + $('.materialboxed').materialbox(); + }); +})(jQuery); +;(function ($) { - // Remove class - origin.removeClass('active'); - doneAnimating = true; - $(this).remove(); - } - }); + $.fn.parallax = function () { + var window_width = $(window).width(); + // Parallax Scripts + return this.each(function (i) { + var $this = $(this); + $this.addClass('parallax'); + + function updateParallax(initial) { + var container_height; + if (window_width < 601) { + container_height = $this.height() > 0 ? $this.height() : $this.children("img").height(); + } else { + container_height = $this.height() > 0 ? $this.height() : 500; + } + var $img = $this.children("img").first(); + var img_height = $img.height(); + var parallax_dist = img_height - container_height; + var bottom = $this.offset().top + container_height; + var top = $this.offset().top; + var scrollTop = $(window).scrollTop(); + var windowHeight = window.innerHeight; + var windowBottom = scrollTop + windowHeight; + var percentScrolled = (windowBottom - top) / (container_height + windowHeight); + var parallax = Math.round(parallax_dist * percentScrolled); + if (initial) { + $img.css('display', 'block'); } - }); -}; + if (bottom > scrollTop && top < scrollTop + windowHeight) { + $img.css('transform', "translate3D(-50%," + parallax + "px, 0)"); + } + } -$(document).ready(function(){ - $('.materialboxed').materialbox(); -}); + // Wait for image load + $this.children("img").one("load", function () { + updateParallax(true); + }).each(function () { + if (this.complete) $(this).trigger("load"); + }); -}( jQuery )); + $(window).scroll(function () { + window_width = $(window).width(); + updateParallax(false); + }); + + $(window).resize(function () { + window_width = $(window).width(); + updateParallax(false); + }); + }); + }; +})(jQuery); ;(function ($) { - $.fn.parallax = function () { - var window_width = $(window).width(); - // Parallax Scripts - return this.each(function(i) { - var $this = $(this); - $this.addClass('parallax'); + var methods = { + init: function (options) { + var defaults = { + onShow: null, + swipeable: false, + responsiveThreshold: Infinity // breakpoint for swipeable + }; + options = $.extend(defaults, options); + var namespace = Materialize.objectSelectorString($(this)); + + return this.each(function (i) { + + var uniqueNamespace = namespace + i; + + // For each set of tabs, we want to keep track of + // which tab is active and its associated content + var $this = $(this), + window_width = $(window).width(); + + var $active, + $content, + $links = $this.find('li.tab a'), + $tabs_width = $this.width(), + $tabs_content = $(), + $tabs_wrapper, + $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length, + $indicator, + index = 0, + prev_index = 0, + clicked = false, + clickedTimeout, + transition = 300; + + // Finds right attribute for indicator based on active tab. + // el: jQuery Object + var calcRightPos = function (el) { + return Math.ceil($tabs_width - el.position().left - el[0].getBoundingClientRect().width - $this.scrollLeft()); + }; - function updateParallax(initial) { - var container_height; - if (window_width < 601) { - container_height = ($this.height() > 0) ? $this.height() : $this.children("img").height(); - } - else { - container_height = ($this.height() > 0) ? $this.height() : 500; - } - var $img = $this.children("img").first(); - var img_height = $img.height(); - var parallax_dist = img_height - container_height; - var bottom = $this.offset().top + container_height; - var top = $this.offset().top; - var scrollTop = $(window).scrollTop(); - var windowHeight = window.innerHeight; - var windowBottom = scrollTop + windowHeight; - var percentScrolled = (windowBottom - top) / (container_height + windowHeight); - var parallax = Math.round((parallax_dist * percentScrolled)); + // Finds left attribute for indicator based on active tab. + // el: jQuery Object + var calcLeftPos = function (el) { + return Math.floor(el.position().left + $this.scrollLeft()); + }; - if (initial) { - $img.css('display', 'block'); - } - if ((bottom > scrollTop) && (top < (scrollTop + windowHeight))) { - $img.css('transform', "translate3D(-50%," + parallax + "px, 0)"); + // Animates Indicator to active tab. + // prev_index: Number + var animateIndicator = function (prev_index) { + if (index - prev_index >= 0) { + $indicator.velocity({ "right": calcRightPos($active) }, { duration: transition, queue: false, easing: 'easeOutQuad' }); + $indicator.velocity({ "left": calcLeftPos($active) }, { duration: transition, queue: false, easing: 'easeOutQuad', delay: 90 }); + } else { + $indicator.velocity({ "left": calcLeftPos($active) }, { duration: transition, queue: false, easing: 'easeOutQuad' }); + $indicator.velocity({ "right": calcRightPos($active) }, { duration: transition, queue: false, easing: 'easeOutQuad', delay: 90 }); } + }; + // Change swipeable according to responsive threshold + if (options.swipeable) { + if (window_width > options.responsiveThreshold) { + options.swipeable = false; + } } - // Wait for image load - $this.children("img").one("load", function() { - updateParallax(true); - }).each(function() { - if(this.complete) $(this).load(); - }); - - $(window).scroll(function() { - window_width = $(window).width(); - updateParallax(false); - }); - - $(window).resize(function() { - window_width = $(window).width(); - updateParallax(false); - }); - - }); - - }; -}( jQuery ));;(function ($) { - - var methods = { - init : function() { - return this.each(function() { - - // For each set of tabs, we want to keep track of - // which tab is active and its associated content - var $this = $(this), - window_width = $(window).width(); - - $this.width('100%'); - // Set Tab Width for each tab - var $num_tabs = $(this).children('li').length; - $this.children('li').each(function() { - $(this).width((100/$num_tabs)+'%'); - }); - var $active, $content, $links = $this.find('li.tab a'), - $tabs_width = $this.width(), - $tab_width = $this.find('li').first().outerWidth(), - $index = 0; - - // If the location.hash matches one of the links, use that as the active tab. - $active = $($links.filter('[href="'+location.hash+'"]')); + // If the location.hash matches one of the links, use that as the active tab. + $active = $($links.filter('[href="' + location.hash + '"]')); - // If no match is found, use the first link or any with class 'active' as the initial active tab. - if ($active.length === 0) { + // If no match is found, use the first link or any with class 'active' as the initial active tab. + if ($active.length === 0) { $active = $(this).find('li.tab a.active').first(); - } - if ($active.length === 0) { - $active = $(this).find('li.tab a').first(); - } - - $active.addClass('active'); - $index = $links.index($active); - if ($index < 0) { - $index = 0; - } - - $content = $($active[0].hash); - - // append indicator then set indicator width to tab width - $this.append('
      '); - var $indicator = $this.find('.indicator'); - if ($this.is(":visible")) { - $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)}); - $indicator.css({"left": $index * $tab_width}); - } - $(window).resize(function () { - $tabs_width = $this.width(); - $tab_width = $this.find('li').first().outerWidth(); - if ($index < 0) { - $index = 0; } - if ($tab_width !== 0 && $tabs_width !== 0) { - $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)}); - $indicator.css({"left": $index * $tab_width}); + if ($active.length === 0) { + $active = $(this).find('li.tab a').first(); } - }); - // Hide the remaining content - $links.not($active).each(function () { - $(this.hash).hide(); - }); + $active.addClass('active'); + index = $links.index($active); + if (index < 0) { + index = 0; + } + if ($active[0] !== undefined) { + $content = $($active[0].hash); + $content.addClass('active'); + } - // Bind the click event handler - $this.on('click', 'a', function(e){ - if ($(this).parent().hasClass('disabled')) { - e.preventDefault(); - return; + // append indicator then set indicator width to tab width + if (!$this.find('.indicator').length) { + $this.append('
    • '); + } + $indicator = $this.find('.indicator'); + + // we make sure that the indicator is at the end of the tabs + $this.append($indicator); + + if ($this.is(":visible")) { + // $indicator.css({"right": $tabs_width - ((index + 1) * $tab_width)}); + // $indicator.css({"left": index * $tab_width}); + setTimeout(function () { + $indicator.css({ "right": calcRightPos($active) }); + $indicator.css({ "left": calcLeftPos($active) }); + }, 0); } + $(window).off('resize.tabs-' + uniqueNamespace).on('resize.tabs-' + uniqueNamespace, function () { + $tabs_width = $this.width(); + $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length; + if (index < 0) { + index = 0; + } + if ($tab_width !== 0 && $tabs_width !== 0) { + $indicator.css({ "right": calcRightPos($active) }); + $indicator.css({ "left": calcLeftPos($active) }); + } + }); - $tabs_width = $this.width(); - $tab_width = $this.find('li').first().outerWidth(); + // Initialize Tabs Content. + if (options.swipeable) { + // TODO: Duplicate calls with swipeable? handle multiple div wrapping. + $links.each(function () { + var $curr_content = $(Materialize.escapeHash(this.hash)); + $curr_content.addClass('carousel-item'); + $tabs_content = $tabs_content.add($curr_content); + }); + $tabs_wrapper = $tabs_content.wrapAll(''); + $tabs_content.css('display', ''); + $('.tabs-content.carousel').carousel({ + fullWidth: true, + noWrap: true, + onCycleTo: function (item) { + if (!clicked) { + var prev_index = index; + index = $tabs_wrapper.index(item); + $active.removeClass('active'); + $active = $links.eq(index); + $active.addClass('active'); + animateIndicator(prev_index); + if (typeof options.onShow === "function") { + options.onShow.call($this[0], $content); + } + } + } + }); + } else { + // Hide the remaining content + $links.not($active).each(function () { + $(Materialize.escapeHash(this.hash)).hide(); + }); + } - // Make the old tab inactive. - $active.removeClass('active'); - $content.hide(); + // Bind the click event handler + $this.off('click.tabs').on('click.tabs', 'a', function (e) { + if ($(this).parent().hasClass('disabled')) { + e.preventDefault(); + return; + } - // Update the variables with the new link and content - $active = $(this); - $content = $(this.hash); - $links = $this.find('li.tab a'); + // Act as regular link if target attribute is specified. + if (!!$(this).attr("target")) { + return; + } - // Make the tab active. - $active.addClass('active'); - var $prev_index = $index; - $index = $links.index($(this)); - if ($index < 0) { - $index = 0; - } - // Change url to current tab - // window.location.hash = $active.attr('href'); + clicked = true; + $tabs_width = $this.width(); + $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length; + + // Make the old tab inactive. + $active.removeClass('active'); + var $oldContent = $content; + + // Update the variables with the new link and content + $active = $(this); + $content = $(Materialize.escapeHash(this.hash)); + $links = $this.find('li.tab a'); + var activeRect = $active.position(); + + // Make the tab active. + $active.addClass('active'); + prev_index = index; + index = $links.index($(this)); + if (index < 0) { + index = 0; + } + // Change url to current tab + // window.location.hash = $active.attr('href'); + + // Swap content + if (options.swipeable) { + if ($tabs_content.length) { + $tabs_content.carousel('set', index, function () { + if (typeof options.onShow === "function") { + options.onShow.call($this[0], $content); + } + }); + } + } else { + if ($content !== undefined) { + $content.show(); + $content.addClass('active'); + if (typeof options.onShow === "function") { + options.onShow.call(this, $content); + } + } - $content.show(); + if ($oldContent !== undefined && !$oldContent.is($content)) { + $oldContent.hide(); + $oldContent.removeClass('active'); + } + } - // Update indicator - if (($index - $prev_index) >= 0) { - $indicator.velocity({"right": $tabs_width - (($index + 1) * $tab_width)}, { duration: 300, queue: false, easing: 'easeOutQuad'}); - $indicator.velocity({"left": $index * $tab_width}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90}); + // Reset clicked state + clickedTimeout = setTimeout(function () { + clicked = false; + }, transition); - } - else { - $indicator.velocity({"left": $index * $tab_width}, { duration: 300, queue: false, easing: 'easeOutQuad'}); - $indicator.velocity({"right": $tabs_width - (($index + 1) * $tab_width)}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90}); - } + // Update indicator + animateIndicator(prev_index); - // Prevent the anchor's default click action - e.preventDefault(); + // Prevent the anchor's default click action + e.preventDefault(); + }); }); - }); - }, - select_tab : function( id ) { + select_tab: function (id) { this.find('a[href="#' + id + '"]').trigger('click'); } }; - $.fn.tabs = function(methodOrOptions) { - if ( methods[methodOrOptions] ) { - return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { + $.fn.tabs = function (methodOrOptions) { + if (methods[methodOrOptions]) { + return methods[methodOrOptions].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if (typeof methodOrOptions === 'object' || !methodOrOptions) { // Default to "init" - return methods.init.apply( this, arguments ); + return methods.init.apply(this, arguments); } else { - $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' ); + $.error('Method ' + methodOrOptions + ' does not exist on jQuery.tabs'); } }; - $(document).ready(function(){ + $(document).ready(function () { $('ul.tabs').tabs(); }); -}( jQuery )); +})(jQuery); ;(function ($) { - $.fn.tooltip = function (options) { - var timeout = null, - counter = null, - started = false, - counterInterval = null, + $.fn.tooltip = function (options) { + var timeout = null, margin = 5; - // Defaults - var defaults = { - delay: 350 - }; - options = $.extend(defaults, options); + // Defaults + var defaults = { + delay: 350, + tooltip: '', + position: 'bottom', + html: false + }; + + // Remove tooltip from the activator + if (options === "remove") { + this.each(function () { + $('#' + $(this).attr('data-tooltip-id')).remove(); + $(this).removeAttr('data-tooltip-id'); + $(this).off('mouseenter.tooltip mouseleave.tooltip'); + }); + return false; + } + + options = $.extend(defaults, options); + + return this.each(function () { + var tooltipId = Materialize.guid(); + var origin = $(this); - //Remove previously created html - $('.material-tooltip').remove(); + // Destroy old tooltip + if (origin.attr('data-tooltip-id')) { + $('#' + origin.attr('data-tooltip-id')).remove(); + } - return this.each(function(){ - var origin = $(this); + origin.attr('data-tooltip-id', tooltipId); + + // Get attributes. + var allowHtml, tooltipDelay, tooltipPosition, tooltipText, tooltipEl, backdrop; + var setAttributes = function () { + allowHtml = origin.attr('data-html') ? origin.attr('data-html') === 'true' : options.html; + tooltipDelay = origin.attr('data-delay'); + tooltipDelay = tooltipDelay === undefined || tooltipDelay === '' ? options.delay : tooltipDelay; + tooltipPosition = origin.attr('data-position'); + tooltipPosition = tooltipPosition === undefined || tooltipPosition === '' ? options.position : tooltipPosition; + tooltipText = origin.attr('data-tooltip'); + tooltipText = tooltipText === undefined || tooltipText === '' ? options.tooltip : tooltipText; + }; + setAttributes(); - // Create Text span - var tooltip_text = $('').text(origin.attr('data-tooltip')); + var renderTooltipEl = function () { + var tooltip = $('
      '); - // Create tooltip - var newTooltip = $('
      '); - newTooltip.addClass('material-tooltip').append(tooltip_text); - newTooltip.appendTo($('body')); + // Create Text span + if (allowHtml) { + tooltipText = $('').html(tooltipText); + } else { + tooltipText = $('').text(tooltipText); + } - var backdrop = $('
      ').addClass('backdrop'); - backdrop.appendTo(newTooltip); - backdrop.css({ top: 0, left:0 }); + // Create tooltip + tooltip.append(tooltipText).appendTo($('body')).attr('id', tooltipId); + // Create backdrop + backdrop = $('
      '); + backdrop.appendTo(tooltip); + return tooltip; + }; + tooltipEl = renderTooltipEl(); - //Destroy previously binded events - $(this).off('mouseenter mouseleave'); + // Destroy previously binded events + origin.off('mouseenter.tooltip mouseleave.tooltip'); // Mouse In - $(this).on({ - mouseenter: function(e) { - var tooltip_delay = origin.data("delay"); - tooltip_delay = (tooltip_delay === undefined || tooltip_delay === '') ? options.delay : tooltip_delay; - counter = 0; - counterInterval = setInterval(function(){ - counter += 10; - if (counter >= tooltip_delay && started === false) { + var started = false, + timeoutRef; + origin.on({ 'mouseenter.tooltip': function (e) { + var showTooltip = function () { + setAttributes(); started = true; - newTooltip.css({ display: 'block', left: '0px', top: '0px' }); - - // Set Tooltip text - newTooltip.children('span').text(origin.attr('data-tooltip')); + tooltipEl.velocity('stop'); + backdrop.velocity('stop'); + tooltipEl.css({ visibility: 'visible', left: '0px', top: '0px' }); // Tooltip positioning var originWidth = origin.outerWidth(); var originHeight = origin.outerHeight(); - var tooltipPosition = origin.attr('data-position'); - var tooltipHeight = newTooltip.outerHeight(); - var tooltipWidth = newTooltip.outerWidth(); + var tooltipHeight = tooltipEl.outerHeight(); + var tooltipWidth = tooltipEl.outerWidth(); var tooltipVerticalMovement = '0px'; var tooltipHorizontalMovement = '0px'; - var scale_factor = 8; + var backdropOffsetWidth = backdrop[0].offsetWidth; + var backdropOffsetHeight = backdrop[0].offsetHeight; + var scaleXFactor = 8; + var scaleYFactor = 8; + var scaleFactor = 0; + var targetTop, targetLeft, newCoordinates; if (tooltipPosition === "top") { - // Top Position - newTooltip.css({ - top: origin.offset().top - tooltipHeight - margin, - left: origin.offset().left + originWidth/2 - tooltipWidth/2 - }); - tooltipVerticalMovement = '-10px'; - backdrop.css({ - borderRadius: '14px 14px 0 0', - transformOrigin: '50% 90%', - marginTop: tooltipHeight, - marginLeft: (tooltipWidth/2) - (backdrop.width()/2) - - }); - } - // Left Position - else if (tooltipPosition === "left") { - newTooltip.css({ - top: origin.offset().top + originHeight/2 - tooltipHeight/2, - left: origin.offset().left - tooltipWidth - margin - }); - tooltipHorizontalMovement = '-10px'; - backdrop.css({ - width: '14px', - height: '14px', - borderRadius: '14px 0 0 14px', - transformOrigin: '95% 50%', - marginTop: tooltipHeight/2, - marginLeft: tooltipWidth - }); - } - // Right Position - else if (tooltipPosition === "right") { - newTooltip.css({ - top: origin.offset().top + originHeight/2 - tooltipHeight/2, - left: origin.offset().left + originWidth + margin - }); - tooltipHorizontalMovement = '+10px'; + // Top Position + targetTop = origin.offset().top - tooltipHeight - margin; + targetLeft = origin.offset().left + originWidth / 2 - tooltipWidth / 2; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + tooltipVerticalMovement = '-10px'; backdrop.css({ - width: '14px', - height: '14px', - borderRadius: '0 14px 14px 0', - transformOrigin: '5% 50%', - marginTop: tooltipHeight/2, - marginLeft: '0px' - }); - } - else { - // Bottom Position - newTooltip.css({ - top: origin.offset().top + origin.outerHeight() + margin, - left: origin.offset().left + originWidth/2 - tooltipWidth/2 - }); - tooltipVerticalMovement = '+10px'; - backdrop.css({ - marginLeft: (tooltipWidth/2) - (backdrop.width()/2) + bottom: 0, + left: 0, + borderRadius: '14px 14px 0 0', + transformOrigin: '50% 100%', + marginTop: tooltipHeight, + marginLeft: tooltipWidth / 2 - backdropOffsetWidth / 2 }); } + // Left Position + else if (tooltipPosition === "left") { + targetTop = origin.offset().top + originHeight / 2 - tooltipHeight / 2; + targetLeft = origin.offset().left - tooltipWidth - margin; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + + tooltipHorizontalMovement = '-10px'; + backdrop.css({ + top: '-7px', + right: 0, + width: '14px', + height: '14px', + borderRadius: '14px 0 0 14px', + transformOrigin: '95% 50%', + marginTop: tooltipHeight / 2, + marginLeft: tooltipWidth + }); + } + // Right Position + else if (tooltipPosition === "right") { + targetTop = origin.offset().top + originHeight / 2 - tooltipHeight / 2; + targetLeft = origin.offset().left + originWidth + margin; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + + tooltipHorizontalMovement = '+10px'; + backdrop.css({ + top: '-7px', + left: 0, + width: '14px', + height: '14px', + borderRadius: '0 14px 14px 0', + transformOrigin: '5% 50%', + marginTop: tooltipHeight / 2, + marginLeft: '0px' + }); + } else { + // Bottom Position + targetTop = origin.offset().top + origin.outerHeight() + margin; + targetLeft = origin.offset().left + originWidth / 2 - tooltipWidth / 2; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + tooltipVerticalMovement = '+10px'; + backdrop.css({ + top: 0, + left: 0, + marginLeft: tooltipWidth / 2 - backdropOffsetWidth / 2 + }); + } + + // Set tooptip css placement + tooltipEl.css({ + top: newCoordinates.y, + left: newCoordinates.x + }); // Calculate Scale to fill - scale_factor = tooltipWidth / 8; - if (scale_factor < 8) { - scale_factor = 8; - } - if (tooltipPosition === "right" || tooltipPosition === "left") { - scale_factor = tooltipWidth / 10; - if (scale_factor < 6) - scale_factor = 6; - } + scaleXFactor = Math.SQRT2 * tooltipWidth / parseInt(backdropOffsetWidth); + scaleYFactor = Math.SQRT2 * tooltipHeight / parseInt(backdropOffsetHeight); + scaleFactor = Math.max(scaleXFactor, scaleYFactor); - newTooltip.velocity({ opacity: 1, marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 350, queue: false }); - backdrop.css({ display: 'block' }) - .velocity({opacity:1},{duration: 55, delay: 0, queue: false}) - .velocity({scale: scale_factor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'}); + tooltipEl.velocity({ translateY: tooltipVerticalMovement, translateX: tooltipHorizontalMovement }, { duration: 350, queue: false }).velocity({ opacity: 1 }, { duration: 300, delay: 50, queue: false }); + backdrop.css({ visibility: 'visible' }).velocity({ opacity: 1 }, { duration: 55, delay: 0, queue: false }).velocity({ scaleX: scaleFactor, scaleY: scaleFactor }, { duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad' }); + }; - } - }, 10); // End Interval + timeoutRef = setTimeout(showTooltip, tooltipDelay); // End Interval - // Mouse Out - }, - mouseleave: function(){ - // Reset State - clearInterval(counterInterval); - counter = 0; - - // Animate back - newTooltip.velocity({ - opacity: 0, marginTop: 0, marginLeft: 0}, { duration: 225, queue: false, delay: 275 } - ); - backdrop.velocity({opacity: 0, scale: 1}, { - duration:225, - delay: 275, queue: false, - complete: function(){ - backdrop.css('display', 'none'); - newTooltip.css('display', 'none'); - started = false;} - }); - } + // Mouse Out + }, + 'mouseleave.tooltip': function () { + // Reset State + started = false; + clearTimeout(timeoutRef); + + // Animate back + setTimeout(function () { + if (started !== true) { + tooltipEl.velocity({ + opacity: 0, translateY: 0, translateX: 0 }, { duration: 225, queue: false }); + backdrop.velocity({ opacity: 0, scaleX: 1, scaleY: 1 }, { + duration: 225, + queue: false, + complete: function () { + backdrop.css({ visibility: 'hidden' }); + tooltipEl.css({ visibility: 'hidden' }); + started = false; + } + }); + } + }, 225); + } }); }); }; - $(document).ready(function(){ - $('.tooltipped').tooltip(); - }); -}( jQuery )); -;/*! - * Waves v0.6.4 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE - */ - -;(function(window) { - 'use strict'; + var repositionWithinScreen = function (x, y, width, height) { + var newX = x; + var newY = y; - var Waves = Waves || {}; - var $$ = document.querySelectorAll.bind(document); - - // Find exact position of element - function isWindow(obj) { - return obj !== null && obj === obj.window; + if (newX < 0) { + newX = 4; + } else if (newX + width > window.innerWidth) { + newX -= newX + width - window.innerWidth; } - function getWindow(elem) { - return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; + if (newY < 0) { + newY = 4; + } else if (newY + height > window.innerHeight + $(window).scrollTop) { + newY -= newY + height - window.innerHeight; } - function offset(elem) { - var docElem, win, - box = {top: 0, left: 0}, - doc = elem && elem.ownerDocument; + return { x: newX, y: newY }; + }; - docElem = doc.documentElement; + $(document).ready(function () { + $('.tooltipped').tooltip(); + }); +})(jQuery); +; /*! + * Waves v0.6.4 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */ + +;(function (window) { + 'use strict'; + + var Waves = Waves || {}; + var $$ = document.querySelectorAll.bind(document); + + // Find exact position of element + function isWindow(obj) { + return obj !== null && obj === obj.window; + } - if (typeof elem.getBoundingClientRect !== typeof undefined) { - box = elem.getBoundingClientRect(); - } - win = getWindow(doc); - return { - top: box.top + win.pageYOffset - docElem.clientTop, - left: box.left + win.pageXOffset - docElem.clientLeft - }; - } + function getWindow(elem) { + return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; + } - function convertStyle(obj) { - var style = ''; + function offset(elem) { + var docElem, + win, + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; - for (var a in obj) { - if (obj.hasOwnProperty(a)) { - style += (a + ':' + obj[a] + ';'); - } - } + docElem = doc.documentElement; - return style; + if (typeof elem.getBoundingClientRect !== typeof undefined) { + box = elem.getBoundingClientRect(); } + win = getWindow(doc); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + } - var Effect = { + function convertStyle(obj) { + var style = ''; - // Effect delay - duration: 750, + for (var a in obj) { + if (obj.hasOwnProperty(a)) { + style += a + ':' + obj[a] + ';'; + } + } - show: function(e, element) { + return style; + } - // Disable right click - if (e.button === 2) { - return false; - } + var Effect = { - var el = element || this; + // Effect delay + duration: 750, - // Create ripple - var ripple = document.createElement('div'); - ripple.className = 'waves-ripple'; - el.appendChild(ripple); + show: function (e, element) { - // Get click coordinate and element witdh - var pos = offset(el); - var relativeY = (e.pageY - pos.top); - var relativeX = (e.pageX - pos.left); - var scale = 'scale('+((el.clientWidth / 100) * 10)+')'; + // Disable right click + if (e.button === 2) { + return false; + } - // Support for touch devices - if ('touches' in e) { - relativeY = (e.touches[0].pageY - pos.top); - relativeX = (e.touches[0].pageX - pos.left); - } + var el = element || this; - // Attach data to element - ripple.setAttribute('data-hold', Date.now()); - ripple.setAttribute('data-scale', scale); - ripple.setAttribute('data-x', relativeX); - ripple.setAttribute('data-y', relativeY); - - // Set ripple position - var rippleStyle = { - 'top': relativeY+'px', - 'left': relativeX+'px' - }; - - ripple.className = ripple.className + ' waves-notransition'; - ripple.setAttribute('style', convertStyle(rippleStyle)); - ripple.className = ripple.className.replace('waves-notransition', ''); - - // Scale the ripple - rippleStyle['-webkit-transform'] = scale; - rippleStyle['-moz-transform'] = scale; - rippleStyle['-ms-transform'] = scale; - rippleStyle['-o-transform'] = scale; - rippleStyle.transform = scale; - rippleStyle.opacity = '1'; - - rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms'; - rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms'; - rippleStyle['-o-transition-duration'] = Effect.duration + 'ms'; - rippleStyle['transition-duration'] = Effect.duration + 'ms'; - - rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; - rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; - rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; - rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; - - ripple.setAttribute('style', convertStyle(rippleStyle)); - }, + // Create ripple + var ripple = document.createElement('div'); + ripple.className = 'waves-ripple'; + el.appendChild(ripple); - hide: function(e) { - TouchHandler.touchup(e); + // Get click coordinate and element witdh + var pos = offset(el); + var relativeY = e.pageY - pos.top; + var relativeX = e.pageX - pos.left; + var scale = 'scale(' + el.clientWidth / 100 * 10 + ')'; - var el = this; - var width = el.clientWidth * 1.4; + // Support for touch devices + if ('touches' in e) { + relativeY = e.touches[0].pageY - pos.top; + relativeX = e.touches[0].pageX - pos.left; + } - // Get first ripple - var ripple = null; - var ripples = el.getElementsByClassName('waves-ripple'); - if (ripples.length > 0) { - ripple = ripples[ripples.length - 1]; - } else { - return false; - } + // Attach data to element + ripple.setAttribute('data-hold', Date.now()); + ripple.setAttribute('data-scale', scale); + ripple.setAttribute('data-x', relativeX); + ripple.setAttribute('data-y', relativeY); - var relativeX = ripple.getAttribute('data-x'); - var relativeY = ripple.getAttribute('data-y'); - var scale = ripple.getAttribute('data-scale'); + // Set ripple position + var rippleStyle = { + 'top': relativeY + 'px', + 'left': relativeX + 'px' + }; - // Get delay beetween mousedown and mouse leave - var diff = Date.now() - Number(ripple.getAttribute('data-hold')); - var delay = 350 - diff; + ripple.className = ripple.className + ' waves-notransition'; + ripple.setAttribute('style', convertStyle(rippleStyle)); + ripple.className = ripple.className.replace('waves-notransition', ''); + + // Scale the ripple + rippleStyle['-webkit-transform'] = scale; + rippleStyle['-moz-transform'] = scale; + rippleStyle['-ms-transform'] = scale; + rippleStyle['-o-transform'] = scale; + rippleStyle.transform = scale; + rippleStyle.opacity = '1'; + + rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms'; + rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms'; + rippleStyle['-o-transition-duration'] = Effect.duration + 'ms'; + rippleStyle['transition-duration'] = Effect.duration + 'ms'; + + rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + + ripple.setAttribute('style', convertStyle(rippleStyle)); + }, - if (delay < 0) { - delay = 0; - } + hide: function (e) { + TouchHandler.touchup(e); - // Fade out ripple after delay - setTimeout(function() { - var style = { - 'top': relativeY+'px', - 'left': relativeX+'px', - 'opacity': '0', - - // Duration - '-webkit-transition-duration': Effect.duration + 'ms', - '-moz-transition-duration': Effect.duration + 'ms', - '-o-transition-duration': Effect.duration + 'ms', - 'transition-duration': Effect.duration + 'ms', - '-webkit-transform': scale, - '-moz-transform': scale, - '-ms-transform': scale, - '-o-transform': scale, - 'transform': scale, - }; - - ripple.setAttribute('style', convertStyle(style)); - - setTimeout(function() { - try { - el.removeChild(ripple); - } catch(e) { - return false; - } - }, Effect.duration); - }, delay); - }, + var el = this; + var width = el.clientWidth * 1.4; - // Little hack to make can perform waves effect - wrapInput: function(elements) { - for (var a = 0; a < elements.length; a++) { - var el = elements[a]; + // Get first ripple + var ripple = null; + var ripples = el.getElementsByClassName('waves-ripple'); + if (ripples.length > 0) { + ripple = ripples[ripples.length - 1]; + } else { + return false; + } - if (el.tagName.toLowerCase() === 'input') { - var parent = el.parentNode; + var relativeX = ripple.getAttribute('data-x'); + var relativeY = ripple.getAttribute('data-y'); + var scale = ripple.getAttribute('data-scale'); - // If input already have parent just pass through - if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) { - continue; - } + // Get delay beetween mousedown and mouse leave + var diff = Date.now() - Number(ripple.getAttribute('data-hold')); + var delay = 350 - diff; - // Put element class and style to the specified parent - var wrapper = document.createElement('i'); - wrapper.className = el.className + ' waves-input-wrapper'; + if (delay < 0) { + delay = 0; + } - var elementStyle = el.getAttribute('style'); + // Fade out ripple after delay + setTimeout(function () { + var style = { + 'top': relativeY + 'px', + 'left': relativeX + 'px', + 'opacity': '0', + + // Duration + '-webkit-transition-duration': Effect.duration + 'ms', + '-moz-transition-duration': Effect.duration + 'ms', + '-o-transition-duration': Effect.duration + 'ms', + 'transition-duration': Effect.duration + 'ms', + '-webkit-transform': scale, + '-moz-transform': scale, + '-ms-transform': scale, + '-o-transform': scale, + 'transform': scale + }; - if (!elementStyle) { - elementStyle = ''; - } + ripple.setAttribute('style', convertStyle(style)); - wrapper.setAttribute('style', elementStyle); + setTimeout(function () { + try { + el.removeChild(ripple); + } catch (e) { + return false; + } + }, Effect.duration); + }, delay); + }, - el.className = 'waves-button-input'; - el.removeAttribute('style'); + // Little hack to make can perform waves effect + wrapInput: function (elements) { + for (var a = 0; a < elements.length; a++) { + var el = elements[a]; - // Put element as child - parent.replaceChild(wrapper, el); - wrapper.appendChild(el); - } - } - } - }; + if (el.tagName.toLowerCase() === 'input') { + var parent = el.parentNode; + // If input already have parent just pass through + if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) { + continue; + } - /** - * Disable mousedown event for 500ms during and after touch - */ - var TouchHandler = { - /* uses an integer rather than bool so there's no issues with - * needing to clear timeouts if another touch event occurred - * within the 500ms. Cannot mouseup between touchstart and - * touchend, nor in the 500ms after touchend. */ - touches: 0, - allowEvent: function(e) { - var allow = true; - - if (e.type === 'touchstart') { - TouchHandler.touches += 1; //push - } else if (e.type === 'touchend' || e.type === 'touchcancel') { - setTimeout(function() { - if (TouchHandler.touches > 0) { - TouchHandler.touches -= 1; //pop after 500ms - } - }, 500); - } else if (e.type === 'mousedown' && TouchHandler.touches > 0) { - allow = false; - } + // Put element class and style to the specified parent + var wrapper = document.createElement('i'); + wrapper.className = el.className + ' waves-input-wrapper'; - return allow; - }, - touchup: function(e) { - TouchHandler.allowEvent(e); - } - }; + var elementStyle = el.getAttribute('style'); + if (!elementStyle) { + elementStyle = ''; + } - /** - * Delegated click handler for .waves-effect element. - * returns null when .waves-effect element not in "click tree" - */ - function getWavesEffectElement(e) { - if (TouchHandler.allowEvent(e) === false) { - return null; - } + wrapper.setAttribute('style', elementStyle); - var element = null; - var target = e.target || e.srcElement; + el.className = 'waves-button-input'; + el.removeAttribute('style'); - while (target.parentElement !== null) { - if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) { - element = target; - break; - } else if (target.classList.contains('waves-effect')) { - element = target; - break; - } - target = target.parentElement; + // Put element as child + parent.replaceChild(wrapper, el); + wrapper.appendChild(el); } - - return element; + } } + }; - /** - * Bubble the click and show effect if .waves-effect elem was found - */ - function showEffect(e) { - var element = getWavesEffectElement(e); - - if (element !== null) { - Effect.show(e, element); + /** + * Disable mousedown event for 500ms during and after touch + */ + var TouchHandler = { + /* uses an integer rather than bool so there's no issues with + * needing to clear timeouts if another touch event occurred + * within the 500ms. Cannot mouseup between touchstart and + * touchend, nor in the 500ms after touchend. */ + touches: 0, + allowEvent: function (e) { + var allow = true; + + if (e.type === 'touchstart') { + TouchHandler.touches += 1; //push + } else if (e.type === 'touchend' || e.type === 'touchcancel') { + setTimeout(function () { + if (TouchHandler.touches > 0) { + TouchHandler.touches -= 1; //pop after 500ms + } + }, 500); + } else if (e.type === 'mousedown' && TouchHandler.touches > 0) { + allow = false; + } - if ('ontouchstart' in window) { - element.addEventListener('touchend', Effect.hide, false); - element.addEventListener('touchcancel', Effect.hide, false); - } + return allow; + }, + touchup: function (e) { + TouchHandler.allowEvent(e); + } + }; - element.addEventListener('mouseup', Effect.hide, false); - element.addEventListener('mouseleave', Effect.hide, false); - } + /** + * Delegated click handler for .waves-effect element. + * returns null when .waves-effect element not in "click tree" + */ + function getWavesEffectElement(e) { + if (TouchHandler.allowEvent(e) === false) { + return null; } - Waves.displayEffect = function(options) { - options = options || {}; + var element = null; + var target = e.target || e.srcElement; - if ('duration' in options) { - Effect.duration = options.duration; - } + while (target.parentNode !== null) { + if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) { + element = target; + break; + } + target = target.parentNode; + } + return element; + } - //Wrap input inside tag - Effect.wrapInput($$('.waves-effect')); + /** + * Bubble the click and show effect if .waves-effect elem was found + */ + function showEffect(e) { + var element = getWavesEffectElement(e); - if ('ontouchstart' in window) { - document.body.addEventListener('touchstart', showEffect, false); - } + if (element !== null) { + Effect.show(e, element); - document.body.addEventListener('mousedown', showEffect, false); - }; + if ('ontouchstart' in window) { + element.addEventListener('touchend', Effect.hide, false); + element.addEventListener('touchcancel', Effect.hide, false); + } - /** - * Attach Waves to an input element (or any element which doesn't - * bubble mouseup/mousedown events). - * Intended to be used with dynamically loaded forms/inputs, or - * where the user doesn't want a delegated click handler. - */ - Waves.attach = function(element) { - //FUTURE: automatically add waves classes and allow users - // to specify them with an options param? Eg. light/classic/button - if (element.tagName.toLowerCase() === 'input') { - Effect.wrapInput([element]); - element = element.parentElement; - } + element.addEventListener('mouseup', Effect.hide, false); + element.addEventListener('mouseleave', Effect.hide, false); + element.addEventListener('dragend', Effect.hide, false); + } + } - if ('ontouchstart' in window) { - element.addEventListener('touchstart', showEffect, false); - } + Waves.displayEffect = function (options) { + options = options || {}; - element.addEventListener('mousedown', showEffect, false); - }; + if ('duration' in options) { + Effect.duration = options.duration; + } - window.Waves = Waves; + //Wrap input inside tag + Effect.wrapInput($$('.waves-effect')); - document.addEventListener('DOMContentLoaded', function() { - Waves.displayEffect(); - }, false); + if ('ontouchstart' in window) { + document.body.addEventListener('touchstart', showEffect, false); + } -})(window); -;Materialize.toast = function (message, displayLength, className, completeCallback) { - className = className || ""; + document.body.addEventListener('mousedown', showEffect, false); + }; - var container = document.getElementById('toast-container'); + /** + * Attach Waves to an input element (or any element which doesn't + * bubble mouseup/mousedown events). + * Intended to be used with dynamically loaded forms/inputs, or + * where the user doesn't want a delegated click handler. + */ + Waves.attach = function (element) { + //FUTURE: automatically add waves classes and allow users + // to specify them with an options param? Eg. light/classic/button + if (element.tagName.toLowerCase() === 'input') { + Effect.wrapInput([element]); + element = element.parentNode; + } - // Create toast container if it does not exist - if (container === null) { - // create notification container - container = document.createElement('div'); - container.id = 'toast-container'; - document.body.appendChild(container); + if ('ontouchstart' in window) { + element.addEventListener('touchstart', showEffect, false); } - // Select and append toast - var newToast = createToast(message); + element.addEventListener('mousedown', showEffect, false); + }; - // only append toast if message is not undefined - if(message){ - container.appendChild(newToast); - } + window.Waves = Waves; - newToast.style.top = '35px'; - newToast.style.opacity = 0; + document.addEventListener('DOMContentLoaded', function () { + Waves.displayEffect(); + }, false); +})(window); +;(function ($, Vel) { + 'use strict'; + + var _defaults = { + displayLength: Infinity, + inDuration: 300, + outDuration: 375, + className: undefined, + completeCallback: undefined, + activationPercent: 0.8 + }; - // Animate toast in - Vel(newToast, { "top" : "0px", opacity: 1 }, {duration: 300, - easing: 'easeOutCubic', - queue: false}); + var Toast = function () { + function Toast(message, displayLength, className, completeCallback) { + _classCallCheck(this, Toast); - // Allows timer to be pause while being panned - var timeLeft = displayLength; - var counterInterval = setInterval (function(){ + if (!message) { + return; + } + /** + * Options for the toast + * @member Toast#options + */ + this.options = { + displayLength: displayLength, + className: className, + completeCallback: completeCallback + }; - if (newToast.parentNode === null) - window.clearInterval(counterInterval); + this.options = $.extend({}, Toast.defaults, this.options); + this.message = message; - // If toast is not being dragged, decrease its time remaining - if (!newToast.classList.contains('panning')) { - timeLeft -= 20; - } + /** + * Describes current pan state toast + * @type {Boolean} + */ + this.panning = false; - if (timeLeft <= 0) { - // Animate toast out - Vel(newToast, {"opacity": 0, marginTop: '-40px'}, { duration: 375, - easing: 'easeOutExpo', - queue: false, - complete: function(){ - // Call the optional callback - if(typeof(completeCallback) === "function") - completeCallback(); - // Remove toast after it times out - this[0].parentNode.removeChild(this[0]); - } - }); - window.clearInterval(counterInterval); + /** + * Time remaining until toast is removed + */ + this.timeRemaining = this.options.displayLength; + + if (Toast._toasts.length === 0) { + Toast._createContainer(); } - }, 20); + // Create new toast + Toast._toasts.push(this); + var toastElement = this.createToast(); + toastElement.M_Toast = this; + this.el = toastElement; + this._animateIn(); + this.setTimer(); + } + _createClass(Toast, [{ + key: 'createToast', - function createToast(html) { - // Create toast + /** + * Create toast and append it to toast container + */ + value: function createToast() { var toast = document.createElement('div'); toast.classList.add('toast'); - if (className) { - var classes = className.split(' '); - for (var i = 0, count = classes.length; i < count; i++) { - toast.classList.add(classes[i]); - } + // Add custom classes onto toast + if (this.options.className) { + var classes = this.options.className.split(' '); + var i = void 0, + count = void 0; + for (i = 0, count = classes.length; i < count; i++) { + toast.classList.add(classes[i]); + } } - toast.innerHTML = html; - // Bind hammer - var hammerHandler = new Hammer(toast, {prevent_default: false}); - hammerHandler.on('pan', function(e) { - var deltaX = e.deltaX; - var activationDistance = 80; + // Set content + if (typeof HTMLElement === 'object' ? this.message instanceof HTMLElement : this.message && typeof this.message === 'object' && this.message !== null && this.message.nodeType === 1 && typeof this.message.nodeName === 'string') { + toast.appendChild(this.message); - // Change toast state - if (!toast.classList.contains('panning')){ - toast.classList.add('panning'); - } + // Check if it is jQuery object + } else if (this.message instanceof jQuery) { + $(toast).append(this.message); - var opacityPercent = 1-Math.abs(deltaX / activationDistance); - if (opacityPercent < 0) - opacityPercent = 0; + // Insert as text; + } else { + toast.innerHTML = this.message; + } - Vel(toast, {left: deltaX, opacity: opacityPercent }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + // Append toasft + Toast._container.appendChild(toast); + return toast; + } - }); + /** + * Animate in toast + */ - hammerHandler.on('panend', function(e) { - var deltaX = e.deltaX; - var activationDistance = 80; + }, { + key: '_animateIn', + value: function _animateIn() { + // Animate toast in + Vel(this.el, { top: 0, opacity: 1 }, { + duration: 300, + easing: 'easeOutCubic', + queue: false + }); + } - // If toast dragged past activation point - if (Math.abs(deltaX) > activationDistance) { - Vel(toast, {marginTop: '-40px'}, { duration: 375, - easing: 'easeOutExpo', - queue: false, - complete: function(){ - if(typeof(completeCallback) === "function") { - completeCallback(); - } - toast.parentNode.removeChild(toast); - } - }); + /** + * Create setInterval which automatically removes toast when timeRemaining >= 0 + * has been reached + */ - } else { - toast.classList.remove('panning'); - // Put toast back into original position - Vel(toast, { left: 0, opacity: 1 }, { duration: 300, - easing: 'easeOutExpo', - queue: false - }); + }, { + key: 'setTimer', + value: function setTimer() { + var _this3 = this; + + if (this.timeRemaining !== Infinity) { + this.counterInterval = setInterval(function () { + // If toast is not being dragged, decrease its time remaining + if (!_this3.panning) { + _this3.timeRemaining -= 20; + } + + // Animate toast out + if (_this3.timeRemaining <= 0) { + _this3.remove(); + } + }, 20); + } + } + + /** + * Dismiss toast with animation + */ + + }, { + key: 'remove', + value: function remove() { + var _this4 = this; + window.clearInterval(this.counterInterval); + var activationDistance = this.el.offsetWidth * this.options.activationPercent; + + if (this.wasSwiped) { + this.el.style.transition = 'transform .05s, opacity .05s'; + this.el.style.transform = 'translateX(' + activationDistance + 'px)'; + this.el.style.opacity = 0; + } + + Vel(this.el, { opacity: 0, marginTop: '-40px' }, { + duration: this.options.outDuration, + easing: 'easeOutExpo', + queue: false, + complete: function () { + // Call the optional callback + if (typeof _this4.options.completeCallback === 'function') { + _this4.options.completeCallback(); + } + // Remove toast from DOM + _this4.el.parentNode.removeChild(_this4.el); + Toast._toasts.splice(Toast._toasts.indexOf(_this4), 1); + if (Toast._toasts.length === 0) { + Toast._removeContainer(); + } } }); + } + }], [{ + key: '_createContainer', - return toast; - } -}; + + /** + * Append toast container and add event handlers + */ + value: function _createContainer() { + var container = document.createElement('div'); + container.setAttribute('id', 'toast-container'); + + // Add event handler + container.addEventListener('touchstart', Toast._onDragStart); + container.addEventListener('touchmove', Toast._onDragMove); + container.addEventListener('touchend', Toast._onDragEnd); + + container.addEventListener('mousedown', Toast._onDragStart); + document.addEventListener('mousemove', Toast._onDragMove); + document.addEventListener('mouseup', Toast._onDragEnd); + + document.body.appendChild(container); + Toast._container = container; + } + + /** + * Remove toast container and event handlers + */ + + }, { + key: '_removeContainer', + value: function _removeContainer() { + // Add event handler + document.removeEventListener('mousemove', Toast._onDragMove); + document.removeEventListener('mouseup', Toast._onDragEnd); + + Toast._container.parentNode.removeChild(Toast._container); + Toast._container = null; + } + + /** + * Begin drag handler + * @param {Event} e + */ + + }, { + key: '_onDragStart', + value: function _onDragStart(e) { + if (e.target && $(e.target).closest('.toast').length) { + var $toast = $(e.target).closest('.toast'); + var toast = $toast[0].M_Toast; + toast.panning = true; + Toast._draggedToast = toast; + toast.el.classList.add('panning'); + toast.el.style.transition = ''; + toast.startingXPos = Toast._xPos(e); + toast.time = Date.now(); + toast.xPos = Toast._xPos(e); + } + } + + /** + * Drag move handler + * @param {Event} e + */ + + }, { + key: '_onDragMove', + value: function _onDragMove(e) { + if (!!Toast._draggedToast) { + e.preventDefault(); + var toast = Toast._draggedToast; + toast.deltaX = Math.abs(toast.xPos - Toast._xPos(e)); + toast.xPos = Toast._xPos(e); + toast.velocityX = toast.deltaX / (Date.now() - toast.time); + toast.time = Date.now(); + + var totalDeltaX = toast.xPos - toast.startingXPos; + var activationDistance = toast.el.offsetWidth * toast.options.activationPercent; + toast.el.style.transform = 'translateX(' + totalDeltaX + 'px)'; + toast.el.style.opacity = 1 - Math.abs(totalDeltaX / activationDistance); + } + } + + /** + * End drag handler + * @param {Event} e + */ + + }, { + key: '_onDragEnd', + value: function _onDragEnd(e) { + if (!!Toast._draggedToast) { + var toast = Toast._draggedToast; + toast.panning = false; + toast.el.classList.remove('panning'); + + var totalDeltaX = toast.xPos - toast.startingXPos; + var activationDistance = toast.el.offsetWidth * toast.options.activationPercent; + var shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || toast.velocityX > 1; + + // Remove toast + if (shouldBeDismissed) { + toast.wasSwiped = true; + toast.remove(); + + // Animate toast back to original position + } else { + toast.el.style.transition = 'transform .2s, opacity .2s'; + toast.el.style.transform = ''; + toast.el.style.opacity = ''; + } + Toast._draggedToast = null; + } + } + + /** + * Get x position of mouse or touch event + * @param {Event} e + */ + + }, { + key: '_xPos', + value: function _xPos(e) { + if (e.targetTouches && e.targetTouches.length >= 1) { + return e.targetTouches[0].clientX; + } + // mouse event + return e.clientX; + } + + /** + * Remove all toasts + */ + + }, { + key: 'removeAll', + value: function removeAll() { + for (var toastIndex in Toast._toasts) { + Toast._toasts[toastIndex].remove(); + } + } + }, { + key: 'defaults', + get: function () { + return _defaults; + } + }]); + + return Toast; + }(); + + /** + * @static + * @memberof Toast + * @type {Array.} + */ + + + Toast._toasts = []; + + /** + * @static + * @memberof Toast + */ + Toast._container = null; + + /** + * @static + * @memberof Toast + * @type {Toast} + */ + Toast._draggedToast = null; + + Materialize.Toast = Toast; + Materialize.toast = function (message, displayLength, className, completeCallback) { + return new Toast(message, displayLength, className, completeCallback); + }; +})(jQuery, Materialize.Vel); ;(function ($) { var methods = { - init : function(options) { + init: function (options) { var defaults = { - menuWidth: 240, + menuWidth: 300, edge: 'left', - closeOnClick: false + closeOnClick: false, + draggable: true, + onOpen: null, + onClose: null }; options = $.extend(defaults, options); - $(this).each(function(){ + $(this).each(function () { var $this = $(this); - var menu_id = $("#"+ $this.attr('data-activates')); + var menuId = $this.attr('data-activates'); + var menu = $("#" + menuId); // Set to width - if (options.menuWidth != 240) { - menu_id.css('width', options.menuWidth); + if (options.menuWidth != 300) { + menu.css('width', options.menuWidth); } // Add Touch Area - $('body').append($('
      ')); + var $dragTarget = $('.drag-target[data-sidenav="' + menuId + '"]'); + if (options.draggable) { + // Regenerate dragTarget + if ($dragTarget.length) { + $dragTarget.remove(); + } - if (options.edge == 'left') { - menu_id.css('left', -1 * (options.menuWidth + 10)); - $('.drag-target').css({'left': 0}); // Add Touch Area + $dragTarget = $('
      ').attr('data-sidenav', menuId); + $('body').append($dragTarget); + } else { + $dragTarget = $(); } - else { - menu_id.addClass('right-aligned') // Change text-alignment to right - .css('right', -1 * (options.menuWidth + 10)) - .css('left', ''); - $('.drag-target').css({'right': 0}); // Add Touch Area + + if (options.edge == 'left') { + menu.css('transform', 'translateX(-100%)'); + $dragTarget.css({ 'left': 0 }); // Add Touch Area + } else { + menu.addClass('right-aligned') // Change text-alignment to right + .css('transform', 'translateX(100%)'); + $dragTarget.css({ 'right': 0 }); // Add Touch Area } // If fixed sidenav, bring menu out - if (menu_id.hasClass('fixed')) { - if (window.innerWidth > 992) { - menu_id.css('left', 0); - } + if (menu.hasClass('fixed')) { + if (window.innerWidth > 992) { + menu.css('transform', 'translateX(0)'); } + } // Window resize to reset on large screens fixed - if (menu_id.hasClass('fixed')) { - $(window).resize( function() { + if (menu.hasClass('fixed')) { + $(window).resize(function () { if (window.innerWidth > 992) { // Close menu if window is resized bigger than 992 and user has fixed sidenav - if ($('#sidenav-overlay').css('opacity') !== 0 && menuOut) { + if ($('#sidenav-overlay').length !== 0 && menuOut) { removeMenu(true); + } else { + // menu.removeAttr('style'); + menu.css('transform', 'translateX(0%)'); + // menu.css('width', options.menuWidth); } - else { - menu_id.removeAttr('style'); - menu_id.css('width', options.menuWidth); + } else if (menuOut === false) { + if (options.edge === 'left') { + menu.css('transform', 'translateX(-100%)'); + } else { + menu.css('transform', 'translateX(100%)'); } } - else if (menuOut === false){ - if (options.edge === 'left') - menu_id.css('left', -1 * (options.menuWidth + 10)); - else - menu_id.css('right', -1 * (options.menuWidth + 10)); - } - }); } // if closeOnClick, then add close event for all a tags in side sideNav if (options.closeOnClick === true) { - menu_id.on("click.itemclick", "a:not(.collapsible-header)", function(){ - removeMenu(); + menu.on("click.itemclick", "a:not(.collapsible-header)", function () { + if (!(window.innerWidth > 992 && menu.hasClass('fixed'))) { + removeMenu(); + } }); } - function removeMenu(restoreNav) { + var removeMenu = function (restoreNav) { panning = false; menuOut = false; - // Reenable scrolling - $('body').css('overflow', ''); + $('body').css({ + overflow: '', + width: '' + }); - $('#sidenav-overlay').velocity({opacity: 0}, {duration: 200, queue: false, easing: 'easeOutQuad', - complete: function() { + $('#sidenav-overlay').velocity({ opacity: 0 }, { duration: 200, + queue: false, easing: 'easeOutQuad', + complete: function () { $(this).remove(); } }); if (options.edge === 'left') { // Reset phantom div - $('.drag-target').css({width: '', right: '', left: '0'}); - menu_id.velocity( - {left: -1 * (options.menuWidth + 10)}, - { duration: 200, - queue: false, - easing: 'easeOutCubic', - complete: function() { - if (restoreNav === true) { - // Restore Fixed sidenav - menu_id.removeAttr('style'); - menu_id.css('width', options.menuWidth); - } + $dragTarget.css({ width: '', right: '', left: '0' }); + menu.velocity({ 'translateX': '-100%' }, { duration: 200, + queue: false, + easing: 'easeOutCubic', + complete: function () { + if (restoreNav === true) { + // Restore Fixed sidenav + menu.removeAttr('style'); + menu.css('width', options.menuWidth); } + } }); - } - else { + } else { // Reset phantom div - $('.drag-target').css({width: '', right: '0', left: ''}); - menu_id.velocity( - {right: -1 * (options.menuWidth + 10)}, - { duration: 200, - queue: false, - easing: 'easeOutCubic', - complete: function() { - if (restoreNav === true) { - // Restore Fixed sidenav - menu_id.removeAttr('style'); - menu_id.css('width', options.menuWidth); - } + $dragTarget.css({ width: '', right: '0', left: '' }); + menu.velocity({ 'translateX': '100%' }, { duration: 200, + queue: false, + easing: 'easeOutCubic', + complete: function () { + if (restoreNav === true) { + // Restore Fixed sidenav + menu.removeAttr('style'); + menu.css('width', options.menuWidth); } - }); + } + }); } - } - + // Callback + if (typeof options.onClose === 'function') { + options.onClose.call(this, menu); + } + }; // Touch Event var panning = false; var menuOut = false; - $('.drag-target').on('click', function(){ - removeMenu(); - }); + if (options.draggable) { + $dragTarget.on('click', function () { + if (menuOut) { + removeMenu(); + } + }); - $('.drag-target').hammer({ - prevent_default: false - }).bind('pan', function(e) { + $dragTarget.hammer({ + prevent_default: false + }).on('pan', function (e) { - if (e.gesture.pointerType == "touch") { + if (e.gesture.pointerType == "touch") { - var direction = e.gesture.direction; - var x = e.gesture.center.x; - var y = e.gesture.center.y; - var velocityX = e.gesture.velocityX; + var direction = e.gesture.direction; + var x = e.gesture.center.x; + var y = e.gesture.center.y; + var velocityX = e.gesture.velocityX; - // Disable Scrolling - $('body').css('overflow', 'hidden'); + // Vertical scroll bugfix + if (x === 0 && y === 0) { + return; + } - // If overlay does not exist, create one and if it is clicked, close menu - if ($('#sidenav-overlay').length === 0) { - var overlay = $('
      '); - overlay.css('opacity', 0).click( function(){ - removeMenu(); - }); - $('body').append(overlay); - } + // Disable Scrolling + var $body = $('body'); + var $overlay = $('#sidenav-overlay'); + var oldWidth = $body.innerWidth(); + $body.css('overflow', 'hidden'); + $body.width(oldWidth); + + // If overlay does not exist, create one and if it is clicked, close menu + if ($overlay.length === 0) { + $overlay = $('
      '); + $overlay.css('opacity', 0).click(function () { + removeMenu(); + }); - // Keep within boundaries - if (options.edge === 'left') { - if (x > options.menuWidth) { x = options.menuWidth; } - else if (x < 0) { x = 0; } - } + // Run 'onOpen' when sidenav is opened via touch/swipe if applicable + if (typeof options.onOpen === 'function') { + options.onOpen.call(this, menu); + } - if (options.edge === 'left') { - // Left Direction - if (x < (options.menuWidth / 2)) { menuOut = false; } - // Right Direction - else if (x >= (options.menuWidth / 2)) { menuOut = true; } + $('body').append($overlay); + } - menu_id.css('left', (x - options.menuWidth)); - } - else { - // Left Direction - if (x < (window.innerWidth - options.menuWidth / 2)) { - menuOut = true; + // Keep within boundaries + if (options.edge === 'left') { + if (x > options.menuWidth) { + x = options.menuWidth; + } else if (x < 0) { + x = 0; + } } - // Right Direction - else if (x >= (window.innerWidth - options.menuWidth / 2)) { - menuOut = false; - } - var rightPos = -1 *(x - options.menuWidth / 2); - if (rightPos > 0) { - rightPos = 0; + + if (options.edge === 'left') { + // Left Direction + if (x < options.menuWidth / 2) { + menuOut = false; + } + // Right Direction + else if (x >= options.menuWidth / 2) { + menuOut = true; + } + menu.css('transform', 'translateX(' + (x - options.menuWidth) + 'px)'); + } else { + // Left Direction + if (x < window.innerWidth - options.menuWidth / 2) { + menuOut = true; + } + // Right Direction + else if (x >= window.innerWidth - options.menuWidth / 2) { + menuOut = false; + } + var rightPos = x - options.menuWidth / 2; + if (rightPos < 0) { + rightPos = 0; + } + + menu.css('transform', 'translateX(' + rightPos + 'px)'); } - menu_id.css('right', rightPos); + // Percentage overlay + var overlayPerc; + if (options.edge === 'left') { + overlayPerc = x / options.menuWidth; + $overlay.velocity({ opacity: overlayPerc }, { duration: 10, queue: false, easing: 'easeOutQuad' }); + } else { + overlayPerc = Math.abs((x - window.innerWidth) / options.menuWidth); + $overlay.velocity({ opacity: overlayPerc }, { duration: 10, queue: false, easing: 'easeOutQuad' }); + } } + }).on('panend', function (e) { + + if (e.gesture.pointerType == "touch") { + var $overlay = $('#sidenav-overlay'); + var velocityX = e.gesture.velocityX; + var x = e.gesture.center.x; + var leftPos = x - options.menuWidth; + var rightPos = x - options.menuWidth / 2; + if (leftPos > 0) { + leftPos = 0; + } + if (rightPos < 0) { + rightPos = 0; + } + panning = false; + if (options.edge === 'left') { + // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut + if (menuOut && velocityX <= 0.3 || velocityX < -0.5) { + // Return menu to open + if (leftPos !== 0) { + menu.velocity({ 'translateX': [0, leftPos] }, { duration: 300, queue: false, easing: 'easeOutQuad' }); + } + $overlay.velocity({ opacity: 1 }, { duration: 50, queue: false, easing: 'easeOutQuad' }); + $dragTarget.css({ width: '50%', right: 0, left: '' }); + menuOut = true; + } else if (!menuOut || velocityX > 0.3) { + // Enable Scrolling + $('body').css({ + overflow: '', + width: '' + }); + // Slide menu closed + menu.velocity({ 'translateX': [-1 * options.menuWidth - 10, leftPos] }, { duration: 200, queue: false, easing: 'easeOutQuad' }); + $overlay.velocity({ opacity: 0 }, { duration: 200, queue: false, easing: 'easeOutQuad', + complete: function () { + // Run 'onClose' when sidenav is closed via touch/swipe if applicable + if (typeof options.onClose === 'function') { + options.onClose.call(this, menu); + } + + $(this).remove(); + } }); + $dragTarget.css({ width: '10px', right: '', left: 0 }); + } + } else { + if (menuOut && velocityX >= -0.3 || velocityX > 0.5) { + // Return menu to open + if (rightPos !== 0) { + menu.velocity({ 'translateX': [0, rightPos] }, { duration: 300, queue: false, easing: 'easeOutQuad' }); + } + $overlay.velocity({ opacity: 1 }, { duration: 50, queue: false, easing: 'easeOutQuad' }); + $dragTarget.css({ width: '50%', right: '', left: 0 }); + menuOut = true; + } else if (!menuOut || velocityX < -0.3) { + // Enable Scrolling + $('body').css({ + overflow: '', + width: '' + }); - // Percentage overlay - var overlayPerc; - if (options.edge === 'left') { - overlayPerc = x / options.menuWidth; - $('#sidenav-overlay').velocity({opacity: overlayPerc }, {duration: 50, queue: false, easing: 'easeOutQuad'}); - } - else { - overlayPerc = Math.abs((x - window.innerWidth) / options.menuWidth); - $('#sidenav-overlay').velocity({opacity: overlayPerc }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + // Slide menu closed + menu.velocity({ 'translateX': [options.menuWidth + 10, rightPos] }, { duration: 200, queue: false, easing: 'easeOutQuad' }); + $overlay.velocity({ opacity: 0 }, { duration: 200, queue: false, easing: 'easeOutQuad', + complete: function () { + // Run 'onClose' when sidenav is closed via touch/swipe if applicable + if (typeof options.onClose === 'function') { + options.onClose.call(this, menu); + } + + $(this).remove(); + } }); + $dragTarget.css({ width: '10px', right: 0, left: '' }); + } + } } - } - - }).bind('panend', function(e) { + }); + } - if (e.gesture.pointerType == "touch") { - var velocityX = e.gesture.velocityX; + $this.off('click.sidenav').on('click.sidenav', function () { + if (menuOut === true) { + menuOut = false; panning = false; + removeMenu(); + } else { + + // Disable Scrolling + var $body = $('body'); + var $overlay = $('
      '); + var oldWidth = $body.innerWidth(); + $body.css('overflow', 'hidden'); + $body.width(oldWidth); + + // Push current drag target on top of DOM tree + $('body').append($dragTarget); + if (options.edge === 'left') { - // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut - if ((menuOut && velocityX <= 0.3) || velocityX < -0.5) { - menu_id.velocity({left: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'}); - $('.drag-target').css({width: '50%', right: 0, left: ''}); - } - else if (!menuOut || velocityX > 0.3) { - // Enable Scrolling - $('body').css('overflow', ''); - // Slide menu closed - menu_id.velocity({left: -1 * (options.menuWidth + 10)}, {duration: 200, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad', - complete: function () { - $(this).remove(); - }}); - $('.drag-target').css({width: '10px', right: '', left: 0}); - } - } - else { - if ((menuOut && velocityX >= -0.3) || velocityX > 0.5) { - menu_id.velocity({right: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'}); - $('.drag-target').css({width: '50%', right: '', left: 0}); - } - else if (!menuOut || velocityX < -0.3) { - // Enable Scrolling - $('body').css('overflow', ''); - // Slide menu closed - menu_id.velocity({right: -1 * (options.menuWidth + 10)}, {duration: 200, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad', - complete: function () { - $(this).remove(); - }}); - $('.drag-target').css({width: '10px', right: 0, left: ''}); - } + $dragTarget.css({ width: '50%', right: 0, left: '' }); + menu.velocity({ 'translateX': [0, -1 * options.menuWidth] }, { duration: 300, queue: false, easing: 'easeOutQuad' }); + } else { + $dragTarget.css({ width: '50%', right: '', left: 0 }); + menu.velocity({ 'translateX': [0, options.menuWidth] }, { duration: 300, queue: false, easing: 'easeOutQuad' }); } - } - }); - - $this.click(function() { - if (menuOut === true) { + // Overlay close on click + $overlay.css('opacity', 0).click(function () { menuOut = false; panning = false; removeMenu(); - } - else { - - // Disable Scrolling - $('body').css('overflow', 'hidden'); - - if (options.edge === 'left') { - $('.drag-target').css({width: '50%', right: 0, left: ''}); - menu_id.velocity({left: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - } - else { - $('.drag-target').css({width: '50%', right: '', left: 0}); - menu_id.velocity({right: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - menu_id.css('left',''); - } - - var overlay = $('
      '); - overlay.css('opacity', 0) - .click(function(){ - menuOut = false; - panning = false; - removeMenu(); - overlay.velocity({opacity: 0}, {duration: 300, queue: false, easing: 'easeOutQuad', - complete: function() { - $(this).remove(); - } }); - - }); - $('body').append(overlay); - overlay.velocity({opacity: 1}, {duration: 300, queue: false, easing: 'easeOutQuad', + $overlay.velocity({ opacity: 0 }, { duration: 300, queue: false, easing: 'easeOutQuad', complete: function () { - menuOut = true; - panning = false; + $(this).remove(); } }); - } + }); - return false; - }); - }); + // Append body + $('body').append($overlay); + $overlay.velocity({ opacity: 1 }, { duration: 300, queue: false, easing: 'easeOutQuad', + complete: function () { + menuOut = true; + panning = false; + } + }); + // Callback + if (typeof options.onOpen === 'function') { + options.onOpen.call(this, menu); + } + } + return false; + }); + }); + }, + destroy: function () { + var $overlay = $('#sidenav-overlay'); + var $dragTarget = $('.drag-target[data-sidenav="' + $(this).attr('data-activates') + '"]'); + $overlay.trigger('click'); + $dragTarget.remove(); + $(this).off('click'); + $overlay.remove(); }, - show : function() { + show: function () { this.trigger('click'); }, - hide : function() { + hide: function () { $('#sidenav-overlay').trigger('click'); } }; + $.fn.sideNav = function (methodOrOptions) { + if (methods[methodOrOptions]) { + return methods[methodOrOptions].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if (typeof methodOrOptions === 'object' || !methodOrOptions) { + // Default to "init" + return methods.init.apply(this, arguments); + } else { + $.error('Method ' + methodOrOptions + ' does not exist on jQuery.sideNav'); + } + }; // Plugin end +})(jQuery); +; /** + * Extend jquery with a scrollspy plugin. + * This watches the window scroll and fires events when elements are scrolled into viewport. + * + * throttle() and getTime() taken from Underscore.js + * https://github.com/jashkenas/underscore + * + * @author Copyright 2013 John Smart + * @license https://raw.github.com/thesmart/jquery-scrollspy/master/LICENSE + * @see https://github.com/thesmart + * @version 0.1.2 + */ +(function ($) { + + var jWindow = $(window); + var elements = []; + var elementsInView = []; + var isSpying = false; + var ticks = 0; + var unique_id = 1; + var offset = { + top: 0, + right: 0, + bottom: 0, + left: 0 - $.fn.sideNav = function(methodOrOptions) { - if ( methods[methodOrOptions] ) { - return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { - // Default to "init" - return methods.init.apply( this, arguments ); + /** + * Find elements that are within the boundary + * @param {number} top + * @param {number} right + * @param {number} bottom + * @param {number} left + * @return {jQuery} A collection of elements + */ + };function findElements(top, right, bottom, left) { + var hits = $(); + $.each(elements, function (i, element) { + if (element.height() > 0) { + var elTop = element.offset().top, + elLeft = element.offset().left, + elRight = elLeft + element.width(), + elBottom = elTop + element.height(); + + var isIntersect = !(elLeft > right || elRight < left || elTop > bottom || elBottom < top); + + if (isIntersect) { + hits.push(element); + } + } + }); + + return hits; + } + + /** + * Called when the user scrolls the window + */ + function onScroll(scrollOffset) { + // unique tick id + ++ticks; + + // viewport rectangle + var top = jWindow.scrollTop(), + left = jWindow.scrollLeft(), + right = left + jWindow.width(), + bottom = top + jWindow.height(); + + // determine which elements are in view + var intersections = findElements(top + offset.top + scrollOffset || 200, right + offset.right, bottom + offset.bottom, left + offset.left); + $.each(intersections, function (i, element) { + + var lastTick = element.data('scrollSpy:ticks'); + if (typeof lastTick != 'number') { + // entered into view + element.triggerHandler('scrollSpy:enter'); + } + + // update tick id + element.data('scrollSpy:ticks', ticks); + }); + + // determine which elements are no longer in view + $.each(elementsInView, function (i, element) { + var lastTick = element.data('scrollSpy:ticks'); + if (typeof lastTick == 'number' && lastTick !== ticks) { + // exited from view + element.triggerHandler('scrollSpy:exit'); + element.data('scrollSpy:ticks', null); + } + }); + + // remember elements in view for next tick + elementsInView = intersections; + } + + /** + * Called when window is resized + */ + function onWinSize() { + jWindow.trigger('scrollSpy:winSize'); + } + + /** + * Enables ScrollSpy using a selector + * @param {jQuery|string} selector The elements collection, or a selector + * @param {Object=} options Optional. + throttle : number -> scrollspy throttling. Default: 100 ms + offsetTop : number -> offset from top. Default: 0 + offsetRight : number -> offset from right. Default: 0 + offsetBottom : number -> offset from bottom. Default: 0 + offsetLeft : number -> offset from left. Default: 0 + activeClass : string -> Class name to be added to the active link. Default: active + * @returns {jQuery} + */ + $.scrollSpy = function (selector, options) { + var defaults = { + throttle: 100, + scrollOffset: 200, // offset - 200 allows elements near bottom of page to scroll + activeClass: 'active', + getActiveElement: function (id) { + return 'a[href="#' + id + '"]'; + } + }; + options = $.extend(defaults, options); + + var visible = []; + selector = $(selector); + selector.each(function (i, element) { + elements.push($(element)); + $(element).data("scrollSpy:id", i); + // Smooth scroll to section + $('a[href="#' + $(element).attr('id') + '"]').click(function (e) { + e.preventDefault(); + var offset = $(Materialize.escapeHash(this.hash)).offset().top + 1; + $('html, body').animate({ scrollTop: offset - options.scrollOffset }, { duration: 400, queue: false, easing: 'easeOutCubic' }); + }); + }); + + offset.top = options.offsetTop || 0; + offset.right = options.offsetRight || 0; + offset.bottom = options.offsetBottom || 0; + offset.left = options.offsetLeft || 0; + + var throttledScroll = Materialize.throttle(function () { + onScroll(options.scrollOffset); + }, options.throttle || 100); + var readyScroll = function () { + $(document).ready(throttledScroll); + }; + + if (!isSpying) { + jWindow.on('scroll', readyScroll); + jWindow.on('resize', readyScroll); + isSpying = true; + } + + // perform a scan once, after current execution context, and after dom is ready + setTimeout(readyScroll, 0); + + selector.on('scrollSpy:enter', function () { + visible = $.grep(visible, function (value) { + return value.height() != 0; + }); + + var $this = $(this); + + if (visible[0]) { + $(options.getActiveElement(visible[0].attr('id'))).removeClass(options.activeClass); + if ($this.data('scrollSpy:id') < visible[0].data('scrollSpy:id')) { + visible.unshift($(this)); + } else { + visible.push($(this)); + } } else { - $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.sideNav' ); + visible.push($(this)); } - }; // Plugin end -}( jQuery )); -;/** - * Extend jquery with a scrollspy plugin. - * This watches the window scroll and fires events when elements are scrolled into viewport. - * - * throttle() and getTime() taken from Underscore.js - * https://github.com/jashkenas/underscore - * - * @author Copyright 2013 John Smart - * @license https://raw.github.com/thesmart/jquery-scrollspy/master/LICENSE - * @see https://github.com/thesmart - * @version 0.1.2 - */ -(function($) { - - var jWindow = $(window); - var elements = []; - var elementsInView = []; - var isSpying = false; - var ticks = 0; - var unique_id = 1; - var offset = { - top : 0, - right : 0, - bottom : 0, - left : 0, - } - - /** - * Find elements that are within the boundary - * @param {number} top - * @param {number} right - * @param {number} bottom - * @param {number} left - * @return {jQuery} A collection of elements - */ - function findElements(top, right, bottom, left) { - var hits = $(); - $.each(elements, function(i, element) { - if (element.height() > 0) { - var elTop = element.offset().top, - elLeft = element.offset().left, - elRight = elLeft + element.width(), - elBottom = elTop + element.height(); - - var isIntersect = !(elLeft > right || - elRight < left || - elTop > bottom || - elBottom < top); - - if (isIntersect) { - hits.push(element); - } - } - }); - - return hits; - } - - - /** - * Called when the user scrolls the window - */ - function onScroll() { - // unique tick id - ++ticks; - - // viewport rectangle - var top = jWindow.scrollTop(), - left = jWindow.scrollLeft(), - right = left + jWindow.width(), - bottom = top + jWindow.height(); - - // determine which elements are in view -// + 60 accounts for fixed nav - var intersections = findElements(top+offset.top + 200, right+offset.right, bottom+offset.bottom, left+offset.left); - $.each(intersections, function(i, element) { - - var lastTick = element.data('scrollSpy:ticks'); - if (typeof lastTick != 'number') { - // entered into view - element.triggerHandler('scrollSpy:enter'); - } - - // update tick id - element.data('scrollSpy:ticks', ticks); - }); - - // determine which elements are no longer in view - $.each(elementsInView, function(i, element) { - var lastTick = element.data('scrollSpy:ticks'); - if (typeof lastTick == 'number' && lastTick !== ticks) { - // exited from view - element.triggerHandler('scrollSpy:exit'); - element.data('scrollSpy:ticks', null); - } - }); - - // remember elements in view for next tick - elementsInView = intersections; - } - - /** - * Called when window is resized - */ - function onWinSize() { - jWindow.trigger('scrollSpy:winSize'); - } - - /** - * Get time in ms - * @license https://raw.github.com/jashkenas/underscore/master/LICENSE - * @type {function} - * @return {number} - */ - var getTime = (Date.now || function () { - return new Date().getTime(); - }); - - /** - * Returns a function, that, when invoked, will only be triggered at most once - * during a given window of time. Normally, the throttled function will run - * as much as it can, without ever going more than once per `wait` duration; - * but if you'd like to disable the execution on the leading edge, pass - * `{leading: false}`. To disable execution on the trailing edge, ditto. - * @license https://raw.github.com/jashkenas/underscore/master/LICENSE - * @param {function} func - * @param {number} wait - * @param {Object=} options - * @returns {Function} - */ - function throttle(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - options || (options = {}); - var later = function () { - previous = options.leading === false ? 0 : getTime(); - timeout = null; - result = func.apply(context, args); - context = args = null; - }; - return function () { - var now = getTime(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; - - /** - * Enables ScrollSpy using a selector - * @param {jQuery|string} selector The elements collection, or a selector - * @param {Object=} options Optional. - throttle : number -> scrollspy throttling. Default: 100 ms - offsetTop : number -> offset from top. Default: 0 - offsetRight : number -> offset from right. Default: 0 - offsetBottom : number -> offset from bottom. Default: 0 - offsetLeft : number -> offset from left. Default: 0 - * @returns {jQuery} - */ - $.scrollSpy = function(selector, options) { - var visible = []; - selector = $(selector); - selector.each(function(i, element) { - elements.push($(element)); - $(element).data("scrollSpy:id", i); - // Smooth scroll to section - $('a[href=#' + $(element).attr('id') + ']').click(function(e) { - e.preventDefault(); - var offset = $(this.hash).offset().top + 1; - -// offset - 200 allows elements near bottom of page to scroll - - $('html, body').animate({ scrollTop: offset - 200 }, {duration: 400, queue: false, easing: 'easeOutCubic'}); - - }); - }); - options = options || { - throttle: 100 - }; - - offset.top = options.offsetTop || 0; - offset.right = options.offsetRight || 0; - offset.bottom = options.offsetBottom || 0; - offset.left = options.offsetLeft || 0; - - var throttledScroll = throttle(onScroll, options.throttle || 100); - var readyScroll = function(){ - $(document).ready(throttledScroll); - }; - - if (!isSpying) { - jWindow.on('scroll', readyScroll); - jWindow.on('resize', readyScroll); - isSpying = true; - } - - // perform a scan once, after current execution context, and after dom is ready - setTimeout(readyScroll, 0); - - - selector.on('scrollSpy:enter', function() { - visible = $.grep(visible, function(value) { - return value.height() != 0; - }); - - var $this = $(this); - - if (visible[0]) { - $('a[href=#' + visible[0].attr('id') + ']').removeClass('active'); - if ($this.data('scrollSpy:id') < visible[0].data('scrollSpy:id')) { - visible.unshift($(this)); - } - else { - visible.push($(this)); - } - } - else { - visible.push($(this)); - } - - - $('a[href=#' + visible[0].attr('id') + ']').addClass('active'); - }); - selector.on('scrollSpy:exit', function() { - visible = $.grep(visible, function(value) { - return value.height() != 0; - }); - - if (visible[0]) { - $('a[href=#' + visible[0].attr('id') + ']').removeClass('active'); - var $this = $(this); - visible = $.grep(visible, function(value) { - return value.attr('id') != $this.attr('id'); - }); - if (visible[0]) { // Check if empty - $('a[href=#' + visible[0].attr('id') + ']').addClass('active'); - } - } - }); - - return selector; - }; - - /** - * Listen for window resize events - * @param {Object=} options Optional. Set { throttle: number } to change throttling. Default: 100 ms - * @returns {jQuery} $(window) - */ - $.winSizeSpy = function(options) { - $.winSizeSpy = function() { return jWindow; }; // lock from multiple calls - options = options || { - throttle: 100 - }; - return jWindow.on('resize', throttle(onWinSize, options.throttle || 100)); - }; - - /** - * Enables ScrollSpy on a collection of elements - * e.g. $('.scrollSpy').scrollSpy() - * @param {Object=} options Optional. - throttle : number -> scrollspy throttling. Default: 100 ms - offsetTop : number -> offset from top. Default: 0 - offsetRight : number -> offset from right. Default: 0 - offsetBottom : number -> offset from bottom. Default: 0 - offsetLeft : number -> offset from left. Default: 0 - * @returns {jQuery} - */ - $.fn.scrollSpy = function(options) { - return $.scrollSpy($(this), options); - }; -})(jQuery);;(function ($) { - $(document).ready(function() { + $(options.getActiveElement(visible[0].attr('id'))).addClass(options.activeClass); + }); + selector.on('scrollSpy:exit', function () { + visible = $.grep(visible, function (value) { + return value.height() != 0; + }); + + if (visible[0]) { + $(options.getActiveElement(visible[0].attr('id'))).removeClass(options.activeClass); + var $this = $(this); + visible = $.grep(visible, function (value) { + return value.attr('id') != $this.attr('id'); + }); + if (visible[0]) { + // Check if empty + $(options.getActiveElement(visible[0].attr('id'))).addClass(options.activeClass); + } + } + }); + + return selector; + }; + + /** + * Listen for window resize events + * @param {Object=} options Optional. Set { throttle: number } to change throttling. Default: 100 ms + * @returns {jQuery} $(window) + */ + $.winSizeSpy = function (options) { + $.winSizeSpy = function () { + return jWindow; + }; // lock from multiple calls + options = options || { + throttle: 100 + }; + return jWindow.on('resize', Materialize.throttle(onWinSize, options.throttle || 100)); + }; + + /** + * Enables ScrollSpy on a collection of elements + * e.g. $('.scrollSpy').scrollSpy() + * @param {Object=} options Optional. + throttle : number -> scrollspy throttling. Default: 100 ms + offsetTop : number -> offset from top. Default: 0 + offsetRight : number -> offset from right. Default: 0 + offsetBottom : number -> offset from bottom. Default: 0 + offsetLeft : number -> offset from left. Default: 0 + * @returns {jQuery} + */ + $.fn.scrollSpy = function (options) { + return $.scrollSpy($(this), options); + }; +})(jQuery); +;(function ($) { + $(document).ready(function () { // Function to update labels of text fields - Materialize.updateTextFields = function() { + Materialize.updateTextFields = function () { var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea'; - $(input_selector).each(function(index, element) { - if ($(element).val().length > 0 || $(this).attr('placeholder') !== undefined || $(element)[0].validity.badInput === true) { - $(this).siblings('label, i').addClass('active'); - } - else { - $(this).siblings('label, i').removeClass('active'); + $(input_selector).each(function (index, element) { + var $this = $(this); + if ($(element).val().length > 0 || $(element).is(':focus') || element.autofocus || $this.attr('placeholder') !== undefined) { + $this.siblings('label').addClass('active'); + } else if ($(element)[0].validity) { + $this.siblings('label').toggleClass('active', $(element)[0].validity.badInput === true); + } else { + $this.siblings('label').removeClass('active'); } }); }; @@ -2465,30 +4362,27 @@ $(document).ready(function(){ // Text based inputs var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea'; - // Handle HTML5 autofocus - $('input[autofocus]').siblings('label, i').addClass('active'); - // Add active if form auto complete $(document).on('change', input_selector, function () { - if($(this).val().length !== 0 || $(this).attr('placeholder') !== undefined) { - $(this).siblings('label, i').addClass('active'); + if ($(this).val().length !== 0 || $(this).attr('placeholder') !== undefined) { + $(this).siblings('label').addClass('active'); } validate_field($(this)); }); // Add active if input element has been pre-populated on document ready - $(document).ready(function() { + $(document).ready(function () { Materialize.updateTextFields(); }); // HTML DOM FORM RESET handling - $(document).on('reset', function(e) { + $(document).on('reset', function (e) { var formReset = $(e.target); if (formReset.is('form')) { formReset.find(input_selector).removeClass('valid').removeClass('invalid'); formReset.find(input_selector).each(function () { if ($(this).attr('value') === '') { - $(this).siblings('label, i').removeClass('active'); + $(this).siblings('label').removeClass('active'); } }); @@ -2502,36 +4396,39 @@ $(document).ready(function(){ // Add active when element has focus $(document).on('focus', input_selector, function () { - $(this).siblings('label, i').addClass('active'); + $(this).siblings('label, .prefix').addClass('active'); }); $(document).on('blur', input_selector, function () { var $inputElement = $(this); + var selector = ".prefix"; + if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') === undefined) { - $inputElement.siblings('label, i').removeClass('active'); + selector += ", label"; } + + $inputElement.siblings(selector).removeClass('active'); + validate_field($inputElement); }); - validate_field = function(object) { - var hasLength = object.attr('length') !== undefined; - var lenAttr = parseInt(object.attr('length')); + window.validate_field = function (object) { + var hasLength = object.attr('data-length') !== undefined; + var lenAttr = parseInt(object.attr('data-length')); var len = object.val().length; - if (object.val().length === 0 && object[0].validity.badInput === false) { + if (object.val().length === 0 && object[0].validity.badInput === false && !object.is(':required')) { if (object.hasClass('validate')) { object.removeClass('valid'); object.removeClass('invalid'); } - } - else { + } else { if (object.hasClass('validate')) { // Check for character counter attributes - if ((object.is(':valid') && hasLength && (len < lenAttr)) || (object.is(':valid') && !hasLength)) { + if (object.is(':valid') && hasLength && len <= lenAttr || object.is(':valid') && !hasLength) { object.removeClass('invalid'); object.addClass('valid'); - } - else { + } else { object.removeClass('valid'); object.addClass('invalid'); } @@ -2539,6 +4436,20 @@ $(document).ready(function(){ } }; + // Radio and Checkbox focus class + var radio_checkbox = 'input[type=radio], input[type=checkbox]'; + $(document).on('keyup.radio', radio_checkbox, function (e) { + // TAB, check if tabbing to radio or checkbox. + if (e.which === 9) { + $(this).addClass('tabbed'); + var $this = $(this); + $this.one('blur', function (e) { + + $(this).removeClass('tabbed'); + }); + return; + } + }); // Textarea Auto Resize var hiddenDiv = $('.hiddendiv').first(); @@ -2553,59 +4464,88 @@ $(document).ready(function(){ var fontFamily = $textarea.css('font-family'); var fontSize = $textarea.css('font-size'); + var lineHeight = $textarea.css('line-height'); + var padding = $textarea.css('padding'); - if (fontSize) { hiddenDiv.css('font-size', fontSize); } - if (fontFamily) { hiddenDiv.css('font-family', fontFamily); } - - if ($textarea.attr('wrap') === "off") { - hiddenDiv.css('overflow-wrap', "normal") - .css('white-space', "pre"); + if (fontSize) { + hiddenDiv.css('font-size', fontSize); + } + if (fontFamily) { + hiddenDiv.css('font-family', fontFamily); + } + if (lineHeight) { + hiddenDiv.css('line-height', lineHeight); + } + if (padding) { + hiddenDiv.css('padding', padding); } + // Set original-height, if none + if (!$textarea.data('original-height')) { + $textarea.data('original-height', $textarea.height()); + } - + if ($textarea.attr('wrap') === 'off') { + hiddenDiv.css('overflow-wrap', 'normal').css('white-space', 'pre'); + } hiddenDiv.text($textarea.val() + '\n'); var content = hiddenDiv.html().replace(/\n/g, '
      '); hiddenDiv.html(content); - // When textarea is hidden, width goes crazy. // Approximate with half of window size if ($textarea.is(':visible')) { hiddenDiv.css('width', $textarea.width()); - } - else { - hiddenDiv.css('width', $(window).width()/2); + } else { + hiddenDiv.css('width', $(window).width() / 2); } - $textarea.css('height', hiddenDiv.height()); + /** + * Resize if the new height is greater than the + * original height of the textarea + */ + if ($textarea.data('original-height') <= hiddenDiv.height()) { + $textarea.css('height', hiddenDiv.height()); + } else if ($textarea.val().length < $textarea.data('previous-length')) { + /** + * In case the new height is less than original height, it + * means the textarea has less text than before + * So we set the height to the original one + */ + $textarea.css('height', $textarea.data('original-height')); + } + $textarea.data('previous-length', $textarea.val().length); } $(text_area_selector).each(function () { var $textarea = $(this); - if ($textarea.val().length) { - textareaAutoResize($textarea); - } + /** + * Instead of resizing textarea on document load, + * store the original height and the original length + */ + $textarea.data('original-height', $textarea.height()); + $textarea.data('previous-length', $textarea.val().length); }); - $('body').on('keyup keydown', text_area_selector, function () { + $('body').on('keyup keydown autoresize', text_area_selector, function () { textareaAutoResize($(this)); }); - // File Input Path - $('.file-field').each(function() { - var path_input = $(this).find('input.file-path'); - $(this).find('input[type="file"]').change(function () { - path_input.val($(this)[0].files[0].name); - path_input.trigger('change'); - }); + $(document).on('change', '.file-field input[type="file"]', function () { + var file_field = $(this).closest('.file-field'); + var path_input = file_field.find('input.file-path'); + var files = $(this)[0].files; + var file_names = []; + for (var i = 0; i < files.length; i++) { + file_names.push(files[i].name); + } + path_input.val(file_names.join(", ")); + path_input.trigger('change'); }); - - /**************** * Range Input * ****************/ @@ -2619,19 +4559,40 @@ $(document).ready(function(){ $(this).after(thumb); }); + var showRangeBubble = function (thumb) { + var paddingLeft = parseInt(thumb.parent().css('padding-left')); + var marginLeft = -7 + paddingLeft + 'px'; + thumb.velocity({ height: "30px", width: "30px", top: "-30px", marginLeft: marginLeft }, { duration: 300, easing: 'easeOutExpo' }); + }; + + var calcRangeOffset = function (range) { + var width = range.width() - 15; + var max = parseFloat(range.attr('max')); + var min = parseFloat(range.attr('min')); + var percent = (parseFloat(range.val()) - min) / (max - min); + return percent * width; + }; + var range_wrapper = '.range-field'; - $(document).on('change', range_type, function(e) { + $(document).on('change', range_type, function (e) { var thumb = $(this).siblings('.thumb'); thumb.find('.value').html($(this).val()); + + if (!thumb.hasClass('active')) { + showRangeBubble(thumb); + } + + var offsetLeft = calcRangeOffset($(this)); + thumb.addClass('active').css('left', offsetLeft); }); - $(document).on('mousedown touchstart', range_type, function(e) { + $(document).on('mousedown touchstart', range_type, function (e) { var thumb = $(this).siblings('.thumb'); // If thumb indicator does not exist yet, create it if (thumb.length <= 0) { thumb = $(''); - $(this).append(thumb); + $(this).after(thumb); } // Set indicator value @@ -2641,156 +4602,356 @@ $(document).ready(function(){ $(this).addClass('active'); if (!thumb.hasClass('active')) { - thumb.velocity({ height: "30px", width: "30px", top: "-20px", marginLeft: "-15px"}, { duration: 300, easing: 'easeOutExpo' }); + showRangeBubble(thumb); } - if(e.pageX === undefined || e.pageX === null){//mobile - left = e.originalEvent.touches[0].pageX - $(this).offset().left; - } - else{ // desktop - left = e.pageX - $(this).offset().left; + if (e.type !== 'input') { + var offsetLeft = calcRangeOffset($(this)); + thumb.addClass('active').css('left', offsetLeft); } - var width = $(this).outerWidth(); + }); + + $(document).on('mouseup touchend', range_wrapper, function () { + range_mousedown = false; + $(this).removeClass('active'); + }); + + $(document).on('input mousemove touchmove', range_wrapper, function (e) { + var thumb = $(this).children('.thumb'); + var left; + var input = $(this).find(range_type); + + if (range_mousedown) { + if (!thumb.hasClass('active')) { + showRangeBubble(thumb); + } - if (left < 0) { - left = 0; + var offsetLeft = calcRangeOffset(input); + thumb.addClass('active').css('left', offsetLeft); + thumb.find('.value').html(thumb.siblings(range_type).val()); } - else if (left > width) { - left = width; + }); + + $(document).on('mouseout touchleave', range_wrapper, function () { + if (!range_mousedown) { + + var thumb = $(this).children('.thumb'); + var paddingLeft = parseInt($(this).css('padding-left')); + var marginLeft = 7 + paddingLeft + 'px'; + + if (thumb.hasClass('active')) { + thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: marginLeft }, { duration: 100 }); + } + thumb.removeClass('active'); } - thumb.addClass('active').css('left', left); - thumb.find('.value').html($(this).val()); + }); + + /************************** + * Auto complete plugin * + *************************/ + $.fn.autocomplete = function (options) { + // Defaults + var defaults = { + data: {}, + limit: Infinity, + onAutocomplete: null, + minLength: 1 + }; + + options = $.extend(defaults, options); + + return this.each(function () { + var $input = $(this); + var data = options.data, + count = 0, + activeIndex = -1, + oldVal, + $inputDiv = $input.closest('.input-field'); // Div to append on + + // Check if data isn't empty + if (!$.isEmptyObject(data)) { + var $autocomplete = $(''); + var $oldAutocomplete; + + // Append autocomplete element. + // Prevent double structure init. + if ($inputDiv.length) { + $oldAutocomplete = $inputDiv.children('.autocomplete-content.dropdown-content').first(); + if (!$oldAutocomplete.length) { + $inputDiv.append($autocomplete); // Set ul in body + } + } else { + $oldAutocomplete = $input.next('.autocomplete-content.dropdown-content'); + if (!$oldAutocomplete.length) { + $input.after($autocomplete); + } + } + if ($oldAutocomplete.length) { + $autocomplete = $oldAutocomplete; + } + + // Highlight partial match. + var highlight = function (string, $el) { + var img = $el.find('img'); + var matchStart = $el.text().toLowerCase().indexOf("" + string.toLowerCase() + ""), + matchEnd = matchStart + string.length - 1, + beforeMatch = $el.text().slice(0, matchStart), + matchText = $el.text().slice(matchStart, matchEnd + 1), + afterMatch = $el.text().slice(matchEnd + 1); + $el.html("" + beforeMatch + "" + matchText + "" + afterMatch + ""); + if (img.length) { + $el.prepend(img); + } + }; + + // Reset current element position + var resetCurrentElement = function () { + activeIndex = -1; + $autocomplete.find('.active').removeClass('active'); + }; + + // Remove autocomplete elements + var removeAutocomplete = function () { + $autocomplete.empty(); + resetCurrentElement(); + oldVal = undefined; + }; + + $input.off('blur.autocomplete').on('blur.autocomplete', function () { + removeAutocomplete(); + }); + + // Perform search + $input.off('keyup.autocomplete focus.autocomplete').on('keyup.autocomplete focus.autocomplete', function (e) { + // Reset count. + count = 0; + var val = $input.val().toLowerCase(); + + // Don't capture enter or arrow key usage. + if (e.which === 13 || e.which === 38 || e.which === 40) { + return; + } + + // Check if the input isn't empty + if (oldVal !== val) { + removeAutocomplete(); + + if (val.length >= options.minLength) { + for (var key in data) { + if (data.hasOwnProperty(key) && key.toLowerCase().indexOf(val) !== -1) { + // Break if past limit + if (count >= options.limit) { + break; + } + + var autocompleteOption = $('
    • '); + if (!!data[key]) { + autocompleteOption.append('' + key + ''); + } else { + autocompleteOption.append('' + key + ''); + } + $autocomplete.append(autocompleteOption); + highlight(val, autocompleteOption); + count++; + } + } + } + } - }); + // Update oldVal + oldVal = val; + }); - $(document).on('mouseup touchend', range_wrapper, function() { - range_mousedown = false; - $(this).removeClass('active'); - }); + $input.off('keydown.autocomplete').on('keydown.autocomplete', function (e) { + // Arrow keys and enter key usage + var keyCode = e.which, + liElement, + numItems = $autocomplete.children('li').length, + $active = $autocomplete.children('.active').first(); + + // select element on Enter + if (keyCode === 13 && activeIndex >= 0) { + liElement = $autocomplete.children('li').eq(activeIndex); + if (liElement.length) { + liElement.trigger('mousedown.autocomplete'); + e.preventDefault(); + } + return; + } - $(document).on('mousemove touchmove', range_wrapper, function(e) { - var thumb = $(this).children('.thumb'); - var left; - if (range_mousedown) { - if (!thumb.hasClass('active')) { - thumb.velocity({ height: '30px', width: '30px', top: '-20px', marginLeft: '-15px'}, { duration: 300, easing: 'easeOutExpo' }); - } - if (e.pageX === undefined || e.pageX === null) { //mobile - left = e.originalEvent.touches[0].pageX - $(this).offset().left; - } - else{ // desktop - left = e.pageX - $(this).offset().left; - } - var width = $(this).outerWidth(); + // Capture up and down key + if (keyCode === 38 || keyCode === 40) { + e.preventDefault(); - if (left < 0) { - left = 0; - } - else if (left > width) { - left = width; - } - thumb.addClass('active').css('left', left); + if (keyCode === 38 && activeIndex > 0) { + activeIndex--; + } - } + if (keyCode === 40 && activeIndex < numItems - 1) { + activeIndex++; + } - }); + $active.removeClass('active'); + if (activeIndex >= 0) { + $autocomplete.children('li').eq(activeIndex).addClass('active'); + } + } + }); - $(document).on('mouseout touchleave', range_wrapper, function() { - if (!range_mousedown) { + // Set input value + $autocomplete.off('mousedown.autocomplete touchstart.autocomplete').on('mousedown.autocomplete touchstart.autocomplete', 'li', function () { + var text = $(this).text().trim(); + $input.val(text); + $input.trigger('change'); + removeAutocomplete(); - var thumb = $(this).children('.thumb'); + // Handle onAutocomplete callback. + if (typeof options.onAutocomplete === "function") { + options.onAutocomplete.call(this, text); + } + }); - if (thumb.hasClass('active')) { - thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: '-6px'}, { duration: 100 }); + // Empty data + } else { + $input.off('keyup.autocomplete focus.autocomplete'); } - thumb.removeClass('active'); - } - }); - + }); + }; }); // End of $(document).ready - - - - // Select Plugin + /******************* + * Select Plugin * + ******************/ $.fn.material_select = function (callback) { - $(this).each(function(){ - $select = $(this); + $(this).each(function () { + var $select = $(this); - if ( $select.hasClass('browser-default')) { + if ($select.hasClass('browser-default')) { return; // Continue to next (return false breaks out of entire loop) } - // Tear down structure if Select needs to be rebuilt - var lastID = $select.data('select-id'); + var multiple = $select.attr('multiple') ? true : false, + lastID = $select.attr('data-select-id'); // Tear down structure if Select needs to be rebuilt + if (lastID) { - $select.parent().find('i').remove(); + $select.parent().find('span.caret').remove(); $select.parent().find('input').remove(); $select.unwrap(); - $('ul#select-options-'+lastID).remove(); + $('ul#select-options-' + lastID).remove(); } // If destroying the select, remove the selelct-id and reset it to it's uninitialized state. - if(callback === 'destroy') { - $select.data('select-id', null).removeClass('initialized'); - return; + if (callback === 'destroy') { + $select.removeAttr('data-select-id').removeClass('initialized'); + $(window).off('click.select'); + return; } var uniqueID = Materialize.guid(); - $select.data('select-id', uniqueID); + $select.attr('data-select-id', uniqueID); var wrapper = $('
      '); wrapper.addClass($select.attr('class')); - var options = $(''); - var selectOptions = $select.children('option'); + if ($select.is(':disabled')) wrapper.addClass('disabled'); + var options = $(''), + selectChildren = $select.children('option, optgroup'), + valuesSelected = [], + optionsHover = false; - var label; - if ($select.find('option:selected') !== undefined) { - label = $select.find('option:selected'); - } - else { - label = options.first(); - } + var label = $select.find('option:selected').html() || $select.find('option:first').html() || ""; - - // Create Dropdown structure - selectOptions.each(function () { + // Function that renders and appends the option taking into + // account type and possible image icon. + var appendOptionWithIcon = function (select, option, type) { // Add disabled attr if disabled - options.append($('
    • ' + $(this).html() + '
    • ')); - }); + var disabledClass = option.is(':disabled') ? 'disabled ' : ''; + var optgroupClass = type === 'optgroup-option' ? 'optgroup-option ' : ''; + var multipleCheckbox = multiple ? '' : ''; + + // add icons + var icon_url = option.data('icon'); + var classes = option.attr('class'); + if (!!icon_url) { + var classString = ''; + if (!!classes) classString = ' class="' + classes + '"'; + + // Check for multiple type. + options.append($('
    • ' + multipleCheckbox + option.html() + '
    • ')); + return true; + } + + // Check for multiple type. + options.append($('
    • ' + multipleCheckbox + option.html() + '
    • ')); + }; + + /* Create dropdown structure. */ + if (selectChildren.length) { + selectChildren.each(function () { + if ($(this).is('option')) { + // Direct descendant option. + if (multiple) { + appendOptionWithIcon($select, $(this), 'multiple'); + } else { + appendOptionWithIcon($select, $(this)); + } + } else if ($(this).is('optgroup')) { + // Optgroup. + var selectOptions = $(this).children('option'); + options.append($('
    • ' + $(this).attr('label') + '
    • ')); + selectOptions.each(function () { + appendOptionWithIcon($select, $(this), 'optgroup-option'); + }); + } + }); + } - options.find('li').each(function (i) { - var $curr_select = $select; - $(this).click(function () { + options.find('li:not(.optgroup)').each(function (i) { + $(this).click(function (e) { // Check if option element is disabled - if (!$(this).hasClass('disabled')) { - $curr_select.find('option').eq(i).prop('selected', true); + if (!$(this).hasClass('disabled') && !$(this).hasClass('optgroup')) { + var selected = true; + + if (multiple) { + $('input[type="checkbox"]', this).prop('checked', function (i, v) { + return !v; + }); + selected = toggleEntryFromArray(valuesSelected, i, $select); + $newSelect.trigger('focus'); + } else { + options.find('li').removeClass('active'); + $(this).toggleClass('active'); + $newSelect.val($(this).text()); + } + + activateOption(options, $(this)); + $select.find('option').eq(i).prop('selected', selected); // Trigger onchange() event - $curr_select.trigger('change'); - $curr_select.siblings('input.select-dropdown').val($(this).text()); + $select.trigger('change'); if (typeof callback !== 'undefined') callback(); } - }); + e.stopPropagation(); + }); }); // Wrap Elements $select.wrap(wrapper); // Add Select Display Element var dropdownIcon = $(''); - if ( $select.is(':disabled') ) - dropdownIcon.addClass('disabled'); - var $newSelect = $(''); + // escape double quotes + var sanitizedLabelHtml = label.replace(/"/g, '"'); + + var $newSelect = $(''); $select.before($newSelect); $newSelect.before(dropdownIcon); - $('body').append(options); + $newSelect.after(options); // Check if section element is disabled if (!$select.is(':disabled')) { - $newSelect.dropdown({"hover": false}); + $newSelect.dropdown({ 'hover': false }); } // Copy tabindex @@ -2800,111 +4961,197 @@ $(document).ready(function(){ $select.addClass('initialized'); - $newSelect.on('focus', function(){ - $(this).trigger('open'); - label = $(this).val(); - selectedOption = options.find('li').filter(function() { - return $(this).text().toLowerCase() === label.toLowerCase(); - })[0]; - activateOption(options, selectedOption); + $newSelect.on({ + 'focus': function () { + if ($('ul.select-dropdown').not(options[0]).is(':visible')) { + $('input.select-dropdown').trigger('close'); + $(window).off('click.select'); + } + if (!options.is(':visible')) { + $(this).trigger('open', ['focus']); + var label = $(this).val(); + if (multiple && label.indexOf(',') >= 0) { + label = label.split(',')[0]; + } + + var selectedOption = options.find('li').filter(function () { + return $(this).text().toLowerCase() === label.toLowerCase(); + })[0]; + activateOption(options, selectedOption, true); + + $(window).off('click.select').on('click.select', function () { + multiple && (optionsHover || $newSelect.trigger('close')); + $(window).off('click.select'); + }); + } + }, + 'click': function (e) { + e.stopPropagation(); + } }); - $newSelect.on('blur', function(){ - $(this).trigger('close'); + $newSelect.on('blur', function () { + if (!multiple) { + $(this).trigger('close'); + $(window).off('click.select'); + } + options.find('li.selected').removeClass('selected'); + }); + + options.hover(function () { + optionsHover = true; + }, function () { + optionsHover = false; }); - // Make option as selected and scroll to selected position - activateOption = function(collection, newOption) { - collection.find('li.active').removeClass('active'); - $(newOption).addClass('active'); - collection.scrollTo(newOption); + // Add initial multiple selections. + if (multiple) { + $select.find("option:selected:not(:disabled)").each(function () { + var index = this.index; + + toggleEntryFromArray(valuesSelected, index, $select); + options.find("li:not(.optgroup)").eq(index).find(":checkbox").prop("checked", true); + }); + } + + /** + * Make option as selected and scroll to selected position + * @param {jQuery} collection Select options jQuery element + * @param {Element} newOption element of the new option + * @param {Boolean} firstActivation If on first activation of select + */ + var activateOption = function (collection, newOption, firstActivation) { + if (newOption) { + collection.find('li.selected').removeClass('selected'); + var option = $(newOption); + option.addClass('selected'); + if (!multiple || !!firstActivation) { + options.scrollTo(option); + } + } }; // Allow user to search by typing // this array is cleared after 1 second - filterQuery = []; - - onKeyDown = function(event){ + var filterQuery = [], + onKeyDown = function (e) { // TAB - switch to another input - if(event.which == 9){ + if (e.which == 9) { $newSelect.trigger('close'); return; } // ARROW DOWN WHEN SELECT IS CLOSED - open select options - if(event.which == 40 && !options.is(":visible")){ + if (e.which == 40 && !options.is(':visible')) { $newSelect.trigger('open'); return; } // ENTER WHEN SELECT IS CLOSED - submit form - if(event.which == 13 && !options.is(":visible")){ + if (e.which == 13 && !options.is(':visible')) { return; } - event.preventDefault(); + e.preventDefault(); // CASE WHEN USER TYPE LETTERS - letter = String.fromCharCode(event.which).toLowerCase(); - var nonLetters = [9,13,27,38,40]; - if (letter && (nonLetters.indexOf(event.which) === -1)){ + var letter = String.fromCharCode(e.which).toLowerCase(), + nonLetters = [9, 13, 27, 38, 40]; + if (letter && nonLetters.indexOf(e.which) === -1) { filterQuery.push(letter); - string = filterQuery.join(""); - - newOption = options.find('li').filter(function() { + var string = filterQuery.join(''), + newOption = options.find('li').filter(function () { return $(this).text().toLowerCase().indexOf(string) === 0; })[0]; - if(newOption){ + if (newOption) { activateOption(options, newOption); } } // ENTER - select option and close when select options are opened - if(event.which == 13){ - activeOption = options.find('li.active:not(.disabled)')[0]; - if(activeOption){ + if (e.which == 13) { + var activeOption = options.find('li.selected:not(.disabled)')[0]; + if (activeOption) { $(activeOption).trigger('click'); - $newSelect.trigger('close'); + if (!multiple) { + $newSelect.trigger('close'); + } } } // ARROW DOWN - move to next not disabled option - if(event.which == 40){ - newOption = options.find('li.active').next('li:not(.disabled)')[0]; - if(newOption){ - activateOption(options, newOption); + if (e.which == 40) { + if (options.find('li.selected').length) { + newOption = options.find('li.selected').next('li:not(.disabled)')[0]; + } else { + newOption = options.find('li:not(.disabled)')[0]; } + activateOption(options, newOption); } // ESC - close options - if(event.which == 27){ + if (e.which == 27) { $newSelect.trigger('close'); } // ARROW UP - move to previous not disabled option - if(event.which == 38){ - newOption = options.find('li.active').prev('li:not(.disabled)')[0]; - if(newOption){ - activateOption(options, newOption); - } + if (e.which == 38) { + newOption = options.find('li.selected').prev('li:not(.disabled)')[0]; + if (newOption) activateOption(options, newOption); } // Automaticaly clean filter query so user can search again by starting letters - setTimeout(function(){ filterQuery = []; }, 1000); + setTimeout(function () { + filterQuery = []; + }, 1000); }; $newSelect.on('keydown', onKeyDown); }); - }; -}( jQuery )); + function toggleEntryFromArray(entriesArray, entryIndex, select) { + var index = entriesArray.indexOf(entryIndex), + notAdded = index === -1; + + if (notAdded) { + entriesArray.push(entryIndex); + } else { + entriesArray.splice(index, 1); + } + + select.siblings('ul.dropdown-content').find('li:not(.optgroup)').eq(entryIndex).toggleClass('active'); + + // use notAdded instead of true (to detect if the option is selected or not) + select.find('option').eq(entryIndex).prop('selected', notAdded); + setValueToInput(entriesArray, select); + + return notAdded; + } + + function setValueToInput(entriesArray, select) { + var value = ''; + + for (var i = 0, count = entriesArray.length; i < count; i++) { + var text = select.find('option').eq(entriesArray[i]).text(); + + i === 0 ? value += text : value += ', ' + text; + } + + if (value === '') { + value = select.find('option:disabled').eq(0).text(); + } + + select.siblings('input.select-dropdown').val(value); + } + }; +})(jQuery); ;(function ($) { var methods = { - init : function(options) { + init: function (options) { var defaults = { indicators: true, height: 400, @@ -2913,34 +5160,34 @@ $(document).ready(function(){ }; options = $.extend(defaults, options); - return this.each(function() { + return this.each(function () { // For each slider, we want to keep track of // which slide is active and its associated content var $this = $(this); var $slider = $this.find('ul.slides').first(); - var $slides = $slider.find('li'); + var $slides = $slider.find('> li'); var $active_index = $slider.find('.active').index(); - var $active; - if ($active_index != -1) { $active = $slides.eq($active_index); } + var $active, $indicators, $interval; + if ($active_index != -1) { + $active = $slides.eq($active_index); + } // Transitions the caption depending on alignment function captionTransition(caption, duration) { if (caption.hasClass("center-align")) { - caption.velocity({opacity: 0, translateY: -100}, {duration: duration, queue: false}); - } - else if (caption.hasClass("right-align")) { - caption.velocity({opacity: 0, translateX: 100}, {duration: duration, queue: false}); - } - else if (caption.hasClass("left-align")) { - caption.velocity({opacity: 0, translateX: -100}, {duration: duration, queue: false}); + caption.velocity({ opacity: 0, translateY: -100 }, { duration: duration, queue: false }); + } else if (caption.hasClass("right-align")) { + caption.velocity({ opacity: 0, translateX: 100 }, { duration: duration, queue: false }); + } else if (caption.hasClass("left-align")) { + caption.velocity({ opacity: 0, translateX: -100 }, { duration: duration, queue: false }); } } // This function will transition the slide to any index of the next slide function moveToSlide(index) { - if (index >= $slides.length) index = 0; - else if (index < 0) index = $slides.length -1; + // Wrap around indices. + if (index >= $slides.length) index = 0;else if (index < 0) index = $slides.length - 1; $active_index = $slider.find('.active').index(); @@ -2950,23 +5197,21 @@ $(document).ready(function(){ $caption = $active.find('.caption'); $active.removeClass('active'); - $active.velocity({opacity: 0}, {duration: options.transition, queue: false, easing: 'easeOutQuad', - complete: function() { - $slides.not('.active').velocity({opacity: 0, translateX: 0, translateY: 0}, {duration: 0, queue: false}); - } }); + $active.velocity({ opacity: 0 }, { duration: options.transition, queue: false, easing: 'easeOutQuad', + complete: function () { + $slides.not('.active').velocity({ opacity: 0, translateX: 0, translateY: 0 }, { duration: 0, queue: false }); + } }); captionTransition($caption, options.transition); - // Update indicators if (options.indicators) { $indicators.eq($active_index).removeClass('active'); } - $slides.eq(index).velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'}); - $slides.eq(index).find('.caption').velocity({opacity: 1, translateX: 0, translateY: 0}, {duration: options.transition, delay: options.transition, queue: false, easing: 'easeOutQuad'}); + $slides.eq(index).velocity({ opacity: 1 }, { duration: options.transition, queue: false, easing: 'easeOutQuad' }); + $slides.eq(index).find('.caption').velocity({ opacity: 1, translateX: 0, translateY: 0 }, { duration: options.transition, delay: options.transition, queue: false, easing: 'easeOutQuad' }); $slides.eq(index).addClass('active'); - // Update indicators if (options.indicators) { $indicators.eq(index).addClass('active'); @@ -2980,14 +5225,12 @@ $(document).ready(function(){ if (options.indicators) { // Add height if indicators are present $this.height(options.height + 40); - } - else { + } else { $this.height(options.height); } $slider.height(options.height); } - // Set initial positions of captions $slides.find('.caption').each(function () { captionTransition($(this), 0); @@ -2995,14 +5238,17 @@ $(document).ready(function(){ // Move img src into background-image $slides.find('img').each(function () { - $(this).css('background-image', 'url(' + $(this).attr('src') + ')' ); - $(this).attr('src', 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='); + var placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; + if ($(this).attr('src') !== placeholderBase64) { + $(this).css('background-image', 'url("' + $(this).attr('src') + '")'); + $(this).attr('src', placeholderBase64); + } }); // dynamically add indicators if (options.indicators) { - var $indicators = $('
        '); - $slides.each(function( index ) { + $indicators = $('
          '); + $slides.each(function (index) { var $indicator = $('
        • '); // Handle clicks on indicators @@ -3013,16 +5259,13 @@ $(document).ready(function(){ // reset interval clearInterval($interval); - $interval = setInterval( - function(){ - $active_index = $slider.find('.active').index(); - if ($slides.length == $active_index + 1) $active_index = 0; // loop to start - else $active_index += 1; - - moveToSlide($active_index); + $interval = setInterval(function () { + $active_index = $slider.find('.active').index(); + if ($slides.length == $active_index + 1) $active_index = 0; // loop to start + else $active_index += 1; - }, options.transition + options.interval - ); + moveToSlide($active_index); + }, options.transition + options.interval); }); $indicators.append($indicator); }); @@ -3032,9 +5275,8 @@ $(document).ready(function(){ if ($active) { $active.show(); - } - else { - $slides.first().addClass('active').velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'}); + } else { + $slides.first().addClass('active').velocity({ opacity: 1 }, { duration: options.transition, queue: false, easing: 'easeOutQuad' }); $active_index = 0; $active = $slides.eq($active_index); @@ -3046,19 +5288,15 @@ $(document).ready(function(){ } // Adjust height to current slide - $active.find('img').each(function() { - $active.find('.caption').velocity({opacity: 1, translateX: 0, translateY: 0}, {duration: options.transition, queue: false, easing: 'easeOutQuad'}); + $active.find('img').each(function () { + $active.find('.caption').velocity({ opacity: 1, translateX: 0, translateY: 0 }, { duration: options.transition, queue: false, easing: 'easeOutQuad' }); }); // auto scroll - $interval = setInterval( - function(){ - $active_index = $slider.find('.active').index(); - moveToSlide($active_index + 1); - - }, options.transition + options.interval - ); - + $interval = setInterval(function () { + $active_index = $slider.find('.active').index(); + moveToSlide($active_index + 1); + }, options.transition + options.interval); // HammerJS, Swipe navigation @@ -3068,8 +5306,8 @@ $(document).ready(function(){ var swipeRight = false; $this.hammer({ - prevent_default: false - }).bind('pan', function(e) { + prevent_default: false + }).on('pan', function (e) { if (e.gesture.pointerType === "touch") { // reset interval @@ -3078,19 +5316,22 @@ $(document).ready(function(){ var direction = e.gesture.direction; var x = e.gesture.deltaX; var velocityX = e.gesture.velocityX; + var velocityY = e.gesture.velocityY; $curr_slide = $slider.find('.active'); - $curr_slide.velocity({ translateX: x - }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + if (Math.abs(velocityX) > Math.abs(velocityY)) { + $curr_slide.velocity({ translateX: x + }, { duration: 50, queue: false, easing: 'easeOutQuad' }); + } // Swipe Left - if (direction === 4 && (x > ($this.innerWidth() / 2) || velocityX < -0.65)) { + if (direction === 4 && (x > $this.innerWidth() / 2 || velocityX < -0.65)) { swipeRight = true; } // Swipe Right - else if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.65)) { - swipeLeft = true; - } + else if (direction === 2 && (x < -1 * $this.innerWidth() / 2 || velocityX > 0.65)) { + swipeLeft = true; + } // Make Slide Behind active slide visible var next_slide; @@ -3100,7 +5341,7 @@ $(document).ready(function(){ next_slide = $slides.first(); } next_slide.velocity({ opacity: 1 - }, {duration: 300, queue: false, easing: 'easeOutQuad'}); + }, { duration: 300, queue: false, easing: 'easeOutQuad' }); } if (swipeRight) { next_slide = $curr_slide.prev(); @@ -3108,295 +5349,821 @@ $(document).ready(function(){ next_slide = $slides.last(); } next_slide.velocity({ opacity: 1 - }, {duration: 300, queue: false, easing: 'easeOutQuad'}); + }, { duration: 300, queue: false, easing: 'easeOutQuad' }); } - - } - - }).bind('panend', function(e) { + }).on('panend', function (e) { if (e.gesture.pointerType === "touch") { $curr_slide = $slider.find('.active'); panning = false; curr_index = $slider.find('.active').index(); - if (!swipeRight && !swipeLeft) { + if (!swipeRight && !swipeLeft || $slides.length <= 1) { // Return to original spot $curr_slide.velocity({ translateX: 0 - }, {duration: 300, queue: false, easing: 'easeOutQuad'}); - } - else if (swipeLeft) { + }, { duration: 300, queue: false, easing: 'easeOutQuad' }); + } else if (swipeLeft) { moveToSlide(curr_index + 1); - $curr_slide.velocity({translateX: -1 * $this.innerWidth() }, {duration: 300, queue: false, easing: 'easeOutQuad', - complete: function() { - $curr_slide.velocity({opacity: 0, translateX: 0}, {duration: 0, queue: false}); - } }); - } - else if (swipeRight) { + $curr_slide.velocity({ translateX: -1 * $this.innerWidth() }, { duration: 300, queue: false, easing: 'easeOutQuad', + complete: function () { + $curr_slide.velocity({ opacity: 0, translateX: 0 }, { duration: 0, queue: false }); + } }); + } else if (swipeRight) { moveToSlide(curr_index - 1); - $curr_slide.velocity({translateX: $this.innerWidth() }, {duration: 300, queue: false, easing: 'easeOutQuad', - complete: function() { - $curr_slide.velocity({opacity: 0, translateX: 0}, {duration: 0, queue: false}); - } }); + $curr_slide.velocity({ translateX: $this.innerWidth() }, { duration: 300, queue: false, easing: 'easeOutQuad', + complete: function () { + $curr_slide.velocity({ opacity: 0, translateX: 0 }, { duration: 0, queue: false }); + } }); } swipeLeft = false; swipeRight = false; // Restart interval clearInterval($interval); - $interval = setInterval( - function(){ - $active_index = $slider.find('.active').index(); - if ($slides.length == $active_index + 1) $active_index = 0; // loop to start - else $active_index += 1; - - moveToSlide($active_index); + $interval = setInterval(function () { + $active_index = $slider.find('.active').index(); + if ($slides.length == $active_index + 1) $active_index = 0; // loop to start + else $active_index += 1; - }, options.transition + options.interval - ); + moveToSlide($active_index); + }, options.transition + options.interval); } }); - $this.on('sliderPause', function() { + $this.on('sliderPause', function () { clearInterval($interval); }); - $this.on('sliderStart', function() { + $this.on('sliderStart', function () { clearInterval($interval); - $interval = setInterval( - function(){ - $active_index = $slider.find('.active').index(); - if ($slides.length == $active_index + 1) $active_index = 0; // loop to start - else $active_index += 1; + $interval = setInterval(function () { + $active_index = $slider.find('.active').index(); + if ($slides.length == $active_index + 1) $active_index = 0; // loop to start + else $active_index += 1; + + moveToSlide($active_index); + }, options.transition + options.interval); + }); + + $this.on('sliderNext', function () { + $active_index = $slider.find('.active').index(); + moveToSlide($active_index + 1); + }); + + $this.on('sliderPrev', function () { + $active_index = $slider.find('.active').index(); + moveToSlide($active_index - 1); + }); + }); + }, + pause: function () { + $(this).trigger('sliderPause'); + }, + start: function () { + $(this).trigger('sliderStart'); + }, + next: function () { + $(this).trigger('sliderNext'); + }, + prev: function () { + $(this).trigger('sliderPrev'); + } + }; + + $.fn.slider = function (methodOrOptions) { + if (methods[methodOrOptions]) { + return methods[methodOrOptions].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if (typeof methodOrOptions === 'object' || !methodOrOptions) { + // Default to "init" + return methods.init.apply(this, arguments); + } else { + $.error('Method ' + methodOrOptions + ' does not exist on jQuery.tooltip'); + } + }; // Plugin end +})(jQuery); +;(function ($) { + $(document).ready(function () { + + $(document).on('click.card', '.card', function (e) { + if ($(this).find('> .card-reveal').length) { + var $card = $(e.target).closest('.card'); + if ($card.data('initialOverflow') === undefined) { + $card.data('initialOverflow', $card.css('overflow') === undefined ? '' : $card.css('overflow')); + } + if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) { + // Make Reveal animate down and display none + $(this).find('.card-reveal').velocity({ translateY: 0 }, { + duration: 225, + queue: false, + easing: 'easeInOutQuad', + complete: function () { + $(this).css({ display: 'none' }); + $card.css('overflow', $card.data('initialOverflow')); + } + }); + } else if ($(e.target).is($('.card .activator')) || $(e.target).is($('.card .activator i'))) { + $card.css('overflow', 'hidden'); + $(this).find('.card-reveal').css({ display: 'block' }).velocity("stop", false).velocity({ translateY: '-100%' }, { duration: 300, queue: false, easing: 'easeInOutQuad' }); + } + } + }); + }); +})(jQuery); +;(function ($) { + var materialChipsDefaults = { + data: [], + placeholder: '', + secondaryPlaceholder: '', + autocompleteOptions: {} + }; + + $(document).ready(function () { + // Handle removal of static chips. + $(document).on('click', '.chip .close', function (e) { + var $chips = $(this).closest('.chips'); + if ($chips.attr('data-initialized')) { + return; + } + $(this).closest('.chip').remove(); + }); + }); + + $.fn.material_chip = function (options) { + var self = this; + this.$el = $(this); + this.$document = $(document); + this.SELS = { + CHIPS: '.chips', + CHIP: '.chip', + INPUT: 'input', + DELETE: '.material-icons', + SELECTED_CHIP: '.selected' + }; + + if ('data' === options) { + return this.$el.data('chips'); + } + + var curr_options = $.extend({}, materialChipsDefaults, options); + self.hasAutocomplete = !$.isEmptyObject(curr_options.autocompleteOptions.data); + + // Initialize + this.init = function () { + var i = 0; + var chips; + self.$el.each(function () { + var $chips = $(this); + var chipId = Materialize.guid(); + self.chipId = chipId; + + if (!curr_options.data || !(curr_options.data instanceof Array)) { + curr_options.data = []; + } + $chips.data('chips', curr_options.data); + $chips.attr('data-index', i); + $chips.attr('data-initialized', true); + + if (!$chips.hasClass(self.SELS.CHIPS)) { + $chips.addClass('chips'); + } + + self.chips($chips, chipId); + i++; + }); + }; + + this.handleEvents = function () { + var SELS = self.SELS; + + self.$document.off('click.chips-focus', SELS.CHIPS).on('click.chips-focus', SELS.CHIPS, function (e) { + $(e.target).find(SELS.INPUT).focus(); + }); + + self.$document.off('click.chips-select', SELS.CHIP).on('click.chips-select', SELS.CHIP, function (e) { + var $chip = $(e.target); + if ($chip.length) { + var wasSelected = $chip.hasClass('selected'); + var $chips = $chip.closest(SELS.CHIPS); + $(SELS.CHIP).removeClass('selected'); + + if (!wasSelected) { + self.selectChip($chip.index(), $chips); + } + } + }); + + self.$document.off('keydown.chips').on('keydown.chips', function (e) { + if ($(e.target).is('input, textarea')) { + return; + } + + // delete + var $chip = self.$document.find(SELS.CHIP + SELS.SELECTED_CHIP); + var $chips = $chip.closest(SELS.CHIPS); + var length = $chip.siblings(SELS.CHIP).length; + var index; + + if (!$chip.length) { + return; + } + + if (e.which === 8 || e.which === 46) { + e.preventDefault(); + + index = $chip.index(); + self.deleteChip(index, $chips); + + var selectIndex = null; + if (index + 1 < length) { + selectIndex = index; + } else if (index === length || index + 1 === length) { + selectIndex = length - 1; + } + + if (selectIndex < 0) selectIndex = null; + + if (null !== selectIndex) { + self.selectChip(selectIndex, $chips); + } + if (!length) $chips.find('input').focus(); + + // left + } else if (e.which === 37) { + index = $chip.index() - 1; + if (index < 0) { + return; + } + $(SELS.CHIP).removeClass('selected'); + self.selectChip(index, $chips); + + // right + } else if (e.which === 39) { + index = $chip.index() + 1; + $(SELS.CHIP).removeClass('selected'); + if (index > length) { + $chips.find('input').focus(); + return; + } + self.selectChip(index, $chips); + } + }); + + self.$document.off('focusin.chips', SELS.CHIPS + ' ' + SELS.INPUT).on('focusin.chips', SELS.CHIPS + ' ' + SELS.INPUT, function (e) { + var $currChips = $(e.target).closest(SELS.CHIPS); + $currChips.addClass('focus'); + $currChips.siblings('label, .prefix').addClass('active'); + $(SELS.CHIP).removeClass('selected'); + }); + + self.$document.off('focusout.chips', SELS.CHIPS + ' ' + SELS.INPUT).on('focusout.chips', SELS.CHIPS + ' ' + SELS.INPUT, function (e) { + var $currChips = $(e.target).closest(SELS.CHIPS); + $currChips.removeClass('focus'); + + // Remove active if empty + if ($currChips.data('chips') === undefined || !$currChips.data('chips').length) { + $currChips.siblings('label').removeClass('active'); + } + $currChips.siblings('.prefix').removeClass('active'); + }); + + self.$document.off('keydown.chips-add', SELS.CHIPS + ' ' + SELS.INPUT).on('keydown.chips-add', SELS.CHIPS + ' ' + SELS.INPUT, function (e) { + var $target = $(e.target); + var $chips = $target.closest(SELS.CHIPS); + var chipsLength = $chips.children(SELS.CHIP).length; + + // enter + if (13 === e.which) { + // Override enter if autocompleting. + if (self.hasAutocomplete && $chips.find('.autocomplete-content.dropdown-content').length && $chips.find('.autocomplete-content.dropdown-content').children().length) { + return; + } + + e.preventDefault(); + self.addChip({ tag: $target.val() }, $chips); + $target.val(''); + return; + } - moveToSlide($active_index); + // delete or left + if ((8 === e.keyCode || 37 === e.keyCode) && '' === $target.val() && chipsLength) { + e.preventDefault(); + self.selectChip(chipsLength - 1, $chips); + $target.blur(); + return; + } + }); - }, options.transition + options.interval - ); - }); + // Click on delete icon in chip. + self.$document.off('click.chips-delete', SELS.CHIPS + ' ' + SELS.DELETE).on('click.chips-delete', SELS.CHIPS + ' ' + SELS.DELETE, function (e) { + var $target = $(e.target); + var $chips = $target.closest(SELS.CHIPS); + var $chip = $target.closest(SELS.CHIP); + e.stopPropagation(); + self.deleteChip($chip.index(), $chips); + $chips.find('input').focus(); + }); + }; + this.chips = function ($chips, chipId) { + $chips.empty(); + $chips.data('chips').forEach(function (elem) { + $chips.append(self.renderChip(elem)); }); + $chips.append($('')); + self.setPlaceholder($chips); + // Set for attribute for label + var label = $chips.next('label'); + if (label.length) { + label.attr('for', chipId); + if ($chips.data('chips') !== undefined && $chips.data('chips').length) { + label.addClass('active'); + } + } - }, - pause : function() { - $(this).trigger('sliderPause'); - }, - start : function() { - $(this).trigger('sliderStart'); - } - }; + // Setup autocomplete if needed. + var input = $('#' + chipId); + if (self.hasAutocomplete) { + curr_options.autocompleteOptions.onAutocomplete = function (val) { + self.addChip({ tag: val }, $chips); + input.val(''); + input.focus(); + }; + input.autocomplete(curr_options.autocompleteOptions); + } + }; + /** + * Render chip jQuery element. + * @param {Object} elem + * @return {jQuery} + */ + this.renderChip = function (elem) { + if (!elem.tag) return; - $.fn.slider = function(methodOrOptions) { - if ( methods[methodOrOptions] ) { - return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { - // Default to "init" - return methods.init.apply( this, arguments ); - } else { - $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' ); + var $renderedChip = $('
          '); + $renderedChip.text(elem.tag); + if (elem.image) { + $renderedChip.prepend($('').attr('src', elem.image)); } - }; // Plugin end -}( jQuery ));;(function ($) { - $(document).ready(function() { + $renderedChip.append($('close')); + return $renderedChip; + }; - $(document).on('click.card', '.card', function (e) { - if ($(this).find('.card-reveal').length) { - if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) { - // Make Reveal animate down and display none - $(this).find('.card-reveal').velocity( - {translateY: 0}, { - duration: 225, - queue: false, - easing: 'easeInOutQuad', - complete: function() { $(this).css({ display: 'none'}); } - } - ); - } - else if ($(e.target).is($('.card .activator')) || - $(e.target).is($('.card .activator i')) ) { - $(this).find('.card-reveal').css({ display: 'block'}).velocity("stop", false).velocity({translateY: '-100%'}, {duration: 300, queue: false, easing: 'easeInOutQuad'}); + this.setPlaceholder = function ($chips) { + if ($chips.data('chips') !== undefined && !$chips.data('chips').length && curr_options.placeholder) { + $chips.find('input').prop('placeholder', curr_options.placeholder); + } else if (($chips.data('chips') === undefined || !!$chips.data('chips').length) && curr_options.secondaryPlaceholder) { + $chips.find('input').prop('placeholder', curr_options.secondaryPlaceholder); + } + }; + + this.isValid = function ($chips, elem) { + var chips = $chips.data('chips'); + var exists = false; + for (var i = 0; i < chips.length; i++) { + if (chips[i].tag === elem.tag) { + exists = true; + return; } } + return '' !== elem.tag && !exists; + }; + + this.addChip = function (elem, $chips) { + if (!self.isValid($chips, elem)) { + return; + } + var $renderedChip = self.renderChip(elem); + var newData = []; + var oldData = $chips.data('chips'); + for (var i = 0; i < oldData.length; i++) { + newData.push(oldData[i]); + } + newData.push(elem); + $chips.data('chips', newData); + $renderedChip.insertBefore($chips.find('input')); + $chips.trigger('chip.add', elem); + self.setPlaceholder($chips); + }; - }); + this.deleteChip = function (chipIndex, $chips) { + var chip = $chips.data('chips')[chipIndex]; + $chips.find('.chip').eq(chipIndex).remove(); - }); -}( jQuery ));;(function ($) { - $(document).ready(function() { + var newData = []; + var oldData = $chips.data('chips'); + for (var i = 0; i < oldData.length; i++) { + if (i !== chipIndex) { + newData.push(oldData[i]); + } + } - $.fn.pushpin = function (options) { + $chips.data('chips', newData); + $chips.trigger('chip.delete', chip); + self.setPlaceholder($chips); + }; - var defaults = { - top: 0, - bottom: Infinity, - offset: 0 + this.selectChip = function (chipIndex, $chips) { + var $chip = $chips.find('.chip').eq(chipIndex); + if ($chip && false === $chip.hasClass('selected')) { + $chip.addClass('selected'); + $chips.trigger('chip.select', $chips.data('chips')[chipIndex]); } - options = $.extend(defaults, options); + }; - $index = 0; - return this.each(function() { - var $uniqueId = Materialize.guid(), - $this = $(this), - $original_offset = $(this).offset().top; - - function removePinClasses(object) { - object.removeClass('pin-top'); - object.removeClass('pinned'); - object.removeClass('pin-bottom'); - } - - function updateElements(objects, scrolled) { - objects.each(function () { - // Add position fixed (because its between top and bottom) - if (options.top <= scrolled && options.bottom >= scrolled && !$(this).hasClass('pinned')) { - removePinClasses($(this)); - $(this).css('top', options.offset); - $(this).addClass('pinned'); - } + this.getChipsElement = function (index, $chips) { + return $chips.eq(index); + }; - // Add pin-top (when scrolled position is above top) - if (scrolled < options.top && !$(this).hasClass('pin-top')) { - removePinClasses($(this)); - $(this).css('top', 0); - $(this).addClass('pin-top'); - } + // init + this.init(); - // Add pin-bottom (when scrolled position is below bottom) - if (scrolled > options.bottom && !$(this).hasClass('pin-bottom')) { - removePinClasses($(this)); - $(this).addClass('pin-bottom'); - $(this).css('top', options.bottom - $original_offset); - } - }); + this.handleEvents(); + }; +})(jQuery); +;(function ($) { + $.fn.pushpin = function (options) { + // Defaults + var defaults = { + top: 0, + bottom: Infinity, + offset: 0 + }; + + // Remove pushpin event and classes + if (options === "remove") { + this.each(function () { + if (id = $(this).data('pushpin-id')) { + $(window).off('scroll.' + id); + $(this).removeData('pushpin-id').removeClass('pin-top pinned pin-bottom').removeAttr('style'); } + }); + return false; + } - updateElements($this, $(window).scrollTop()); - $(window).on('scroll.' + $uniqueId, function () { - var $scrolled = $(window).scrollTop() + options.offset; - updateElements($this, $scrolled); - }); + options = $.extend(defaults, options); - }); + $index = 0; + return this.each(function () { + var $uniqueId = Materialize.guid(), + $this = $(this), + $original_offset = $(this).offset().top; - }; + function removePinClasses(object) { + object.removeClass('pin-top'); + object.removeClass('pinned'); + object.removeClass('pin-bottom'); + } + function updateElements(objects, scrolled) { + objects.each(function () { + // Add position fixed (because its between top and bottom) + if (options.top <= scrolled && options.bottom >= scrolled && !$(this).hasClass('pinned')) { + removePinClasses($(this)); + $(this).css('top', options.offset); + $(this).addClass('pinned'); + } - }); -}( jQuery ));;(function ($) { - $(document).ready(function() { + // Add pin-top (when scrolled position is above top) + if (scrolled < options.top && !$(this).hasClass('pin-top')) { + removePinClasses($(this)); + $(this).css('top', 0); + $(this).addClass('pin-top'); + } + + // Add pin-bottom (when scrolled position is below bottom) + if (scrolled > options.bottom && !$(this).hasClass('pin-bottom')) { + removePinClasses($(this)); + $(this).addClass('pin-bottom'); + $(this).css('top', options.bottom - $original_offset); + } + }); + } + + $(this).data('pushpin-id', $uniqueId); + updateElements($this, $(window).scrollTop()); + $(window).on('scroll.' + $uniqueId, function () { + var $scrolled = $(window).scrollTop() + options.offset; + updateElements($this, $scrolled); + }); + }); + }; +})(jQuery);;(function ($) { + $(document).ready(function () { // jQuery reverse $.fn.reverse = [].reverse; - $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn', function(e) { + // Hover behaviour: make sure this doesn't work on .click-to-toggle FABs! + $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle):not(.toolbar)', function (e) { var $this = $(this); openFABMenu($this); - }); - - $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn', function(e) { + $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle):not(.toolbar)', function (e) { var $this = $(this); closeFABMenu($this); }); + // Toggle-on-click behaviour. + $(document).on('click.fabClickToggle', '.fixed-action-btn.click-to-toggle > a', function (e) { + var $this = $(this); + var $menu = $this.parent(); + if ($menu.hasClass('active')) { + closeFABMenu($menu); + } else { + openFABMenu($menu); + } + }); + + // Toolbar transition behaviour. + $(document).on('click.fabToolbar', '.fixed-action-btn.toolbar > a', function (e) { + var $this = $(this); + var $menu = $this.parent(); + FABtoToolbar($menu); + }); }); $.fn.extend({ - openFAB: function() { - var $this = $(this); - openFABMenu($this); + openFAB: function () { + openFABMenu($(this)); }, - closeFAB: function() { - closeFABMenu($this); + closeFAB: function () { + closeFABMenu($(this)); + }, + openToolbar: function () { + FABtoToolbar($(this)); + }, + closeToolbar: function () { + toolbarToFAB($(this)); } }); - var openFABMenu = function (btn) { - $this = btn; + var $this = btn; if ($this.hasClass('active') === false) { + + // Get direction option + var horizontal = $this.hasClass('horizontal'); + var offsetY, offsetX; + + if (horizontal === true) { + offsetX = 40; + } else { + offsetY = 40; + } + $this.addClass('active'); - $this.find('ul .btn-floating').velocity( - { scaleY: ".4", scaleX: ".4", translateY: "40px"}, - { duration: 0 }); + $this.find('ul .btn-floating').velocity({ scaleY: ".4", scaleX: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px' }, { duration: 0 }); var time = 0; $this.find('ul .btn-floating').reverse().each(function () { - $(this).velocity( - { opacity: "1", scaleX: "1", scaleY: "1", translateY: "0"}, - { duration: 80, delay: time }); + $(this).velocity({ opacity: "1", scaleX: "1", scaleY: "1", translateY: "0", translateX: '0' }, { duration: 80, delay: time }); time += 40; }); } }; var closeFABMenu = function (btn) { - $this = btn; + var $this = btn; + // Get direction option + var horizontal = $this.hasClass('horizontal'); + var offsetY, offsetX; + + if (horizontal === true) { + offsetX = 40; + } else { + offsetY = 40; + } + $this.removeClass('active'); var time = 0; $this.find('ul .btn-floating').velocity("stop", true); - $this.find('ul .btn-floating').velocity( - { opacity: "0", scaleX: ".4", scaleY: ".4", translateY: "40px"}, - { duration: 80 } - ); + $this.find('ul .btn-floating').velocity({ opacity: "0", scaleX: ".4", scaleY: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px' }, { duration: 80 }); }; + /** + * Transform FAB into toolbar + * @param {Object} object jQuery object + */ + var FABtoToolbar = function (btn) { + if (btn.attr('data-open') === "true") { + return; + } -}( jQuery )); -;(function ($) { - // Image transition function - Materialize.fadeInImage = function(selector){ - var element = $(selector); - element.css({opacity: 0}); - $(element).velocity({opacity: 1}, { - duration: 650, - queue: false, - easing: 'easeOutSine' + var offsetX, offsetY, scaleFactor; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var btnRect = btn[0].getBoundingClientRect(); + var anchor = btn.find('> a').first(); + var menu = btn.find('> ul').first(); + var backdrop = $('
          '); + var fabColor = anchor.css('background-color'); + anchor.append(backdrop); + + offsetX = btnRect.left - windowWidth / 2 + btnRect.width / 2; + offsetY = windowHeight - btnRect.bottom; + scaleFactor = windowWidth / backdrop.width(); + btn.attr('data-origin-bottom', btnRect.bottom); + btn.attr('data-origin-left', btnRect.left); + btn.attr('data-origin-width', btnRect.width); + + // Set initial state + btn.addClass('active'); + btn.attr('data-open', true); + btn.css({ + 'text-align': 'center', + width: '100%', + bottom: 0, + left: 0, + transform: 'translateX(' + offsetX + 'px)', + transition: 'none' + }); + anchor.css({ + transform: 'translateY(' + -offsetY + 'px)', + transition: 'none' + }); + backdrop.css({ + 'background-color': fabColor + }); + + setTimeout(function () { + btn.css({ + transform: '', + transition: 'transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s' }); - $(element).velocity({opacity: 1}, { - duration: 1300, - queue: false, - easing: 'swing', - step: function(now, fx) { - fx.start = 100; - var grayscale_setting = now/100; - var brightness_setting = 150 - (100 - now)/1.75; - - if (brightness_setting < 100) { - brightness_setting = 100; - } - if (now >= 0) { - $(this).css({ - "-webkit-filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)", - "filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)" - }); - } + anchor.css({ + overflow: 'visible', + transform: '', + transition: 'transform .2s' + }); + + setTimeout(function () { + btn.css({ + overflow: 'hidden', + 'background-color': fabColor + }); + backdrop.css({ + transform: 'scale(' + scaleFactor + ')', + transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)' + }); + menu.find('> li > a').css({ + opacity: 1 + }); + + // Scroll to close. + $(window).on('scroll.fabToolbarClose', function () { + toolbarToFAB(btn); + $(window).off('scroll.fabToolbarClose'); + $(document).off('click.fabToolbarClose'); + }); + + $(document).on('click.fabToolbarClose', function (e) { + if (!$(e.target).closest(menu).length) { + toolbarToFAB(btn); + $(window).off('scroll.fabToolbarClose'); + $(document).off('click.fabToolbarClose'); } + }); + }, 100); + }, 0); + }; + + /** + * Transform toolbar back into FAB + * @param {Object} object jQuery object + */ + var toolbarToFAB = function (btn) { + if (btn.attr('data-open') !== "true") { + return; + } + + var offsetX, offsetY, scaleFactor; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var btnWidth = btn.attr('data-origin-width'); + var btnBottom = btn.attr('data-origin-bottom'); + var btnLeft = btn.attr('data-origin-left'); + var anchor = btn.find('> .btn-floating').first(); + var menu = btn.find('> ul').first(); + var backdrop = btn.find('.fab-backdrop'); + var fabColor = anchor.css('background-color'); + + offsetX = btnLeft - windowWidth / 2 + btnWidth / 2; + offsetY = windowHeight - btnBottom; + scaleFactor = windowWidth / backdrop.width(); + + // Hide backdrop + btn.removeClass('active'); + btn.attr('data-open', false); + btn.css({ + 'background-color': 'transparent', + transition: 'none' + }); + anchor.css({ + transition: 'none' + }); + backdrop.css({ + transform: 'scale(0)', + 'background-color': fabColor + }); + menu.find('> li > a').css({ + opacity: '' + }); + + setTimeout(function () { + backdrop.remove(); + + // Set initial state. + btn.css({ + 'text-align': '', + width: '', + bottom: '', + left: '', + overflow: '', + 'background-color': '', + transform: 'translate3d(' + -offsetX + 'px,0,0)' + }); + anchor.css({ + overflow: '', + transform: 'translate3d(0,' + offsetY + 'px,0)' }); + + setTimeout(function () { + btn.css({ + transform: 'translate3d(0,0,0)', + transition: 'transform .2s' + }); + anchor.css({ + transform: 'translate3d(0,0,0)', + transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)' + }); + }, 20); + }, 200); + }; +})(jQuery); +;(function ($) { + // Image transition function + Materialize.fadeInImage = function (selectorOrEl) { + var element; + if (typeof selectorOrEl === 'string') { + element = $(selectorOrEl); + } else if (typeof selectorOrEl === 'object') { + element = selectorOrEl; + } else { + return; + } + element.css({ opacity: 0 }); + $(element).velocity({ opacity: 1 }, { + duration: 650, + queue: false, + easing: 'easeOutSine' + }); + $(element).velocity({ opacity: 1 }, { + duration: 1300, + queue: false, + easing: 'swing', + step: function (now, fx) { + fx.start = 100; + var grayscale_setting = now / 100; + var brightness_setting = 150 - (100 - now) / 1.75; + + if (brightness_setting < 100) { + brightness_setting = 100; + } + if (now >= 0) { + $(this).css({ + "-webkit-filter": "grayscale(" + grayscale_setting + ")" + "brightness(" + brightness_setting + "%)", + "filter": "grayscale(" + grayscale_setting + ")" + "brightness(" + brightness_setting + "%)" + }); + } + } + }); }; // Horizontal staggered list - Materialize.showStaggeredList = function(selector) { + Materialize.showStaggeredList = function (selectorOrEl) { + var element; + if (typeof selectorOrEl === 'string') { + element = $(selectorOrEl); + } else if (typeof selectorOrEl === 'object') { + element = selectorOrEl; + } else { + return; + } var time = 0; - $(selector).find('li').velocity( - { translateX: "-100px"}, - { duration: 0 }); - - $(selector).find('li').each(function() { - $(this).velocity( - { opacity: "1", translateX: "0"}, - { duration: 800, delay: time, easing: [60, 10] }); + element.find('li').velocity({ translateX: "-100px" }, { duration: 0 }); + + element.find('li').each(function () { + $(this).velocity({ opacity: "1", translateX: "0" }, { duration: 800, delay: time, easing: [60, 10] }); time += 120; }); }; - - $(document).ready(function() { + $(document).ready(function () { // Hardcoded .staggered-list scrollFire // var staggeredListOptions = []; // $('ul.staggered-list').each(function (i) { @@ -3416,12 +6183,11 @@ $(document).ready(function(){ var swipeLeft = false; var swipeRight = false; - // Dismissible Collections - $('.dismissable').each(function() { + $('.dismissable').each(function () { $(this).hammer({ prevent_default: false - }).bind('pan', function(e) { + }).on('pan', function (e) { if (e.gesture.pointerType === "touch") { var $this = $(this); var direction = e.gesture.direction; @@ -3429,21 +6195,21 @@ $(document).ready(function(){ var velocityX = e.gesture.velocityX; $this.velocity({ translateX: x - }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + }, { duration: 50, queue: false, easing: 'easeOutQuad' }); // Swipe Left - if (direction === 4 && (x > ($this.innerWidth() / 2) || velocityX < -0.75)) { + if (direction === 4 && (x > $this.innerWidth() / 2 || velocityX < -0.75)) { swipeLeft = true; } // Swipe Right - if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.75)) { + if (direction === 2 && (x < -1 * $this.innerWidth() / 2 || velocityX > 0.75)) { swipeRight = true; } } - }).bind('panend', function(e) { + }).on('panend', function (e) { // Reset if collection is moved back into original position - if (Math.abs(e.gesture.deltaX) < ($(this).innerWidth() / 2)) { + if (Math.abs(e.gesture.deltaX) < $(this).innerWidth() / 2) { swipeRight = false; swipeLeft = false; } @@ -3452,32 +6218,32 @@ $(document).ready(function(){ var $this = $(this); if (swipeLeft || swipeRight) { var fullWidth; - if (swipeLeft) { fullWidth = $this.innerWidth(); } - else { fullWidth = -1 * $this.innerWidth(); } + if (swipeLeft) { + fullWidth = $this.innerWidth(); + } else { + fullWidth = -1 * $this.innerWidth(); + } - $this.velocity({ translateX: fullWidth, - }, {duration: 100, queue: false, easing: 'easeOutQuad', complete: - function() { + $this.velocity({ translateX: fullWidth + }, { duration: 100, queue: false, easing: 'easeOutQuad', complete: function () { $this.css('border', 'none'); - $this.velocity({ height: 0, padding: 0, - }, {duration: 200, queue: false, easing: 'easeOutQuad', complete: - function() { $this.remove(); } - }); + $this.velocity({ height: 0, padding: 0 + }, { duration: 200, queue: false, easing: 'easeOutQuad', complete: function () { + $this.remove(); + } + }); } }); - } - else { - $this.velocity({ translateX: 0, - }, {duration: 100, queue: false, easing: 'easeOutQuad'}); + } else { + $this.velocity({ translateX: 0 + }, { duration: 100, queue: false, easing: 'easeOutQuad' }); } swipeLeft = false; swipeRight = false; } }); - }); - // time = 0 // // Vertical Staggered list // $('ul.staggered-list.vertical li').velocity( @@ -3501,2659 +6267,3755 @@ $(document).ready(function(){ // { duration: 800, easing: [60, 10] }); // }); }); -}( jQuery )); -;(function($) { +})(jQuery); +;(function ($) { + + var scrollFireEventsHandled = false; + + // Input: Array of JSON objects {selector, offset, callback} + Materialize.scrollFire = function (options) { + var onScroll = function () { + var windowScroll = window.pageYOffset + window.innerHeight; + + for (var i = 0; i < options.length; i++) { + // Get options from each line + var value = options[i]; + var selector = value.selector, + offset = value.offset, + callback = value.callback; + + var currentElement = document.querySelector(selector); + if (currentElement !== null) { + var elementOffset = currentElement.getBoundingClientRect().top + window.pageYOffset; + + if (windowScroll > elementOffset + offset) { + if (value.done !== true) { + if (typeof callback === 'function') { + callback.call(this, currentElement); + } else if (typeof callback === 'string') { + var callbackFunc = new Function(callback); + callbackFunc(currentElement); + } + value.done = true; + } + } + } + } + }; + + var throttledScroll = Materialize.throttle(function () { + onScroll(); + }, options.throttle || 100); + + if (!scrollFireEventsHandled) { + window.addEventListener("scroll", throttledScroll); + window.addEventListener("resize", throttledScroll); + scrollFireEventsHandled = true; + } + + // perform a scan once, after current execution context, and after dom is ready + setTimeout(throttledScroll, 0); + }; +})(jQuery); +; /*! + * pickadate.js v3.5.0, 2014/04/13 + * By Amsul, http://amsul.ca + * Hosted on http://amsul.github.io/pickadate.js + * Licensed under MIT + */ + +(function (factory) { + + Materialize.Picker = factory(jQuery); +})(function ($) { + + var $window = $(window); + var $document = $(document); + var $html = $(document.documentElement); + + /** + * The picker constructor that creates a blank picker. + */ + function PickerConstructor(ELEMENT, NAME, COMPONENT, OPTIONS) { + + // If there’s no element, return the picker constructor. + if (!ELEMENT) return PickerConstructor; + + var IS_DEFAULT_THEME = false, + + + // The state of the picker. + STATE = { + id: ELEMENT.id || 'P' + Math.abs(~~(Math.random() * new Date())) + }, + + + // Merge the defaults and options passed. + SETTINGS = COMPONENT ? $.extend(true, {}, COMPONENT.defaults, OPTIONS) : OPTIONS || {}, + + + // Merge the default classes with the settings classes. + CLASSES = $.extend({}, PickerConstructor.klasses(), SETTINGS.klass), + + + // The element node wrapper into a jQuery object. + $ELEMENT = $(ELEMENT), + + + // Pseudo picker constructor. + PickerInstance = function () { + return this.start(); + }, + + + // The picker prototype. + P = PickerInstance.prototype = { + + constructor: PickerInstance, + + $node: $ELEMENT, + + /** + * Initialize everything + */ + start: function () { + + // If it’s already started, do nothing. + if (STATE && STATE.start) return P; + + // Update the picker states. + STATE.methods = {}; + STATE.start = true; + STATE.open = false; + STATE.type = ELEMENT.type; + + // Confirm focus state, convert into text input to remove UA stylings, + // and set as readonly to prevent keyboard popup. + ELEMENT.autofocus = ELEMENT == getActiveElement(); + ELEMENT.readOnly = !SETTINGS.editable; + ELEMENT.id = ELEMENT.id || STATE.id; + if (ELEMENT.type != 'text') { + ELEMENT.type = 'text'; + } + + // Create a new picker component with the settings. + P.component = new COMPONENT(P, SETTINGS); + + // Create the picker root with a holder and then prepare it. + P.$root = $(PickerConstructor._.node('div', createWrappedComponent(), CLASSES.picker, 'id="' + ELEMENT.id + '_root" tabindex="0"')); + prepareElementRoot(); + + // If there’s a format for the hidden input element, create the element. + if (SETTINGS.formatSubmit) { + prepareElementHidden(); + } + + // Prepare the input element. + prepareElement(); + + // Insert the root as specified in the settings. + if (SETTINGS.container) $(SETTINGS.container).append(P.$root);else $ELEMENT.before(P.$root); + + // Bind the default component and settings events. + P.on({ + start: P.component.onStart, + render: P.component.onRender, + stop: P.component.onStop, + open: P.component.onOpen, + close: P.component.onClose, + set: P.component.onSet + }).on({ + start: SETTINGS.onStart, + render: SETTINGS.onRender, + stop: SETTINGS.onStop, + open: SETTINGS.onOpen, + close: SETTINGS.onClose, + set: SETTINGS.onSet + }); + + // Once we’re all set, check the theme in use. + IS_DEFAULT_THEME = isUsingDefaultTheme(P.$root.children()[0]); + + // If the element has autofocus, open the picker. + if (ELEMENT.autofocus) { + P.open(); + } + + // Trigger queued the “start” and “render” events. + return P.trigger('start').trigger('render'); + }, //start + + + /** + * Render a new picker + */ + render: function (entireComponent) { + + // Insert a new component holder in the root or box. + if (entireComponent) P.$root.html(createWrappedComponent());else P.$root.find('.' + CLASSES.box).html(P.component.nodes(STATE.open)); + + // Trigger the queued “render” events. + return P.trigger('render'); + }, //render + + + /** + * Destroy everything + */ + stop: function () { + + // If it’s already stopped, do nothing. + if (!STATE.start) return P; + + // Then close the picker. + P.close(); + + // Remove the hidden field. + if (P._hidden) { + P._hidden.parentNode.removeChild(P._hidden); + } + + // Remove the root. + P.$root.remove(); + + // Remove the input class, remove the stored data, and unbind + // the events (after a tick for IE - see `P.close`). + $ELEMENT.removeClass(CLASSES.input).removeData(NAME); + setTimeout(function () { + $ELEMENT.off('.' + STATE.id); + }, 0); + + // Restore the element state + ELEMENT.type = STATE.type; + ELEMENT.readOnly = false; + + // Trigger the queued “stop” events. + P.trigger('stop'); + + // Reset the picker states. + STATE.methods = {}; + STATE.start = false; + + return P; + }, //stop + + + /** + * Open up the picker + */ + open: function (dontGiveFocus) { + + // If it’s already open, do nothing. + if (STATE.open) return P; + + // Add the “active” class. + $ELEMENT.addClass(CLASSES.active); + aria(ELEMENT, 'expanded', true); + + // * A Firefox bug, when `html` has `overflow:hidden`, results in + // killing transitions :(. So add the “opened” state on the next tick. + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289 + setTimeout(function () { + + // Add the “opened” class to the picker root. + P.$root.addClass(CLASSES.opened); + aria(P.$root[0], 'hidden', false); + }, 0); + + // If we have to give focus, bind the element and doc events. + if (dontGiveFocus !== false) { + + // Set it as open. + STATE.open = true; + + // Prevent the page from scrolling. + if (IS_DEFAULT_THEME) { + $html.css('overflow', 'hidden').css('padding-right', '+=' + getScrollbarWidth()); + } + + // Pass focus to the root element’s jQuery object. + // * Workaround for iOS8 to bring the picker’s root into view. + P.$root.eq(0).focus(); + + // Bind the document events. + $document.on('click.' + STATE.id + ' focusin.' + STATE.id, function (event) { + + var target = event.target; + + // If the target of the event is not the element, close the picker picker. + // * Don’t worry about clicks or focusins on the root because those don’t bubble up. + // Also, for Firefox, a click on an `option` element bubbles up directly + // to the doc. So make sure the target wasn't the doc. + // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling, + // which causes the picker to unexpectedly close when right-clicking it. So make + // sure the event wasn’t a right-click. + if (target != ELEMENT && target != document && event.which != 3) { + + // If the target was the holder that covers the screen, + // keep the element focused to maintain tabindex. + P.close(target === P.$root.children()[0]); + } + }).on('keydown.' + STATE.id, function (event) { - // Input: Array of JSON objects {selector, offset, callback} + var + // Get the keycode. + keycode = event.keyCode, - Materialize.scrollFire = function(options) { - var didScroll = false; + // Translate that to a selection change. + keycodeToMove = P.component.key[keycode], - window.addEventListener("scroll", function() { - didScroll = true; - }); - // Rate limit to 100ms - setInterval(function() { - if(didScroll) { - didScroll = false; - - var windowScroll = window.pageYOffset + window.innerHeight; - - for (var i = 0 ; i < options.length; i++) { - // Get options from each line - var value = options[i]; - var selector = value.selector, - offset = value.offset, - callback = value.callback; - - var currentElement = document.querySelector(selector); - if ( currentElement !== null) { - var elementOffset = currentElement.getBoundingClientRect().top + document.body.scrollTop; - - if (windowScroll > (elementOffset + offset)) { - if (value.done !== true) { - var callbackFunc = new Function(callback); - callbackFunc(); - value.done = true; - } - } - } - } - } - }, 100); - }; + // Grab the target. + target = event.target; -})(jQuery);;/*! - * pickadate.js v3.5.0, 2014/04/13 - * By Amsul, http://amsul.ca - * Hosted on http://amsul.github.io/pickadate.js - * Licensed under MIT - */ + // On escape, close the picker and give focus. + if (keycode == 27) { + P.close(true); + } -(function ( factory ) { + // Check if there is a key movement or “enter” keypress on the element. + else if (target == P.$root[0] && (keycodeToMove || keycode == 13)) { - // AMD. - if ( typeof define == 'function' && define.amd ) - define( 'picker', ['jquery'], factory ) + // Prevent the default action to stop page movement. + event.preventDefault(); - // Node.js/browserify. - else if ( typeof exports == 'object' ) - module.exports = factory( require('jquery') ) + // Trigger the key movement action. + if (keycodeToMove) { + PickerConstructor._.trigger(P.component.key.go, P, [PickerConstructor._.trigger(keycodeToMove)]); + } - // Browser globals. - else this.Picker = factory( jQuery ) + // On “enter”, if the highlighted item isn’t disabled, set the value and close. + else if (!P.$root.find('.' + CLASSES.highlighted).hasClass(CLASSES.disabled)) { + P.set('select', P.component.item.highlight); + if (SETTINGS.closeOnSelect) { + P.close(true); + } + } + } -}(function( $ ) { + // If the target is within the root and “enter” is pressed, + // prevent the default action and trigger a click on the target instead. + else if ($.contains(P.$root[0], target) && keycode == 13) { + event.preventDefault(); + target.click(); + } + }); + } -var $window = $( window ) -var $document = $( document ) -var $html = $( document.documentElement ) + // Trigger the queued “open” events. + return P.trigger('open'); + }, //open -/** - * The picker constructor that creates a blank picker. - */ -function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { + /** + * Close the picker + */ + close: function (giveFocus) { + + // If we need to give focus, do it before changing states. + if (giveFocus) { + // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :| + // The focus is triggered *after* the close has completed - causing it + // to open again. So unbind and rebind the event at the next tick. + P.$root.off('focus.toOpen').eq(0).focus(); + setTimeout(function () { + P.$root.on('focus.toOpen', handleFocusToOpenEvent); + }, 0); + } - // If there’s no element, return the picker constructor. - if ( !ELEMENT ) return PickerConstructor + // Remove the “active” class. + $ELEMENT.removeClass(CLASSES.active); + aria(ELEMENT, 'expanded', false); + // * A Firefox bug, when `html` has `overflow:hidden`, results in + // killing transitions :(. So remove the “opened” state on the next tick. + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289 + setTimeout(function () { - var - IS_DEFAULT_THEME = false, + // Remove the “opened” and “focused” class from the picker root. + P.$root.removeClass(CLASSES.opened + ' ' + CLASSES.focused); + aria(P.$root[0], 'hidden', true); + }, 0); + // If it’s already closed, do nothing more. + if (!STATE.open) return P; - // The state of the picker. - STATE = { - id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) ) - }, + // Set it as closed. + STATE.open = false; + // Allow the page to scroll. + if (IS_DEFAULT_THEME) { + $html.css('overflow', '').css('padding-right', '-=' + getScrollbarWidth()); + } - // Merge the defaults and options passed. - SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {}, + // Unbind the document events. + $document.off('.' + STATE.id); + // Trigger the queued “close” events. + return P.trigger('close'); + }, //close - // Merge the default classes with the settings classes. - CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ), + /** + * Clear the values + */ + clear: function (options) { + return P.set('clear', null, options); + }, //clear - // The element node wrapper into a jQuery object. - $ELEMENT = $( ELEMENT ), + /** + * Set something + */ + set: function (thing, value, options) { - // Pseudo picker constructor. - PickerInstance = function() { - return this.start() - }, + var thingItem, + thingValue, + thingIsObject = $.isPlainObject(thing), + thingObject = thingIsObject ? thing : {}; + // Make sure we have usable options. + options = thingIsObject && $.isPlainObject(value) ? value : options || {}; - // The picker prototype. - P = PickerInstance.prototype = { + if (thing) { - constructor: PickerInstance, + // If the thing isn’t an object, make it one. + if (!thingIsObject) { + thingObject[thing] = value; + } - $node: $ELEMENT, + // Go through the things of items to set. + for (thingItem in thingObject) { + // Grab the value of the thing. + thingValue = thingObject[thingItem]; - /** - * Initialize everything - */ - start: function() { + // First, if the item exists and there’s a value, set it. + if (thingItem in P.component.item) { + if (thingValue === undefined) thingValue = null; + P.component.set(thingItem, thingValue, options); + } - // If it’s already started, do nothing. - if ( STATE && STATE.start ) return P + // Then, check to update the element value and broadcast a change. + if (thingItem == 'select' || thingItem == 'clear') { + $ELEMENT.val(thingItem == 'clear' ? '' : P.get(thingItem, SETTINGS.format)).trigger('change'); + } + } + // Render a new picker. + P.render(); + } - // Update the picker states. - STATE.methods = {} - STATE.start = true - STATE.open = false - STATE.type = ELEMENT.type + // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`. + return options.muted ? P : P.trigger('set', thingObject); + }, //set - // Confirm focus state, convert into text input to remove UA stylings, - // and set as readonly to prevent keyboard popup. - ELEMENT.autofocus = ELEMENT == getActiveElement() - ELEMENT.readOnly = !SETTINGS.editable - ELEMENT.id = ELEMENT.id || STATE.id - if ( ELEMENT.type != 'text' ) { - ELEMENT.type = 'text' - } + /** + * Get something + */ + get: function (thing, format) { + // Make sure there’s something to get. + thing = thing || 'value'; - // Create a new picker component with the settings. - P.component = new COMPONENT(P, SETTINGS) + // If a picker state exists, return that. + if (STATE[thing] != null) { + return STATE[thing]; + } + // Return the submission value, if that. + if (thing == 'valueSubmit') { + if (P._hidden) { + return P._hidden.value; + } + thing = 'value'; + } - // Create the picker root with a holder and then prepare it. - P.$root = $( PickerConstructor._.node('div', createWrappedComponent(), CLASSES.picker, 'id="' + ELEMENT.id + '_root" tabindex="0"') ) - prepareElementRoot() + // Return the value, if that. + if (thing == 'value') { + return ELEMENT.value; + } + // Check if a component item exists, return that. + if (thing in P.component.item) { + if (typeof format == 'string') { + var thingValue = P.component.get(thing); + return thingValue ? PickerConstructor._.trigger(P.component.formats.toString, P.component, [format, thingValue]) : ''; + } + return P.component.get(thing); + } + }, //get - // If there’s a format for the hidden input element, create the element. - if ( SETTINGS.formatSubmit ) { - prepareElementHidden() - } + /** + * Bind events on the things. + */ + on: function (thing, method, internal) { - // Prepare the input element. - prepareElement() + var thingName, + thingMethod, + thingIsObject = $.isPlainObject(thing), + thingObject = thingIsObject ? thing : {}; + if (thing) { - // Insert the root as specified in the settings. - if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root ) - else $ELEMENT.after( P.$root ) + // If the thing isn’t an object, make it one. + if (!thingIsObject) { + thingObject[thing] = method; + } + // Go through the things to bind to. + for (thingName in thingObject) { - // Bind the default component and settings events. - P.on({ - start: P.component.onStart, - render: P.component.onRender, - stop: P.component.onStop, - open: P.component.onOpen, - close: P.component.onClose, - set: P.component.onSet - }).on({ - start: SETTINGS.onStart, - render: SETTINGS.onRender, - stop: SETTINGS.onStop, - open: SETTINGS.onOpen, - close: SETTINGS.onClose, - set: SETTINGS.onSet - }) + // Grab the method of the thing. + thingMethod = thingObject[thingName]; + // If it was an internal binding, prefix it. + if (internal) { + thingName = '_' + thingName; + } - // Once we’re all set, check the theme in use. - IS_DEFAULT_THEME = isUsingDefaultTheme( P.$root.children()[ 0 ] ) + // Make sure the thing methods collection exists. + STATE.methods[thingName] = STATE.methods[thingName] || []; + // Add the method to the relative method collection. + STATE.methods[thingName].push(thingMethod); + } + } - // If the element has autofocus, open the picker. - if ( ELEMENT.autofocus ) { - P.open() - } + return P; + }, //on - // Trigger queued the “start” and “render” events. - return P.trigger( 'start' ).trigger( 'render' ) - }, //start + /** + * Unbind events on the things. + */ + off: function () { + var i, + thingName, + names = arguments; + for (i = 0, namesCount = names.length; i < namesCount; i += 1) { + thingName = names[i]; + if (thingName in STATE.methods) { + delete STATE.methods[thingName]; + } + } + return P; + }, + /** + * Fire off method events. + */ + trigger: function (name, data) { + var _trigger = function (name) { + var methodList = STATE.methods[name]; + if (methodList) { + methodList.map(function (method) { + PickerConstructor._.trigger(method, P, [data]); + }); + } + }; + _trigger('_' + name); + _trigger(name); + return P; + } //trigger + //PickerInstance.prototype - /** - * Render a new picker - */ - render: function( entireComponent ) { - // Insert a new component holder in the root or box. - if ( entireComponent ) P.$root.html( createWrappedComponent() ) - else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) ) + /** + * Wrap the picker holder components together. + */ + };function createWrappedComponent() { - // Trigger the queued “render” events. - return P.trigger( 'render' ) - }, //render + // Create a picker wrapper holder + return PickerConstructor._.node('div', + // Create a picker wrapper node + PickerConstructor._.node('div', - /** - * Destroy everything - */ - stop: function() { + // Create a picker frame + PickerConstructor._.node('div', - // If it’s already stopped, do nothing. - if ( !STATE.start ) return P + // Create a picker box node + PickerConstructor._.node('div', - // Then close the picker. - P.close() + // Create the components nodes. + P.component.nodes(STATE.open), - // Remove the hidden field. - if ( P._hidden ) { - P._hidden.parentNode.removeChild( P._hidden ) - } + // The picker box class + CLASSES.box), - // Remove the root. - P.$root.remove() + // Picker wrap class + CLASSES.wrap), - // Remove the input class, remove the stored data, and unbind - // the events (after a tick for IE - see `P.close`). - $ELEMENT.removeClass( CLASSES.input ).removeData( NAME ) - setTimeout( function() { - $ELEMENT.off( '.' + STATE.id ) - }, 0) + // Picker frame class + CLASSES.frame), - // Restore the element state - ELEMENT.type = STATE.type - ELEMENT.readOnly = false + // Picker holder class + CLASSES.holder); //endreturn + } //createWrappedComponent - // Trigger the queued “stop” events. - P.trigger( 'stop' ) - // Reset the picker states. - STATE.methods = {} - STATE.start = false + /** + * Prepare the input element with all bindings. + */ + function prepareElement() { - return P - }, //stop + $ELEMENT. + // Store the picker data by component name. + data(NAME, P). - /** - * Open up the picker - */ - open: function( dontGiveFocus ) { + // Add the “input” class name. + addClass(CLASSES.input). - // If it’s already open, do nothing. - if ( STATE.open ) return P + // Remove the tabindex. + attr('tabindex', -1). - // Add the “active” class. - $ELEMENT.addClass( CLASSES.active ) - aria( ELEMENT, 'expanded', true ) + // If there’s a `data-value`, update the value of the element. + val($ELEMENT.data('value') ? P.get('select', SETTINGS.format) : ELEMENT.value); - // * A Firefox bug, when `html` has `overflow:hidden`, results in - // killing transitions :(. So add the “opened” state on the next tick. - // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289 - setTimeout( function() { + // Only bind keydown events if the element isn’t editable. + if (!SETTINGS.editable) { - // Add the “opened” class to the picker root. - P.$root.addClass( CLASSES.opened ) - aria( P.$root[0], 'hidden', false ) + $ELEMENT. - }, 0 ) + // On focus/click, focus onto the root to open it up. + on('focus.' + STATE.id + ' click.' + STATE.id, function (event) { + event.preventDefault(); + P.$root.eq(0).focus(); + }). - // If we have to give focus, bind the element and doc events. - if ( dontGiveFocus !== false ) { + // Handle keyboard event based on the picker being opened or not. + on('keydown.' + STATE.id, handleKeydownEvent); + } - // Set it as open. - STATE.open = true + // Update the aria attributes. + aria(ELEMENT, { + haspopup: true, + expanded: false, + readonly: false, + owns: ELEMENT.id + '_root' + }); + } - // Prevent the page from scrolling. - if ( IS_DEFAULT_THEME ) { - $html. - css( 'overflow', 'hidden' ). - css( 'padding-right', '+=' + getScrollbarWidth() ) - } + /** + * Prepare the root picker element with all bindings. + */ + function prepareElementRoot() { - // Pass focus to the root element’s jQuery object. - // * Workaround for iOS8 to bring the picker’s root into view. - P.$root[0].focus() + P.$root.on({ - // Bind the document events. - $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) { + // For iOS8. + keydown: handleKeydownEvent, - var target = event.target + // When something within the root is focused, stop from bubbling + // to the doc and remove the “focused” state from the root. + focusin: function (event) { + P.$root.removeClass(CLASSES.focused); + event.stopPropagation(); + }, - // If the target of the event is not the element, close the picker picker. - // * Don’t worry about clicks or focusins on the root because those don’t bubble up. - // Also, for Firefox, a click on an `option` element bubbles up directly - // to the doc. So make sure the target wasn't the doc. - // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling, - // which causes the picker to unexpectedly close when right-clicking it. So make - // sure the event wasn’t a right-click. - if ( target != ELEMENT && target != document && event.which != 3 ) { + // When something within the root holder is clicked, stop it + // from bubbling to the doc. + 'mousedown click': function (event) { - // If the target was the holder that covers the screen, - // keep the element focused to maintain tabindex. - P.close( target === P.$root.children()[0] ) - } + var target = event.target; - }).on( 'keydown.' + STATE.id, function( event ) { + // Make sure the target isn’t the root holder so it can bubble up. + if (target != P.$root.children()[0]) { - var - // Get the keycode. - keycode = event.keyCode, + event.stopPropagation(); - // Translate that to a selection change. - keycodeToMove = P.component.key[ keycode ], + // * For mousedown events, cancel the default action in order to + // prevent cases where focus is shifted onto external elements + // when using things like jQuery mobile or MagnificPopup (ref: #249 & #120). + // Also, for Firefox, don’t prevent action on the `option` element. + if (event.type == 'mousedown' && !$(target).is('input, select, textarea, button, option')) { - // Grab the target. - target = event.target + event.preventDefault(); + // Re-focus onto the root so that users can click away + // from elements focused within the picker. + P.$root.eq(0).focus(); + } + } + } + }). - // On escape, close the picker and give focus. - if ( keycode == 27 ) { - P.close( true ) - } + // Add/remove the “target” class on focus and blur. + on({ + focus: function () { + $ELEMENT.addClass(CLASSES.target); + }, + blur: function () { + $ELEMENT.removeClass(CLASSES.target); + } + }). + // Open the picker and adjust the root “focused” state + on('focus.toOpen', handleFocusToOpenEvent). - // Check if there is a key movement or “enter” keypress on the element. - else if ( target == P.$root[0] && ( keycodeToMove || keycode == 13 ) ) { + // If there’s a click on an actionable element, carry out the actions. + on('click', '[data-pick], [data-nav], [data-clear], [data-close]', function () { - // Prevent the default action to stop page movement. - event.preventDefault() + var $target = $(this), + targetData = $target.data(), + targetDisabled = $target.hasClass(CLASSES.navDisabled) || $target.hasClass(CLASSES.disabled), - // Trigger the key movement action. - if ( keycodeToMove ) { - PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] ) - } - // On “enter”, if the highlighted item isn’t disabled, set the value and close. - else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) { - P.set( 'select', P.component.item.highlight ).close() - } - } + // * For IE, non-focusable elements can be active elements as well + // (http://stackoverflow.com/a/2684561). + activeElement = getActiveElement(); + activeElement = activeElement && (activeElement.type || activeElement.href) && activeElement; + // If it’s disabled or nothing inside is actively focused, re-focus the element. + if (targetDisabled || activeElement && !$.contains(P.$root[0], activeElement)) { + P.$root.eq(0).focus(); + } - // If the target is within the root and “enter” is pressed, - // prevent the default action and trigger a click on the target instead. - else if ( $.contains( P.$root[0], target ) && keycode == 13 ) { - event.preventDefault() - target.click() - } - }) - } + // If something is superficially changed, update the `highlight` based on the `nav`. + if (!targetDisabled && targetData.nav) { + P.set('highlight', P.component.item.highlight, { nav: targetData.nav }); + } - // Trigger the queued “open” events. - return P.trigger( 'open' ) - }, //open - - - /** - * Close the picker - */ - close: function( giveFocus ) { - - // If we need to give focus, do it before changing states. - if ( giveFocus ) { - // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :| - // The focus is triggered *after* the close has completed - causing it - // to open again. So unbind and rebind the event at the next tick. - P.$root.off( 'focus.toOpen' )[0].focus() - setTimeout( function() { - P.$root.on( 'focus.toOpen', handleFocusToOpenEvent ) - }, 0 ) - } + // If something is picked, set `select` then close with focus. + else if (!targetDisabled && 'pick' in targetData) { + P.set('select', targetData.pick); + if (SETTINGS.closeOnSelect) { + P.close(true); + } + } - // Remove the “active” class. - $ELEMENT.removeClass( CLASSES.active ) - aria( ELEMENT, 'expanded', false ) + // If a “clear” button is pressed, empty the values and close with focus. + else if (targetData.clear) { + P.clear(); + if (SETTINGS.closeOnSelect) { + P.close(true); + } + } else if (targetData.close) { + P.close(true); + } + }); //P.$root - // * A Firefox bug, when `html` has `overflow:hidden`, results in - // killing transitions :(. So remove the “opened” state on the next tick. - // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289 - setTimeout( function() { + aria(P.$root[0], 'hidden', true); + } - // Remove the “opened” and “focused” class from the picker root. - P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused ) - aria( P.$root[0], 'hidden', true ) + /** + * Prepare the hidden input element along with all bindings. + */ + function prepareElementHidden() { - }, 0 ) + var name; - // If it’s already closed, do nothing more. - if ( !STATE.open ) return P + if (SETTINGS.hiddenName === true) { + name = ELEMENT.name; + ELEMENT.name = ''; + } else { + name = [typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '', typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit']; + name = name[0] + ELEMENT.name + name[1]; + } - // Set it as closed. - STATE.open = false + P._hidden = $('')[0]; - // Trigger the queued “close” events. - return P.trigger( 'close' ) - }, //close + $ELEMENT. + // If the value changes, update the hidden input with the correct format. + on('change.' + STATE.id, function () { + P._hidden.value = ELEMENT.value ? P.get('select', SETTINGS.formatSubmit) : ''; + }); - /** - * Clear the values - */ - clear: function( options ) { - return P.set( 'clear', null, options ) - }, //clear + // Insert the hidden input as specified in the settings. + if (SETTINGS.container) $(SETTINGS.container).append(P._hidden);else $ELEMENT.before(P._hidden); + } + // For iOS8. + function handleKeydownEvent(event) { - /** - * Set something - */ - set: function( thing, value, options ) { + var keycode = event.keyCode, - var thingItem, thingValue, - thingIsObject = $.isPlainObject( thing ), - thingObject = thingIsObject ? thing : {} - // Make sure we have usable options. - options = thingIsObject && $.isPlainObject( value ) ? value : options || {} + // Check if one of the delete keys was pressed. + isKeycodeDelete = /^(8|46)$/.test(keycode); - if ( thing ) { + // For some reason IE clears the input value on “escape”. + if (keycode == 27) { + P.close(); + return false; + } - // If the thing isn’t an object, make it one. - if ( !thingIsObject ) { - thingObject[ thing ] = value - } + // Check if `space` or `delete` was pressed or the picker is closed with a key movement. + if (keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode]) { - // Go through the things of items to set. - for ( thingItem in thingObject ) { + // Prevent it from moving the page and bubbling to doc. + event.preventDefault(); + event.stopPropagation(); + + // If `delete` was pressed, clear the values and close the picker. + // Otherwise open the picker. + if (isKeycodeDelete) { + P.clear().close(); + } else { + P.open(); + } + } + } - // Grab the value of the thing. - thingValue = thingObject[ thingItem ] + // Separated for IE + function handleFocusToOpenEvent(event) { - // First, if the item exists and there’s a value, set it. - if ( thingItem in P.component.item ) { - if ( thingValue === undefined ) thingValue = null - P.component.set( thingItem, thingValue, options ) - } + // Stop the event from propagating to the doc. + event.stopPropagation(); - // Then, check to update the element value and broadcast a change. - if ( thingItem == 'select' || thingItem == 'clear' ) { - $ELEMENT. - val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ). - trigger( 'change' ) - } - } + // If it’s a focus event, add the “focused” class to the root. + if (event.type == 'focus') { + P.$root.addClass(CLASSES.focused); + } - // Render a new picker. - P.render() - } + // And then finally open the picker. + P.open(); + } - // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`. - return options.muted ? P : P.trigger( 'set', thingObject ) - }, //set + // Return a new picker instance. + return new PickerInstance(); + } //PickerConstructor - /** - * Get something - */ - get: function( thing, format ) { + /** + * The default classes and prefix to use for the HTML classes. + */ + PickerConstructor.klasses = function (prefix) { + prefix = prefix || 'picker'; + return { - // Make sure there’s something to get. - thing = thing || 'value' + picker: prefix, + opened: prefix + '--opened', + focused: prefix + '--focused', - // If a picker state exists, return that. - if ( STATE[ thing ] != null ) { - return STATE[ thing ] - } + input: prefix + '__input', + active: prefix + '__input--active', + target: prefix + '__input--target', - // Return the submission value, if that. - if ( thing == 'valueSubmit' ) { - if ( P._hidden ) { - return P._hidden.value - } - thing = 'value' - } + holder: prefix + '__holder', - // Return the value, if that. - if ( thing == 'value' ) { - return ELEMENT.value - } + frame: prefix + '__frame', + wrap: prefix + '__wrap', - // Check if a component item exists, return that. - if ( thing in P.component.item ) { - if ( typeof format == 'string' ) { - var thingValue = P.component.get( thing ) - return thingValue ? - PickerConstructor._.trigger( - P.component.formats.toString, - P.component, - [ format, thingValue ] - ) : '' - } - return P.component.get( thing ) - } - }, //get + box: prefix + '__box' + }; + }; //PickerConstructor.klasses + /** + * Check if the default theme is being used. + */ + function isUsingDefaultTheme(element) { - /** - * Bind events on the things. - */ - on: function( thing, method, internal ) { + var theme, + prop = 'position'; - var thingName, thingMethod, - thingIsObject = $.isPlainObject( thing ), - thingObject = thingIsObject ? thing : {} + // For IE. + if (element.currentStyle) { + theme = element.currentStyle[prop]; + } - if ( thing ) { + // For normal browsers. + else if (window.getComputedStyle) { + theme = getComputedStyle(element)[prop]; + } - // If the thing isn’t an object, make it one. - if ( !thingIsObject ) { - thingObject[ thing ] = method - } + return theme == 'fixed'; + } - // Go through the things to bind to. - for ( thingName in thingObject ) { + /** + * Get the width of the browser’s scrollbar. + * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js + */ + function getScrollbarWidth() { - // Grab the method of the thing. - thingMethod = thingObject[ thingName ] + if ($html.height() <= $window.height()) { + return 0; + } - // If it was an internal binding, prefix it. - if ( internal ) { - thingName = '_' + thingName - } + var $outer = $('
          ').appendTo('body'); - // Make sure the thing methods collection exists. - STATE.methods[ thingName ] = STATE.methods[ thingName ] || [] + // Get the width without scrollbars. + var widthWithoutScroll = $outer[0].offsetWidth; - // Add the method to the relative method collection. - STATE.methods[ thingName ].push( thingMethod ) - } - } + // Force adding scrollbars. + $outer.css('overflow', 'scroll'); - return P - }, //on + // Add the inner div. + var $inner = $('
          ').appendTo($outer); + // Get the width with scrollbars. + var widthWithScroll = $inner[0].offsetWidth; + // Remove the divs. + $outer.remove(); - /** - * Unbind events on the things. - */ - off: function() { - var i, thingName, - names = arguments; - for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) { - thingName = names[i] - if ( thingName in STATE.methods ) { - delete STATE.methods[thingName] - } - } - return P - }, - - - /** - * Fire off method events. - */ - trigger: function( name, data ) { - var _trigger = function( name ) { - var methodList = STATE.methods[ name ] - if ( methodList ) { - methodList.map( function( method ) { - PickerConstructor._.trigger( method, P, [ data ] ) - }) - } - } - _trigger( '_' + name ) - _trigger( name ) - return P - } //trigger - } //PickerInstance.prototype + // Return the difference between the widths. + return widthWithoutScroll - widthWithScroll; + } + /** + * PickerConstructor helper methods. + */ + PickerConstructor._ = { /** - * Wrap the picker holder components together. + * Create a group of nodes. Expects: + * ` + { + min: {Integer}, + max: {Integer}, + i: {Integer}, + node: {String}, + item: {Function} + } + * ` */ - function createWrappedComponent() { + group: function (groupObject) { - // Create a picker wrapper holder - return PickerConstructor._.node( 'div', + var + // Scope for the looped object + loopObjectScope, - // Create a picker wrapper node - PickerConstructor._.node( 'div', - // Create a picker frame - PickerConstructor._.node( 'div', + // Create the nodes list + nodesList = '', - // Create a picker box node - PickerConstructor._.node( 'div', - // Create the components nodes. - P.component.nodes( STATE.open ), + // The counter starts from the `min` + counter = PickerConstructor._.trigger(groupObject.min, groupObject); - // The picker box class - CLASSES.box - ), + // Loop from the `min` to `max`, incrementing by `i` + for (; counter <= PickerConstructor._.trigger(groupObject.max, groupObject, [counter]); counter += groupObject.i) { - // Picker wrap class - CLASSES.wrap - ), + // Trigger the `item` function within scope of the object + loopObjectScope = PickerConstructor._.trigger(groupObject.item, groupObject, [counter]); - // Picker frame class - CLASSES.frame - ), - - // Picker holder class - CLASSES.holder - ) //endreturn - } //createWrappedComponent + // Splice the subgroup and create nodes out of the sub nodes + nodesList += PickerConstructor._.node(groupObject.node, loopObjectScope[0], // the node + loopObjectScope[1], // the classes + loopObjectScope[2] // the attributes + ); + } + // Return the list of nodes + return nodesList; + }, //group /** - * Prepare the input element with all bindings. + * Create a dom node string */ - function prepareElement() { - - $ELEMENT. - - // Store the picker data by component name. - data(NAME, P). - - // Add the “input” class name. - addClass(CLASSES.input). - - // Remove the tabindex. - attr('tabindex', -1). - - // If there’s a `data-value`, update the value of the element. - val( $ELEMENT.data('value') ? - P.get('select', SETTINGS.format) : - ELEMENT.value - ) + node: function (wrapper, item, klass, attribute) { + // If the item is false-y, just return an empty string + if (!item) return ''; - // Only bind keydown events if the element isn’t editable. - if ( !SETTINGS.editable ) { + // If the item is an array, do a join + item = $.isArray(item) ? item.join('') : item; - $ELEMENT. + // Check for the class + klass = klass ? ' class="' + klass + '"' : ''; - // On focus/click, focus onto the root to open it up. - on( 'focus.' + STATE.id + ' click.' + STATE.id, function( event ) { - event.preventDefault() - P.$root[0].focus() - }). + // Check for any attributes + attribute = attribute ? ' ' + attribute : ''; - // Handle keyboard event based on the picker being opened or not. - on( 'keydown.' + STATE.id, handleKeydownEvent ) - } + // Return the wrapped item + return '<' + wrapper + klass + attribute + '>' + item + ''; + }, //node - // Update the aria attributes. - aria(ELEMENT, { - haspopup: true, - expanded: false, - readonly: false, - owns: ELEMENT.id + '_root' - }) - } + /** + * Lead numbers below 10 with a zero. + */ + lead: function (number) { + return (number < 10 ? '0' : '') + number; + }, + /** + * Trigger a function otherwise return the value. + */ + trigger: function (callback, scope, args) { + return typeof callback == 'function' ? callback.apply(scope, args || []) : callback; + }, /** - * Prepare the root picker element with all bindings. + * If the second character is a digit, length is 2 otherwise 1. */ - function prepareElementRoot() { + digits: function (string) { + return (/\d/.test(string[1]) ? 2 : 1 + ); + }, - P.$root. + /** + * Tell if something is a date object. + */ + isDate: function (value) { + return {}.toString.call(value).indexOf('Date') > -1 && this.isInteger(value.getDate()); + }, - on({ + /** + * Tell if something is an integer. + */ + isInteger: function (value) { + return {}.toString.call(value).indexOf('Number') > -1 && value % 1 === 0; + }, - // For iOS8. - keydown: handleKeydownEvent, + /** + * Create ARIA attribute strings. + */ + ariaAttr: ariaAttr //PickerConstructor._ - // When something within the root is focused, stop from bubbling - // to the doc and remove the “focused” state from the root. - focusin: function( event ) { - P.$root.removeClass( CLASSES.focused ) - event.stopPropagation() - }, - // When something within the root holder is clicked, stop it - // from bubbling to the doc. - 'mousedown click': function( event ) { + /** + * Extend the picker with a component and defaults. + */ + };PickerConstructor.extend = function (name, Component) { - var target = event.target + // Extend jQuery. + $.fn[name] = function (options, action) { - // Make sure the target isn’t the root holder so it can bubble up. - if ( target != P.$root.children()[ 0 ] ) { + // Grab the component data. + var componentData = this.data(name); - event.stopPropagation() + // If the picker is requested, return the data object. + if (options == 'picker') { + return componentData; + } - // * For mousedown events, cancel the default action in order to - // prevent cases where focus is shifted onto external elements - // when using things like jQuery mobile or MagnificPopup (ref: #249 & #120). - // Also, for Firefox, don’t prevent action on the `option` element. - if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) { + // If the component data exists and `options` is a string, carry out the action. + if (componentData && typeof options == 'string') { + return PickerConstructor._.trigger(componentData[options], componentData, [action]); + } - event.preventDefault() + // Otherwise go through each matched element and if the component + // doesn’t exist, create a new picker using `this` element + // and merging the defaults and options with a deep copy. + return this.each(function () { + var $this = $(this); + if (!$this.data(name)) { + new PickerConstructor(this, name, Component, options); + } + }); + }; - // Re-focus onto the root so that users can click away - // from elements focused within the picker. - P.$root[0].focus() - } - } - } - }). - - // Add/remove the “target” class on focus and blur. - on({ - focus: function() { - $ELEMENT.addClass( CLASSES.target ) - }, - blur: function() { - $ELEMENT.removeClass( CLASSES.target ) - } - }). + // Set the defaults. + $.fn[name].defaults = Component.defaults; + }; //PickerConstructor.extend - // Open the picker and adjust the root “focused” state - on( 'focus.toOpen', handleFocusToOpenEvent ). - // If there’s a click on an actionable element, carry out the actions. - on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() { + function aria(element, attribute, value) { + if ($.isPlainObject(attribute)) { + for (var key in attribute) { + ariaSet(element, key, attribute[key]); + } + } else { + ariaSet(element, attribute, value); + } + } + function ariaSet(element, attribute, value) { + element.setAttribute((attribute == 'role' ? '' : 'aria-') + attribute, value); + } + function ariaAttr(attribute, data) { + if (!$.isPlainObject(attribute)) { + attribute = { attribute: data }; + } + data = ''; + for (var key in attribute) { + var attr = (key == 'role' ? '' : 'aria-') + key, + attrVal = attribute[key]; + data += attrVal == null ? '' : attr + '="' + attribute[key] + '"'; + } + return data; + } - var $target = $( this ), - targetData = $target.data(), - targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ), + // IE8 bug throws an error for activeElements within iframes. + function getActiveElement() { + try { + return document.activeElement; + } catch (err) {} + } - // * For IE, non-focusable elements can be active elements as well - // (http://stackoverflow.com/a/2684561). - activeElement = getActiveElement() - activeElement = activeElement && ( activeElement.type || activeElement.href ) + // Expose the picker constructor. + return PickerConstructor; +}); +; /*! + * Date picker for pickadate.js v3.5.0 + * http://amsul.github.io/pickadate.js/date.htm + */ + +(function (factory) { + factory(Materialize.Picker, jQuery); +})(function (Picker, $) { + + /** + * Globals and constants + */ + var DAYS_IN_WEEK = 7, + WEEKS_IN_CALENDAR = 6, + _ = Picker._; + + /** + * The date picker constructor + */ + function DatePicker(picker, settings) { - // If it’s disabled or nothing inside is actively focused, re-focus the element. - if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) { - P.$root[0].focus() - } + var calendar = this, + element = picker.$node[0], + elementValue = element.value, + elementDataValue = picker.$node.data('value'), + valueString = elementDataValue || elementValue, + formatString = elementDataValue ? settings.formatSubmit : settings.format, + isRTL = function () { - // If something is superficially changed, update the `highlight` based on the `nav`. - if ( !targetDisabled && targetData.nav ) { - P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } ) - } + return element.currentStyle ? - // If something is picked, set `select` then close with focus. - else if ( !targetDisabled && 'pick' in targetData ) { - P.set( 'select', targetData.pick ) - } + // For IE. + element.currentStyle.direction == 'rtl' : - // If a “clear” button is pressed, empty the values and close with focus. - else if ( targetData.clear ) { - P.clear().close( true ) - } + // For normal browsers. + getComputedStyle(picker.$root[0]).direction == 'rtl'; + }; - else if ( targetData.close ) { - P.close( true ) - } + calendar.settings = settings; + calendar.$node = picker.$node; - }) //P.$root + // The queue of methods that will be used to build item objects. + calendar.queue = { + min: 'measure create', + max: 'measure create', + now: 'now create', + select: 'parse create validate', + highlight: 'parse navigate create validate', + view: 'parse create validate viewset', + disable: 'deactivate', + enable: 'activate' + + // The component's item object. + };calendar.item = {}; + + calendar.item.clear = null; + calendar.item.disable = (settings.disable || []).slice(0); + calendar.item.enable = -function (collectionDisabled) { + return collectionDisabled[0] === true ? collectionDisabled.shift() : -1; + }(calendar.item.disable); + + calendar.set('min', settings.min).set('max', settings.max).set('now'); - aria( P.$root[0], 'hidden', true ) + // When there’s a value, set the `select`, which in turn + // also sets the `highlight` and `view`. + if (valueString) { + calendar.set('select', valueString, { format: formatString }); } + // If there’s no value, default to highlighting “today”. + else { + calendar.set('select', null).set('highlight', calendar.item.now); + } - /** - * Prepare the hidden input element along with all bindings. - */ - function prepareElementHidden() { - - var name + // The keycode to movement mapping. + calendar.key = { + 40: 7, // Down + 38: -7, // Up + 39: function () { + return isRTL() ? -1 : 1; + }, // Right + 37: function () { + return isRTL() ? 1 : -1; + }, // Left + go: function (timeChange) { + var highlightedObject = calendar.item.highlight, + targetDate = new Date(highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange); + calendar.set('highlight', targetDate, { interval: timeChange }); + this.render(); + } - if ( SETTINGS.hiddenName === true ) { - name = ELEMENT.name - ELEMENT.name = '' + // Bind some picker events. + };picker.on('render', function () { + picker.$root.find('.' + settings.klass.selectMonth).on('change', function () { + var value = this.value; + if (value) { + picker.set('highlight', [picker.get('view').year, value, picker.get('highlight').date]); + picker.$root.find('.' + settings.klass.selectMonth).trigger('focus'); } - else { - name = [ - typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '', - typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit' - ] - name = name[0] + ELEMENT.name + name[1] + }); + picker.$root.find('.' + settings.klass.selectYear).on('change', function () { + var value = this.value; + if (value) { + picker.set('highlight', [value, picker.get('view').month, picker.get('highlight').date]); + picker.$root.find('.' + settings.klass.selectYear).trigger('focus'); } + }); + }, 1).on('open', function () { + var includeToday = ''; + if (calendar.disabled(calendar.get('now'))) { + includeToday = ':not(.' + settings.klass.buttonToday + ')'; + } + picker.$root.find('button' + includeToday + ', select').attr('disabled', false); + }, 1).on('close', function () { + picker.$root.find('button, select').attr('disabled', true); + }, 1); + } //DatePicker - P._hidden = $( - '' - )[0] + /** + * Set a datepicker item object. + */ + DatePicker.prototype.set = function (type, value, options) { - $ELEMENT. + var calendar = this, + calendarItem = calendar.item; - // If the value changes, update the hidden input with the correct format. - on('change.' + STATE.id, function() { - P._hidden.value = ELEMENT.value ? - P.get('select', SETTINGS.formatSubmit) : - '' - }) + // If the value is `null` just set it immediately. + if (value === null) { + if (type == 'clear') type = 'select'; + calendarItem[type] = value; + return calendar; + } + // Otherwise go through the queue of methods, and invoke the functions. + // Update this as the time unit, and set the final value as this item. + // * In the case of `enable`, keep the queue but set `disable` instead. + // And in the case of `flip`, keep the queue but set `enable` instead. + calendarItem[type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type] = calendar.queue[type].split(' ').map(function (method) { + value = calendar[method](type, value, options); + return value; + }).pop(); - // Insert the hidden input as specified in the settings. - if ( SETTINGS.container ) $( SETTINGS.container ).append( P._hidden ) - else $ELEMENT.after( P._hidden ) + // Check if we need to cascade through more updates. + if (type == 'select') { + calendar.set('highlight', calendarItem.select, options); + } else if (type == 'highlight') { + calendar.set('view', calendarItem.highlight, options); + } else if (type.match(/^(flip|min|max|disable|enable)$/)) { + if (calendarItem.select && calendar.disabled(calendarItem.select)) { + calendar.set('select', calendarItem.select, options); + } + if (calendarItem.highlight && calendar.disabled(calendarItem.highlight)) { + calendar.set('highlight', calendarItem.highlight, options); + } } + return calendar; + }; //DatePicker.prototype.set - // For iOS8. - function handleKeydownEvent( event ) { - var keycode = event.keyCode, + /** + * Get a datepicker item object. + */ + DatePicker.prototype.get = function (type) { + return this.item[type]; + }; //DatePicker.prototype.get - // Check if one of the delete keys was pressed. - isKeycodeDelete = /^(8|46)$/.test(keycode) - // For some reason IE clears the input value on “escape”. - if ( keycode == 27 ) { - P.close() - return false - } + /** + * Create a picker date object. + */ + DatePicker.prototype.create = function (type, value, options) { - // Check if `space` or `delete` was pressed or the picker is closed with a key movement. - if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) { + var isInfiniteValue, + calendar = this; - // Prevent it from moving the page and bubbling to doc. - event.preventDefault() - event.stopPropagation() + // If there’s no value, use the type as the value. + value = value === undefined ? type : value; - // If `delete` was pressed, clear the values and close the picker. - // Otherwise open the picker. - if ( isKeycodeDelete ) { P.clear().close() } - else { P.open() } - } + // If it’s infinity, update the value. + if (value == -Infinity || value == Infinity) { + isInfiniteValue = value; } + // If it’s an object, use the native date object. + else if ($.isPlainObject(value) && _.isInteger(value.pick)) { + value = value.obj; + } - // Separated for IE - function handleFocusToOpenEvent( event ) { - - // Stop the event from propagating to the doc. - event.stopPropagation() - - // If it’s a focus event, add the “focused” class to the root. - if ( event.type == 'focus' ) { - P.$root.addClass( CLASSES.focused ) + // If it’s an array, convert it into a date and make sure + // that it’s a valid date – otherwise default to today. + else if ($.isArray(value)) { + value = new Date(value[0], value[1], value[2]); + value = _.isDate(value) ? value : calendar.create().obj; } - // And then finally open the picker. - P.open() - } - - - // Return a new picker instance. - return new PickerInstance() -} //PickerConstructor - + // If it’s a number or date object, make a normalized date. + else if (_.isInteger(value) || _.isDate(value)) { + value = calendar.normalize(new Date(value), options); + } + // If it’s a literal true or any other case, set it to now. + else /*if ( value === true )*/{ + value = calendar.now(type, value, options); + } -/** - * The default classes and prefix to use for the HTML classes. - */ -PickerConstructor.klasses = function( prefix ) { - prefix = prefix || 'picker' + // Return the compiled object. return { + year: isInfiniteValue || value.getFullYear(), + month: isInfiniteValue || value.getMonth(), + date: isInfiniteValue || value.getDate(), + day: isInfiniteValue || value.getDay(), + obj: isInfiniteValue || value, + pick: isInfiniteValue || value.getTime() + }; + }; //DatePicker.prototype.create - picker: prefix, - opened: prefix + '--opened', - focused: prefix + '--focused', - - input: prefix + '__input', - active: prefix + '__input--active', - target: prefix + '__input--target', - holder: prefix + '__holder', + /** + * Create a range limit object using an array, date object, + * literal “true”, or integer relative to another time. + */ + DatePicker.prototype.createRange = function (from, to) { - frame: prefix + '__frame', - wrap: prefix + '__wrap', + var calendar = this, + createDate = function (date) { + if (date === true || $.isArray(date) || _.isDate(date)) { + return calendar.create(date); + } + return date; + }; - box: prefix + '__box' + // Create objects if possible. + if (!_.isInteger(from)) { + from = createDate(from); } -} //PickerConstructor.klasses - - - -/** - * Check if the default theme is being used. - */ -function isUsingDefaultTheme( element ) { - - var theme, - prop = 'position' - - // For IE. - if ( element.currentStyle ) { - theme = element.currentStyle[prop] + if (!_.isInteger(to)) { + to = createDate(to); } - // For normal browsers. - else if ( window.getComputedStyle ) { - theme = getComputedStyle( element )[prop] + // Create relative dates. + if (_.isInteger(from) && $.isPlainObject(to)) { + from = [to.year, to.month, to.date + from]; + } else if (_.isInteger(to) && $.isPlainObject(from)) { + to = [from.year, from.month, from.date + to]; } - return theme == 'fixed' -} + return { + from: createDate(from), + to: createDate(to) + }; + }; //DatePicker.prototype.createRange + /** + * Check if a date unit falls within a date range object. + */ + DatePicker.prototype.withinRange = function (range, dateUnit) { + range = this.createRange(range.from, range.to); + return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick; + }; -/** - * Get the width of the browser’s scrollbar. - * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js - */ -function getScrollbarWidth() { + /** + * Check if two date range objects overlap. + */ + DatePicker.prototype.overlapRanges = function (one, two) { - if ( $html.height() <= $window.height() ) { - return 0 - } + var calendar = this; - var $outer = $( '
          ' ). - appendTo( 'body' ) + // Convert the ranges into comparable dates. + one = calendar.createRange(one.from, one.to); + two = calendar.createRange(two.from, two.to); - // Get the width without scrollbars. - var widthWithoutScroll = $outer[0].offsetWidth + return calendar.withinRange(one, two.from) || calendar.withinRange(one, two.to) || calendar.withinRange(two, one.from) || calendar.withinRange(two, one.to); + }; - // Force adding scrollbars. - $outer.css( 'overflow', 'scroll' ) + /** + * Get the date today. + */ + DatePicker.prototype.now = function (type, value, options) { + value = new Date(); + if (options && options.rel) { + value.setDate(value.getDate() + options.rel); + } + return this.normalize(value, options); + }; - // Add the inner div. - var $inner = $( '
          ' ).appendTo( $outer ) + /** + * Navigate to next/prev month. + */ + DatePicker.prototype.navigate = function (type, value, options) { - // Get the width with scrollbars. - var widthWithScroll = $inner[0].offsetWidth + var targetDateObject, + targetYear, + targetMonth, + targetDate, + isTargetArray = $.isArray(value), + isTargetObject = $.isPlainObject(value), + viewsetObject = this.item.view; /*, + safety = 100*/ - // Remove the divs. - $outer.remove() + if (isTargetArray || isTargetObject) { - // Return the difference between the widths. - return widthWithoutScroll - widthWithScroll -} + if (isTargetObject) { + targetYear = value.year; + targetMonth = value.month; + targetDate = value.date; + } else { + targetYear = +value[0]; + targetMonth = +value[1]; + targetDate = +value[2]; + } + // If we’re navigating months but the view is in a different + // month, navigate to the view’s year and month. + if (options && options.nav && viewsetObject && viewsetObject.month !== targetMonth) { + targetYear = viewsetObject.year; + targetMonth = viewsetObject.month; + } + // Figure out the expected target year and month. + targetDateObject = new Date(targetYear, targetMonth + (options && options.nav ? options.nav : 0), 1); + targetYear = targetDateObject.getFullYear(); + targetMonth = targetDateObject.getMonth(); + + // If the month we’re going to doesn’t have enough days, + // keep decreasing the date until we reach the month’s last date. + while ( /*safety &&*/new Date(targetYear, targetMonth, targetDate).getMonth() !== targetMonth) { + targetDate -= 1; + /*safety -= 1 + if ( !safety ) { + throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.' + }*/ + } -/** - * PickerConstructor helper methods. - */ -PickerConstructor._ = { + value = [targetYear, targetMonth, targetDate]; + } - /** - * Create a group of nodes. Expects: - * ` - { - min: {Integer}, - max: {Integer}, - i: {Integer}, - node: {String}, - item: {Function} - } - * ` - */ - group: function( groupObject ) { + return value; + }; //DatePicker.prototype.navigate - var - // Scope for the looped object - loopObjectScope, - // Create the nodes list - nodesList = '', + /** + * Normalize a date by setting the hours to midnight. + */ + DatePicker.prototype.normalize = function (value /*, options*/) { + value.setHours(0, 0, 0, 0); + return value; + }; - // The counter starts from the `min` - counter = PickerConstructor._.trigger( groupObject.min, groupObject ) + /** + * Measure the range of dates. + */ + DatePicker.prototype.measure = function (type, value /*, options*/) { + var calendar = this; - // Loop from the `min` to `max`, incrementing by `i` - for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) { + // If it’s anything false-y, remove the limits. + if (!value) { + value = type == 'min' ? -Infinity : Infinity; + } - // Trigger the `item` function within scope of the object - loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] ) + // If it’s a string, parse it. + else if (typeof value == 'string') { + value = calendar.parse(type, value); + } - // Splice the subgroup and create nodes out of the sub nodes - nodesList += PickerConstructor._.node( - groupObject.node, - loopObjectScope[ 0 ], // the node - loopObjectScope[ 1 ], // the classes - loopObjectScope[ 2 ] // the attributes - ) + // If it's an integer, get a date relative to today. + else if (_.isInteger(value)) { + value = calendar.now(type, value, { rel: value }); } - // Return the list of nodes - return nodesList - }, //group - + return value; + }; ///DatePicker.prototype.measure - /** - * Create a dom node string - */ - node: function( wrapper, item, klass, attribute ) { - // If the item is false-y, just return an empty string - if ( !item ) return '' + /** + * Create a viewset object based on navigation. + */ + DatePicker.prototype.viewset = function (type, dateObject /*, options*/) { + return this.create([dateObject.year, dateObject.month, 1]); + }; - // If the item is an array, do a join - item = $.isArray( item ) ? item.join( '' ) : item + /** + * Validate a date as enabled and shift if needed. + */ + DatePicker.prototype.validate = function (type, dateObject, options) { - // Check for the class - klass = klass ? ' class="' + klass + '"' : '' + var calendar = this, - // Check for any attributes - attribute = attribute ? ' ' + attribute : '' - // Return the wrapped item - return '<' + wrapper + klass + attribute + '>' + item + '' - }, //node + // Keep a reference to the original date. + originalDateObject = dateObject, - /** - * Lead numbers below 10 with a zero. - */ - lead: function( number ) { - return ( number < 10 ? '0': '' ) + number - }, + // Make sure we have an interval. + interval = options && options.interval ? options.interval : 1, - /** - * Trigger a function otherwise return the value. - */ - trigger: function( callback, scope, args ) { - return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback - }, + // Check if the calendar enabled dates are inverted. + isFlippedBase = calendar.item.enable === -1, - /** - * If the second character is a digit, length is 2 otherwise 1. - */ - digits: function( string ) { - return ( /\d/ ).test( string[ 1 ] ) ? 2 : 1 - }, + // Check if we have any enabled dates after/before now. + hasEnabledBeforeTarget, + hasEnabledAfterTarget, - /** - * Tell if something is a date object. - */ - isDate: function( value ) { - return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() ) - }, + // The min & max limits. + minLimitObject = calendar.item.min, + maxLimitObject = calendar.item.max, - /** - * Tell if something is an integer. - */ - isInteger: function( value ) { - return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0 - }, + // Check if we’ve reached the limit during shifting. + reachedMin, + reachedMax, - /** - * Create ARIA attribute strings. - */ - ariaAttr: ariaAttr -} //PickerConstructor._ + // Check if the calendar is inverted and at least one weekday is enabled. + hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter(function (value) { + // If there’s a date, check where it is relative to the target. + if ($.isArray(value)) { + var dateTime = calendar.create(value).pick; + if (dateTime < dateObject.pick) hasEnabledBeforeTarget = true;else if (dateTime > dateObject.pick) hasEnabledAfterTarget = true; + } + // Return only integers for enabled weekdays. + return _.isInteger(value); + }).length; /*, + safety = 100*/ -/** - * Extend the picker with a component and defaults. - */ -PickerConstructor.extend = function( name, Component ) { + // Cases to validate for: + // [1] Not inverted and date disabled. + // [2] Inverted and some dates enabled. + // [3] Not inverted and out of range. + // + // Cases to **not** validate for: + // • Navigating months. + // • Not inverted and date enabled. + // • Inverted and all dates disabled. + // • ..and anything else. + if (!options || !options.nav) if ( + /* 1 */!isFlippedBase && calendar.disabled(dateObject) || + /* 2 */isFlippedBase && calendar.disabled(dateObject) && (hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget) || + /* 3 */!isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick)) { + + // When inverted, flip the direction if there aren’t any enabled weekdays + // and there are no enabled dates in the direction of the interval. + if (isFlippedBase && !hasEnabledWeekdays && (!hasEnabledAfterTarget && interval > 0 || !hasEnabledBeforeTarget && interval < 0)) { + interval *= -1; + } - // Extend jQuery. - $.fn[ name ] = function( options, action ) { + // Keep looping until we reach an enabled date. + while ( /*safety &&*/calendar.disabled(dateObject)) { - // Grab the component data. - var componentData = this.data( name ) + /*safety -= 1 + if ( !safety ) { + throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.' + }*/ - // If the picker is requested, return the data object. - if ( options == 'picker' ) { - return componentData + // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval. + if (Math.abs(interval) > 1 && (dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month)) { + dateObject = originalDateObject; + interval = interval > 0 ? 1 : -1; } - // If the component data exists and `options` is a string, carry out the action. - if ( componentData && typeof options == 'string' ) { - return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] ) + // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit. + if (dateObject.pick <= minLimitObject.pick) { + reachedMin = true; + interval = 1; + dateObject = calendar.create([minLimitObject.year, minLimitObject.month, minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)]); + } else if (dateObject.pick >= maxLimitObject.pick) { + reachedMax = true; + interval = -1; + dateObject = calendar.create([maxLimitObject.year, maxLimitObject.month, maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)]); } - // Otherwise go through each matched element and if the component - // doesn’t exist, create a new picker using `this` element - // and merging the defaults and options with a deep copy. - return this.each( function() { - var $this = $( this ) - if ( !$this.data( name ) ) { - new PickerConstructor( this, name, Component, options ) - } - }) - } - - // Set the defaults. - $.fn[ name ].defaults = Component.defaults -} //PickerConstructor.extend - - - -function aria(element, attribute, value) { - if ( $.isPlainObject(attribute) ) { - for ( var key in attribute ) { - ariaSet(element, key, attribute[key]) + // If we’ve reached both limits, just break out of the loop. + if (reachedMin && reachedMax) { + break; } - } - else { - ariaSet(element, attribute, value) - } -} -function ariaSet(element, attribute, value) { - element.setAttribute( - (attribute == 'role' ? '' : 'aria-') + attribute, - value - ) -} -function ariaAttr(attribute, data) { - if ( !$.isPlainObject(attribute) ) { - attribute = { attribute: data } - } - data = '' - for ( var key in attribute ) { - var attr = (key == 'role' ? '' : 'aria-') + key, - attrVal = attribute[key] - data += attrVal == null ? '' : attr + '="' + attribute[key] + '"' - } - return data -} - -// IE8 bug throws an error for activeElements within iframes. -function getActiveElement() { - try { - return document.activeElement - } catch ( err ) { } -} - - -// Expose the picker constructor. -return PickerConstructor + // Finally, create the shifted date using the interval and keep looping. + dateObject = calendar.create([dateObject.year, dateObject.month, dateObject.date + interval]); + } + } //endif -})); + // Return the date object settled on. + return dateObject; + }; //DatePicker.prototype.validate -;/*! - * Date picker for pickadate.js v3.5.0 - * http://amsul.github.io/pickadate.js/date.htm - */ + /** + * Check if a date is disabled. + */ + DatePicker.prototype.disabled = function (dateToVerify) { -(function ( factory ) { + var calendar = this, - // AMD. - if ( typeof define == 'function' && define.amd ) - define( ['picker', 'jquery'], factory ) - // Node.js/browserify. - else if ( typeof exports == 'object' ) - module.exports = factory( require('./picker.js'), require('jquery') ) + // Filter through the disabled dates to check if this is one. + isDisabledMatch = calendar.item.disable.filter(function (dateToDisable) { - // Browser globals. - else factory( Picker, jQuery ) + // If the date is a number, match the weekday with 0index and `firstDay` check. + if (_.isInteger(dateToDisable)) { + return dateToVerify.day === (calendar.settings.firstDay ? dateToDisable : dateToDisable - 1) % 7; + } -}(function( Picker, $ ) { + // If it’s an array or a native JS date, create and match the exact date. + if ($.isArray(dateToDisable) || _.isDate(dateToDisable)) { + return dateToVerify.pick === calendar.create(dateToDisable).pick; + } + // If it’s an object, match a date within the “from” and “to” range. + if ($.isPlainObject(dateToDisable)) { + return calendar.withinRange(dateToDisable, dateToVerify); + } + }); -/** - * Globals and constants - */ -var DAYS_IN_WEEK = 7, - WEEKS_IN_CALENDAR = 6, - _ = Picker._ + // If this date matches a disabled date, confirm it’s not inverted. + isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function (dateToDisable) { + return $.isArray(dateToDisable) && dateToDisable[3] == 'inverted' || $.isPlainObject(dateToDisable) && dateToDisable.inverted; + }).length; + // Check the calendar “enabled” flag and respectively flip the + // disabled state. Then also check if it’s beyond the min/max limits. + return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch || dateToVerify.pick < calendar.item.min.pick || dateToVerify.pick > calendar.item.max.pick; + }; //DatePicker.prototype.disabled -/** - * The date picker constructor - */ -function DatePicker( picker, settings ) { + /** + * Parse a string into a usable type. + */ + DatePicker.prototype.parse = function (type, value, options) { var calendar = this, - element = picker.$node[ 0 ], - elementValue = element.value, - elementDataValue = picker.$node.data( 'value' ), - valueString = elementDataValue || elementValue, - formatString = elementDataValue ? settings.formatSubmit : settings.format, - isRTL = function() { - - return element.currentStyle ? + parsingObject = {}; - // For IE. - element.currentStyle.direction == 'rtl' : - - // For normal browsers. - getComputedStyle( picker.$root[0] ).direction == 'rtl' - } - - calendar.settings = settings - calendar.$node = picker.$node + // If it’s already parsed, we’re good. + if (!value || typeof value != 'string') { + return value; + } - // The queue of methods that will be used to build item objects. - calendar.queue = { - min: 'measure create', - max: 'measure create', - now: 'now create', - select: 'parse create validate', - highlight: 'parse navigate create validate', - view: 'parse create validate viewset', - disable: 'deactivate', - enable: 'activate' + // We need a `.format` to parse the value with. + if (!(options && options.format)) { + options = options || {}; + options.format = calendar.settings.format; } - // The component's item object. - calendar.item = {} + // Convert the format into an array and then map through it. + calendar.formats.toArray(options.format).map(function (label) { - calendar.item.clear = null - calendar.item.disable = ( settings.disable || [] ).slice( 0 ) - calendar.item.enable = -(function( collectionDisabled ) { - return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1 - })( calendar.item.disable ) + var + // Grab the formatting label. + formattingLabel = calendar.formats[label], - calendar. - set( 'min', settings.min ). - set( 'max', settings.max ). - set( 'now' ) - // When there’s a value, set the `select`, which in turn - // also sets the `highlight` and `view`. - if ( valueString ) { - calendar.set( 'select', valueString, { format: formatString }) - } + // The format length is from the formatting label function or the + // label length without the escaping exclamation (!) mark. + formatLength = formattingLabel ? _.trigger(formattingLabel, calendar, [value, parsingObject]) : label.replace(/^!/, '').length; - // If there’s no value, default to highlighting “today”. - else { - calendar. - set( 'select', null ). - set( 'highlight', calendar.item.now ) - } + // If there's a format label, split the value up to the format length. + // Then add it to the parsing object with appropriate label. + if (formattingLabel) { + parsingObject[label] = value.substr(0, formatLength); + } + // Update the value as the substring from format length to end. + value = value.substr(formatLength); + }); - // The keycode to movement mapping. - calendar.key = { - 40: 7, // Down - 38: -7, // Up - 39: function() { return isRTL() ? -1 : 1 }, // Right - 37: function() { return isRTL() ? 1 : -1 }, // Left - go: function( timeChange ) { - var highlightedObject = calendar.item.highlight, - targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange ) - calendar.set( - 'highlight', - targetDate, - { interval: timeChange } - ) - this.render() - } - } + // Compensate for month 0index. + return [parsingObject.yyyy || parsingObject.yy, +(parsingObject.mm || parsingObject.m) - 1, parsingObject.dd || parsingObject.d]; + }; //DatePicker.prototype.parse - // Bind some picker events. - picker. - on( 'render', function() { - picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() { - var value = this.value - if ( value ) { - picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] ) - picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' ) - } - }) - picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() { - var value = this.value - if ( value ) { - picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] ) - picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' ) - } - }) - }, 1 ). - on( 'open', function() { - var includeToday = '' - if ( calendar.disabled( calendar.get('now') ) ) { - includeToday = ':not(.' + settings.klass.buttonToday + ')' - } - picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false ) - }, 1 ). - on( 'close', function() { - picker.$root.find( 'button, select' ).attr( 'disabled', true ) - }, 1 ) + /** + * Various formats to display the object in. + */ + DatePicker.prototype.formats = function () { -} //DatePicker + // Return the length of the first word in a collection. + function getWordLengthFromCollection(string, collection, dateObject) { + // Grab the first word from the string. + var word = string.match(/\w+/)[0]; -/** - * Set a datepicker item object. - */ -DatePicker.prototype.set = function( type, value, options ) { + // If there's no month index, add it to the date object + if (!dateObject.mm && !dateObject.m) { + dateObject.m = collection.indexOf(word) + 1; + } - var calendar = this, - calendarItem = calendar.item + // Return the length of the word. + return word.length; + } - // If the value is `null` just set it immediately. - if ( value === null ) { - if ( type == 'clear' ) type = 'select' - calendarItem[ type ] = value - return calendar + // Get the length of the first word in a string. + function getFirstWordLength(string) { + return string.match(/\w+/)[0].length; } - // Otherwise go through the queue of methods, and invoke the functions. - // Update this as the time unit, and set the final value as this item. - // * In the case of `enable`, keep the queue but set `disable` instead. - // And in the case of `flip`, keep the queue but set `enable` instead. - calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) { - value = calendar[ method ]( type, value, options ) - return value - }).pop() + return { - // Check if we need to cascade through more updates. - if ( type == 'select' ) { - calendar.set( 'highlight', calendarItem.select, options ) - } - else if ( type == 'highlight' ) { - calendar.set( 'view', calendarItem.highlight, options ) - } - else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) { - if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) { - calendar.set( 'select', calendarItem.select, options ) - } - if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) { - calendar.set( 'highlight', calendarItem.highlight, options ) - } - } + d: function (string, dateObject) { - return calendar -} //DatePicker.prototype.set + // If there's string, then get the digits length. + // Otherwise return the selected date. + return string ? _.digits(string) : dateObject.date; + }, + dd: function (string, dateObject) { + // If there's a string, then the length is always 2. + // Otherwise return the selected date with a leading zero. + return string ? 2 : _.lead(dateObject.date); + }, + ddd: function (string, dateObject) { -/** - * Get a datepicker item object. - */ -DatePicker.prototype.get = function( type ) { - return this.item[ type ] -} //DatePicker.prototype.get + // If there's a string, then get the length of the first word. + // Otherwise return the short selected weekday. + return string ? getFirstWordLength(string) : this.settings.weekdaysShort[dateObject.day]; + }, + dddd: function (string, dateObject) { + // If there's a string, then get the length of the first word. + // Otherwise return the full selected weekday. + return string ? getFirstWordLength(string) : this.settings.weekdaysFull[dateObject.day]; + }, + m: function (string, dateObject) { -/** - * Create a picker date object. - */ -DatePicker.prototype.create = function( type, value, options ) { + // If there's a string, then get the length of the digits + // Otherwise return the selected month with 0index compensation. + return string ? _.digits(string) : dateObject.month + 1; + }, + mm: function (string, dateObject) { - var isInfiniteValue, - calendar = this + // If there's a string, then the length is always 2. + // Otherwise return the selected month with 0index and leading zero. + return string ? 2 : _.lead(dateObject.month + 1); + }, + mmm: function (string, dateObject) { - // If there’s no value, use the type as the value. - value = value === undefined ? type : value + var collection = this.settings.monthsShort; + // If there's a string, get length of the relevant month from the short + // months collection. Otherwise return the selected month from that collection. + return string ? getWordLengthFromCollection(string, collection, dateObject) : collection[dateObject.month]; + }, + mmmm: function (string, dateObject) { - // If it’s infinity, update the value. - if ( value == -Infinity || value == Infinity ) { - isInfiniteValue = value - } + var collection = this.settings.monthsFull; - // If it’s an object, use the native date object. - else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) { - value = value.obj - } + // If there's a string, get length of the relevant month from the full + // months collection. Otherwise return the selected month from that collection. + return string ? getWordLengthFromCollection(string, collection, dateObject) : collection[dateObject.month]; + }, + yy: function (string, dateObject) { - // If it’s an array, convert it into a date and make sure - // that it’s a valid date – otherwise default to today. - else if ( $.isArray( value ) ) { - value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] ) - value = _.isDate( value ) ? value : calendar.create().obj - } + // If there's a string, then the length is always 2. + // Otherwise return the selected year by slicing out the first 2 digits. + return string ? 2 : ('' + dateObject.year).slice(2); + }, + yyyy: function (string, dateObject) { - // If it’s a number or date object, make a normalized date. - else if ( _.isInteger( value ) || _.isDate( value ) ) { - value = calendar.normalize( new Date( value ), options ) - } + // If there's a string, then the length is always 4. + // Otherwise return the selected year. + return string ? 4 : dateObject.year; + }, - // If it’s a literal true or any other case, set it to now. - else /*if ( value === true )*/ { - value = calendar.now( type, value, options ) - } + // Create an array by splitting the formatting string passed. + toArray: function (formatString) { + return formatString.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g); + }, - // Return the compiled object. - return { - year: isInfiniteValue || value.getFullYear(), - month: isInfiniteValue || value.getMonth(), - date: isInfiniteValue || value.getDate(), - day: isInfiniteValue || value.getDay(), - obj: isInfiniteValue || value, - pick: isInfiniteValue || value.getTime() - } -} //DatePicker.prototype.create + // Format an object into a string using the formatting options. + toString: function (formatString, itemObject) { + var calendar = this; + return calendar.formats.toArray(formatString).map(function (label) { + return _.trigger(calendar.formats[label], calendar, [0, itemObject]) || label.replace(/^!/, ''); + }).join(''); + } + }; + }(); //DatePicker.prototype.formats -/** - * Create a range limit object using an array, date object, - * literal “true”, or integer relative to another time. - */ -DatePicker.prototype.createRange = function( from, to ) { + /** + * Check if two date units are the exact. + */ + DatePicker.prototype.isDateExact = function (one, two) { - var calendar = this, - createDate = function( date ) { - if ( date === true || $.isArray( date ) || _.isDate( date ) ) { - return calendar.create( date ) - } - return date - } + var calendar = this; - // Create objects if possible. - if ( !_.isInteger( from ) ) { - from = createDate( from ) - } - if ( !_.isInteger( to ) ) { - to = createDate( to ) + // When we’re working with weekdays, do a direct comparison. + if (_.isInteger(one) && _.isInteger(two) || typeof one == 'boolean' && typeof two == 'boolean') { + return one === two; } - // Create relative dates. - if ( _.isInteger( from ) && $.isPlainObject( to ) ) { - from = [ to.year, to.month, to.date + from ]; - } - else if ( _.isInteger( to ) && $.isPlainObject( from ) ) { - to = [ from.year, from.month, from.date + to ]; + // When we’re working with date representations, compare the “pick” value. + if ((_.isDate(one) || $.isArray(one)) && (_.isDate(two) || $.isArray(two))) { + return calendar.create(one).pick === calendar.create(two).pick; } - return { - from: createDate( from ), - to: createDate( to ) + // When we’re working with range objects, compare the “from” and “to”. + if ($.isPlainObject(one) && $.isPlainObject(two)) { + return calendar.isDateExact(one.from, two.from) && calendar.isDateExact(one.to, two.to); } -} //DatePicker.prototype.createRange + return false; + }; -/** - * Check if a date unit falls within a date range object. - */ -DatePicker.prototype.withinRange = function( range, dateUnit ) { - range = this.createRange(range.from, range.to) - return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick -} + /** + * Check if two date units overlap. + */ + DatePicker.prototype.isDateOverlap = function (one, two) { + var calendar = this, + firstDay = calendar.settings.firstDay ? 1 : 0; -/** - * Check if two date range objects overlap. - */ -DatePicker.prototype.overlapRanges = function( one, two ) { + // When we’re working with a weekday index, compare the days. + if (_.isInteger(one) && (_.isDate(two) || $.isArray(two))) { + one = one % 7 + firstDay; + return one === calendar.create(two).day + 1; + } + if (_.isInteger(two) && (_.isDate(one) || $.isArray(one))) { + two = two % 7 + firstDay; + return two === calendar.create(one).day + 1; + } - var calendar = this + // When we’re working with range objects, check if the ranges overlap. + if ($.isPlainObject(one) && $.isPlainObject(two)) { + return calendar.overlapRanges(one, two); + } - // Convert the ranges into comparable dates. - one = calendar.createRange( one.from, one.to ) - two = calendar.createRange( two.from, two.to ) + return false; + }; - return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) || - calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to ) -} + /** + * Flip the “enabled” state. + */ + DatePicker.prototype.flipEnable = function (val) { + var itemObject = this.item; + itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1); + }; + /** + * Mark a collection of dates as “disabled”. + */ + DatePicker.prototype.deactivate = function (type, datesToDisable) { -/** - * Get the date today. - */ -DatePicker.prototype.now = function( type, value, options ) { - value = new Date() - if ( options && options.rel ) { - value.setDate( value.getDate() + options.rel ) + var calendar = this, + disabledItems = calendar.item.disable.slice(0); + + // If we’re flipping, that’s all we need to do. + if (datesToDisable == 'flip') { + calendar.flipEnable(); + } else if (datesToDisable === false) { + calendar.flipEnable(1); + disabledItems = []; + } else if (datesToDisable === true) { + calendar.flipEnable(-1); + disabledItems = []; } - return this.normalize( value, options ) -} + // Otherwise go through the dates to disable. + else { -/** - * Navigate to next/prev month. - */ -DatePicker.prototype.navigate = function( type, value, options ) { + datesToDisable.map(function (unitToDisable) { - var targetDateObject, - targetYear, - targetMonth, - targetDate, - isTargetArray = $.isArray( value ), - isTargetObject = $.isPlainObject( value ), - viewsetObject = this.item.view/*, - safety = 100*/ + var matchFound; + // When we have disabled items, check for matches. + // If something is matched, immediately break out. + for (var index = 0; index < disabledItems.length; index += 1) { + if (calendar.isDateExact(unitToDisable, disabledItems[index])) { + matchFound = true; + break; + } + } - if ( isTargetArray || isTargetObject ) { + // If nothing was found, add the validated unit to the collection. + if (!matchFound) { + if (_.isInteger(unitToDisable) || _.isDate(unitToDisable) || $.isArray(unitToDisable) || $.isPlainObject(unitToDisable) && unitToDisable.from && unitToDisable.to) { + disabledItems.push(unitToDisable); + } + } + }); + } - if ( isTargetObject ) { - targetYear = value.year - targetMonth = value.month - targetDate = value.date - } - else { - targetYear = +value[0] - targetMonth = +value[1] - targetDate = +value[2] - } + // Return the updated collection. + return disabledItems; + }; //DatePicker.prototype.deactivate - // If we’re navigating months but the view is in a different - // month, navigate to the view’s year and month. - if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) { - targetYear = viewsetObject.year - targetMonth = viewsetObject.month - } - // Figure out the expected target year and month. - targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 ) - targetYear = targetDateObject.getFullYear() - targetMonth = targetDateObject.getMonth() + /** + * Mark a collection of dates as “enabled”. + */ + DatePicker.prototype.activate = function (type, datesToEnable) { - // If the month we’re going to doesn’t have enough days, - // keep decreasing the date until we reach the month’s last date. - while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) { - targetDate -= 1 - /*safety -= 1 - if ( !safety ) { - throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.' - }*/ - } + var calendar = this, + disabledItems = calendar.item.disable, + disabledItemsCount = disabledItems.length; - value = [ targetYear, targetMonth, targetDate ] + // If we’re flipping, that’s all we need to do. + if (datesToEnable == 'flip') { + calendar.flipEnable(); + } else if (datesToEnable === true) { + calendar.flipEnable(1); + disabledItems = []; + } else if (datesToEnable === false) { + calendar.flipEnable(-1); + disabledItems = []; } - return value -} //DatePicker.prototype.navigate - + // Otherwise go through the disabled dates. + else { -/** - * Normalize a date by setting the hours to midnight. - */ -DatePicker.prototype.normalize = function( value/*, options*/ ) { - value.setHours( 0, 0, 0, 0 ) - return value -} + datesToEnable.map(function (unitToEnable) { + var matchFound, disabledUnit, index, isExactRange; -/** - * Measure the range of dates. - */ -DatePicker.prototype.measure = function( type, value/*, options*/ ) { + // Go through the disabled items and try to find a match. + for (index = 0; index < disabledItemsCount; index += 1) { - var calendar = this + disabledUnit = disabledItems[index]; - // If it’s anything false-y, remove the limits. - if ( !value ) { - value = type == 'min' ? -Infinity : Infinity - } + // When an exact match is found, remove it from the collection. + if (calendar.isDateExact(disabledUnit, unitToEnable)) { + matchFound = disabledItems[index] = null; + isExactRange = true; + break; + } - // If it’s a string, parse it. - else if ( typeof value == 'string' ) { - value = calendar.parse( type, value ) - } + // When an overlapped match is found, add the “inverted” state to it. + else if (calendar.isDateOverlap(disabledUnit, unitToEnable)) { + if ($.isPlainObject(unitToEnable)) { + unitToEnable.inverted = true; + matchFound = unitToEnable; + } else if ($.isArray(unitToEnable)) { + matchFound = unitToEnable; + if (!matchFound[3]) matchFound.push('inverted'); + } else if (_.isDate(unitToEnable)) { + matchFound = [unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted']; + } + break; + } + } - // If it's an integer, get a date relative to today. - else if ( _.isInteger( value ) ) { - value = calendar.now( type, value, { rel: value } ) - } + // If a match was found, remove a previous duplicate entry. + if (matchFound) for (index = 0; index < disabledItemsCount; index += 1) { + if (calendar.isDateExact(disabledItems[index], unitToEnable)) { + disabledItems[index] = null; + break; + } + } - return value -} ///DatePicker.prototype.measure + // In the event that we’re dealing with an exact range of dates, + // make sure there are no “inverted” dates because of it. + if (isExactRange) for (index = 0; index < disabledItemsCount; index += 1) { + if (calendar.isDateOverlap(disabledItems[index], unitToEnable)) { + disabledItems[index] = null; + break; + } + } + // If something is still matched, add it into the collection. + if (matchFound) { + disabledItems.push(matchFound); + } + }); + } -/** - * Create a viewset object based on navigation. - */ -DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) { - return this.create([ dateObject.year, dateObject.month, 1 ]) -} + // Return the updated collection. + return disabledItems.filter(function (val) { + return val != null; + }); + }; //DatePicker.prototype.activate -/** - * Validate a date as enabled and shift if needed. - */ -DatePicker.prototype.validate = function( type, dateObject, options ) { + /** + * Create a string for the nodes in the picker. + */ + DatePicker.prototype.nodes = function (isOpen) { var calendar = this, + settings = calendar.settings, + calendarItem = calendar.item, + nowObject = calendarItem.now, + selectedObject = calendarItem.select, + highlightedObject = calendarItem.highlight, + viewsetObject = calendarItem.view, + disabledCollection = calendarItem.disable, + minLimitObject = calendarItem.min, + maxLimitObject = calendarItem.max, - // Keep a reference to the original date. - originalDateObject = dateObject, - // Make sure we have an interval. - interval = options && options.interval ? options.interval : 1, + // Create the calendar table head using a copy of weekday labels collection. + // * We do a copy so we don't mutate the original array. + tableHead = function (collection, fullCollection) { - // Check if the calendar enabled dates are inverted. - isFlippedBase = calendar.item.enable === -1, + // If the first day should be Monday, move Sunday to the end. + if (settings.firstDay) { + collection.push(collection.shift()); + fullCollection.push(fullCollection.shift()); + } - // Check if we have any enabled dates after/before now. - hasEnabledBeforeTarget, hasEnabledAfterTarget, + // Create and return the table head group. + return _.node('thead', _.node('tr', _.group({ + min: 0, + max: DAYS_IN_WEEK - 1, + i: 1, + node: 'th', + item: function (counter) { + return [collection[counter], settings.klass.weekdays, 'scope=col title="' + fullCollection[counter] + '"']; + } + }))); //endreturn - // The min & max limits. - minLimitObject = calendar.item.min, - maxLimitObject = calendar.item.max, + // Materialize modified + }((settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysLetter).slice(0), settings.weekdaysFull.slice(0)), + //tableHead - // Check if we’ve reached the limit during shifting. - reachedMin, reachedMax, - // Check if the calendar is inverted and at least one weekday is enabled. - hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) { + // Create the nav for next/prev month. + createMonthNav = function (next) { - // If there’s a date, check where it is relative to the target. - if ( $.isArray( value ) ) { - var dateTime = calendar.create( value ).pick - if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true - else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true - } + // Otherwise, return the created month tag. + return _.node('div', ' ', settings.klass['nav' + (next ? 'Next' : 'Prev')] + ( - // Return only integers for enabled weekdays. - return _.isInteger( value ) - }).length/*, + // If the focused month is outside the range, disabled the button. + next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month || !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ? ' ' + settings.klass.navDisabled : ''), 'data-nav=' + (next || -1) + ' ' + _.ariaAttr({ + role: 'button', + controls: calendar.$node[0].id + '_table' + }) + ' ' + 'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev) + '"'); //endreturn + }, + //createMonthNav - safety = 100*/ + // Create the month label. + //Materialize modified + createMonthLabel = function (override) { + var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull; - // Cases to validate for: - // [1] Not inverted and date disabled. - // [2] Inverted and some dates enabled. - // [3] Not inverted and out of range. - // - // Cases to **not** validate for: - // • Navigating months. - // • Not inverted and date enabled. - // • Inverted and all dates disabled. - // • ..and anything else. - if ( !options || !options.nav ) if ( - /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) || - /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) || - /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) ) - ) { + // Materialize modified + if (override == "short_months") { + monthsCollection = settings.monthsShort; + } + // If there are months to select, add a dropdown menu. + if (settings.selectMonths && override == undefined) { - // When inverted, flip the direction if there aren’t any enabled weekdays - // and there are no enabled dates in the direction of the interval. - if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) { - interval *= -1 - } + return _.node('select', _.group({ + min: 0, + max: 11, + i: 1, + node: 'option', + item: function (loopedMonth) { + return [ - // Keep looping until we reach an enabled date. - while ( /*safety &&*/ calendar.disabled( dateObject ) ) { + // The looped month and no classes. + monthsCollection[loopedMonth], 0, - /*safety -= 1 - if ( !safety ) { - throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.' - }*/ + // Set the value and selected index. + 'value=' + loopedMonth + (viewsetObject.month == loopedMonth ? ' selected' : '') + (viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month || viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month ? ' disabled' : '')]; + } + }), settings.klass.selectMonth + ' browser-default', (isOpen ? '' : 'disabled') + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' + 'title="' + settings.labelMonthSelect + '"'); + } + // Materialize modified + if (override == "short_months") if (selectedObject != null) return monthsCollection[selectedObject.month];else return monthsCollection[viewsetObject.month]; - // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval. - if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) { - dateObject = originalDateObject - interval = interval > 0 ? 1 : -1 - } + // If there's a need for a month selector + return _.node('div', monthsCollection[viewsetObject.month], settings.klass.month); + }, + //createMonthLabel - // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit. - if ( dateObject.pick <= minLimitObject.pick ) { - reachedMin = true - interval = 1 - dateObject = calendar.create([ - minLimitObject.year, - minLimitObject.month, - minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1) - ]) - } - else if ( dateObject.pick >= maxLimitObject.pick ) { - reachedMax = true - interval = -1 - dateObject = calendar.create([ - maxLimitObject.year, - maxLimitObject.month, - maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1) - ]) - } + // Create the year label. + // Materialize modified + createYearLabel = function (override) { + var focusedYear = viewsetObject.year, - // If we’ve reached both limits, just break out of the loop. - if ( reachedMin && reachedMax ) { - break - } + // If years selector is set to a literal "true", set it to 5. Otherwise + // divide in half to get half before and half after focused year. + numberYears = settings.selectYears === true ? 5 : ~~(settings.selectYears / 2); - // Finally, create the shifted date using the interval and keep looping. - dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ]) - } + // If there are years to select, add a dropdown menu. + if (numberYears) { - } //endif + var minYear = minLimitObject.year, + maxYear = maxLimitObject.year, + lowestYear = focusedYear - numberYears, + highestYear = focusedYear + numberYears; + // If the min year is greater than the lowest year, increase the highest year + // by the difference and set the lowest year to the min year. + if (minYear > lowestYear) { + highestYear += minYear - lowestYear; + lowestYear = minYear; + } - // Return the date object settled on. - return dateObject -} //DatePicker.prototype.validate + // If the max year is less than the highest year, decrease the lowest year + // by the lower of the two: available and needed years. Then set the + // highest year to the max year. + if (maxYear < highestYear) { + var availableYears = lowestYear - minYear, + neededYears = highestYear - maxYear; -/** - * Check if a date is disabled. - */ -DatePicker.prototype.disabled = function( dateToVerify ) { + lowestYear -= availableYears > neededYears ? neededYears : availableYears; + highestYear = maxYear; + } - var - calendar = this, + if (settings.selectYears && override == undefined) { + return _.node('select', _.group({ + min: lowestYear, + max: highestYear, + i: 1, + node: 'option', + item: function (loopedYear) { + return [ - // Filter through the disabled dates to check if this is one. - isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) { + // The looped year and no classes. + loopedYear, 0, - // If the date is a number, match the weekday with 0index and `firstDay` check. - if ( _.isInteger( dateToDisable ) ) { - return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7 + // Set the value and selected index. + 'value=' + loopedYear + (focusedYear == loopedYear ? ' selected' : '')]; } + }), settings.klass.selectYear + ' browser-default', (isOpen ? '' : 'disabled') + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' + 'title="' + settings.labelYearSelect + '"'); + } + } - // If it’s an array or a native JS date, create and match the exact date. - if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) { - return dateToVerify.pick === calendar.create( dateToDisable ).pick - } + // Materialize modified + if (override === 'raw' && selectedObject != null) { + return _.node('div', selectedObject.year); + } - // If it’s an object, match a date within the “from” and “to” range. - if ( $.isPlainObject( dateToDisable ) ) { - return calendar.withinRange( dateToDisable, dateToVerify ) - } - }) + // Otherwise just return the year focused + return _.node('div', focusedYear, settings.klass.year); + }; //createYearLabel - // If this date matches a disabled date, confirm it’s not inverted. - isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) { - return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' || - $.isPlainObject( dateToDisable ) && dateToDisable.inverted - }).length - // Check the calendar “enabled” flag and respectively flip the - // disabled state. Then also check if it’s beyond the min/max limits. - return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch || - dateToVerify.pick < calendar.item.min.pick || - dateToVerify.pick > calendar.item.max.pick + // Materialize modified + createDayLabel = function () { + if (selectedObject != null) return selectedObject.date;else return nowObject.date; + }; + createWeekdayLabel = function () { + var display_day; + + if (selectedObject != null) display_day = selectedObject.day;else display_day = nowObject.day; + var weekday = settings.weekdaysShort[display_day]; + return weekday; + }; -} //DatePicker.prototype.disabled + // Create and return the entire calendar. + return _.node( + // Date presentation View + 'div', _.node( + // Div for Year + 'div', createYearLabel("raw"), settings.klass.year_display) + _.node('span', createWeekdayLabel() + ', ', "picker__weekday-display") + _.node( + // Div for short Month + 'span', createMonthLabel("short_months") + ' ', settings.klass.month_display) + _.node( + // Div for Day + 'span', createDayLabel(), settings.klass.day_display), settings.klass.date_display) + + // Calendar container + _.node('div', _.node('div', _.node('div', (settings.selectYears ? createMonthLabel() + createYearLabel() : createMonthLabel() + createYearLabel()) + createMonthNav() + createMonthNav(1), settings.klass.header) + _.node('table', tableHead + _.node('tbody', _.group({ + min: 0, + max: WEEKS_IN_CALENDAR - 1, + i: 1, + node: 'tr', + item: function (rowCounter) { + + // If Monday is the first day and the month starts on Sunday, shift the date back a week. + var shiftDateBy = settings.firstDay && calendar.create([viewsetObject.year, viewsetObject.month, 1]).day === 0 ? -7 : 0; + + return [_.group({ + min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index + max: function () { + return this.min + DAYS_IN_WEEK - 1; + }, + i: 1, + node: 'td', + item: function (targetDate) { + + // Convert the time date from a relative date to a target date. + targetDate = calendar.create([viewsetObject.year, viewsetObject.month, targetDate + (settings.firstDay ? 1 : 0)]); + + var isSelected = selectedObject && selectedObject.pick == targetDate.pick, + isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick, + isDisabled = disabledCollection && calendar.disabled(targetDate) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick, + formattedDate = _.trigger(calendar.formats.toString, calendar, [settings.format, targetDate]); + + return [_.node('div', targetDate.date, function (klasses) { + + // Add the `infocus` or `outfocus` classes based on month in view. + klasses.push(viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus); + + // Add the `today` class if needed. + if (nowObject.pick == targetDate.pick) { + klasses.push(settings.klass.now); + } -/** - * Parse a string into a usable type. - */ -DatePicker.prototype.parse = function( type, value, options ) { + // Add the `selected` class if something's selected and the time matches. + if (isSelected) { + klasses.push(settings.klass.selected); + } - var calendar = this, - parsingObject = {} + // Add the `highlighted` class if something's highlighted and the time matches. + if (isHighlighted) { + klasses.push(settings.klass.highlighted); + } - // If it’s already parsed, we’re good. - if ( !value || typeof value != 'string' ) { - return value - } + // Add the `disabled` class if something's disabled and the object matches. + if (isDisabled) { + klasses.push(settings.klass.disabled); + } - // We need a `.format` to parse the value with. - if ( !( options && options.format ) ) { - options = options || {} - options.format = calendar.settings.format - } + return klasses.join(' '); + }([settings.klass.day]), 'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({ + role: 'gridcell', + label: formattedDate, + selected: isSelected && calendar.$node.val() === formattedDate ? true : null, + activedescendant: isHighlighted ? true : null, + disabled: isDisabled ? true : null + }) + ' ' + (isDisabled ? '' : 'tabindex="0"')), '', _.ariaAttr({ role: 'presentation' })]; //endreturn + } + })]; //endreturn + } + })), settings.klass.table, 'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({ + role: 'grid', + controls: calendar.$node[0].id, + readonly: true + })), settings.klass.calendar_container) // end calendar - // Convert the format into an array and then map through it. - calendar.formats.toArray( options.format ).map( function( label ) { + + - var - // Grab the formatting label. - formattingLabel = calendar.formats[ label ], + // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”. + _.node('div', _.node('button', settings.today, "btn-flat picker__today waves-effect", 'type=button data-pick=' + nowObject.pick + (isOpen && !calendar.disabled(nowObject) ? '' : ' disabled') + ' ' + _.ariaAttr({ controls: calendar.$node[0].id })) + _.node('button', settings.clear, "btn-flat picker__clear waves-effect", 'type=button data-clear=1' + (isOpen ? '' : ' disabled') + ' ' + _.ariaAttr({ controls: calendar.$node[0].id })) + _.node('button', settings.close, "btn-flat picker__close waves-effect", 'type=button data-close=true ' + (isOpen ? '' : ' disabled') + ' ' + _.ariaAttr({ controls: calendar.$node[0].id })), settings.klass.footer), 'picker__container__wrapper'); //endreturn + }; //DatePicker.prototype.nodes - // The format length is from the formatting label function or the - // label length without the escaping exclamation (!) mark. - formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length - // If there's a format label, split the value up to the format length. - // Then add it to the parsing object with appropriate label. - if ( formattingLabel ) { - parsingObject[ label ] = value.substr( 0, formatLength ) - } + /** + * The date picker defaults. + */ + DatePicker.defaults = function (prefix) { - // Update the value as the substring from format length to end. - value = value.substr( formatLength ) - }) + return { - // Compensate for month 0index. - return [ - parsingObject.yyyy || parsingObject.yy, - +( parsingObject.mm || parsingObject.m ) - 1, - parsingObject.dd || parsingObject.d - ] -} //DatePicker.prototype.parse + // The title label to use for the month nav buttons + labelMonthNext: 'Next month', + labelMonthPrev: 'Previous month', + // The title label to use for the dropdown selectors + labelMonthSelect: 'Select a month', + labelYearSelect: 'Select a year', -/** - * Various formats to display the object in. - */ -DatePicker.prototype.formats = (function() { + // Months and weekdays + monthsFull: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + weekdaysFull: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - // Return the length of the first word in a collection. - function getWordLengthFromCollection( string, collection, dateObject ) { + // Materialize modified + weekdaysLetter: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], - // Grab the first word from the string. - var word = string.match( /\w+/ )[ 0 ] + // Today and clear + today: 'Today', + clear: 'Clear', + close: 'Ok', - // If there's no month index, add it to the date object - if ( !dateObject.mm && !dateObject.m ) { - dateObject.m = collection.indexOf( word ) + 1 - } + // Picker close behavior (Prevent a change in behaviour for backwards compatibility) + closeOnSelect: false, - // Return the length of the word. - return word.length - } + // The format to show on the `input` element + format: 'd mmmm, yyyy', - // Get the length of the first word in a string. - function getFirstWordLength( string ) { - return string.match( /\w+/ )[ 0 ].length - } + // Classes + klass: { - return { + table: prefix + 'table', - d: function( string, dateObject ) { + header: prefix + 'header', - // If there's string, then get the digits length. - // Otherwise return the selected date. - return string ? _.digits( string ) : dateObject.date - }, - dd: function( string, dateObject ) { + // Materialize Added klasses + date_display: prefix + 'date-display', + day_display: prefix + 'day-display', + month_display: prefix + 'month-display', + year_display: prefix + 'year-display', + calendar_container: prefix + 'calendar-container', + // end - // If there's a string, then the length is always 2. - // Otherwise return the selected date with a leading zero. - return string ? 2 : _.lead( dateObject.date ) - }, - ddd: function( string, dateObject ) { - // If there's a string, then get the length of the first word. - // Otherwise return the short selected weekday. - return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ] - }, - dddd: function( string, dateObject ) { + navPrev: prefix + 'nav--prev', + navNext: prefix + 'nav--next', + navDisabled: prefix + 'nav--disabled', - // If there's a string, then get the length of the first word. - // Otherwise return the full selected weekday. - return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ] - }, - m: function( string, dateObject ) { + month: prefix + 'month', + year: prefix + 'year', - // If there's a string, then get the length of the digits - // Otherwise return the selected month with 0index compensation. - return string ? _.digits( string ) : dateObject.month + 1 - }, - mm: function( string, dateObject ) { + selectMonth: prefix + 'select--month', + selectYear: prefix + 'select--year', - // If there's a string, then the length is always 2. - // Otherwise return the selected month with 0index and leading zero. - return string ? 2 : _.lead( dateObject.month + 1 ) - }, - mmm: function( string, dateObject ) { + weekdays: prefix + 'weekday', - var collection = this.settings.monthsShort + day: prefix + 'day', + disabled: prefix + 'day--disabled', + selected: prefix + 'day--selected', + highlighted: prefix + 'day--highlighted', + now: prefix + 'day--today', + infocus: prefix + 'day--infocus', + outfocus: prefix + 'day--outfocus', - // If there's a string, get length of the relevant month from the short - // months collection. Otherwise return the selected month from that collection. - return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ] - }, - mmmm: function( string, dateObject ) { + footer: prefix + 'footer', - var collection = this.settings.monthsFull + buttonClear: prefix + 'button--clear', + buttonToday: prefix + 'button--today', + buttonClose: prefix + 'button--close' + } + }; + }(Picker.klasses().picker + '__'); - // If there's a string, get length of the relevant month from the full - // months collection. Otherwise return the selected month from that collection. - return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ] - }, - yy: function( string, dateObject ) { + /** + * Extend the picker to add the date picker. + */ + Picker.extend('pickadate', DatePicker); +}); +; /*! + * ClockPicker v0.0.7 (http://weareoutman.github.io/clockpicker/) + * Copyright 2014 Wang Shenwei. + * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE) + * + * Further modified + * Copyright 2015 Ching Yaw Hao. + */ + +(function ($) { + var $win = $(window), + $doc = $(document); + + // Can I use inline svg ? + var svgNS = 'http://www.w3.org/2000/svg', + svgSupported = 'SVGAngle' in window && function () { + var supported, + el = document.createElement('div'); + el.innerHTML = ''; + supported = (el.firstChild && el.firstChild.namespaceURI) == svgNS; + el.innerHTML = ''; + return supported; + }(); + + // Can I use transition ? + var transitionSupported = function () { + var style = document.createElement('div').style; + return 'transition' in style || 'WebkitTransition' in style || 'MozTransition' in style || 'msTransition' in style || 'OTransition' in style; + }(); + + // Listen touch events in touch screen device, instead of mouse events in desktop. + var touchSupported = 'ontouchstart' in window, + mousedownEvent = 'mousedown' + (touchSupported ? ' touchstart' : ''), + mousemoveEvent = 'mousemove.clockpicker' + (touchSupported ? ' touchmove.clockpicker' : ''), + mouseupEvent = 'mouseup.clockpicker' + (touchSupported ? ' touchend.clockpicker' : ''); + + // Vibrate the device if supported + var vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null; + + function createSvgElement(name) { + return document.createElementNS(svgNS, name); + } - // If there's a string, then the length is always 2. - // Otherwise return the selected year by slicing out the first 2 digits. - return string ? 2 : ( '' + dateObject.year ).slice( 2 ) - }, - yyyy: function( string, dateObject ) { + function leadingZero(num) { + return (num < 10 ? '0' : '') + num; + } - // If there's a string, then the length is always 4. - // Otherwise return the selected year. - return string ? 4 : dateObject.year - }, + // Get a unique id + var idCounter = 0; + function uniqueId(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + } - // Create an array by splitting the formatting string passed. - toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) }, + // Clock size + var dialRadius = 135, + outerRadius = 105, + + // innerRadius = 80 on 12 hour clock + innerRadius = 70, + tickRadius = 20, + diameter = dialRadius * 2, + duration = transitionSupported ? 350 : 1; + + // Popover template + var tpl = ['
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '', ':', '', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '
          ', '', '
          ', '
          ', '
          ', '
          ', '
          ', '
          '].join(''); + + // ClockPicker + function ClockPicker(element, options) { + var popover = $(tpl), + plate = popover.find('.clockpicker-plate'), + holder = popover.find('.picker__holder'), + hoursView = popover.find('.clockpicker-hours'), + minutesView = popover.find('.clockpicker-minutes'), + amPmBlock = popover.find('.clockpicker-am-pm-block'), + isInput = element.prop('tagName') === 'INPUT', + input = isInput ? element : element.find('input'), + label = $("label[for=" + input.attr("id") + "]"), + self = this; + + this.id = uniqueId('cp'); + this.element = element; + this.holder = holder; + this.options = options; + this.isAppended = false; + this.isShown = false; + this.currentView = 'hours'; + this.isInput = isInput; + this.input = input; + this.label = label; + this.popover = popover; + this.plate = plate; + this.hoursView = hoursView; + this.minutesView = minutesView; + this.amPmBlock = amPmBlock; + this.spanHours = popover.find('.clockpicker-span-hours'); + this.spanMinutes = popover.find('.clockpicker-span-minutes'); + this.spanAmPm = popover.find('.clockpicker-span-am-pm'); + this.footer = popover.find('.picker__footer'); + this.amOrPm = "PM"; + + // Setup for for 12 hour clock if option is selected + if (options.twelvehour) { + if (!options.ampmclickable) { + this.spanAmPm.empty(); + $('
          AM
          ').appendTo(this.spanAmPm); + $('
          PM
          ').appendTo(this.spanAmPm); + } else { + this.spanAmPm.empty(); + $('
          AM
          ').on("click", function () { + self.spanAmPm.children('#click-am').addClass("text-primary"); + self.spanAmPm.children('#click-pm').removeClass("text-primary"); + self.amOrPm = "AM"; + }).appendTo(this.spanAmPm); + $('
          PM
          ').on("click", function () { + self.spanAmPm.children('#click-pm').addClass("text-primary"); + self.spanAmPm.children('#click-am').removeClass("text-primary"); + self.amOrPm = 'PM'; + }).appendTo(this.spanAmPm); + } + } - // Format an object into a string using the formatting options. - toString: function ( formatString, itemObject ) { - var calendar = this - return calendar.formats.toArray( formatString ).map( function( label ) { - return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' ) - }).join( '' ) - } + // Add buttons to footer + $('').click($.proxy(this.clear, this)).appendTo(this.footer); + $('').click($.proxy(this.hide, this)).appendTo(this.footer); + $('').click($.proxy(this.done, this)).appendTo(this.footer); + + this.spanHours.click($.proxy(this.toggleView, this, 'hours')); + this.spanMinutes.click($.proxy(this.toggleView, this, 'minutes')); + + // Show or toggle + input.on('focus.clockpicker click.clockpicker', $.proxy(this.show, this)); + + // Build ticks + var tickTpl = $('
          '), + i, + tick, + radian, + radius; + + // Hours view + if (options.twelvehour) { + for (i = 1; i < 13; i += 1) { + tick = tickTpl.clone(); + radian = i / 6 * Math.PI; + radius = outerRadius; + tick.css({ + left: dialRadius + Math.sin(radian) * radius - tickRadius, + top: dialRadius - Math.cos(radian) * radius - tickRadius + }); + tick.html(i === 0 ? '00' : i); + hoursView.append(tick); + tick.on(mousedownEvent, mousedown); + } + } else { + for (i = 0; i < 24; i += 1) { + tick = tickTpl.clone(); + radian = i / 6 * Math.PI; + var inner = i > 0 && i < 13; + radius = inner ? innerRadius : outerRadius; + tick.css({ + left: dialRadius + Math.sin(radian) * radius - tickRadius, + top: dialRadius - Math.cos(radian) * radius - tickRadius + }); + tick.html(i === 0 ? '00' : i); + hoursView.append(tick); + tick.on(mousedownEvent, mousedown); + } } -})() //DatePicker.prototype.formats + // Minutes view + for (i = 0; i < 60; i += 5) { + tick = tickTpl.clone(); + radian = i / 30 * Math.PI; + tick.css({ + left: dialRadius + Math.sin(radian) * outerRadius - tickRadius, + top: dialRadius - Math.cos(radian) * outerRadius - tickRadius + }); + tick.html(leadingZero(i)); + minutesView.append(tick); + tick.on(mousedownEvent, mousedown); + } + // Clicking on minutes view space + plate.on(mousedownEvent, function (e) { + if ($(e.target).closest('.clockpicker-tick').length === 0) { + mousedown(e, true); + } + }); + // Mousedown or touchstart + function mousedown(e, space) { + var offset = plate.offset(), + isTouch = /^touch/.test(e.type), + x0 = offset.left + dialRadius, + y0 = offset.top + dialRadius, + dx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0, + dy = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0, + z = Math.sqrt(dx * dx + dy * dy), + moved = false; + + // When clicking on minutes view space, check the mouse position + if (space && (z < outerRadius - tickRadius || z > outerRadius + tickRadius)) { + return; + } + e.preventDefault(); -/** - * Check if two date units are the exact. - */ -DatePicker.prototype.isDateExact = function( one, two ) { + // Set cursor style of body after 200ms + var movingTimer = setTimeout(function () { + self.popover.addClass('clockpicker-moving'); + }, 200); - var calendar = this + // Clock + self.setHand(dx, dy, !space, true); - // When we’re working with weekdays, do a direct comparison. - if ( - ( _.isInteger( one ) && _.isInteger( two ) ) || - ( typeof one == 'boolean' && typeof two == 'boolean' ) - ) { - return one === two - } + // Mousemove on document + $doc.off(mousemoveEvent).on(mousemoveEvent, function (e) { + e.preventDefault(); + var isTouch = /^touch/.test(e.type), + x = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0, + y = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0; + if (!moved && x === dx && y === dy) { + // Clicking in chrome on windows will trigger a mousemove event + return; + } + moved = true; + self.setHand(x, y, false, true); + }); - // When we’re working with date representations, compare the “pick” value. - if ( - ( _.isDate( one ) || $.isArray( one ) ) && - ( _.isDate( two ) || $.isArray( two ) ) - ) { - return calendar.create( one ).pick === calendar.create( two ).pick + // Mouseup on document + $doc.off(mouseupEvent).on(mouseupEvent, function (e) { + $doc.off(mouseupEvent); + e.preventDefault(); + var isTouch = /^touch/.test(e.type), + x = (isTouch ? e.originalEvent.changedTouches[0] : e).pageX - x0, + y = (isTouch ? e.originalEvent.changedTouches[0] : e).pageY - y0; + if ((space || moved) && x === dx && y === dy) { + self.setHand(x, y); + } + + if (self.currentView === 'hours') { + self.toggleView('minutes', duration / 2); + } else if (options.autoclose) { + self.minutesView.addClass('clockpicker-dial-out'); + setTimeout(function () { + self.done(); + }, duration / 2); + } + plate.prepend(canvas); + + // Reset cursor style of body + clearTimeout(movingTimer); + self.popover.removeClass('clockpicker-moving'); + + // Unbind mousemove event + $doc.off(mousemoveEvent); + }); } - // When we’re working with range objects, compare the “from” and “to”. - if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) { - return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to ) + if (svgSupported) { + // Draw clock hands and others + var canvas = popover.find('.clockpicker-canvas'), + svg = createSvgElement('svg'); + svg.setAttribute('class', 'clockpicker-svg'); + svg.setAttribute('width', diameter); + svg.setAttribute('height', diameter); + var g = createSvgElement('g'); + g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')'); + var bearing = createSvgElement('circle'); + bearing.setAttribute('class', 'clockpicker-canvas-bearing'); + bearing.setAttribute('cx', 0); + bearing.setAttribute('cy', 0); + bearing.setAttribute('r', 4); + var hand = createSvgElement('line'); + hand.setAttribute('x1', 0); + hand.setAttribute('y1', 0); + var bg = createSvgElement('circle'); + bg.setAttribute('class', 'clockpicker-canvas-bg'); + bg.setAttribute('r', tickRadius); + g.appendChild(hand); + g.appendChild(bg); + g.appendChild(bearing); + svg.appendChild(g); + canvas.append(svg); + + this.hand = hand; + this.bg = bg; + this.bearing = bearing; + this.g = g; + this.canvas = canvas; } - return false -} + raiseCallback(this.options.init); + } + + function raiseCallback(callbackFunction) { + if (callbackFunction && typeof callbackFunction === "function") callbackFunction(); + } + // Default options + ClockPicker.DEFAULTS = { + 'default': '', // default time, 'now' or '13:14' e.g. + fromnow: 0, // set default time to * milliseconds from now (using with default = 'now') + donetext: 'Ok', // done button text + cleartext: 'Clear', + canceltext: 'Cancel', + autoclose: false, // auto close when minute is selected + ampmclickable: true, // set am/pm button on itself + darktheme: false, // set to dark theme + twelvehour: true, // change to 12 hour AM/PM clock from 24 hour + vibrate: true // vibrate the device when dragging clock hand + }; -/** - * Check if two date units overlap. - */ -DatePicker.prototype.isDateOverlap = function( one, two ) { + // Show or hide popover + ClockPicker.prototype.toggle = function () { + this[this.isShown ? 'hide' : 'show'](); + }; - var calendar = this, - firstDay = calendar.settings.firstDay ? 1 : 0 + // Set popover position + ClockPicker.prototype.locate = function () { + var element = this.element, + popover = this.popover, + offset = element.offset(), + width = element.outerWidth(), + height = element.outerHeight(), + align = this.options.align, + self = this; + + popover.show(); + }; - // When we’re working with a weekday index, compare the days. - if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) { - one = one % 7 + firstDay - return one === calendar.create( two ).day + 1 + // Show popover + ClockPicker.prototype.show = function (e) { + // Not show again + if (this.isShown) { + return; } - if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) { - two = two % 7 + firstDay - return two === calendar.create( one ).day + 1 + raiseCallback(this.options.beforeShow); + $(':input').each(function () { + $(this).attr('tabindex', -1); + }); + var self = this; + // Initialize + this.input.blur(); + this.popover.addClass('picker--opened'); + this.input.addClass('picker__input picker__input--active'); + $(document.body).css('overflow', 'hidden'); + // Get the time + var value = ((this.input.prop('value') || this.options['default'] || '') + '').split(':'); + if (this.options.twelvehour && !(typeof value[1] === 'undefined')) { + if (value[1].indexOf("AM") > 0) { + this.amOrPm = 'AM'; + } else { + this.amOrPm = 'PM'; + } + value[1] = value[1].replace("AM", "").replace("PM", ""); + } + if (value[0] === 'now') { + var now = new Date(+new Date() + this.options.fromnow); + value = [now.getHours(), now.getMinutes()]; + if (this.options.twelvehour) { + this.amOrPm = value[0] >= 12 && value[0] < 24 ? 'PM' : 'AM'; + } } + this.hours = +value[0] || 0; + this.minutes = +value[1] || 0; + this.spanHours.html(this.hours); + this.spanMinutes.html(leadingZero(this.minutes)); + if (!this.isAppended) { + + // Append popover to input by default + var containerEl = document.querySelector(this.options.container); + if (this.options.container && containerEl) { + containerEl.appendChild(this.popover[0]); + } else { + this.popover.insertAfter(this.input); + } - // When we’re working with range objects, check if the ranges overlap. - if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) { - return calendar.overlapRanges( one, two ) + if (this.options.twelvehour) { + if (this.amOrPm === 'PM') { + this.spanAmPm.children('#click-pm').addClass("text-primary"); + this.spanAmPm.children('#click-am').removeClass("text-primary"); + } else { + this.spanAmPm.children('#click-am').addClass("text-primary"); + this.spanAmPm.children('#click-pm').removeClass("text-primary"); + } + } + // Reset position when resize + $win.on('resize.clockpicker' + this.id, function () { + if (self.isShown) { + self.locate(); + } + }); + this.isAppended = true; + } + // Toggle to hours view + this.toggleView('hours'); + // Set position + this.locate(); + this.isShown = true; + // Hide when clicking or tabbing on any element except the clock and input + $doc.on('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id, function (e) { + var target = $(e.target); + if (target.closest(self.popover.find('.picker__wrap')).length === 0 && target.closest(self.input).length === 0) { + self.hide(); + } + }); + // Hide when ESC is pressed + $doc.on('keyup.clockpicker.' + this.id, function (e) { + if (e.keyCode === 27) { + self.hide(); + } + }); + raiseCallback(this.options.afterShow); + }; + // Hide popover + ClockPicker.prototype.hide = function () { + raiseCallback(this.options.beforeHide); + this.input.removeClass('picker__input picker__input--active'); + this.popover.removeClass('picker--opened'); + $(document.body).css('overflow', 'visible'); + this.isShown = false; + $(':input').each(function (index) { + $(this).attr('tabindex', index + 1); + }); + // Unbinding events on document + $doc.off('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id); + $doc.off('keyup.clockpicker.' + this.id); + this.popover.hide(); + raiseCallback(this.options.afterHide); + }; + // Toggle to hours or minutes view + ClockPicker.prototype.toggleView = function (view, delay) { + var raiseAfterHourSelect = false; + if (view === 'minutes' && $(this.hoursView).css("visibility") === "visible") { + raiseCallback(this.options.beforeHourSelect); + raiseAfterHourSelect = true; } + var isHours = view === 'hours', + nextView = isHours ? this.hoursView : this.minutesView, + hideView = isHours ? this.minutesView : this.hoursView; + this.currentView = view; - return false -} + this.spanHours.toggleClass('text-primary', isHours); + this.spanMinutes.toggleClass('text-primary', !isHours); + // Let's make transitions + hideView.addClass('clockpicker-dial-out'); + nextView.css('visibility', 'visible').removeClass('clockpicker-dial-out'); -/** - * Flip the “enabled” state. - */ -DatePicker.prototype.flipEnable = function(val) { - var itemObject = this.item - itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1) -} + // Reset clock hand + this.resetClock(delay); + // After transitions ended + clearTimeout(this.toggleViewTimer); + this.toggleViewTimer = setTimeout(function () { + hideView.css('visibility', 'hidden'); + }, duration); -/** - * Mark a collection of dates as “disabled”. - */ -DatePicker.prototype.deactivate = function( type, datesToDisable ) { + if (raiseAfterHourSelect) { + raiseCallback(this.options.afterHourSelect); + } + }; - var calendar = this, - disabledItems = calendar.item.disable.slice(0) + // Reset clock hand + ClockPicker.prototype.resetClock = function (delay) { + var view = this.currentView, + value = this[view], + isHours = view === 'hours', + unit = Math.PI / (isHours ? 6 : 30), + radian = value * unit, + radius = isHours && value > 0 && value < 13 ? innerRadius : outerRadius, + x = Math.sin(radian) * radius, + y = -Math.cos(radian) * radius, + self = this; + + if (svgSupported && delay) { + self.canvas.addClass('clockpicker-canvas-out'); + setTimeout(function () { + self.canvas.removeClass('clockpicker-canvas-out'); + self.setHand(x, y); + }, delay); + } else this.setHand(x, y); + }; + // Set clock hand to (x, y) + ClockPicker.prototype.setHand = function (x, y, roundBy5, dragging) { + var radian = Math.atan2(x, -y), + isHours = this.currentView === 'hours', + unit = Math.PI / (isHours || roundBy5 ? 6 : 30), + z = Math.sqrt(x * x + y * y), + options = this.options, + inner = isHours && z < (outerRadius + innerRadius) / 2, + radius = inner ? innerRadius : outerRadius, + value; + + if (options.twelvehour) { + radius = outerRadius; + } - // If we’re flipping, that’s all we need to do. - if ( datesToDisable == 'flip' ) { - calendar.flipEnable() + // Radian should in range [0, 2PI] + if (radian < 0) { + radian = Math.PI * 2 + radian; + } + + // Get the round value + value = Math.round(radian / unit); + + // Get the round radian + radian = value * unit; + + // Correct the hours or minutes + if (options.twelvehour) { + if (isHours) { + if (value === 0) value = 12; + } else { + if (roundBy5) value *= 5; + if (value === 60) value = 0; + } + } else { + if (isHours) { + if (value === 12) value = 0; + value = inner ? value === 0 ? 12 : value : value === 0 ? 0 : value + 12; + } else { + if (roundBy5) value *= 5; + if (value === 60) value = 0; + } } - else if ( datesToDisable === false ) { - calendar.flipEnable(1) - disabledItems = [] + // Once hours or minutes changed, vibrate the device + if (this[this.currentView] !== value) { + if (vibrate && this.options.vibrate) { + // Do not vibrate too frequently + if (!this.vibrateTimer) { + navigator[vibrate](10); + this.vibrateTimer = setTimeout($.proxy(function () { + this.vibrateTimer = null; + }, this), 100); + } + } } - else if ( datesToDisable === true ) { - calendar.flipEnable(-1) - disabledItems = [] + this[this.currentView] = value; + if (isHours) { + this['spanHours'].html(value); + } else { + this['spanMinutes'].html(leadingZero(value)); } - // Otherwise go through the dates to disable. - else { + // If svg is not supported, just add an active class to the tick + if (!svgSupported) { + this[isHours ? 'hoursView' : 'minutesView'].find('.clockpicker-tick').each(function () { + var tick = $(this); + tick.toggleClass('active', value === +tick.html()); + }); + return; + } - datesToDisable.map(function( unitToDisable ) { + // Set clock hand and others' position + var cx1 = Math.sin(radian) * (radius - tickRadius), + cy1 = -Math.cos(radian) * (radius - tickRadius), + cx2 = Math.sin(radian) * radius, + cy2 = -Math.cos(radian) * radius; + this.hand.setAttribute('x2', cx1); + this.hand.setAttribute('y2', cy1); + this.bg.setAttribute('cx', cx2); + this.bg.setAttribute('cy', cy2); + }; - var matchFound + // Hours and minutes are selected + ClockPicker.prototype.done = function () { + raiseCallback(this.options.beforeDone); + this.hide(); + this.label.addClass('active'); - // When we have disabled items, check for matches. - // If something is matched, immediately break out. - for ( var index = 0; index < disabledItems.length; index += 1 ) { - if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) { - matchFound = true - break - } - } + var last = this.input.prop('value'), + value = leadingZero(this.hours) + ':' + leadingZero(this.minutes); + if (this.options.twelvehour) { + value = value + this.amOrPm; + } - // If nothing was found, add the validated unit to the collection. - if ( !matchFound ) { - if ( - _.isInteger( unitToDisable ) || - _.isDate( unitToDisable ) || - $.isArray( unitToDisable ) || - ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to ) - ) { - disabledItems.push( unitToDisable ) - } - } - }) + this.input.prop('value', value); + if (value !== last) { + this.input.triggerHandler('change'); + if (!this.isInput) { + this.element.trigger('change'); + } } - // Return the updated collection. - return disabledItems -} //DatePicker.prototype.deactivate + if (this.options.autoclose) this.input.trigger('blur'); + raiseCallback(this.options.afterDone); + }; -/** - * Mark a collection of dates as “enabled”. - */ -DatePicker.prototype.activate = function( type, datesToEnable ) { + // Clear input field + ClockPicker.prototype.clear = function () { + this.hide(); + this.label.removeClass('active'); - var calendar = this, - disabledItems = calendar.item.disable, - disabledItemsCount = disabledItems.length + var last = this.input.prop('value'), + value = ''; - // If we’re flipping, that’s all we need to do. - if ( datesToEnable == 'flip' ) { - calendar.flipEnable() + this.input.prop('value', value); + if (value !== last) { + this.input.triggerHandler('change'); + if (!this.isInput) { + this.element.trigger('change'); + } } - else if ( datesToEnable === true ) { - calendar.flipEnable(1) - disabledItems = [] + if (this.options.autoclose) { + this.input.trigger('blur'); } + }; - else if ( datesToEnable === false ) { - calendar.flipEnable(-1) - disabledItems = [] + // Remove clockpicker from input + ClockPicker.prototype.remove = function () { + this.element.removeData('clockpicker'); + this.input.off('focus.clockpicker click.clockpicker'); + if (this.isShown) { + this.hide(); } + if (this.isAppended) { + $win.off('resize.clockpicker' + this.id); + this.popover.remove(); + } + }; - // Otherwise go through the disabled dates. - else { + // Extends $.fn.clockpicker + $.fn.pickatime = function (option) { + var args = Array.prototype.slice.call(arguments, 1); + return this.each(function () { + var $this = $(this), + data = $this.data('clockpicker'); + if (!data) { + var options = $.extend({}, ClockPicker.DEFAULTS, $this.data(), typeof option == 'object' && option); + $this.data('clockpicker', new ClockPicker($this, options)); + } else { + // Manual operatsions. show, hide, remove, e.g. + if (typeof data[option] === 'function') { + data[option].apply(data, args); + } + } + }); + }; +})(jQuery); +;(function ($) { - datesToEnable.map(function( unitToEnable ) { + $.fn.characterCounter = function () { + return this.each(function () { + var $input = $(this); + var $counterElement = $input.parent().find('span[class="character-counter"]'); - var matchFound, - disabledUnit, - index, - isExactRange + // character counter has already been added appended to the parent container + if ($counterElement.length) { + return; + } - // Go through the disabled items and try to find a match. - for ( index = 0; index < disabledItemsCount; index += 1 ) { + var itHasLengthAttribute = $input.attr('data-length') !== undefined; - disabledUnit = disabledItems[index] + if (itHasLengthAttribute) { + $input.on('input', updateCounter); + $input.on('focus', updateCounter); + $input.on('blur', removeCounterElement); - // When an exact match is found, remove it from the collection. - if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) { - matchFound = disabledItems[index] = null - isExactRange = true - break - } + addCounterElement($input); + } + }); + }; - // When an overlapped match is found, add the “inverted” state to it. - else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) { - if ( $.isPlainObject( unitToEnable ) ) { - unitToEnable.inverted = true - matchFound = unitToEnable - } - else if ( $.isArray( unitToEnable ) ) { - matchFound = unitToEnable - if ( !matchFound[3] ) matchFound.push( 'inverted' ) - } - else if ( _.isDate( unitToEnable ) ) { - matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ] - } - break - } - } + function updateCounter() { + var maxLength = +$(this).attr('data-length'), + actualLength = +$(this).val().length, + isValidLength = actualLength <= maxLength; - // If a match was found, remove a previous duplicate entry. - if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) { - if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) { - disabledItems[index] = null - break - } - } + $(this).parent().find('span[class="character-counter"]').html(actualLength + '/' + maxLength); - // In the event that we’re dealing with an exact range of dates, - // make sure there are no “inverted” dates because of it. - if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) { - if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) { - disabledItems[index] = null - break - } - } + addInputStyle(isValidLength, $(this)); + } - // If something is still matched, add it into the collection. - if ( matchFound ) { - disabledItems.push( matchFound ) - } - }) + function addCounterElement($input) { + var $counterElement = $input.parent().find('span[class="character-counter"]'); + + if ($counterElement.length) { + return; } - // Return the updated collection. - return disabledItems.filter(function( val ) { return val != null }) -} //DatePicker.prototype.activate + $counterElement = $('').addClass('character-counter').css('float', 'right').css('font-size', '12px').css('height', 1); + $input.parent().append($counterElement); + } -/** - * Create a string for the nodes in the picker. - */ -DatePicker.prototype.nodes = function( isOpen ) { + function removeCounterElement() { + $(this).parent().find('span[class="character-counter"]').html(''); + } - var - calendar = this, - settings = calendar.settings, - calendarItem = calendar.item, - nowObject = calendarItem.now, - selectedObject = calendarItem.select, - highlightedObject = calendarItem.highlight, - viewsetObject = calendarItem.view, - disabledCollection = calendarItem.disable, - minLimitObject = calendarItem.min, - maxLimitObject = calendarItem.max, + function addInputStyle(isValidLength, $input) { + var inputHasInvalidClass = $input.hasClass('invalid'); + if (isValidLength && inputHasInvalidClass) { + $input.removeClass('invalid'); + } else if (!isValidLength && !inputHasInvalidClass) { + $input.removeClass('valid'); + $input.addClass('invalid'); + } + } + $(document).ready(function () { + $('input, textarea').characterCounter(); + }); +})(jQuery); +;(function ($) { - // Create the calendar table head using a copy of weekday labels collection. - // * We do a copy so we don't mutate the original array. - tableHead = (function( collection, fullCollection ) { + var methods = { - // If the first day should be Monday, move Sunday to the end. - if ( settings.firstDay ) { - collection.push( collection.shift() ) - fullCollection.push( fullCollection.shift() ) + init: function (options) { + var defaults = { + duration: 200, // ms + dist: -100, // zoom scale TODO: make this more intuitive as an option + shift: 0, // spacing for center image + padding: 0, // Padding between non center items + fullWidth: false, // Change to full width styles + indicators: false, // Toggle indicators + noWrap: false, // Don't wrap around and cycle through items. + onCycleTo: null // Callback for when a new slide is cycled to. + }; + options = $.extend(defaults, options); + var namespace = Materialize.objectSelectorString($(this)); + + return this.each(function (i) { + + var images, item_width, item_height, offset, center, pressed, dim, count, reference, referenceY, amplitude, target, velocity, scrolling, xform, frame, timestamp, ticker, dragged, vertical_dragged; + var $indicators = $('
            '); + var scrollingTimeout = null; + var oneTimeCallback = null; + + // Initialize + var view = $(this); + var hasMultipleSlides = view.find('.carousel-item').length > 1; + var showIndicators = (view.attr('data-indicators') || options.indicators) && hasMultipleSlides; + var noWrap = view.attr('data-no-wrap') || options.noWrap || !hasMultipleSlides; + var uniqueNamespace = view.attr('data-namespace') || namespace + i; + view.attr('data-namespace', uniqueNamespace); + + // Options + var setCarouselHeight = function (imageOnly) { + var firstSlide = view.find('.carousel-item.active').length ? view.find('.carousel-item.active').first() : view.find('.carousel-item').first(); + var firstImage = firstSlide.find('img').first(); + if (firstImage.length) { + if (firstImage[0].complete) { + // If image won't trigger the load event + var imageHeight = firstImage.height(); + if (imageHeight > 0) { + view.css('height', firstImage.height()); + } else { + // If image still has no height, use the natural dimensions to calculate + var naturalWidth = firstImage[0].naturalWidth; + var naturalHeight = firstImage[0].naturalHeight; + var adjustedHeight = view.width() / naturalWidth * naturalHeight; + view.css('height', adjustedHeight); + } + } else { + // Get height when image is loaded normally + firstImage.on('load', function () { + view.css('height', $(this).height()); + }); } + } else if (!imageOnly) { + var slideHeight = firstSlide.height(); + view.css('height', slideHeight); + } + }; - // Create and return the table head group. - return _.node( - 'thead', - _.node( - 'tr', - _.group({ - min: 0, - max: DAYS_IN_WEEK - 1, - i: 1, - node: 'th', - item: function( counter ) { - return [ - collection[ counter ], - settings.klass.weekdays, - 'scope=col title="' + fullCollection[ counter ] + '"' - ] - } - }) - ) - ) //endreturn - - // Materialize modified - })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysLetter ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead - - - // Create the nav for next/prev month. - createMonthNav = function( next ) { - - // Otherwise, return the created month tag. - return _.node( - 'div', - ' ', - settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + ( - - // If the focused month is outside the range, disabled the button. - ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) || - ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ? - ' ' + settings.klass.navDisabled : '' - ), - 'data-nav=' + ( next || -1 ) + ' ' + - _.ariaAttr({ - role: 'button', - controls: calendar.$node[0].id + '_table' - }) + ' ' + - 'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '"' - ) //endreturn - }, //createMonthNav - - - // Create the month label. - //Materialize modified - createMonthLabel = function(override) { - - var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull - - // Materialize modified - if (override == "short_months") { - monthsCollection = settings.monthsShort; - } + if (options.fullWidth) { + options.dist = 0; + setCarouselHeight(); - // If there are months to select, add a dropdown menu. - if ( settings.selectMonths && override == undefined) { - - return _.node( 'select', - _.group({ - min: 0, - max: 11, - i: 1, - node: 'option', - item: function( loopedMonth ) { - - return [ - - // The looped month and no classes. - monthsCollection[ loopedMonth ], 0, - - // Set the value and selected index. - 'value=' + loopedMonth + - ( viewsetObject.month == loopedMonth ? ' selected' : '' ) + - ( - ( - ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) || - ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month ) - ) ? - ' disabled' : '' - ) - ] - } - }), - settings.klass.selectMonth + ' browser-default', - ( isOpen ? '' : 'disabled' ) + ' ' + - _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' + - 'title="' + settings.labelMonthSelect + '"' - ) - } + // Offset fixed items when indicators. + if (showIndicators) { + view.find('.carousel-fixed-item').addClass('with-indicators'); + } + } - // Materialize modified - if (override == "short_months") - if (selectedObject != null) - return _.node( 'div', monthsCollection[ selectedObject.month ] ); - else return _.node( 'div', monthsCollection[ viewsetObject.month ] ); + // Don't double initialize. + if (view.hasClass('initialized')) { + // Recalculate variables + $(window).trigger('resize'); - // If there's a need for a month selector - return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month ) - }, //createMonthLabel + // Redraw carousel. + view.trigger('carouselNext', [0.000001]); + return true; + } + view.addClass('initialized'); + pressed = false; + offset = target = 0; + images = []; + item_width = view.find('.carousel-item').first().innerWidth(); + item_height = view.find('.carousel-item').first().innerHeight(); + dim = item_width * 2 + options.padding; + + view.find('.carousel-item').each(function (i) { + images.push($(this)[0]); + if (showIndicators) { + var $indicator = $('
          • '); - // Create the year label. - // Materialize modified - createYearLabel = function(override) { + // Add active to first by default. + if (i === 0) { + $indicator.addClass('active'); + } - var focusedYear = viewsetObject.year, + // Handle clicks on indicators. + $indicator.click(function (e) { + e.stopPropagation(); - // If years selector is set to a literal "true", set it to 5. Otherwise - // divide in half to get half before and half after focused year. - numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 ) + var index = $(this).index(); + cycleTo(index); + }); + $indicators.append($indicator); + } + }); - // If there are years to select, add a dropdown menu. - if ( numberYears ) { + if (showIndicators) { + view.append($indicators); + } + count = images.length; - var - minYear = minLimitObject.year, - maxYear = maxLimitObject.year, - lowestYear = focusedYear - numberYears, - highestYear = focusedYear + numberYears + function setupEvents() { + if (typeof window.ontouchstart !== 'undefined') { + view.on('touchstart.carousel', tap); + view.on('touchmove.carousel', drag); + view.on('touchend.carousel', release); + } + view.on('mousedown.carousel', tap); + view.on('mousemove.carousel', drag); + view.on('mouseup.carousel', release); + view.on('mouseleave.carousel', release); + view.on('click.carousel', click); + } - // If the min year is greater than the lowest year, increase the highest year - // by the difference and set the lowest year to the min year. - if ( minYear > lowestYear ) { - highestYear += minYear - lowestYear - lowestYear = minYear - } + function xpos(e) { + // touch event + if (e.targetTouches && e.targetTouches.length >= 1) { + return e.targetTouches[0].clientX; + } - // If the max year is less than the highest year, decrease the lowest year - // by the lower of the two: available and needed years. Then set the - // highest year to the max year. - if ( maxYear < highestYear ) { + // mouse event + return e.clientX; + } - var availableYears = lowestYear - minYear, - neededYears = highestYear - maxYear + function ypos(e) { + // touch event + if (e.targetTouches && e.targetTouches.length >= 1) { + return e.targetTouches[0].clientY; + } - lowestYear -= availableYears > neededYears ? neededYears : availableYears - highestYear = maxYear - } + // mouse event + return e.clientY; + } - if ( settings.selectYears && override == undefined ) { - return _.node( 'select', - _.group({ - min: lowestYear, - max: highestYear, - i: 1, - node: 'option', - item: function( loopedYear ) { - return [ - - // The looped year and no classes. - loopedYear, 0, - - // Set the value and selected index. - 'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' ) - ] - } - }), - settings.klass.selectYear + ' browser-default', - ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' + - 'title="' + settings.labelYearSelect + '"' - ) - } - } + function wrap(x) { + return x >= count ? x % count : x < 0 ? wrap(count + x % count) : x; + } - // Materialize modified - if (override == "raw") - return _.node( 'div', focusedYear ) + function scroll(x) { + // Track scrolling state + scrolling = true; + if (!view.hasClass('scrolling')) { + view.addClass('scrolling'); + } + if (scrollingTimeout != null) { + window.clearTimeout(scrollingTimeout); + } + scrollingTimeout = window.setTimeout(function () { + scrolling = false; + view.removeClass('scrolling'); + }, options.duration); + + // Start actual scroll + var i, half, delta, dir, tween, el, alignment, xTranslation; + var lastCenter = center; + + offset = typeof x === 'number' ? x : offset; + center = Math.floor((offset + dim / 2) / dim); + delta = offset - center * dim; + dir = delta < 0 ? 1 : -1; + tween = -dir * delta * 2 / dim; + half = count >> 1; + + if (!options.fullWidth) { + alignment = 'translateX(' + (view[0].clientWidth - item_width) / 2 + 'px) '; + alignment += 'translateY(' + (view[0].clientHeight - item_height) / 2 + 'px)'; + } else { + alignment = 'translateX(0)'; + } - // Otherwise just return the year focused - return _.node( 'div', focusedYear, settings.klass.year ) - } //createYearLabel + // Set indicator active + if (showIndicators) { + var diff = center % count; + var activeIndicator = $indicators.find('.indicator-item.active'); + if (activeIndicator.index() !== diff) { + activeIndicator.removeClass('active'); + $indicators.find('.indicator-item').eq(diff).addClass('active'); + } + } + // center + // Don't show wrapped items. + if (!noWrap || center >= 0 && center < count) { + el = images[wrap(center)]; - // Materialize modified - createDayLabel = function() { - if (selectedObject != null) - return _.node( 'div', selectedObject.date) - else return _.node( 'div', nowObject.date) + // Add active class to center item. + if (!$(el).hasClass('active')) { + view.find('.carousel-item').removeClass('active'); + $(el).addClass('active'); } - createWeekdayLabel = function() { - var display_day; + el.style[xform] = alignment + ' translateX(' + -delta / 2 + 'px)' + ' translateX(' + dir * options.shift * tween * i + 'px)' + ' translateZ(' + options.dist * tween + 'px)'; + el.style.zIndex = 0; + if (options.fullWidth) { + tweenedOpacity = 1; + } else { + tweenedOpacity = 1 - 0.2 * tween; + } + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } - if (selectedObject != null) - display_day = selectedObject.day; - else - display_day = nowObject.day; - var weekday = settings.weekdaysFull[ display_day ] - return weekday - } + for (i = 1; i <= half; ++i) { + // right side + if (options.fullWidth) { + zTranslation = options.dist; + tweenedOpacity = i === half && delta < 0 ? 1 - tween : 1; + } else { + zTranslation = options.dist * (i * 2 + tween * dir); + tweenedOpacity = 1 - 0.2 * (i * 2 + tween * dir); + } + // Don't show wrapped items. + if (!noWrap || center + i < count) { + el = images[wrap(center + i)]; + el.style[xform] = alignment + ' translateX(' + (options.shift + (dim * i - delta) / 2) + 'px)' + ' translateZ(' + zTranslation + 'px)'; + el.style.zIndex = -i; + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } + // left side + if (options.fullWidth) { + zTranslation = options.dist; + tweenedOpacity = i === half && delta > 0 ? 1 - tween : 1; + } else { + zTranslation = options.dist * (i * 2 - tween * dir); + tweenedOpacity = 1 - 0.2 * (i * 2 - tween * dir); + } + // Don't show wrapped items. + if (!noWrap || center - i >= 0) { + el = images[wrap(center - i)]; + el.style[xform] = alignment + ' translateX(' + (-options.shift + (-dim * i - delta) / 2) + 'px)' + ' translateZ(' + zTranslation + 'px)'; + el.style.zIndex = -i; + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } + } - // Create and return the entire calendar. -return _.node( - // Date presentation View - 'div', - _.node( - 'div', - createWeekdayLabel(), - "picker__weekday-display" - )+ - _.node( - // Div for short Month - 'div', - createMonthLabel("short_months"), - settings.klass.month_display - )+ - _.node( - // Div for Day - 'div', - createDayLabel() , - settings.klass.day_display - )+ - _.node( - // Div for Year - 'div', - createYearLabel("raw") , - settings.klass.year_display - ), - settings.klass.date_display - )+ - // Calendar container - _.node('div', - _.node('div', - ( settings.selectYears ? createMonthLabel() + createYearLabel() : createMonthLabel() + createYearLabel() ) + - createMonthNav() + createMonthNav( 1 ), - settings.klass.header - ) + _.node( - 'table', - tableHead + - _.node( - 'tbody', - _.group({ - min: 0, - max: WEEKS_IN_CALENDAR - 1, - i: 1, - node: 'tr', - item: function( rowCounter ) { - - // If Monday is the first day and the month starts on Sunday, shift the date back a week. - var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0 - - return [ - _.group({ - min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index - max: function() { - return this.min + DAYS_IN_WEEK - 1 - }, - i: 1, - node: 'td', - item: function( targetDate ) { - - // Convert the time date from a relative date to a target date. - targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ]) - - var isSelected = selectedObject && selectedObject.pick == targetDate.pick, - isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick, - isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick, - formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ) - - return [ - _.node( - 'div', - targetDate.date, - (function( klasses ) { - - // Add the `infocus` or `outfocus` classes based on month in view. - klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus ) - - // Add the `today` class if needed. - if ( nowObject.pick == targetDate.pick ) { - klasses.push( settings.klass.now ) - } - - // Add the `selected` class if something's selected and the time matches. - if ( isSelected ) { - klasses.push( settings.klass.selected ) - } - - // Add the `highlighted` class if something's highlighted and the time matches. - if ( isHighlighted ) { - klasses.push( settings.klass.highlighted ) - } - - // Add the `disabled` class if something's disabled and the object matches. - if ( isDisabled ) { - klasses.push( settings.klass.disabled ) - } - - return klasses.join( ' ' ) - })([ settings.klass.day ]), - 'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({ - role: 'gridcell', - label: formattedDate, - selected: isSelected && calendar.$node.val() === formattedDate ? true : null, - activedescendant: isHighlighted ? true : null, - disabled: isDisabled ? true : null - }) - ), - '', - _.ariaAttr({ role: 'presentation' }) - ] //endreturn - } - }) - ] //endreturn - } - }) - ), - settings.klass.table, - 'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({ - role: 'grid', - controls: calendar.$node[0].id, - readonly: true - }) - ) - , settings.klass.calendar_container) // end calendar - - + + // center + // Don't show wrapped items. + if (!noWrap || center >= 0 && center < count) { + el = images[wrap(center)]; + el.style[xform] = alignment + ' translateX(' + -delta / 2 + 'px)' + ' translateX(' + dir * options.shift * tween + 'px)' + ' translateZ(' + options.dist * tween + 'px)'; + el.style.zIndex = 0; + if (options.fullWidth) { + tweenedOpacity = 1; + } else { + tweenedOpacity = 1 - 0.2 * tween; + } + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } - // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”. - _.node( - 'div', - _.node( 'button', settings.today, "btn-flat picker__today", - 'type=button data-pick=' + nowObject.pick + - ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' + - _.ariaAttr({ controls: calendar.$node[0].id }) ) + - _.node( 'button', settings.clear, "btn-flat picker__clear", - 'type=button data-clear=1' + - ( isOpen ? '' : ' disabled' ) + ' ' + - _.ariaAttr({ controls: calendar.$node[0].id }) ) + - _.node('button', settings.close, "btn-flat picker__close", - 'type=button data-close=true ' + - ( isOpen ? '' : ' disabled' ) + ' ' + - _.ariaAttr({ controls: calendar.$node[0].id }) ), - settings.klass.footer - ) //endreturn -} //DatePicker.prototype.nodes + // onCycleTo callback + if (lastCenter !== center && typeof options.onCycleTo === "function") { + var $curr_item = view.find('.carousel-item').eq(wrap(center)); + options.onCycleTo.call(this, $curr_item, dragged); + } + // One time callback + if (typeof oneTimeCallback === "function") { + oneTimeCallback.call(this, $curr_item, dragged); + oneTimeCallback = null; + } + } + function track() { + var now, elapsed, delta, v; + now = Date.now(); + elapsed = now - timestamp; + timestamp = now; + delta = offset - frame; + frame = offset; -/** - * The date picker defaults. - */ -DatePicker.defaults = (function( prefix ) { + v = 1000 * delta / (1 + elapsed); + velocity = 0.8 * v + 0.2 * velocity; + } - return { + function autoScroll() { + var elapsed, delta; - // The title label to use for the month nav buttons - labelMonthNext: 'Next month', - labelMonthPrev: 'Previous month', + if (amplitude) { + elapsed = Date.now() - timestamp; + delta = amplitude * Math.exp(-elapsed / options.duration); + if (delta > 2 || delta < -2) { + scroll(target - delta); + requestAnimationFrame(autoScroll); + } else { + scroll(target); + } + } + } - // The title label to use for the dropdown selectors - labelMonthSelect: 'Select a month', - labelYearSelect: 'Select a year', + function click(e) { + // Disable clicks if carousel was dragged. + if (dragged) { + e.preventDefault(); + e.stopPropagation(); + return false; + } else if (!options.fullWidth) { + var clickedIndex = $(e.target).closest('.carousel-item').index(); + var diff = wrap(center) - clickedIndex; + + // Disable clicks if carousel was shifted by click + if (diff !== 0) { + e.preventDefault(); + e.stopPropagation(); + } + cycleTo(clickedIndex); + } + } - // Months and weekdays - monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ], - monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ], - weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ], - weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ], + function cycleTo(n) { + var diff = center % count - n; - // Materialize modified - weekdaysLetter: [ 'S', 'M', 'T', 'W', 'T', 'F', 'S' ], + // Account for wraparound. + if (!noWrap) { + if (diff < 0) { + if (Math.abs(diff + count) < Math.abs(diff)) { + diff += count; + } + } else if (diff > 0) { + if (Math.abs(diff - count) < diff) { + diff -= count; + } + } + } - // Today and clear - today: 'Today', - clear: 'Clear', - close: 'Close', + // Call prev or next accordingly. + if (diff < 0) { + view.trigger('carouselNext', [Math.abs(diff)]); + } else if (diff > 0) { + view.trigger('carouselPrev', [diff]); + } + } - // The format to show on the `input` element - format: 'd mmmm, yyyy', + function tap(e) { + // Fixes firefox draggable image bug + if (e.type === 'mousedown' && $(e.target).is('img')) { + e.preventDefault(); + } + pressed = true; + dragged = false; + vertical_dragged = false; + reference = xpos(e); + referenceY = ypos(e); + + velocity = amplitude = 0; + frame = offset; + timestamp = Date.now(); + clearInterval(ticker); + ticker = setInterval(track, 100); + } - // Classes - klass: { + function drag(e) { + var x, delta, deltaY; + if (pressed) { + x = xpos(e); + y = ypos(e); + delta = reference - x; + deltaY = Math.abs(referenceY - y); + if (deltaY < 30 && !vertical_dragged) { + // If vertical scrolling don't allow dragging. + if (delta > 2 || delta < -2) { + dragged = true; + reference = x; + scroll(offset + delta); + } + } else if (dragged) { + // If dragging don't allow vertical scroll. + e.preventDefault(); + e.stopPropagation(); + return false; + } else { + // Vertical scrolling. + vertical_dragged = true; + } + } - table: prefix + 'table', + if (dragged) { + // If dragging don't allow vertical scroll. + e.preventDefault(); + e.stopPropagation(); + return false; + } + } - header: prefix + 'header', + function release(e) { + if (pressed) { + pressed = false; + } else { + return; + } + clearInterval(ticker); + target = offset; + if (velocity > 10 || velocity < -10) { + amplitude = 0.9 * velocity; + target = offset + amplitude; + } + target = Math.round(target / dim) * dim; + + // No wrap of items. + if (noWrap) { + if (target >= dim * (count - 1)) { + target = dim * (count - 1); + } else if (target < 0) { + target = 0; + } + } + amplitude = target - offset; + timestamp = Date.now(); + requestAnimationFrame(autoScroll); - // Materialize Added klasses - date_display: prefix + 'date-display', - day_display: prefix + 'day-display', - month_display: prefix + 'month-display', - year_display: prefix + 'year-display', - calendar_container: prefix + 'calendar-container', - // end + if (dragged) { + e.preventDefault(); + e.stopPropagation(); + } + return false; + } + xform = 'transform'; + ['webkit', 'Moz', 'O', 'ms'].every(function (prefix) { + var e = prefix + 'Transform'; + if (typeof document.body.style[e] !== 'undefined') { + xform = e; + return false; + } + return true; + }); + var throttledResize = Materialize.throttle(function () { + if (options.fullWidth) { + item_width = view.find('.carousel-item').first().innerWidth(); + var imageHeight = view.find('.carousel-item.active').height(); + dim = item_width * 2 + options.padding; + offset = center * 2 * item_width; + target = offset; + setCarouselHeight(true); + } else { + scroll(); + } + }, 200); + $(window).off('resize.carousel-' + uniqueNamespace).on('resize.carousel-' + uniqueNamespace, throttledResize); - navPrev: prefix + 'nav--prev', - navNext: prefix + 'nav--next', - navDisabled: prefix + 'nav--disabled', + setupEvents(); + scroll(offset); - month: prefix + 'month', - year: prefix + 'year', + $(this).on('carouselNext', function (e, n, callback) { + if (n === undefined) { + n = 1; + } + if (typeof callback === "function") { + oneTimeCallback = callback; + } - selectMonth: prefix + 'select--month', - selectYear: prefix + 'select--year', + target = dim * Math.round(offset / dim) + dim * n; + if (offset !== target) { + amplitude = target - offset; + timestamp = Date.now(); + requestAnimationFrame(autoScroll); + } + }); - weekdays: prefix + 'weekday', + $(this).on('carouselPrev', function (e, n, callback) { + if (n === undefined) { + n = 1; + } + if (typeof callback === "function") { + oneTimeCallback = callback; + } - day: prefix + 'day', - disabled: prefix + 'day--disabled', - selected: prefix + 'day--selected', - highlighted: prefix + 'day--highlighted', - now: prefix + 'day--today', - infocus: prefix + 'day--infocus', - outfocus: prefix + 'day--outfocus', + target = dim * Math.round(offset / dim) - dim * n; + if (offset !== target) { + amplitude = target - offset; + timestamp = Date.now(); + requestAnimationFrame(autoScroll); + } + }); - footer: prefix + 'footer', + $(this).on('carouselSet', function (e, n, callback) { + if (n === undefined) { + n = 0; + } + if (typeof callback === "function") { + oneTimeCallback = callback; + } - buttonClear: prefix + 'button--clear', - buttonToday: prefix + 'button--today', - buttonClose: prefix + 'button--close' - } + cycleTo(n); + }); + }); + }, + next: function (n, callback) { + $(this).trigger('carouselNext', [n, callback]); + }, + prev: function (n, callback) { + $(this).trigger('carouselPrev', [n, callback]); + }, + set: function (n, callback) { + $(this).trigger('carouselSet', [n, callback]); + }, + destroy: function () { + var uniqueNamespace = $(this).attr('data-namespace'); + $(this).removeAttr('data-namespace'); + $(this).removeClass('initialized'); + $(this).find('.indicators').remove(); + + // Remove event handlers + $(this).off('carouselNext carouselPrev carouselSet'); + $(window).off('resize.carousel-' + uniqueNamespace); + if (typeof window.ontouchstart !== 'undefined') { + $(this).off('touchstart.carousel touchmove.carousel touchend.carousel'); + } + $(this).off('mousedown.carousel mousemove.carousel mouseup.carousel mouseleave.carousel click.carousel'); } -})( Picker.klasses().picker + '__' ) - - - - + }; -/** - * Extend the picker to add the date picker. - */ -Picker.extend( 'pickadate', DatePicker ) + $.fn.carousel = function (methodOrOptions) { + if (methods[methodOrOptions]) { + return methods[methodOrOptions].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if (typeof methodOrOptions === 'object' || !methodOrOptions) { + // Default to "init" + return methods.init.apply(this, arguments); + } else { + $.error('Method ' + methodOrOptions + ' does not exist on jQuery.carousel'); + } + }; // Plugin end +})(jQuery); +;(function ($) { + var methods = { + init: function (options) { + return this.each(function () { + var origin = $('#' + $(this).attr('data-activates')); + var screen = $('body'); + + // Creating tap target + var tapTargetEl = $(this); + var tapTargetWrapper = tapTargetEl.parent('.tap-target-wrapper'); + var tapTargetWave = tapTargetWrapper.find('.tap-target-wave'); + var tapTargetOriginEl = tapTargetWrapper.find('.tap-target-origin'); + var tapTargetContentEl = tapTargetEl.find('.tap-target-content'); + + // Creating wrapper + if (!tapTargetWrapper.length) { + tapTargetWrapper = tapTargetEl.wrap($('
            ')).parent(); + } -})); + // Creating content + if (!tapTargetContentEl.length) { + tapTargetContentEl = $('
            '); + tapTargetEl.append(tapTargetContentEl); + } + // Creating foreground wave + if (!tapTargetWave.length) { + tapTargetWave = $('
            '); + + // Creating origin + if (!tapTargetOriginEl.length) { + tapTargetOriginEl = origin.clone(true, true); + tapTargetOriginEl.addClass('tap-target-origin'); + tapTargetOriginEl.removeAttr('id'); + tapTargetOriginEl.removeAttr('style'); + tapTargetWave.append(tapTargetOriginEl); + } -;(function ($) { + tapTargetWrapper.append(tapTargetWave); + } - $.fn.characterCounter = function(){ - return this.each(function(){ + // Open + var openTapTarget = function () { + if (tapTargetWrapper.is('.open')) { + return; + } - var itHasLengthAttribute = $(this).attr('length') !== undefined; + // Adding open class + tapTargetWrapper.addClass('open'); - if(itHasLengthAttribute){ - $(this).on('input', updateCounter); - $(this).on('focus', updateCounter); - $(this).on('blur', removeCounterElement); + setTimeout(function () { + tapTargetOriginEl.off('click.tapTarget').on('click.tapTarget', function (e) { + closeTapTarget(); + tapTargetOriginEl.off('click.tapTarget'); + }); - addCounterElement($(this)); - } + $(document).off('click.tapTarget').on('click.tapTarget', function (e) { + closeTapTarget(); + $(document).off('click.tapTarget'); + }); - }); - }; + var throttledCalc = Materialize.throttle(function () { + calculateTapTarget(); + }, 200); + $(window).off('resize.tapTarget').on('resize.tapTarget', throttledCalc); + }, 0); + }; - function updateCounter(){ - var maxLength = +$(this).attr('length'), - actualLength = +$(this).val().length, - isValidLength = actualLength <= maxLength; + // Close + var closeTapTarget = function () { + if (!tapTargetWrapper.is('.open')) { + return; + } - $(this).parent().find('span[class="character-counter"]') - .html( actualLength + '/' + maxLength); + tapTargetWrapper.removeClass('open'); + tapTargetOriginEl.off('click.tapTarget'); + $(document).off('click.tapTarget'); + $(window).off('resize.tapTarget'); + }; - addInputStyle(isValidLength, $(this)); - } + // Pre calculate + var calculateTapTarget = function () { + // Element or parent is fixed position? + var isFixed = origin.css('position') === 'fixed'; + if (!isFixed) { + var parents = origin.parents(); + for (var i = 0; i < parents.length; i++) { + isFixed = $(parents[i]).css('position') == 'fixed'; + if (isFixed) { + break; + } + } + } - function addCounterElement($input){ - var $counterElement = $('') - .addClass('character-counter') - .css('float','right') - .css('font-size','12px') - .css('height', 1); + // Calculating origin + var originWidth = origin.outerWidth(); + var originHeight = origin.outerHeight(); + var originTop = isFixed ? origin.offset().top - $(document).scrollTop() : origin.offset().top; + var originLeft = isFixed ? origin.offset().left - $(document).scrollLeft() : origin.offset().left; + + // Calculating screen + var windowWidth = $(window).width(); + var windowHeight = $(window).height(); + var centerX = windowWidth / 2; + var centerY = windowHeight / 2; + var isLeft = originLeft <= centerX; + var isRight = originLeft > centerX; + var isTop = originTop <= centerY; + var isBottom = originTop > centerY; + var isCenterX = originLeft >= windowWidth * 0.25 && originLeft <= windowWidth * 0.75; + var isCenterY = originTop >= windowHeight * 0.25 && originTop <= windowHeight * 0.75; + + // Calculating tap target + var tapTargetWidth = tapTargetEl.outerWidth(); + var tapTargetHeight = tapTargetEl.outerHeight(); + var tapTargetTop = originTop + originHeight / 2 - tapTargetHeight / 2; + var tapTargetLeft = originLeft + originWidth / 2 - tapTargetWidth / 2; + var tapTargetPosition = isFixed ? 'fixed' : 'absolute'; + + // Calculating content + var tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth / 2 + originWidth; + var tapTargetTextHeight = tapTargetHeight / 2; + var tapTargetTextTop = isTop ? tapTargetHeight / 2 : 0; + var tapTargetTextBottom = 0; + var tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth / 2 - originWidth : 0; + var tapTargetTextRight = 0; + var tapTargetTextPadding = originWidth; + var tapTargetTextAlign = isBottom ? 'bottom' : 'top'; + + // Calculating wave + var tapTargetWaveWidth = originWidth > originHeight ? originWidth * 2 : originWidth * 2; + var tapTargetWaveHeight = tapTargetWaveWidth; + var tapTargetWaveTop = tapTargetHeight / 2 - tapTargetWaveHeight / 2; + var tapTargetWaveLeft = tapTargetWidth / 2 - tapTargetWaveWidth / 2; + + // Setting tap target + var tapTargetWrapperCssObj = {}; + tapTargetWrapperCssObj.top = isTop ? tapTargetTop : ''; + tapTargetWrapperCssObj.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth : ''; + tapTargetWrapperCssObj.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight : ''; + tapTargetWrapperCssObj.left = isLeft ? tapTargetLeft : ''; + tapTargetWrapperCssObj.position = tapTargetPosition; + tapTargetWrapper.css(tapTargetWrapperCssObj); + + // Setting content + tapTargetContentEl.css({ + width: tapTargetTextWidth, + height: tapTargetTextHeight, + top: tapTargetTextTop, + right: tapTargetTextRight, + bottom: tapTargetTextBottom, + left: tapTargetTextLeft, + padding: tapTargetTextPadding, + verticalAlign: tapTargetTextAlign + }); - $input.parent().append($counterElement); - } + // Setting wave + tapTargetWave.css({ + top: tapTargetWaveTop, + left: tapTargetWaveLeft, + width: tapTargetWaveWidth, + height: tapTargetWaveHeight + }); + }; - function removeCounterElement(){ - $(this).parent().find('span[class="character-counter"]').html(''); - } + if (options == 'open') { + calculateTapTarget(); + openTapTarget(); + } - function addInputStyle(isValidLength, $input){ - var inputHasInvalidClass = $input.hasClass('invalid'); - if (isValidLength && inputHasInvalidClass) { - $input.removeClass('invalid'); - } - else if(!isValidLength && !inputHasInvalidClass){ - $input.removeClass('valid'); - $input.addClass('invalid'); - } - } + if (options == 'close') closeTapTarget(); + }); + }, + open: function () {}, + close: function () {} + }; - $(document).ready(function(){ - $('input, textarea').characterCounter(); - }); + $.fn.tapTarget = function (methodOrOptions) { + if (methods[methodOrOptions] || typeof methodOrOptions === 'object') return methods.init.apply(this, arguments); -}( jQuery )); + $.error('Method ' + methodOrOptions + ' does not exist on jQuery.tap-target'); + }; +})(jQuery); diff --git a/dist/js/materialize.min.js b/dist/js/materialize.min.js index 282a483bb6..3ec90acfc7 100644 --- a/dist/js/materialize.min.js +++ b/dist/js/materialize.min.js @@ -1,9 +1,6 @@ /*! - * Materialize v0.97.0 (http://materializecss.com) - * Copyright 2014-2015 Materialize + * Materialize v0.100.2 (http://materializecss.com) + * Copyright 2014-2017 Materialize * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) */ -jQuery.easing.jswing=jQuery.easing.swing,jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(a,b,c,d,e){return jQuery.easing[jQuery.easing.def](a,b,c,d,e)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return 0==b?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return 0==b?c:b==e?c+d:(b/=e/2)<1?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){return(b/=e/2)<1?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(1==(b/=e))return c+d;if(g||(g=.3*e),hb?-.5*h*Math.pow(2,10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)+c:h*Math.pow(2,-10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)*.5+d+c},easeInBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*(b/=e)*b*((f+1)*b-f)+c},easeOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*((b=b/e-1)*b*((f+1)*b+f)+1)+c},easeInOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),(b/=e/2)<1?d/2*b*b*(((f*=1.525)+1)*b-f)+c:d/2*((b-=2)*b*(((f*=1.525)+1)*b+f)+2)+c},easeInBounce:function(a,b,c,d,e){return d-jQuery.easing.easeOutBounce(a,e-b,0,d,e)+c},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?7.5625*d*b*b+c:2/2.75>b?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:2.5/2.75>b?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(a,b,c,d,e){return e/2>b?.5*jQuery.easing.easeInBounce(a,2*b,0,d,e)+c:.5*jQuery.easing.easeOutBounce(a,2*b-e,0,d,e)+.5*d+c}}),jQuery.extend(jQuery.easing,{easeInOutMaterial:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:d/4*((b-=2)*b*b+2)+c}}),!function(a){function b(a){var b=a.length,d=c.type(a);return"function"===d||c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||0===b||"number"==typeof b&&b>0&&b-1 in a}if(!a.jQuery){var c=function(a,b){return new c.fn.init(a,b)};c.isWindow=function(a){return null!=a&&a==a.window},c.type=function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?e[g.call(a)]||"object":typeof a},c.isArray=Array.isArray||function(a){return"array"===c.type(a)},c.isPlainObject=function(a){var b;if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!f.call(a,"constructor")&&!f.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}for(b in a);return void 0===b||f.call(a,b)},c.each=function(a,c,d){var e,f=0,g=a.length,h=b(a);if(d){if(h)for(;g>f&&(e=c.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=c.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=c.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=c.call(a[f],f,a[f]),e===!1)break;return a},c.data=function(a,b,e){if(void 0===e){var f=a[c.expando],g=f&&d[f];if(void 0===b)return g;if(g&&b in g)return g[b]}else if(void 0!==b){var f=a[c.expando]||(a[c.expando]=++c.uuid);return d[f]=d[f]||{},d[f][b]=e,e}},c.removeData=function(a,b){var e=a[c.expando],f=e&&d[e];f&&c.each(b,function(a,b){delete f[b]})},c.extend=function(){var a,b,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[i]||{},i++),"object"!=typeof h&&"function"!==c.type(h)&&(h={}),i===j&&(h=this,i--);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(c.isPlainObject(d)||(b=c.isArray(d)))?(b?(b=!1,g=a&&c.isArray(a)?a:[]):g=a&&c.isPlainObject(a)?a:{},h[e]=c.extend(k,g,d)):void 0!==d&&(h[e]=d));return h},c.queue=function(a,d,e){function f(a,c){var d=c||[];return null!=a&&(b(Object(a))?!function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;)a[e++]=b[d++];if(c!==c)for(;void 0!==b[d];)a[e++]=b[d++];return a.length=e,a}(d,"string"==typeof a?[a]:a):[].push.call(d,a)),d}if(a){d=(d||"fx")+"queue";var g=c.data(a,d);return e?(!g||c.isArray(e)?g=c.data(a,d,f(e)):g.push(e),g):g||[]}},c.dequeue=function(a,b){c.each(a.nodeType?[a]:a,function(a,d){b=b||"fx";var e=c.queue(d,b),f=e.shift();"inprogress"===f&&(f=e.shift()),f&&("fx"===b&&e.unshift("inprogress"),f.call(d,function(){c.dequeue(d,b)}))})},c.fn=c.prototype={init:function(a){if(a.nodeType)return this[0]=a,this;throw new Error("Not a DOM node.")},offset:function(){var b=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:b.top+(a.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:b.left+(a.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function a(){for(var a=this.offsetParent||document;a&&"html"===!a.nodeType.toLowerCase&&"static"===a.style.position;)a=a.offsetParent;return a||document}var b=this[0],a=a.apply(b),d=this.offset(),e=/^(?:body|html)$/i.test(a.nodeName)?{top:0,left:0}:c(a).offset();return d.top-=parseFloat(b.style.marginTop)||0,d.left-=parseFloat(b.style.marginLeft)||0,a.style&&(e.top+=parseFloat(a.style.borderTopWidth)||0,e.left+=parseFloat(a.style.borderLeftWidth)||0),{top:d.top-e.top,left:d.left-e.left}}};var d={};c.expando="velocity"+(new Date).getTime(),c.uuid=0;for(var e={},f=e.hasOwnProperty,g=e.toString,h="Boolean Number String Function Array Date RegExp Object Error".split(" "),i=0;ie;++e){var f=j(c,a,d);if(0===f)return c;var g=i(c,a,d)-b;c-=g/f}return c}function l(){for(var b=0;t>b;++b)x[b]=i(b*u,a,d)}function m(b,c,e){var f,g,h=0;do g=c+(e-c)/2,f=i(g,a,d)-b,f>0?e=g:c=g;while(Math.abs(f)>r&&++h=q?k(b,h):0==i?h:m(b,c,c+u)}function o(){y=!0,(a!=c||d!=e)&&l()}var p=4,q=.001,r=1e-7,s=10,t=11,u=1/(t-1),v="Float32Array"in b;if(4!==arguments.length)return!1;for(var w=0;4>w;++w)if("number"!=typeof arguments[w]||isNaN(arguments[w])||!isFinite(arguments[w]))return!1;a=Math.min(a,1),d=Math.min(d,1),a=Math.max(a,0),d=Math.max(d,0);var x=v?new Float32Array(t):new Array(t),y=!1,z=function(b){return y||o(),a===c&&d===e?b:0===b?0:1===b?1:i(n(b),c,e)};z.getControlPoints=function(){return[{x:a,y:c},{x:d,y:e}]};var A="generateBezier("+[a,c,d,e]+")";return z.toString=function(){return A},z}function j(a,b){var c=a;return p.isString(a)?t.Easings[a]||(c=!1):c=p.isArray(a)&&1===a.length?h.apply(null,a):p.isArray(a)&&2===a.length?u.apply(null,a.concat([b])):p.isArray(a)&&4===a.length?i.apply(null,a):!1,c===!1&&(c=t.Easings[t.defaults.easing]?t.defaults.easing:s),c}function k(a){if(a){var b=(new Date).getTime(),c=t.State.calls.length;c>1e4&&(t.State.calls=e(t.State.calls));for(var f=0;c>f;f++)if(t.State.calls[f]){var h=t.State.calls[f],i=h[0],j=h[2],n=h[3],o=!!n,q=null;n||(n=t.State.calls[f][3]=b-16);for(var r=Math.min((b-n)/j.duration,1),s=0,u=i.length;u>s;s++){var w=i[s],y=w.element;if(g(y)){var z=!1;if(j.display!==d&&null!==j.display&&"none"!==j.display){if("flex"===j.display){var A=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];m.each(A,function(a,b){v.setPropertyValue(y,"display",b)})}v.setPropertyValue(y,"display",j.display)}j.visibility!==d&&"hidden"!==j.visibility&&v.setPropertyValue(y,"visibility",j.visibility);for(var B in w)if("element"!==B){var C,D=w[B],E=p.isString(D.easing)?t.Easings[D.easing]:D.easing;if(1===r)C=D.endValue;else{var F=D.endValue-D.startValue;if(C=D.startValue+F*E(r,j,F),!o&&C===D.currentValue)continue}if(D.currentValue=C,"tween"===B)q=C;else{if(v.Hooks.registered[B]){var G=v.Hooks.getRoot(B),H=g(y).rootPropertyValueCache[G];H&&(D.rootPropertyValue=H)}var I=v.setPropertyValue(y,B,D.currentValue+(0===parseFloat(C)?"":D.unitType),D.rootPropertyValue,D.scrollData);v.Hooks.registered[B]&&(g(y).rootPropertyValueCache[G]=v.Normalizations.registered[G]?v.Normalizations.registered[G]("extract",null,I[1]):I[1]),"transform"===I[0]&&(z=!0)}}j.mobileHA&&g(y).transformCache.translate3d===d&&(g(y).transformCache.translate3d="(0px, 0px, 0px)",z=!0),z&&v.flushTransformCache(y)}}j.display!==d&&"none"!==j.display&&(t.State.calls[f][2].display=!1),j.visibility!==d&&"hidden"!==j.visibility&&(t.State.calls[f][2].visibility=!1),j.progress&&j.progress.call(h[1],h[1],r,Math.max(0,n+j.duration-b),n,q),1===r&&l(f)}}t.State.isTicking&&x(k)}function l(a,b){if(!t.State.calls[a])return!1;for(var c=t.State.calls[a][0],e=t.State.calls[a][1],f=t.State.calls[a][2],h=t.State.calls[a][4],i=!1,j=0,k=c.length;k>j;j++){var l=c[j].element;if(b||f.loop||("none"===f.display&&v.setPropertyValue(l,"display",f.display),"hidden"===f.visibility&&v.setPropertyValue(l,"visibility",f.visibility)),f.loop!==!0&&(m.queue(l)[1]===d||!/\.velocityQueueEntryFlag/i.test(m.queue(l)[1]))&&g(l)){g(l).isAnimating=!1,g(l).rootPropertyValueCache={};var n=!1;m.each(v.Lists.transforms3D,function(a,b){var c=/^scale/.test(b)?1:0,e=g(l).transformCache[b];g(l).transformCache[b]!==d&&new RegExp("^\\("+c+"[^.]").test(e)&&(n=!0,delete g(l).transformCache[b])}),f.mobileHA&&(n=!0,delete g(l).transformCache.translate3d),n&&v.flushTransformCache(l),v.Values.removeClass(l,"velocity-animating")}if(!b&&f.complete&&!f.loop&&j===k-1)try{f.complete.call(e,e)}catch(o){setTimeout(function(){throw o},1)}h&&f.loop!==!0&&h(e),g(l)&&f.loop===!0&&!b&&(m.each(g(l).tweensContainer,function(a,b){/^rotate/.test(a)&&360===parseFloat(b.endValue)&&(b.endValue=0,b.startValue=360),/^backgroundPosition/.test(a)&&100===parseFloat(b.endValue)&&"%"===b.unitType&&(b.endValue=0,b.startValue=100)}),t(l,"reverse",{loop:!0,delay:f.delay})),f.queue!==!1&&m.dequeue(l,f.queue)}t.State.calls[a]=!1;for(var p=0,q=t.State.calls.length;q>p;p++)if(t.State.calls[p]!==!1){i=!0;break}i===!1&&(t.State.isTicking=!1,delete t.State.calls,t.State.calls=[])}var m,n=function(){if(c.documentMode)return c.documentMode;for(var a=7;a>4;a--){var b=c.createElement("div");if(b.innerHTML="",b.getElementsByTagName("span").length)return b=null,a}return d}(),o=function(){var a=0;return b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||function(b){var c,d=(new Date).getTime();return c=Math.max(0,16-(d-a)),a=d+c,setTimeout(function(){b(d+c)},c)}}(),p={isString:function(a){return"string"==typeof a},isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},isFunction:function(a){return"[object Function]"===Object.prototype.toString.call(a)},isNode:function(a){return a&&a.nodeType},isNodeList:function(a){return"object"==typeof a&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(a))&&a.length!==d&&(0===a.length||"object"==typeof a[0]&&a[0].nodeType>0)},isWrapped:function(a){return a&&(a.jquery||b.Zepto&&b.Zepto.zepto.isZ(a))},isSVG:function(a){return b.SVGElement&&a instanceof b.SVGElement},isEmptyObject:function(a){for(var b in a)return!1;return!0}},q=!1;if(a.fn&&a.fn.jquery?(m=a,q=!0):m=b.Velocity.Utilities,8>=n&&!q)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=n)return void(jQuery.fn.velocity=jQuery.fn.animate);var r=400,s="swing",t={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:b.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:c.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:m,Redirects:{},Easings:{},Promise:b.Promise,defaults:{queue:"",duration:r,easing:s,begin:d,complete:d,progress:d,display:d,visibility:d,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(a){m.data(a,"velocity",{isSVG:p.isSVG(a),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};b.pageYOffset!==d?(t.State.scrollAnchor=b,t.State.scrollPropertyLeft="pageXOffset",t.State.scrollPropertyTop="pageYOffset"):(t.State.scrollAnchor=c.documentElement||c.body.parentNode||c.body,t.State.scrollPropertyLeft="scrollLeft",t.State.scrollPropertyTop="scrollTop");var u=function(){function a(a){return-a.tension*a.x-a.friction*a.v}function b(b,c,d){var e={x:b.x+d.dx*c,v:b.v+d.dv*c,tension:b.tension,friction:b.friction};return{dx:e.v,dv:a(e)}}function c(c,d){var e={dx:c.v,dv:a(c)},f=b(c,.5*d,e),g=b(c,.5*d,f),h=b(c,d,g),i=1/6*(e.dx+2*(f.dx+g.dx)+h.dx),j=1/6*(e.dv+2*(f.dv+g.dv)+h.dv);return c.x=c.x+i*d,c.v=c.v+j*d,c}return function d(a,b,e){var f,g,h,i={x:-1,v:0,tension:null,friction:null},j=[0],k=0,l=1e-4,m=.016;for(a=parseFloat(a)||500,b=parseFloat(b)||20,e=e||null,i.tension=a,i.friction=b,f=null!==e,f?(k=d(a,b),g=k/e*m):g=m;h=c(h||i,g),j.push(1+h.x),k+=16,Math.abs(h.x)>l&&Math.abs(h.v)>l;);return f?function(a){return j[a*(j.length-1)|0]}:k}}();t.Easings={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},spring:function(a){return 1-Math.cos(4.5*a*Math.PI)*Math.exp(6*-a)}},m.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(a,b){t.Easings[b[0]]=i.apply(null,b[1])});var v=t.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var a=0;a=n)switch(a){case"name":return"filter";case"extract":var d=c.toString().match(/alpha\(opacity=(.*)\)/i);return c=d?d[1]/100:1;case"inject":return b.style.zoom=1,parseFloat(c)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(c),10)+")"}else switch(a){case"name":return"opacity";case"extract":return c;case"inject":return c}}},register:function(){9>=n||t.State.isGingerbread||(v.Lists.transformsBase=v.Lists.transformsBase.concat(v.Lists.transforms3D));for(var a=0;ae&&(e=1),f=!/(\d)$/i.test(e);break;case"skew":f=!/(deg|\d)$/i.test(e);break;case"rotate":f=!/(deg|\d)$/i.test(e)}return f||(g(c).transformCache[b]="("+e+")"),g(c).transformCache[b]}}}();for(var a=0;a=n||3!==f.split(" ").length||(f+=" 1"),f;case"inject":return 8>=n?4===e.split(" ").length&&(e=e.split(/\s+/).slice(0,3).join(" ")):3===e.split(" ").length&&(e+=" 1"),(8>=n?"rgb":"rgba")+"("+e.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(a){return a.replace(/-(\w)/g,function(a,b){return b.toUpperCase()})},SVGAttribute:function(a){var b="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(n||t.State.isAndroid&&!t.State.isChrome)&&(b+="|transform"),new RegExp("^("+b+")$","i").test(a)},prefixCheck:function(a){if(t.State.prefixMatches[a])return[t.State.prefixMatches[a],!0];for(var b=["","Webkit","Moz","ms","O"],c=0,d=b.length;d>c;c++){var e;if(e=0===c?a:b[c]+a.replace(/^\w/,function(a){return a.toUpperCase()}),p.isString(t.State.prefixElement.style[e]))return t.State.prefixMatches[a]=e,[e,!0]}return[a,!1]}},Values:{hexToRgb:function(a){var b,c=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,d=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return a=a.replace(c,function(a,b,c,d){return b+b+c+c+d+d}),b=d.exec(a),b?[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]:[0,0,0]},isCSSNullValue:function(a){return 0==a||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(a)},getUnitType:function(a){return/^(rotate|skew)/i.test(a)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(a)?"":"px"},getDisplayType:function(a){var b=a&&a.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(b)?"inline":/^(li)$/i.test(b)?"list-item":/^(tr)$/i.test(b)?"table-row":/^(table)$/i.test(b)?"table":/^(tbody)$/i.test(b)?"table-row-group":"block"},addClass:function(a,b){a.classList?a.classList.add(b):a.className+=(a.className.length?" ":"")+b},removeClass:function(a,b){a.classList?a.classList.remove(b):a.className=a.className.toString().replace(new RegExp("(^|\\s)"+b.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(a,c,e,f){function h(a,c){function e(){j&&v.setPropertyValue(a,"display","none")}var i=0;if(8>=n)i=m.css(a,c);else{var j=!1;if(/^(width|height)$/.test(c)&&0===v.getPropertyValue(a,"display")&&(j=!0,v.setPropertyValue(a,"display",v.Values.getDisplayType(a))),!f){if("height"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var k=a.offsetHeight-(parseFloat(v.getPropertyValue(a,"borderTopWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderBottomWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingTop"))||0)-(parseFloat(v.getPropertyValue(a,"paddingBottom"))||0);return e(),k}if("width"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var l=a.offsetWidth-(parseFloat(v.getPropertyValue(a,"borderLeftWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderRightWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingLeft"))||0)-(parseFloat(v.getPropertyValue(a,"paddingRight"))||0);return e(),l}}var o;o=g(a)===d?b.getComputedStyle(a,null):g(a).computedStyle?g(a).computedStyle:g(a).computedStyle=b.getComputedStyle(a,null),"borderColor"===c&&(c="borderTopColor"),i=9===n&&"filter"===c?o.getPropertyValue(c):o[c],(""===i||null===i)&&(i=a.style[c]),e()}if("auto"===i&&/^(top|right|bottom|left)$/i.test(c)){var p=h(a,"position");("fixed"===p||"absolute"===p&&/top|left/i.test(c))&&(i=m(a).position()[c]+"px")}return i}var i;if(v.Hooks.registered[c]){var j=c,k=v.Hooks.getRoot(j);e===d&&(e=v.getPropertyValue(a,v.Names.prefixCheck(k)[0])),v.Normalizations.registered[k]&&(e=v.Normalizations.registered[k]("extract",a,e)),i=v.Hooks.extractValue(j,e)}else if(v.Normalizations.registered[c]){var l,o;l=v.Normalizations.registered[c]("name",a),"transform"!==l&&(o=h(a,v.Names.prefixCheck(l)[0]),v.Values.isCSSNullValue(o)&&v.Hooks.templates[c]&&(o=v.Hooks.templates[c][1])),i=v.Normalizations.registered[c]("extract",a,o)}if(!/^[\d-]/.test(i))if(g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c))if(/^(height|width)$/i.test(c))try{i=a.getBBox()[c]}catch(p){i=0}else i=a.getAttribute(c);else i=h(a,v.Names.prefixCheck(c)[0]);return v.Values.isCSSNullValue(i)&&(i=0),t.debug>=2&&console.log("Get "+c+": "+i),i},setPropertyValue:function(a,c,d,e,f){var h=c;if("scroll"===c)f.container?f.container["scroll"+f.direction]=d:"Left"===f.direction?b.scrollTo(d,f.alternateValue):b.scrollTo(f.alternateValue,d);else if(v.Normalizations.registered[c]&&"transform"===v.Normalizations.registered[c]("name",a))v.Normalizations.registered[c]("inject",a,d),h="transform",d=g(a).transformCache[c];else{if(v.Hooks.registered[c]){var i=c,j=v.Hooks.getRoot(c);e=e||v.getPropertyValue(a,j),d=v.Hooks.injectValue(i,d,e),c=j}if(v.Normalizations.registered[c]&&(d=v.Normalizations.registered[c]("inject",a,d),c=v.Normalizations.registered[c]("name",a)),h=v.Names.prefixCheck(c)[0],8>=n)try{a.style[h]=d}catch(k){t.debug&&console.log("Browser does not support ["+d+"] for ["+h+"]")}else g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c)?a.setAttribute(c,d):a.style[h]=d;t.debug>=2&&console.log("Set "+c+" ("+h+"): "+d)}return[h,d]},flushTransformCache:function(a){function b(b){return parseFloat(v.getPropertyValue(a,b))}var c="";if((n||t.State.isAndroid&&!t.State.isChrome)&&g(a).isSVG){var d={translate:[b("translateX"),b("translateY")],skewX:[b("skewX")],skewY:[b("skewY")],scale:1!==b("scale")?[b("scale"),b("scale")]:[b("scaleX"),b("scaleY")],rotate:[b("rotateZ"),0,0]};m.each(g(a).transformCache,function(a){/^translate/i.test(a)?a="translate":/^scale/i.test(a)?a="scale":/^rotate/i.test(a)&&(a="rotate"),d[a]&&(c+=a+"("+d[a].join(" ")+") ",delete d[a])})}else{var e,f;m.each(g(a).transformCache,function(b){return e=g(a).transformCache[b],"transformPerspective"===b?(f=e,!0):(9===n&&"rotateZ"===b&&(b="rotate"),void(c+=b+e+" "))}),f&&(c="perspective"+f+" "+c)}v.setPropertyValue(a,"transform",c)}};v.Hooks.register(),v.Normalizations.register(),t.hook=function(a,b,c){var e=d;return a=f(a),m.each(a,function(a,f){if(g(f)===d&&t.init(f),c===d)e===d&&(e=t.CSS.getPropertyValue(f,b));else{var h=t.CSS.setPropertyValue(f,b,c);"transform"===h[0]&&t.CSS.flushTransformCache(f),e=h}}),e};var w=function(){function a(){return h?B.promise||null:i}function e(){function a(){function a(a,b){var c=d,e=d,g=d;return p.isArray(a)?(c=a[0],!p.isArray(a[1])&&/^[\d-]/.test(a[1])||p.isFunction(a[1])||v.RegEx.isHex.test(a[1])?g=a[1]:(p.isString(a[1])&&!v.RegEx.isHex.test(a[1])||p.isArray(a[1]))&&(e=b?a[1]:j(a[1],h.duration),a[2]!==d&&(g=a[2]))):c=a,b||(e=e||h.easing),p.isFunction(c)&&(c=c.call(f,y,x)),p.isFunction(g)&&(g=g.call(f,y,x)),[c||0,e,g]}function l(a,b){var c,d;return d=(b||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(a){return c=a,""}),c||(c=v.Values.getUnitType(a)),[d,c]}function n(){var a={myParent:f.parentNode||c.body,position:v.getPropertyValue(f,"position"),fontSize:v.getPropertyValue(f,"fontSize")},d=a.position===I.lastPosition&&a.myParent===I.lastParent,e=a.fontSize===I.lastFontSize;I.lastParent=a.myParent,I.lastPosition=a.position,I.lastFontSize=a.fontSize;var h=100,i={};if(e&&d)i.emToPx=I.lastEmToPx,i.percentToPxWidth=I.lastPercentToPxWidth,i.percentToPxHeight=I.lastPercentToPxHeight;else{var j=g(f).isSVG?c.createElementNS("http://www.w3.org/2000/svg","rect"):c.createElement("div");t.init(j),a.myParent.appendChild(j),m.each(["overflow","overflowX","overflowY"],function(a,b){t.CSS.setPropertyValue(j,b,"hidden")}),t.CSS.setPropertyValue(j,"position",a.position),t.CSS.setPropertyValue(j,"fontSize",a.fontSize),t.CSS.setPropertyValue(j,"boxSizing","content-box"),m.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(a,b){t.CSS.setPropertyValue(j,b,h+"%")}),t.CSS.setPropertyValue(j,"paddingLeft",h+"em"),i.percentToPxWidth=I.lastPercentToPxWidth=(parseFloat(v.getPropertyValue(j,"width",null,!0))||1)/h,i.percentToPxHeight=I.lastPercentToPxHeight=(parseFloat(v.getPropertyValue(j,"height",null,!0))||1)/h,i.emToPx=I.lastEmToPx=(parseFloat(v.getPropertyValue(j,"paddingLeft"))||1)/h,a.myParent.removeChild(j)}return null===I.remToPx&&(I.remToPx=parseFloat(v.getPropertyValue(c.body,"fontSize"))||16),null===I.vwToPx&&(I.vwToPx=parseFloat(b.innerWidth)/100,I.vhToPx=parseFloat(b.innerHeight)/100),i.remToPx=I.remToPx,i.vwToPx=I.vwToPx,i.vhToPx=I.vhToPx,t.debug>=1&&console.log("Unit ratios: "+JSON.stringify(i),f),i}if(h.begin&&0===y)try{h.begin.call(o,o)}catch(r){setTimeout(function(){throw r},1)}if("scroll"===C){var u,w,z,A=/^x$/i.test(h.axis)?"Left":"Top",D=parseFloat(h.offset)||0;h.container?p.isWrapped(h.container)||p.isNode(h.container)?(h.container=h.container[0]||h.container,u=h.container["scroll"+A],z=u+m(f).position()[A.toLowerCase()]+D):h.container=null:(u=t.State.scrollAnchor[t.State["scrollProperty"+A]],w=t.State.scrollAnchor[t.State["scrollProperty"+("Left"===A?"Top":"Left")]],z=m(f).offset()[A.toLowerCase()]+D),i={scroll:{rootPropertyValue:!1,startValue:u,currentValue:u,endValue:z,unitType:"",easing:h.easing,scrollData:{container:h.container,direction:A,alternateValue:w}},element:f},t.debug&&console.log("tweensContainer (scroll): ",i.scroll,f)}else if("reverse"===C){if(!g(f).tweensContainer)return void m.dequeue(f,h.queue);"none"===g(f).opts.display&&(g(f).opts.display="auto"),"hidden"===g(f).opts.visibility&&(g(f).opts.visibility="visible"),g(f).opts.loop=!1,g(f).opts.begin=null,g(f).opts.complete=null,s.easing||delete h.easing,s.duration||delete h.duration,h=m.extend({},g(f).opts,h);var E=m.extend(!0,{},g(f).tweensContainer);for(var F in E)if("element"!==F){var G=E[F].startValue;E[F].startValue=E[F].currentValue=E[F].endValue,E[F].endValue=G,p.isEmptyObject(s)||(E[F].easing=h.easing),t.debug&&console.log("reverse tweensContainer ("+F+"): "+JSON.stringify(E[F]),f)}i=E}else if("start"===C){var E;g(f).tweensContainer&&g(f).isAnimating===!0&&(E=g(f).tweensContainer),m.each(q,function(b,c){if(RegExp("^"+v.Lists.colors.join("$|^")+"$").test(b)){var e=a(c,!0),f=e[0],g=e[1],h=e[2];if(v.RegEx.isHex.test(f)){for(var i=["Red","Green","Blue"],j=v.Values.hexToRgb(f),k=h?v.Values.hexToRgb(h):d,l=0;lL;L++){var M={delay:E.delay,progress:E.progress};L===K-1&&(M.display=E.display,M.visibility=E.visibility,M.complete=E.complete),w(o,"reverse",M)}return a()}};t=m.extend(w,t),t.animate=w;var x=b.requestAnimationFrame||o;return t.State.isMobile||c.hidden===d||c.addEventListener("visibilitychange",function(){c.hidden?(x=function(a){return setTimeout(function(){a(!0)},16)},k()):x=b.requestAnimationFrame||o}),a.Velocity=t,a!==b&&(a.fn.velocity=w,a.fn.velocity.defaults=t.defaults),m.each(["Down","Up"],function(a,b){t.Redirects["slide"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j=i.begin,k=i.complete,l={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},n={};i.display===d&&(i.display="Down"===b?"inline"===t.CSS.Values.getDisplayType(a)?"inline-block":"block":"none"),i.begin=function(){j&&j.call(g,g);for(var c in l){n[c]=a.style[c];var d=t.CSS.getPropertyValue(a,c);l[c]="Down"===b?[d,0]:[0,d]}n.overflow=a.style.overflow,a.style.overflow="hidden"},i.complete=function(){for(var b in n)a.style[b]=n[b];k&&k.call(g,g),h&&h.resolver(g)},t(a,l,i)}}),m.each(["In","Out"],function(a,b){t.Redirects["fade"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j={opacity:"In"===b?1:0},k=i.complete;i.complete=e!==f-1?i.begin=null:function(){k&&k.call(g,g),h&&h.resolver(g)},i.display===d&&(i.display="In"===b?"auto":"none"),t(this,j,i)}}),t}(window.jQuery||window.Zepto||window,window,document)}),!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=na(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===ya||f.eventType===Aa)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ba&&(i>xa||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=ma(l.x)>ma(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:la(c/b),y:la(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Ca:ma(a)>=ma(b)?a>0?Da:Ea:b>0?Fa:Ga}function I(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],La)-J(a[1],a[0],La)}function L(a,b){return I(b[0],b[1],La)/I(a[0],a[1],La)}function M(){this.evEl=Na,this.evWin=Oa,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Ra,this.evWin=Sa,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ua,this.evWin=Va,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Aa|Ba)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xa,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(ya|za)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===ya)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Aa|Ba)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Ta={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Ua="touchstart",Va="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Ta[a.type];if(b===ya&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Aa|Ba)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}});var Wa={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Xa="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wa[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==ta,e=c.pointerType==va;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Aa|Ba)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Ya=v(ja.style,"touchAction"),Za=Ya!==d,$a="compute",_a="auto",ab="manipulation",bb="none",cb="pan-x",db="pan-y";T.prototype={set:function(a){a==$a&&(a=this.compute()),Za&&(this.manager.element.style[Ya]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Za){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bb),f=q(d,db),g=q(d,cb);return e||f&&c&Ha||g&&c&Ia?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var eb=1,fb=2,gb=4,hb=8,ib=hb,jb=16,kb=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hb>d&&b(!0),b(),d>=hb&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kb)},canEmit:function(){for(var a=0;af?Da:Ea,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ca:0>g?Fa:Ga,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fb||!(this.state&fb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(aa,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_a]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Aa|Ba)&&!f)this.reset();else if(a.eventType&ya)this.reset(),this._timer=e(function(){this.state=ib,this.tryEmit()},b.time,this);else if(a.eventType&Aa)return ib;return kb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ib&&(a&&a.eventType&Aa?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=na(),this.manager.emit(this.options.event,this._input)))}}),j(ba,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fb)}}),j(ca,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Ha|Ia,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Ha|Ia)?b=a.velocity:c&Ha?b=a.velocityX:c&Ia&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&ma(b)>this.options.velocity&&a.eventType&Aa},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(da,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ab]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance li > .collapsible-header"),b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}),h.not(b).removeClass("active").parent().removeClass("active"),h.not(b).parent().children(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function d(b){b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function e(a){var b=f(a);return b.length>0}function f(a){return a.closest("li > .collapsible-header")}var g=a(this),h=a(this).find("> li > .collapsible-header"),i=g.data("collapsible");g.off("click.collapse",".collapsible-header"),h.off("click.collapse"),b.accordion||"accordion"===i||void 0===i?(h=g.find("> li > .collapsible-header"),h.on("click.collapse",function(b){var d=a(b.target);e(d)&&(d=f(d)),d.toggleClass("active"),c(d)}),c(h.filter(".active").first())):h.each(function(){a(this).on("click.collapse",function(b){var c=a(b.target);e(c)&&(c=f(c)),c.toggleClass("active"),d(c)}),a(this).hasClass("active")&&d(a(this))})})},a(document).ready(function(){a(".collapsible").collapsible()})}(jQuery),function(a){a.fn.scrollTo=function(b){return a(this).scrollTop(a(this).scrollTop()-a(this).offset().top+a(b).offset().top),this},a.fn.dropdown=function(b){var c={inDuration:300,outDuration:225,constrain_width:!0,hover:!1,gutter:0,belowOrigin:!1};this.each(function(){function d(){void 0!==g.data("induration")&&(h.inDuration=g.data("inDuration")),void 0!==g.data("outduration")&&(h.outDuration=g.data("outDuration")),void 0!==g.data("constrainwidth")&&(h.constrain_width=g.data("constrainwidth")),void 0!==g.data("hover")&&(h.hover=g.data("hover")),void 0!==g.data("gutter")&&(h.gutter=g.data("gutter")),void 0!==g.data("beloworigin")&&(h.belowOrigin=g.data("beloworigin"))}function e(){d(),i.addClass("active"),h.constrain_width===!0&&i.css("width",g.outerWidth());var b=0;h.belowOrigin===!0&&(b=g.height());var c=g.offset().left,e=0,f=h.gutter;c+i.innerWidth()>a(window).width()&&(e=g.innerWidth()-i.innerWidth(),f=-1*f),i.css({position:"absolute",top:g.position().top+b,left:g.position().left+e+f}),i.stop(!0,!0).css("opacity",0).slideDown({queue:!1,duration:h.inDuration,easing:"easeOutCubic",complete:function(){a(this).css("height","")}}).animate({opacity:1},{queue:!1,duration:h.inDuration,easing:"easeOutSine"})}function f(){i.fadeOut(h.outDuration),i.removeClass("active")}var g=a(this),h=a.extend({},c,b),i=a("#"+g.attr("data-activates"));if(d(),g.after(i),h.hover){var j=!1;g.unbind("click."+g.attr("id")),g.on("mouseenter",function(){j===!1&&(e(),j=!0)}),g.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-content").is(i)||(i.stop(!0,!0),f(),j=!1)}),i.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-button").is(g)||(i.stop(!0,!0),f(),j=!1)})}else g.unbind("click."+g.attr("id")),g.bind("click."+g.attr("id"),function(b){g[0]==b.currentTarget&&0===a(b.target).closest(".dropdown-content").length?(b.preventDefault(),e()):g.hasClass("active")&&(f(),a(document).unbind("click."+i.attr("id"))),i.hasClass("active")&&a(document).bind("click."+i.attr("id"),function(b){!i.is(b.target)&&!g.is(b.target)&&!g.find(b.target).length>0&&(f(),a(document).unbind("click."+i.attr("id")))})});g.on("open",e),g.on("close",f)})},a(document).ready(function(){a(".dropdown-button").dropdown()})}(jQuery),function(a){var b=0,c=0,d=function(){return c++,"materialize-lean-overlay-"+c};a.fn.extend({openModal:function(c){a("body").css("overflow","hidden");var e={opacity:.5,in_duration:350,out_duration:250,ready:void 0,complete:void 0,dismissible:!0,starting_top:"4%"},f=d(),g=a(this),h=a('
            '),i=++b;h.attr("id",f).css("z-index",1e3+2*i),g.data("overlay-id",f).css("z-index",1e3+2*i+1),a("body").append(h),c=a.extend(e,c),c.dismissible&&(h.click(function(){g.closeModal(c)}),a(document).on("keyup.leanModal"+f,function(a){27===a.keyCode&&g.closeModal(c)})),g.find(".modal-close").on("click.close",function(){g.closeModal(c)}),h.css({display:"block",opacity:0}),g.css({display:"block",opacity:0}),h.velocity({opacity:c.opacity},{duration:c.in_duration,queue:!1,ease:"easeOutCubic"}),g.data("associated-overlay",h[0]),g.hasClass("bottom-sheet")?g.velocity({bottom:"0",opacity:1},{duration:c.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready()}}):(a.Velocity.hook(g,"scaleX",.7),g.css({top:c.starting_top}),g.velocity({top:"10%",opacity:1,scaleX:"1"},{duration:c.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready()}}))}}),a.fn.extend({closeModal:function(c){var d={out_duration:250,complete:void 0},e=a(this),f=e.data("overlay-id"),g=a("#"+f);c=a.extend(d,c),a("body").css("overflow",""),e.find(".modal-close").off("click.close"),a(document).off("keyup.leanModal"+f),g.velocity({opacity:0},{duration:c.out_duration,queue:!1,ease:"easeOutQuart"}),e.hasClass("bottom-sheet")?e.velocity({bottom:"-100%",opacity:0},{duration:c.out_duration,queue:!1,ease:"easeOutCubic",complete:function(){g.css({display:"none"}),"function"==typeof c.complete&&c.complete(),g.remove(),b--}}):e.velocity({top:c.starting_top,opacity:0,scaleX:.7},{duration:c.out_duration,complete:function(){a(this).css("display","none"),"function"==typeof c.complete&&c.complete(),g.remove(),b--}})}}),a.fn.extend({leanModal:function(b){return this.each(function(){var c={starting_top:"4%"},d=a.extend(c,b);a(this).click(function(b){d.starting_top=(a(this).offset().top-a(window).scrollTop())/1.15;var c=a(this).attr("href")||"#"+a(this).data("target");a(c).openModal(d),b.preventDefault()})})}})}(jQuery),function(a){a.fn.materialbox=function(){return this.each(function(){function b(){d=!1;var b=g.parent(".material-placeholder"),e=(window.innerWidth,window.innerHeight,g.data("width")),h=g.data("height");g.velocity("stop",!0),a("#materialbox-overlay").velocity("stop",!0),a(".materialbox-caption").velocity("stop",!0),a("#materialbox-overlay").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){ -c=!1,a(this).remove()}}),g.velocity({width:e,height:h,left:0,top:0},{duration:f,queue:!1,easing:"easeOutQuad"}),a(".materialbox-caption").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){b.css({height:"",width:"",position:"",top:"",left:""}),g.css({height:"",top:"",left:"",width:"","max-width":"",position:"","z-index":""}),g.removeClass("active"),d=!0,a(this).remove()}})}if(!a(this).hasClass("initialized")){a(this).addClass("initialized");var c=!1,d=!0,e=275,f=200,g=a(this),h=a("
            ").addClass("material-placeholder");g.wrap(h),g.on("click",function(){var f=g.parent(".material-placeholder"),h=window.innerWidth,i=window.innerHeight,j=g.width(),k=g.height();if(d===!1)return b(),!1;if(c&&d===!0)return b(),!1;d=!1,g.addClass("active"),c=!0,f.css({width:f[0].getBoundingClientRect().width,height:f[0].getBoundingClientRect().height,position:"relative",top:0,left:0}),g.css({position:"absolute","z-index":1e3}).data("width",j).data("height",k);var l=a('
            ').css({opacity:0}).click(function(){d===!0&&b()});if(a("body").append(l),l.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"}),""!==g.data("caption")){var m=a('
            ');m.text(g.data("caption")),a("body").append(m),m.css({display:"inline"}),m.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"})}var n=0,o=j/h,p=k/i,q=0,r=0;o>p?(n=k/j,q=.9*h,r=.9*h*n):(n=j/k,q=.9*i*n,r=.9*i),g.hasClass("responsive-img")?g.velocity({"max-width":q,width:j},{duration:0,queue:!1,complete:function(){g.css({left:0,top:0}).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}}):g.css("left",0).css("top",0).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}),a(window).scroll(function(){c&&b()}),a(document).keyup(function(a){27===a.keyCode&&d===!0&&c&&b()})}})},a(document).ready(function(){a(".materialboxed").materialbox()})}(jQuery),function(a){a.fn.parallax=function(){var b=a(window).width();return this.each(function(){function c(c){var e;e=601>b?d.height()>0?d.height():d.children("img").height():d.height()>0?d.height():500;var f=d.children("img").first(),g=f.height(),h=g-e,i=d.offset().top+e,j=d.offset().top,k=a(window).scrollTop(),l=window.innerHeight,m=k+l,n=(m-j)/(e+l),o=Math.round(h*n);c&&f.css("display","block"),i>k&&k+l>j&&f.css("transform","translate3D(-50%,"+o+"px, 0)")}var d=a(this);d.addClass("parallax"),d.children("img").one("load",function(){c(!0)}).each(function(){this.complete&&a(this).load()}),a(window).scroll(function(){b=a(window).width(),c(!1)}),a(window).resize(function(){b=a(window).width(),c(!1)})})}}(jQuery),function(a){var b={init:function(){return this.each(function(){{var b=a(this);a(window).width()}b.width("100%");var c=a(this).children("li").length;b.children("li").each(function(){a(this).width(100/c+"%")});var d,e,f=b.find("li.tab a"),g=b.width(),h=b.find("li").first().outerWidth(),i=0;d=a(f.filter('[href="'+location.hash+'"]')),0===d.length&&(d=a(this).find("li.tab a.active").first()),0===d.length&&(d=a(this).find("li.tab a").first()),d.addClass("active"),i=f.index(d),0>i&&(i=0),e=a(d[0].hash),b.append('
            ');var j=b.find(".indicator");b.is(":visible")&&(j.css({right:g-(i+1)*h}),j.css({left:i*h})),a(window).resize(function(){g=b.width(),h=b.find("li").first().outerWidth(),0>i&&(i=0),0!==h&&0!==g&&(j.css({right:g-(i+1)*h}),j.css({left:i*h}))}),f.not(d).each(function(){a(this.hash).hide()}),b.on("click","a",function(c){if(a(this).parent().hasClass("disabled"))return void c.preventDefault();g=b.width(),h=b.find("li").first().outerWidth(),d.removeClass("active"),e.hide(),d=a(this),e=a(this.hash),f=b.find("li.tab a"),d.addClass("active");var k=i;i=f.index(a(this)),0>i&&(i=0),e.show(),i-k>=0?(j.velocity({right:g-(i+1)*h},{duration:300,queue:!1,easing:"easeOutQuad"}),j.velocity({left:i*h},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})):(j.velocity({left:i*h},{duration:300,queue:!1,easing:"easeOutQuad"}),j.velocity({right:g-(i+1)*h},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})),c.preventDefault()})})},select_tab:function(a){this.find('a[href="#'+a+'"]').trigger("click")}};a.fn.tabs=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)},a(document).ready(function(){a("ul.tabs").tabs()})}(jQuery),function(a){a.fn.tooltip=function(b){var c=null,d=!1,e=null,f=5,g={delay:350};return b=a.extend(g,b),a(".material-tooltip").remove(),this.each(function(){var g=a(this),h=a("").text(g.attr("data-tooltip")),i=a("
            ");i.addClass("material-tooltip").append(h),i.appendTo(a("body"));var j=a("
            ").addClass("backdrop");j.appendTo(i),j.css({top:0,left:0}),a(this).off("mouseenter mouseleave"),a(this).on({mouseenter:function(){var a=g.data("delay");a=void 0===a||""===a?b.delay:a,c=0,e=setInterval(function(){if(c+=10,c>=a&&d===!1){d=!0,i.css({display:"block",left:"0px",top:"0px"}),i.children("span").text(g.attr("data-tooltip"));var b=g.outerWidth(),e=g.outerHeight(),h=g.attr("data-position"),k=i.outerHeight(),l=i.outerWidth(),m="0px",n="0px",o=8;"top"===h?(i.css({top:g.offset().top-k-f,left:g.offset().left+b/2-l/2}),m="-10px",j.css({borderRadius:"14px 14px 0 0",transformOrigin:"50% 90%",marginTop:k,marginLeft:l/2-j.width()/2})):"left"===h?(i.css({top:g.offset().top+e/2-k/2,left:g.offset().left-l-f}),n="-10px",j.css({width:"14px",height:"14px",borderRadius:"14px 0 0 14px",transformOrigin:"95% 50%",marginTop:k/2,marginLeft:l})):"right"===h?(i.css({top:g.offset().top+e/2-k/2,left:g.offset().left+b+f}),n="+10px",j.css({width:"14px",height:"14px",borderRadius:"0 14px 14px 0",transformOrigin:"5% 50%",marginTop:k/2,marginLeft:"0px"})):(i.css({top:g.offset().top+g.outerHeight()+f,left:g.offset().left+b/2-l/2}),m="+10px",j.css({marginLeft:l/2-j.width()/2})),o=l/8,8>o&&(o=8),("right"===h||"left"===h)&&(o=l/10,6>o&&(o=6)),i.velocity({opacity:1,marginTop:m,marginLeft:n},{duration:350,queue:!1}),j.css({display:"block"}).velocity({opacity:1},{duration:55,delay:0,queue:!1}).velocity({scale:o},{duration:300,delay:0,queue:!1,easing:"easeInOutQuad"})}},10)},mouseleave:function(){clearInterval(e),c=0,i.velocity({opacity:0,marginTop:0,marginLeft:0},{duration:225,queue:!1,delay:275}),j.velocity({opacity:0,scale:1},{duration:225,delay:275,queue:!1,complete:function(){j.css("display","none"),i.css("display","none"),d=!1}})}})})},a(document).ready(function(){a(".tooltipped").tooltip()})}(jQuery),function(a){"use strict";function b(a){return null!==a&&a===a.window}function c(a){return b(a)?a:9===a.nodeType&&a.defaultView}function d(a){var b,d,e={top:0,left:0},f=a&&a.ownerDocument;return b=f.documentElement,"undefined"!=typeof a.getBoundingClientRect&&(e=a.getBoundingClientRect()),d=c(f),{top:e.top+d.pageYOffset-b.clientTop,left:e.left+d.pageXOffset-b.clientLeft}}function e(a){var b="";for(var c in a)a.hasOwnProperty(c)&&(b+=c+":"+a[c]+";");return b}function f(a){if(k.allowEvent(a)===!1)return null;for(var b=null,c=a.target||a.srcElement;null!==c.parentElement;){if(!(c instanceof SVGElement||-1===c.className.indexOf("waves-effect"))){b=c;break}if(c.classList.contains("waves-effect")){b=c;break}c=c.parentElement}return b}function g(b){var c=f(b);null!==c&&(j.show(b,c),"ontouchstart"in a&&(c.addEventListener("touchend",j.hide,!1),c.addEventListener("touchcancel",j.hide,!1)),c.addEventListener("mouseup",j.hide,!1),c.addEventListener("mouseleave",j.hide,!1))}var h=h||{},i=document.querySelectorAll.bind(document),j={duration:750,show:function(a,b){if(2===a.button)return!1;var c=b||this,f=document.createElement("div");f.className="waves-ripple",c.appendChild(f);var g=d(c),h=a.pageY-g.top,i=a.pageX-g.left,k="scale("+c.clientWidth/100*10+")";"touches"in a&&(h=a.touches[0].pageY-g.top,i=a.touches[0].pageX-g.left),f.setAttribute("data-hold",Date.now()),f.setAttribute("data-scale",k),f.setAttribute("data-x",i),f.setAttribute("data-y",h);var l={top:h+"px",left:i+"px"};f.className=f.className+" waves-notransition",f.setAttribute("style",e(l)),f.className=f.className.replace("waves-notransition",""),l["-webkit-transform"]=k,l["-moz-transform"]=k,l["-ms-transform"]=k,l["-o-transform"]=k,l.transform=k,l.opacity="1",l["-webkit-transition-duration"]=j.duration+"ms",l["-moz-transition-duration"]=j.duration+"ms",l["-o-transition-duration"]=j.duration+"ms",l["transition-duration"]=j.duration+"ms",l["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f.setAttribute("style",e(l))},hide:function(a){k.touchup(a);var b=this,c=(1.4*b.clientWidth,null),d=b.getElementsByClassName("waves-ripple");if(!(d.length>0))return!1;c=d[d.length-1];var f=c.getAttribute("data-x"),g=c.getAttribute("data-y"),h=c.getAttribute("data-scale"),i=Date.now()-Number(c.getAttribute("data-hold")),l=350-i;0>l&&(l=0),setTimeout(function(){var a={top:g+"px",left:f+"px",opacity:"0","-webkit-transition-duration":j.duration+"ms","-moz-transition-duration":j.duration+"ms","-o-transition-duration":j.duration+"ms","transition-duration":j.duration+"ms","-webkit-transform":h,"-moz-transform":h,"-ms-transform":h,"-o-transform":h,transform:h};c.setAttribute("style",e(a)),setTimeout(function(){try{b.removeChild(c)}catch(a){return!1}},j.duration)},l)},wrapInput:function(a){for(var b=0;b0&&(k.touches-=1)},500):"mousedown"===a.type&&k.touches>0&&(b=!1),b},touchup:function(a){k.allowEvent(a)}};h.displayEffect=function(b){b=b||{},"duration"in b&&(j.duration=b.duration),j.wrapInput(i(".waves-effect")),"ontouchstart"in a&&document.body.addEventListener("touchstart",g,!1),document.body.addEventListener("mousedown",g,!1)},h.attach=function(b){"input"===b.tagName.toLowerCase()&&(j.wrapInput([b]),b=b.parentElement),"ontouchstart"in a&&b.addEventListener("touchstart",g,!1),b.addEventListener("mousedown",g,!1)},a.Waves=h,document.addEventListener("DOMContentLoaded",function(){h.displayEffect()},!1)}(window),Materialize.toast=function(a,b,c,d){function e(a){var b=document.createElement("div");if(b.classList.add("toast"),c)for(var e=c.split(" "),f=0,g=e.length;g>f;f++)b.classList.add(e[f]);b.innerHTML=a;var h=new Hammer(b,{prevent_default:!1});return h.on("pan",function(a){var c=a.deltaX,d=80;b.classList.contains("panning")||b.classList.add("panning");var e=1-Math.abs(c/d);0>e&&(e=0),Vel(b,{left:c,opacity:e},{duration:50,queue:!1,easing:"easeOutQuad"})}),h.on("panend",function(a){var c=a.deltaX,e=80;Math.abs(c)>e?Vel(b,{marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),b.parentNode.removeChild(b)}}):(b.classList.remove("panning"),Vel(b,{left:0,opacity:1},{duration:300,easing:"easeOutExpo",queue:!1}))}),b}c=c||"";var f=document.getElementById("toast-container");null===f&&(f=document.createElement("div"),f.id="toast-container",document.body.appendChild(f));var g=e(a);a&&f.appendChild(g),g.style.top="35px",g.style.opacity=0,Vel(g,{top:"0px",opacity:1},{duration:300,easing:"easeOutCubic",queue:!1});var h=b,i=setInterval(function(){null===g.parentNode&&window.clearInterval(i),g.classList.contains("panning")||(h-=20),0>=h&&(Vel(g,{opacity:0,marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),this[0].parentNode.removeChild(this[0])}}),window.clearInterval(i))},20)},function(a){var b={init:function(b){var c={menuWidth:240,edge:"left",closeOnClick:!1};b=a.extend(c,b),a(this).each(function(){function c(c){f=!1,g=!1,a("body").css("overflow",""),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),"left"===b.edge?(a(".drag-target").css({width:"",right:"",left:"0"}),e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(e.removeAttr("style"),e.css("width",b.menuWidth))}})):(a(".drag-target").css({width:"",right:"0",left:""}),e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(e.removeAttr("style"),e.css("width",b.menuWidth))}}))}var d=a(this),e=a("#"+d.attr("data-activates"));240!=b.menuWidth&&e.css("width",b.menuWidth),a("body").append(a('
            ')),"left"==b.edge?(e.css("left",-1*(b.menuWidth+10)),a(".drag-target").css({left:0})):(e.addClass("right-aligned").css("right",-1*(b.menuWidth+10)).css("left",""),a(".drag-target").css({right:0})),e.hasClass("fixed")&&window.innerWidth>992&&e.css("left",0),e.hasClass("fixed")&&a(window).resize(function(){window.innerWidth>992?0!==a("#sidenav-overlay").css("opacity")&&g?c(!0):(e.removeAttr("style"),e.css("width",b.menuWidth)):g===!1&&("left"===b.edge?e.css("left",-1*(b.menuWidth+10)):e.css("right",-1*(b.menuWidth+10)))}),b.closeOnClick===!0&&e.on("click.itemclick","a:not(.collapsible-header)",function(){c()});var f=!1,g=!1;a(".drag-target").on("click",function(){c()}),a(".drag-target").hammer({prevent_default:!1}).bind("pan",function(d){if("touch"==d.gesture.pointerType){{var f=(d.gesture.direction,d.gesture.center.x);d.gesture.center.y,d.gesture.velocityX}if(a("body").css("overflow","hidden"),0===a("#sidenav-overlay").length){var h=a('
            ');h.css("opacity",0).click(function(){c()}),a("body").append(h)}if("left"===b.edge&&(f>b.menuWidth?f=b.menuWidth:0>f&&(f=0)),"left"===b.edge)f=b.menuWidth/2&&(g=!0),e.css("left",f-b.menuWidth);else{f=window.innerWidth-b.menuWidth/2&&(g=!1);var i=-1*(f-b.menuWidth/2);i>0&&(i=0),e.css("right",i)}var j;"left"===b.edge?(j=f/b.menuWidth,a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"})):(j=Math.abs((f-window.innerWidth)/b.menuWidth),a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(c){if("touch"==c.gesture.pointerType){var d=c.gesture.velocityX;f=!1,"left"===b.edge?g&&.3>=d||-.5>d?(e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),a(".drag-target").css({width:"50%",right:0,left:""})):(!g||d>.3)&&(a("body").css("overflow",""),e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),a(".drag-target").css({width:"10px",right:"",left:0})):g&&d>=-.3||d>.5?(e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),a(".drag-target").css({width:"50%",right:"",left:0})):(!g||-.3>d)&&(a("body").css("overflow",""),e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),a(".drag-target").css({width:"10px",right:0,left:""}))}}),d.click(function(){if(g===!0)g=!1,f=!1,c();else{a("body").css("overflow","hidden"),"left"===b.edge?(a(".drag-target").css({width:"50%",right:0,left:""}),e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"})):(a(".drag-target").css({width:"50%",right:"",left:0}),e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),e.css("left",""));var d=a('
            ');d.css("opacity",0).click(function(){g=!1,f=!1,c(),d.velocity({opacity:0},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}})}),a("body").append(d),d.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){g=!0,f=!1}})}return!1})})},show:function(){this.trigger("click")},hide:function(){a("#sidenav-overlay").trigger("click")}};a.fn.sideNav=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.sideNav"):b.init.apply(this,arguments)}}(jQuery),function(a){function b(b,c,d,e){var f=a();return a.each(g,function(a,g){if(g.height()>0){var h=g.offset().top,i=g.offset().left,j=i+g.width(),k=h+g.height(),l=!(i>c||e>j||h>d||b>k);l&&f.push(g)}}),f}function c(){++j;var c=f.scrollTop(),d=f.scrollLeft(),e=d+f.width(),g=c+f.height(),i=b(c+k.top+200,e+k.right,g+k.bottom,d+k.left);a.each(i,function(a,b){var c=b.data("scrollSpy:ticks");"number"!=typeof c&&b.triggerHandler("scrollSpy:enter"),b.data("scrollSpy:ticks",j)}),a.each(h,function(a,b){var c=b.data("scrollSpy:ticks");"number"==typeof c&&c!==j&&(b.triggerHandler("scrollSpy:exit"),b.data("scrollSpy:ticks",null))}),h=i}function d(){f.trigger("scrollSpy:winSize")}function e(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:l(),g=null,f=a.apply(d,e),d=e=null};return function(){var j=l();h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}}var f=a(window),g=[],h=[],i=!1,j=0,k={top:0,right:0,bottom:0,left:0},l=Date.now||function(){return(new Date).getTime()};a.scrollSpy=function(b,d){var h=[];b=a(b),b.each(function(b,c){g.push(a(c)),a(c).data("scrollSpy:id",b),a("a[href=#"+a(c).attr("id")+"]").click(function(b){b.preventDefault();var c=a(this.hash).offset().top+1;a("html, body").animate({scrollTop:c-200},{duration:400,queue:!1,easing:"easeOutCubic"})})}),d=d||{throttle:100},k.top=d.offsetTop||0,k.right=d.offsetRight||0,k.bottom=d.offsetBottom||0,k.left=d.offsetLeft||0;var j=e(c,d.throttle||100),l=function(){a(document).ready(j)};return i||(f.on("scroll",l),f.on("resize",l),i=!0),setTimeout(l,0),b.on("scrollSpy:enter",function(){h=a.grep(h,function(a){return 0!=a.height()});var b=a(this);h[0]?(a("a[href=#"+h[0].attr("id")+"]").removeClass("active"),b.data("scrollSpy:id")");d.html(f),b.is(":visible")?d.css("width",b.width()):d.css("width",a(window).width()/2),b.css("height",d.height())}Materialize.updateTextFields=function(){var b="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a(b).each(function(b,c){a(c).val().length>0||void 0!==a(this).attr("placeholder")||a(c)[0].validity.badInput===!0?a(this).siblings("label, i").addClass("active"):a(this).siblings("label, i").removeClass("active")})};var c="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a("input[autofocus]").siblings("label, i").addClass("active"),a(document).on("change",c,function(){(0!==a(this).val().length||void 0!==a(this).attr("placeholder"))&&a(this).siblings("label, i").addClass("active"),validate_field(a(this))}),a(document).ready(function(){Materialize.updateTextFields()}),a(document).on("reset",function(b){var d=a(b.target);d.is("form")&&(d.find(c).removeClass("valid").removeClass("invalid"),d.find(c).each(function(){""===a(this).attr("value")&&a(this).siblings("label, i").removeClass("active")}),d.find("select.initialized").each(function(){var a=d.find("option[selected]").text();d.siblings("input.select-dropdown").val(a)}))}),a(document).on("focus",c,function(){a(this).siblings("label, i").addClass("active")}),a(document).on("blur",c,function(){var b=a(this);0===b.val().length&&b[0].validity.badInput!==!0&&void 0===b.attr("placeholder")&&b.siblings("label, i").removeClass("active"),validate_field(b)}),validate_field=function(a){var b=void 0!==a.attr("length"),c=parseInt(a.attr("length")),d=a.val().length;0===a.val().length&&a[0].validity.badInput===!1?a.hasClass("validate")&&(a.removeClass("valid"),a.removeClass("invalid")):a.hasClass("validate")&&(a.is(":valid")&&b&&c>d||a.is(":valid")&&!b?(a.removeClass("invalid"),a.addClass("valid")):(a.removeClass("valid"),a.addClass("invalid")))};var d=a(".hiddendiv").first();d.length||(d=a('
            '),a("body").append(d));var e=".materialize-textarea";a(e).each(function(){var c=a(this);c.val().length&&b(c)}),a("body").on("keyup keydown",e,function(){b(a(this))}),a(".file-field").each(function(){var b=a(this).find("input.file-path");a(this).find('input[type="file"]').change(function(){b.val(a(this)[0].files[0].name),b.trigger("change")})});var f,g="input[type=range]",h=!1;a(g).each(function(){var b=a('');a(this).after(b)});var i=".range-field";a(document).on("change",g,function(){var b=a(this).siblings(".thumb");b.find(".value").html(a(this).val())}),a(document).on("mousedown touchstart",g,function(b){var c=a(this).siblings(".thumb");c.length<=0&&(c=a(''),a(this).append(c)),c.find(".value").html(a(this).val()),h=!0,a(this).addClass("active"),c.hasClass("active")||c.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),f=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left;var d=a(this).outerWidth();0>f?f=0:f>d&&(f=d),c.addClass("active").css("left",f),c.find(".value").html(a(this).val())}),a(document).on("mouseup touchend",i,function(){h=!1,a(this).removeClass("active")}),a(document).on("mousemove touchmove",i,function(b){var c,d=a(this).children(".thumb");if(h){d.hasClass("active")||d.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),c=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left;var e=a(this).outerWidth();0>c?c=0:c>e&&(c=e),d.addClass("active").css("left",c)}}),a(document).on("mouseout touchleave",i,function(){if(!h){var b=a(this).children(".thumb");b.hasClass("active")&&b.velocity({height:"0",width:"0",top:"10px",marginLeft:"-6px"},{duration:100}),b.removeClass("active")}})}),a.fn.material_select=function(b){a(this).each(function(){if($select=a(this),!$select.hasClass("browser-default")){var c=$select.data("select-id");if(c&&($select.parent().find("i").remove(),$select.parent().find("input").remove(),$select.unwrap(),a("ul#select-options-"+c).remove()),"destroy"===b)return void $select.data("select-id",null).removeClass("initialized");var d=Materialize.guid();$select.data("select-id",d);var e=a('
            ');e.addClass($select.attr("class"));var f,g=a(''),h=$select.children("option");f=void 0!==$select.find("option:selected")?$select.find("option:selected"):g.first(),h.each(function(){g.append(a('
          • '+a(this).html()+"
          • "))}),g.find("li").each(function(c){var d=$select;a(this).click(function(){a(this).hasClass("disabled")||(d.find("option").eq(c).prop("selected",!0),d.trigger("change"),d.siblings("input.select-dropdown").val(a(this).text()),"undefined"!=typeof b&&b())})}),$select.wrap(e);var i=a('');$select.is(":disabled")&&i.addClass("disabled");var j=a('');$select.before(j),j.before(i),a("body").append(g),$select.is(":disabled")||j.dropdown({hover:!1}),$select.attr("tabindex")&&a(j[0]).attr("tabindex",$select.attr("tabindex")),$select.addClass("initialized"),j.on("focus",function(){a(this).trigger("open"),f=a(this).val(),selectedOption=g.find("li").filter(function(){return a(this).text().toLowerCase()===f.toLowerCase()})[0],activateOption(g,selectedOption)}),j.on("blur",function(){a(this).trigger("close")}),activateOption=function(b,c){b.find("li.active").removeClass("active"),a(c).addClass("active"),b.scrollTo(c)},filterQuery=[],onKeyDown=function(b){if(9==b.which)return void j.trigger("close");if(40==b.which&&!g.is(":visible"))return void j.trigger("open");if(13!=b.which||g.is(":visible")){b.preventDefault(),letter=String.fromCharCode(b.which).toLowerCase();var c=[9,13,27,38,40];letter&&-1===c.indexOf(b.which)&&(filterQuery.push(letter),string=filterQuery.join(""),newOption=g.find("li").filter(function(){return 0===a(this).text().toLowerCase().indexOf(string)})[0],newOption&&activateOption(g,newOption)),13==b.which&&(activeOption=g.find("li.active:not(.disabled)")[0],activeOption&&(a(activeOption).trigger("click"),j.trigger("close"))),40==b.which&&(newOption=g.find("li.active").next("li:not(.disabled)")[0],newOption&&activateOption(g,newOption)),27==b.which&&j.trigger("close"),38==b.which&&(newOption=g.find("li.active").prev("li:not(.disabled)")[0],newOption&&activateOption(g,newOption)),setTimeout(function(){filterQuery=[]},1e3)}},j.on("keydown",onKeyDown)}})}}(jQuery),function(a){var b={init:function(b){var c={indicators:!0,height:400,transition:500,interval:6e3};return b=a.extend(c,b),this.each(function(){function c(a,b){a.hasClass("center-align")?a.velocity({opacity:0,translateY:-100},{duration:b,queue:!1}):a.hasClass("right-align")?a.velocity({opacity:0,translateX:100},{duration:b,queue:!1}):a.hasClass("left-align")&&a.velocity({opacity:0,translateX:-100},{duration:b,queue:!1})}function d(a){a>=h.length?a=0:0>a&&(a=h.length-1),i=g.find(".active").index(),i!=a&&(e=h.eq(i),$caption=e.find(".caption"),e.removeClass("active"),e.velocity({opacity:0},{duration:b.transition,queue:!1,easing:"easeOutQuad",complete:function(){h.not(".active").velocity({opacity:0,translateX:0,translateY:0},{duration:0,queue:!1})}}),c($caption,b.transition),b.indicators&&j.eq(i).removeClass("active"),h.eq(a).velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,delay:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).addClass("active"),b.indicators&&j.eq(a).addClass("active"))}var e,f=a(this),g=f.find("ul.slides").first(),h=g.find("li"),i=g.find(".active").index();if(-1!=i&&(e=h.eq(i)),f.hasClass("fullscreen")||(f.height(b.indicators?b.height+40:b.height),g.height(b.height)),h.find(".caption").each(function(){c(a(this),0)}),h.find("img").each(function(){a(this).css("background-image","url("+a(this).attr("src")+")"),a(this).attr("src","data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==")}),b.indicators){var j=a('
              ');h.each(function(){var c=a('
            • ');c.click(function(){var c=g.parent(),e=c.find(a(this)).index();d(e),clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval)}),j.append(c)}),f.append(j),j=f.find("ul.indicators").find("li.indicator-item")}e?e.show():(h.first().addClass("active").velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),i=0,e=h.eq(i),b.indicators&&j.eq(i).addClass("active")),e.find("img").each(function(){e.find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,queue:!1,easing:"easeOutQuad"})}),$interval=setInterval(function(){i=g.find(".active").index(),d(i+1)},b.transition+b.interval);var k=!1,l=!1,m=!1;f.hammer({prevent_default:!1}).bind("pan",function(a){if("touch"===a.gesture.pointerType){clearInterval($interval);var b=a.gesture.direction,c=a.gesture.deltaX,d=a.gesture.velocityX;$curr_slide=g.find(".active"),$curr_slide.velocity({translateX:c},{duration:50,queue:!1,easing:"easeOutQuad"}),4===b&&(c>f.innerWidth()/2||-.65>d)?m=!0:2===b&&(c<-1*f.innerWidth()/2||d>.65)&&(l=!0);var e;l&&(e=$curr_slide.next(),0===e.length&&(e=h.first()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"})),m&&(e=$curr_slide.prev(),0===e.length&&(e=h.last()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(a){"touch"===a.gesture.pointerType&&($curr_slide=g.find(".active"),k=!1,curr_index=g.find(".active").index(),m||l?l?(d(curr_index+1),$curr_slide.velocity({translateX:-1*f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):m&&(d(curr_index-1),$curr_slide.velocity({translateX:f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):$curr_slide.velocity({translateX:0},{duration:300,queue:!1,easing:"easeOutQuad"}),l=!1,m=!1,clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval))}),f.on("sliderPause",function(){clearInterval($interval)}),f.on("sliderStart",function(){clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval)})})},pause:function(){a(this).trigger("sliderPause")},start:function(){a(this).trigger("sliderStart")}};a.fn.slider=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)}}(jQuery),function(a){a(document).ready(function(){a(document).on("click.card",".card",function(b){a(this).find(".card-reveal").length&&(a(b.target).is(a(".card-reveal .card-title"))||a(b.target).is(a(".card-reveal .card-title i"))?a(this).find(".card-reveal").velocity({translateY:0},{duration:225,queue:!1,easing:"easeInOutQuad",complete:function(){a(this).css({display:"none"})}}):(a(b.target).is(a(".card .activator"))||a(b.target).is(a(".card .activator i")))&&a(this).find(".card-reveal").css({display:"block"}).velocity("stop",!1).velocity({translateY:"-100%"},{duration:300,queue:!1,easing:"easeInOutQuad"}))})})}(jQuery), -function(a){a(document).ready(function(){a.fn.pushpin=function(b){var c={top:0,bottom:1/0,offset:0};return b=a.extend(c,b),$index=0,this.each(function(){function c(a){a.removeClass("pin-top"),a.removeClass("pinned"),a.removeClass("pin-bottom")}function d(d,e){d.each(function(){b.top<=e&&b.bottom>=e&&!a(this).hasClass("pinned")&&(c(a(this)),a(this).css("top",b.offset),a(this).addClass("pinned")),eb.bottom&&!a(this).hasClass("pin-bottom")&&(c(a(this)),a(this).addClass("pin-bottom"),a(this).css("top",b.bottom-g))})}var e=Materialize.guid(),f=a(this),g=a(this).offset().top;d(f,a(window).scrollTop()),a(window).on("scroll."+e,function(){var c=a(window).scrollTop()+b.offset;d(f,c)})})}})}(jQuery),function(a){a(document).ready(function(){a.fn.reverse=[].reverse,a(document).on("mouseenter.fixedActionBtn",".fixed-action-btn",function(){var c=a(this);b(c)}),a(document).on("mouseleave.fixedActionBtn",".fixed-action-btn",function(){var b=a(this);c(b)})}),a.fn.extend({openFAB:function(){var c=a(this);b(c)},closeFAB:function(){c($this)}});var b=function(b){if($this=b,$this.hasClass("active")===!1){$this.addClass("active"),$this.find("ul .btn-floating").velocity({scaleY:".4",scaleX:".4",translateY:"40px"},{duration:0});var c=0;$this.find("ul .btn-floating").reverse().each(function(){a(this).velocity({opacity:"1",scaleX:"1",scaleY:"1",translateY:"0"},{duration:80,delay:c}),c+=40})}},c=function(a){$this=a,$this.removeClass("active");$this.find("ul .btn-floating").velocity("stop",!0),$this.find("ul .btn-floating").velocity({opacity:"0",scaleX:".4",scaleY:".4",translateY:"40px"},{duration:80})}}(jQuery),function(a){Materialize.fadeInImage=function(b){var c=a(b);c.css({opacity:0}),a(c).velocity({opacity:1},{duration:650,queue:!1,easing:"easeOutSine"}),a(c).velocity({opacity:1},{duration:1300,queue:!1,easing:"swing",step:function(b,c){c.start=100;var d=b/100,e=150-(100-b)/1.75;100>e&&(e=100),b>=0&&a(this).css({"-webkit-filter":"grayscale("+d+")brightness("+e+"%)",filter:"grayscale("+d+")brightness("+e+"%)"})}})},Materialize.showStaggeredList=function(b){var c=0;a(b).find("li").velocity({translateX:"-100px"},{duration:0}),a(b).find("li").each(function(){a(this).velocity({opacity:"1",translateX:"0"},{duration:800,delay:c,easing:[60,10]}),c+=120})},a(document).ready(function(){var b=!1,c=!1;a(".dismissable").each(function(){a(this).hammer({prevent_default:!1}).bind("pan",function(d){if("touch"===d.gesture.pointerType){var e=a(this),f=d.gesture.direction,g=d.gesture.deltaX,h=d.gesture.velocityX;e.velocity({translateX:g},{duration:50,queue:!1,easing:"easeOutQuad"}),4===f&&(g>e.innerWidth()/2||-.75>h)&&(b=!0),2===f&&(g<-1*e.innerWidth()/2||h>.75)&&(c=!0)}}).bind("panend",function(d){if(Math.abs(d.gesture.deltaX)j+g&&e.done!==!0){var k=new Function(h);k(),e.done=!0}}}}},100)}}(jQuery),function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):this.Picker=a(jQuery)}(function(a){function b(f,g,i,l){function m(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",y.component.nodes(t.open),v.box),v.wrap),v.frame),v.holder)}function n(){w.data(g,y).addClass(v.input).attr("tabindex",-1).val(w.data("value")?y.get("select",u.format):f.value),u.editable||w.on("focus."+t.id+" click."+t.id,function(a){a.preventDefault(),y.$root[0].focus()}).on("keydown."+t.id,q),e(f,{haspopup:!0,expanded:!1,readonly:!1,owns:f.id+"_root"})}function o(){y.$root.on({keydown:q,focusin:function(a){y.$root.removeClass(v.focused),a.stopPropagation()},"mousedown click":function(b){var c=b.target;c!=y.$root.children()[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),y.$root[0].focus()))}}).on({focus:function(){w.addClass(v.target)},blur:function(){w.removeClass(v.target)}}).on("focus.toOpen",r).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(v.navDisabled)||b.hasClass(v.disabled),e=h();e=e&&(e.type||e.href),(d||e&&!a.contains(y.$root[0],e))&&y.$root[0].focus(),!d&&c.nav?y.set("highlight",y.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?y.set("select",c.pick):c.clear?y.clear().close(!0):c.close&&y.close(!0)}),e(y.$root[0],"hidden",!0)}function p(){var b;u.hiddenName===!0?(b=f.name,f.name=""):(b=["string"==typeof u.hiddenPrefix?u.hiddenPrefix:"","string"==typeof u.hiddenSuffix?u.hiddenSuffix:"_submit"],b=b[0]+f.name+b[1]),y._hidden=a('")[0],w.on("change."+t.id,function(){y._hidden.value=f.value?y.get("select",u.formatSubmit):""}),u.container?a(u.container).append(y._hidden):w.after(y._hidden)}function q(a){var b=a.keyCode,c=/^(8|46)$/.test(b);return 27==b?(y.close(),!1):void((32==b||c||!t.open&&y.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?y.clear().close():y.open()))}function r(a){a.stopPropagation(),"focus"==a.type&&y.$root.addClass(v.focused),y.open()}if(!f)return b;var s=!1,t={id:f.id||"P"+Math.abs(~~(Math.random()*new Date))},u=i?a.extend(!0,{},i.defaults,l):l||{},v=a.extend({},b.klasses(),u.klass),w=a(f),x=function(){return this.start()},y=x.prototype={constructor:x,$node:w,start:function(){return t&&t.start?y:(t.methods={},t.start=!0,t.open=!1,t.type=f.type,f.autofocus=f==h(),f.readOnly=!u.editable,f.id=f.id||t.id,"text"!=f.type&&(f.type="text"),y.component=new i(y,u),y.$root=a(b._.node("div",m(),v.picker,'id="'+f.id+'_root" tabindex="0"')),o(),u.formatSubmit&&p(),n(),u.container?a(u.container).append(y.$root):w.after(y.$root),y.on({start:y.component.onStart,render:y.component.onRender,stop:y.component.onStop,open:y.component.onOpen,close:y.component.onClose,set:y.component.onSet}).on({start:u.onStart,render:u.onRender,stop:u.onStop,open:u.onOpen,close:u.onClose,set:u.onSet}),s=c(y.$root.children()[0]),f.autofocus&&y.open(),y.trigger("start").trigger("render"))},render:function(a){return a?y.$root.html(m()):y.$root.find("."+v.box).html(y.component.nodes(t.open)),y.trigger("render")},stop:function(){return t.start?(y.close(),y._hidden&&y._hidden.parentNode.removeChild(y._hidden),y.$root.remove(),w.removeClass(v.input).removeData(g),setTimeout(function(){w.off("."+t.id)},0),f.type=t.type,f.readOnly=!1,y.trigger("stop"),t.methods={},t.start=!1,y):y},open:function(c){return t.open?y:(w.addClass(v.active),e(f,"expanded",!0),setTimeout(function(){y.$root.addClass(v.opened),e(y.$root[0],"hidden",!1)},0),c!==!1&&(t.open=!0,s&&k.css("overflow","hidden").css("padding-right","+="+d()),y.$root[0].focus(),j.on("click."+t.id+" focusin."+t.id,function(a){var b=a.target;b!=f&&b!=document&&3!=a.which&&y.close(b===y.$root.children()[0])}).on("keydown."+t.id,function(c){var d=c.keyCode,e=y.component.key[d],f=c.target;27==d?y.close(!0):f!=y.$root[0]||!e&&13!=d?a.contains(y.$root[0],f)&&13==d&&(c.preventDefault(),f.click()):(c.preventDefault(),e?b._.trigger(y.component.key.go,y,[b._.trigger(e)]):y.$root.find("."+v.highlighted).hasClass(v.disabled)||y.set("select",y.component.item.highlight).close())})),y.trigger("open"))},close:function(a){return a&&(y.$root.off("focus.toOpen")[0].focus(),setTimeout(function(){y.$root.on("focus.toOpen",r)},0)),w.removeClass(v.active),e(f,"expanded",!1),setTimeout(function(){y.$root.removeClass(v.opened+" "+v.focused),e(y.$root[0],"hidden",!0)},0),t.open?(t.open=!1,s&&k.css("overflow","").css("padding-right","-="+d()),j.off("."+t.id),y.trigger("close")):y},clear:function(a){return y.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in y.component.item&&(void 0===f&&(f=null),y.component.set(e,f,d)),("select"==e||"clear"==e)&&w.val("clear"==e?"":y.get(e,u.format)).trigger("change");y.render()}return d.muted?y:y.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=t[a])return t[a];if("valueSubmit"==a){if(y._hidden)return y._hidden.value;a="value"}if("value"==a)return f.value;if(a in y.component.item){if("string"==typeof c){var d=y.component.get(a);return d?b._.trigger(y.component.formats.toString,y.component,[c,d]):""}return y.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),t.methods[e]=t.methods[e]||[],t.methods[e].push(f)}return y},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('
              ').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(b,c,d){if(a.isPlainObject(c))for(var e in c)f(b,e,c[e]);else f(b,c,d)}function f(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function g(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d,f=b[d];c+=null==f?"":e+'="'+b[d]+'"'}return c}function h(){try{return document.activeElement}catch(a){}}var i=a(window),j=a(document),k=a(document.documentElement);return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+""):""},lead:function(a){return(10>a?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1===0},ariaAttr:g},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){var f=a(this);f.data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b}),function(a){"function"==typeof define&&define.amd?define(["picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return a[0]===!0?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=6,f=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var e,g=this;return c=void 0===c?a:c,c==-(1/0)||c==1/0?e=c:b.isPlainObject(c)&&f.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=f.isDate(c)?c:g.create().obj):c=f.isInteger(c)||f.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:e||c.getFullYear(),month:e||c.getMonth(),date:e||c.getDate(),day:e||c.getDay(),obj:e||c,pick:e||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return a===!0||b.isArray(a)||f.isDate(a)?d.create(a):a};return f.isInteger(a)||(a=e(a)),f.isInteger(c)||(c=e(c)),f.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:f.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return b?"string"==typeof b?b=c.parse(a,b):f.isInteger(b)&&(b=c.now(a,b,{rel:b})):b="min"==a?-(1/0):1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var e,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;dc.pick&&(g=!0)}return f.isInteger(a)}).length;if((!d||!d.nav)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||e||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!e&&0>l)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.monthk.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return f.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||f.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pickc.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,e={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?f.trigger(c,d,[b,e]):a.replace(/^!/,"").length;c&&(e[a]=b.substr(0,g)),b=b.substr(g)}),[e.yyyy||e.yy,+(e.mm||e.m)-1,e.dd||e.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?f.digits(a):b.date},dd:function(a,b){return a?2:f.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?f.digits(a):b.month+1},mm:function(a,b){return a?2:f.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return f.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return f.isInteger(a)&&f.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(f.isDate(a)||b.isArray(a))&&(f.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:b.isPlainObject(a)&&b.isPlainObject(c)?d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to):!1},c.prototype.isDateOverlap=function(a,c){var d=this,e=d.settings.firstDay?1:0;return f.isInteger(a)&&(f.isDate(c)||b.isArray(c))?(a=a%7+e,a===d.create(c).day+1):f.isInteger(c)&&(f.isDate(a)||b.isArray(a))?(c=c%7+e,c===d.create(a).day+1):b.isPlainObject(a)&&b.isPlainObject(c)?d.overlapRanges(a,c):!1},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():c===!1?(d.flipEnable(1),e=[]):c===!0?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,g=0;gi;i+=1){if(h=e[i],d.isDateExact(h,a)){c=e[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):f.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;g>i;i+=1)if(d.isDateExact(e[i],a)){e[i]=null;break}if(j)for(i=0;g>i;i+=1)if(d.isDateOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,g=b.item,h=g.now,i=g.select,j=g.highlight,k=g.view,l=g.disable,m=g.min,n=g.max,o=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),f.node("thead",f.node("tr",f.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysLetter).slice(0),c.weekdaysFull.slice(0)),p=function(a){return f.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&k.year>=n.year&&k.month>=n.month||!a&&k.year<=m.year&&k.month<=m.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+f.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},q=function(d){var e=c.showMonthsShort?c.monthsShort:c.monthsFull;return"short_months"==d&&(e=c.monthsShort),c.selectMonths&&void 0==d?f.node("select",f.group({min:0,max:11,i:1,node:"option",item:function(a){return[e[a],0,"value="+a+(k.month==a?" selected":"")+(k.year==m.year&&an.month?" disabled":"")]}}),c.klass.selectMonth+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):"short_months"==d?null!=i?f.node("div",e[i.month]):f.node("div",e[k.month]):f.node("div",e[k.month],c.klass.month)},r=function(d){var e=k.year,g=c.selectYears===!0?5:~~(c.selectYears/2);if(g){var h=m.year,i=n.year,j=e-g,l=e+g;if(h>j&&(l+=h-j,j=h),l>i){var o=j-h,p=l-i;j-=o>p?p:o,l=i}if(c.selectYears&&void 0==d)return f.node("select",f.group({min:j,max:l,i:1,node:"option",item:function(a){return[a,0,"value="+a+(e==a?" selected":"")]}}),c.klass.selectYear+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return"raw"==d?f.node("div",e):f.node("div",e,c.klass.year)};return createDayLabel=function(){return null!=i?f.node("div",i.date):f.node("div",h.date)},createWeekdayLabel=function(){var a;a=null!=i?i.day:h.day;var b=c.weekdaysFull[a];return b},f.node("div",f.node("div",createWeekdayLabel(),"picker__weekday-display")+f.node("div",q("short_months"),c.klass.month_display)+f.node("div",createDayLabel(),c.klass.day_display)+f.node("div",r("raw"),c.klass.year_display),c.klass.date_display)+f.node("div",f.node("div",(c.selectYears?q()+r():q()+r())+p()+p(1),c.klass.header)+f.node("table",o+f.node("tbody",f.group({min:0,max:e-1,i:1,node:"tr",item:function(a){var e=c.firstDay&&0===b.create([k.year,k.month,1]).day?-7:0;return[f.group({min:d*a-k.day+e+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([k.year,k.month,a+(c.firstDay?1:0)]);var d=i&&i.pick==a.pick,e=j&&j.pick==a.pick,g=l&&b.disabled(a)||a.pickn.pick,o=f.trigger(b.formats.toString,b,[c.format,a]);return[f.node("div",a.date,function(b){return b.push(k.month==a.month?c.klass.infocus:c.klass.outfocus),h.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),e&&b.push(c.klass.highlighted),g&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+f.ariaAttr({role:"gridcell",label:o,selected:d&&b.$node.val()===o?!0:null,activedescendant:e?!0:null,disabled:g?!0:null})),"",f.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+f.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0})),c.klass.calendar_container)+f.node("div",f.node("button",c.today,"btn-flat picker__today","type=button data-pick="+h.pick+(a&&!b.disabled(h)?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.clear,"btn-flat picker__clear","type=button data-clear=1"+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.close,"btn-flat picker__close","type=button data-close=true "+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysLetter:["S","M","T","W","T","F","S"],today:"Today",clear:"Clear",close:"Close",format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",date_display:a+"date-display",day_display:a+"day-display",month_display:a+"month-display",year_display:a+"year-display",calendar_container:a+"calendar-container",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)}),function(a){function b(){var b=+a(this).attr("length"),c=+a(this).val().length,d=b>=c;a(this).parent().find('span[class="character-counter"]').html(c+"/"+b),e(d,a(this))}function c(b){var c=a("").addClass("character-counter").css("float","right").css("font-size","12px").css("height",1);b.parent().append(c)}function d(){a(this).parent().find('span[class="character-counter"]').html("")}function e(a,b){var c=b.hasClass("invalid");a&&c?b.removeClass("invalid"):a||c||(b.removeClass("valid"),b.addClass("invalid"))}a.fn.characterCounter=function(){return this.each(function(){var e=void 0!==a(this).attr("length");e&&(a(this).on("input",b),a(this).on("focus",b),a(this).on("blur",d),c(a(this)))})},a(document).ready(function(){a("input, textarea").characterCounter()})}(jQuery); \ No newline at end of file +function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function t(t,e){for(var i=0;i0&&e-1 in t))}if(!t.jQuery){var i=function(t,e){return new i.fn.init(t,e)};i.isWindow=function(t){return null!=t&&t==t.window},i.type=function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?o[r.call(t)]||"object":typeof t},i.isArray=Array.isArray||function(t){return"array"===i.type(t)},i.isPlainObject=function(t){var e;if(!t||"object"!==i.type(t)||t.nodeType||i.isWindow(t))return!1;try{if(t.constructor&&!a.call(t,"constructor")&&!a.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}for(e in t);return void 0===e||a.call(t,e)},i.each=function(t,i,n){var o=0,a=t.length,r=e(t);if(n){if(r)for(;a>o&&!1!==i.apply(t[o],n);o++);else for(o in t)if(!1===i.apply(t[o],n))break}else if(r)for(;a>o&&!1!==i.call(t[o],o,t[o]);o++);else for(o in t)if(!1===i.call(t[o],o,t[o]))break;return t},i.data=function(t,e,o){if(void 0===o){var a=(r=t[i.expando])&&n[r];if(void 0===e)return a;if(a&&e in a)return a[e]}else if(void 0!==e){var r=t[i.expando]||(t[i.expando]=++i.uuid);return n[r]=n[r]||{},n[r][e]=o,o}},i.removeData=function(t,e){var o=t[i.expando],a=o&&n[o];a&&i.each(e,function(t,e){delete a[e]})},i.extend=function(){var t,e,n,o,a,r,s=arguments[0]||{},l=1,c=arguments.length,u=!1;for("boolean"==typeof s&&(u=s,s=arguments[l]||{},l++),"object"!=typeof s&&"function"!==i.type(s)&&(s={}),l===c&&(s=this,l--);c>l;l++)if(null!=(a=arguments[l]))for(o in a)t=s[o],s!==(n=a[o])&&(u&&n&&(i.isPlainObject(n)||(e=i.isArray(n)))?(e?(e=!1,r=t&&i.isArray(t)?t:[]):r=t&&i.isPlainObject(t)?t:{},s[o]=i.extend(u,r,n)):void 0!==n&&(s[o]=n));return s},i.queue=function(t,n,o){if(t){n=(n||"fx")+"queue";var a=i.data(t,n);return o?(!a||i.isArray(o)?a=i.data(t,n,function(t,i){var n=i||[];return null!=t&&(e(Object(t))?function(t,e){for(var i=+e.length,n=0,o=t.length;i>n;)t[o++]=e[n++];if(i!==i)for(;void 0!==e[n];)t[o++]=e[n++];t.length=o}(n,"string"==typeof t?[t]:t):[].push.call(n,t)),n}(o)):a.push(o),a):a||[]}},i.dequeue=function(t,e){i.each(t.nodeType?[t]:t,function(t,n){e=e||"fx";var o=i.queue(n,e),a=o.shift();"inprogress"===a&&(a=o.shift()),a&&("fx"===e&&o.unshift("inprogress"),a.call(n,function(){i.dequeue(n,e)}))})},i.fn=i.prototype={init:function(t){if(t.nodeType)return this[0]=t,this;throw new Error("Not a DOM node.")},offset:function(){var e=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:e.top+(t.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:e.left+(t.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function t(){for(var t=this.offsetParent||document;t&&"html"===!t.nodeType.toLowerCase&&"static"===t.style.position;)t=t.offsetParent;return t||document}var e=this[0],t=t.apply(e),n=this.offset(),o=/^(?:body|html)$/i.test(t.nodeName)?{top:0,left:0}:i(t).offset();return n.top-=parseFloat(e.style.marginTop)||0,n.left-=parseFloat(e.style.marginLeft)||0,t.style&&(o.top+=parseFloat(t.style.borderTopWidth)||0,o.left+=parseFloat(t.style.borderLeftWidth)||0),{top:n.top-o.top,left:n.left-o.left}}};var n={};i.expando="velocity"+(new Date).getTime(),i.uuid=0;for(var o={},a=o.hasOwnProperty,r=o.toString,s="Boolean Number String Function Array Date RegExp Object Error".split(" "),l=0;lo;++o){var a=c(i,t,n);if(0===a)return i;i-=(l(i,t,n)-e)/a}return i}function d(){for(var e=0;b>e;++e)C[e]=l(e*w,t,n)}function p(e,i,o){var a,r,s=0;do{(a=l(r=i+(o-i)/2,t,n)-e)>0?o=r:i=r}while(Math.abs(a)>g&&++s=m?u(e,r):0==s?r:p(e,i,i+w)}function f(){T=!0,(t!=i||n!=o)&&d()}var v=4,m=.001,g=1e-7,y=10,b=11,w=1/(b-1),k="Float32Array"in e;if(4!==arguments.length)return!1;for(var x=0;4>x;++x)if("number"!=typeof arguments[x]||isNaN(arguments[x])||!isFinite(arguments[x]))return!1;t=Math.min(t,1),n=Math.min(n,1),t=Math.max(t,0),n=Math.max(n,0);var C=k?new Float32Array(b):new Array(b),T=!1,S=function(e){return T||f(),t===i&&n===o?e:0===e?0:1===e?1:l(h(e),i,o)};S.getControlPoints=function(){return[{x:t,y:i},{x:n,y:o}]};var P="generateBezier("+[t,i,n,o]+")";return S.toString=function(){return P},S}function c(t,e){var i=t;return v.isString(t)?b.Easings[t]||(i=!1):i=v.isArray(t)&&1===t.length?s.apply(null,t):v.isArray(t)&&2===t.length?w.apply(null,t.concat([e])):!(!v.isArray(t)||4!==t.length)&&l.apply(null,t),!1===i&&(i=b.Easings[b.defaults.easing]?b.defaults.easing:y),i}function u(t){if(t){var e=(new Date).getTime(),i=b.State.calls.length;i>1e4&&(b.State.calls=o(b.State.calls));for(var a=0;i>a;a++)if(b.State.calls[a]){var s=b.State.calls[a],l=s[0],c=s[2],h=s[3],f=!!h,m=null;h||(h=b.State.calls[a][3]=e-16);for(var g=Math.min((e-h)/c.duration,1),y=0,w=l.length;w>y;y++){var x=l[y],T=x.element;if(r(T)){var S=!1;if(c.display!==n&&null!==c.display&&"none"!==c.display){if("flex"===c.display){var P=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];p.each(P,function(t,e){k.setPropertyValue(T,"display",e)})}k.setPropertyValue(T,"display",c.display)}c.visibility!==n&&"hidden"!==c.visibility&&k.setPropertyValue(T,"visibility",c.visibility);for(var A in x)if("element"!==A){var O,E=x[A],_=v.isString(E.easing)?b.Easings[E.easing]:E.easing;if(1===g)O=E.endValue;else{var M=E.endValue-E.startValue;if(O=E.startValue+M*_(g,c,M),!f&&O===E.currentValue)continue}if(E.currentValue=O,"tween"===A)m=O;else{if(k.Hooks.registered[A]){var I=k.Hooks.getRoot(A),D=r(T).rootPropertyValueCache[I];D&&(E.rootPropertyValue=D)}var q=k.setPropertyValue(T,A,E.currentValue+(0===parseFloat(O)?"":E.unitType),E.rootPropertyValue,E.scrollData);k.Hooks.registered[A]&&(r(T).rootPropertyValueCache[I]=k.Normalizations.registered[I]?k.Normalizations.registered[I]("extract",null,q[1]):q[1]),"transform"===q[0]&&(S=!0)}}c.mobileHA&&r(T).transformCache.translate3d===n&&(r(T).transformCache.translate3d="(0px, 0px, 0px)",S=!0),S&&k.flushTransformCache(T)}}c.display!==n&&"none"!==c.display&&(b.State.calls[a][2].display=!1),c.visibility!==n&&"hidden"!==c.visibility&&(b.State.calls[a][2].visibility=!1),c.progress&&c.progress.call(s[1],s[1],g,Math.max(0,h+c.duration-e),h,m),1===g&&d(a)}}b.State.isTicking&&C(u)}function d(t,e){if(!b.State.calls[t])return!1;for(var i=b.State.calls[t][0],o=b.State.calls[t][1],a=b.State.calls[t][2],s=b.State.calls[t][4],l=!1,c=0,u=i.length;u>c;c++){var d=i[c].element;if(e||a.loop||("none"===a.display&&k.setPropertyValue(d,"display",a.display),"hidden"===a.visibility&&k.setPropertyValue(d,"visibility",a.visibility)),!0!==a.loop&&(p.queue(d)[1]===n||!/\.velocityQueueEntryFlag/i.test(p.queue(d)[1]))&&r(d)){r(d).isAnimating=!1,r(d).rootPropertyValueCache={};var h=!1;p.each(k.Lists.transforms3D,function(t,e){var i=/^scale/.test(e)?1:0,o=r(d).transformCache[e];r(d).transformCache[e]!==n&&new RegExp("^\\("+i+"[^.]").test(o)&&(h=!0,delete r(d).transformCache[e])}),a.mobileHA&&(h=!0,delete r(d).transformCache.translate3d),h&&k.flushTransformCache(d),k.Values.removeClass(d,"velocity-animating")}if(!e&&a.complete&&!a.loop&&c===u-1)try{a.complete.call(o,o)}catch(t){setTimeout(function(){throw t},1)}s&&!0!==a.loop&&s(o),r(d)&&!0===a.loop&&!e&&(p.each(r(d).tweensContainer,function(t,e){/^rotate/.test(t)&&360===parseFloat(e.endValue)&&(e.endValue=0,e.startValue=360),/^backgroundPosition/.test(t)&&100===parseFloat(e.endValue)&&"%"===e.unitType&&(e.endValue=0,e.startValue=100)}),b(d,"reverse",{loop:!0,delay:a.delay})),!1!==a.queue&&p.dequeue(d,a.queue)}b.State.calls[t]=!1;for(var f=0,v=b.State.calls.length;v>f;f++)if(!1!==b.State.calls[f]){l=!0;break}!1===l&&(b.State.isTicking=!1,delete b.State.calls,b.State.calls=[])}var p,h=function(){if(i.documentMode)return i.documentMode;for(var t=7;t>4;t--){var e=i.createElement("div");if(e.innerHTML="\x3c!--[if IE "+t+"]>0)},isWrapped:function(t){return t&&(t.jquery||e.Zepto&&e.Zepto.zepto.isZ(t))},isSVG:function(t){return e.SVGElement&&t instanceof e.SVGElement},isEmptyObject:function(t){for(var e in t)return!1;return!0}},m=!1;if(t.fn&&t.fn.jquery?(p=t,m=!0):p=e.Velocity.Utilities,8>=h&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");{if(!(7>=h)){var g=400,y="swing",b={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:e.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:i.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:p,Redirects:{},Easings:{},Promise:e.Promise,defaults:{queue:"",duration:g,easing:y,begin:n,complete:n,progress:n,display:n,visibility:n,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(t){p.data(t,"velocity",{isSVG:v.isSVG(t),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};e.pageYOffset!==n?(b.State.scrollAnchor=e,b.State.scrollPropertyLeft="pageXOffset",b.State.scrollPropertyTop="pageYOffset"):(b.State.scrollAnchor=i.documentElement||i.body.parentNode||i.body,b.State.scrollPropertyLeft="scrollLeft",b.State.scrollPropertyTop="scrollTop");var w=function(){function t(t){return-t.tension*t.x-t.friction*t.v}function e(e,i,n){var o={x:e.x+n.dx*i,v:e.v+n.dv*i,tension:e.tension,friction:e.friction};return{dx:o.v,dv:t(o)}}function i(i,n){var o={dx:i.v,dv:t(i)},a=e(i,.5*n,o),r=e(i,.5*n,a),s=e(i,n,r),l=1/6*(o.dx+2*(a.dx+r.dx)+s.dx),c=1/6*(o.dv+2*(a.dv+r.dv)+s.dv);return i.x=i.x+l*n,i.v=i.v+c*n,i}return function t(e,n,o){var a,r,s,l={x:-1,v:0,tension:null,friction:null},c=[0],u=0;for(e=parseFloat(e)||500,n=parseFloat(n)||20,o=o||null,l.tension=e,l.friction=n,(a=null!==o)?(u=t(e,n),r=u/o*.016):r=.016;s=i(s||l,r),c.push(1+s.x),u+=16,Math.abs(s.x)>1e-4&&Math.abs(s.v)>1e-4;);return a?function(t){return c[t*(c.length-1)|0]}:u}}();b.Easings={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},spring:function(t){return 1-Math.cos(4.5*t*Math.PI)*Math.exp(6*-t)}},p.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(t,e){b.Easings[e[0]]=l.apply(null,e[1])});var k=b.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(a=0;a=h)switch(t){case"name":return"filter";case"extract":var n=i.toString().match(/alpha\(opacity=(.*)\)/i);return i=n?n[1]/100:1;case"inject":return e.style.zoom=1,parseFloat(i)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(i),10)+")"}else switch(t){case"name":return"opacity";case"extract":case"inject":return i}}},register:function(){9>=h||b.State.isGingerbread||(k.Lists.transformsBase=k.Lists.transformsBase.concat(k.Lists.transforms3D));for(t=0;to&&(o=1),a=!/(\d)$/i.test(o);break;case"skew":a=!/(deg|\d)$/i.test(o);break;case"rotate":a=!/(deg|\d)$/i.test(o)}return a||(r(i).transformCache[e]="("+o+")"),r(i).transformCache[e]}}}();for(var t=0;t=h||3!==a.split(" ").length||(a+=" 1"),a;case"inject":return 8>=h?4===o.split(" ").length&&(o=o.split(/\s+/).slice(0,3).join(" ")):3===o.split(" ").length&&(o+=" 1"),(8>=h?"rgb":"rgba")+"("+o.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(t){return t.replace(/-(\w)/g,function(t,e){return e.toUpperCase()})},SVGAttribute:function(t){var e="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(h||b.State.isAndroid&&!b.State.isChrome)&&(e+="|transform"),new RegExp("^("+e+")$","i").test(t)},prefixCheck:function(t){if(b.State.prefixMatches[t])return[b.State.prefixMatches[t],!0];for(var e=["","Webkit","Moz","ms","O"],i=0,n=e.length;n>i;i++){var o;if(o=0===i?t:e[i]+t.replace(/^\w/,function(t){return t.toUpperCase()}),v.isString(b.State.prefixElement.style[o]))return b.State.prefixMatches[t]=o,[o,!0]}return[t,!1]}},Values:{hexToRgb:function(t){var e,i=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return t=t.replace(i,function(t,e,i,n){return e+e+i+i+n+n}),e=n.exec(t),e?[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]:[0,0,0]},isCSSNullValue:function(t){return 0==t||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(t)},getUnitType:function(t){return/^(rotate|skew)/i.test(t)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(t)?"":"px"},getDisplayType:function(t){var e=t&&t.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(e)?"inline":/^(li)$/i.test(e)?"list-item":/^(tr)$/i.test(e)?"table-row":/^(table)$/i.test(e)?"table":/^(tbody)$/i.test(e)?"table-row-group":"block"},addClass:function(t,e){t.classList?t.classList.add(e):t.className+=(t.className.length?" ":"")+e},removeClass:function(t,e){t.classList?t.classList.remove(e):t.className=t.className.toString().replace(new RegExp("(^|\\s)"+e.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(t,i,o,a){function s(t,i){function o(){c&&k.setPropertyValue(t,"display","none")}var l=0;if(8>=h)l=p.css(t,i);else{var c=!1;if(/^(width|height)$/.test(i)&&0===k.getPropertyValue(t,"display")&&(c=!0,k.setPropertyValue(t,"display",k.Values.getDisplayType(t))),!a){if("height"===i&&"border-box"!==k.getPropertyValue(t,"boxSizing").toString().toLowerCase()){var u=t.offsetHeight-(parseFloat(k.getPropertyValue(t,"borderTopWidth"))||0)-(parseFloat(k.getPropertyValue(t,"borderBottomWidth"))||0)-(parseFloat(k.getPropertyValue(t,"paddingTop"))||0)-(parseFloat(k.getPropertyValue(t,"paddingBottom"))||0);return o(),u}if("width"===i&&"border-box"!==k.getPropertyValue(t,"boxSizing").toString().toLowerCase()){var d=t.offsetWidth-(parseFloat(k.getPropertyValue(t,"borderLeftWidth"))||0)-(parseFloat(k.getPropertyValue(t,"borderRightWidth"))||0)-(parseFloat(k.getPropertyValue(t,"paddingLeft"))||0)-(parseFloat(k.getPropertyValue(t,"paddingRight"))||0);return o(),d}}var f;f=r(t)===n?e.getComputedStyle(t,null):r(t).computedStyle?r(t).computedStyle:r(t).computedStyle=e.getComputedStyle(t,null),"borderColor"===i&&(i="borderTopColor"),(""===(l=9===h&&"filter"===i?f.getPropertyValue(i):f[i])||null===l)&&(l=t.style[i]),o()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(i)){var v=s(t,"position");("fixed"===v||"absolute"===v&&/top|left/i.test(i))&&(l=p(t).position()[i]+"px")}return l}var l;if(k.Hooks.registered[i]){var c=i,u=k.Hooks.getRoot(c);o===n&&(o=k.getPropertyValue(t,k.Names.prefixCheck(u)[0])),k.Normalizations.registered[u]&&(o=k.Normalizations.registered[u]("extract",t,o)),l=k.Hooks.extractValue(c,o)}else if(k.Normalizations.registered[i]){var d,f;"transform"!==(d=k.Normalizations.registered[i]("name",t))&&(f=s(t,k.Names.prefixCheck(d)[0]),k.Values.isCSSNullValue(f)&&k.Hooks.templates[i]&&(f=k.Hooks.templates[i][1])),l=k.Normalizations.registered[i]("extract",t,f)}if(!/^[\d-]/.test(l))if(r(t)&&r(t).isSVG&&k.Names.SVGAttribute(i))if(/^(height|width)$/i.test(i))try{l=t.getBBox()[i]}catch(t){l=0}else l=t.getAttribute(i);else l=s(t,k.Names.prefixCheck(i)[0]);return k.Values.isCSSNullValue(l)&&(l=0),b.debug>=2&&console.log("Get "+i+": "+l),l},setPropertyValue:function(t,i,n,o,a){var s=i;if("scroll"===i)a.container?a.container["scroll"+a.direction]=n:"Left"===a.direction?e.scrollTo(n,a.alternateValue):e.scrollTo(a.alternateValue,n);else if(k.Normalizations.registered[i]&&"transform"===k.Normalizations.registered[i]("name",t))k.Normalizations.registered[i]("inject",t,n),s="transform",n=r(t).transformCache[i];else{if(k.Hooks.registered[i]){var l=i,c=k.Hooks.getRoot(i);o=o||k.getPropertyValue(t,c),n=k.Hooks.injectValue(l,n,o),i=c}if(k.Normalizations.registered[i]&&(n=k.Normalizations.registered[i]("inject",t,n),i=k.Normalizations.registered[i]("name",t)),s=k.Names.prefixCheck(i)[0],8>=h)try{t.style[s]=n}catch(t){b.debug&&console.log("Browser does not support ["+n+"] for ["+s+"]")}else r(t)&&r(t).isSVG&&k.Names.SVGAttribute(i)?t.setAttribute(i,n):t.style[s]=n;b.debug>=2&&console.log("Set "+i+" ("+s+"): "+n)}return[s,n]},flushTransformCache:function(t){function e(e){return parseFloat(k.getPropertyValue(t,e))}var i="";if((h||b.State.isAndroid&&!b.State.isChrome)&&r(t).isSVG){var n={translate:[e("translateX"),e("translateY")],skewX:[e("skewX")],skewY:[e("skewY")],scale:1!==e("scale")?[e("scale"),e("scale")]:[e("scaleX"),e("scaleY")],rotate:[e("rotateZ"),0,0]};p.each(r(t).transformCache,function(t){/^translate/i.test(t)?t="translate":/^scale/i.test(t)?t="scale":/^rotate/i.test(t)&&(t="rotate"),n[t]&&(i+=t+"("+n[t].join(" ")+") ",delete n[t])})}else{var o,a;p.each(r(t).transformCache,function(e){return o=r(t).transformCache[e],"transformPerspective"===e?(a=o,!0):(9===h&&"rotateZ"===e&&(e="rotate"),void(i+=e+o+" "))}),a&&(i="perspective"+a+" "+i)}k.setPropertyValue(t,"transform",i)}};k.Hooks.register(),k.Normalizations.register(),b.hook=function(t,e,i){var o=n;return t=a(t),p.each(t,function(t,a){if(r(a)===n&&b.init(a),i===n)o===n&&(o=b.CSS.getPropertyValue(a,e));else{var s=b.CSS.setPropertyValue(a,e,i);"transform"===s[0]&&b.CSS.flushTransformCache(a),o=s}}),o};var x=function(){function t(){return s?P.promise||null:l}function o(){function t(t){function d(t,e){var i=n,o=n,r=n;return v.isArray(t)?(i=t[0],!v.isArray(t[1])&&/^[\d-]/.test(t[1])||v.isFunction(t[1])||k.RegEx.isHex.test(t[1])?r=t[1]:(v.isString(t[1])&&!k.RegEx.isHex.test(t[1])||v.isArray(t[1]))&&(o=e?t[1]:c(t[1],s.duration),t[2]!==n&&(r=t[2]))):i=t,e||(o=o||s.easing),v.isFunction(i)&&(i=i.call(a,T,C)),v.isFunction(r)&&(r=r.call(a,T,C)),[i||0,o,r]}function h(t,e){var i,n;return n=(e||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(t){return i=t,""}),i||(i=k.Values.getUnitType(t)),[n,i]}if(s.begin&&0===T)try{s.begin.call(f,f)}catch(t){setTimeout(function(){throw t},1)}if("scroll"===A){var g,w,x,S=/^x$/i.test(s.axis)?"Left":"Top",O=parseFloat(s.offset)||0;s.container?v.isWrapped(s.container)||v.isNode(s.container)?(s.container=s.container[0]||s.container,g=s.container["scroll"+S],x=g+p(a).position()[S.toLowerCase()]+O):s.container=null:(g=b.State.scrollAnchor[b.State["scrollProperty"+S]],w=b.State.scrollAnchor[b.State["scrollProperty"+("Left"===S?"Top":"Left")]],x=p(a).offset()[S.toLowerCase()]+O),l={scroll:{rootPropertyValue:!1,startValue:g,currentValue:g,endValue:x,unitType:"",easing:s.easing,scrollData:{container:s.container,direction:S,alternateValue:w}},element:a},b.debug&&console.log("tweensContainer (scroll): ",l.scroll,a)}else if("reverse"===A){if(!r(a).tweensContainer)return void p.dequeue(a,s.queue);"none"===r(a).opts.display&&(r(a).opts.display="auto"),"hidden"===r(a).opts.visibility&&(r(a).opts.visibility="visible"),r(a).opts.loop=!1,r(a).opts.begin=null,r(a).opts.complete=null,y.easing||delete s.easing,y.duration||delete s.duration,s=p.extend({},r(a).opts,s);M=p.extend(!0,{},r(a).tweensContainer);for(var E in M)if("element"!==E){var _=M[E].startValue;M[E].startValue=M[E].currentValue=M[E].endValue,M[E].endValue=_,v.isEmptyObject(y)||(M[E].easing=s.easing),b.debug&&console.log("reverse tweensContainer ("+E+"): "+JSON.stringify(M[E]),a)}l=M}else if("start"===A){var M;r(a).tweensContainer&&!0===r(a).isAnimating&&(M=r(a).tweensContainer),p.each(m,function(t,e){if(RegExp("^"+k.Lists.colors.join("$|^")+"$").test(t)){var i=d(e,!0),o=i[0],a=i[1],r=i[2];if(k.RegEx.isHex.test(o)){for(var s=["Red","Green","Blue"],l=k.Values.hexToRgb(o),c=r?k.Values.hexToRgb(r):n,u=0;u=1&&console.log("Unit ratios: "+JSON.stringify(l),a),l}();var X=/margin|padding|left|right|width|text|word|letter/i.test(q)||/X$/.test(q)||"x"===q?"x":"y";switch(F){case"%":L*="x"===X?o.percentToPxWidth:o.percentToPxHeight;break;case"px":break;default:L*=o[F+"ToPx"]}switch(W){case"%":L*=1/("x"===X?o.percentToPxWidth:o.percentToPxHeight);break;case"px":break;default:L*=1/o[W+"ToPx"]}}switch(Q){case"+":V=L+V;break;case"-":V=L-V;break;case"*":V*=L;break;case"/":V=L/V}l[q]={rootPropertyValue:$,startValue:L,currentValue:L,endValue:V,unitType:W,easing:H},b.debug&&console.log("tweensContainer ("+q+"): "+JSON.stringify(l[q]),a)}else b.debug&&console.log("Skipping ["+j+"] due to a lack of browser support.")}l.element=a}l.element&&(k.Values.addClass(a,"velocity-animating"),D.push(l),""===s.queue&&(r(a).tweensContainer=l,r(a).opts=s),r(a).isAnimating=!0,T===C-1?(b.State.calls.push([D,f,s,null,P.resolver]),!1===b.State.isTicking&&(b.State.isTicking=!0,u())):T++)}var o,a=this,s=p.extend({},b.defaults,y),l={};switch(r(a)===n&&b.init(a),parseFloat(s.delay)&&!1!==s.queue&&p.queue(a,s.queue,function(t){b.velocityQueueEntryFlag=!0,r(a).delayTimer={setTimeout:setTimeout(t,parseFloat(s.delay)),next:t}}),s.duration.toString().toLowerCase()){case"fast":s.duration=200;break;case"normal":s.duration=g;break;case"slow":s.duration=600;break;default:s.duration=parseFloat(s.duration)||1}!1!==b.mock&&(!0===b.mock?s.duration=s.delay=1:(s.duration*=parseFloat(b.mock)||1,s.delay*=parseFloat(b.mock)||1)),s.easing=c(s.easing,s.duration),s.begin&&!v.isFunction(s.begin)&&(s.begin=null),s.progress&&!v.isFunction(s.progress)&&(s.progress=null),s.complete&&!v.isFunction(s.complete)&&(s.complete=null),s.display!==n&&null!==s.display&&(s.display=s.display.toString().toLowerCase(),"auto"===s.display&&(s.display=b.CSS.Values.getDisplayType(a))),s.visibility!==n&&null!==s.visibility&&(s.visibility=s.visibility.toString().toLowerCase()),s.mobileHA=s.mobileHA&&b.State.isMobile&&!b.State.isGingerbread,!1===s.queue?s.delay?setTimeout(t,s.delay):t():p.queue(a,s.queue,function(e,i){return!0===i?(P.promise&&P.resolver(f),!0):(b.velocityQueueEntryFlag=!0,void t(e))}),""!==s.queue&&"fx"!==s.queue||"inprogress"===p.queue(a)[0]||p.dequeue(a)}var s,l,h,f,m,y,w=arguments[0]&&(arguments[0].p||p.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||v.isString(arguments[0].properties));if(v.isWrapped(this)?(s=!1,h=0,f=this,l=this):(s=!0,h=1,f=w?arguments[0].elements||arguments[0].e:arguments[0]),f=a(f)){w?(m=arguments[0].properties||arguments[0].p,y=arguments[0].options||arguments[0].o):(m=arguments[h],y=arguments[h+1]);var C=f.length,T=0;if(!/^(stop|finish)$/i.test(m)&&!p.isPlainObject(y)){y={};for(var S=h+1;SV;V++){var H={delay:z.delay,progress:z.progress};V===q-1&&(H.display=z.display,H.visibility=z.visibility,H.complete=z.complete),x(f,"reverse",H)}return t()}};(b=p.extend(x,b)).animate=x;var C=e.requestAnimationFrame||f;return b.State.isMobile||i.hidden===n||i.addEventListener("visibilitychange",function(){i.hidden?(C=function(t){return setTimeout(function(){t(!0)},16)},u()):C=e.requestAnimationFrame||f}),t.Velocity=b,t!==e&&(t.fn.velocity=x,t.fn.velocity.defaults=b.defaults),p.each(["Down","Up"],function(t,e){b.Redirects["slide"+e]=function(t,i,o,a,r,s){var l=p.extend({},i),c=l.begin,u=l.complete,d={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},h={};l.display===n&&(l.display="Down"===e?"inline"===b.CSS.Values.getDisplayType(t)?"inline-block":"block":"none"),l.begin=function(){c&&c.call(r,r);for(var i in d){h[i]=t.style[i];var n=b.CSS.getPropertyValue(t,i);d[i]="Down"===e?[n,0]:[0,n]}h.overflow=t.style.overflow,t.style.overflow="hidden"},l.complete=function(){for(var e in h)t.style[e]=h[e];u&&u.call(r,r),s&&s.resolver(r)},b(t,d,l)}}),p.each(["In","Out"],function(t,e){b.Redirects["fade"+e]=function(t,i,o,a,r,s){var l=p.extend({},i),c={opacity:"In"===e?1:0},u=l.complete;l.complete=o!==a-1?l.begin=null:function(){u&&u.call(r,r),s&&s.resolver(r)},l.display===n&&(l.display="In"===e?"auto":"none"),b(this,c,l)}}),b}jQuery.fn.velocity=jQuery.fn.animate}}(window.jQuery||window.Zepto||window,window,document)})),function(t,e,i,n){"use strict";function o(t,e,i){return setTimeout(u(t,i),e)}function a(t,e,i){return!!Array.isArray(t)&&(r(t,i[e],i),!0)}function r(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==n)for(o=0;o-1}function g(t){return t.trim().split(/\s+/g)}function y(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;ni[e]}):n.sort()),n}function k(t,e){for(var i,o,a=e[0].toUpperCase()+e.slice(1),r=0;r1&&!i.firstMultiple?i.firstMultiple=_(e):1===o&&(i.firstMultiple=!1);var a=i.firstInput,r=i.firstMultiple,s=r?r.center:a.center,l=e.center=M(n);e.timeStamp=ht(),e.deltaTime=e.timeStamp-a.timeStamp,e.angle=z(s,l),e.distance=q(s,l),O(i,e),e.offsetDirection=D(e.deltaX,e.deltaY),e.scale=r?H(r.pointers,n):1,e.rotation=r?V(r.pointers,n):0,E(i,e);var c=t.element;v(e.srcEvent.target,c)&&(c=e.srcEvent.target),e.target=c}function O(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},a=t.prevInput||{};(e.eventType===xt||a.eventType===Tt)&&(o=t.prevDelta={x:a.deltaX||0,y:a.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}function E(t,e){var i,o,a,r,s=t.lastInterval||e,l=e.timeStamp-s.timeStamp;if(e.eventType!=St&&(l>kt||s.velocity===n)){var c=s.deltaX-e.deltaX,u=s.deltaY-e.deltaY,d=I(l,c,u);o=d.x,a=d.y,i=pt(d.x)>pt(d.y)?d.x:d.y,r=D(c,u),t.lastInterval=e}else i=s.velocity,o=s.velocityX,a=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=o,e.velocityY=a,e.direction=r}function _(t){for(var e=[],i=0;io;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:dt(i/e),y:dt(n/e)}}function I(t,e,i){return{x:e/t||0,y:i/t||0}}function D(t,e){return t===e?Pt:pt(t)>=pt(e)?t>0?At:Ot:e>0?Et:_t}function q(t,e,i){i||(i=qt);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function z(t,e,i){i||(i=qt);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function V(t,e){return z(e[1],e[0],zt)-z(t[1],t[0],zt)}function H(t,e){return q(e[0],e[1],zt)/q(t[0],t[1],zt)}function L(){this.evEl=Ht,this.evWin=Lt,this.allow=!0,this.pressed=!1,T.apply(this,arguments)}function j(){this.evEl=Nt,this.evWin=Wt,T.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function $(){this.evTarget=Qt,this.evWin=Xt,this.started=!1,T.apply(this,arguments)}function N(t,e){var i=b(t.touches),n=b(t.changedTouches);return e&(Tt|St)&&(i=w(i.concat(n),"identifier",!0)),[i,n]}function W(){this.evTarget=Yt,this.targetIds={},T.apply(this,arguments)}function F(t,e){var i=b(t.touches),n=this.targetIds;if(e&(xt|Ct)&&1===i.length)return n[i[0].identifier]=!0,[i,i];var o,a,r=b(t.changedTouches),s=[],l=this.target;if(a=i.filter(function(t){return v(t.target,l)}),e===xt)for(o=0;os&&(e.push(t),s=e.length-1):o&(Tt|St)&&(i=!0),0>s||(e[s]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:a,srcEvent:t}),i&&e.splice(s,1))}});var Ft={touchstart:xt,touchmove:Ct,touchend:Tt,touchcancel:St},Qt="touchstart",Xt="touchstart touchmove touchend touchcancel";c($,T,{handler:function(t){var e=Ft[t.type];if(e===xt&&(this.started=!0),this.started){var i=N.call(this,t,e);e&(Tt|St)&&0==i[0].length-i[1].length&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:bt,srcEvent:t})}}});var Rt={touchstart:xt,touchmove:Ct,touchend:Tt,touchcancel:St},Yt="touchstart touchmove touchend touchcancel";c(W,T,{handler:function(t){var e=Rt[t.type],i=F.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:bt,srcEvent:t})}}),c(Q,T,{handler:function(t,e,i){var n=i.pointerType==bt,o=i.pointerType==wt;if(n)this.mouse.allow=!1;else if(o&&!this.mouse.allow)return;e&(Tt|St)&&(this.mouse.allow=!0),this.callback(t,e,i)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Bt=k(ct.style,"touchAction"),Ut=Bt!==n,Gt="compute",Zt="auto",Jt="manipulation",Kt="none",te="pan-x",ee="pan-y";X.prototype={set:function(t){t==Gt&&(t=this.compute()),Ut&&(this.manager.element.style[Bt]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return r(this.manager.recognizers,function(e){d(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),R(t.join(" "))},preventDefaults:function(t){if(!Ut){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var n=this.actions,o=m(n,Kt),a=m(n,ee),r=m(n,te);return o||a&&i&Mt||r&&i&It?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var ie=1,ne=2,oe=4,ae=8,re=ae,se=16;Y.prototype={defaults:{},set:function(t){return s(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(a(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=G(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return a(t,"dropRecognizeWith",this)?this:(t=G(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(a(t,"requireFailure",this))return this;var e=this.requireFail;return t=G(t,this),-1===y(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(a(t,"dropRequireFailure",this))return this;t=G(t,this);var e=y(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(i.options.event+(e?B(n):""),t)}var i=this,n=this.state;ae>n&&e(!0),e(),n>=ae&&e(!0)},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=32)},canEmit:function(){for(var t=0;ta?At:Ot,i=a!=this.pX,n=Math.abs(t.deltaX)):(o=0===r?Pt:0>r?Et:_t,i=r!=this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},attrTest:function(t){return Z.prototype.attrTest.call(this,t)&&(this.state&ne||!(this.state&ne)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=U(t.direction);e&&this.manager.emit(this.options.event+e,t),this._super.emit.call(this,t)}}),c(K,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Kt]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ne)},emit:function(t){if(this._super.emit.call(this,t),1!==t.scale){var e=t.scale<1?"in":"out";this.manager.emit(this.options.event+e,t)}}}),c(tt,Y,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Zt]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,n=t.distancee.time;if(this._input=t,!n||!i||t.eventType&(Tt|St)&&!a)this.reset();else if(t.eventType&xt)this.reset(),this._timer=o(function(){this.state=re,this.tryEmit()},e.time,this);else if(t.eventType&Tt)return re;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===re&&(t&&t.eventType&Tt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=ht(),this.manager.emit(this.options.event,this._input)))}}),c(et,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Kt]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ne)}}),c(it,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Mt|It,pointers:1},getTouchAction:function(){return J.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Mt|It)?e=t.velocity:i&Mt?e=t.velocityX:i&It&&(e=t.velocityY),this._super.attrTest.call(this,t)&&i&t.direction&&t.distance>this.options.threshold&&pt(e)>this.options.velocity&&t.eventType&Tt},emit:function(t){var e=U(t.direction);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(nt,Y,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Jt]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,n=t.distance=0&&!n;)n=t[i[a]+"RequestAnimationFrame"],o=t[i[a]+"CancelRequestAnimationFrame"];n&&o||(n=function(t){var i=+Date.now(),n=Math.max(e+16,i);return setTimeout(function(){t(e=n)},n-i)},o=clearTimeout),t.requestAnimationFrame=n,t.cancelAnimationFrame=o}(window),Materialize.objectSelectorString=function(t){return((t.prop("tagName")||"")+(t.attr("id")||"")+(t.attr("class")||"")).replace(/\s/g,"")},Materialize.guid=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()}}(),Materialize.escapeHash=function(t){return t.replace(/(:|\.|\[|\]|,|=)/g,"\\$1")},Materialize.elementOrParentIsFixed=function(t){var e=$(t),i=!1;return e.add(e.parents()).each(function(){if("fixed"===$(this).css("position"))return i=!0,!1}),i};var getTime=Date.now||function(){return(new Date).getTime()};Materialize.throttle=function(t,e,i){var n,o,a,r=null,s=0;i||(i={});var l=function(){s=!1===i.leading?0:getTime(),r=null,a=t.apply(n,o),n=o=null};return function(){var c=getTime();s||!1!==i.leading||(s=c);var u=e-(c-s);return n=this,o=arguments,u<=0?(clearTimeout(r),r=null,s=c,a=t.apply(n,o),n=o=null):r||!1===i.trailing||(r=setTimeout(l,u)),a}};var Vel;Vel=jQuery?jQuery.Velocity:$?$.Velocity:Velocity,Materialize.Vel=Vel||Velocity,function(t){t.fn.collapsible=function(e,i){var n={accordion:void 0,onOpen:void 0,onClose:void 0},o=e;return e=t.extend(n,e),this.each(function(){function n(e){p=d.find("> li > .collapsible-header"),e.hasClass("active")?e.parent().addClass("active"):e.parent().removeClass("active"),e.parent().hasClass("active")?e.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){t(this).css("height","")}}):e.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){t(this).css("height","")}}),p.not(e).removeClass("active").parent().removeClass("active"),p.not(e).parent().children(".collapsible-body").stop(!0,!1).each(function(){t(this).is(":visible")&&t(this).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){t(this).css("height",""),s(t(this).siblings(".collapsible-header"))}})})}function a(e){e.hasClass("active")?e.parent().addClass("active"):e.parent().removeClass("active"),e.parent().hasClass("active")?e.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){t(this).css("height","")}}):e.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){t(this).css("height","")}})}function r(t,i){i||t.toggleClass("active"),e.accordion||"accordion"===h||void 0===h?n(t):a(t),s(t)}function s(t){t.hasClass("active")?"function"==typeof e.onOpen&&e.onOpen.call(this,t.parent()):"function"==typeof e.onClose&&e.onClose.call(this,t.parent())}function l(t){return c(t).length>0}function c(t){return t.closest("li > .collapsible-header")}function u(){d.off("click.collapse","> li > .collapsible-header")}var d=t(this),p=t(this).find("> li > .collapsible-header"),h=d.data("collapsible");if("destroy"!==o)if(i>=0&&i li > .collapsible-header",function(e){var i=t(e.target);l(i)&&(i=c(i)),r(i)}),e.accordion||"accordion"===h||void 0===h?r(p.filter(".active").first(),!0):p.filter(".active").each(function(){r(t(this),!0)});else u()})},t(document).ready(function(){t(".collapsible").collapsible()})}(jQuery),function(t){t.fn.scrollTo=function(e){return t(this).scrollTop(t(this).scrollTop()-t(this).offset().top+t(e).offset().top),this},t.fn.dropdown=function(e){var i={inDuration:300,outDuration:225,constrainWidth:!0,hover:!1,gutter:0,belowOrigin:!1,alignment:"left",stopPropagation:!1};return"open"===e?(this.each(function(){t(this).trigger("open")}),!1):"close"===e?(this.each(function(){t(this).trigger("close")}),!1):void this.each(function(){function n(){void 0!==r.data("induration")&&(s.inDuration=r.data("induration")),void 0!==r.data("outduration")&&(s.outDuration=r.data("outduration")),void 0!==r.data("constrainwidth")&&(s.constrainWidth=r.data("constrainwidth")),void 0!==r.data("hover")&&(s.hover=r.data("hover")),void 0!==r.data("gutter")&&(s.gutter=r.data("gutter")),void 0!==r.data("beloworigin")&&(s.belowOrigin=r.data("beloworigin")),void 0!==r.data("alignment")&&(s.alignment=r.data("alignment")),void 0!==r.data("stoppropagation")&&(s.stopPropagation=r.data("stoppropagation"))}function o(e){"focus"===e&&(l=!0),n(),c.addClass("active"),r.addClass("active");var i=r[0].getBoundingClientRect().width;!0===s.constrainWidth?c.css("width",i):c.css("white-space","nowrap");var o=window.innerHeight,u=r.innerHeight(),d=r.offset().left,p=r.offset().top-t(window).scrollTop(),h=s.alignment,f=0,v=0,m=0;!0===s.belowOrigin&&(m=u);var g=0,y=0,b=r.parent();if(b.is("body")||(b[0].scrollHeight>b[0].clientHeight&&(g=b[0].scrollTop),b[0].scrollWidth>b[0].clientWidth&&(y=b[0].scrollLeft)),d+c.innerWidth()>t(window).width()?h="right":d-c.innerWidth()+r.innerWidth()<0&&(h="left"),p+c.innerHeight()>o)if(p+u-c.innerHeight()<0){var w=o-p-m;c.css("max-height",w)}else m||(m+=u),m-=c.innerHeight();"left"===h?(f=s.gutter,v=r.position().left+f):"right"===h&&(c.stop(!0,!0).css({opacity:0,left:0}),v=r.position().left+i-c.width()+(f=-s.gutter)),c.css({position:"absolute",top:r.position().top+m+g,left:v+y}),c.slideDown({queue:!1,duration:s.inDuration,easing:"easeOutCubic",complete:function(){t(this).css("height","")}}).animate({opacity:1},{queue:!1,duration:s.inDuration,easing:"easeOutSine"}),setTimeout(function(){t(document).on("click."+c.attr("id"),function(e){a(),t(document).off("click."+c.attr("id"))})},0)}function a(){l=!1,c.fadeOut(s.outDuration),c.removeClass("active"),r.removeClass("active"),t(document).off("click."+c.attr("id")),setTimeout(function(){c.css("max-height","")},s.outDuration)}var r=t(this),s=t.extend({},i,e),l=!1,c=t("#"+r.attr("data-activates"));if(n(),r.after(c),s.hover){var u=!1;r.off("click."+r.attr("id")),r.on("mouseenter",function(t){!1===u&&(o(),u=!0)}),r.on("mouseleave",function(e){var i=e.toElement||e.relatedTarget;t(i).closest(".dropdown-content").is(c)||(c.stop(!0,!0),a(),u=!1)}),c.on("mouseleave",function(e){var i=e.toElement||e.relatedTarget;t(i).closest(".dropdown-button").is(r)||(c.stop(!0,!0),a(),u=!1)})}else r.off("click."+r.attr("id")),r.on("click."+r.attr("id"),function(e){l||(r[0]!=e.currentTarget||r.hasClass("active")||0!==t(e.target).closest(".dropdown-content").length?r.hasClass("active")&&(a(),t(document).off("click."+c.attr("id"))):(e.preventDefault(),s.stopPropagation&&e.stopPropagation(),o("click")))});r.on("open",function(t,e){o(e)}),r.on("close",a)})},t(document).ready(function(){t(".dropdown-button").dropdown()})}(jQuery),function(t,e){"use strict";var i={opacity:.5,inDuration:250,outDuration:250,ready:void 0,complete:void 0,dismissible:!0,startingTop:"4%",endingTop:"10%"},n=function(){function n(e,i){_classCallCheck(this,n),e[0].M_Modal&&e[0].M_Modal.destroy(),this.$el=e,this.options=t.extend({},n.defaults,i),this.isOpen=!1,this.$el[0].M_Modal=this,this.id=e.attr("id"),this.openingTrigger=void 0,this.$overlay=t(''),n._increment++,n._count++,this.$overlay[0].style.zIndex=1e3+2*n._increment,this.$el[0].style.zIndex=1e3+2*n._increment+1,this.setupEventHandlers()}return _createClass(n,[{key:"getInstance",value:function(){return this}},{key:"destroy",value:function(){this.removeEventHandlers(),this.$el[0].removeAttribute("style"),this.$overlay[0].parentNode&&this.$overlay[0].parentNode.removeChild(this.$overlay[0]),this.$el[0].M_Modal=void 0,n._count--}},{key:"setupEventHandlers",value:function(){this.handleOverlayClickBound=this.handleOverlayClick.bind(this),this.handleModalCloseClickBound=this.handleModalCloseClick.bind(this),1===n._count&&document.body.addEventListener("click",this.handleTriggerClick),this.$overlay[0].addEventListener("click",this.handleOverlayClickBound),this.$el[0].addEventListener("click",this.handleModalCloseClickBound)}},{key:"removeEventHandlers",value:function(){0===n._count&&document.body.removeEventListener("click",this.handleTriggerClick),this.$overlay[0].removeEventListener("click",this.handleOverlayClickBound),this.$el[0].removeEventListener("click",this.handleModalCloseClickBound)}},{key:"handleTriggerClick",value:function(e){var i=t(e.target).closest(".modal-trigger");if(e.target&&i.length){var n=i[0].getAttribute("href");n=n?n.slice(1):i[0].getAttribute("data-target");var o=document.getElementById(n).M_Modal;o&&o.open(i),e.preventDefault()}}},{key:"handleOverlayClick",value:function(){this.options.dismissible&&this.close()}},{key:"handleModalCloseClick",value:function(e){var i=t(e.target).closest(".modal-close");e.target&&i.length&&this.close()}},{key:"handleKeydown",value:function(t){27===t.keyCode&&this.options.dismissible&&this.close()}},{key:"animateIn",value:function(){var i=this;t.extend(this.$el[0].style,{display:"block",opacity:0}),t.extend(this.$overlay[0].style,{display:"block",opacity:0}),e(this.$overlay[0],{opacity:this.options.opacity},{duration:this.options.inDuration,queue:!1,ease:"easeOutCubic"});var n={duration:this.options.inDuration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof i.options.ready&&i.options.ready.call(i,i.$el,i.openingTrigger)}};this.$el[0].classList.contains("bottom-sheet")?e(this.$el[0],{bottom:0,opacity:1},n):(e.hook(this.$el[0],"scaleX",.7),this.$el[0].style.top=this.options.startingTop,e(this.$el[0],{top:this.options.endingTop,opacity:1,scaleX:1},n))}},{key:"animateOut",value:function(){var t=this;e(this.$overlay[0],{opacity:0},{duration:this.options.outDuration,queue:!1,ease:"easeOutQuart"});var i={duration:this.options.outDuration,queue:!1,ease:"easeOutCubic",complete:function(){t.$el[0].style.display="none","function"==typeof t.options.complete&&t.options.complete.call(t,t.$el),t.$overlay[0].parentNode.removeChild(t.$overlay[0])}};this.$el[0].classList.contains("bottom-sheet")?e(this.$el[0],{bottom:"-100%",opacity:0},i):e(this.$el[0],{top:this.options.startingTop,opacity:0,scaleX:.7},i)}},{key:"open",value:function(t){if(!this.isOpen){this.isOpen=!0;var e=document.body;return e.style.overflow="hidden",this.$el[0].classList.add("open"),e.appendChild(this.$overlay[0]),this.openingTrigger=t||void 0,this.options.dismissible&&(this.handleKeydownBound=this.handleKeydown.bind(this),document.addEventListener("keydown",this.handleKeydownBound)),this.animateIn(),this}}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,this.$el[0].classList.remove("open"),document.body.style.overflow="",this.options.dismissible&&document.removeEventListener("keydown",this.handleKeydownBound),this.animateOut(),this}}],[{key:"init",value:function(e,i){var o=[];return e.each(function(){o.push(new n(t(this),i))}),o}},{key:"defaults",get:function(){return i}}]),n}();n._increment=0,n._count=0,Materialize.Modal=n,t.fn.modal=function(e){return n.prototype[e]?"get"===e.slice(0,3)?this.first()[0].M_Modal[e]():this.each(function(){this.M_Modal[e]()}):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.modal"):(n.init(this,arguments[0]),this)}}(jQuery,Materialize.Vel),function(t){t.fn.materialbox=function(){return this.each(function(){function e(){a=!1;var e=s.parent(".material-placeholder"),n=(window.innerWidth,window.innerHeight,s.data("width")),l=s.data("height");s.velocity("stop",!0),t("#materialbox-overlay").velocity("stop",!0),t(".materialbox-caption").velocity("stop",!0),t(window).off("scroll.materialbox"),t(document).off("keyup.materialbox"),t(window).off("resize.materialbox"),t("#materialbox-overlay").velocity({opacity:0},{duration:r,queue:!1,easing:"easeOutQuad",complete:function(){o=!1,t(this).remove()}}),s.velocity({width:n,height:l,left:0,top:0},{duration:r,queue:!1,easing:"easeOutQuad",complete:function(){e.css({height:"",width:"",position:"",top:"",left:""}),s.removeAttr("style"),s.attr("style",c),s.removeClass("active"),a=!0,i&&i.css("overflow","")}}),t(".materialbox-caption").velocity({opacity:0},{duration:r,queue:!1,easing:"easeOutQuad",complete:function(){t(this).remove()}})}if(!t(this).hasClass("initialized")){t(this).addClass("initialized");var i,n,o=!1,a=!0,r=200,s=t(this),l=t("
              ").addClass("material-placeholder"),c=s.attr("style");s.wrap(l),s.on("click",function(){var r=s.parent(".material-placeholder"),l=window.innerWidth,c=window.innerHeight,u=s.width(),d=s.height();if(!1===a)return e(),!1;if(o&&!0===a)return e(),!1;a=!1,s.addClass("active"),o=!0,r.css({width:r[0].getBoundingClientRect().width,height:r[0].getBoundingClientRect().height,position:"relative",top:0,left:0}),i=void 0,n=r[0].parentNode;for(;null!==n&&!t(n).is(document);){var p=t(n);"visible"!==p.css("overflow")&&(p.css("overflow","visible"),i=void 0===i?p:i.add(p)),n=n.parentNode}s.css({position:"absolute","z-index":1e3,"will-change":"left, top, width, height"}).data("width",u).data("height",d);var h=t('
              ').css({opacity:0}).click(function(){!0===a&&e()});s.before(h);var f=h[0].getBoundingClientRect();if(h.css({width:l,height:c,left:-1*f.left,top:-1*f.top}),h.velocity({opacity:1},{duration:275,queue:!1,easing:"easeOutQuad"}),""!==s.data("caption")){var v=t('
              ');v.text(s.data("caption")),t("body").append(v),v.css({display:"inline"}),v.velocity({opacity:1},{duration:275,queue:!1,easing:"easeOutQuad"})}var m=0,g=0;u/l>d/c?(m=.9*l,g=.9*l*(d/u)):(m=.9*c*(u/d),g=.9*c),s.hasClass("responsive-img")?s.velocity({"max-width":m,width:u},{duration:0,queue:!1,complete:function(){s.css({left:0,top:0}).velocity({height:g,width:m,left:t(document).scrollLeft()+l/2-s.parent(".material-placeholder").offset().left-m/2,top:t(document).scrollTop()+c/2-s.parent(".material-placeholder").offset().top-g/2},{duration:275,queue:!1,easing:"easeOutQuad",complete:function(){a=!0}})}}):s.css("left",0).css("top",0).velocity({height:g,width:m,left:t(document).scrollLeft()+l/2-s.parent(".material-placeholder").offset().left-m/2,top:t(document).scrollTop()+c/2-s.parent(".material-placeholder").offset().top-g/2},{duration:275,queue:!1,easing:"easeOutQuad",complete:function(){a=!0}}),t(window).on("scroll.materialbox",function(){o&&e()}),t(window).on("resize.materialbox",function(){o&&e()}),t(document).on("keyup.materialbox",function(t){27===t.keyCode&&!0===a&&o&&e()})})}})},t(document).ready(function(){t(".materialboxed").materialbox()})}(jQuery),function(t){t.fn.parallax=function(){var e=t(window).width();return this.each(function(i){function n(i){var n;n=e<601?o.height()>0?o.height():o.children("img").height():o.height()>0?o.height():500;var a=o.children("img").first(),r=a.height()-n,s=o.offset().top+n,l=o.offset().top,c=t(window).scrollTop(),u=window.innerHeight,d=(c+u-l)/(n+u),p=Math.round(r*d);i&&a.css("display","block"),s>c&&l=0?(s.velocity({right:b(o)},{duration:300,queue:!1,easing:"easeOutQuad"}),s.velocity({left:w(o)},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})):(s.velocity({left:w(o)},{duration:300,queue:!1,easing:"easeOutQuad"}),s.velocity({right:b(o)},{duration:300,queue:!1,easing:"easeOutQuad",delay:90}))};e.swipeable&&d>e.responsiveThreshold&&(e.swipeable=!1),0===(o=t(p.filter('[href="'+location.hash+'"]'))).length&&(o=t(this).find("li.tab a.active").first()),0===o.length&&(o=t(this).find("li.tab a").first()),o.addClass("active"),(m=p.index(o))<0&&(m=0),void 0!==o[0]&&(a=t(o[0].hash)).addClass("active"),u.find(".indicator").length||u.append('
            • '),s=u.find(".indicator"),u.append(s),u.is(":visible")&&setTimeout(function(){s.css({right:b(o)}),s.css({left:w(o)})},0),t(window).off("resize.tabs-"+c).on("resize.tabs-"+c,function(){h=u.width(),v=Math.max(h,u[0].scrollWidth)/p.length,m<0&&(m=0),0!==v&&0!==h&&(s.css({right:b(o)}),s.css({left:w(o)}))}),e.swipeable?(p.each(function(){var e=t(Materialize.escapeHash(this.hash));e.addClass("carousel-item"),f=f.add(e)}),r=f.wrapAll(''),f.css("display",""),t(".tabs-content.carousel").carousel({fullWidth:!0,noWrap:!0,onCycleTo:function(t){if(!y){var i=m;m=r.index(t),o.removeClass("active"),(o=p.eq(m)).addClass("active"),k(i),"function"==typeof e.onShow&&e.onShow.call(u[0],a)}}})):p.not(o).each(function(){t(Materialize.escapeHash(this.hash)).hide()}),u.off("click.tabs").on("click.tabs","a",function(i){if(t(this).parent().hasClass("disabled"))i.preventDefault();else if(!t(this).attr("target")){y=!0,h=u.width(),v=Math.max(h,u[0].scrollWidth)/p.length,o.removeClass("active");var n=a;o=t(this),a=t(Materialize.escapeHash(this.hash)),p=u.find("li.tab a");o.position();o.addClass("active"),g=m,(m=p.index(t(this)))<0&&(m=0),e.swipeable?f.length&&f.carousel("set",m,function(){"function"==typeof e.onShow&&e.onShow.call(u[0],a)}):(void 0!==a&&(a.show(),a.addClass("active"),"function"==typeof e.onShow&&e.onShow.call(this,a)),void 0===n||n.is(a)||(n.hide(),n.removeClass("active"))),l=setTimeout(function(){y=!1},300),k(g),i.preventDefault()}})})},select_tab:function(t){this.find('a[href="#'+t+'"]').trigger("click")}};t.fn.tabs=function(i){return e[i]?e[i].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof i&&i?void t.error("Method "+i+" does not exist on jQuery.tabs"):e.init.apply(this,arguments)},t(document).ready(function(){t("ul.tabs").tabs()})}(jQuery),function(t){t.fn.tooltip=function(i){var n={delay:350,tooltip:"",position:"bottom",html:!1};return"remove"===i?(this.each(function(){t("#"+t(this).attr("data-tooltip-id")).remove(),t(this).removeAttr("data-tooltip-id"),t(this).off("mouseenter.tooltip mouseleave.tooltip")}),!1):(i=t.extend(n,i),this.each(function(){var n=Materialize.guid(),o=t(this);o.attr("data-tooltip-id")&&t("#"+o.attr("data-tooltip-id")).remove(),o.attr("data-tooltip-id",n);var a,r,s,l,c,u,d=function(){a=o.attr("data-html")?"true"===o.attr("data-html"):i.html,r=o.attr("data-delay"),r=void 0===r||""===r?i.delay:r,s=o.attr("data-position"),s=void 0===s||""===s?i.position:s,l=o.attr("data-tooltip"),l=void 0===l||""===l?i.tooltip:l};d();c=function(){var e=t('
              ');return l=a?t("").html(l):t("").text(l),e.append(l).appendTo(t("body")).attr("id",n),(u=t('
              ')).appendTo(e),e}(),o.off("mouseenter.tooltip mouseleave.tooltip");var p,h=!1;o.on({"mouseenter.tooltip":function(t){p=setTimeout(function(){d(),h=!0,c.velocity("stop"),u.velocity("stop"),c.css({visibility:"visible",left:"0px",top:"0px"});var t,i,n,a=o.outerWidth(),r=o.outerHeight(),l=c.outerHeight(),p=c.outerWidth(),f="0px",v="0px",m=u[0].offsetWidth,g=u[0].offsetHeight,y=8,b=8,w=0;"top"===s?(t=o.offset().top-l-5,i=o.offset().left+a/2-p/2,n=e(i,t,p,l),f="-10px",u.css({bottom:0,left:0,borderRadius:"14px 14px 0 0",transformOrigin:"50% 100%",marginTop:l,marginLeft:p/2-m/2})):"left"===s?(t=o.offset().top+r/2-l/2,i=o.offset().left-p-5,n=e(i,t,p,l),v="-10px",u.css({top:"-7px",right:0,width:"14px",height:"14px",borderRadius:"14px 0 0 14px",transformOrigin:"95% 50%",marginTop:l/2,marginLeft:p})):"right"===s?(t=o.offset().top+r/2-l/2,i=o.offset().left+a+5,n=e(i,t,p,l),v="+10px",u.css({top:"-7px",left:0,width:"14px",height:"14px",borderRadius:"0 14px 14px 0",transformOrigin:"5% 50%",marginTop:l/2,marginLeft:"0px"})):(t=o.offset().top+o.outerHeight()+5,i=o.offset().left+a/2-p/2,n=e(i,t,p,l),f="+10px",u.css({top:0,left:0,marginLeft:p/2-m/2})),c.css({top:n.y,left:n.x}),y=Math.SQRT2*p/parseInt(m),b=Math.SQRT2*l/parseInt(g),w=Math.max(y,b),c.velocity({translateY:f,translateX:v},{duration:350,queue:!1}).velocity({opacity:1},{duration:300,delay:50,queue:!1}),u.css({visibility:"visible"}).velocity({opacity:1},{duration:55,delay:0,queue:!1}).velocity({scaleX:w,scaleY:w},{duration:300,delay:0,queue:!1,easing:"easeInOutQuad"})},r)},"mouseleave.tooltip":function(){h=!1,clearTimeout(p),setTimeout(function(){!0!==h&&(c.velocity({opacity:0,translateY:0,translateX:0},{duration:225,queue:!1}),u.velocity({opacity:0,scaleX:1,scaleY:1},{duration:225,queue:!1,complete:function(){u.css({visibility:"hidden"}),c.css({visibility:"hidden"}),h=!1}}))},225)}})}))};var e=function(e,i,n,o){var a=e,r=i;return a<0?a=4:a+n>window.innerWidth&&(a-=a+n-window.innerWidth),r<0?r=4:r+o>window.innerHeight+t(window).scrollTop&&(r-=r+o-window.innerHeight),{x:a,y:r}};t(document).ready(function(){t(".tooltipped").tooltip()})}(jQuery),function(t){"use strict";function e(t){return null!==t&&t===t.window}function i(t){return e(t)?t:9===t.nodeType&&t.defaultView}function n(t){var e,n,o={top:0,left:0},a=t&&t.ownerDocument;return e=a.documentElement,void 0!==t.getBoundingClientRect&&(o=t.getBoundingClientRect()),n=i(a),{top:o.top+n.pageYOffset-e.clientTop,left:o.left+n.pageXOffset-e.clientLeft}}function o(t){var e="";for(var i in t)t.hasOwnProperty(i)&&(e+=i+":"+t[i]+";");return e}function a(t){if(!1===u.allowEvent(t))return null;for(var e=null,i=t.target||t.srcElement;null!==i.parentNode;){if(!(i instanceof SVGElement)&&-1!==i.className.indexOf("waves-effect")){e=i;break}i=i.parentNode}return e}function r(e){var i=a(e);null!==i&&(c.show(e,i),"ontouchstart"in t&&(i.addEventListener("touchend",c.hide,!1),i.addEventListener("touchcancel",c.hide,!1)),i.addEventListener("mouseup",c.hide,!1),i.addEventListener("mouseleave",c.hide,!1),i.addEventListener("dragend",c.hide,!1))}var s=s||{},l=document.querySelectorAll.bind(document),c={duration:750,show:function(t,e){if(2===t.button)return!1;var i=e||this,a=document.createElement("div");a.className="waves-ripple",i.appendChild(a);var r=n(i),s=t.pageY-r.top,l=t.pageX-r.left,u="scale("+i.clientWidth/100*10+")";"touches"in t&&(s=t.touches[0].pageY-r.top,l=t.touches[0].pageX-r.left),a.setAttribute("data-hold",Date.now()),a.setAttribute("data-scale",u),a.setAttribute("data-x",l),a.setAttribute("data-y",s);var d={top:s+"px",left:l+"px"};a.className=a.className+" waves-notransition",a.setAttribute("style",o(d)),a.className=a.className.replace("waves-notransition",""),d["-webkit-transform"]=u,d["-moz-transform"]=u,d["-ms-transform"]=u,d["-o-transform"]=u,d.transform=u,d.opacity="1",d["-webkit-transition-duration"]=c.duration+"ms",d["-moz-transition-duration"]=c.duration+"ms",d["-o-transition-duration"]=c.duration+"ms",d["transition-duration"]=c.duration+"ms",d["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",d["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",d["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",d["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",a.setAttribute("style",o(d))},hide:function(t){u.touchup(t);var e=this,i=(e.clientWidth,null),n=e.getElementsByClassName("waves-ripple");if(!(n.length>0))return!1;var a=(i=n[n.length-1]).getAttribute("data-x"),r=i.getAttribute("data-y"),s=i.getAttribute("data-scale"),l=350-(Date.now()-Number(i.getAttribute("data-hold")));l<0&&(l=0),setTimeout(function(){var t={top:r+"px",left:a+"px",opacity:"0","-webkit-transition-duration":c.duration+"ms","-moz-transition-duration":c.duration+"ms","-o-transition-duration":c.duration+"ms","transition-duration":c.duration+"ms","-webkit-transform":s,"-moz-transform":s,"-ms-transform":s,"-o-transform":s,transform:s};i.setAttribute("style",o(t)),setTimeout(function(){try{e.removeChild(i)}catch(t){return!1}},c.duration)},l)},wrapInput:function(t){for(var e=0;e0&&(u.touches-=1)},500):"mousedown"===t.type&&u.touches>0&&(e=!1),e},touchup:function(t){u.allowEvent(t)}};s.displayEffect=function(e){"duration"in(e=e||{})&&(c.duration=e.duration),c.wrapInput(l(".waves-effect")),"ontouchstart"in t&&document.body.addEventListener("touchstart",r,!1),document.body.addEventListener("mousedown",r,!1)},s.attach=function(e){"input"===e.tagName.toLowerCase()&&(c.wrapInput([e]),e=e.parentNode),"ontouchstart"in t&&e.addEventListener("touchstart",r,!1),e.addEventListener("mousedown",r,!1)},t.Waves=s,document.addEventListener("DOMContentLoaded",function(){s.displayEffect()},!1)}(window),function(t,e){"use strict";var i={displayLength:1/0,inDuration:300,outDuration:375,className:void 0,completeCallback:void 0,activationPercent:.8},n=function(){function n(e,i,o,a){if(_classCallCheck(this,n),e){this.options={displayLength:i,className:o,completeCallback:a},this.options=t.extend({},n.defaults,this.options),this.message=e,this.panning=!1,this.timeRemaining=this.options.displayLength,0===n._toasts.length&&n._createContainer(),n._toasts.push(this);var r=this.createToast();r.M_Toast=this,this.el=r,this._animateIn(),this.setTimer()}}return _createClass(n,[{key:"createToast",value:function(){var e=document.createElement("div");if(e.classList.add("toast"),this.options.className){var i=this.options.className.split(" "),o=void 0,a=void 0;for(o=0,a=i.length;oo||e.velocityX>1?(e.wasSwiped=!0,e.remove()):(e.el.style.transition="transform .2s, opacity .2s",e.el.style.transform="",e.el.style.opacity=""),n._draggedToast=null}}},{key:"_xPos",value:function(t){return t.targetTouches&&t.targetTouches.length>=1?t.targetTouches[0].clientX:t.clientX}},{key:"removeAll",value:function(){for(var t in n._toasts)n._toasts[t].remove()}},{key:"defaults",get:function(){return i}}]),n}();n._toasts=[],n._container=null,n._draggedToast=null,Materialize.Toast=n,Materialize.toast=function(t,e,i,o){return new n(t,e,i,o)}}(jQuery,Materialize.Vel),function(t){var e={init:function(e){var i={menuWidth:300,edge:"left",closeOnClick:!1,draggable:!0,onOpen:null,onClose:null};e=t.extend(i,e),t(this).each(function(){var i=t(this),n=i.attr("data-activates"),o=t("#"+n);300!=e.menuWidth&&o.css("width",e.menuWidth);var a=t('.drag-target[data-sidenav="'+n+'"]');e.draggable?(a.length&&a.remove(),a=t('
              ').attr("data-sidenav",n),t("body").append(a)):a=t(),"left"==e.edge?(o.css("transform","translateX(-100%)"),a.css({left:0})):(o.addClass("right-aligned").css("transform","translateX(100%)"),a.css({right:0})),o.hasClass("fixed")&&window.innerWidth>992&&o.css("transform","translateX(0)"),o.hasClass("fixed")&&t(window).resize(function(){window.innerWidth>992?0!==t("#sidenav-overlay").length&&l?r(!0):o.css("transform","translateX(0%)"):!1===l&&("left"===e.edge?o.css("transform","translateX(-100%)"):o.css("transform","translateX(100%)"))}),!0===e.closeOnClick&&o.on("click.itemclick","a:not(.collapsible-header)",function(){window.innerWidth>992&&o.hasClass("fixed")||r()});var r=function(i){s=!1,l=!1,t("body").css({overflow:"",width:""}),t("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){t(this).remove()}}),"left"===e.edge?(a.css({width:"",right:"",left:"0"}),o.velocity({translateX:"-100%"},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){!0===i&&(o.removeAttr("style"),o.css("width",e.menuWidth))}})):(a.css({width:"",right:"0",left:""}),o.velocity({translateX:"100%"},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){!0===i&&(o.removeAttr("style"),o.css("width",e.menuWidth))}})),"function"==typeof e.onClose&&e.onClose.call(this,o)},s=!1,l=!1;e.draggable&&(a.on("click",function(){l&&r()}),a.hammer({prevent_default:!1}).on("pan",function(i){if("touch"==i.gesture.pointerType){i.gesture.direction;var n=i.gesture.center.x,a=i.gesture.center.y;i.gesture.velocityX;if(0===n&&0===a)return;var s=t("body"),c=t("#sidenav-overlay"),u=s.innerWidth();if(s.css("overflow","hidden"),s.width(u),0===c.length&&((c=t('
              ')).css("opacity",0).click(function(){r()}),"function"==typeof e.onOpen&&e.onOpen.call(this,o),t("body").append(c)),"left"===e.edge&&(n>e.menuWidth?n=e.menuWidth:n<0&&(n=0)),"left"===e.edge)n=e.menuWidth/2&&(l=!0),o.css("transform","translateX("+(n-e.menuWidth)+"px)");else{n=window.innerWidth-e.menuWidth/2&&(l=!1);var d=n-e.menuWidth/2;d<0&&(d=0),o.css("transform","translateX("+d+"px)")}var p;"left"===e.edge?(p=n/e.menuWidth,c.velocity({opacity:p},{duration:10,queue:!1,easing:"easeOutQuad"})):(p=Math.abs((n-window.innerWidth)/e.menuWidth),c.velocity({opacity:p},{duration:10,queue:!1,easing:"easeOutQuad"}))}}).on("panend",function(i){if("touch"==i.gesture.pointerType){var n=t("#sidenav-overlay"),r=i.gesture.velocityX,c=i.gesture.center.x,u=c-e.menuWidth,d=c-e.menuWidth/2;u>0&&(u=0),d<0&&(d=0),s=!1,"left"===e.edge?l&&r<=.3||r<-.5?(0!==u&&o.velocity({translateX:[0,u]},{duration:300,queue:!1,easing:"easeOutQuad"}),n.velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),a.css({width:"50%",right:0,left:""}),l=!0):(!l||r>.3)&&(t("body").css({overflow:"",width:""}),o.velocity({translateX:[-1*e.menuWidth-10,u]},{duration:200,queue:!1,easing:"easeOutQuad"}),n.velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){"function"==typeof e.onClose&&e.onClose.call(this,o),t(this).remove()}}),a.css({width:"10px",right:"",left:0})):l&&r>=-.3||r>.5?(0!==d&&o.velocity({translateX:[0,d]},{duration:300,queue:!1,easing:"easeOutQuad"}),n.velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),a.css({width:"50%",right:"",left:0}),l=!0):(!l||r<-.3)&&(t("body").css({overflow:"",width:""}),o.velocity({translateX:[e.menuWidth+10,d]},{duration:200,queue:!1,easing:"easeOutQuad"}),n.velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){"function"==typeof e.onClose&&e.onClose.call(this,o),t(this).remove()}}),a.css({width:"10px",right:0,left:""}))}})),i.off("click.sidenav").on("click.sidenav",function(){if(!0===l)l=!1,s=!1,r();else{var i=t("body"),n=t('
              '),c=i.innerWidth();i.css("overflow","hidden"),i.width(c),t("body").append(a),"left"===e.edge?(a.css({width:"50%",right:0,left:""}),o.velocity({translateX:[0,-1*e.menuWidth]},{duration:300,queue:!1,easing:"easeOutQuad"})):(a.css({width:"50%",right:"",left:0}),o.velocity({translateX:[0,e.menuWidth]},{duration:300,queue:!1,easing:"easeOutQuad"})),n.css("opacity",0).click(function(){l=!1,s=!1,r(),n.velocity({opacity:0},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){t(this).remove()}})}),t("body").append(n),n.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){l=!0,s=!1}}),"function"==typeof e.onOpen&&e.onOpen.call(this,o)}return!1})})},destroy:function(){var e=t("#sidenav-overlay"),i=t('.drag-target[data-sidenav="'+t(this).attr("data-activates")+'"]');e.trigger("click"),i.remove(),t(this).off("click"),e.remove()},show:function(){this.trigger("click")},hide:function(){t("#sidenav-overlay").trigger("click")}};t.fn.sideNav=function(i){return e[i]?e[i].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof i&&i?void t.error("Method "+i+" does not exist on jQuery.sideNav"):e.init.apply(this,arguments)}}(jQuery),function(t){function e(e,i,n,o){var r=t();return t.each(a,function(t,a){if(a.height()>0){var s=a.offset().top,l=a.offset().left,c=l+a.width(),u=s+a.height();!(l>i||cn||u");n.html(s),e.is(":visible")?n.css("width",e.width()):n.css("width",t(window).width()/2),e.data("original-height")<=n.height()?e.css("height",n.height()):e.val().length0||t(i).is(":focus")||i.autofocus||void 0!==n.attr("placeholder")?n.siblings("label").addClass("active"):t(i)[0].validity?n.siblings("label").toggleClass("active",!0===t(i)[0].validity.badInput):n.siblings("label").removeClass("active")})};var i="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";t(document).on("change",i,function(){0===t(this).val().length&&void 0===t(this).attr("placeholder")||t(this).siblings("label").addClass("active"),validate_field(t(this))}),t(document).ready(function(){Materialize.updateTextFields()}),t(document).on("reset",function(e){var n=t(e.target);n.is("form")&&(n.find(i).removeClass("valid").removeClass("invalid"),n.find(i).each(function(){""===t(this).attr("value")&&t(this).siblings("label").removeClass("active")}),n.find("select.initialized").each(function(){var t=n.find("option[selected]").text();n.siblings("input.select-dropdown").val(t)}))}),t(document).on("focus",i,function(){t(this).siblings("label, .prefix").addClass("active")}),t(document).on("blur",i,function(){var e=t(this),i=".prefix";0===e.val().length&&!0!==e[0].validity.badInput&&void 0===e.attr("placeholder")&&(i+=", label"),e.siblings(i).removeClass("active"),validate_field(e)}),window.validate_field=function(t){var e=void 0!==t.attr("data-length"),i=parseInt(t.attr("data-length")),n=t.val().length;0!==t.val().length||!1!==t[0].validity.badInput||t.is(":required")?t.hasClass("validate")&&(t.is(":valid")&&e&&n<=i||t.is(":valid")&&!e?(t.removeClass("invalid"),t.addClass("valid")):(t.removeClass("valid"),t.addClass("invalid"))):t.hasClass("validate")&&(t.removeClass("valid"),t.removeClass("invalid"))};t(document).on("keyup.radio","input[type=radio], input[type=checkbox]",function(e){if(9===e.which)return t(this).addClass("tabbed"),void t(this).one("blur",function(e){t(this).removeClass("tabbed")})});var n=t(".hiddendiv").first();n.length||(n=t('
              '),t("body").append(n));t(".materialize-textarea").each(function(){var e=t(this);e.data("original-height",e.height()),e.data("previous-length",e.val().length)}),t("body").on("keyup keydown autoresize",".materialize-textarea",function(){e(t(this))}),t(document).on("change",'.file-field input[type="file"]',function(){for(var e=t(this).closest(".file-field").find("input.file-path"),i=t(this)[0].files,n=[],o=0;o
              ');t(this).after(e)});var r=function(t){var e=-7+parseInt(t.parent().css("padding-left"))+"px";t.velocity({height:"30px",width:"30px",top:"-30px",marginLeft:e},{duration:300,easing:"easeOutExpo"})},s=function(t){var e=t.width()-15,i=parseFloat(t.attr("max")),n=parseFloat(t.attr("min"));return(parseFloat(t.val())-n)/(i-n)*e};t(document).on("change",o,function(e){var i=t(this).siblings(".thumb");i.find(".value").html(t(this).val()),i.hasClass("active")||r(i);var n=s(t(this));i.addClass("active").css("left",n)}),t(document).on("mousedown touchstart",o,function(e){var i=t(this).siblings(".thumb");if(i.length<=0&&(i=t(''),t(this).after(i)),i.find(".value").html(t(this).val()),a=!0,t(this).addClass("active"),i.hasClass("active")||r(i),"input"!==e.type){var n=s(t(this));i.addClass("active").css("left",n)}}),t(document).on("mouseup touchend",".range-field",function(){a=!1,t(this).removeClass("active")}),t(document).on("input mousemove touchmove",".range-field",function(e){var i=t(this).children(".thumb"),n=t(this).find(o);if(a){i.hasClass("active")||r(i);var l=s(n);i.addClass("active").css("left",l),i.find(".value").html(i.siblings(o).val())}}),t(document).on("mouseout touchleave",".range-field",function(){if(!a){var e=t(this).children(".thumb"),i=7+parseInt(t(this).css("padding-left"))+"px";e.hasClass("active")&&e.velocity({height:"0",width:"0",top:"10px",marginLeft:i},{duration:100}),e.removeClass("active")}}),t.fn.autocomplete=function(e){var i={data:{},limit:1/0,onAutocomplete:null,minLength:1};return e=t.extend(i,e),this.each(function(){var i,n=t(this),o=e.data,a=0,r=-1,s=n.closest(".input-field");if(t.isEmptyObject(o))n.off("keyup.autocomplete focus.autocomplete");else{var l,c=t('');s.length?(l=s.children(".autocomplete-content.dropdown-content").first()).length||s.append(c):(l=n.next(".autocomplete-content.dropdown-content")).length||n.after(c),l.length&&(c=l);var u=function(t,e){var i=e.find("img"),n=e.text().toLowerCase().indexOf(""+t.toLowerCase()),o=n+t.length-1,a=e.text().slice(0,n),r=e.text().slice(n,o+1),s=e.text().slice(o+1);e.html(""+a+""+r+""+s+""),i.length&&e.prepend(i)},d=function(){r=-1,c.find(".active").removeClass("active")},p=function(){c.empty(),d(),i=void 0};n.off("blur.autocomplete").on("blur.autocomplete",function(){p()}),n.off("keyup.autocomplete focus.autocomplete").on("keyup.autocomplete focus.autocomplete",function(r){a=0;var s=n.val().toLowerCase();if(13!==r.which&&38!==r.which&&40!==r.which){if(i!==s&&(p(),s.length>=e.minLength))for(var l in o)if(o.hasOwnProperty(l)&&-1!==l.toLowerCase().indexOf(s)){if(a>=e.limit)break;var d=t("
            • ");o[l]?d.append(''+l+""):d.append(""+l+""),c.append(d),u(s,d),a++}i=s}}),n.off("keydown.autocomplete").on("keydown.autocomplete",function(t){var e,i=t.which,n=c.children("li").length,o=c.children(".active").first();13===i&&r>=0?(e=c.children("li").eq(r)).length&&(e.trigger("mousedown.autocomplete"),t.preventDefault()):38!==i&&40!==i||(t.preventDefault(),38===i&&r>0&&r--,40===i&&r=0&&c.children("li").eq(r).addClass("active"))}),c.off("mousedown.autocomplete touchstart.autocomplete").on("mousedown.autocomplete touchstart.autocomplete","li",function(){var i=t(this).text().trim();n.val(i),n.trigger("change"),p(),"function"==typeof e.onAutocomplete&&e.onAutocomplete.call(this,i)})}})}}),t.fn.material_select=function(e){function i(t,e,i){var o=t.indexOf(e),a=-1===o;return a?t.push(e):t.splice(o,1),i.siblings("ul.dropdown-content").find("li:not(.optgroup)").eq(e).toggleClass("active"),i.find("option").eq(e).prop("selected",a),n(t,i),a}function n(t,e){for(var i="",n=0,o=t.length;n
              ');s.addClass(n.attr("class")),n.is(":disabled")&&s.addClass("disabled");var l=t(''),c=n.children("option, optgroup"),u=[],d=!1,p=n.find("option:selected").html()||n.find("option:first").html()||"",h=function(e,i,n){var a=i.is(":disabled")?"disabled ":"",r="optgroup-option"===n?"optgroup-option ":"",s=o?'":"",c=i.data("icon"),u=i.attr("class");if(c){var d="";return u&&(d=' class="'+u+'"'),l.append(t('
            • "+s+i.html()+"
            • ")),!0}l.append(t('
            • '+s+i.html()+"
            • "))};c.length&&c.each(function(){if(t(this).is("option"))o?h(0,t(this),"multiple"):h(0,t(this));else if(t(this).is("optgroup")){var e=t(this).children("option");l.append(t('
            • '+t(this).attr("label")+"
            • ")),e.each(function(){h(0,t(this),"optgroup-option")})}}),l.find("li:not(.optgroup)").each(function(a){t(this).click(function(r){if(!t(this).hasClass("disabled")&&!t(this).hasClass("optgroup")){var s=!0;o?(t('input[type="checkbox"]',this).prop("checked",function(t,e){return!e}),s=i(u,a,n),m.trigger("focus")):(l.find("li").removeClass("active"),t(this).toggleClass("active"),m.val(t(this).text())),g(l,t(this)),n.find("option").eq(a).prop("selected",s),n.trigger("change"),void 0!==e&&e()}r.stopPropagation()})}),n.wrap(s);var f=t(''),v=p.replace(/"/g,"""),m=t('');n.before(m),m.before(f),m.after(l),n.is(":disabled")||m.dropdown({hover:!1}),n.attr("tabindex")&&t(m[0]).attr("tabindex",n.attr("tabindex")),n.addClass("initialized"),m.on({focus:function(){if(t("ul.select-dropdown").not(l[0]).is(":visible")&&(t("input.select-dropdown").trigger("close"),t(window).off("click.select")),!l.is(":visible")){t(this).trigger("open",["focus"]);var e=t(this).val();o&&e.indexOf(",")>=0&&(e=e.split(",")[0]);var i=l.find("li").filter(function(){return t(this).text().toLowerCase()===e.toLowerCase()})[0];g(l,i,!0),t(window).off("click.select").on("click.select",function(){o&&(d||m.trigger("close")),t(window).off("click.select")})}},click:function(t){t.stopPropagation()}}),m.on("blur",function(){o||(t(this).trigger("close"),t(window).off("click.select")),l.find("li.selected").removeClass("selected")}),l.hover(function(){d=!0},function(){d=!1}),o&&n.find("option:selected:not(:disabled)").each(function(){var t=this.index;i(u,t,n),l.find("li:not(.optgroup)").eq(t).find(":checkbox").prop("checked",!0)});var g=function(e,i,n){if(i){e.find("li.selected").removeClass("selected");var a=t(i);a.addClass("selected"),o&&!n||l.scrollTo(a)}},y=[];m.on("keydown",function(e){if(9!=e.which)if(40!=e.which||l.is(":visible")){if(13!=e.which||l.is(":visible")){e.preventDefault();var i=String.fromCharCode(e.which).toLowerCase(),n=[9,13,27,38,40];if(i&&-1===n.indexOf(e.which)){y.push(i);var a=y.join(""),r=l.find("li").filter(function(){return 0===t(this).text().toLowerCase().indexOf(a)})[0];r&&g(l,r)}if(13==e.which){var s=l.find("li.selected:not(.disabled)")[0];s&&(t(s).trigger("click"),o||m.trigger("close"))}40==e.which&&(r=l.find("li.selected").length?l.find("li.selected").next("li:not(.disabled)")[0]:l.find("li:not(.disabled)")[0],g(l,r)),27==e.which&&m.trigger("close"),38==e.which&&(r=l.find("li.selected").prev("li:not(.disabled)")[0])&&g(l,r),setTimeout(function(){y=[]},1e3)}}else m.trigger("open");else m.trigger("close")})}})}}(jQuery),function(t){var e={init:function(e){var i={indicators:!0,height:400,transition:500,interval:6e3};return e=t.extend(i,e),this.each(function(){function i(t,e){t.hasClass("center-align")?t.velocity({opacity:0,translateY:-100},{duration:e,queue:!1}):t.hasClass("right-align")?t.velocity({opacity:0,translateX:100},{duration:e,queue:!1}):t.hasClass("left-align")&&t.velocity({opacity:0,translateX:-100},{duration:e,queue:!1})}function n(t){t>=c.length?t=0:t<0&&(t=c.length-1),(u=l.find(".active").index())!=t&&(o=c.eq(u),$caption=o.find(".caption"),o.removeClass("active"),o.velocity({opacity:0},{duration:e.transition,queue:!1,easing:"easeOutQuad",complete:function(){c.not(".active").velocity({opacity:0,translateX:0,translateY:0},{duration:0,queue:!1})}}),i($caption,e.transition),e.indicators&&a.eq(u).removeClass("active"),c.eq(t).velocity({opacity:1},{duration:e.transition,queue:!1,easing:"easeOutQuad"}),c.eq(t).find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:e.transition,delay:e.transition,queue:!1,easing:"easeOutQuad"}),c.eq(t).addClass("active"),e.indicators&&a.eq(t).addClass("active"))}var o,a,r,s=t(this),l=s.find("ul.slides").first(),c=l.find("> li"),u=l.find(".active").index();-1!=u&&(o=c.eq(u)),s.hasClass("fullscreen")||(e.indicators?s.height(e.height+40):s.height(e.height),l.height(e.height)),c.find(".caption").each(function(){i(t(this),0)}),c.find("img").each(function(){var e="data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";t(this).attr("src")!==e&&(t(this).css("background-image",'url("'+t(this).attr("src")+'")'),t(this).attr("src",e))}),e.indicators&&(a=t('
                '),c.each(function(i){var o=t('
              • ');o.click(function(){n(l.parent().find(t(this)).index()),clearInterval(r),r=setInterval(function(){u=l.find(".active").index(),c.length==u+1?u=0:u+=1,n(u)},e.transition+e.interval)}),a.append(o)}),s.append(a),a=s.find("ul.indicators").find("li.indicator-item")),o?o.show():(c.first().addClass("active").velocity({opacity:1},{duration:e.transition,queue:!1,easing:"easeOutQuad"}),u=0,o=c.eq(u),e.indicators&&a.eq(u).addClass("active")),o.find("img").each(function(){o.find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:e.transition,queue:!1,easing:"easeOutQuad"})}),r=setInterval(function(){n((u=l.find(".active").index())+1)},e.transition+e.interval);var d=!1,p=!1,h=!1;s.hammer({prevent_default:!1}).on("pan",function(t){if("touch"===t.gesture.pointerType){clearInterval(r);var e=t.gesture.direction,i=t.gesture.deltaX,n=t.gesture.velocityX,o=t.gesture.velocityY;$curr_slide=l.find(".active"),Math.abs(n)>Math.abs(o)&&$curr_slide.velocity({translateX:i},{duration:50,queue:!1,easing:"easeOutQuad"}),4===e&&(i>s.innerWidth()/2||n<-.65)?h=!0:2===e&&(i<-1*s.innerWidth()/2||n>.65)&&(p=!0);var a;p&&(0===(a=$curr_slide.next()).length&&(a=c.first()),a.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"})),h&&(0===(a=$curr_slide.prev()).length&&(a=c.last()),a.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"}))}}).on("panend",function(t){"touch"===t.gesture.pointerType&&($curr_slide=l.find(".active"),d=!1,curr_index=l.find(".active").index(),!h&&!p||c.length<=1?$curr_slide.velocity({translateX:0},{duration:300,queue:!1,easing:"easeOutQuad"}):p?(n(curr_index+1),$curr_slide.velocity({translateX:-1*s.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):h&&(n(curr_index-1),$curr_slide.velocity({translateX:s.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})),p=!1,h=!1,clearInterval(r),r=setInterval(function(){u=l.find(".active").index(),c.length==u+1?u=0:u+=1,n(u)},e.transition+e.interval))}),s.on("sliderPause",function(){clearInterval(r)}),s.on("sliderStart",function(){clearInterval(r),r=setInterval(function(){u=l.find(".active").index(),c.length==u+1?u=0:u+=1,n(u)},e.transition+e.interval)}),s.on("sliderNext",function(){n((u=l.find(".active").index())+1)}),s.on("sliderPrev",function(){n((u=l.find(".active").index())-1)})})},pause:function(){t(this).trigger("sliderPause")},start:function(){t(this).trigger("sliderStart")},next:function(){t(this).trigger("sliderNext")},prev:function(){t(this).trigger("sliderPrev")}};t.fn.slider=function(i){return e[i]?e[i].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof i&&i?void t.error("Method "+i+" does not exist on jQuery.tooltip"):e.init.apply(this,arguments)}}(jQuery),function(t){t(document).ready(function(){t(document).on("click.card",".card",function(e){if(t(this).find("> .card-reveal").length){var i=t(e.target).closest(".card");void 0===i.data("initialOverflow")&&i.data("initialOverflow",void 0===i.css("overflow")?"":i.css("overflow")),t(e.target).is(t(".card-reveal .card-title"))||t(e.target).is(t(".card-reveal .card-title i"))?t(this).find(".card-reveal").velocity({translateY:0},{duration:225,queue:!1,easing:"easeInOutQuad",complete:function(){t(this).css({display:"none"}),i.css("overflow",i.data("initialOverflow"))}}):(t(e.target).is(t(".card .activator"))||t(e.target).is(t(".card .activator i")))&&(i.css("overflow","hidden"),t(this).find(".card-reveal").css({display:"block"}).velocity("stop",!1).velocity({translateY:"-100%"},{duration:300,queue:!1,easing:"easeInOutQuad"}))}})})}(jQuery),function(t){var e={data:[],placeholder:"",secondaryPlaceholder:"",autocompleteOptions:{}};t(document).ready(function(){t(document).on("click",".chip .close",function(e){t(this).closest(".chips").attr("data-initialized")||t(this).closest(".chip").remove()})}),t.fn.material_chip=function(i){var n=this;if(this.$el=t(this),this.$document=t(document),this.SELS={CHIPS:".chips",CHIP:".chip",INPUT:"input",DELETE:".material-icons",SELECTED_CHIP:".selected"},"data"===i)return this.$el.data("chips");var o=t.extend({},e,i);n.hasAutocomplete=!t.isEmptyObject(o.autocompleteOptions.data),this.init=function(){var e=0;n.$el.each(function(){var i=t(this),a=Materialize.guid();n.chipId=a,o.data&&o.data instanceof Array||(o.data=[]),i.data("chips",o.data),i.attr("data-index",e),i.attr("data-initialized",!0),i.hasClass(n.SELS.CHIPS)||i.addClass("chips"),n.chips(i,a),e++})},this.handleEvents=function(){var e=n.SELS;n.$document.off("click.chips-focus",e.CHIPS).on("click.chips-focus",e.CHIPS,function(i){t(i.target).find(e.INPUT).focus()}),n.$document.off("click.chips-select",e.CHIP).on("click.chips-select",e.CHIP,function(i){var o=t(i.target);if(o.length){var a=o.hasClass("selected"),r=o.closest(e.CHIPS);t(e.CHIP).removeClass("selected"),a||n.selectChip(o.index(),r)}}),n.$document.off("keydown.chips").on("keydown.chips",function(i){if(!t(i.target).is("input, textarea")){var o,a=n.$document.find(e.CHIP+e.SELECTED_CHIP),r=a.closest(e.CHIPS),s=a.siblings(e.CHIP).length;if(a.length)if(8===i.which||46===i.which){i.preventDefault(),o=a.index(),n.deleteChip(o,r);var l=null;o+1s)return void r.find("input").focus();n.selectChip(o,r)}}}),n.$document.off("focusin.chips",e.CHIPS+" "+e.INPUT).on("focusin.chips",e.CHIPS+" "+e.INPUT,function(i){var n=t(i.target).closest(e.CHIPS);n.addClass("focus"),n.siblings("label, .prefix").addClass("active"),t(e.CHIP).removeClass("selected")}),n.$document.off("focusout.chips",e.CHIPS+" "+e.INPUT).on("focusout.chips",e.CHIPS+" "+e.INPUT,function(i){var n=t(i.target).closest(e.CHIPS);n.removeClass("focus"),void 0!==n.data("chips")&&n.data("chips").length||n.siblings("label").removeClass("active"),n.siblings(".prefix").removeClass("active")}),n.$document.off("keydown.chips-add",e.CHIPS+" "+e.INPUT).on("keydown.chips-add",e.CHIPS+" "+e.INPUT,function(i){var o=t(i.target),a=o.closest(e.CHIPS),r=a.children(e.CHIP).length;if(13===i.which){if(n.hasAutocomplete&&a.find(".autocomplete-content.dropdown-content").length&&a.find(".autocomplete-content.dropdown-content").children().length)return;return i.preventDefault(),n.addChip({tag:o.val()},a),void o.val("")}if((8===i.keyCode||37===i.keyCode)&&""===o.val()&&r)return i.preventDefault(),n.selectChip(r-1,a),void o.blur()}),n.$document.off("click.chips-delete",e.CHIPS+" "+e.DELETE).on("click.chips-delete",e.CHIPS+" "+e.DELETE,function(i){var o=t(i.target),a=o.closest(e.CHIPS),r=o.closest(e.CHIP);i.stopPropagation(),n.deleteChip(r.index(),a),a.find("input").focus()})},this.chips=function(e,i){e.empty(),e.data("chips").forEach(function(t){e.append(n.renderChip(t))}),e.append(t('')),n.setPlaceholder(e);var a=e.next("label");a.length&&(a.attr("for",i),void 0!==e.data("chips")&&e.data("chips").length&&a.addClass("active"));var r=t("#"+i);n.hasAutocomplete&&(o.autocompleteOptions.onAutocomplete=function(t){n.addChip({tag:t},e),r.val(""),r.focus()},r.autocomplete(o.autocompleteOptions))},this.renderChip=function(e){if(e.tag){var i=t('
                ');return i.text(e.tag),e.image&&i.prepend(t("").attr("src",e.image)),i.append(t('close')),i}},this.setPlaceholder=function(t){void 0!==t.data("chips")&&!t.data("chips").length&&o.placeholder?t.find("input").prop("placeholder",o.placeholder):(void 0===t.data("chips")||t.data("chips").length)&&o.secondaryPlaceholder&&t.find("input").prop("placeholder",o.secondaryPlaceholder)},this.isValid=function(t,e){for(var i=t.data("chips"),n=!1,o=0;o=o&&!t(this).hasClass("pinned")&&(i(t(this)),t(this).css("top",e.offset),t(this).addClass("pinned")),oe.bottom&&!t(this).hasClass("pin-bottom")&&(i(t(this)),t(this).addClass("pin-bottom"),t(this).css("top",e.bottom-r))})}var o=Materialize.guid(),a=t(this),r=t(this).offset().top;t(this).data("pushpin-id",o),n(a,t(window).scrollTop()),t(window).on("scroll."+o,function(){var i=t(window).scrollTop()+e.offset;n(a,i)})}))}}(jQuery),function(t){t(document).ready(function(){t.fn.reverse=[].reverse,t(document).on("mouseenter.fixedActionBtn",".fixed-action-btn:not(.click-to-toggle):not(.toolbar)",function(i){var n=t(this);e(n)}),t(document).on("mouseleave.fixedActionBtn",".fixed-action-btn:not(.click-to-toggle):not(.toolbar)",function(e){var n=t(this);i(n)}),t(document).on("click.fabClickToggle",".fixed-action-btn.click-to-toggle > a",function(n){var o=t(this).parent();o.hasClass("active")?i(o):e(o)}),t(document).on("click.fabToolbar",".fixed-action-btn.toolbar > a",function(e){var i=t(this).parent();n(i)})}),t.fn.extend({openFAB:function(){e(t(this))},closeFAB:function(){i(t(this))},openToolbar:function(){n(t(this))},closeToolbar:function(){o(t(this))}});var e=function(e){var i=e;if(!1===i.hasClass("active")){var n,o;!0===i.hasClass("horizontal")?o=40:n=40,i.addClass("active"),i.find("ul .btn-floating").velocity({scaleY:".4",scaleX:".4",translateY:n+"px",translateX:o+"px"},{duration:0});var a=0;i.find("ul .btn-floating").reverse().each(function(){t(this).velocity({opacity:"1",scaleX:"1",scaleY:"1",translateY:"0",translateX:"0"},{duration:80,delay:a}),a+=40})}},i=function(t){var e,i,n=t;!0===n.hasClass("horizontal")?i=40:e=40,n.removeClass("active");n.find("ul .btn-floating").velocity("stop",!0),n.find("ul .btn-floating").velocity({opacity:"0",scaleX:".4",scaleY:".4",translateY:e+"px",translateX:i+"px"},{duration:80})},n=function(e){if("true"!==e.attr("data-open")){var i,n,a,r=window.innerWidth,s=window.innerHeight,l=e[0].getBoundingClientRect(),c=e.find("> a").first(),u=e.find("> ul").first(),d=t('
                '),p=c.css("background-color");c.append(d),i=l.left-r/2+l.width/2,n=s-l.bottom,a=r/d.width(),e.attr("data-origin-bottom",l.bottom),e.attr("data-origin-left",l.left),e.attr("data-origin-width",l.width),e.addClass("active"),e.attr("data-open",!0),e.css({"text-align":"center",width:"100%",bottom:0,left:0,transform:"translateX("+i+"px)",transition:"none"}),c.css({transform:"translateY("+-n+"px)",transition:"none"}),d.css({"background-color":p}),setTimeout(function(){e.css({transform:"",transition:"transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s"}),c.css({overflow:"visible",transform:"",transition:"transform .2s"}),setTimeout(function(){e.css({overflow:"hidden","background-color":p}),d.css({transform:"scale("+a+")",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"}),u.find("> li > a").css({opacity:1}),t(window).on("scroll.fabToolbarClose",function(){o(e),t(window).off("scroll.fabToolbarClose"),t(document).off("click.fabToolbarClose")}),t(document).on("click.fabToolbarClose",function(i){t(i.target).closest(u).length||(o(e),t(window).off("scroll.fabToolbarClose"),t(document).off("click.fabToolbarClose"))})},100)},0)}},o=function(t){if("true"===t.attr("data-open")){var e,i,n=window.innerWidth,o=window.innerHeight,a=t.attr("data-origin-width"),r=t.attr("data-origin-bottom"),s=t.attr("data-origin-left"),l=t.find("> .btn-floating").first(),c=t.find("> ul").first(),u=t.find(".fab-backdrop"),d=l.css("background-color");e=s-n/2+a/2,i=o-r,n/u.width(),t.removeClass("active"),t.attr("data-open",!1),t.css({"background-color":"transparent",transition:"none"}),l.css({transition:"none"}),u.css({transform:"scale(0)","background-color":d}),c.find("> li > a").css({opacity:""}),setTimeout(function(){u.remove(),t.css({"text-align":"",width:"",bottom:"",left:"",overflow:"","background-color":"",transform:"translate3d("+-e+"px,0,0)"}),l.css({overflow:"",transform:"translate3d(0,"+i+"px,0)"}),setTimeout(function(){t.css({transform:"translate3d(0,0,0)",transition:"transform .2s"}),l.css({transform:"translate3d(0,0,0)",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"})},20)},200)}}}(jQuery),function(t){Materialize.fadeInImage=function(e){var i;if("string"==typeof e)i=t(e);else{if("object"!=typeof e)return;i=e}i.css({opacity:0}),t(i).velocity({opacity:1},{duration:650,queue:!1,easing:"easeOutSine"}),t(i).velocity({opacity:1},{duration:1300,queue:!1,easing:"swing",step:function(e,i){i.start=100;var n=e/100,o=150-(100-e)/1.75;o<100&&(o=100),e>=0&&t(this).css({"-webkit-filter":"grayscale("+n+")brightness("+o+"%)",filter:"grayscale("+n+")brightness("+o+"%)"})}})},Materialize.showStaggeredList=function(e){var i;if("string"==typeof e)i=t(e);else{if("object"!=typeof e)return;i=e}var n=0;i.find("li").velocity({translateX:"-100px"},{duration:0}),i.find("li").each(function(){t(this).velocity({opacity:"1",translateX:"0"},{duration:800,delay:n,easing:[60,10]}),n+=120})},t(document).ready(function(){var e=!1,i=!1;t(".dismissable").each(function(){t(this).hammer({prevent_default:!1}).on("pan",function(n){if("touch"===n.gesture.pointerType){var o=t(this),a=n.gesture.direction,r=n.gesture.deltaX,s=n.gesture.velocityX;o.velocity({translateX:r},{duration:50,queue:!1,easing:"easeOutQuad"}),4===a&&(r>o.innerWidth()/2||s<-.75)&&(e=!0),2===a&&(r<-1*o.innerWidth()/2||s>.75)&&(i=!0)}}).on("panend",function(n){if(Math.abs(n.gesture.deltaX)s.getBoundingClientRect().top+window.pageYOffset+a&&!0!==n.done&&("function"==typeof r?r.call(this,s):"string"==typeof r&&new Function(r)(s),n.done=!0)}},n=Materialize.throttle(function(){i()},t.throttle||100);e||(window.addEventListener("scroll",n),window.addEventListener("resize",n),e=!0),setTimeout(n,0)}}(jQuery),function(t){Materialize.Picker=t(jQuery)}(function(t){function e(a,s,u,d){function p(){return e._.node("div",e._.node("div",e._.node("div",e._.node("div",T.component.nodes(b.open),k.box),k.wrap),k.frame),k.holder)}function h(){x.data(s,T).addClass(k.input).attr("tabindex",-1).val(x.data("value")?T.get("select",w.format):a.value),w.editable||x.on("focus."+b.id+" click."+b.id,function(t){t.preventDefault(),T.$root.eq(0).focus()}).on("keydown."+b.id,m),o(a,{haspopup:!0,expanded:!1,readonly:!1,owns:a.id+"_root"})}function f(){T.$root.on({keydown:m,focusin:function(t){T.$root.removeClass(k.focused),t.stopPropagation()},"mousedown click":function(e){var i=e.target;i!=T.$root.children()[0]&&(e.stopPropagation(),"mousedown"!=e.type||t(i).is("input, select, textarea, button, option")||(e.preventDefault(),T.$root.eq(0).focus()))}}).on({focus:function(){x.addClass(k.target)},blur:function(){x.removeClass(k.target)}}).on("focus.toOpen",g).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var e=t(this),i=e.data(),n=e.hasClass(k.navDisabled)||e.hasClass(k.disabled),o=r();o=o&&(o.type||o.href)&&o,(n||o&&!t.contains(T.$root[0],o))&&T.$root.eq(0).focus(),!n&&i.nav?T.set("highlight",T.component.item.highlight,{nav:i.nav}):!n&&"pick"in i?(T.set("select",i.pick),w.closeOnSelect&&T.close(!0)):i.clear?(T.clear(),w.closeOnSelect&&T.close(!0)):i.close&&T.close(!0)}),o(T.$root[0],"hidden",!0)}function v(){var e;!0===w.hiddenName?(e=a.name,a.name=""):e=(e=["string"==typeof w.hiddenPrefix?w.hiddenPrefix:"","string"==typeof w.hiddenSuffix?w.hiddenSuffix:"_submit"])[0]+a.name+e[1],T._hidden=t('")[0],x.on("change."+b.id,function(){T._hidden.value=a.value?T.get("select",w.formatSubmit):""}),w.container?t(w.container).append(T._hidden):x.before(T._hidden)}function m(t){var e=t.keyCode,i=/^(8|46)$/.test(e);if(27==e)return T.close(),!1;(32==e||i||!b.open&&T.component.key[e])&&(t.preventDefault(),t.stopPropagation(),i?T.clear().close():T.open())}function g(t){t.stopPropagation(),"focus"==t.type&&T.$root.addClass(k.focused),T.open()}if(!a)return e;var y=!1,b={id:a.id||"P"+Math.abs(~~(Math.random()*new Date))},w=u?t.extend(!0,{},u.defaults,d):d||{},k=t.extend({},e.klasses(),w.klass),x=t(a),C=function(){return this.start()},T=C.prototype={constructor:C,$node:x,start:function(){return b&&b.start?T:(b.methods={},b.start=!0,b.open=!1,b.type=a.type,a.autofocus=a==r(),a.readOnly=!w.editable,a.id=a.id||b.id,"text"!=a.type&&(a.type="text"),T.component=new u(T,w),T.$root=t(e._.node("div",p(),k.picker,'id="'+a.id+'_root" tabindex="0"')),f(),w.formatSubmit&&v(),h(),w.container?t(w.container).append(T.$root):x.before(T.$root),T.on({start:T.component.onStart,render:T.component.onRender,stop:T.component.onStop,open:T.component.onOpen,close:T.component.onClose,set:T.component.onSet}).on({start:w.onStart,render:w.onRender,stop:w.onStop,open:w.onOpen,close:w.onClose,set:w.onSet}),y=i(T.$root.children()[0]),a.autofocus&&T.open(),T.trigger("start").trigger("render"))},render:function(t){return t?T.$root.html(p()):T.$root.find("."+k.box).html(T.component.nodes(b.open)),T.trigger("render")},stop:function(){return b.start?(T.close(),T._hidden&&T._hidden.parentNode.removeChild(T._hidden),T.$root.remove(),x.removeClass(k.input).removeData(s),setTimeout(function(){x.off("."+b.id)},0),a.type=b.type,a.readOnly=!1,T.trigger("stop"),b.methods={},b.start=!1,T):T},open:function(i){return b.open?T:(x.addClass(k.active),o(a,"expanded",!0),setTimeout(function(){T.$root.addClass(k.opened),o(T.$root[0],"hidden",!1)},0),!1!==i&&(b.open=!0,y&&c.css("overflow","hidden").css("padding-right","+="+n()),T.$root.eq(0).focus(),l.on("click."+b.id+" focusin."+b.id,function(t){var e=t.target;e!=a&&e!=document&&3!=t.which&&T.close(e===T.$root.children()[0])}).on("keydown."+b.id,function(i){var n=i.keyCode,o=T.component.key[n],a=i.target;27==n?T.close(!0):a!=T.$root[0]||!o&&13!=n?t.contains(T.$root[0],a)&&13==n&&(i.preventDefault(),a.click()):(i.preventDefault(),o?e._.trigger(T.component.key.go,T,[e._.trigger(o)]):T.$root.find("."+k.highlighted).hasClass(k.disabled)||(T.set("select",T.component.item.highlight),w.closeOnSelect&&T.close(!0)))})),T.trigger("open"))},close:function(t){return t&&(T.$root.off("focus.toOpen").eq(0).focus(),setTimeout(function(){T.$root.on("focus.toOpen",g)},0)),x.removeClass(k.active),o(a,"expanded",!1),setTimeout(function(){T.$root.removeClass(k.opened+" "+k.focused),o(T.$root[0],"hidden",!0)},0),b.open?(b.open=!1,y&&c.css("overflow","").css("padding-right","-="+n()),l.off("."+b.id),T.trigger("close")):T},clear:function(t){return T.set("clear",null,t)},set:function(e,i,n){var o,a,r=t.isPlainObject(e),s=r?e:{};if(n=r&&t.isPlainObject(i)?i:n||{},e){r||(s[e]=i);for(o in s)a=s[o],o in T.component.item&&(void 0===a&&(a=null),T.component.set(o,a,n)),"select"!=o&&"clear"!=o||x.val("clear"==o?"":T.get(o,w.format)).trigger("change");T.render()}return n.muted?T:T.trigger("set",s)},get:function(t,i){if(t=t||"value",null!=b[t])return b[t];if("valueSubmit"==t){if(T._hidden)return T._hidden.value;t="value"}if("value"==t)return a.value;if(t in T.component.item){if("string"==typeof i){var n=T.component.get(t);return n?e._.trigger(T.component.formats.toString,T.component,[i,n]):""}return T.component.get(t)}},on:function(e,i,n){var o,a,r=t.isPlainObject(e),s=r?e:{};if(e){r||(s[e]=i);for(o in s)a=s[o],n&&(o="_"+o),b.methods[o]=b.methods[o]||[],b.methods[o].push(a)}return T},off:function(){var t,e,i=arguments;for(t=0,namesCount=i.length;t').appendTo("body"),i=e[0].offsetWidth;e.css("overflow","scroll");var n=t('
                ').appendTo(e)[0].offsetWidth;return e.remove(),i-n}function o(e,i,n){if(t.isPlainObject(i))for(var o in i)a(e,o,i[o]);else a(e,i,n)}function a(t,e,i){t.setAttribute(("role"==e?"":"aria-")+e,i)}function r(){try{return document.activeElement}catch(t){}}var s=t(window),l=t(document),c=t(document.documentElement);return e.klasses=function(t){return t=t||"picker",{picker:t,opened:t+"--opened",focused:t+"--focused",input:t+"__input",active:t+"__input--active",target:t+"__input--target",holder:t+"__holder",frame:t+"__frame",wrap:t+"__wrap",box:t+"__box"}},e._={group:function(t){for(var i,n="",o=e._.trigger(t.min,t);o<=e._.trigger(t.max,t,[o]);o+=t.i)i=e._.trigger(t.item,t,[o]),n+=e._.node(t.node,i[0],i[1],i[2]);return n},node:function(e,i,n,o){return i?(i=t.isArray(i)?i.join(""):i,n=n?' class="'+n+'"':"",o=o?" "+o:"","<"+e+n+o+">"+i+""):""},lead:function(t){return(t<10?"0":"")+t},trigger:function(t,e,i){return"function"==typeof t?t.apply(e,i||[]):t},digits:function(t){return/\d/.test(t[1])?2:1},isDate:function(t){return{}.toString.call(t).indexOf("Date")>-1&&this.isInteger(t.getDate())},isInteger:function(t){return{}.toString.call(t).indexOf("Number")>-1&&t%1==0},ariaAttr:function(e,i){t.isPlainObject(e)||(e={attribute:i}),i="";for(var n in e){var o=("role"==n?"":"aria-")+n;i+=null==e[n]?"":o+'="'+e[n]+'"'}return i}},e.extend=function(i,n){t.fn[i]=function(o,a){var r=this.data(i);return"picker"==o?r:r&&"string"==typeof o?e._.trigger(r[o],r,[a]):this.each(function(){t(this).data(i)||new e(this,i,n,o)})},t.fn[i].defaults=n.defaults},e}),function(t){t(Materialize.Picker,jQuery)}(function(t,e){function i(t,e){var i=this,n=t.$node[0],o=n.value,a=t.$node.data("value"),r=a||o,s=a?e.formatSubmit:e.format,l=function(){return n.currentStyle?"rtl"==n.currentStyle.direction:"rtl"==getComputedStyle(t.$root[0]).direction};i.settings=e,i.$node=t.$node,i.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},i.item={},i.item.clear=null,i.item.disable=(e.disable||[]).slice(0),i.item.enable=-function(t){return!0===t[0]?t.shift():-1}(i.item.disable),i.set("min",e.min).set("max",e.max).set("now"),r?i.set("select",r,{format:s}):i.set("select",null).set("highlight",i.item.now),i.key={40:7,38:-7,39:function(){return l()?-1:1},37:function(){return l()?1:-1},go:function(t){var e=i.item.highlight,n=new Date(e.year,e.month,e.date+t);i.set("highlight",n,{interval:t}),this.render()}},t.on("render",function(){t.$root.find("."+e.klass.selectMonth).on("change",function(){var i=this.value;i&&(t.set("highlight",[t.get("view").year,i,t.get("highlight").date]),t.$root.find("."+e.klass.selectMonth).trigger("focus"))}),t.$root.find("."+e.klass.selectYear).on("change",function(){var i=this.value;i&&(t.set("highlight",[i,t.get("view").month,t.get("highlight").date]),t.$root.find("."+e.klass.selectYear).trigger("focus"))})},1).on("open",function(){var n="";i.disabled(i.get("now"))&&(n=":not(."+e.klass.buttonToday+")"),t.$root.find("button"+n+", select").attr("disabled",!1)},1).on("close",function(){t.$root.find("button, select").attr("disabled",!0)},1)}var n=t._;i.prototype.set=function(t,e,i){var n=this,o=n.item;return null===e?("clear"==t&&(t="select"),o[t]=e,n):(o["enable"==t?"disable":"flip"==t?"enable":t]=n.queue[t].split(" ").map(function(o){return e=n[o](t,e,i)}).pop(),"select"==t?n.set("highlight",o.select,i):"highlight"==t?n.set("view",o.highlight,i):t.match(/^(flip|min|max|disable|enable)$/)&&(o.select&&n.disabled(o.select)&&n.set("select",o.select,i),o.highlight&&n.disabled(o.highlight)&&n.set("highlight",o.highlight,i)),n)},i.prototype.get=function(t){return this.item[t]},i.prototype.create=function(t,i,o){var a,r=this;return i=void 0===i?t:i,i==-1/0||i==1/0?a=i:e.isPlainObject(i)&&n.isInteger(i.pick)?i=i.obj:e.isArray(i)?(i=new Date(i[0],i[1],i[2]),i=n.isDate(i)?i:r.create().obj):i=n.isInteger(i)||n.isDate(i)?r.normalize(new Date(i),o):r.now(t,i,o),{year:a||i.getFullYear(),month:a||i.getMonth(),date:a||i.getDate(),day:a||i.getDay(),obj:a||i,pick:a||i.getTime()}},i.prototype.createRange=function(t,i){var o=this,a=function(t){return!0===t||e.isArray(t)||n.isDate(t)?o.create(t):t};return n.isInteger(t)||(t=a(t)),n.isInteger(i)||(i=a(i)),n.isInteger(t)&&e.isPlainObject(i)?t=[i.year,i.month,i.date+t]:n.isInteger(i)&&e.isPlainObject(t)&&(i=[t.year,t.month,t.date+i]),{from:a(t),to:a(i)}},i.prototype.withinRange=function(t,e){return t=this.createRange(t.from,t.to),e.pick>=t.from.pick&&e.pick<=t.to.pick},i.prototype.overlapRanges=function(t,e){var i=this;return t=i.createRange(t.from,t.to),e=i.createRange(e.from,e.to),i.withinRange(t,e.from)||i.withinRange(t,e.to)||i.withinRange(e,t.from)||i.withinRange(e,t.to)},i.prototype.now=function(t,e,i){return e=new Date,i&&i.rel&&e.setDate(e.getDate()+i.rel),this.normalize(e,i)},i.prototype.navigate=function(t,i,n){var o,a,r,s,l=e.isArray(i),c=e.isPlainObject(i),u=this.item.view;if(l||c){for(c?(a=i.year,r=i.month,s=i.date):(a=+i[0],r=+i[1],s=+i[2]),n&&n.nav&&u&&u.month!==r&&(a=u.year,r=u.month),a=(o=new Date(a,r+(n&&n.nav?n.nav:0),1)).getFullYear(),r=o.getMonth();new Date(a,r,s).getMonth()!==r;)s-=1;i=[a,r,s]}return i},i.prototype.normalize=function(t){return t.setHours(0,0,0,0),t},i.prototype.measure=function(t,e){var i=this;return e?"string"==typeof e?e=i.parse(t,e):n.isInteger(e)&&(e=i.now(t,e,{rel:e})):e="min"==t?-1/0:1/0,e},i.prototype.viewset=function(t,e){return this.create([e.year,e.month,1])},i.prototype.validate=function(t,i,o){var a,r,s,l,c=this,u=i,d=o&&o.interval?o.interval:1,p=-1===c.item.enable,h=c.item.min,f=c.item.max,v=p&&c.item.disable.filter(function(t){if(e.isArray(t)){var o=c.create(t).pick;oi.pick&&(r=!0)}return n.isInteger(t)}).length;if((!o||!o.nav)&&(!p&&c.disabled(i)||p&&c.disabled(i)&&(v||a||r)||!p&&(i.pick<=h.pick||i.pick>=f.pick)))for(p&&!v&&(!r&&d>0||!a&&d<0)&&(d*=-1);c.disabled(i)&&(Math.abs(d)>1&&(i.monthu.month)&&(i=u,d=d>0?1:-1),i.pick<=h.pick?(s=!0,d=1,i=c.create([h.year,h.month,h.date+(i.pick===h.pick?0:-1)])):i.pick>=f.pick&&(l=!0,d=-1,i=c.create([f.year,f.month,f.date+(i.pick===f.pick?0:1)])),!s||!l);)i=c.create([i.year,i.month,i.date+d]);return i},i.prototype.disabled=function(t){var i=this,o=i.item.disable.filter(function(o){return n.isInteger(o)?t.day===(i.settings.firstDay?o:o-1)%7:e.isArray(o)||n.isDate(o)?t.pick===i.create(o).pick:e.isPlainObject(o)?i.withinRange(o,t):void 0});return o=o.length&&!o.filter(function(t){return e.isArray(t)&&"inverted"==t[3]||e.isPlainObject(t)&&t.inverted}).length,-1===i.item.enable?!o:o||t.picki.item.max.pick},i.prototype.parse=function(t,e,i){var o=this,a={};return e&&"string"==typeof e?(i&&i.format||((i=i||{}).format=o.settings.format),o.formats.toArray(i.format).map(function(t){var i=o.formats[t],r=i?n.trigger(i,o,[e,a]):t.replace(/^!/,"").length;i&&(a[t]=e.substr(0,r)),e=e.substr(r)}),[a.yyyy||a.yy,+(a.mm||a.m)-1,a.dd||a.d]):e},i.prototype.formats=function(){function t(t,e,i){var n=t.match(/\w+/)[0];return i.mm||i.m||(i.m=e.indexOf(n)+1),n.length}function e(t){return t.match(/\w+/)[0].length}return{d:function(t,e){return t?n.digits(t):e.date},dd:function(t,e){return t?2:n.lead(e.date)},ddd:function(t,i){return t?e(t):this.settings.weekdaysShort[i.day]},dddd:function(t,i){return t?e(t):this.settings.weekdaysFull[i.day]},m:function(t,e){return t?n.digits(t):e.month+1},mm:function(t,e){return t?2:n.lead(e.month+1)},mmm:function(e,i){var n=this.settings.monthsShort;return e?t(e,n,i):n[i.month]},mmmm:function(e,i){var n=this.settings.monthsFull;return e?t(e,n,i):n[i.month]},yy:function(t,e){return t?2:(""+e.year).slice(2)},yyyy:function(t,e){return t?4:e.year},toArray:function(t){return t.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(t,e){var i=this;return i.formats.toArray(t).map(function(t){return n.trigger(i.formats[t],i,[0,e])||t.replace(/^!/,"")}).join("")}}}(),i.prototype.isDateExact=function(t,i){var o=this;return n.isInteger(t)&&n.isInteger(i)||"boolean"==typeof t&&"boolean"==typeof i?t===i:(n.isDate(t)||e.isArray(t))&&(n.isDate(i)||e.isArray(i))?o.create(t).pick===o.create(i).pick:!(!e.isPlainObject(t)||!e.isPlainObject(i))&&(o.isDateExact(t.from,i.from)&&o.isDateExact(t.to,i.to))},i.prototype.isDateOverlap=function(t,i){var o=this,a=o.settings.firstDay?1:0;return n.isInteger(t)&&(n.isDate(i)||e.isArray(i))?(t=t%7+a)===o.create(i).day+1:n.isInteger(i)&&(n.isDate(t)||e.isArray(t))?(i=i%7+a)===o.create(t).day+1:!(!e.isPlainObject(t)||!e.isPlainObject(i))&&o.overlapRanges(t,i)},i.prototype.flipEnable=function(t){var e=this.item;e.enable=t||(-1==e.enable?1:-1)},i.prototype.deactivate=function(t,i){var o=this,a=o.item.disable.slice(0);return"flip"==i?o.flipEnable():!1===i?(o.flipEnable(1),a=[]):!0===i?(o.flipEnable(-1),a=[]):i.map(function(t){for(var i,r=0;r=d.year&&l.month>=d.month||!t&&l.year<=u.year&&l.month<=u.month?" "+i.klass.navDisabled:""),"data-nav="+(t||-1)+" "+n.ariaAttr({role:"button",controls:e.$node[0].id+"_table"})+' title="'+(t?i.labelMonthNext:i.labelMonthPrev)+'"')},f=function(o){var a=i.showMonthsShort?i.monthsShort:i.monthsFull;return"short_months"==o&&(a=i.monthsShort),i.selectMonths&&void 0==o?n.node("select",n.group({min:0,max:11,i:1,node:"option",item:function(t){return[a[t],0,"value="+t+(l.month==t?" selected":"")+(l.year==u.year&&td.month?" disabled":"")]}}),i.klass.selectMonth+" browser-default",(t?"":"disabled")+" "+n.ariaAttr({controls:e.$node[0].id+"_table"})+' title="'+i.labelMonthSelect+'"'):"short_months"==o?null!=r?a[r.month]:a[l.month]:n.node("div",a[l.month],i.klass.month)},v=function(o){var a=l.year,s=!0===i.selectYears?5:~~(i.selectYears/2);if(s){var c=u.year,p=d.year,h=a-s,f=a+s;if(c>h&&(f+=c-h,h=c),pm?m:v,f=p}if(i.selectYears&&void 0==o)return n.node("select",n.group({min:h,max:f,i:1,node:"option",item:function(t){return[t,0,"value="+t+(a==t?" selected":"")]}}),i.klass.selectYear+" browser-default",(t?"":"disabled")+" "+n.ariaAttr({controls:e.$node[0].id+"_table"})+' title="'+i.labelYearSelect+'"')}return"raw"===o&&null!=r?n.node("div",r.year):n.node("div",a,i.klass.year)};return createDayLabel=function(){return null!=r?r.date:a.date},createWeekdayLabel=function(){var t;return t=null!=r?r.day:a.day,i.weekdaysShort[t]},n.node("div",n.node("div",v("raw"),i.klass.year_display)+n.node("span",createWeekdayLabel()+", ","picker__weekday-display")+n.node("span",f("short_months")+" ",i.klass.month_display)+n.node("span",createDayLabel(),i.klass.day_display),i.klass.date_display)+n.node("div",n.node("div",n.node("div",(i.selectYears,f()+v()+h()+h(1)),i.klass.header)+n.node("table",p+n.node("tbody",n.group({min:0,max:5,i:1,node:"tr",item:function(t){var o=i.firstDay&&0===e.create([l.year,l.month,1]).day?-7:0;return[n.group({min:7*t-l.day+o+1,max:function(){return this.min+7-1},i:1,node:"td",item:function(t){t=e.create([l.year,l.month,t+(i.firstDay?1:0)]);var o=r&&r.pick==t.pick,p=s&&s.pick==t.pick,h=c&&e.disabled(t)||t.pickd.pick,f=n.trigger(e.formats.toString,e,[i.format,t]);return[n.node("div",t.date,function(e){return e.push(l.month==t.month?i.klass.infocus:i.klass.outfocus),a.pick==t.pick&&e.push(i.klass.now),o&&e.push(i.klass.selected),p&&e.push(i.klass.highlighted),h&&e.push(i.klass.disabled),e.join(" ")}([i.klass.day]),"data-pick="+t.pick+" "+n.ariaAttr({role:"gridcell",label:f,selected:!(!o||e.$node.val()!==f)||null,activedescendant:!!p||null,disabled:!!h||null})+" "+(h?"":'tabindex="0"')),"",n.ariaAttr({role:"presentation"})]}})]}})),i.klass.table,'id="'+e.$node[0].id+'_table" '+n.ariaAttr({role:"grid",controls:e.$node[0].id,readonly:!0})),i.klass.calendar_container)+n.node("div",n.node("button",i.today,"btn-flat picker__today waves-effect","type=button data-pick="+a.pick+(t&&!e.disabled(a)?"":" disabled")+" "+n.ariaAttr({controls:e.$node[0].id}))+n.node("button",i.clear,"btn-flat picker__clear waves-effect","type=button data-clear=1"+(t?"":" disabled")+" "+n.ariaAttr({controls:e.$node[0].id}))+n.node("button",i.close,"btn-flat picker__close waves-effect","type=button data-close=true "+(t?"":" disabled")+" "+n.ariaAttr({controls:e.$node[0].id})),i.klass.footer),"picker__container__wrapper")},i.defaults=function(t){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysLetter:["S","M","T","W","T","F","S"],today:"Today",clear:"Clear",close:"Ok",closeOnSelect:!1,format:"d mmmm, yyyy",klass:{table:t+"table",header:t+"header",date_display:t+"date-display",day_display:t+"day-display",month_display:t+"month-display",year_display:t+"year-display",calendar_container:t+"calendar-container",navPrev:t+"nav--prev",navNext:t+"nav--next",navDisabled:t+"nav--disabled",month:t+"month",year:t+"year",selectMonth:t+"select--month",selectYear:t+"select--year",weekdays:t+"weekday",day:t+"day",disabled:t+"day--disabled",selected:t+"day--selected",highlighted:t+"day--highlighted",now:t+"day--today",infocus:t+"day--infocus",outfocus:t+"day--outfocus",footer:t+"footer",buttonClear:t+"button--clear",buttonToday:t+"button--today",buttonClose:t+"button--close"}}}(t.klasses().picker+"__"),t.extend("pickadate",i)}),function(t){function e(t){return document.createElementNS(l,t)}function i(t){return(t<10?"0":"")+t}function n(t){var e=++m+"";return t?t+e:e}function o(o,r){function l(t,e){var i=d.offset(),n=/^touch/.test(t.type),o=i.left+g,a=i.top+g,l=(n?t.originalEvent.touches[0]:t).pageX-o,c=(n?t.originalEvent.touches[0]:t).pageY-a,u=Math.sqrt(l*l+c*c),p=!1;if(!e||!(uy+w)){t.preventDefault();var v=setTimeout(function(){E.popover.addClass("clockpicker-moving")},200);E.setHand(l,c,!e,!0),s.off(h).on(h,function(t){t.preventDefault();var e=/^touch/.test(t.type),i=(e?t.originalEvent.touches[0]:t).pageX-o,n=(e?t.originalEvent.touches[0]:t).pageY-a;(p||i!==l||n!==c)&&(p=!0,E.setHand(i,n,!1,!0))}),s.off(f).on(f,function(t){s.off(f),t.preventDefault();var i=/^touch/.test(t.type),n=(i?t.originalEvent.changedTouches[0]:t).pageX-o,u=(i?t.originalEvent.changedTouches[0]:t).pageY-a;(e||p)&&n===l&&u===c&&E.setHand(n,u),"hours"===E.currentView?E.toggleView("minutes",x/2):r.autoclose&&(E.minutesView.addClass("clockpicker-dial-out"),setTimeout(function(){E.done()},x/2)),d.prepend(z),clearTimeout(v),E.popover.removeClass("clockpicker-moving"),s.off(h)})}}var u=t(C),d=u.find(".clockpicker-plate"),v=u.find(".picker__holder"),m=u.find(".clockpicker-hours"),T=u.find(".clockpicker-minutes"),S=u.find(".clockpicker-am-pm-block"),P="INPUT"===o.prop("tagName"),A=P?o:o.find("input"),O=t("label[for="+A.attr("id")+"]"),E=this;this.id=n("cp"),this.element=o,this.holder=v,this.options=r,this.isAppended=!1,this.isShown=!1,this.currentView="hours",this.isInput=P,this.input=A,this.label=O,this.popover=u,this.plate=d,this.hoursView=m,this.minutesView=T,this.amPmBlock=S,this.spanHours=u.find(".clockpicker-span-hours"),this.spanMinutes=u.find(".clockpicker-span-minutes"),this.spanAmPm=u.find(".clockpicker-span-am-pm"),this.footer=u.find(".picker__footer"),this.amOrPm="PM",r.twelvehour&&(r.ampmclickable?(this.spanAmPm.empty(),t('
                AM
                ').on("click",function(){E.spanAmPm.children("#click-am").addClass("text-primary"),E.spanAmPm.children("#click-pm").removeClass("text-primary"),E.amOrPm="AM"}).appendTo(this.spanAmPm),t('
                PM
                ').on("click",function(){E.spanAmPm.children("#click-pm").addClass("text-primary"),E.spanAmPm.children("#click-am").removeClass("text-primary"),E.amOrPm="PM"}).appendTo(this.spanAmPm)):(this.spanAmPm.empty(),t('
                AM
                ').appendTo(this.spanAmPm),t('
                PM
                ').appendTo(this.spanAmPm))),t('").click(t.proxy(this.clear,this)).appendTo(this.footer),t('").click(t.proxy(this.hide,this)).appendTo(this.footer),t('").click(t.proxy(this.done,this)).appendTo(this.footer),this.spanHours.click(t.proxy(this.toggleView,this,"hours")),this.spanMinutes.click(t.proxy(this.toggleView,this,"minutes")),A.on("focus.clockpicker click.clockpicker",t.proxy(this.show,this));var _,M,I,D,q=t('
                ');if(r.twelvehour)for(_=1;_<13;_+=1)M=q.clone(),I=_/6*Math.PI,D=y,M.css({left:g+Math.sin(I)*D-w,top:g-Math.cos(I)*D-w}),M.html(0===_?"00":_),m.append(M),M.on(p,l);else for(_=0;_<24;_+=1)M=q.clone(),I=_/6*Math.PI,D=_>0&&_<13?b:y,M.css({left:g+Math.sin(I)*D-w,top:g-Math.cos(I)*D-w}),M.html(0===_?"00":_),m.append(M),M.on(p,l);for(_=0;_<60;_+=5)M=q.clone(),I=_/30*Math.PI,M.css({left:g+Math.sin(I)*y-w,top:g-Math.cos(I)*y-w}),M.html(i(_)),T.append(M),M.on(p,l);if(d.on(p,function(e){0===t(e.target).closest(".clockpicker-tick").length&&l(e,!0)}),c){var z=u.find(".clockpicker-canvas"),V=e("svg");V.setAttribute("class","clockpicker-svg"),V.setAttribute("width",k),V.setAttribute("height",k);var H=e("g");H.setAttribute("transform","translate("+g+","+g+")");var L=e("circle");L.setAttribute("class","clockpicker-canvas-bearing"),L.setAttribute("cx",0),L.setAttribute("cy",0),L.setAttribute("r",4);var j=e("line");j.setAttribute("x1",0),j.setAttribute("y1",0);var $=e("circle");$.setAttribute("class","clockpicker-canvas-bg"),$.setAttribute("r",w),H.appendChild(j),H.appendChild($),H.appendChild(L),V.appendChild(H),z.append(V),this.hand=j,this.bg=$,this.bearing=L,this.g=H,this.canvas=z}a(this.options.init)}function a(t){t&&"function"==typeof t&&t()}var r=t(window),s=t(document),l="http://www.w3.org/2000/svg",c="SVGAngle"in window&&function(){var t,e=document.createElement("div");return e.innerHTML="",t=(e.firstChild&&e.firstChild.namespaceURI)==l,e.innerHTML="",t}(),u=function(){var t=document.createElement("div").style;return"transition"in t||"WebkitTransition"in t||"MozTransition"in t||"msTransition"in t||"OTransition"in t}(),d="ontouchstart"in window,p="mousedown"+(d?" touchstart":""),h="mousemove.clockpicker"+(d?" touchmove.clockpicker":""),f="mouseup.clockpicker"+(d?" touchend.clockpicker":""),v=navigator.vibrate?"vibrate":navigator.webkitVibrate?"webkitVibrate":null,m=0,g=135,y=105,b=70,w=20,k=2*g,x=u?350:1,C=['
                ','
                ','
                ','
                ','
                ','
                ','
                ','
                ','',":",'',"
                ",'
                ','
                ',"
                ","
                ","
                ",'
                ','
                ','
                ','
                ','
                ','
                ',"
                ",'
                ',"
                ","
                ",'","
                ","
                ","
                ","
                ","
                ","
                "].join("");o.DEFAULTS={default:"",fromnow:0,donetext:"Ok",cleartext:"Clear",canceltext:"Cancel",autoclose:!1,ampmclickable:!0,darktheme:!1,twelvehour:!0,vibrate:!0},o.prototype.toggle=function(){this[this.isShown?"hide":"show"]()},o.prototype.locate=function(){var t=this.element,e=this.popover;t.offset(),t.outerWidth(),t.outerHeight(),this.options.align;e.show()},o.prototype.show=function(e){if(!this.isShown){a(this.options.beforeShow),t(":input").each(function(){t(this).attr("tabindex",-1)});var n=this;this.input.blur(),this.popover.addClass("picker--opened"),this.input.addClass("picker__input picker__input--active"),t(document.body).css("overflow","hidden");var o=((this.input.prop("value")||this.options.default||"")+"").split(":");if(this.options.twelvehour&&void 0!==o[1]&&(o[1].indexOf("AM")>0?this.amOrPm="AM":this.amOrPm="PM",o[1]=o[1].replace("AM","").replace("PM","")),"now"===o[0]){var l=new Date(+new Date+this.options.fromnow);o=[l.getHours(),l.getMinutes()],this.options.twelvehour&&(this.amOrPm=o[0]>=12&&o[0]<24?"PM":"AM")}if(this.hours=+o[0]||0,this.minutes=+o[1]||0,this.spanHours.html(this.hours),this.spanMinutes.html(i(this.minutes)),!this.isAppended){var c=document.querySelector(this.options.container);this.options.container&&c?c.appendChild(this.popover[0]):this.popover.insertAfter(this.input),this.options.twelvehour&&("PM"===this.amOrPm?(this.spanAmPm.children("#click-pm").addClass("text-primary"),this.spanAmPm.children("#click-am").removeClass("text-primary")):(this.spanAmPm.children("#click-am").addClass("text-primary"),this.spanAmPm.children("#click-pm").removeClass("text-primary"))),r.on("resize.clockpicker"+this.id,function(){n.isShown&&n.locate()}),this.isAppended=!0}this.toggleView("hours"),this.locate(),this.isShown=!0,s.on("click.clockpicker."+this.id+" focusin.clockpicker."+this.id,function(e){var i=t(e.target);0===i.closest(n.popover.find(".picker__wrap")).length&&0===i.closest(n.input).length&&n.hide()}),s.on("keyup.clockpicker."+this.id,function(t){27===t.keyCode&&n.hide()}),a(this.options.afterShow)}},o.prototype.hide=function(){a(this.options.beforeHide),this.input.removeClass("picker__input picker__input--active"),this.popover.removeClass("picker--opened"),t(document.body).css("overflow","visible"),this.isShown=!1,t(":input").each(function(e){t(this).attr("tabindex",e+1)}),s.off("click.clockpicker."+this.id+" focusin.clockpicker."+this.id),s.off("keyup.clockpicker."+this.id),this.popover.hide(),a(this.options.afterHide)},o.prototype.toggleView=function(e,i){var n=!1;"minutes"===e&&"visible"===t(this.hoursView).css("visibility")&&(a(this.options.beforeHourSelect),n=!0);var o="hours"===e,r=o?this.hoursView:this.minutesView,s=o?this.minutesView:this.hoursView;this.currentView=e,this.spanHours.toggleClass("text-primary",o),this.spanMinutes.toggleClass("text-primary",!o),s.addClass("clockpicker-dial-out"),r.css("visibility","visible").removeClass("clockpicker-dial-out"),this.resetClock(i),clearTimeout(this.toggleViewTimer),this.toggleViewTimer=setTimeout(function(){s.css("visibility","hidden")},x),n&&a(this.options.afterHourSelect)},o.prototype.resetClock=function(t){var e=this.currentView,i=this[e],n="hours"===e,o=i*(Math.PI/(n?6:30)),a=n&&i>0&&i<13?b:y,r=Math.sin(o)*a,s=-Math.cos(o)*a,l=this;c&&t?(l.canvas.addClass("clockpicker-canvas-out"),setTimeout(function(){l.canvas.removeClass("clockpicker-canvas-out"),l.setHand(r,s)},t)):this.setHand(r,s)},o.prototype.setHand=function(e,n,o,a){var r,s=Math.atan2(e,-n),l="hours"===this.currentView,u=Math.PI/(l||o?6:30),d=Math.sqrt(e*e+n*n),p=this.options,h=l&&d<(y+b)/2,f=h?b:y;if(p.twelvehour&&(f=y),s<0&&(s=2*Math.PI+s),r=Math.round(s/u),s=r*u,p.twelvehour?l?0===r&&(r=12):(o&&(r*=5),60===r&&(r=0)):l?(12===r&&(r=0),r=h?0===r?12:r:0===r?0:r+12):(o&&(r*=5),60===r&&(r=0)),this[this.currentView]!==r&&v&&this.options.vibrate&&(this.vibrateTimer||(navigator[v](10),this.vibrateTimer=setTimeout(t.proxy(function(){this.vibrateTimer=null},this),100))),this[this.currentView]=r,l?this.spanHours.html(r):this.spanMinutes.html(i(r)),c){var m=Math.sin(s)*(f-w),g=-Math.cos(s)*(f-w),k=Math.sin(s)*f,x=-Math.cos(s)*f;this.hand.setAttribute("x2",m),this.hand.setAttribute("y2",g),this.bg.setAttribute("cx",k),this.bg.setAttribute("cy",x)}else this[l?"hoursView":"minutesView"].find(".clockpicker-tick").each(function(){var e=t(this);e.toggleClass("active",r===+e.html())})},o.prototype.done=function(){a(this.options.beforeDone),this.hide(),this.label.addClass("active");var t=this.input.prop("value"),e=i(this.hours)+":"+i(this.minutes);this.options.twelvehour&&(e+=this.amOrPm),this.input.prop("value",e),e!==t&&(this.input.triggerHandler("change"),this.isInput||this.element.trigger("change")),this.options.autoclose&&this.input.trigger("blur"),a(this.options.afterDone)},o.prototype.clear=function(){this.hide(),this.label.removeClass("active");var t=this.input.prop("value");this.input.prop("value",""),""!==t&&(this.input.triggerHandler("change"),this.isInput||this.element.trigger("change")),this.options.autoclose&&this.input.trigger("blur")},o.prototype.remove=function(){this.element.removeData("clockpicker"),this.input.off("focus.clockpicker click.clockpicker"),this.isShown&&this.hide(),this.isAppended&&(r.off("resize.clockpicker"+this.id),this.popover.remove())},t.fn.pickatime=function(e){var i=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=t(this),a=n.data("clockpicker");if(a)"function"==typeof a[e]&&a[e].apply(a,i);else{var r=t.extend({},o.DEFAULTS,n.data(),"object"==typeof e&&e);n.data("clockpicker",new o(n,r))}})}}(jQuery),function(t){function e(){var e=+t(this).attr("data-length"),i=+t(this).val().length,n=i<=e;t(this).parent().find('span[class="character-counter"]').html(i+"/"+e),o(n,t(this))}function i(e){var i=e.parent().find('span[class="character-counter"]');i.length||(i=t("").addClass("character-counter").css("float","right").css("font-size","12px").css("height",1),e.parent().append(i))}function n(){t(this).parent().find('span[class="character-counter"]').html("")}function o(t,e){var i=e.hasClass("invalid");t&&i?e.removeClass("invalid"):t||i||(e.removeClass("valid"),e.addClass("invalid"))}t.fn.characterCounter=function(){return this.each(function(){var o=t(this);o.parent().find('span[class="character-counter"]').length||void 0!==o.attr("data-length")&&(o.on("input",e),o.on("focus",e),o.on("blur",n),i(o))})},t(document).ready(function(){t("input, textarea").characterCounter()})}(jQuery),function(t){var e={init:function(e){var i={duration:200,dist:-100,shift:0,padding:0,fullWidth:!1,indicators:!1,noWrap:!1,onCycleTo:null};e=t.extend(i,e);var n=Materialize.objectSelectorString(t(this));return this.each(function(i){function o(t){return t.targetTouches&&t.targetTouches.length>=1?t.targetTouches[0].clientX:t.clientX}function a(t){return t.targetTouches&&t.targetTouches.length>=1?t.targetTouches[0].clientY:t.clientY}function r(t){return t>=C?t%C:t<0?r(C+t%C):t}function s(i){E=!0,j.hasClass("scrolling")||j.addClass("scrolling"),null!=H&&window.clearTimeout(H),H=window.setTimeout(function(){E=!1,j.removeClass("scrolling")},e.duration);var n,o,a,s,l,c,u,d=w;if(b="number"==typeof i?i:b,w=Math.floor((b+x/2)/x),a=b-w*x,s=a<0?1:-1,l=-s*a*2/x,o=C>>1,e.fullWidth?u="translateX(0)":(u="translateX("+(j[0].clientWidth-m)/2+"px) ",u+="translateY("+(j[0].clientHeight-g)/2+"px)"),N){var p=w%C,h=V.find(".indicator-item.active");h.index()!==p&&(h.removeClass("active"),V.find(".indicator-item").eq(p).addClass("active"))}for((!W||w>=0&&w0?1-l:1):(zTranslation=e.dist*(2*n-l*s),tweenedOpacity=1-.2*(2*n-l*s)),(!W||w-n>=0)&&((c=v[r(w-n)]).style[_]=u+" translateX("+(-e.shift+(-x*n-a)/2)+"px) translateZ("+zTranslation+"px)",c.style.zIndex=-n,c.style.opacity=tweenedOpacity,c.style.display="block");if((!W||w>=0&&w2||i<-2?(s(A-i),requestAnimationFrame(c)):s(A))}function u(i){if(q)return i.preventDefault(),i.stopPropagation(),!1;if(!e.fullWidth){var n=t(i.target).closest(".carousel-item").index();0!==r(w)-n&&(i.preventDefault(),i.stopPropagation()),d(n)}}function d(t){var e=w%C-t;W||(e<0?Math.abs(e+C)0&&Math.abs(e-C)0&&j.trigger("carouselPrev",[e])}function p(e){"mousedown"===e.type&&t(e.target).is("img")&&e.preventDefault(),k=!0,q=!1,z=!1,T=o(e),S=a(e),O=P=0,M=b,I=Date.now(),clearInterval(D),D=setInterval(l,100)}function h(t){var e,i;if(k)if(e=o(t),y=a(t),i=T-e,Math.abs(S-y)<30&&!z)(i>2||i<-2)&&(q=!0,T=e,s(b+i));else{if(q)return t.preventDefault(),t.stopPropagation(),!1;z=!0}if(q)return t.preventDefault(),t.stopPropagation(),!1}function f(t){if(k)return k=!1,clearInterval(D),A=b,(O>10||O<-10)&&(A=b+(P=.9*O)),A=Math.round(A/x)*x,W&&(A>=x*(C-1)?A=x*(C-1):A<0&&(A=0)),P=A-b,I=Date.now(),requestAnimationFrame(c),q&&(t.preventDefault(),t.stopPropagation()),!1}var v,m,g,b,w,k,x,C,T,S,P,A,O,E,_,M,I,D,q,z,V=t('
                  '),H=null,L=null,j=t(this),$=j.find(".carousel-item").length>1,N=(j.attr("data-indicators")||e.indicators)&&$,W=j.attr("data-no-wrap")||e.noWrap||!$,F=j.attr("data-namespace")||n+i;j.attr("data-namespace",F);var Q=function(e){var i=j.find(".carousel-item.active").length?j.find(".carousel-item.active").first():j.find(".carousel-item").first(),n=i.find("img").first();if(n.length)if(n[0].complete)if(n.height()>0)j.css("height",n.height());else{var o=n[0].naturalWidth,a=n[0].naturalHeight,r=j.width()/o*a;j.css("height",r)}else n.on("load",function(){j.css("height",t(this).height())});else if(!e){var s=i.height();j.css("height",s)}};if(e.fullWidth&&(e.dist=0,Q(),N&&j.find(".carousel-fixed-item").addClass("with-indicators")),j.hasClass("initialized"))return t(window).trigger("resize"),j.trigger("carouselNext",[1e-6]),!0;j.addClass("initialized"),k=!1,b=A=0,v=[],m=j.find(".carousel-item").first().innerWidth(),g=j.find(".carousel-item").first().innerHeight(),x=2*m+e.padding,j.find(".carousel-item").each(function(e){if(v.push(t(this)[0]),N){var i=t('
                • ');0===e&&i.addClass("active"),i.click(function(e){e.stopPropagation(),d(t(this).index())}),V.append(i)}}),N&&j.append(V),C=v.length,_="transform",["webkit","Moz","O","ms"].every(function(t){var e=t+"Transform";return void 0===document.body.style[e]||(_=e,!1)});var X=Materialize.throttle(function(){if(e.fullWidth){m=j.find(".carousel-item").first().innerWidth();j.find(".carousel-item.active").height();x=2*m+e.padding,A=b=2*w*m,Q(!0)}else s()},200);t(window).off("resize.carousel-"+F).on("resize.carousel-"+F,X),void 0!==window.ontouchstart&&(j.on("touchstart.carousel",p),j.on("touchmove.carousel",h),j.on("touchend.carousel",f)),j.on("mousedown.carousel",p),j.on("mousemove.carousel",h),j.on("mouseup.carousel",f),j.on("mouseleave.carousel",f),j.on("click.carousel",u),s(b),t(this).on("carouselNext",function(t,e,i){void 0===e&&(e=1),"function"==typeof i&&(L=i),A=x*Math.round(b/x)+x*e,b!==A&&(P=A-b,I=Date.now(),requestAnimationFrame(c))}),t(this).on("carouselPrev",function(t,e,i){void 0===e&&(e=1),"function"==typeof i&&(L=i),A=x*Math.round(b/x)-x*e,b!==A&&(P=A-b,I=Date.now(),requestAnimationFrame(c))}),t(this).on("carouselSet",function(t,e,i){void 0===e&&(e=0),"function"==typeof i&&(L=i),d(e)})})},next:function(e,i){t(this).trigger("carouselNext",[e,i])},prev:function(e,i){t(this).trigger("carouselPrev",[e,i])},set:function(e,i){t(this).trigger("carouselSet",[e,i])},destroy:function(){var e=t(this).attr("data-namespace");t(this).removeAttr("data-namespace"),t(this).removeClass("initialized"),t(this).find(".indicators").remove(),t(this).off("carouselNext carouselPrev carouselSet"),t(window).off("resize.carousel-"+e),void 0!==window.ontouchstart&&t(this).off("touchstart.carousel touchmove.carousel touchend.carousel"),t(this).off("mousedown.carousel mousemove.carousel mouseup.carousel mouseleave.carousel click.carousel")}};t.fn.carousel=function(i){return e[i]?e[i].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof i&&i?void t.error("Method "+i+" does not exist on jQuery.carousel"):e.init.apply(this,arguments)}}(jQuery),function(t){var e={init:function(e){return this.each(function(){var i=t("#"+t(this).attr("data-activates")),n=(t("body"),t(this)),o=n.parent(".tap-target-wrapper"),a=o.find(".tap-target-wave"),r=o.find(".tap-target-origin"),s=n.find(".tap-target-content");o.length||(o=n.wrap(t('
                  ')).parent()),s.length||(s=t('
                  '),n.append(s)),a.length||(a=t('
                  '),r.length||((r=i.clone(!0,!0)).addClass("tap-target-origin"),r.removeAttr("id"),r.removeAttr("style"),a.append(r)),o.append(a));var l=function(){o.is(".open")&&(o.removeClass("open"),r.off("click.tapTarget"),t(document).off("click.tapTarget"),t(window).off("resize.tapTarget"))},c=function(){var e="fixed"===i.css("position");if(!e)for(var r=i.parents(),l=0;lv,b=d<=m,w=d>m,k=p>=.25*h&&p<=.75*h,x=n.outerWidth(),C=n.outerHeight(),T=d+u/2-C/2,S=p+c/2-x/2,P=e?"fixed":"absolute",A=k?x:x/2+c,O=C/2,E=b?C/2:0,_=g&&!k?x/2-c:0,M=c,I=w?"bottom":"top",D=2*c,q=D,z=C/2-q/2,V=x/2-D/2,H={};H.top=b?T:"",H.right=y?h-S-x:"",H.bottom=w?f-T-C:"",H.left=g?S:"",H.position=P,o.css(H),s.css({width:A,height:O,top:E,right:0,bottom:0,left:_,padding:M,verticalAlign:I}),a.css({top:z,left:V,width:D,height:q})};"open"==e&&(c(),o.is(".open")||(o.addClass("open"),setTimeout(function(){r.off("click.tapTarget").on("click.tapTarget",function(t){l(),r.off("click.tapTarget")}),t(document).off("click.tapTarget").on("click.tapTarget",function(e){l(),t(document).off("click.tapTarget")});var e=Materialize.throttle(function(){c()},200);t(window).off("resize.tapTarget").on("resize.tapTarget",e)},0))),"close"==e&&l()})},open:function(){},close:function(){}};t.fn.tapTarget=function(i){if(e[i]||"object"==typeof i)return e.init.apply(this,arguments);t.error("Method "+i+" does not exist on jQuery.tap-target")}}(jQuery); \ No newline at end of file diff --git a/dropdown.html b/dropdown.html deleted file mode 100644 index 7c6f10c218..0000000000 --- a/dropdown.html +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - - - - Dropdown - Materialize - - - - - - - - - - - - - - - - -
                  - -
                  - -
                  -
                  -
                  -
                  - -
                  -

                  Introduction

                  -

                  Add a dropdown list to any button. Make sure that the data-activates attribute matches the id in the <ul> tag.

                  -

                  You can add a divider with the <li class="divider"></li> tag.

                  - Drop Me! - -
                  
                  -  <!-- Dropdown Trigger -->
                  -  <a class='dropdown-button btn' href='#' data-activates='dropdown1'>Drop Me!</a>
                  -
                  -  <!-- Dropdown Structure -->
                  -  <ul id='dropdown1' class='dropdown-content'>
                  -    <li><a href="#!">one</a></li>
                  -    <li><a href="#!">two</a></li>
                  -    <li class="divider"></li>
                  -    <li><a href="#!">three</a></li>
                  -  </ul>
                  -        
                  -
                  - -
                  -

                  Options

                  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  Option NameDescription
                  indurationThe duration of the transition enter in milliseconds. Default: 300
                  outdurationThe duration of the transition out in milliseconds. Default: 225
                  constrainwidthIf true, constrainWidth to the size of the dropdown activator. Default: true
                  hoverIf true, the dropdown will open on hover. Default: false
                  gutterThis defines the spacing from the aligned edge. Default: 0
                  beloworiginIf true, the dropdown will show below the activator. Default: false
                  -

                  To use these inline you have to add them as data attributes. If you want more dynamic control, you can define them using the jQuery plugin below.

                  -
                  
                  -  <a class='dropdown-button btn' data-beloworigin="true" href='#' data-activates='dropdown1'>Drop Me!</a>
                  -        
                  -
                  - - - -
                  -

                  jQuery Plugin Initialization

                  -

                  Initialization for dropdowns is only necessary if you create them dynamically.

                  -
                  
                  -  $('.dropdown-button').dropdown({
                  -      inDuration: 300,
                  -      outDuration: 225,
                  -      constrain_width: false, // Does not change width of dropdown to that of the activator
                  -      hover: true, // Activate on hover
                  -      gutter: 0, // Spacing from edge
                  -      belowOrigin: false // Displays dropdown below the button
                  -    }
                  -  );
                  -        
                  -
                  - - -
                  - - -
                  -
                  -
                  - - -
                  - -
                  -
                  - -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/extras/noUiSlider/nouislider.css b/extras/noUiSlider/nouislider.css index bf6c412721..270b0e89ec 100644 --- a/extras/noUiSlider/nouislider.css +++ b/extras/noUiSlider/nouislider.css @@ -1,3 +1,11 @@ +/*! + * Materialize v0.100.2 (http://materializecss.com) + * Copyright 2014-2015 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ + +/*! nouislider - 9.1.0 - 2016-12-10 16:00:32 */ + /* Functional styling; * These styles are required for noUiSlider to function. @@ -5,190 +13,297 @@ */ .noUi-target, .noUi-target * { --webkit-touch-callout: none; --webkit-user-select: none; --ms-touch-action: none; --ms-user-select: none; --moz-user-select: none; --moz-box-sizing: border-box; - box-sizing: border-box; + -webkit-touch-callout: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-user-select: none; + -ms-touch-action: none; + touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + user-select: none; + -moz-box-sizing: border-box; + box-sizing: border-box; } .noUi-target { - position: relative; - direction: ltr; + position: relative; + direction: ltr; } .noUi-base { - width: 100%; - height: 100%; - position: relative; - z-index: 1; /* Fix 401 */ + width: 100%; + height: 100%; + position: relative; + z-index: 1; /* Fix 401 */ +} +.noUi-connect { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; } .noUi-origin { - position: absolute; - right: 0; - top: 0; - left: 0; - bottom: 0; + position: absolute; + height: 0; + width: 0; } .noUi-handle { - position: relative; - z-index: 1; -} -.noUi-stacking .noUi-handle { -/* This class is applied to the lower origin when - its values is > 50%. */ - z-index: 10; + position: relative; + z-index: 1; } +.noUi-state-tap .noUi-connect, .noUi-state-tap .noUi-origin { --webkit-transition: left 0.25s, top 0.25s; - transition: left 0.25s, top 0.25s; + -webkit-transition: top 0.25s, right 0.25s, bottom 0.25s, left 0.25s; + transition: top 0.25s, right 0.25s, bottom 0.25s, left 0.25s; } .noUi-state-drag * { - cursor: inherit !important; + cursor: inherit !important; } +.noUi-handle-touch-area{ + position: relative; + width: 44px; + height: 44px; + left: -15px; + top: -15px; +} /* Painting and performance; * Browsers can paint handles in their own layer. */ -.noUi-base { - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); +.noUi-base, +.noUi-handle { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); } /* Slider size and handle placement; */ .noUi-horizontal { - height: 18px; + height: 18px; } .noUi-horizontal .noUi-handle { - width: 34px; - height: 28px; - left: -17px; - top: -6px; + width: 34px; + height: 28px; + left: -17px; + top: -6px; } .noUi-vertical { - width: 18px; + width: 18px; } .noUi-vertical .noUi-handle { - width: 28px; - height: 34px; - left: -6px; - top: -17px; + width: 28px; + height: 34px; + left: -6px; + top: -17px; } /* Styling; */ -.noUi-background { - background: #FAFAFA; - box-shadow: inset 0 1px 1px #f0f0f0; -} -.noUi-connect { - background: #3FB8AF; - box-shadow: inset 0 0 3px rgba(51,51,51,0.45); --webkit-transition: background 450ms; - transition: background 450ms; -} -.noUi-origin { - border-radius: 2px; -} .noUi-target { - border-radius: 4px; - border: 1px solid #D3D3D3; - box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB; + background: #cdcdcd; + border-radius: 4px; + border: 1px solid transparent; } -.noUi-target.noUi-connect { - box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB; +.noUi-connect { + background: #26A69A; + -webkit-transition: background 450ms; + transition: background 450ms; } /* Handles and cursors; */ -.noUi-dragable { - cursor: w-resize; +.noUi-draggable { + cursor: ew-resize; } -.noUi-vertical .noUi-dragable { - cursor: n-resize; +.noUi-vertical .noUi-draggable { + cursor: ns-resize; } .noUi-handle { - border: 1px solid #D9D9D9; - border-radius: 3px; - background: #FFF; - cursor: default; - box-shadow: inset 0 0 1px #FFF, - inset 0 1px 7px #EBEBEB, - 0 3px 6px -3px #BBB; + border: 1px solid #D9D9D9; + border-radius: 3px; + background: #FFF; + cursor: default; + box-shadow: inset 0 0 1px #FFF, + inset 0 1px 7px #EBEBEB, + 0 3px 6px -3px #BBB; } .noUi-active { - box-shadow: inset 0 0 1px #FFF, - inset 0 1px 7px #DDD, - 0 3px 6px -3px #BBB; + box-shadow: inset 0 0 1px #FFF, + inset 0 1px 7px #DDD, + 0 3px 6px -3px #BBB; } -/* Handle stripes; +/* Handle stripes */ .noUi-handle:before, .noUi-handle:after { - content: ""; - display: block; - position: absolute; - height: 14px; - width: 1px; - background: #E8E7E6; - left: 14px; - top: 6px; + content: ""; + display: block; + position: absolute; + height: 14px; + width: 1px; + background: #E8E7E6; + left: 14px; + top: 6px; } .noUi-handle:after { - left: 17px; + left: 17px; } .noUi-vertical .noUi-handle:before, .noUi-vertical .noUi-handle:after { - width: 14px; - height: 1px; - left: 6px; - top: 14px; + width: 14px; + height: 1px; + left: 6px; + top: 14px; } .noUi-vertical .noUi-handle:after { - top: 17px; + top: 17px; } /* Disabled state; */ -[disabled].noUi-connect, + [disabled] .noUi-connect { - background: #B8B8B8; + background: #B8B8B8; } -[disabled].noUi-origin, +[disabled].noUi-target, +[disabled].noUi-handle, [disabled] .noUi-handle { - cursor: not-allowed; + cursor: not-allowed; } -/*Materialize Theming*/ -.noUi-target { +/* Base; + * + */ +.noUi-pips, +.noUi-pips * { + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-pips { + position: absolute; + color: #999; +} - box-shadow: none; - border: none; +/* Values; + * + */ +.noUi-value { + position: absolute; + text-align: center; } -.noUI-base { +.noUi-value-sub { + color: #ccc; + font-size: 10px; +} + +/* Markings; + * + */ +.noUi-marker { + position: absolute; + background: #CCC; +} +.noUi-marker-sub { + background: #AAA; +} +.noUi-marker-large { + background: #AAA; +} + +/* Horizontal layout; + * + */ +.noUi-pips-horizontal { + padding: 10px 0; + height: 80px; + top: 100%; + left: 0; + width: 100%; +} +.noUi-value-horizontal { + -webkit-transform: translate3d(-50%,50%,0); + transform: translate3d(-50%,50%,0); +} + +.noUi-marker-horizontal.noUi-marker { + margin-left: -1px; + width: 2px; + height: 5px; +} +.noUi-marker-horizontal.noUi-marker-sub { + height: 10px; +} +.noUi-marker-horizontal.noUi-marker-large { height: 15px; - top: -6px; } -.noUi-background { - height: 3px; - top: 6px; - background-color: #bfbfbf; + +/* Vertical layout; + * + */ +.noUi-pips-vertical { + padding: 0 10px; + height: 100%; + top: 0; + left: 100%; +} +.noUi-value-vertical { + -webkit-transform: translate3d(0,50%,0); + transform: translate3d(0,50%,0); + padding-left: 25px; +} + +.noUi-marker-vertical.noUi-marker { + width: 5px; + height: 2px; + margin-top: -1px; +} +.noUi-marker-vertical.noUi-marker-sub { + width: 10px; +} +.noUi-marker-vertical.noUi-marker-large { + width: 15px; +} + +.noUi-tooltip { + display: block; + position: absolute; + border: 1px solid transparent; + border-radius: 3px; + background: #fff; + color: #000; + padding: 5px; + text-align: center; +} +.noUi-horizontal .noUi-tooltip { + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + left: 50%; + bottom: 120%; +} +.noUi-vertical .noUi-tooltip { + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + top: 50%; + right: 120%; +} + +/* Materialize Styles */ +.noUi-target { + border: 0; + border-radius: 0; } .noUi-horizontal { height: 3px; } -.noUI-connect { - height: 3px; - top: 6px; - background-color: #26A69A; - box-shadow: none; + +.noUi-vertical { + height: 100%; + width: 3px; } -/*Handle*/ -.noUi-horizontal .noUi-handle { +.noUi-horizontal .noUi-handle, +.noUi-vertical .noUi-handle { width: 15px; height: 15px; border-radius: 50%; @@ -198,9 +313,9 @@ left: -5px; top: -6px; transition: width .2s cubic-bezier(0.215, 0.610, 0.355, 1.000), - height .2s cubic-bezier(0.215, 0.610, 0.355, 1.000), - left .2s cubic-bezier(0.215, 0.610, 0.355, 1.000), - top .2s cubic-bezier(0.215, 0.610, 0.355, 1.000); + height .2s cubic-bezier(0.215, 0.610, 0.355, 1.000), + left .2s cubic-bezier(0.215, 0.610, 0.355, 1.000), + top .2s cubic-bezier(0.215, 0.610, 0.355, 1.000); } .noUi-handle:before { content: none; @@ -208,17 +323,15 @@ .noUi-handle:after { content: none; } -/*Handle on Drag*/ -.noui-target .noUi-active.noUi-handle { + +.noUi-target .noUi-active.noUi-handle { width: 3px; height: 3px; left: 0; top: 0; } -.noui-target .noUi-active .range-label span { -} -.noui-target .range-label { +.noUi-target.noUi-horizontal .noUi-tooltip { position: absolute; height: 30px; width: 30px; @@ -227,27 +340,67 @@ background-color: #26A69A; border-radius: 50%; transition: border-radius .25s cubic-bezier(0.215, 0.610, 0.355, 1.000), - transform .25s cubic-bezier(0.215, 0.610, 0.355, 1.000); + transform .25s cubic-bezier(0.215, 0.610, 0.355, 1.000); transform: scale(.5) rotate(-45deg); transform-origin: 50% 100%; } -.noui-target .noUi-active .range-label { +.noUi-target.noUi-horizontal .noUi-active .noUi-tooltip { border-radius: 15px 15px 15px 0; transform: rotate(-45deg) translate(23px, -25px); - } -.range-label span { + +.noUi-tooltip span { width: 100%; text-align: center; color: #fff; font-size: 12px; + opacity: 0; + position: absolute; + top: 6px; + left: -1px; + transition: opacity .25s cubic-bezier(0.215, 0.610, 0.355, 1.000); +} + +.noUi-horizontal .noUi-tooltip span { transform: rotate(45deg); +} + +.noUi-vertical .noUi-tooltip span { + transform: rotate(135deg); +} + + +.noUi-target.noUi-vertical .noUi-tooltip { + position: absolute; + height: 30px; + width: 30px; + top: -17px; + left: -2px; + background-color: #26A69A; + border-radius: 50%; + transition: border-radius .25s cubic-bezier(0.215, 0.610, 0.355, 1.000), + transform .25s cubic-bezier(0.215, 0.610, 0.355, 1.000); + transform: scale(.5) rotate(-45deg); + transform-origin: 50% 100%; +} +.noUi-target.noUi-vertical .noUi-active .noUi-tooltip { + border-radius: 15px 15px 15px 0; + transform: rotate(-135deg) translate(35px, -10px); +} +.noUi-vertical .noUi-tooltip span { + width: 100%; + text-align: center; + color: #fff; + font-size: 12px; + transform: rotate(135deg); opacity: 0; position: absolute; top: 7px; left: -1px; transition: opacity .25s cubic-bezier(0.215, 0.610, 0.355, 1.000); } -.noUi-active .range-label span { + +.noUi-horizontal .noUi-active .noUi-tooltip span, +.noUi-vertical .noUi-active .noUi-tooltip span { opacity: 1; } diff --git a/extras/noUiSlider/nouislider.js b/extras/noUiSlider/nouislider.js index 7184643a9a..34570f024e 100644 --- a/extras/noUiSlider/nouislider.js +++ b/extras/noUiSlider/nouislider.js @@ -1,14 +1,16 @@ +/*! + * Materialize v0.100.2 (http://materializecss.com) + * Copyright 2014-2015 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ + // wNumb (function(){function r(b){return b.split("").reverse().join("")}function s(b,f,c){if((b[f]||b[c])&&b[f]===b[c])throw Error(f);}function v(b,f,c,d,e,p,q,k,l,h,n,a){q=a;var m,g=n="";p&&(a=p(a));if("number"!==typeof a||!isFinite(a))return!1;b&&0===parseFloat(a.toFixed(b))&&(a=0);0>a&&(m=!0,a=Math.abs(a));b&&(p=Math.pow(10,b),a=(Math.round(a*p)/p).toFixed(b));a=a.toString();-1!==a.indexOf(".")&&(b=a.split("."),a=b[0],c&&(n=c+b[1]));f&&(a=r(a).match(/.{1,3}/g),a=r(a.join(r(f))));m&&k&&(g+=k);d&&(g+=d); -m&&l&&(g+=l);g=g+a+n;e&&(g+=e);h&&(g=h(g,q));return g}function w(b,f,c,d,e,h,q,k,l,r,n,a){var m;b="";n&&(a=n(a));if(!a||"string"!==typeof a)return!1;k&&a.substring(0,k.length)===k&&(a=a.replace(k,""),m=!0);d&&a.substring(0,d.length)===d&&(a=a.replace(d,""));l&&a.substring(0,l.length)===l&&(a=a.replace(l,""),m=!0);e&&a.slice(-1*e.length)===e&&(a=a.slice(0,-1*e.length));f&&(a=a.split(f).join(""));c&&(a=a.replace(c,"."));m&&(b+="-");b=Number((b+a).replace(/[^0-9\.\-.]/g,""));q&&(b=q(b));return"number"=== + m&&l&&(g+=l);g=g+a+n;e&&(g+=e);h&&(g=h(g,q));return g}function w(b,f,c,d,e,h,q,k,l,r,n,a){var m;b="";n&&(a=n(a));if(!a||"string"!==typeof a)return!1;k&&a.substring(0,k.length)===k&&(a=a.replace(k,""),m=!0);d&&a.substring(0,d.length)===d&&(a=a.replace(d,""));l&&a.substring(0,l.length)===l&&(a=a.replace(l,""),m=!0);e&&a.slice(-1*e.length)===e&&(a=a.slice(0,-1*e.length));f&&(a=a.split(f).join(""));c&&(a=a.replace(c,"."));m&&(b+="-");b=Number((b+a).replace(/[^0-9\.\-.]/g,""));q&&(b=q(b));return"number"=== typeof b&&isFinite(b)?b:!1}function x(b){var f,c,d,e={};for(f=0;fd&&(e[c]=d):"encoder"===c||"decoder"===c||"edit"===c||"undo"===c?"function"===typeof d&&(e[c]=d):"string"===typeof d&&(e[c]=d);s(e,"mark","thousand");s(e,"prefix","negative");s(e,"prefix","negativeBefore");return e}function u(b,f,c){var d,e=[];for(d=0;d 1 ? pieces[1].length : 0; - } - - // http://youmightnotneedjquery.com/#add_class - function addClass ( el, className ) { - if ( el.classList ) { - el.classList.add(className); - } else { - el.className += ' ' + className; - } - } - - // http://youmightnotneedjquery.com/#remove_class - function removeClass ( el, className ) { - if ( el.classList ) { - el.classList.remove(className); - } else { - el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); - } - } - - // http://youmightnotneedjquery.com/#has_class - function hasClass ( el, className ) { - if ( el.classList ) { - el.classList.contains(className); - } else { - new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className); - } - } - - - var - // Determine the events to bind. IE11 implements pointerEvents without - // a prefix, which breaks compatibility with the IE10 implementation. - /** @const */ - actions = window.navigator.pointerEnabled ? { - start: 'pointerdown', - move: 'pointermove', - end: 'pointerup' - } : window.navigator.msPointerEnabled ? { - start: 'MSPointerDown', - move: 'MSPointerMove', - end: 'MSPointerUp' - } : { - start: 'mousedown touchstart', - move: 'mousemove touchmove', - end: 'mouseup touchend' - }, - // Re-usable list of classes; - /** @const */ - Classes = [ -/* 0 */ 'noUi-target' -/* 1 */ ,'noUi-base' -/* 2 */ ,'noUi-origin' -/* 3 */ ,'noUi-handle' -/* 4 */ ,'noUi-horizontal' -/* 5 */ ,'noUi-vertical' -/* 6 */ ,'noUi-background' -/* 7 */ ,'noUi-connect' -/* 8 */ ,'noUi-ltr' -/* 9 */ ,'noUi-rtl' -/* 10 */ ,'noUi-dragable' -/* 11 */ ,'' -/* 12 */ ,'noUi-state-drag' -/* 13 */ ,'' -/* 14 */ ,'noUi-state-tap' -/* 15 */ ,'noUi-active' -/* 16 */ ,'' -/* 17 */ ,'noUi-stacking' - ]; + 'use strict'; + + + // Creates a node, adds it to target, returns the new node. + function addNodeTo ( target, className ) { + var div = document.createElement('div'); + addClass(div, className); + target.appendChild(div); + return div; + } + + // Removes duplicates from an array. + function unique ( array ) { + return array.filter(function(a){ + return !this[a] ? this[a] = true : false; + }, {}); + } + + // Round a value to the closest 'to'. + function closest ( value, to ) { + return Math.round(value / to) * to; + } + + // Current position of an element relative to the document. + function offset ( elem, orientation ) { + + var rect = elem.getBoundingClientRect(), + doc = elem.ownerDocument, + docElem = doc.documentElement, + pageOffset = getPageOffset(); + + // getBoundingClientRect contains left scroll in Chrome on Android. + // I haven't found a feature detection that proves this. Worst case + // scenario on mis-match: the 'tap' feature on horizontal sliders breaks. + if ( /webkit.*Chrome.*Mobile/i.test(navigator.userAgent) ) { + pageOffset.x = 0; + } + + return orientation ? (rect.top + pageOffset.y - docElem.clientTop) : (rect.left + pageOffset.x - docElem.clientLeft); + } + + // Checks whether a value is numerical. + function isNumeric ( a ) { + return typeof a === 'number' && !isNaN( a ) && isFinite( a ); + } + + // Sets a class and removes it after [duration] ms. + function addClassFor ( element, className, duration ) { + if (duration > 0) { + addClass(element, className); + setTimeout(function(){ + removeClass(element, className); + }, duration); + } + } + + // Limits a value to 0 - 100 + function limit ( a ) { + return Math.max(Math.min(a, 100), 0); + } + + // Wraps a variable as an array, if it isn't one yet. + // Note that an input array is returned by reference! + function asArray ( a ) { + return Array.isArray(a) ? a : [a]; + } + + // Counts decimals + function countDecimals ( numStr ) { + numStr = String(numStr); + var pieces = numStr.split("."); + return pieces.length > 1 ? pieces[1].length : 0; + } + + // http://youmightnotneedjquery.com/#add_class + function addClass ( el, className ) { + if ( el.classList ) { + el.classList.add(className); + } else { + el.className += ' ' + className; + } + } + + // http://youmightnotneedjquery.com/#remove_class + function removeClass ( el, className ) { + if ( el.classList ) { + el.classList.remove(className); + } else { + el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); + } + } + + // https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/ + function hasClass ( el, className ) { + return el.classList ? el.classList.contains(className) : new RegExp('\\b' + className + '\\b').test(el.className); + } + + // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes + function getPageOffset ( ) { + + var supportPageOffset = window.pageXOffset !== undefined, + isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"), + x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft, + y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop; + + return { + x: x, + y: y + }; + } + + // we provide a function to compute constants instead + // of accessing window.* as soon as the module needs it + // so that we do not compute anything if not needed + function getActions ( ) { + + // Determine the events to bind. IE11 implements pointerEvents without + // a prefix, which breaks compatibility with the IE10 implementation. + return window.navigator.pointerEnabled ? { + start: 'pointerdown', + move: 'pointermove', + end: 'pointerup' + } : window.navigator.msPointerEnabled ? { + start: 'MSPointerDown', + move: 'MSPointerMove', + end: 'MSPointerUp' + } : { + start: 'mousedown touchstart', + move: 'mousemove touchmove', + end: 'mouseup touchend' + }; + } // Value calculation - // Determine the size of a sub-range in relation to a full range. - function subRangeRatio ( pa, pb ) { - return (100 / (pb - pa)); - } + // Determine the size of a sub-range in relation to a full range. + function subRangeRatio ( pa, pb ) { + return (100 / (pb - pa)); + } - // (percentage) How many percent is this value of this range? - function fromPercentage ( range, value ) { - return (value * 100) / ( range[1] - range[0] ); - } + // (percentage) How many percent is this value of this range? + function fromPercentage ( range, value ) { + return (value * 100) / ( range[1] - range[0] ); + } - // (percentage) Where is this value on this range? - function toPercentage ( range, value ) { - return fromPercentage( range, range[0] < 0 ? - value + Math.abs(range[0]) : - value - range[0] ); - } + // (percentage) Where is this value on this range? + function toPercentage ( range, value ) { + return fromPercentage( range, range[0] < 0 ? + value + Math.abs(range[0]) : + value - range[0] ); + } - // (value) How much is this percentage on this range? - function isPercentage ( range, value ) { - return ((value * ( range[1] - range[0] )) / 100) + range[0]; - } + // (value) How much is this percentage on this range? + function isPercentage ( range, value ) { + return ((value * ( range[1] - range[0] )) / 100) + range[0]; + } // Range conversion - function getJ ( value, arr ) { + function getJ ( value, arr ) { - var j = 1; + var j = 1; - while ( value >= arr[j] ){ - j += 1; - } + while ( value >= arr[j] ){ + j += 1; + } - return j; - } + return j; + } - // (percentage) Input a value, find where, on a scale of 0-100, it applies. - function toStepping ( xVal, xPct, value ) { + // (percentage) Input a value, find where, on a scale of 0-100, it applies. + function toStepping ( xVal, xPct, value ) { - if ( value >= xVal.slice(-1)[0] ){ - return 100; - } + if ( value >= xVal.slice(-1)[0] ){ + return 100; + } - var j = getJ( value, xVal ), va, vb, pa, pb; + var j = getJ( value, xVal ), va, vb, pa, pb; - va = xVal[j-1]; - vb = xVal[j]; - pa = xPct[j-1]; - pb = xPct[j]; + va = xVal[j-1]; + vb = xVal[j]; + pa = xPct[j-1]; + pb = xPct[j]; - return pa + (toPercentage([va, vb], value) / subRangeRatio (pa, pb)); - } + return pa + (toPercentage([va, vb], value) / subRangeRatio (pa, pb)); + } - // (value) Input a percentage, find where it is on the specified range. - function fromStepping ( xVal, xPct, value ) { + // (value) Input a percentage, find where it is on the specified range. + function fromStepping ( xVal, xPct, value ) { - // There is no range group that fits 100 - if ( value >= 100 ){ - return xVal.slice(-1)[0]; - } + // There is no range group that fits 100 + if ( value >= 100 ){ + return xVal.slice(-1)[0]; + } - var j = getJ( value, xPct ), va, vb, pa, pb; + var j = getJ( value, xPct ), va, vb, pa, pb; - va = xVal[j-1]; - vb = xVal[j]; - pa = xPct[j-1]; - pb = xPct[j]; + va = xVal[j-1]; + vb = xVal[j]; + pa = xPct[j-1]; + pb = xPct[j]; - return isPercentage([va, vb], (value - pa) * subRangeRatio (pa, pb)); - } + return isPercentage([va, vb], (value - pa) * subRangeRatio (pa, pb)); + } - // (percentage) Get the step that applies at a certain value. - function getStep ( xPct, xSteps, snap, value ) { + // (percentage) Get the step that applies at a certain value. + function getStep ( xPct, xSteps, snap, value ) { - if ( value === 100 ) { - return value; - } + if ( value === 100 ) { + return value; + } - var j = getJ( value, xPct ), a, b; + var j = getJ( value, xPct ), a, b; - // If 'snap' is set, steps are used as fixed points on the slider. - if ( snap ) { + // If 'snap' is set, steps are used as fixed points on the slider. + if ( snap ) { - a = xPct[j-1]; - b = xPct[j]; + a = xPct[j-1]; + b = xPct[j]; - // Find the closest position, a or b. - if ((value - a) > ((b-a)/2)){ - return b; - } + // Find the closest position, a or b. + if ((value - a) > ((b-a)/2)){ + return b; + } - return a; - } + return a; + } - if ( !xSteps[j-1] ){ - return value; - } + if ( !xSteps[j-1] ){ + return value; + } - return xPct[j-1] + closest( - value - xPct[j-1], - xSteps[j-1] - ); - } + return xPct[j-1] + closest( + value - xPct[j-1], + xSteps[j-1] + ); + } // Entry parsing - function handleEntryPoint ( index, value, that ) { - - var percentage; - - // Wrap numerical input in an array. - if ( typeof value === "number" ) { - value = [value]; - } - - // Reject any invalid input, by testing whether value is an array. - if ( Object.prototype.toString.call( value ) !== '[object Array]' ){ - throw new Error("noUiSlider: 'range' contains invalid value."); - } - - // Covert min/max syntax to 0 and 100. - if ( index === 'min' ) { - percentage = 0; - } else if ( index === 'max' ) { - percentage = 100; - } else { - percentage = parseFloat( index ); - } - - // Check for correct input. - if ( !isNumeric( percentage ) || !isNumeric( value[0] ) ) { - throw new Error("noUiSlider: 'range' value isn't numeric."); - } - - // Store values. - that.xPct.push( percentage ); - that.xVal.push( value[0] ); - - // NaN will evaluate to false too, but to keep - // logging clear, set step explicitly. Make sure - // not to override the 'step' setting with false. - if ( !percentage ) { - if ( !isNaN( value[1] ) ) { - that.xSteps[0] = value[1]; - } - } else { - that.xSteps.push( isNaN(value[1]) ? false : value[1] ); - } - } - - function handleStepPoint ( i, n, that ) { - - // Ignore 'false' stepping. - if ( !n ) { - return true; - } - - // Factor to range ratio - that.xSteps[i] = fromPercentage([ - that.xVal[i] - ,that.xVal[i+1] - ], n) / subRangeRatio ( - that.xPct[i], - that.xPct[i+1] ); - } + function handleEntryPoint ( index, value, that ) { + + var percentage; + + // Wrap numerical input in an array. + if ( typeof value === "number" ) { + value = [value]; + } + + // Reject any invalid input, by testing whether value is an array. + if ( Object.prototype.toString.call( value ) !== '[object Array]' ){ + throw new Error("noUiSlider: 'range' contains invalid value."); + } + + // Covert min/max syntax to 0 and 100. + if ( index === 'min' ) { + percentage = 0; + } else if ( index === 'max' ) { + percentage = 100; + } else { + percentage = parseFloat( index ); + } + + // Check for correct input. + if ( !isNumeric( percentage ) || !isNumeric( value[0] ) ) { + throw new Error("noUiSlider: 'range' value isn't numeric."); + } + + // Store values. + that.xPct.push( percentage ); + that.xVal.push( value[0] ); + + // NaN will evaluate to false too, but to keep + // logging clear, set step explicitly. Make sure + // not to override the 'step' setting with false. + if ( !percentage ) { + if ( !isNaN( value[1] ) ) { + that.xSteps[0] = value[1]; + } + } else { + that.xSteps.push( isNaN(value[1]) ? false : value[1] ); + } + + that.xHighestCompleteStep.push(0); + } + + function handleStepPoint ( i, n, that ) { + + // Ignore 'false' stepping. + if ( !n ) { + return true; + } + + // Factor to range ratio + that.xSteps[i] = fromPercentage([ + that.xVal[i] + ,that.xVal[i+1] + ], n) / subRangeRatio ( + that.xPct[i], + that.xPct[i+1] ); + + var totalSteps = (that.xVal[i+1] - that.xVal[i]) / that.xNumSteps[i]; + var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1); + var step = that.xVal[i] + (that.xNumSteps[i] * highestStep); + + that.xHighestCompleteStep[i] = step; + } // Interface - // The interface to Spectrum handles all direction-based - // conversions, so the above values are unaware. + // The interface to Spectrum handles all direction-based + // conversions, so the above values are unaware. - function Spectrum ( entry, snap, direction, singleStep ) { + function Spectrum ( entry, snap, direction, singleStep ) { - this.xPct = []; - this.xVal = []; - this.xSteps = [ singleStep || false ]; - this.xNumSteps = [ false ]; + this.xPct = []; + this.xVal = []; + this.xSteps = [ singleStep || false ]; + this.xNumSteps = [ false ]; + this.xHighestCompleteStep = []; - this.snap = snap; - this.direction = direction; + this.snap = snap; + this.direction = direction; - var index, ordered = [ /* [0, 'min'], [1, '50%'], [2, 'max'] */ ]; + var index, ordered = [ /* [0, 'min'], [1, '50%'], [2, 'max'] */ ]; - // Map the object keys to an array. - for ( index in entry ) { - if ( entry.hasOwnProperty(index) ) { - ordered.push([entry[index], index]); - } - } + // Map the object keys to an array. + for ( index in entry ) { + if ( entry.hasOwnProperty(index) ) { + ordered.push([entry[index], index]); + } + } - // Sort all entries by value (numeric sort). - ordered.sort(function(a, b) { return a[0] - b[0]; }); + // Sort all entries by value (numeric sort). + if ( ordered.length && typeof ordered[0][0] === "object" ) { + ordered.sort(function(a, b) { return a[0][0] - b[0][0]; }); + } else { + ordered.sort(function(a, b) { return a[0] - b[0]; }); + } - // Convert all entries to subranges. - for ( index = 0; index < ordered.length; index++ ) { - handleEntryPoint(ordered[index][1], ordered[index][0], this); - } - // Store the actual step values. - // xSteps is sorted in the same order as xPct and xVal. - this.xNumSteps = this.xSteps.slice(0); + // Convert all entries to subranges. + for ( index = 0; index < ordered.length; index++ ) { + handleEntryPoint(ordered[index][1], ordered[index][0], this); + } - // Convert all numeric steps to the percentage of the subrange they represent. - for ( index = 0; index < this.xNumSteps.length; index++ ) { - handleStepPoint(index, this.xNumSteps[index], this); - } - } + // Store the actual step values. + // xSteps is sorted in the same order as xPct and xVal. + this.xNumSteps = this.xSteps.slice(0); - Spectrum.prototype.getMargin = function ( value ) { - return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false; - }; + // Convert all numeric steps to the percentage of the subrange they represent. + for ( index = 0; index < this.xNumSteps.length; index++ ) { + handleStepPoint(index, this.xNumSteps[index], this); + } + } - Spectrum.prototype.toStepping = function ( value ) { + Spectrum.prototype.getMargin = function ( value ) { - value = toStepping( this.xVal, this.xPct, value ); + var step = this.xNumSteps[0]; - // Invert the value if this is a right-to-left slider. - if ( this.direction ) { - value = 100 - value; - } + if ( step && ((value / step) % 1) !== 0 ) { + throw new Error("noUiSlider: 'limit', 'margin' and 'padding' must be divisible by step."); + } - return value; - }; + return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false; + }; - Spectrum.prototype.fromStepping = function ( value ) { + Spectrum.prototype.toStepping = function ( value ) { - // Invert the value if this is a right-to-left slider. - if ( this.direction ) { - value = 100 - value; - } + value = toStepping( this.xVal, this.xPct, value ); - return accurateNumber(fromStepping( this.xVal, this.xPct, value )); - }; + return value; + }; - Spectrum.prototype.getStep = function ( value ) { + Spectrum.prototype.fromStepping = function ( value ) { - // Find the proper step for rtl sliders by search in inverse direction. - // Fixes issue #262. - if ( this.direction ) { - value = 100 - value; - } + return fromStepping( this.xVal, this.xPct, value ); + }; - value = getStep(this.xPct, this.xSteps, this.snap, value ); + Spectrum.prototype.getStep = function ( value ) { - if ( this.direction ) { - value = 100 - value; - } + value = getStep(this.xPct, this.xSteps, this.snap, value ); - return value; - }; + return value; + }; - Spectrum.prototype.getApplicableStep = function ( value ) { + Spectrum.prototype.getNearbySteps = function ( value ) { - // If the value is 100%, return the negative step twice. - var j = getJ(value, this.xPct), offset = value === 100 ? 2 : 1; - return [this.xNumSteps[j-2], this.xVal[j-offset], this.xNumSteps[j-offset]]; - }; + var j = getJ(value, this.xPct); - // Outside testing - Spectrum.prototype.convert = function ( value ) { - return this.getStep(this.toStepping(value)); - }; + return { + stepBefore: { startValue: this.xVal[j-2], step: this.xNumSteps[j-2], highestStep: this.xHighestCompleteStep[j-2] }, + thisStep: { startValue: this.xVal[j-1], step: this.xNumSteps[j-1], highestStep: this.xHighestCompleteStep[j-1] }, + stepAfter: { startValue: this.xVal[j-0], step: this.xNumSteps[j-0], highestStep: this.xHighestCompleteStep[j-0] } + }; + }; + + Spectrum.prototype.countStepDecimals = function () { + var stepDecimals = this.xNumSteps.map(countDecimals); + return Math.max.apply(null, stepDecimals); + }; + + // Outside testing + Spectrum.prototype.convert = function ( value ) { + return this.getStep(this.toStepping(value)); + }; + + /* Every input option is tested and parsed. This'll prevent + endless validation in internal methods. These tests are + structured with an item for every option available. An + option can be marked as required by setting the 'r' flag. + The testing function is provided with three arguments: + - The provided value for the option; + - A reference to the options object; + - The name for the option; + + The testing function returns false when an error is detected, + or true when everything is OK. It can also modify the option + object, to make sure all values can be correctly looped elsewhere. */ + + var defaultFormatter = { 'to': function( value ){ + return value !== undefined && value.toFixed(2); + }, 'from': Number }; + + function testStep ( parsed, entry ) { + + if ( !isNumeric( entry ) ) { + throw new Error("noUiSlider: 'step' is not numeric."); + } + + // The step option can still be used to set stepping + // for linear sliders. Overwritten if set in 'range'. + parsed.singleStep = entry; + } -/* Every input option is tested and parsed. This'll prevent - endless validation in internal methods. These tests are - structured with an item for every option available. An - option can be marked as required by setting the 'r' flag. - The testing function is provided with three arguments: - - The provided value for the option; - - A reference to the options object; - - The name for the option; - - The testing function returns false when an error is detected, - or true when everything is OK. It can also modify the option - object, to make sure all values can be correctly looped elsewhere. */ - - var defaultFormatter = { 'to': function( value ){ - return value.toFixed(2); - }, 'from': Number }; - - function testStep ( parsed, entry ) { - - if ( !isNumeric( entry ) ) { - throw new Error("noUiSlider: 'step' is not numeric."); - } - - // The step option can still be used to set stepping - // for linear sliders. Overwritten if set in 'range'. - parsed.singleStep = entry; - } + function testRange ( parsed, entry ) { - function testRange ( parsed, entry ) { + // Filter incorrect input. + if ( typeof entry !== 'object' || Array.isArray(entry) ) { + throw new Error("noUiSlider: 'range' is not an object."); + } - // Filter incorrect input. - if ( typeof entry !== 'object' || Array.isArray(entry) ) { - throw new Error("noUiSlider: 'range' is not an object."); - } + // Catch missing start or end. + if ( entry.min === undefined || entry.max === undefined ) { + throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'."); + } - // Catch missing start or end. - if ( entry.min === undefined || entry.max === undefined ) { - throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'."); - } + // Catch equal start or end. + if ( entry.min === entry.max ) { + throw new Error("noUiSlider: 'range' 'min' and 'max' cannot be equal."); + } - parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.dir, parsed.singleStep); - } + parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.dir, parsed.singleStep); + } - function testStart ( parsed, entry ) { + function testStart ( parsed, entry ) { - entry = asArray(entry); + entry = asArray(entry); - // Validate input. Values aren't tested, as the public .val method - // will always provide a valid location. - if ( !Array.isArray( entry ) || !entry.length || entry.length > 2 ) { - throw new Error("noUiSlider: 'start' option is incorrect."); - } - - // Store the number of handles. - parsed.handles = entry.length; - - // When the slider is initialized, the .val method will - // be called with the start options. - parsed.start = entry; - } - - function testSnap ( parsed, entry ) { - - // Enforce 100% stepping within subranges. - parsed.snap = entry; - - if ( typeof entry !== 'boolean' ){ - throw new Error("noUiSlider: 'snap' option must be a boolean."); - } - } - - function testAnimate ( parsed, entry ) { - - // Enforce 100% stepping within subranges. - parsed.animate = entry; - - if ( typeof entry !== 'boolean' ){ - throw new Error("noUiSlider: 'animate' option must be a boolean."); - } - } - - function testConnect ( parsed, entry ) { - - if ( entry === 'lower' && parsed.handles === 1 ) { - parsed.connect = 1; - } else if ( entry === 'upper' && parsed.handles === 1 ) { - parsed.connect = 2; - } else if ( entry === true && parsed.handles === 2 ) { - parsed.connect = 3; - } else if ( entry === false ) { - parsed.connect = 0; - } else { - throw new Error("noUiSlider: 'connect' option doesn't match handle count."); - } - } - - function testOrientation ( parsed, entry ) { - - // Set orientation to an a numerical value for easy - // array selection. - switch ( entry ){ - case 'horizontal': - parsed.ort = 0; - break; - case 'vertical': - parsed.ort = 1; - break; - default: - throw new Error("noUiSlider: 'orientation' option is invalid."); - } - } - - function testMargin ( parsed, entry ) { - - if ( !isNumeric(entry) ){ - throw new Error("noUiSlider: 'margin' option must be numeric."); - } - - parsed.margin = parsed.spectrum.getMargin(entry); - - if ( !parsed.margin ) { - throw new Error("noUiSlider: 'margin' option is only supported on linear sliders."); - } - } - - function testLimit ( parsed, entry ) { - - if ( !isNumeric(entry) ){ - throw new Error("noUiSlider: 'limit' option must be numeric."); - } - - parsed.limit = parsed.spectrum.getMargin(entry); - - if ( !parsed.limit ) { - throw new Error("noUiSlider: 'limit' option is only supported on linear sliders."); - } - } - - function testDirection ( parsed, entry ) { - - // Set direction as a numerical value for easy parsing. - // Invert connection for RTL sliders, so that the proper - // handles get the connect/background classes. - switch ( entry ) { - case 'ltr': - parsed.dir = 0; - break; - case 'rtl': - parsed.dir = 1; - parsed.connect = [0,2,1,3][parsed.connect]; - break; - default: - throw new Error("noUiSlider: 'direction' option was not recognized."); - } - } - - function testBehaviour ( parsed, entry ) { - - // Make sure the input is a string. - if ( typeof entry !== 'string' ) { - throw new Error("noUiSlider: 'behaviour' must be a string containing options."); - } - - // Check if the string contains any keywords. - // None are required. - var tap = entry.indexOf('tap') >= 0, - drag = entry.indexOf('drag') >= 0, - fixed = entry.indexOf('fixed') >= 0, - snap = entry.indexOf('snap') >= 0; - - parsed.events = { - tap: tap || snap, - drag: drag, - fixed: fixed, - snap: snap - }; - } - - function testFormat ( parsed, entry ) { - - parsed.format = entry; - - // Any object with a to and from method is supported. - if ( typeof entry.to === 'function' && typeof entry.from === 'function' ) { - return true; - } - - throw new Error( "noUiSlider: 'format' requires 'to' and 'from' methods."); - } - - // Test all developer settings and parse to assumption-safe values. - function testOptions ( options ) { - - var parsed = { - margin: 0, - limit: 0, - animate: true, - format: defaultFormatter - }, tests; - - // Tests are executed in the order they are presented here. - tests = { - 'step': { r: false, t: testStep }, - 'start': { r: true, t: testStart }, - 'connect': { r: true, t: testConnect }, - 'direction': { r: true, t: testDirection }, - 'snap': { r: false, t: testSnap }, - 'animate': { r: false, t: testAnimate }, - 'range': { r: true, t: testRange }, - 'orientation': { r: false, t: testOrientation }, - 'margin': { r: false, t: testMargin }, - 'limit': { r: false, t: testLimit }, - 'behaviour': { r: true, t: testBehaviour }, - 'format': { r: false, t: testFormat } - }; - - var defaults = { - 'connect': false, - 'direction': 'ltr', - 'behaviour': 'tap', - 'orientation': 'horizontal' - }; - - // Set defaults where applicable. - Object.keys(defaults).forEach(function ( name ) { - if ( options[name] === undefined ) { - options[name] = defaults[name]; - } - }); - - // Run all options through a testing mechanism to ensure correct - // input. It should be noted that options might get modified to - // be handled properly. E.g. wrapping integers in arrays. - Object.keys(tests).forEach(function( name ){ - - var test = tests[name]; - - // If the option isn't set, but it is required, throw an error. - if ( options[name] === undefined ) { - - if ( test.r ) { - throw new Error("noUiSlider: '" + name + "' is required."); - } - - return true; - } - - test.t( parsed, options[name] ); - }); - - // Forward pips options - parsed.pips = options.pips; - - // Pre-define the styles. - parsed.style = parsed.ort ? 'top' : 'left'; - - return parsed; - } - - - // Delimit proposed values for handle positions. - function getPositions ( a, b, delimit ) { - - // Add movement to current position. - var c = a + b[0], d = a + b[1]; - - // Only alter the other position on drag, - // not on standard sliding. - if ( delimit ) { - if ( c < 0 ) { - d += Math.abs(c); - } - if ( d > 100 ) { - c -= ( d - 100 ); - } - - // Limit values to 0 and 100. - return [limit(c), limit(d)]; - } - - return [c,d]; - } - - // Provide a clean event with standardized offset values. - function fixEvent ( e ) { - - // Prevent scrolling and panning on touch events, while - // attempting to slide. The tap event also depends on this. - e.preventDefault(); - - // Filter the event to register the type, which can be - // touch, mouse or pointer. Offset changes need to be - // made on an event specific basis. - var touch = e.type.indexOf('touch') === 0, - mouse = e.type.indexOf('mouse') === 0, - pointer = e.type.indexOf('pointer') === 0, - x,y, event = e; - - // IE10 implemented pointer events with a prefix; - if ( e.type.indexOf('MSPointer') === 0 ) { - pointer = true; - } - - if ( touch ) { - // noUiSlider supports one movement at a time, - // so we can select the first 'changedTouch'. - x = e.changedTouches[0].pageX; - y = e.changedTouches[0].pageY; - } - - if ( mouse || pointer ) { - x = e.clientX + window.pageXOffset; - y = e.clientY + window.pageYOffset; - } - - event.points = [x, y]; - event.cursor = mouse || pointer; // Fix #435 - - return event; - } + // Validate input. Values aren't tested, as the public .val method + // will always provide a valid location. + if ( !Array.isArray( entry ) || !entry.length ) { + throw new Error("noUiSlider: 'start' option is incorrect."); + } - // Append a handle to the base. - function addHandle ( direction, index ) { + // Store the number of handles. + parsed.handles = entry.length; - var origin = document.createElement('div'), - handle = document.createElement('div'), - additions = [ '-lower', '-upper' ]; + // When the slider is initialized, the .val method will + // be called with the start options. + parsed.start = entry; + } - if ( direction ) { - additions.reverse(); - } + function testSnap ( parsed, entry ) { - addClass(handle, Classes[3]); - addClass(handle, Classes[3] + additions[index]); + // Enforce 100% stepping within subranges. + parsed.snap = entry; - addClass(origin, Classes[2]); - origin.appendChild(handle); + if ( typeof entry !== 'boolean' ){ + throw new Error("noUiSlider: 'snap' option must be a boolean."); + } + } - return origin; - } + function testAnimate ( parsed, entry ) { - // Add the proper connection classes. - function addConnection ( connect, target, handles ) { + // Enforce 100% stepping within subranges. + parsed.animate = entry; - // Apply the required connection classes to the elements - // that need them. Some classes are made up for several - // segments listed in the class list, to allow easy - // renaming and provide a minor compression benefit. - switch ( connect ) { - case 1: addClass(target, Classes[7]); - addClass(handles[0], Classes[6]); - break; - case 3: addClass(handles[1], Classes[6]); - /* falls through */ - case 2: addClass(handles[0], Classes[7]); - /* falls through */ - case 0: addClass(target, Classes[6]); - break; - } - } - - // Add handles to the slider base. - function addHandles ( nrHandles, direction, base ) { - - var index, handles = []; - - // Append handles. - for ( index = 0; index < nrHandles; index += 1 ) { - - // Keep a list of all added handles. - handles.push( base.appendChild(addHandle( direction, index )) ); - } - - return handles; - } + if ( typeof entry !== 'boolean' ){ + throw new Error("noUiSlider: 'animate' option must be a boolean."); + } + } - // Initialize a single slider. - function addSlider ( direction, orientation, target ) { - - // Apply classes and data to the target. - addClass(target, Classes[0]); - addClass(target, Classes[8 + direction]); - addClass(target, Classes[4 + orientation]); - - var div = document.createElement('div'); - addClass(div, Classes[1]); - target.appendChild(div); - return div; - } - - -function closure ( target, options ){ - - // All variables local to 'closure' are prefixed with 'scope_' - var scope_Target = target, - scope_Locations = [-1, -1], - scope_Base, - scope_Handles, - scope_Spectrum = options.spectrum, - scope_Values = [], - scope_Events = {}; - - - function getGroup ( mode, values, stepped ) { - - // Use the range. - if ( mode === 'range' || mode === 'steps' ) { - return scope_Spectrum.xVal; - } + function testAnimationDuration ( parsed, entry ) { - if ( mode === 'count' ) { - - // Divide 0 - 100 in 'count' parts. - var spread = ( 100 / (values-1) ), v, i = 0; - values = []; - - // List these parts and have them handled as 'positions'. - while ((v=i++*spread) <= 100 ) { - values.push(v); - } - - mode = 'positions'; - } - - if ( mode === 'positions' ) { - - // Map all percentages to on-range values. - return values.map(function( value ){ - return scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value ); - }); - } - - if ( mode === 'values' ) { - - // If the value must be stepped, it needs to be converted to a percentage first. - if ( stepped ) { - - return values.map(function( value ){ - - // Convert to percentage, apply step, return to value. - return scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) ); - }); - - } - - // Otherwise, we can simply use the values. - return values; - } - } - - function generateSpread ( density, mode, group ) { - - var originalSpectrumDirection = scope_Spectrum.direction, - indexes = {}, - firstInRange = scope_Spectrum.xVal[0], - lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1], - ignoreFirst = false, - ignoreLast = false, - prevPct = 0; + parsed.animationDuration = entry; - // This function loops the spectrum in an ltr linear fashion, - // while the toStepping method is direction aware. Trick it into - // believing it is ltr. - scope_Spectrum.direction = 0; + if ( typeof entry !== 'number' ){ + throw new Error("noUiSlider: 'animationDuration' option must be a number."); + } + } - // Create a copy of the group, sort it and filter away all duplicates. - group = unique(group.slice().sort(function(a, b){ return a - b; })); + function testConnect ( parsed, entry ) { - // Make sure the range starts with the first element. - if ( group[0] !== firstInRange ) { - group.unshift(firstInRange); - ignoreFirst = true; - } - - // Likewise for the last one. - if ( group[group.length - 1] !== lastInRange ) { - group.push(lastInRange); - ignoreLast = true; - } - - group.forEach(function ( current, index ) { - - // Get the current step and the lower + upper positions. - var step, i, q, - low = current, - high = group[index+1], - newPct, pctDifference, pctPos, type, - steps, realSteps, stepsize; + var connect = [false]; + var i; - // When using 'steps' mode, use the provided steps. - // Otherwise, we'll step on to the next subrange. - if ( mode === 'steps' ) { - step = scope_Spectrum.xNumSteps[ index ]; - } - - // Default to a 'full' step. - if ( !step ) { - step = high-low; - } - - // Low can be 0, so test for false. If high is undefined, - // we are at the last subrange. Index 0 is already handled. - if ( low === false || high === undefined ) { - return; - } - - // Find all steps in the subrange. - for ( i = low; i <= high; i += step ) { - - // Get the percentage value for the current step, - // calculate the size for the subrange. - newPct = scope_Spectrum.toStepping( i ); - pctDifference = newPct - prevPct; - - steps = pctDifference / density; - realSteps = Math.round(steps); - - // This ratio represents the ammount of percentage-space a point indicates. - // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided. - // Round the percentage offset to an even number, then divide by two - // to spread the offset on both sides of the range. - stepsize = pctDifference/realSteps; - - // Divide all points evenly, adding the correct number to this subrange. - // Run up to <= so that 100% gets a point, event if ignoreLast is set. - for ( q = 1; q <= realSteps; q += 1 ) { - - // The ratio between the rounded value and the actual size might be ~1% off. - // Correct the percentage offset by the number of points - // per subrange. density = 1 will result in 100 points on the - // full range, 2 for 50, 4 for 25, etc. - pctPos = prevPct + ( q * stepsize ); - indexes[pctPos.toFixed(5)] = ['x', 0]; - } - - // Determine the point type. - type = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 ); - - // Enforce the 'ignoreFirst' option by overwriting the type for 0. - if ( !index && ignoreFirst ) { - type = 0; - } - - if ( !(i === high && ignoreLast)) { - // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value. - indexes[newPct.toFixed(5)] = [i, type]; - } - - // Update the percentage count. - prevPct = newPct; - } - }); - - // Reset the spectrum. - scope_Spectrum.direction = originalSpectrumDirection; - - return indexes; - } - - function addMarking ( spread, filterFunc, formatter ) { - - var style = ['horizontal', 'vertical'][options.ort], - element = document.createElement('div'); - - addClass(element, 'noUi-pips'); - addClass(element, 'noUi-pips-' + style); - - function getSize( type ){ - return [ '-normal', '-large', '-sub' ][type]; - } - - function getTags( offset, source, values ) { - return 'class="' + source + ' ' + - source + '-' + style + ' ' + - source + getSize(values[1]) + - '" style="' + options.style + ': ' + offset + '%"'; - } - - function addSpread ( offset, values ){ - - if ( scope_Spectrum.direction ) { - offset = 100 - offset; - } - - // Apply the filter function, if it is set. - values[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1]; - - // Add a marker for every point - element.innerHTML += '
                  '; - - // Values are only appended for points marked '1' or '2'. - if ( values[1] ) { - element.innerHTML += '
                  ' + formatter.to(values[0]) + '
                  '; - } - } + // Map legacy options + if ( entry === 'lower' ) { + entry = [true, false]; + } - // Append all points. - Object.keys(spread).forEach(function(a){ - addSpread(a, spread[a]); - }); + else if ( entry === 'upper' ) { + entry = [false, true]; + } - return element; - } + // Handle boolean options + if ( entry === true || entry === false ) { - function pips ( grid ) { + for ( i = 1; i < parsed.handles; i++ ) { + connect.push(entry); + } - var mode = grid.mode, - density = grid.density || 1, - filter = grid.filter || false, - values = grid.values || false, - stepped = grid.stepped || false, - group = getGroup( mode, values, stepped ), - spread = generateSpread( density, mode, group ), - format = grid.format || { - to: Math.round - }; + connect.push(false); + } - return scope_Target.appendChild(addMarking( - spread, - filter, - format - )); - } + // Reject invalid input + else if ( !Array.isArray( entry ) || !entry.length || entry.length !== parsed.handles + 1 ) { + throw new Error("noUiSlider: 'connect' option doesn't match handle count."); + } + else { + connect = entry; + } - // Shorthand for base dimensions. - function baseSize ( ) { - return scope_Base['offset' + ['Width', 'Height'][options.ort]]; - } + parsed.connect = connect; + } - // External event handling - function fireEvent ( event, handleNumber ) { + function testOrientation ( parsed, entry ) { + + // Set orientation to an a numerical value for easy + // array selection. + switch ( entry ){ + case 'horizontal': + parsed.ort = 0; + break; + case 'vertical': + parsed.ort = 1; + break; + default: + throw new Error("noUiSlider: 'orientation' option is invalid."); + } + } - if ( handleNumber !== undefined ) { - handleNumber = Math.abs(handleNumber - options.dir); - } + function testMargin ( parsed, entry ) { - Object.keys(scope_Events).forEach(function( targetEvent ) { + if ( !isNumeric(entry) ){ + throw new Error("noUiSlider: 'margin' option must be numeric."); + } - var eventType = targetEvent.split('.')[0]; + // Issue #582 + if ( entry === 0 ) { + return; + } - if ( event === eventType ) { - scope_Events[targetEvent].forEach(function( callback ) { - // .reverse is in place - // Return values as array, so arg_1[arg_2] is always valid. - callback( asArray(valueGet()), handleNumber, inSliderOrder(Array.prototype.slice.call(scope_Values)) ); - }); - } - }); - } + parsed.margin = parsed.spectrum.getMargin(entry); - // Returns the input array, respecting the slider direction configuration. - function inSliderOrder ( values ) { + if ( !parsed.margin ) { + throw new Error("noUiSlider: 'margin' option is only supported on linear sliders."); + } + } - // If only one handle is used, return a single value. - if ( values.length === 1 ){ - return values[0]; - } + function testLimit ( parsed, entry ) { - if ( options.dir ) { - return values.reverse(); - } + if ( !isNumeric(entry) ){ + throw new Error("noUiSlider: 'limit' option must be numeric."); + } - return values; - } + parsed.limit = parsed.spectrum.getMargin(entry); + if ( !parsed.limit || parsed.handles < 2 ) { + throw new Error("noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles."); + } + } - // Handler for attaching events trough a proxy. - function attach ( events, element, callback, data ) { + function testPadding ( parsed, entry ) { - // This function can be used to 'filter' events to the slider. - // element is a node, not a nodeList + if ( !isNumeric(entry) ){ + throw new Error("noUiSlider: 'padding' option must be numeric."); + } - var method = function ( e ){ + if ( entry === 0 ) { + return; + } - if ( scope_Target.hasAttribute('disabled') ) { - return false; - } + parsed.padding = parsed.spectrum.getMargin(entry); - // Stop if an active 'tap' transition is taking place. - if ( hasClass(scope_Target, Classes[14]) ) { - return false; - } + if ( !parsed.padding ) { + throw new Error("noUiSlider: 'padding' option is only supported on linear sliders."); + } - e = fixEvent(e); + if ( parsed.padding < 0 ) { + throw new Error("noUiSlider: 'padding' option must be a positive number."); + } - // Ignore right or middle clicks on start #454 - if ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) { - return false; - } + if ( parsed.padding >= 50 ) { + throw new Error("noUiSlider: 'padding' option must be less than half the range."); + } + } - e.calcPoint = e.points[ options.ort ]; + function testDirection ( parsed, entry ) { + + // Set direction as a numerical value for easy parsing. + // Invert connection for RTL sliders, so that the proper + // handles get the connect/background classes. + switch ( entry ) { + case 'ltr': + parsed.dir = 0; + break; + case 'rtl': + parsed.dir = 1; + break; + default: + throw new Error("noUiSlider: 'direction' option was not recognized."); + } + } - // Call the event handler with the event [ and additional data ]. - callback ( e, data ); + function testBehaviour ( parsed, entry ) { + + // Make sure the input is a string. + if ( typeof entry !== 'string' ) { + throw new Error("noUiSlider: 'behaviour' must be a string containing options."); + } + + // Check if the string contains any keywords. + // None are required. + var tap = entry.indexOf('tap') >= 0; + var drag = entry.indexOf('drag') >= 0; + var fixed = entry.indexOf('fixed') >= 0; + var snap = entry.indexOf('snap') >= 0; + var hover = entry.indexOf('hover') >= 0; + + if ( fixed ) { + + if ( parsed.handles !== 2 ) { + throw new Error("noUiSlider: 'fixed' behaviour must be used with 2 handles"); + } + + // Use margin to enforce fixed state + testMargin(parsed, parsed.start[1] - parsed.start[0]); + } + + parsed.events = { + tap: tap || snap, + drag: drag, + fixed: fixed, + snap: snap, + hover: hover + }; + } - }, methods = []; + function testTooltips ( parsed, entry ) { - // Bind a closure on the target for every event type. - events.split(' ').forEach(function( eventName ){ - element.addEventListener(eventName, method, false); - methods.push([eventName, method]); - }); + if ( entry === false ) { + return; + } - return methods; - } + else if ( entry === true ) { - // Handle movement on document for handle and range drag. - function move ( event, data ) { + parsed.tooltips = []; - var handles = data.handles || scope_Handles, positions, state = false, - proposal = ((event.calcPoint - data.start) * 100) / baseSize(), - handleNumber = handles[0] === scope_Handles[0] ? 0 : 1, i; + for ( var i = 0; i < parsed.handles; i++ ) { + parsed.tooltips.push(true); + } + } - // Calculate relative positions for the handles. - positions = getPositions( proposal, data.positions, handles.length > 1); + else { - state = setHandle ( handles[0], positions[handleNumber], handles.length === 1 ); + parsed.tooltips = asArray(entry); - if ( handles.length > 1 ) { + if ( parsed.tooltips.length !== parsed.handles ) { + throw new Error("noUiSlider: must pass a formatter for all handles."); + } - state = setHandle ( handles[1], positions[handleNumber?0:1], false ) || state; + parsed.tooltips.forEach(function(formatter){ + if ( typeof formatter !== 'boolean' && (typeof formatter !== 'object' || typeof formatter.to !== 'function') ) { + throw new Error("noUiSlider: 'tooltips' must be passed a formatter or 'false'."); + } + }); + } + } - if ( state ) { - // fire for both handles - for ( i = 0; i < data.handles.length; i++ ) { - fireEvent('slide', i); - } - } - } else if ( state ) { - // Fire for a single handle - fireEvent('slide', handleNumber); - } - } + function testFormat ( parsed, entry ) { - // Unbind move events on document, call callbacks. - function end ( event, data ) { + parsed.format = entry; - // The handle is no longer active, so remove the class. - var active = scope_Base.getElementsByClassName(Classes[15]), - handleNumber = data.handles[0] === scope_Handles[0] ? 0 : 1; + // Any object with a to and from method is supported. + if ( typeof entry.to === 'function' && typeof entry.from === 'function' ) { + return true; + } - if ( active.length ) { - removeClass(active[0], Classes[15]); - } + throw new Error("noUiSlider: 'format' requires 'to' and 'from' methods."); + } - // Remove cursor styles and text-selection events bound to the body. - if ( event.cursor ) { - document.body.style.cursor = ''; - document.body.removeEventListener('selectstart', document.body.noUiListener); - } + function testCssPrefix ( parsed, entry ) { - var d = document.documentElement; + if ( entry !== undefined && typeof entry !== 'string' && entry !== false ) { + throw new Error("noUiSlider: 'cssPrefix' must be a string or `false`."); + } - // Unbind the move and end events, which are added on 'start'. - d.noUiListeners.forEach(function( c ) { - d.removeEventListener(c[0], c[1]); - }); + parsed.cssPrefix = entry; + } - // Remove dragging class. - removeClass(scope_Target, Classes[12]); + function testCssClasses ( parsed, entry ) { - // Fire the change and set events. - fireEvent('set', handleNumber); - fireEvent('change', handleNumber); - } + if ( entry !== undefined && typeof entry !== 'object' ) { + throw new Error("noUiSlider: 'cssClasses' must be an object."); + } - // Bind move events on document. - function start ( event, data ) { + if ( typeof parsed.cssPrefix === 'string' ) { + parsed.cssClasses = {}; - var d = document.documentElement; + for ( var key in entry ) { + if ( !entry.hasOwnProperty(key) ) { continue; } - // Mark the handle as 'active' so it can be styled. - if ( data.handles.length === 1 ) { - addClass(data.handles[0].children[0], Classes[15]); + parsed.cssClasses[key] = parsed.cssPrefix + entry[key]; + } + } else { + parsed.cssClasses = entry; + } + } - // Support 'disabled' handles - if ( data.handles[0].hasAttribute('disabled') ) { - return false; - } - } + function testUseRaf ( parsed, entry ) { + if ( entry === true || entry === false ) { + parsed.useRequestAnimationFrame = entry; + } else { + throw new Error("noUiSlider: 'useRequestAnimationFrame' option should be true (default) or false."); + } + } - // A drag should never propagate up to the 'tap' event. - event.stopPropagation(); + // Test all developer settings and parse to assumption-safe values. + function testOptions ( options ) { - // Attach the move and end events. - var moveEvent = attach(actions.move, d, move, { - start: event.calcPoint, - handles: data.handles, - positions: [ - scope_Locations[0], - scope_Locations[scope_Handles.length - 1] - ] - }), endEvent = attach(actions.end, d, end, { - handles: data.handles - }); + // To prove a fix for #537, freeze options here. + // If the object is modified, an error will be thrown. + // Object.freeze(options); - d.noUiListeners = moveEvent.concat(endEvent); + var parsed = { + margin: 0, + limit: 0, + padding: 0, + animate: true, + animationDuration: 300, + format: defaultFormatter + }; + + // Tests are executed in the order they are presented here. + var tests = { + 'step': { r: false, t: testStep }, + 'start': { r: true, t: testStart }, + 'connect': { r: true, t: testConnect }, + 'direction': { r: true, t: testDirection }, + 'snap': { r: false, t: testSnap }, + 'animate': { r: false, t: testAnimate }, + 'animationDuration': { r: false, t: testAnimationDuration }, + 'range': { r: true, t: testRange }, + 'orientation': { r: false, t: testOrientation }, + 'margin': { r: false, t: testMargin }, + 'limit': { r: false, t: testLimit }, + 'padding': { r: false, t: testPadding }, + 'behaviour': { r: true, t: testBehaviour }, + 'format': { r: false, t: testFormat }, + 'tooltips': { r: false, t: testTooltips }, + 'cssPrefix': { r: false, t: testCssPrefix }, + 'cssClasses': { r: false, t: testCssClasses }, + 'useRequestAnimationFrame': { r: false, t: testUseRaf } + }; + + var defaults = { + 'connect': false, + 'direction': 'ltr', + 'behaviour': 'tap', + 'orientation': 'horizontal', + 'cssPrefix' : 'noUi-', + 'cssClasses': { + target: 'target', + base: 'base', + origin: 'origin', + handle: 'handle', + handleTouchArea: 'handle-touch-area', + handleLower: 'handle-lower', + handleUpper: 'handle-upper', + horizontal: 'horizontal', + vertical: 'vertical', + background: 'background', + connect: 'connect', + ltr: 'ltr', + rtl: 'rtl', + draggable: 'draggable', + drag: 'state-drag', + tap: 'state-tap', + active: 'active', + tooltip: 'tooltip', + pips: 'pips', + pipsHorizontal: 'pips-horizontal', + pipsVertical: 'pips-vertical', + marker: 'marker', + markerHorizontal: 'marker-horizontal', + markerVertical: 'marker-vertical', + markerNormal: 'marker-normal', + markerLarge: 'marker-large', + markerSub: 'marker-sub', + value: 'value', + valueHorizontal: 'value-horizontal', + valueVertical: 'value-vertical', + valueNormal: 'value-normal', + valueLarge: 'value-large', + valueSub: 'value-sub' + }, + 'useRequestAnimationFrame': true + }; - // Text selection isn't an issue on touch devices, - // so adding cursor styles can be skipped. - if ( event.cursor ) { + // Run all options through a testing mechanism to ensure correct + // input. It should be noted that options might get modified to + // be handled properly. E.g. wrapping integers in arrays. + Object.keys(tests).forEach(function( name ){ - // Prevent the 'I' cursor and extend the range-drag cursor. - document.body.style.cursor = getComputedStyle(event.target).cursor; + // If the option isn't set, but it is required, throw an error. + if ( options[name] === undefined && defaults[name] === undefined ) { - // Mark the target with a dragging state. - if ( scope_Handles.length > 1 ) { - addClass(scope_Target, Classes[12]); - } - - var f = function(){ - return false; - }; - - document.body.noUiListener = f; + if ( tests[name].r ) { + throw new Error("noUiSlider: '" + name + "' is required."); + } - // Prevent text selection when dragging the handles. - document.body.addEventListener('selectstart', f, false); - } - } - - // Move closest handle to tapped location. - function tap ( event ) { - - var location = event.calcPoint, total = 0, handleNumber, to; - - // The tap event shouldn't propagate up and cause 'edge' to run. - event.stopPropagation(); - - // Add up the handle offsets. - scope_Handles.forEach(function(a){ - total += offset(a)[ options.style ]; - }); - - // Find the handle closest to the tapped position. - handleNumber = ( location < total/2 || scope_Handles.length === 1 ) ? 0 : 1; - - location -= offset(scope_Base)[ options.style ]; - - // Calculate the new position. - to = ( location * 100 ) / baseSize(); - - if ( !options.events.snap ) { - // Flag the slider as it is now in a transitional state. - // Transition takes 300 ms, so re-enable the slider afterwards. - addClassFor( scope_Target, Classes[14], 300 ); - } - - // Support 'disabled' handles - if ( scope_Handles[handleNumber].hasAttribute('disabled') ) { - return false; - } - - // Find the closest handle and calculate the tapped point. - // The set handle to the new position. - setHandle( scope_Handles[handleNumber], to ); - - fireEvent('slide', handleNumber); - fireEvent('set', handleNumber); - fireEvent('change', handleNumber); - - if ( options.events.snap ) { - start(event, { handles: [scope_Handles[total]] }); - } - } - - // Attach events to several slider parts. - function events ( behaviour ) { - - var i, drag; - - // Attach the standard drag event to the handles. - if ( !behaviour.fixed ) { - - for ( i = 0; i < scope_Handles.length; i += 1 ) { - - // These events are only bound to the visual handle - // element, not the 'real' origin element. - attach ( actions.start, scope_Handles[i].children[0], start, { - handles: [ scope_Handles[i] ] - }); - } - } - - // Attach the tap event to the slider base. - if ( behaviour.tap ) { - - attach ( actions.start, scope_Base, tap, { - handles: scope_Handles - }); - } + return true; + } - // Make the range dragable. - if ( behaviour.drag ){ + tests[name].t( parsed, options[name] === undefined ? defaults[name] : options[name] ); + }); + + // Forward pips options + parsed.pips = options.pips; + + var styles = [['left', 'top'], ['right', 'bottom']]; + + // Pre-define the styles. + parsed.style = styles[parsed.dir][parsed.ort]; + parsed.styleOposite = styles[parsed.dir?0:1][parsed.ort]; + + return parsed; + } - drag = [scope_Base.getElementsByClassName( Classes[7] )[0]]; - addClass(drag[0], Classes[10]); - // When the range is fixed, the entire range can - // be dragged by the handles. The handle in the first - // origin will propagate the start event upward, - // but it needs to be bound manually on the other. - if ( behaviour.fixed ) { - drag.push(scope_Handles[(drag[0] === scope_Handles[0] ? 1 : 0)].children[0]); - } + function closure ( target, options, originalOptions ){ - drag.forEach(function( element ) { - attach ( actions.start, element, start, { - handles: scope_Handles - }); - }); - } - } + var actions = getActions( ); + // All variables local to 'closure' are prefixed with 'scope_' + var scope_Target = target; + var scope_Locations = []; + var scope_Base; + var scope_Handles; + var scope_HandleNumbers = []; + var scope_ActiveHandle = false; + var scope_Connects; + var scope_Spectrum = options.spectrum; + var scope_Values = []; + var scope_Events = {}; + var scope_Self; - // Test suggested values and apply margin, step. - function setHandle ( handle, to, noLimitOption ) { - - var trigger = handle !== scope_Handles[0] ? 1 : 0, - lowerMargin = scope_Locations[0] + options.margin, - upperMargin = scope_Locations[1] - options.margin, - lowerLimit = scope_Locations[0] + options.limit, - upperLimit = scope_Locations[1] - options.limit; - // For sliders with multiple handles, - // limit movement to the other handle. - // Apply the margin option by adding it to the handle positions. - if ( scope_Handles.length > 1 ) { - to = trigger ? Math.max( to, lowerMargin ) : Math.min( to, upperMargin ); - } - - // The limit option has the opposite effect, limiting handles to a - // maximum distance from another. Limit must be > 0, as otherwise - // handles would be unmoveable. 'noLimitOption' is set to 'false' - // for the .val() method, except for pass 4/4. - if ( noLimitOption !== false && options.limit && scope_Handles.length > 1 ) { - to = trigger ? Math.min ( to, lowerLimit ) : Math.max( to, upperLimit ); - } - - // Handle the step option. - to = scope_Spectrum.getStep( to ); - - // Limit to 0/100 for .val input, trim anything beyond 7 digits, as - // JavaScript has some issues in its floating point implementation. - to = limit(parseFloat(to.toFixed(7))); - - // Return false if handle can't move. - if ( to === scope_Locations[trigger] ) { - return false; - } - - // Set the handle to the new position. - handle.style[options.style] = to + '%'; - - // Force proper handle stacking - if ( !handle.previousSibling ) { - removeClass(handle, Classes[17]); - if ( to > 50 ) { - addClass(handle, Classes[17]); - } - } - - // Update locations. - scope_Locations[trigger] = to; - - // Convert the value to the slider stepping/range. - scope_Values[trigger] = scope_Spectrum.fromStepping( to ); - - fireEvent('update', trigger); - - return true; - } - - // Loop values from value method and apply them. - function setValues ( count, values ) { - - var i, trigger, to; - - // With the limit option, we'll need another limiting pass. - if ( options.limit ) { - count += 1; - } - - // If there are multiple handles to be set run the setting - // mechanism twice for the first handle, to make sure it - // can be bounced of the second one properly. - for ( i = 0; i < count; i += 1 ) { - - trigger = i%2; - - // Get the current argument from the array. - to = values[trigger]; - - // Setting with null indicates an 'ignore'. - // Inputting 'false' is invalid. - if ( to !== null && to !== false ) { - - // If a formatted number was passed, attemt to decode it. - if ( typeof to === 'number' ) { - to = String(to); - } - - to = options.format.from( to ); - - // Request an update for all links if the value was invalid. - // Do so too if setting the handle fails. - if ( to === false || isNaN(to) || setHandle( scope_Handles[trigger], scope_Spectrum.toStepping( to ), i === (3 - options.dir) ) === false ) { - fireEvent('update', trigger); - } - } - } - } - - // Set the slider value. - function valueSet ( input ) { - - var count, values = asArray( input ), i; - - // The RTL settings is implemented by reversing the front-end, - // internal mechanisms are the same. - if ( options.dir && options.handles > 1 ) { - values.reverse(); - } + // Append a origin to the base + function addOrigin ( base, handleNumber ) { - // Animation is optional. - // Make sure the initial values where set before using animated placement. - if ( options.animate && scope_Locations[0] !== -1 ) { - addClassFor( scope_Target, Classes[14], 300 ); - } + var origin = addNodeTo(base, options.cssClasses.origin); + var handle = addNodeTo(origin, options.cssClasses.handle); + addNodeTo(handle, options.cssClasses.handleTouchArea); - // Determine how often to set the handles. - count = scope_Handles.length > 1 ? 3 : 1; + handle.setAttribute('data-handle', handleNumber); - if ( values.length === 1 ) { - count = 1; - } + if ( handleNumber === 0 ) { + addClass(handle, options.cssClasses.handleLower); + } - setValues ( count, values ); + else if ( handleNumber === options.handles - 1 ) { + addClass(handle, options.cssClasses.handleUpper); + } - // Fire the 'set' event for both handles. - for ( i = 0; i < scope_Handles.length; i++ ) { - fireEvent('set', i); - } - } + return origin; + } - // Get the slider value. - function valueGet ( ) { + // Insert nodes for connect elements + function addConnect ( base, add ) { - var i, retour = []; + if ( !add ) { + return false; + } - // Get the value from all handles. - for ( i = 0; i < options.handles; i += 1 ){ - retour[i] = options.format.to( scope_Values[i] ); - } + return addNodeTo(base, options.cssClasses.connect); + } - return inSliderOrder( retour ); - } + // Add handles to the slider base. + function addElements ( connectOptions, base ) { - // Removes classes from the root and empties it. - function destroy ( ) { - Classes.forEach(function(cls){ - if ( !cls ) { return; } // Ignore empty classes - removeClass(scope_Target, cls); - }); - scope_Target.innerHTML = ''; - delete scope_Target.noUiSlider; - } + scope_Handles = []; + scope_Connects = []; - // Get the current step size for the slider. - function getCurrentStep ( ) { + scope_Connects.push(addConnect(base, connectOptions[0])); - // Check all locations, map them to their stepping point. - // Get the step point, then find it in the input list. - var retour = scope_Locations.map(function( location, index ){ + // [::::O====O====O====] + // connectOptions = [0, 1, 1, 1] - var step = scope_Spectrum.getApplicableStep( location ), + for ( var i = 0; i < options.handles; i++ ) { + // Keep a list of all added handles. + scope_Handles.push(addOrigin(base, i)); + scope_HandleNumbers[i] = i; + scope_Connects.push(addConnect(base, connectOptions[i + 1])); + } + } - // As per #391, the comparison for the decrement step can have some rounding issues. - // Round the value to the precision used in the step. - stepDecimals = countDecimals(String(step[2])), + // Initialize a single slider. + function addSlider ( target ) { - // Get the current numeric value - value = scope_Values[index], + // Apply classes and data to the target. + addClass(target, options.cssClasses.target); - // To move the slider 'one step up', the current step value needs to be added. - // Use null if we are at the maximum slider value. - increment = location === 100 ? null : step[2], + if ( options.dir === 0 ) { + addClass(target, options.cssClasses.ltr); + } else { + addClass(target, options.cssClasses.rtl); + } - // Going 'one step down' might put the slider in a different sub-range, so we - // need to switch between the current or the previous step. - prev = Number((value - step[2]).toFixed(stepDecimals)), + if ( options.ort === 0 ) { + addClass(target, options.cssClasses.horizontal); + } else { + addClass(target, options.cssClasses.vertical); + } - // If the value fits the step, return the current step value. Otherwise, use the - // previous step. Return null if the slider is at its minimum value. - decrement = location === 0 ? null : (prev >= step[1]) ? step[2] : (step[0] || false); + scope_Base = addNodeTo(target, options.cssClasses.base); + } - return [decrement, increment]; - }); - - // Return values in the proper order. - return inSliderOrder( retour ); - } - // Attach an event to this slider, possibly including a namespace - function bindEvent ( namespacedEvent, callback ) { - scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || []; - scope_Events[namespacedEvent].push(callback); + function addTooltip ( handle, handleNumber ) { - // If the event bound is 'update,' fire it immediately for all handles. - if ( namespacedEvent.split('.')[0] === 'update' ) { - scope_Handles.forEach(function(a, index){ - fireEvent('update', index); - }); - } - } + if ( !options.tooltips[handleNumber] ) { + return false; + } - // Undo attachment of event - function removeEvent ( namespacedEvent ) { + return addNodeTo(handle.firstChild, options.cssClasses.tooltip); + } - var event = namespacedEvent.split('.')[0], - namespace = namespacedEvent.substring(event.length); + // The tooltips option is a shorthand for using the 'update' event. + function tooltips ( ) { - Object.keys(scope_Events).forEach(function( bind ){ + // Tooltips are added with options.tooltips in original order. + var tips = scope_Handles.map(addTooltip); - var tEvent = bind.split('.')[0], - tNamespace = bind.substring(tEvent.length); + bindEvent('update', function(values, handleNumber, unencoded) { - if ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) { - delete scope_Events[bind]; - } - }); - } + if ( !tips[handleNumber] ) { + return; + } + var formattedValue = values[handleNumber]; - // Throw an error if the slider was already initialized. - if ( scope_Target.noUiSlider ) { - throw new Error('Slider was already initialized.'); - } + if ( options.tooltips[handleNumber] !== true ) { + formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]); + } + tips[handleNumber].innerHTML = '' + formattedValue + ''; + }); + } - // Create the base element, initialise HTML and set classes. - // Add handles and links. - scope_Base = addSlider( options.dir, options.ort, scope_Target ); - scope_Handles = addHandles( options.handles, options.dir, scope_Base ); - // Set the connect classes. - addConnection ( options.connect, scope_Target, scope_Handles ); + function getGroup ( mode, values, stepped ) { - // Attach user events. - events( options.events ); + // Use the range. + if ( mode === 'range' || mode === 'steps' ) { + return scope_Spectrum.xVal; + } - if ( options.pips ) { - pips(options.pips); - } + if ( mode === 'count' ) { - return { - destroy: destroy, - steps: getCurrentStep, - on: bindEvent, - off: removeEvent, - get: valueGet, - set: valueSet - }; + // Divide 0 - 100 in 'count' parts. + var spread = ( 100 / (values-1) ), v, i = 0; + values = []; -} + // List these parts and have them handled as 'positions'. + while ((v=i++*spread) <= 100 ) { + values.push(v); + } + mode = 'positions'; + } - // Run the standard initializer - function initialize ( target, originalOptions ) { + if ( mode === 'positions' ) { - if ( !target.nodeName ) { - throw new Error('noUiSlider.create requires a single element.'); - } + // Map all percentages to on-range values. + return values.map(function( value ){ + return scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value ); + }); + } - // Test the options and create the slider environment; - var options = testOptions( originalOptions, target ), - slider = closure( target, options ); + if ( mode === 'values' ) { - // Use the public value method to set the start values. - slider.set(options.start); + // If the value must be stepped, it needs to be converted to a percentage first. + if ( stepped ) { - target.noUiSlider = slider; + return values.map(function( value ){ - if (originalOptions.tooltips === true || originalOptions.tooltips === undefined) { - // Tooltips - var tipHandles = target.getElementsByClassName('noUi-handle'), - tooltips = []; + // Convert to percentage, apply step, return to value. + return scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) ); + }); - // Add divs to the slider handles. - for ( var i = 0; i < tipHandles.length; i++ ){ - tooltips[i] = document.createElement('div'); - tipHandles[i].appendChild(tooltips[i]); - // Add a class for styling - tooltips[i].className += 'range-label'; - // Add additional markup - tooltips[i].innerHTML = ''; - // Replace the tooltip reference with the span we just added - tooltips[i] = tooltips[i].getElementsByTagName('span')[0]; - } + } + // Otherwise, we can simply use the values. + return values; + } + } - // When the slider changes, write the value to the tooltips. - target.noUiSlider.on('update', function( values, handle ){ + function generateSpread ( density, mode, group ) { - tooltips[handle].innerHTML = values[handle]; - }); - } - } + function safeIncrement(value, increment) { + // Avoid floating point variance by dropping the smallest decimal places. + return (value + increment).toFixed(7) / 1; + } + + var indexes = {}, + firstInRange = scope_Spectrum.xVal[0], + lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1], + ignoreFirst = false, + ignoreLast = false, + prevPct = 0; + + // Create a copy of the group, sort it and filter away all duplicates. + group = unique(group.slice().sort(function(a, b){ return a - b; })); + + // Make sure the range starts with the first element. + if ( group[0] !== firstInRange ) { + group.unshift(firstInRange); + ignoreFirst = true; + } + + // Likewise for the last one. + if ( group[group.length - 1] !== lastInRange ) { + group.push(lastInRange); + ignoreLast = true; + } + + group.forEach(function ( current, index ) { + + // Get the current step and the lower + upper positions. + var step, i, q, + low = current, + high = group[index+1], + newPct, pctDifference, pctPos, type, + steps, realSteps, stepsize; + + // When using 'steps' mode, use the provided steps. + // Otherwise, we'll step on to the next subrange. + if ( mode === 'steps' ) { + step = scope_Spectrum.xNumSteps[ index ]; + } + + // Default to a 'full' step. + if ( !step ) { + step = high-low; + } + + // Low can be 0, so test for false. If high is undefined, + // we are at the last subrange. Index 0 is already handled. + if ( low === false || high === undefined ) { + return; + } + + // Make sure step isn't 0, which would cause an infinite loop (#654) + step = Math.max(step, 0.0000001); + + // Find all steps in the subrange. + for ( i = low; i <= high; i = safeIncrement(i, step) ) { + + // Get the percentage value for the current step, + // calculate the size for the subrange. + newPct = scope_Spectrum.toStepping( i ); + pctDifference = newPct - prevPct; + + steps = pctDifference / density; + realSteps = Math.round(steps); + + // This ratio represents the ammount of percentage-space a point indicates. + // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided. + // Round the percentage offset to an even number, then divide by two + // to spread the offset on both sides of the range. + stepsize = pctDifference/realSteps; + + // Divide all points evenly, adding the correct number to this subrange. + // Run up to <= so that 100% gets a point, event if ignoreLast is set. + for ( q = 1; q <= realSteps; q += 1 ) { + + // The ratio between the rounded value and the actual size might be ~1% off. + // Correct the percentage offset by the number of points + // per subrange. density = 1 will result in 100 points on the + // full range, 2 for 50, 4 for 25, etc. + pctPos = prevPct + ( q * stepsize ); + indexes[pctPos.toFixed(5)] = ['x', 0]; + } + + // Determine the point type. + type = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 ); + + // Enforce the 'ignoreFirst' option by overwriting the type for 0. + if ( !index && ignoreFirst ) { + type = 0; + } + + if ( !(i === high && ignoreLast)) { + // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value. + indexes[newPct.toFixed(5)] = [i, type]; + } + + // Update the percentage count. + prevPct = newPct; + } + }); + + return indexes; + } + + function addMarking ( spread, filterFunc, formatter ) { + + var element = document.createElement('div'), + out = '', + valueSizeClasses = [ + options.cssClasses.valueNormal, + options.cssClasses.valueLarge, + options.cssClasses.valueSub + ], + markerSizeClasses = [ + options.cssClasses.markerNormal, + options.cssClasses.markerLarge, + options.cssClasses.markerSub + ], + valueOrientationClasses = [ + options.cssClasses.valueHorizontal, + options.cssClasses.valueVertical + ], + markerOrientationClasses = [ + options.cssClasses.markerHorizontal, + options.cssClasses.markerVertical + ]; + + addClass(element, options.cssClasses.pips); + addClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical); + + function getClasses( type, source ){ + var a = source === options.cssClasses.value, + orientationClasses = a ? valueOrientationClasses : markerOrientationClasses, + sizeClasses = a ? valueSizeClasses : markerSizeClasses; + + return source + ' ' + orientationClasses[options.ort] + ' ' + sizeClasses[type]; + } + + function getTags( offset, source, values ) { + return 'class="' + getClasses(values[1], source) + '" style="' + options.style + ': ' + offset + '%"'; + } + + function addSpread ( offset, values ){ + + // Apply the filter function, if it is set. + values[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1]; + + // Add a marker for every point + out += '
                  '; + + // Values are only appended for points marked '1' or '2'. + if ( values[1] ) { + out += '
                  ' + formatter.to(values[0]) + '
                  '; + } + } + + // Append all points. + Object.keys(spread).forEach(function(a){ + addSpread(a, spread[a]); + }); + + element.innerHTML = out; + + return element; + } + + function pips ( grid ) { + + var mode = grid.mode, + density = grid.density || 1, + filter = grid.filter || false, + values = grid.values || false, + stepped = grid.stepped || false, + group = getGroup( mode, values, stepped ), + spread = generateSpread( density, mode, group ), + format = grid.format || { + to: Math.round + }; + + return scope_Target.appendChild(addMarking( + spread, + filter, + format + )); + } + + + // Shorthand for base dimensions. + function baseSize ( ) { + var rect = scope_Base.getBoundingClientRect(), alt = 'offset' + ['Width', 'Height'][options.ort]; + return options.ort === 0 ? (rect.width||scope_Base[alt]) : (rect.height||scope_Base[alt]); + } + + // Handler for attaching events trough a proxy. + function attachEvent ( events, element, callback, data ) { + + // This function can be used to 'filter' events to the slider. + // element is a node, not a nodeList + + var method = function ( e ){ + + if ( scope_Target.hasAttribute('disabled') ) { + return false; + } + + // Stop if an active 'tap' transition is taking place. + if ( hasClass(scope_Target, options.cssClasses.tap) ) { + return false; + } + + e = fixEvent(e, data.pageOffset); + + // Handle reject of multitouch + if ( !e ) { + return false; + } + + // Ignore right or middle clicks on start #454 + if ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) { + return false; + } + + // Ignore right or middle clicks on start #454 + if ( data.hover && e.buttons ) { + return false; + } + + e.calcPoint = e.points[ options.ort ]; + + // Call the event handler with the event [ and additional data ]. + callback ( e, data ); + }; + + var methods = []; + + // Bind a closure on the target for every event type. + events.split(' ').forEach(function( eventName ){ + element.addEventListener(eventName, method, false); + methods.push([eventName, method]); + }); + + return methods; + } + + // Provide a clean event with standardized offset values. + function fixEvent ( e, pageOffset ) { + + // Prevent scrolling and panning on touch events, while + // attempting to slide. The tap event also depends on this. + e.preventDefault(); + + // Filter the event to register the type, which can be + // touch, mouse or pointer. Offset changes need to be + // made on an event specific basis. + var touch = e.type.indexOf('touch') === 0; + var mouse = e.type.indexOf('mouse') === 0; + var pointer = e.type.indexOf('pointer') === 0; + var x; + var y; + + // IE10 implemented pointer events with a prefix; + if ( e.type.indexOf('MSPointer') === 0 ) { + pointer = true; + } + + if ( touch ) { + + // Fix bug when user touches with two or more fingers on mobile devices. + // It's useful when you have two or more sliders on one page, + // that can be touched simultaneously. + // #649, #663, #668 + if ( e.touches.length > 1 ) { + return false; + } + + // noUiSlider supports one movement at a time, + // so we can select the first 'changedTouch'. + x = e.changedTouches[0].pageX; + y = e.changedTouches[0].pageY; + } + + pageOffset = pageOffset || getPageOffset(); + + if ( mouse || pointer ) { + x = e.clientX + pageOffset.x; + y = e.clientY + pageOffset.y; + } + + e.pageOffset = pageOffset; + e.points = [x, y]; + e.cursor = mouse || pointer; // Fix #435 + + return e; + } + + // Translate a coordinate in the document to a percentage on the slider + function calcPointToPercentage ( calcPoint ) { + var location = calcPoint - offset(scope_Base, options.ort); + var proposal = ( location * 100 ) / baseSize(); + return options.dir ? 100 - proposal : proposal; + } + + // Find handle closest to a certain percentage on the slider + function getClosestHandle ( proposal ) { + + var closest = 100; + var handleNumber = false; + + scope_Handles.forEach(function(handle, index){ + + // Disabled handles are ignored + if ( handle.hasAttribute('disabled') ) { + return; + } + + var pos = Math.abs(scope_Locations[index] - proposal); + + if ( pos < closest ) { + handleNumber = index; + closest = pos; + } + }); + + return handleNumber; + } + + // Moves handle(s) by a percentage + // (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...]) + function moveHandles ( upward, proposal, locations, handleNumbers ) { + + var proposals = locations.slice(); + + var b = [!upward, upward]; + var f = [upward, !upward]; + + // Copy handleNumbers so we don't change the dataset + handleNumbers = handleNumbers.slice(); + + // Check to see which handle is 'leading'. + // If that one can't move the second can't either. + if ( upward ) { + handleNumbers.reverse(); + } + + // Step 1: get the maximum percentage that any of the handles can move + if ( handleNumbers.length > 1 ) { + + handleNumbers.forEach(function(handleNumber, o) { + + var to = checkHandlePosition(proposals, handleNumber, proposals[handleNumber] + proposal, b[o], f[o]); + + // Stop if one of the handles can't move. + if ( to === false ) { + proposal = 0; + } else { + proposal = to - proposals[handleNumber]; + proposals[handleNumber] = to; + } + }); + } + + // If using one handle, check backward AND forward + else { + b = f = [true]; + } + + var state = false; + + // Step 2: Try to set the handles with the found percentage + handleNumbers.forEach(function(handleNumber, o) { + state = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state; + }); + + // Step 3: If a handle moved, fire events + if ( state ) { + handleNumbers.forEach(function(handleNumber){ + fireEvent('update', handleNumber); + fireEvent('slide', handleNumber); + }); + } + } + + // External event handling + function fireEvent ( eventName, handleNumber, tap ) { + + Object.keys(scope_Events).forEach(function( targetEvent ) { + + var eventType = targetEvent.split('.')[0]; + + if ( eventName === eventType ) { + scope_Events[targetEvent].forEach(function( callback ) { + + callback.call( + // Use the slider public API as the scope ('this') + scope_Self, + // Return values as array, so arg_1[arg_2] is always valid. + scope_Values.map(options.format.to), + // Handle index, 0 or 1 + handleNumber, + // Unformatted slider values + scope_Values.slice(), + // Event is fired by tap, true or false + tap || false, + // Left offset of the handle, in relation to the slider + scope_Locations.slice() + ); + }); + } + }); + } + + + // Fire 'end' when a mouse or pen leaves the document. + function documentLeave ( event, data ) { + if ( event.type === "mouseout" && event.target.nodeName === "HTML" && event.relatedTarget === null ){ + eventEnd (event, data); + } + } + + // Handle movement on document for handle and range drag. + function eventMove ( event, data ) { + + // Fix #498 + // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty). + // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero + // IE9 has .buttons and .which zero on mousemove. + // Firefox breaks the spec MDN defines. + if ( navigator.appVersion.indexOf("MSIE 9") === -1 && event.buttons === 0 && data.buttonsProperty !== 0 ) { + return eventEnd(event, data); + } + + // Check if we are moving up or down + var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint); + + // Convert the movement into a percentage of the slider width/height + var proposal = (movement * 100) / data.baseSize; + + moveHandles(movement > 0, proposal, data.locations, data.handleNumbers); + } + + // Unbind move events on document, call callbacks. + function eventEnd ( event, data ) { + + // The handle is no longer active, so remove the class. + if ( scope_ActiveHandle ) { + removeClass(scope_ActiveHandle, options.cssClasses.active); + scope_ActiveHandle = false; + } + + // Remove cursor styles and text-selection events bound to the body. + if ( event.cursor ) { + document.body.style.cursor = ''; + document.body.removeEventListener('selectstart', document.body.noUiListener); + } + + // Unbind the move and end events, which are added on 'start'. + document.documentElement.noUiListeners.forEach(function( c ) { + document.documentElement.removeEventListener(c[0], c[1]); + }); + + // Remove dragging class. + removeClass(scope_Target, options.cssClasses.drag); + + setZindex(); + + data.handleNumbers.forEach(function(handleNumber){ + fireEvent('set', handleNumber); + fireEvent('change', handleNumber); + fireEvent('end', handleNumber); + }); + } + + // Bind move events on document. + function eventStart ( event, data ) { + + if ( data.handleNumbers.length === 1 ) { + + var handle = scope_Handles[data.handleNumbers[0]]; + + // Ignore 'disabled' handles + if ( handle.hasAttribute('disabled') ) { + return false; + } + + // Mark the handle as 'active' so it can be styled. + scope_ActiveHandle = handle.children[0]; + addClass(scope_ActiveHandle, options.cssClasses.active); + } + + // Fix #551, where a handle gets selected instead of dragged. + event.preventDefault(); + + // A drag should never propagate up to the 'tap' event. + event.stopPropagation(); + + // Attach the move and end events. + var moveEvent = attachEvent(actions.move, document.documentElement, eventMove, { + startCalcPoint: event.calcPoint, + baseSize: baseSize(), + pageOffset: event.pageOffset, + handleNumbers: data.handleNumbers, + buttonsProperty: event.buttons, + locations: scope_Locations.slice() + }); + + var endEvent = attachEvent(actions.end, document.documentElement, eventEnd, { + handleNumbers: data.handleNumbers + }); + + var outEvent = attachEvent("mouseout", document.documentElement, documentLeave, { + handleNumbers: data.handleNumbers + }); + + document.documentElement.noUiListeners = moveEvent.concat(endEvent, outEvent); + + // Text selection isn't an issue on touch devices, + // so adding cursor styles can be skipped. + if ( event.cursor ) { + + // Prevent the 'I' cursor and extend the range-drag cursor. + document.body.style.cursor = getComputedStyle(event.target).cursor; + + // Mark the target with a dragging state. + if ( scope_Handles.length > 1 ) { + addClass(scope_Target, options.cssClasses.drag); + } + + var f = function(){ + return false; + }; + + document.body.noUiListener = f; + + // Prevent text selection when dragging the handles. + document.body.addEventListener('selectstart', f, false); + } + + data.handleNumbers.forEach(function(handleNumber){ + fireEvent('start', handleNumber); + }); + } + + // Move closest handle to tapped location. + function eventTap ( event ) { + + // The tap event shouldn't propagate up + event.stopPropagation(); + + var proposal = calcPointToPercentage(event.calcPoint); + var handleNumber = getClosestHandle(proposal); + + // Tackle the case that all handles are 'disabled'. + if ( handleNumber === false ) { + return false; + } + + // Flag the slider as it is now in a transitional state. + // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that. + if ( !options.events.snap ) { + addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration); + } + + setHandle(handleNumber, proposal, true, true); + + setZindex(); + + fireEvent('slide', handleNumber, true); + fireEvent('set', handleNumber, true); + fireEvent('change', handleNumber, true); + fireEvent('update', handleNumber, true); + + if ( options.events.snap ) { + eventStart(event, { handleNumbers: [handleNumber] }); + } + } + + // Fires a 'hover' event for a hovered mouse/pen position. + function eventHover ( event ) { + + var proposal = calcPointToPercentage(event.calcPoint); + + var to = scope_Spectrum.getStep(proposal); + var value = scope_Spectrum.fromStepping(to); + + Object.keys(scope_Events).forEach(function( targetEvent ) { + if ( 'hover' === targetEvent.split('.')[0] ) { + scope_Events[targetEvent].forEach(function( callback ) { + callback.call( scope_Self, value ); + }); + } + }); + } + + // Attach events to several slider parts. + function bindSliderEvents ( behaviour ) { + + // Attach the standard drag event to the handles. + if ( !behaviour.fixed ) { + + scope_Handles.forEach(function( handle, index ){ + + // These events are only bound to the visual handle + // element, not the 'real' origin element. + attachEvent ( actions.start, handle.children[0], eventStart, { + handleNumbers: [index] + }); + }); + } + + // Attach the tap event to the slider base. + if ( behaviour.tap ) { + attachEvent (actions.start, scope_Base, eventTap, {}); + } + + // Fire hover events + if ( behaviour.hover ) { + attachEvent (actions.move, scope_Base, eventHover, { hover: true }); + } + + // Make the range draggable. + if ( behaviour.drag ){ + + scope_Connects.forEach(function( connect, index ){ + + if ( connect === false || index === 0 || index === scope_Connects.length - 1 ) { + return; + } + + var handleBefore = scope_Handles[index - 1]; + var handleAfter = scope_Handles[index]; + var eventHolders = [connect]; + + addClass(connect, options.cssClasses.draggable); + + // When the range is fixed, the entire range can + // be dragged by the handles. The handle in the first + // origin will propagate the start event upward, + // but it needs to be bound manually on the other. + if ( behaviour.fixed ) { + eventHolders.push(handleBefore.children[0]); + eventHolders.push(handleAfter.children[0]); + } + + eventHolders.forEach(function( eventHolder ) { + attachEvent ( actions.start, eventHolder, eventStart, { + handles: [handleBefore, handleAfter], + handleNumbers: [index - 1, index] + }); + }); + }); + } + } + + + // Split out the handle positioning logic so the Move event can use it, too + function checkHandlePosition ( reference, handleNumber, to, lookBackward, lookForward ) { + + // For sliders with multiple handles, limit movement to the other handle. + // Apply the margin option by adding it to the handle positions. + if ( scope_Handles.length > 1 ) { + + if ( lookBackward && handleNumber > 0 ) { + to = Math.max(to, reference[handleNumber - 1] + options.margin); + } + + if ( lookForward && handleNumber < scope_Handles.length - 1 ) { + to = Math.min(to, reference[handleNumber + 1] - options.margin); + } + } + + // The limit option has the opposite effect, limiting handles to a + // maximum distance from another. Limit must be > 0, as otherwise + // handles would be unmoveable. + if ( scope_Handles.length > 1 && options.limit ) { + + if ( lookBackward && handleNumber > 0 ) { + to = Math.min(to, reference[handleNumber - 1] + options.limit); + } + + if ( lookForward && handleNumber < scope_Handles.length - 1 ) { + to = Math.max(to, reference[handleNumber + 1] - options.limit); + } + } + + // The padding option keeps the handles a certain distance from the + // edges of the slider. Padding must be > 0. + if ( options.padding ) { + + if ( handleNumber === 0 ) { + to = Math.max(to, options.padding); + } + + if ( handleNumber === scope_Handles.length - 1 ) { + to = Math.min(to, 100 - options.padding); + } + } + + to = scope_Spectrum.getStep(to); + + // Limit percentage to the 0 - 100 range + to = limit(to); + + // Return false if handle can't move + if ( to === reference[handleNumber] ) { + return false; + } + + return to; + } + + function toPct ( pct ) { + return pct + '%'; + } + + // Updates scope_Locations and scope_Values, updates visual state + function updateHandlePosition ( handleNumber, to ) { + + // Update locations. + scope_Locations[handleNumber] = to; + + // Convert the value to the slider stepping/range. + scope_Values[handleNumber] = scope_Spectrum.fromStepping(to); + + // Called synchronously or on the next animationFrame + var stateUpdate = function() { + scope_Handles[handleNumber].style[options.style] = toPct(to); + updateConnect(handleNumber); + updateConnect(handleNumber + 1); + }; + + // Set the handle to the new position. + // Use requestAnimationFrame for efficient painting. + // No significant effect in Chrome, Edge sees dramatic performace improvements. + // Option to disable is useful for unit tests, and single-step debugging. + if ( window.requestAnimationFrame && options.useRequestAnimationFrame ) { + window.requestAnimationFrame(stateUpdate); + } else { + stateUpdate(); + } + } + + function setZindex ( ) { + + scope_HandleNumbers.forEach(function(handleNumber){ + // Handles before the slider middle are stacked later = higher, + // Handles after the middle later is lower + // [[7] [8] .......... | .......... [5] [4] + var dir = (scope_Locations[handleNumber] > 50 ? -1 : 1); + var zIndex = 3 + (scope_Handles.length + (dir * handleNumber)); + scope_Handles[handleNumber].childNodes[0].style.zIndex = zIndex; + }); + } + + // Test suggested values and apply margin, step. + function setHandle ( handleNumber, to, lookBackward, lookForward ) { + + to = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward); + + if ( to === false ) { + return false; + } + + updateHandlePosition(handleNumber, to); + + return true; + } + + // Updates style attribute for connect nodes + function updateConnect ( index ) { + + // Skip connects set to false + if ( !scope_Connects[index] ) { + return; + } + + var l = 0; + var h = 100; + + if ( index !== 0 ) { + l = scope_Locations[index - 1]; + } + + if ( index !== scope_Connects.length - 1 ) { + h = scope_Locations[index]; + } + + scope_Connects[index].style[options.style] = toPct(l); + scope_Connects[index].style[options.styleOposite] = toPct(100 - h); + } + + // ... + function setValue ( to, handleNumber ) { + + // Setting with null indicates an 'ignore'. + // Inputting 'false' is invalid. + if ( to === null || to === false ) { + return; + } + + // If a formatted number was passed, attemt to decode it. + if ( typeof to === 'number' ) { + to = String(to); + } + + to = options.format.from(to); + + // Request an update for all links if the value was invalid. + // Do so too if setting the handle fails. + if ( to !== false && !isNaN(to) ) { + setHandle(handleNumber, scope_Spectrum.toStepping(to), false, false); + } + } + + // Set the slider value. + function valueSet ( input, fireSetEvent ) { + + var values = asArray(input); + var isInit = scope_Locations[0] === undefined; + + // Event fires by default + fireSetEvent = (fireSetEvent === undefined ? true : !!fireSetEvent); + + values.forEach(setValue); + + // Animation is optional. + // Make sure the initial values were set before using animated placement. + if ( options.animate && !isInit ) { + addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration); + } + + // Now that all base values are set, apply constraints + scope_HandleNumbers.forEach(function(handleNumber){ + setHandle(handleNumber, scope_Locations[handleNumber], true, false); + }); + + setZindex(); + + scope_HandleNumbers.forEach(function(handleNumber){ + + fireEvent('update', handleNumber); + + // Fire the event only for handles that received a new value, as per #579 + if ( values[handleNumber] !== null && fireSetEvent ) { + fireEvent('set', handleNumber); + } + }); + } + + // Reset slider to initial values + function valueReset ( fireSetEvent ) { + valueSet(options.start, fireSetEvent); + } + + // Get the slider value. + function valueGet ( ) { + + var values = scope_Values.map(options.format.to); + + // If only one handle is used, return a single value. + if ( values.length === 1 ){ + return values[0]; + } + + return values; + } + + // Removes classes from the root and empties it. + function destroy ( ) { + + for ( var key in options.cssClasses ) { + if ( !options.cssClasses.hasOwnProperty(key) ) { continue; } + removeClass(scope_Target, options.cssClasses[key]); + } + + while (scope_Target.firstChild) { + scope_Target.removeChild(scope_Target.firstChild); + } + + delete scope_Target.noUiSlider; + } + + // Get the current step size for the slider. + function getCurrentStep ( ) { + + // Check all locations, map them to their stepping point. + // Get the step point, then find it in the input list. + return scope_Locations.map(function( location, index ){ + + var nearbySteps = scope_Spectrum.getNearbySteps( location ); + var value = scope_Values[index]; + var increment = nearbySteps.thisStep.step; + var decrement = null; + + // If the next value in this step moves into the next step, + // the increment is the start of the next step - the current value + if ( increment !== false ) { + if ( value + increment > nearbySteps.stepAfter.startValue ) { + increment = nearbySteps.stepAfter.startValue - value; + } + } + + + // If the value is beyond the starting point + if ( value > nearbySteps.thisStep.startValue ) { + decrement = nearbySteps.thisStep.step; + } + + else if ( nearbySteps.stepBefore.step === false ) { + decrement = false; + } + + // If a handle is at the start of a step, it always steps back into the previous step first + else { + decrement = value - nearbySteps.stepBefore.highestStep; + } + + + // Now, if at the slider edges, there is not in/decrement + if ( location === 100 ) { + increment = null; + } + + else if ( location === 0 ) { + decrement = null; + } + + // As per #391, the comparison for the decrement step can have some rounding issues. + var stepDecimals = scope_Spectrum.countStepDecimals(); + + // Round per #391 + if ( increment !== null && increment !== false ) { + increment = Number(increment.toFixed(stepDecimals)); + } + + if ( decrement !== null && decrement !== false ) { + decrement = Number(decrement.toFixed(stepDecimals)); + } + + return [decrement, increment]; + }); + } + + // Attach an event to this slider, possibly including a namespace + function bindEvent ( namespacedEvent, callback ) { + scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || []; + scope_Events[namespacedEvent].push(callback); + + // If the event bound is 'update,' fire it immediately for all handles. + if ( namespacedEvent.split('.')[0] === 'update' ) { + scope_Handles.forEach(function(a, index){ + fireEvent('update', index); + }); + } + } + + // Undo attachment of event + function removeEvent ( namespacedEvent ) { + + var event = namespacedEvent && namespacedEvent.split('.')[0]; + var namespace = event && namespacedEvent.substring(event.length); + + Object.keys(scope_Events).forEach(function( bind ){ + + var tEvent = bind.split('.')[0], + tNamespace = bind.substring(tEvent.length); + + if ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) { + delete scope_Events[bind]; + } + }); + } + + // Updateable: margin, limit, padding, step, range, animate, snap + function updateOptions ( optionsToUpdate, fireSetEvent ) { + + // Spectrum is created using the range, snap, direction and step options. + // 'snap' and 'step' can be updated, 'direction' cannot, due to event binding. + // If 'snap' and 'step' are not passed, they should remain unchanged. + var v = valueGet(); + + var updateAble = ['margin', 'limit', 'padding', 'range', 'animate', 'snap', 'step', 'format']; + + // Only change options that we're actually passed to update. + updateAble.forEach(function(name){ + if ( optionsToUpdate[name] !== undefined ) { + originalOptions[name] = optionsToUpdate[name]; + } + }); + + var newOptions = testOptions(originalOptions); + + // Load new options into the slider state + updateAble.forEach(function(name){ + if ( optionsToUpdate[name] !== undefined ) { + options[name] = newOptions[name]; + } + }); + + // Save current spectrum direction as testOptions in testRange call + // doesn't rely on current direction + newOptions.spectrum.direction = scope_Spectrum.direction; + scope_Spectrum = newOptions.spectrum; + + // Limit, margin and padding depend on the spectrum but are stored outside of it. (#677) + options.margin = newOptions.margin; + options.limit = newOptions.limit; + options.padding = newOptions.padding; + + // Invalidate the current positioning so valueSet forces an update. + scope_Locations = []; + valueSet(optionsToUpdate.start || v, fireSetEvent); + } + + // Throw an error if the slider was already initialized. + if ( scope_Target.noUiSlider ) { + throw new Error('Slider was already initialized.'); + } + + // Create the base element, initialise HTML and set classes. + // Add handles and connect elements. + addSlider(scope_Target); + addElements(options.connect, scope_Base); + + scope_Self = { + destroy: destroy, + steps: getCurrentStep, + on: bindEvent, + off: removeEvent, + get: valueGet, + set: valueSet, + reset: valueReset, + // Exposed for unit testing, don't use this in your application. + __moveHandles: function(a, b, c) { moveHandles(a, b, scope_Locations, c); }, + options: originalOptions, // Issue #600, #678 + updateOptions: updateOptions, + target: scope_Target, // Issue #597 + pips: pips // Issue #594 + }; + + // Attach user events. + bindSliderEvents(options.events); + + // Use the public value method to set the start values. + valueSet(options.start); + + if ( options.pips ) { + pips(options.pips); + } + + if ( options.tooltips ) { + tooltips(); + } + + return scope_Self; + + } + + + // Run the standard initializer + function initialize ( target, originalOptions ) { + + if ( !target.nodeName ) { + throw new Error('noUiSlider.create requires a single element.'); + } + + if (originalOptions.tooltips === undefined) { + originalOptions.tooltips = true; + } + + // Test the options and create the slider environment; + var options = testOptions( originalOptions, target ); + var api = closure( target, options, originalOptions ); + + target.noUiSlider = api; + + return api; + } - // Use an object instead of a function for future expansibility; - return { - create: initialize - }; + // Use an object instead of a function for future expansibility; + return { + create: initialize + }; -})); \ No newline at end of file +})); diff --git a/extras/noUiSlider/nouislider.min.js b/extras/noUiSlider/nouislider.min.js new file mode 100644 index 0000000000..dc46047306 --- /dev/null +++ b/extras/noUiSlider/nouislider.min.js @@ -0,0 +1 @@ +!function(){function t(t){return t.split("").reverse().join("")}function e(t,e,n){if((t[e]||t[n])&&t[e]===t[n])throw Error(e)}function n(e,n,r,i,o,s,a,u,l,c,f,p){a=p;var d,h=f="";return s&&(p=s(p)),!("number"!=typeof p||!isFinite(p))&&(e&&0===parseFloat(p.toFixed(e))&&(p=0),0>p&&(d=!0,p=Math.abs(p)),e&&(s=Math.pow(10,e),p=(Math.round(p*s)/s).toFixed(e)),-1!==(p=p.toString()).indexOf(".")&&(e=p.split("."),p=e[0],r&&(f=r+e[1])),n&&(p=t(p).match(/.{1,3}/g),p=t(p.join(t(n)))),d&&u&&(h+=u),i&&(h+=i),d&&l&&(h+=l),h=h+p+f,o&&(h+=o),c&&(h=c(h,a)),h)}function r(t,e,n,r,i,o,s,a,u,l,c,f){var p;return t="",c&&(f=c(f)),!(!f||"string"!=typeof f)&&(a&&f.substring(0,a.length)===a&&(f=f.replace(a,""),p=!0),r&&f.substring(0,r.length)===r&&(f=f.replace(r,"")),u&&f.substring(0,u.length)===u&&(f=f.replace(u,""),p=!0),i&&f.slice(-1*i.length)===i&&(f=f.slice(0,-1*i.length)),e&&(f=f.split(e).join("")),n&&(f=f.replace(n,".")),p&&(t+="-"),t=Number((t+f).replace(/[^0-9\.\-.]/g,"")),s&&(t=s(t)),!("number"!=typeof t||!isFinite(t))&&t)}function i(t){var n,r,i,o={};for(n=0;ni&&(o[r]=i):"encoder"===r||"decoder"===r||"edit"===r||"undo"===r?"function"==typeof i&&(o[r]=i):"string"==typeof i&&(o[r]=i);return e(o,"mark","thousand"),e(o,"prefix","negative"),e(o,"prefix","negativeBefore"),o}function o(t,e,n){var r,i=[];for(r=0;r0&&(l(t,e),setTimeout(function(){c(t,e)},n))}function s(t){return Math.max(Math.min(t,100),0)}function a(t){return Array.isArray(t)?t:[t]}function u(t){var e=(t=String(t)).split(".");return e.length>1?e[1].length:0}function l(t,e){t.classList?t.classList.add(e):t.className+=" "+e}function c(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\b)"+e.split(" ").join("|")+"(\\b|$)","gi")," ")}function f(t,e){return t.classList?t.classList.contains(e):new RegExp("\\b"+e+"\\b").test(t.className)}function p(){var t=void 0!==window.pageXOffset,e="CSS1Compat"===(document.compatMode||"");return{x:t?window.pageXOffset:e?document.documentElement.scrollLeft:document.body.scrollLeft,y:t?window.pageYOffset:e?document.documentElement.scrollTop:document.body.scrollTop}}function d(){return window.navigator.pointerEnabled?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"}}function h(t,e){return 100/(e-t)}function m(t,e){return 100*e/(t[1]-t[0])}function g(t,e){return m(t,t[0]<0?e+Math.abs(t[0]):e-t[0])}function v(t,e){return e*(t[1]-t[0])/100+t[0]}function b(t,e){for(var n=1;t>=e[n];)n+=1;return n}function w(t,e,n){if(n>=t.slice(-1)[0])return 100;var r,i,o,s,a=b(n,t);return r=t[a-1],i=t[a],o=e[a-1],s=e[a],o+g([r,i],n)/h(o,s)}function S(t,e,n){if(n>=100)return t.slice(-1)[0];var r,i,o,s,a=b(n,e);return r=t[a-1],i=t[a],o=e[a-1],s=e[a],v([r,i],(n-o)*h(o,s))}function x(t,e,r,i){if(100===i)return i;var o,s,a=b(i,t);return r?(o=t[a-1],s=t[a],i-o>(s-o)/2?s:o):e[a-1]?t[a-1]+n(i-t[a-1],e[a-1]):i}function y(t,e,n){var r;if("number"==typeof e&&(e=[e]),"[object Array]"!==Object.prototype.toString.call(e))throw new Error("noUiSlider: 'range' contains invalid value.");if(r="min"===t?0:"max"===t?100:parseFloat(t),!i(r)||!i(e[0]))throw new Error("noUiSlider: 'range' value isn't numeric.");n.xPct.push(r),n.xVal.push(e[0]),r?n.xSteps.push(!isNaN(e[1])&&e[1]):isNaN(e[1])||(n.xSteps[0]=e[1]),n.xHighestCompleteStep.push(0)}function E(t,e,n){if(!e)return!0;n.xSteps[t]=m([n.xVal[t],n.xVal[t+1]],e)/h(n.xPct[t],n.xPct[t+1]);var r=(n.xVal[t+1]-n.xVal[t])/n.xNumSteps[t],i=Math.ceil(Number(r.toFixed(3))-1),o=n.xVal[t]+n.xNumSteps[t]*i;n.xHighestCompleteStep[t]=o}function C(t,e,n,r){this.xPct=[],this.xVal=[],this.xSteps=[r||!1],this.xNumSteps=[!1],this.xHighestCompleteStep=[],this.snap=e,this.direction=n;var i,o=[];for(i in t)t.hasOwnProperty(i)&&o.push([t[i],i]);for(o.length&&"object"==typeof o[0][0]?o.sort(function(t,e){return t[0][0]-e[0][0]}):o.sort(function(t,e){return t[0]-e[0]}),i=0;i=50)throw new Error("noUiSlider: 'padding' option must be less than half the range.")}}function z(t,e){switch(e){case"ltr":t.dir=0;break;case"rtl":t.dir=1;break;default:throw new Error("noUiSlider: 'direction' option was not recognized.")}}function H(t,e){if("string"!=typeof e)throw new Error("noUiSlider: 'behaviour' must be a string containing options.");var n=e.indexOf("tap")>=0,r=e.indexOf("drag")>=0,i=e.indexOf("fixed")>=0,o=e.indexOf("snap")>=0,s=e.indexOf("hover")>=0;if(i){if(2!==t.handles)throw new Error("noUiSlider: 'fixed' behaviour must be used with 2 handles");L(t,t.start[1]-t.start[0])}t.events={tap:n||o,drag:r,fixed:i,snap:o,hover:s}}function D(t,e){if(!1!==e)if(!0===e){t.tooltips=[];for(var n=0;n-1?1:"steps"===n?2:0,!s&&u&&(m=0),f===S&&l||(o[d.toFixed(5)]=[f,m]),c=d}}),o}function w(t,e,n){function r(t,e){var n=e===i.cssClasses.value,r=n?p:d,o=n?c:f;return e+" "+r[i.ort]+" "+o[t]}function o(t,e,n){return'class="'+r(n[1],e)+'" style="'+i.style+": "+t+'%"'}function s(t,r){r[1]=r[1]&&e?e(r[0],r[1]):r[1],u+="
                  ",r[1]&&(u+="
                  "+n.to(r[0])+"
                  ")}var a=document.createElement("div"),u="",c=[i.cssClasses.valueNormal,i.cssClasses.valueLarge,i.cssClasses.valueSub],f=[i.cssClasses.markerNormal,i.cssClasses.markerLarge,i.cssClasses.markerSub],p=[i.cssClasses.valueHorizontal,i.cssClasses.valueVertical],d=[i.cssClasses.markerHorizontal,i.cssClasses.markerVertical];return l(a,i.cssClasses.pips),l(a,0===i.ort?i.cssClasses.pipsHorizontal:i.cssClasses.pipsVertical),Object.keys(t).forEach(function(e){s(e,t[e])}),a.innerHTML=u,a}function S(t){var e=t.mode,n=t.density||1,r=t.filter||!1,i=b(n,e,v(e,t.values||!1,t.stepped||!1)),o=t.format||{to:Math.round};return J.appendChild(w(i,r,o))}function x(){var t=I.getBoundingClientRect(),e="offset"+["Width","Height"][i.ort];return 0===i.ort?t.width||I[e]:t.height||I[e]}function y(t,e,n,r){var o=function(e){return!J.hasAttribute("disabled")&&(!f(J,i.cssClasses.tap)&&(!!(e=E(e,r.pageOffset))&&(!(t===G.start&&void 0!==e.buttons&&e.buttons>1)&&((!r.hover||!e.buttons)&&(e.calcPoint=e.points[i.ort],void n(e,r))))))},s=[];return t.split(" ").forEach(function(t){e.addEventListener(t,o,!1),s.push([t,o])}),s}function E(t,e){t.preventDefault();var n,r,i=0===t.type.indexOf("touch"),o=0===t.type.indexOf("mouse"),s=0===t.type.indexOf("pointer");if(0===t.type.indexOf("MSPointer")&&(s=!0),i){if(t.touches.length>1)return!1;n=t.changedTouches[0].pageX,r=t.changedTouches[0].pageY}return e=e||p(),(o||s)&&(n=t.clientX+e.x,r=t.clientY+e.y),t.pageOffset=e,t.points=[n,r],t.cursor=o||s,t}function C(t){var e=100*(t-r(I,i.ort))/x();return i.dir?100-e:e}function N(t){var e=100,n=!1;return _.forEach(function(r,i){if(!r.hasAttribute("disabled")){var o=Math.abs(K[i]-t);o1?r.forEach(function(t,n){var r=F(i,t,i[t]+e,o[n],s[n]);!1===r?e=0:(e=r-i[t],i[t]=r)}):o=s=[!0];var a=!1;r.forEach(function(t,r){a=D(t,n[t]+e,o[r],s[r])||a}),a&&r.forEach(function(t){M("update",t),M("slide",t)})}function M(t,e,n){Object.keys(nt).forEach(function(r){var o=r.split(".")[0];t===o&&nt[r].forEach(function(t){t.call($,et.map(i.format.to),e,et.slice(),n||!1,K.slice())})})}function P(t,e){"mouseout"===t.type&&"HTML"===t.target.nodeName&&null===t.relatedTarget&&O(t,e)}function k(t,e){if(-1===navigator.appVersion.indexOf("MSIE 9")&&0===t.buttons&&0!==e.buttonsProperty)return O(t,e);var n=(i.dir?-1:1)*(t.calcPoint-e.startCalcPoint);U(n>0,100*n/e.baseSize,e.locations,e.handleNumbers)}function O(t,e){Z&&(c(Z,i.cssClasses.active),Z=!1),t.cursor&&(document.body.style.cursor="",document.body.removeEventListener("selectstart",document.body.noUiListener)),document.documentElement.noUiListeners.forEach(function(t){document.documentElement.removeEventListener(t[0],t[1])}),c(J,i.cssClasses.drag),H(),e.handleNumbers.forEach(function(t){M("set",t),M("change",t),M("end",t)})}function V(t,e){if(1===e.handleNumbers.length){var n=_[e.handleNumbers[0]];if(n.hasAttribute("disabled"))return!1;l(Z=n.children[0],i.cssClasses.active)}t.preventDefault(),t.stopPropagation();var r=y(G.move,document.documentElement,k,{startCalcPoint:t.calcPoint,baseSize:x(),pageOffset:t.pageOffset,handleNumbers:e.handleNumbers,buttonsProperty:t.buttons,locations:K.slice()}),o=y(G.end,document.documentElement,O,{handleNumbers:e.handleNumbers}),s=y("mouseout",document.documentElement,P,{handleNumbers:e.handleNumbers});if(document.documentElement.noUiListeners=r.concat(o,s),t.cursor){document.body.style.cursor=getComputedStyle(t.target).cursor,_.length>1&&l(J,i.cssClasses.drag);var a=function(){return!1};document.body.noUiListener=a,document.body.addEventListener("selectstart",a,!1)}e.handleNumbers.forEach(function(t){M("start",t)})}function A(t){t.stopPropagation();var e=C(t.calcPoint),n=N(e);if(!1===n)return!1;i.events.snap||o(J,i.cssClasses.tap,i.animationDuration),D(n,e,!0,!0),H(),M("slide",n,!0),M("set",n,!0),M("change",n,!0),M("update",n,!0),i.events.snap&&V(t,{handleNumbers:[n]})}function L(t){var e=C(t.calcPoint),n=tt.getStep(e),r=tt.fromStepping(n);Object.keys(nt).forEach(function(t){"hover"===t.split(".")[0]&&nt[t].forEach(function(t){t.call($,r)})})}function F(t,e,n,r,o){return _.length>1&&(r&&e>0&&(n=Math.max(n,t[e-1]+i.margin)),o&&e<_.length-1&&(n=Math.min(n,t[e+1]-i.margin))),_.length>1&&i.limit&&(r&&e>0&&(n=Math.min(n,t[e-1]+i.limit)),o&&e<_.length-1&&(n=Math.max(n,t[e+1]-i.limit))),i.padding&&(0===e&&(n=Math.max(n,i.padding)),e===_.length-1&&(n=Math.min(n,100-i.padding))),n=tt.getStep(n),(n=s(n))!==t[e]&&n}function j(t){return t+"%"}function z(t,e){K[t]=e,et[t]=tt.fromStepping(e);var n=function(){_[t].style[i.style]=j(e),T(t),T(t+1)};window.requestAnimationFrame&&i.useRequestAnimationFrame?window.requestAnimationFrame(n):n()}function H(){Q.forEach(function(t){var e=K[t]>50?-1:1,n=3+(_.length+e*t);_[t].childNodes[0].style.zIndex=n})}function D(t,e,n,r){return!1!==(e=F(K,t,e,n,r))&&(z(t,e),!0)}function T(t){if(W[t]){var e=0,n=100;0!==t&&(e=K[t-1]),t!==W.length-1&&(n=K[t]),W[t].style[i.style]=j(e),W[t].style[i.styleOposite]=j(100-n)}}function q(t,e){null!==t&&!1!==t&&("number"==typeof t&&(t=String(t)),!1===(t=i.format.from(t))||isNaN(t)||D(e,tt.toStepping(t),!1,!1))}function R(t,e){var n=a(t),r=void 0===K[0];e=void 0===e||!!e,n.forEach(q),i.animate&&!r&&o(J,i.cssClasses.tap,i.animationDuration),Q.forEach(function(t){D(t,K[t],!0,!1)}),H(),Q.forEach(function(t){M("update",t),null!==n[t]&&e&&M("set",t)})}function B(){var t=et.map(i.format.to);return 1===t.length?t[0]:t}function Y(t,e){nt[t]=nt[t]||[],nt[t].push(e),"update"===t.split(".")[0]&&_.forEach(function(t,e){M("update",e)})}var I,_,W,$,G=d(),J=n,K=[],Q=[],Z=!1,tt=i.spectrum,et=[],nt={};if(J.noUiSlider)throw new Error("Slider was already initialized.");return function(e){l(e,i.cssClasses.target),0===i.dir?l(e,i.cssClasses.ltr):l(e,i.cssClasses.rtl),0===i.ort?l(e,i.cssClasses.horizontal):l(e,i.cssClasses.vertical),I=t(e,i.cssClasses.base)}(J),function(t,e){_=[],(W=[]).push(m(e,t[0]));for(var n=0;nn.stepAfter.startValue&&(i=n.stepAfter.startValue-r),o=r>n.thisStep.startValue?n.thisStep.step:!1!==n.stepBefore.step&&r-n.stepBefore.highestStep,100===t?i=null:0===t&&(o=null);var s=tt.countStepDecimals();return null!==i&&!1!==i&&(i=Number(i.toFixed(s))),null!==o&&!1!==o&&(o=Number(o.toFixed(s))),[o,i]})},on:Y,off:function(t){var e=t&&t.split(".")[0],n=e&&t.substring(e.length);Object.keys(nt).forEach(function(t){var r=t.split(".")[0],i=t.substring(r.length);e&&e!==r||n&&n!==i||delete nt[t]})},get:B,set:R,reset:function(t){R(i.start,t)},__moveHandles:function(t,e,n){U(t,e,K,n)},options:u,updateOptions:function(t,e){var n=B(),r=["margin","limit","padding","range","animate","snap","step","format"];r.forEach(function(e){void 0!==t[e]&&(u[e]=t[e])});var o=X(u);r.forEach(function(e){void 0!==t[e]&&(i[e]=o[e])}),o.spectrum.direction=tt.direction,tt=o.spectrum,i.margin=o.margin,i.limit=o.limit,i.padding=o.padding,K=[],R(t.start||n,e)},target:J,pips:S},function(t){t.fixed||_.forEach(function(t,e){y(G.start,t.children[0],V,{handleNumbers:[e]})}),t.tap&&y(G.start,I,A,{}),t.hover&&y(G.move,I,L,{hover:!0}),t.drag&&W.forEach(function(e,n){if(!1!==e&&0!==n&&n!==W.length-1){var r=_[n-1],o=_[n],s=[e];l(e,i.cssClasses.draggable),t.fixed&&(s.push(r.children[0]),s.push(o.children[0])),s.forEach(function(t){y(G.start,t,V,{handles:[r,o],handleNumbers:[n-1,n]})})}})}(i.events),R(i.start),i.pips&&S(i.pips),i.tooltips&&function(){var t=_.map(g);Y("update",function(e,n,r){if(t[n]){var o=e[n];!0!==i.tooltips[n]&&(o=i.tooltips[n].to(r[n])),t[n].innerHTML=""+o+""}})}(),$}C.prototype.getMargin=function(t){var e=this.xNumSteps[0];if(e&&t/e%1!=0)throw new Error("noUiSlider: 'limit', 'margin' and 'padding' must be divisible by step.");return 2===this.xPct.length&&m(this.xVal,t)},C.prototype.toStepping=function(t){return t=w(this.xVal,this.xPct,t)},C.prototype.fromStepping=function(t){return S(this.xVal,this.xPct,t)},C.prototype.getStep=function(t){return t=x(this.xPct,this.xSteps,this.snap,t)},C.prototype.getNearbySteps=function(t){var e=b(t,this.xPct);return{stepBefore:{startValue:this.xVal[e-2],step:this.xNumSteps[e-2],highestStep:this.xHighestCompleteStep[e-2]},thisStep:{startValue:this.xVal[e-1],step:this.xNumSteps[e-1],highestStep:this.xHighestCompleteStep[e-1]},stepAfter:{startValue:this.xVal[e-0],step:this.xNumSteps[e-0],highestStep:this.xHighestCompleteStep[e-0]}}},C.prototype.countStepDecimals=function(){var t=this.xNumSteps.map(u);return Math.max.apply(null,t)},C.prototype.convert=function(t){return this.getStep(this.toStepping(t))};var I={to:function(t){return void 0!==t&&t.toFixed(2)},from:Number};return{create:function(t,e){if(!t.nodeName)throw new Error("noUiSlider.create requires a single element.");void 0===e.tooltips&&(e.tooltips=!0);var n=Y(t,X(e,t),e);return t.noUiSlider=n,n}}}); \ No newline at end of file diff --git a/fab-toolbar-demo.html b/fab-toolbar-demo.html new file mode 100644 index 0000000000..11d44f641b --- /dev/null +++ b/fab-toolbar-demo.html @@ -0,0 +1,43 @@ + + + + + + + + + Floating Action Button - Materialize + + + + + + + + + + + + + + + + + + + + + + + diff --git a/font/material-design-icons/LICENSE.txt b/font/material-design-icons/LICENSE.txt deleted file mode 100755 index 542f6537df..0000000000 --- a/font/material-design-icons/LICENSE.txt +++ /dev/null @@ -1,428 +0,0 @@ -https://github.com/google/material-design-icons/blob/master/LICENSE -https://github.com/FezVrasta/bootstrap-material-design/blob/master/fonts/LICENSE.txt - -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - - including for purposes of Section 3(b); and - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public licenses. -Notwithstanding, Creative Commons may elect to apply one of its public -licenses to material it publishes and in those instances will be -considered the "Licensor." Except for the limited purpose of indicating -that material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the public -licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/font/material-design-icons/Material-Design-Icons.eot b/font/material-design-icons/Material-Design-Icons.eot deleted file mode 100644 index d9c296e41f..0000000000 Binary files a/font/material-design-icons/Material-Design-Icons.eot and /dev/null differ diff --git a/font/material-design-icons/Material-Design-Icons.svg b/font/material-design-icons/Material-Design-Icons.svg deleted file mode 100644 index def1e9b5e9..0000000000 --- a/font/material-design-icons/Material-Design-Icons.svg +++ /dev/null @@ -1,769 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/font/material-design-icons/Material-Design-Icons.ttf b/font/material-design-icons/Material-Design-Icons.ttf deleted file mode 100644 index e12f0cc41b..0000000000 Binary files a/font/material-design-icons/Material-Design-Icons.ttf and /dev/null differ diff --git a/font/material-design-icons/Material-Design-Icons.woff b/font/material-design-icons/Material-Design-Icons.woff deleted file mode 100644 index 201581f258..0000000000 Binary files a/font/material-design-icons/Material-Design-Icons.woff and /dev/null differ diff --git a/font/material-design-icons/Material-Design-Icons.woff2 b/font/material-design-icons/Material-Design-Icons.woff2 deleted file mode 100755 index 5efd1b93c4..0000000000 Binary files a/font/material-design-icons/Material-Design-Icons.woff2 and /dev/null differ diff --git a/font/roboto/Roboto-Bold.ttf b/font/roboto/Roboto-Bold.ttf deleted file mode 100644 index 68822caf24..0000000000 Binary files a/font/roboto/Roboto-Bold.ttf and /dev/null differ diff --git a/font/roboto/Roboto-Bold.woff b/font/roboto/Roboto-Bold.woff deleted file mode 100755 index 1f75afdcc8..0000000000 Binary files a/font/roboto/Roboto-Bold.woff and /dev/null differ diff --git a/font/roboto/Roboto-Bold.woff2 b/font/roboto/Roboto-Bold.woff2 deleted file mode 100755 index 350d1c3a2d..0000000000 Binary files a/font/roboto/Roboto-Bold.woff2 and /dev/null differ diff --git a/font/roboto/Roboto-Light.ttf b/font/roboto/Roboto-Light.ttf deleted file mode 100644 index aa45340757..0000000000 Binary files a/font/roboto/Roboto-Light.ttf and /dev/null differ diff --git a/font/roboto/Roboto-Light.woff b/font/roboto/Roboto-Light.woff deleted file mode 100755 index 3480c6c8b7..0000000000 Binary files a/font/roboto/Roboto-Light.woff and /dev/null differ diff --git a/font/roboto/Roboto-Light.woff2 b/font/roboto/Roboto-Light.woff2 deleted file mode 100755 index 9a4d98c462..0000000000 Binary files a/font/roboto/Roboto-Light.woff2 and /dev/null differ diff --git a/font/roboto/Roboto-Medium.ttf b/font/roboto/Roboto-Medium.ttf deleted file mode 100644 index a3c1a1f170..0000000000 Binary files a/font/roboto/Roboto-Medium.ttf and /dev/null differ diff --git a/font/roboto/Roboto-Medium.woff b/font/roboto/Roboto-Medium.woff deleted file mode 100755 index 1186773fd0..0000000000 Binary files a/font/roboto/Roboto-Medium.woff and /dev/null differ diff --git a/font/roboto/Roboto-Medium.woff2 b/font/roboto/Roboto-Medium.woff2 deleted file mode 100755 index d10a59261f..0000000000 Binary files a/font/roboto/Roboto-Medium.woff2 and /dev/null differ diff --git a/font/roboto/Roboto-Regular.ttf b/font/roboto/Roboto-Regular.ttf deleted file mode 100644 index 0e58508a64..0000000000 Binary files a/font/roboto/Roboto-Regular.ttf and /dev/null differ diff --git a/font/roboto/Roboto-Regular.woff b/font/roboto/Roboto-Regular.woff deleted file mode 100755 index f823258a4e..0000000000 Binary files a/font/roboto/Roboto-Regular.woff and /dev/null differ diff --git a/font/roboto/Roboto-Regular.woff2 b/font/roboto/Roboto-Regular.woff2 deleted file mode 100755 index b7082ef310..0000000000 Binary files a/font/roboto/Roboto-Regular.woff2 and /dev/null differ diff --git a/font/roboto/Roboto-Thin.ttf b/font/roboto/Roboto-Thin.ttf deleted file mode 100644 index 8779333b1a..0000000000 Binary files a/font/roboto/Roboto-Thin.ttf and /dev/null differ diff --git a/font/roboto/Roboto-Thin.woff b/font/roboto/Roboto-Thin.woff deleted file mode 100755 index 2a98c1e41d..0000000000 Binary files a/font/roboto/Roboto-Thin.woff and /dev/null differ diff --git a/font/roboto/Roboto-Thin.woff2 b/font/roboto/Roboto-Thin.woff2 deleted file mode 100755 index a38025a158..0000000000 Binary files a/font/roboto/Roboto-Thin.woff2 and /dev/null differ diff --git a/fonts/roboto/Roboto-Bold.woff b/fonts/roboto/Roboto-Bold.woff new file mode 100644 index 0000000000..c55d1e72ba Binary files /dev/null and b/fonts/roboto/Roboto-Bold.woff differ diff --git a/fonts/roboto/Roboto-Bold.woff2 b/fonts/roboto/Roboto-Bold.woff2 new file mode 100644 index 0000000000..ab12197439 Binary files /dev/null and b/fonts/roboto/Roboto-Bold.woff2 differ diff --git a/fonts/roboto/Roboto-Light.woff b/fonts/roboto/Roboto-Light.woff new file mode 100644 index 0000000000..3f9e8c5e9d Binary files /dev/null and b/fonts/roboto/Roboto-Light.woff differ diff --git a/fonts/roboto/Roboto-Light.woff2 b/fonts/roboto/Roboto-Light.woff2 new file mode 100644 index 0000000000..0707d9ab13 Binary files /dev/null and b/fonts/roboto/Roboto-Light.woff2 differ diff --git a/fonts/roboto/Roboto-Medium.woff b/fonts/roboto/Roboto-Medium.woff new file mode 100644 index 0000000000..ced7907e94 Binary files /dev/null and b/fonts/roboto/Roboto-Medium.woff differ diff --git a/fonts/roboto/Roboto-Medium.woff2 b/fonts/roboto/Roboto-Medium.woff2 new file mode 100644 index 0000000000..723a32343b Binary files /dev/null and b/fonts/roboto/Roboto-Medium.woff2 differ diff --git a/fonts/roboto/Roboto-Regular.woff b/fonts/roboto/Roboto-Regular.woff new file mode 100644 index 0000000000..e401bcf528 Binary files /dev/null and b/fonts/roboto/Roboto-Regular.woff differ diff --git a/fonts/roboto/Roboto-Regular.woff2 b/fonts/roboto/Roboto-Regular.woff2 new file mode 100644 index 0000000000..5bd7bd6500 Binary files /dev/null and b/fonts/roboto/Roboto-Regular.woff2 differ diff --git a/fonts/roboto/Roboto-Thin.woff b/fonts/roboto/Roboto-Thin.woff new file mode 100644 index 0000000000..175d076546 Binary files /dev/null and b/fonts/roboto/Roboto-Thin.woff differ diff --git a/fonts/roboto/Roboto-Thin.woff2 b/fonts/roboto/Roboto-Thin.woff2 new file mode 100644 index 0000000000..29172398b9 Binary files /dev/null and b/fonts/roboto/Roboto-Thin.woff2 differ diff --git a/footer.html b/footer.html deleted file mode 100644 index 6d352858bf..0000000000 --- a/footer.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - Footer - Materialize - - - - - - - - - - - - - - - - -
                  - -
                  - -
                  -
                  -
                  - -
                  - - - - - - -
                  
                  -  body {
                  -    display: flex;
                  -    min-height: 100vh;
                  -    flex-direction: column;
                  -  }
                  -
                  -  main {
                  -    flex: 1 0 auto;
                  -  }
                  -      
                  - -
                  - -
                  -
                  -
                  - - -
                  -
                  - -
                  -
                  -
                  - -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/forms.html b/forms.html deleted file mode 100644 index 6ff9994f5b..0000000000 --- a/forms.html +++ /dev/null @@ -1,876 +0,0 @@ - - - - - - - - - Forms - Materialize - - - - - - - - - - - - - - - - -
                  - -
                  - -
                  -
                  -
                  - -
                  - -
                  -

                  - Forms are the standard way to receive user inputted data. The transitions and smoothness of these elements are very important because of the inherent user interaction associated with forms. -

                  - -

                  Input fields

                  -

                  Text fields allow user input. The border should light up simply and clearly indicating which field the user is currently editing. You must have a .input-field div wrapping your input and label. This helps our jQuery animate the label. This is only used in our Input and Textarea form elements.

                  -

                  If you don't want the Green and Red validation states, just remove the validate class from your inputs.

                  -
                  -
                  -
                  -
                  -
                  - - -
                  -
                  - - -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  
                  -  <div class="row">
                  -    <form class="col s12">
                  -      <div class="row">
                  -        <div class="input-field col s6">
                  -          <input placeholder="Placeholder" id="first_name" type="text" class="validate">
                  -          <label for="first_name">First Name</label>
                  -        </div>
                  -        <div class="input-field col s6">
                  -          <input id="last_name" type="text" class="validate">
                  -          <label for="last_name">Last Name</label>
                  -        </div>
                  -      </div>
                  -      <div class="row">
                  -        <div class="input-field col s12">
                  -          <input disabled value="I am not editable" id="disabled" type="text" class="validate">
                  -          <label for="disabled">Disabled</label>
                  -        </div>
                  -      </div>
                  -      <div class="row">
                  -        <div class="input-field col s12">
                  -          <input id="password" type="password" class="validate">
                  -          <label for="password">Password</label>
                  -        </div>
                  -      </div>
                  -      <div class="row">
                  -        <div class="input-field col s12">
                  -          <input id="email" type="email" class="validate">
                  -          <label for="email">Email</label>
                  -        </div>
                  -      </div>
                  -    </form>
                  -  </div>
                  -        

                  -

                  Prefilling Text Inputs

                  -

                  If you are having trouble with the labels overlapping prefilled content, Try adding class="active" to the label

                  -
                  -
                  - - -
                  -
                  - -
                  
                  -  <div class="row">
                  -    <div class="input-field col s6">
                  -      <input value="Alvin" id="first_name2" type="text" class="validate">
                  -      <label class="active" for="first_name2">First Name</label>
                  -    </div>
                  -  </div>
                  -        
                  - -

                  Icon Prefixes

                  -

                  You can add an icon prefix to make the form input label even more clear. Just add an icon with the class prefix before the input and label.


                  -
                  -
                  -
                  -
                  - account_circle - - -
                  -
                  - phone - - -
                  -
                  -
                  -
                  - -
                  
                  -  <div class="row">
                  -    <form class="col s12">
                  -      <div class="row">
                  -        <div class="input-field col s6">
                  -          <i class="material-icons prefix">account_circle</i>
                  -          <input id="icon_prefix" type="text" class="validate">
                  -          <label for="icon_prefix">First Name</label>
                  -        </div>
                  -        <div class="input-field col s6">
                  -          <i class="material-icons prefix">phone</i>
                  -          <input id="icon_telephone" type="tel" class="validate">
                  -          <label for="icon_telephone">Telephone</label>
                  -        </div>
                  -      </div>
                  -    </form>
                  -  </div>
                  -        
                  - -

                  Custom Error or Success Messages

                  -

                  You can add custom validation messages by adding either data-error or data-success attributes to your input field labels.


                  -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  - -
                  
                  -  <div class="row">
                  -    <form class="col s12">
                  -      <div class="row">
                  -        <div class="input-field col s12">
                  -          <input id="email" type="email" class="validate">
                  -          <label for="email" data-error="wrong" data-success="right">Email</label>
                  -        </div>
                  -      </div>
                  -    </form>
                  -  </div>
                  -        
                  - - -

                  Changing colors

                  -

                  Here is a CSS template for modifying input fields in CSS. With Sass, you can achieve this by just changing a variable. The CSS shown below is unprefixed. Depending on what you use, you may have to change the type attribute selector.

                  -
                  
                  -  /* label color */
                  -   .input-field label {
                  -     color: #000;
                  -   }
                  -   /* label focus color */
                  -   .input-field input[type=text]:focus + label {
                  -     color: #000;
                  -   }
                  -   /* label underline focus color */
                  -   .input-field input[type=text]:focus {
                  -     border-bottom: 1px solid #000;
                  -     box-shadow: 0 1px 0 0 #000;
                  -   }
                  -   /* valid color */
                  -   .input-field input[type=text].valid {
                  -     border-bottom: 1px solid #000;
                  -     box-shadow: 0 1px 0 0 #000;
                  -   }
                  -   /* invalid color */
                  -   .input-field input[type=text].invalid {
                  -     border-bottom: 1px solid #000;
                  -     box-shadow: 0 1px 0 0 #000;
                  -   }
                  -   /* icon prefix focus color */
                  -   .input-field .prefix.active {
                  -     color: #000;
                  -   }
                  -        
                  -
                  - - - -
                  -

                  Textarea

                  -

                  Textareas allow larger expandable user input. The border should light up simply and clearly indicating which field the user is currently editing. You must have a .input-field div wrapping your input and label. This helps our jQuery animate the label. This is only used in our Input and Textarea form elements.

                  -

                  Textareas will auto resize to the text inside.

                  - - -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  
                  -  <div class="row">
                  -    <form class="col s12">
                  -      <div class="row">
                  -        <div class="input-field col s12">
                  -          <textarea id="textarea1" class="materialize-textarea"></textarea>
                  -          <label for="textarea1">Textarea</label>
                  -        </div>
                  -      </div>
                  -    </form>
                  -  </div>
                  -        
                  -

                  advanced note: When dynamically changing the value of a textarea with methods like jQuery's .val(), you must trigger an autoresize on it afterwords because .val() does not automatically trigger the events we've binded to the textarea.

                  -
                  
                  -  $('#textarea1').val('New Text');
                  -  $('#textarea1').trigger('autoresize');
                  -        
                  -
                  - -

                  Icon Prefixes

                  -

                  You can add an icon prefix to make the form input label even more clear. Just add an icon with the class prefix before the input and label.


                  -
                  -
                  -
                  -
                  - mode_edit - - -
                  -
                  -
                  -
                  - -
                  
                  -  <div class="row">
                  -    <form class="col s12">
                  -      <div class="row">
                  -        <div class="input-field col s6">
                  -          <i class="material-icons prefix">mode_edit</i>
                  -          <textarea id="icon_prefix2" class="materialize-textarea"></textarea>
                  -          <label for="icon_prefix2">First Name</label>
                  -        </div>
                  -      </div>
                  -    </form>
                  -  </div>
                  -        
                  -
                  -
                  -

                  Select

                  -

                  Select allows user input through specified options. Make sure you wrap it in a .input-field for proper alignment with other text fields.

                  -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -

                  You can add the class browser-default to get the browser default.

                  - - -
                  -
                  -
                  -
                  -
                  
                  -  <div class="input-field col s12">
                  -    <select>
                  -      <option value="" disabled selected>Choose your option</option>
                  -      <option value="1">Option 1</option>
                  -      <option value="2">Option 2</option>
                  -      <option value="3">Option 3</option>
                  -    </select>
                  -    <label>Materialize Select</label>
                  -  </div>
                  -
                  -    <label>Browser Select</label>
                  -    <select class="browser-default">
                  -      <option value="" disabled selected>Choose your option</option>
                  -      <option value="1">Option 1</option>
                  -      <option value="2">Option 2</option>
                  -      <option value="3">Option 3</option>
                  -    </select>
                  -            
                  -
                  -
                  -

                  -

                  Disabled Styles

                  -

                  You can also add disabled to the select element to make the whole thing disabled. Or if you add disabled to the options, the individual options will be unselectable.

                  -
                  -
                  -
                  -
                  - - - - -
                  -
                  -
                  -
                  -
                  
                  -  <label>Materialize Disabled</label>
                  -  <select disabled>
                  -    <option value="" disabled selected>Choose your option</option>
                  -    <option value="1">Option 1</option>
                  -    <option value="2">Option 2</option>
                  -    <option value="3">Option 3</option>
                  -  </select>
                  -
                  -  <label>Browser Disabled</label>
                  -  <select class="browser-default" disabled>
                  -    <option value="" disabled selected>Choose your option</option>
                  -    <option value="1">Option 1</option>
                  -    <option value="2">Option 2</option>
                  -    <option value="3">Option 3</option>
                  -  </select>
                  -            
                  -
                  -
                  -

                  Initialization

                  -

                  You must initialize the select element as shown below. In addition, you will need a separate call for any dynamically generated select elements your page generates.

                  -
                  
                  -  $(document).ready(function() {
                  -    $('select').material_select();
                  -  });
                  -            
                  -
                  -
                  -

                  Updating/Destroying Select

                  -

                  If you want to update the items inside the select, just rerun the initialization code from above after editing the original select. Or you can destroy the material select with this function below, and create a new select altogether

                  -
                  
                  -  $('select').material_select('destroy');
                  -            
                  -
                  -
                  -
                  - - -
                  -

                  Radio Buttons

                  -

                  Radio Buttons are used when the user must make only one selection out of a group of items

                  -
                  -

                  - - -

                  -

                  - - -

                  -

                  - - -

                  -

                  - - -

                  -
                  -

                  Add radio buttons to a group by adding the name attribute along with the same corresponding value for each of the radio buttons in the group. Create disabled radio buttons by adding the disabled attribute as shown below.

                  -
                  
                  -  <form action="#">
                  -    <p>
                  -      <input name="group1" type="radio" id="test1" />
                  -      <label for="test1">Red</label>
                  -    </p>
                  -    <p>
                  -      <input name="group1" type="radio" id="test2" />
                  -      <label for="test2">Yellow</label>
                  -    </p>
                  -    <p>
                  -      <input class="with-gap" name="group1" type="radio" id="test3"  />
                  -      <label for="test3">Green</label>
                  -    </p>
                  -      <p>
                  -        <input name="group1" type="radio" id="test4" disabled="disabled" />
                  -        <label for="test4">Brown</label>
                  -    </p>
                  -  </form>
                  -        
                  -

                  Options

                  -

                  To create a radio button with a gap, add class="with-gap" to your input. See the example below.

                  - -

                  - - -

                  -
                  
                  -  <p>
                  -    <input class="with-gap" name="group3" type="radio" id="test5" checked />
                  -    <label for="test5">Red</label>
                  -  </p>
                  -        
                  - -
                  - - - -
                  -

                  Checkboxes

                  -

                  Use checkboxes when looking for yes or no answers. The for attribute is necessary to bind the our custom checkbox with the input. Add the input's id as the value of the for attribute of the label.

                  -
                  -

                  - - -

                  -

                  - - -

                  -

                  - - -

                  -

                  - - -

                  -

                  - - -

                  -

                  - - -

                  -
                  -
                  
                  -  <form action="#">
                  -    <p>
                  -      <input type="checkbox" id="test5" />
                  -      <label for="test5">Red</label>
                  -    </p>
                  -    <p>
                  -      <input type="checkbox" id="test6" checked="checked" />
                  -      <label for="test6">Yellow</label>
                  -    </p>
                  -    <p>
                  -      <input type="checkbox" class="filled-in" id="filled-in-box" checked="checked" />
                  -      <label for="filled-in-box">Filled in</label>
                  -    </p>
                  -    <p>
                  -      <input type="checkbox" id="test7" checked="checked" disabled="disabled" />
                  -      <label for="test7">Green</label>
                  -    </p>
                  -      <p>
                  -        <input type="checkbox" id="test8" disabled="disabled" />
                  -        <label for="test8">Brown</label>
                  -    </p>
                  -  </form>
                  -        
                  -
                  - - -
                  -

                  Switches

                  -
                  -

                  -

                  - -
                  -

                  - -

                  -

                  - -
                  -

                  -
                  -
                  
                  -  <!-- Switch -->
                  -  <div class="switch">
                  -    <label>
                  -      Off
                  -      <input type="checkbox">
                  -      <span class="lever"></span>
                  -      On
                  -    </label>
                  -  </div>
                  -
                  -  <!-- Disabled Switch -->
                  -  <div class="switch">
                  -    <label>
                  -      Off
                  -      <input disabled type="checkbox">
                  -      <span class="lever"></span>
                  -      On
                  -    </label>
                  -  </div>
                  -        
                  -
                  - -
                  -

                  File Input

                  -

                  If you want to style an input button with a path input we provide this structure.

                  -
                  -
                  -
                  - File - -
                  -
                  - -
                  -
                  -
                  -
                  
                  -  <form action="#">
                  -    <div class="file-field input-field">
                  -      <div class="btn">
                  -        <span>File</span>
                  -        <input type="file">
                  -      </div>
                  -      <div class="file-path-wrapper">
                  -        <input class="file-path validate" type="text">
                  -      </div>
                  -    </div>
                  -  </form>
                  -        
                  - -

                  You can also use the multiple attribute to allow multiple file uploads.

                  -
                  -
                  -
                  - File - -
                  -
                  - -
                  -
                  -
                  -
                  
                  -  <form action="#">
                  -    <div class="file-field input-field">
                  -      <div class="btn">
                  -        <span>File</span>
                  -        <input type="file" multiple>
                  -      </div>
                  -      <div class="file-path-wrapper">
                  -        <input class="file-path validate" type="text" placeholder="Upload one or more files">
                  -      </div>
                  -    </div>
                  -  </form>
                  -        
                  -
                  - - -
                  -

                  Range

                  -

                  Add a range slider for values with a wide range. This one is set to be a number between 0 and 100.

                  -
                  -

                  - -

                  -
                  -
                  
                  -  <form action="#">
                  -    <p class="range-field">
                  -      <input type="range" id="test5" min="0" max="100" />
                  -    </p>
                  -  </form>
                  -        
                  -
                  - -
                  -

                  Date Picker

                  -

                  We use a modified version of pickadate.js to create a materialized date picker. Test it out below!

                  - - -
                  
                  -  <input type="date" class="datepicker">
                  -        
                  - -

                  Initialization

                  -

                  At this time, not all pickadate.js options are working with our implementation

                  -
                  
                  -  $('.datepicker').pickadate({
                  -    selectMonths: true, // Creates a dropdown to control month
                  -    selectYears: 15 // Creates a dropdown of 15 years to control year
                  -  });
                  -        
                  -
                  - - -
                  -

                  Character Counter

                  -

                  Use a character counter in fields where a character restriction is in place.

                  -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  
                  -    <div class="row">
                  -      <form class="col s12">
                  -        <div class="row">
                  -          <div class="input-field col s6">
                  -            <input id="input_text" type="text" length="10">
                  -            <label for="input_text">Input text</label>
                  -          </div>
                  -        </div>
                  -        <div class="row">
                  -          <div class="input-field col s12">
                  -            <textarea id="textarea1" class="materialize-textarea" length="120"></textarea>
                  -            <label for="textarea1">Textarea</label>
                  -          </div>
                  -        </div>
                  -      </form>
                  -    </div>
                  -          
                  -
                  -

                  Initialization

                  -

                  There are no options for this plugin, but if you are adding these dynamically, you can use this to initialize them.

                  -
                  
                  -  $(document).ready(function() {
                  -    $('input#input_text, textarea#textarea1').characterCounter();
                  -  });
                  -        
                  -
                  - - - -
                  - - -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fullscreen-slider-demo.html b/fullscreen-slider-demo.html deleted file mode 100644 index ca9921d7c1..0000000000 --- a/fullscreen-slider-demo.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - Fullscreen Slider - Materialize - - - - - - - - - - - - - - - -
                  -
                    -
                  • - -
                    -

                    This is our big Tagline!

                    -
                    Here's our small slogan.
                    -
                    -
                  • -
                  • - -
                    -

                    Left Aligned Caption

                    -
                    Here's our small slogan.
                    -
                    -
                  • -
                  • - -
                    -

                    Right Aligned Caption

                    -
                    Here's our small slogan.
                    -
                    -
                  • -
                  -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/getting-started.html b/getting-started.html deleted file mode 100644 index dd3c7513c7..0000000000 --- a/getting-started.html +++ /dev/null @@ -1,415 +0,0 @@ - - - - - - - - - Getting Started - Materialize - - - - - - - - - - - - - - - - -
                  -
                  - -
                  -
                  -
                  -
                  -
                  -

                  Getting Started

                  -

                  Learn how to easily start using Materialize in your website.

                  -
                  -
                  - -
                  - - -
                  - -
                  -
                  -
                  -
                  - -
                  - -
                  - -
                  -
                  -

                  Download

                  -

                  Materialize comes in two different forms. You can select which version you want depending on your preference and expertise. To start using Materialize, all you have to do is download one of the options below.

                  - -
                  -

                  Materialize

                  -

                  This is the standard version that comes with both the minified and unminified CSS and JavaScript files. This option requires little to no setup. Use this if you are unfamiliar with Sass.

                  - Materializefile_download -
                  -
                  -

                  Sass

                  -

                  This version contains the source SCSS files. By choosing this version you have more control over which components to include. You will need a Sass compiler if you choose this option.

                  - Sourcefile_download -
                  -
                  -
                  -

                  CDN

                  -

                  You can find all the versions of the CDN at cdnjs.

                  -
                  
                  -  <!-- Compiled and minified CSS -->
                  -  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/css/materialize.min.css">
                  -
                  -  <!-- Compiled and minified JavaScript -->
                  -  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/js/materialize.min.js"></script>
                  -          
                  -
                  -
                  -
                  -

                  NPM

                  -

                  You can also get the latest release using NPM. This release contains source files as well as the compiled CSS and JavaScript files.

                  -
                  
                  -  npm install materialize-css
                  -          
                  -
                  -
                  -
                  -

                  Bower

                  -

                  You can also get the latest release using bower. This release contains source files as well as the compiled CSS and JavaScript files.

                  -
                  
                  -  bower install materialize
                  -          
                  -
                  -
                  - -
                  -

                  Thanks for Downloading!

                  -

                  We hope you find Materialize useful in your next project. We would appreciate if you helped us spread the word about Materialize on our Social Media. Also if you want to support the development, you can donate to us.

                  -
                  -
                  -
                  - - - -
                  -
                  -
                  -
                  - -
                  -
                  - -
                  -
                  -
                  -
                  -
                  -
                  - -
                  -
                  -

                  Setup

                  -

                  Project Structure

                  -

                  After downloading, extract the files into the directory where your website is located. Your directory will look something like this.

                  -

                  You'll notice that there are two sets of the files. The min means that the file is "compressed" to reduce load times. These minified files are usually used in production while it is better to use the unminified files during development.

                  - -
                  
                  -  MyWebsite/
                  -  |--css/
                  -  |  |--materialize.css
                  -  |
                  -  |--font/
                  -  |  |--material-design-icons/
                  -  |  |--roboto/
                  -  |
                  -  |--js/
                  -  |  |--materialize.js
                  -  |
                  -  |--index.html
                  -          
                  -
                  -
                  -

                  HTML Setup

                  -

                  Next you just have to make sure you link the files properly in your webpage. Generally it is wise to import javascript files at the end of the body to reduce page load time. Follow the example below on how to import Materialize into your webpage.

                  -

                  One last thing to note is that you have to import jQuery before importing materialize.js!

                  -
                  
                  -  <!DOCTYPE html>
                  -  <html>
                  -    <head>
                  -      <!--Import Google Icon Font-->
                  -      <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
                  -      <!--Import materialize.css-->
                  -      <link type="text/css" rel="stylesheet" href="css/materialize.min.css"  media="screen,projection"/>
                  -
                  -      <!--Let browser know website is optimized for mobile-->
                  -      <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
                  -    </head>
                  -
                  -    <body>
                  -      <!--Import jQuery before materialize.js-->
                  -      <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
                  -      <script type="text/javascript" src="js/materialize.min.js"></script>
                  -    </body>
                  -  </html>
                  -        
                  -
                  -
                  - -
                  -

                  Templates

                  -

                  We have created some starter templates so you can easily start designing your website with minimal setup up time. Browse through our collection and download your best fit.

                  - -
                  -

                  Starter Template

                  - -

                  This is the simplest starter page with a Header, Call-to-Action, and Icon Features.

                  - Demosearch - Downloadfile_download -
                  - -
                  -

                  Parallax Template

                  - -

                  This is the simplest starter page with a Header, Call-to-Action, and Icon Features.

                  - Demo - Download -
                  -
                  - - - -
                  -
                  -

                  Third-party Options

                  -

                  There are a few community-made options for you to easily include Materialize in your project. Keep in mind these are untested and may be out-of-date.

                  -

                  Ruby Gem

                  -

                  See here for documentation on this gem.

                  -
                  
                  -  gem 'materialize-sass'
                  -          
                  -

                  Meteor Package

                  -
                  
                  -  meteor add materialize:materialize
                  -          
                  -

                  Ember Package

                  -
                  
                  -  # install via npm
                  -  $ npm install ember-cli-materialize --save-dev
                  -  # make ember-cli fetch internal dependencies
                  -  $ ember g ember-cli-materialize
                  -          
                  - -
                  -
                  - -
                  -
                  -

                  Sass Setup

                  -

                  This section is only relevant if you chose to download the Sass version of Materialize.

                  -

                  Compiling Sass

                  -

                  Instead of having a css folder, you will find that the download instead contains many .scss files which contain the styles of individual components. Unfortunately, the browser cannot interpret Sass, so you must have your Sass compiler compile the scss/materialize.scss into a regular CSS file. At this point you can link this newly outputted file in your HTML page.

                  - -
                  
                  -  MyWebsite/
                  -  |--css/
                  -  |  |--materialize.css <-- compiled from scss/materialize.scss
                  -  |
                  -  |--font/
                  -  |  |--material-design-icons/
                  -  |  |--roboto/
                  -  |
                  -  |--js/
                  -  |  |--materialize.js
                  -  |
                  -  |--scss/
                  -  |  |--materialize.scss
                  -  |  |--components/
                  -  |
                  -  |--index.html
                  -        
                  -
                  -
                  - -
                  - -
                  - -
                  - -
                  -
                  - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/grid.html b/grid.html deleted file mode 100644 index 913820e577..0000000000 --- a/grid.html +++ /dev/null @@ -1,626 +0,0 @@ - - - - - - - - - Grid - Materialize - - - - - - - - - - - - - - - - -
                  - -
                  - -
                  -
                  -
                  - -
                  - - -
                  -
                  -

                  We are using a standard 12 column fluid responsive grid system.The grid helps you layout your page in an ordered, easy fashion

                  -

                  Container

                  -

                  The container class is not strictly part of the grid but is important in laying out content. It allows you to center your page content. The container class is set to ~70% of the window width. It helps you center and contain your page content. We use the container to contain our body content. - -

                  Demo

                  -

                  Try the button below to see what the page looks like without containers

                  - Turn off Containers - - -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  - -
                  - -
                  -
                  -
                  - -

                  -

                  -

                  -

                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  - - -

                  To add a container just put your content inside a <div> tag with a container class. Here's an example of how your page might be set up.

                  - -
                  
                  -    <body>
                  -      <div class="container">
                  -        <!-- Page Content goes here -->
                  -      </div>
                  -    </body>
                  -          
                  - -
                  - - - -
                  -

                  Introduction

                  -

                  Take a look at this section to quickly understand how the grid works!

                  -

                  12 Columns

                  -

                  Our standard grid has 12 columns. No matter the size of the browser, each of these columns will always have an equal width.

                  -
                  -
                  1
                  -
                  2
                  -
                  3
                  -
                  4
                  -
                  5
                  -
                  6
                  -
                  7
                  -
                  8
                  -
                  9
                  -
                  10
                  -
                  11
                  -
                  12
                  -
                  -

                  To get a feel of how the grid is used in HTML, take a look at the code below which will produce a similar result to the one above.

                  -
                  
                  -    <div class="row">
                  -      <div class="col s1">1</div>
                  -      <div class="col s1">2</div>
                  -      <div class="col s1">3</div>
                  -      <div class="col s1">4</div>
                  -      <div class="col s1">5</div>
                  -      <div class="col s1">6</div>
                  -      <div class="col s1">7</div>
                  -      <div class="col s1">8</div>
                  -      <div class="col s1">9</div>
                  -      <div class="col s1">10</div>
                  -      <div class="col s1">11</div>
                  -      <div class="col s1">12</div>
                  -    </div>
                  -          
                  -

                  Note: For now, just know that the s1 stands for small-1 which in plain English means "1 column on small screens".

                  - -
                  - -

                  Columns live inside Rows

                  -

                  Remember when you are creating your layout that all columns must be contained inside a row and that you must add the col class to your inner divs to make them into columns

                  -
                  -
                  This div is 12-columns wide on all screen sizes
                  -
                  6-columns (one-half)
                  -
                  6-columns (one-half)
                  -
                  -
                  
                  -    <div class="row">
                  -      <div class="col s12">This div is 12-columns wide</div>
                  -      <div class="col s6">This div is 6-columns wide</div>
                  -      <div class="col s6">This div is 6-columns wide</div>
                  -    </div>
                  -          
                  - -
                  -
                  -
                  -

                  Offsets

                  -

                  To offset, simply add offset-s2 to the class where s signifies the screen class-prefix (s = small, m = medium, l = large) and the number after is the number of columns you want to offset by.

                  -
                  -
                  This div is 12-columns wide on all screen sizes
                  -
                  6-columns (offset-by-6)
                  -
                  -
                  
                  -    <div class="row">
                  -      <div class="col s12 grid-example"><span class="flow-text">This div is 12-columns wide on all screen sizes</span></div>
                  -      <div class="col s6 offset-s6 grid-example"><span class="flow-text">6-columns (offset-by-6)</span></div>
                  -    </div>
                  -          
                  -
                  - -
                  - - -
                  -

                  Creating Layouts

                  -

                  Here we will show you how to create some commonly used layouts with our grid system. Hopefully these will get you more comfortable with laying out elements. To keep these demos simple, the ones here will not be responsive.

                  -
                  -
                  -

                  Section

                  -

                  The section class is used for simple top and bottom padding. Just add the section class to your div's containing large blocks of content.

                  -
                  -
                  -

                  Divider

                  -

                  Dividers are 1 pixel lines that help break up your content. Just add the divider to a div in between your content.

                  -
                  -
                  - -

                  Example Sections and Dividers

                  -
                  -
                  -
                  Section 1
                  -

                  Stuff

                  -
                  -
                  -
                  -
                  Section 2
                  -

                  Stuff

                  -
                  -
                  -
                  -
                  Section 3
                  -

                  Stuff

                  -
                  -
                  -
                  
                  -  <div class="divider"></div>
                  -  <div class="section">
                  -    <h5>Section 1</h5>
                  -    <p>Stuff</p>
                  -  </div>
                  -  <div class="divider"></div>
                  -  <div class="section">
                  -    <h5>Section 2</h5>
                  -    <p>Stuff</p>
                  -  </div>
                  -  <div class="divider"></div>
                  -  <div class="section">
                  -    <h5>Section 3</h5>
                  -    <p>Stuff</p>
                  -  </div>
                  -          

                  - -

                  Example Promotion Table

                  -

                  If we want 3 divs that are equal size, we define the divs with a width of 4-columns, 4+4+4 = 12, which nicely adds up to 12. Inside those divs, we can put our content. Take our front page content for example. We've modified it slightly for the sake of this example.

                  -
                  -
                  -
                  - flash_on -

                  Speeds up development

                  -

                  We did most of the heavy lifting for you to provide a default stylings that incorporate our custom components.

                  -
                  -
                  -
                  -
                  - group -

                  User Experience Focused

                  -

                  By utilizing elements and principles of Material Design, we were able to create a framework that focuses on User Experience.

                  -
                  -
                  -
                  -
                  - settings -

                  Easy to work with

                  -

                  We have provided detailed documentation as well as specific code examples to help new users get started.

                  -
                  -
                  -
                  - -
                  
                  -    <div class="row">
                  -
                  -      <div class="col s4">
                  -        <!-- Promo Content 1 goes here -->
                  -      </div>
                  -      <div class="col s4">
                  -        <!-- Promo Content 2 goes here -->
                  -      </div>
                  -      <div class="col s4">
                  -        <!-- Promo Content 3 goes here -->
                  -      </div>
                  -
                  -    </div>
                  -          
                  - -
                  - -

                  Example Side Navigation Layout

                  -

                  You can see how easy it is to create layouts using the grid system. Just remember to make sure your column numbers add up to 12 for an even layout.

                  - -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  - -
                  - -
                  -
                  -

                  -

                  -

                  -
                  -
                  -

                  -

                  -

                  -

                  -
                  -
                  -
                  -
                  -
                  -
                  - -
                  
                  -    <!-- Navbar goes here -->
                  -
                  -    <!-- Page Layout here -->
                  -    <div class="row">
                  -
                  -      <div class="col s3">
                  -        <!-- Grey navigation panel -->
                  -      </div>
                  -
                  -      <div class="col s9">
                  -        <!-- Teal page content  -->
                  -      </div>
                  -
                  -    </div>
                  -          
                  -
                  - - - -
                  -

                  Creating Responsive Layouts

                  -

                  Above we showed you how to layout elements using our grid system. Now we'll show you how to design your layouts so that they look great on all screen sizes.

                  -

                  Screen Sizes

                  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  Mobile Devices
                  <= 600px
                  Tablet Devices
                  <= 992px
                  Desktop Devices
                  > 992px
                  Class Prefix.s.m.l
                  Container Width85%85%70%
                  Number of Columns121212
                  - -
                  - -

                  Adding Responsiveness

                  -

                  In the previous examples, we only defined the size for small screens using "col s12". This is fine if we want a fixed layout since the rules propagate upwards. By just saying s12, we are essentially saying "col s12 m12 l12". But by explicitly defining the size we can make our website more responsive.

                  - -
                  -
                  I am always full-width (col s12)
                  -
                  I am full-width on mobile (col s12 m6)
                  -
                  -
                  
                  -    <div class="row">
                  -      <div class="grid-example col s12"><span class="flow-text">I am always full-width (col s12)</span></div>
                  -      <div class="grid-example col s12 m6"><span class="flow-text">I am full-width on mobile (col s12 m6)</span></div>
                  -    </div>
                  -          
                  - -
                  - -

                  Responsive Side Navigation Layout

                  -

                  In this example below, we take the same layout from above, but we make it responsive by defining how many columns the div should take up on each screen size. Try resizing your browser and watch the layout change below.

                  - -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  -
                  - -
                  - -
                  -
                  -

                  -

                  -

                  -
                  -
                  -

                  -

                  -

                  -

                  -
                  -
                  -
                  -
                  -
                  -
                  - -
                  
                  -    <!-- Navbar goes here -->
                  -
                  -    <!-- Page Layout here -->
                  -    <div class="row">
                  -
                  -      <div class="col s12 m4 l3"> <!-- Note that "m4 l3" was added -->
                  -        <!-- Grey navigation panel
                  -
                  -              This content will be:
                  -          3-columns-wide on large screens,
                  -          4-columns-wide on medium screens,
                  -          12-columns-wide on small screens  -->
                  -
                  -      </div>
                  -
                  -      <div class="col s12 m8 l9"> <!-- Note that "m8 l9" was added -->
                  -        <!-- Teal page content
                  -
                  -              This content will be:
                  -          9-columns-wide on large screens,
                  -          8-columns-wide on medium screens,
                  -          12-columns-wide on small screens  -->
                  -
                  -      </div>
                  -
                  -    </div>
                  -          
                  - -

                  More Responsive Grid Examples

                  -
                  -
                  s12
                  -
                  s12 m4 l2
                  -
                  s12 m4 l8
                  -
                  s12 m4 l2
                  -
                  s12 m6 l3
                  -
                  s12 m6 l3
                  -
                  s12 m6 l3
                  -
                  s12 m6 l3
                  -
                  -
                  -
                  
                  -  <div class="row">
                  -    <div class="col s12"><p>s12</p></div>
                  -    <div class="col s12 m4 l2"><p>s12 m4</p></div>
                  -    <div class="col s12 m4 l8"><p>s12 m4</p></div>
                  -    <div class="col s12 m4 l2"><p>s12 m4</p></div>
                  -  </div>
                  -  <div class="row">
                  -    <div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
                  -    <div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
                  -    <div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
                  -    <div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
                  -  </div>
                  -            
                  -
                  -
                  -
                  - - -
                  - - - -
                  -
                  - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/helpers.html b/helpers.html deleted file mode 100644 index 4531b95405..0000000000 --- a/helpers.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - Helpers - Materialize - - - - - - - - - - - - - - - - -
                  - -
                  - -
                  -
                  -
                  - -
                  - - -
                  -

                  Alignment

                  -

                  We have easy to use classes to help you align your content.

                  - -
                  Vertical Align
                  -

                  You can easily vertically center things by adding the class valign-wrapper to the container holding the items you want to vertically align.

                  -
                  -
                  This should be vertically aligned
                  -
                  -
                  
                  -<div class="valign-wrapper">
                  -  <h5 class="valign">This should be vertically aligned</h5>
                  -</div>
                  -        

                  - -
                  Text Align
                  -

                  These classes are for horizontally aligning content. We have .left-align, .right-align and .center-align

                  -
                  -
                  -
                  This should be left aligned
                  -
                  -
                  -
                  -
                  -
                  This should be right aligned
                  -
                  -
                  -
                  -
                  -
                  This should be center aligned
                  -
                  -
                  
                  -  <div>
                  -    <h5 class="left-align">This should be left aligned</h5>
                  -  </div>
                  -  <div>
                  -    <h5 class="right-align">This should be right aligned</h5>
                  -  </div>
                  -  <div>
                  -    <h5 class="center-align">This should be center aligned</h5>
                  -  </div>
                  -        

                  - -
                  Quick Floats
                  -

                  Quickly float things by adding the class left or right to the element. !important is used to avoid specificity issues.

                  -
                  
                  -<div class="left">...</div>
                  -<div class="right">...</div>
                  -        

                  - -
                  - - -
                  -

                  Hiding Content

                  -

                  We provide easy to use classes to hide content on specific screen sizes.

                  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  Screen Range
                  .hideHidden for all Devices
                  .hide-on-small-onlyHidden for Mobile Only
                  .hide-on-med-onlyHidden for Tablet Only
                  .hide-on-med-and-downHidden for Tablet and Below
                  .hide-on-med-and-upHidden for Tablet and Above
                  .hide-on-large-onlyHidden for Desktop Only
                  -
                  -
                  Usage
                  -
                  
                  -  <div class="hide-on-small-only"></div>
                  -        

                  - -
                  - - - - -
                  -

                  Formatting

                  -

                  These classes help format various content on your site.

                  - -
                  Truncation
                  -

                  To truncate long lines of text in an ellipsis, add the class truncate to the tag which contains the text. See an example below of a header being truncated inside a card.

                  - -
                  -
                  -
                  -

                  This is an extremely long title that will be truncated

                  -
                  -
                  -
                  - -
                  
                  -  <h4 class="truncate">This is an extremely long title that will be truncated</h4>
                  -        

                  - -
                  Hover
                  -

                  The hoverable is a hover class that adds an animation for box shadow as seen below. It can be used on most elements, but meant for use on cards.

                  -
                  -
                  - - Card Title -
                  -
                  -

                  I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                  -
                  - -
                  - -
                  
                  -  <div class="card-panel hoverable"> Hoverable Card Panel</div>
                  -        
                  - -
                  - - -
                  - -
                  -
                  -
                  - - -
                  - -
                  -
                  - -
                  -
                  - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/icons.html b/icons.html deleted file mode 100644 index 54c330e2e6..0000000000 --- a/icons.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - - - - - - Icons - Materialize - - - - - - - - - - - - - - - - -
                  - -
                  - -
                  -
                  -
                  -
                  - -
                  -

                  We have included 740 Material Design Icons courtesy of Google. You can download them directly from the Material Design specs.

                  -

                  Usage

                  -

                  To be able to use these icons, you must include this line in the <head>portion of your HTML code

                  -
                  
                  -  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
                  -

                  To use these icons, use the material-icons class on an element and provide the ligature as the text content.

                  -
                  
                  -      <i class="material-icons">add</i>
                  -            
                  - -

                  Sizes

                  -

                  To control the size of the icon, change the font-size: 30px property of your icon. Optionally you can use preset classes as shown below.

                  -
                  -
                  -
                  insert_chart

                  Tiny

                  -
                  insert_chart

                  Small

                  -
                  insert_chart

                  Medium

                  -
                  insert_chart

                  Large

                  -
                  -
                  -
                  
                  -      <!--
                  -      Sizes:
                  -      tiny: 1rem
                  -      small: 2rem
                  -      medium: 4rem
                  -      large: 6rem
                  -      -->
                  -      <i class="large material-icons">insert_chart</i>
                  -            
                  - - -
                  -

                  -
                  info_outlineinfo_outline
                  -
                  inputinput
                  -
                  invert_colorsinvert_colors
                  -
                  labellabel
                  -
                  label_outlinelabel_outline
                  -
                  languagelanguage
                  -
                  query_builderquery_builder
                  -
                  perm_identityperm_identity
                  -
                  perm_mediaperm_media
                  -
                  perm_phone_msgperm_phone_msg
                  -
                  perm_scan_wifiperm_scan_wifi
                  -
                  picture_in_picturepicture_in_picture
                  -
                  play_for_workplay_for_work
                  -
                  polymerpolymer
                  -
                  power_settings_newpower_settings_new
                  -
                  printprint
                  -
                  thumb_downthumb_down
                  -
                  thumb_upthumb_up
                  -
                  thumbs_up_downthumbs_up_down
                  -
                  emailemail
                  -
                  dialpaddialpad
                  -
                  dialer_sipdialer_sip
                  -
                  contactscontacts
                  -
                  forward_5forward_5
                  -
                  stay_current_portraitstay_current_portrait
                  -
                  stay_primary_landscapestay_primary_landscape
                  -
                  stay_primary_portraitstay_primary_portrait
                  -
                  swap_callsswap_calls
                  -
                  textsmstextsms
                  -
                  voicemailvoicemail
                  -
                  vpn_keyvpn_key
                  -
                  group_workgroup_work
                  -
                  gradegrade
                  -
                  clear_allclear_all
                  -
                  chat_bubble_outlinechat_bubble_outline
                  -
                  chat_bubblechat_bubble
                  -
                  repeatrepeat
                  -
                  repeat_onerepeat_one
                  -
                  replayreplay
                  -
                  replay_10replay_10
                  -
                  replay_30replay_30
                  -
                  replay_5replay_5
                  -
                  shuffleshuffle
                  -
                  skip_nextskip_next
                  -
                  skip_previousskip_previous
                  -
                  contact_phonecontact_phone
                  -
                  commentcomment
                  -
                  recent_actorsrecent_actors
                  -
                  snoozesnooze
                  -
                  sort_by_alphasort_by_alpha
                  -
                  stopstop
                  -
                  subtitlessubtitles
                  -
                  surround_soundsurround_sound
                  -
                  webweb
                  -
                  volume_upvolume_up
                  -
                  volume_offvolume_off
                  -
                  volume_mutevolume_mute
                  -
                  toctoc
                  -
                  todaytoday
                  -
                  tolltoll
                  -
                  track_changestrack_changes
                  -
                  translatetranslate
                  -
                  trending_downtrending_down
                  -
                  question_answerquestion_answer
                  -
                  receiptreceipt
                  -
                  donedone
                  -
                  tabtab
                  -
                  tab_unselectedtab_unselected
                  -
                  theaterstheaters
                  -
                  hdhd
                  -
                  gamesgames
                  -
                  hearinghearing
                  -
                  view_moduleview_module
                  -
                  view_listview_list
                  -
                  settings_remotesettings_remote
                  -
                  settings_voicesettings_voice
                  -
                  searchsearch
                  -
                  settingssettings
                  -
                  settings_applicationssettings_applications
                  -
                  settings_backup_restoresettings_backup_restore
                  -
                  settings_bluetoothsettings_bluetooth
                  -
                  settings_brightnesssettings_brightness
                  -
                  settings_cellsettings_cell
                  -
                  settings_ethernetsettings_ethernet
                  -
                  settings_input_antennasettings_input_antenna
                  -
                  trending_flattrending_flat
                  -
                  trending_uptrending_up
                  -
                  workwork
                  -
                  youtube_searched_foryoutube_searched_for
                  -
                  zoom_inzoom_in
                  -
                  my_locationmy_location
                  -
                  visibility_offvisibility_off
                  -
                  visibilityvisibility
                  -
                  view_weekview_week
                  -
                  view_streamview_stream
                  -
                  view_quiltview_quilt
                  -
                  video_libraryvideo_library
                  -
                  videocamvideocam
                  -
                  videocam_offvideocam_off
                  -
                  volume_downvolume_down
                  -
                  settings_overscansettings_overscan
                  -
                  settings_input_svideosettings_input_svideo
                  -
                  settings_input_hdmisettings_input_hdmi
                  -
                  settings_input_compositesettings_input_composite
                  -
                  settings_input_componentsettings_input_component
                  -
                  launchlaunch
                  -
                  perm_device_informationperm_device_information
                  -
                  perm_data_settingperm_data_setting
                  -
                  zoom_outzoom_out
                  -
                  alarm_onalarm_on
                  -
                  dnsdns
                  -
                  redeemredeem
                  -
                  reorderreorder
                  -
                  report_problemreport_problem
                  -
                  restorerestore
                  -
                  roomroom
                  -
                  scheduleschedule
                  -
                  moviemovie
                  -
                  androidandroid
                  -
                  announcementannouncement
                  -
                  mic_offmic_off
                  -
                  mic_nonemic_none
                  -
                  swap_horizswap_horiz
                  -
                  swap_vertswap_vert
                  -
                  swap_vertical_circleswap_vertical_circle
                  -
                  system_update_altsystem_update_alt
                  -
                  subtitlessubtitles
                  -
                  present_to_allpresent_to_all
                  -
                  portable_wifi_offportable_wifi_off
                  -
                  phonelink_setupphonelink_setup
                  -
                  phonelink_ringphonelink_ring
                  -
                  phonelink_lockphonelink_lock
                  -
                  phonelink_erasephonelink_erase
                  -
                  person_pinperson_pin
                  -
                  navigationnavigation
                  -
                  new_releasesnew_releases
                  -
                  not_interestednot_interested
                  -
                  pausepause
                  -
                  pause_circle_filledpause_circle_filled
                  -
                  pause_circle_outlinepause_circle_outline
                  -
                  play_arrowplay_arrow
                  -
                  play_circle_filledplay_circle_filled
                  -
                  play_circle_outlineplay_circle_outline
                  -
                  playlist_addplaylist_add
                  -
                  queuequeue
                  -
                  queue_musicqueue_music
                  -
                  radioradio
                  -
                  classclass
                  -
                  codecode
                  -
                  credit_cardcredit_card
                  -
                  dashboarddashboard
                  -
                  deletedelete
                  -
                  descriptiondescription
                  -
                  open_withopen_with
                  -
                  pageviewpageview
                  -
                  paymentpayment
                  -
                  perm_camera_micperm_camera_mic
                  -
                  perm_contact_calendarperm_contact_calendar
                  -
                  airplayairplay
                  -
                  done_alldone_all
                  -
                  phonephone
                  -
                  no_simno_sim
                  -
                  invert_colors_offinvert_colors_off
                  -
                  chatchat
                  -
                  call_splitcall_split
                  -
                  call_receivedcall_received
                  -
                  call_missedcall_missed
                  -
                  call_mergecall_merge
                  -
                  call_madecall_made
                  -
                  call_endcall_end
                  -
                  callcall
                  -
                  businessbusiness
                  -
                  stopstop
                  -
                  sort_by_alphasort_by_alpha
                  -
                  snoozesnooze
                  -
                  commentcomment
                  -
                  clear_allclear_all
                  -
                  chat_bubble_outlinechat_bubble_outline
                  -
                  chat_bubblechat_bubble
                  -
                  alarm_offalarm_off
                  -
                  messagemessage
                  -
                  location_onlocation_on
                  -
                  location_offlocation_off
                  -
                  live_helplive_help
                  -
                  albumalbum
                  -
                  av_timerav_timer
                  -
                  closed_captionclosed_caption
                  -
                  equalizerequalizer
                  -
                  turned_in_notturned_in_not
                  -
                  verified_userverified_user
                  -
                  view_agendaview_agenda
                  -
                  view_arrayview_array
                  -
                  view_carouselview_carousel
                  -
                  view_columnview_column
                  -
                  subjectsubject
                  -
                  supervisor_accountsupervisor_account
                  -
                  settings_powersettings_power
                  -
                  shopshop
                  -
                  shop_twoshop_two
                  -
                  shopping_basketshopping_basket
                  -
                  shopping_cartshopping_cart
                  -
                  speaker_notesspeaker_notes
                  -
                  spellcheckspellcheck
                  -
                  star_ratestar_rate
                  -
                  starsstars
                  -
                  storestore
                  -
                  ring_volumering_volume
                  -
                  speaker_phonespeaker_phone
                  -
                  stay_current_landscapestay_current_landscape
                  -
                  forumforum
                  -
                  import_exportimport_export
                  -
                  open_in_browseropen_in_browser
                  -
                  open_in_newopen_in_new
                  -
                  forward_30forward_30
                  -
                  turned_inturned_in
                  -
                  view_headlineview_headline
                  -
                  view_dayview_day
                  -
                  warningwarning
                  -
                  error_outlineerror_outline
                  -
                  errorerror
                  -
                  add_alertadd_alert
                  -
                  settings_phonesettings_phone
                  -
                  forward_10forward_10
                  -
                  fast_rewindfast_rewind
                  -
                  fast_forwardfast_forward
                  -
                  explicitexplicit
                  -
                  listlist
                  -
                  locklock
                  -
                  lock_openlock_open
                  -
                  lock_outlinelock_outline
                  -
                  loyaltyloyalty
                  -
                  markunread_mailboxmarkunread_mailbox
                  -
                  note_addnote_add
                  -
                  offline_pinoffline_pin
                  -
                  httphttp
                  -
                  micmic
                  -
                  looploop
                  -
                  library_musiclibrary_music
                  -
                  library_bookslibrary_books
                  -
                  library_addlibrary_add
                  -
                  high_qualityhigh_quality
                  -
                  surround_soundsurround_sound
                  -
                  infoinfo
                  -
                  httpshttps
                  -
                  aspect_ratioaspect_ratio
                  -
                  assessmentassessment
                  -
                  assignmentassignment
                  -
                  assignment_indassignment_ind
                  -
                  assignment_lateassignment_late
                  - - -
                  -
                  - -
                  - - -
                  -
                  -
                  - - -
                  - -
                  -
                  - -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/images/favicon/favicon-32x32.png b/images/favicon/favicon-32x32.png old mode 100755 new mode 100644 diff --git a/images/materialize.gif b/images/materialize.gif deleted file mode 100644 index de620ff143..0000000000 Binary files a/images/materialize.gif and /dev/null differ diff --git a/images/materialize.png b/images/materialize.png old mode 100755 new mode 100644 diff --git a/images/showcase/absurdoburger.png b/images/showcase/absurdoburger.png deleted file mode 100644 index 3e1de4061e..0000000000 Binary files a/images/showcase/absurdoburger.png and /dev/null differ diff --git a/images/showcase/adolfo.jpg b/images/showcase/adolfo.jpg deleted file mode 100644 index 0b9a979474..0000000000 Binary files a/images/showcase/adolfo.jpg and /dev/null differ diff --git a/images/showcase/alexander_web_service.png b/images/showcase/alexander_web_service.png deleted file mode 100644 index 728e0fffa0..0000000000 Binary files a/images/showcase/alexander_web_service.png and /dev/null differ diff --git a/images/showcase/danielangel.png b/images/showcase/danielangel.png deleted file mode 100644 index 84d884cea5..0000000000 Binary files a/images/showcase/danielangel.png and /dev/null differ diff --git a/images/showcase/eadbox.jpg b/images/showcase/eadbox.jpg new file mode 100644 index 0000000000..0aaa5619a1 Binary files /dev/null and b/images/showcase/eadbox.jpg differ diff --git a/images/showcase/eadbox.png b/images/showcase/eadbox.png deleted file mode 100644 index b1879a6713..0000000000 Binary files a/images/showcase/eadbox.png and /dev/null differ diff --git a/images/showcase/jsobotka.png b/images/showcase/jsobotka.png deleted file mode 100644 index 0d7a98ad09..0000000000 Binary files a/images/showcase/jsobotka.png and /dev/null differ diff --git a/images/showcase/kenyaapps.png b/images/showcase/kenyaapps.png deleted file mode 100644 index 19a11c667d..0000000000 Binary files a/images/showcase/kenyaapps.png and /dev/null differ diff --git a/images/showcase/kioskbrowser.png b/images/showcase/kioskbrowser.png index 630cafb1df..f41d92e14d 100644 Binary files a/images/showcase/kioskbrowser.png and b/images/showcase/kioskbrowser.png differ diff --git a/images/showcase/lifeawesome.png b/images/showcase/lifeawesome.png deleted file mode 100644 index 3ac92923c5..0000000000 Binary files a/images/showcase/lifeawesome.png and /dev/null differ diff --git a/images/showcase/makoframework.png b/images/showcase/makoframework.png deleted file mode 100644 index 92002a1caf..0000000000 Binary files a/images/showcase/makoframework.png and /dev/null differ diff --git a/images/showcase/ocloud.png b/images/showcase/ocloud.png deleted file mode 100644 index 796629cddd..0000000000 Binary files a/images/showcase/ocloud.png and /dev/null differ diff --git a/images/showcase/playful_digital.png b/images/showcase/playful_digital.png deleted file mode 100644 index 0ee5ecf0e8..0000000000 Binary files a/images/showcase/playful_digital.png and /dev/null differ diff --git a/images/showcase/straphq.png b/images/showcase/straphq.png deleted file mode 100644 index 5d2a6efc4b..0000000000 Binary files a/images/showcase/straphq.png and /dev/null differ diff --git a/images/showcase/tuanphongtruong.png b/images/showcase/tuanphongtruong.png deleted file mode 100644 index 995af45234..0000000000 Binary files a/images/showcase/tuanphongtruong.png and /dev/null differ diff --git a/images/showcase/varun_malhotra.jpg b/images/showcase/varun_malhotra.jpg new file mode 100644 index 0000000000..b285509948 Binary files /dev/null and b/images/showcase/varun_malhotra.jpg differ diff --git a/images/showcase/varun_malhotra.png b/images/showcase/varun_malhotra.png deleted file mode 100644 index ee4c9549ba..0000000000 Binary files a/images/showcase/varun_malhotra.png and /dev/null differ diff --git a/images/showcase/visitsarasota.jpg b/images/showcase/visitsarasota.jpg new file mode 100644 index 0000000000..be7a2763d3 Binary files /dev/null and b/images/showcase/visitsarasota.jpg differ diff --git a/images/showcase/visitsarasota.png b/images/showcase/visitsarasota.png deleted file mode 100644 index 1fc6c3bf89..0000000000 Binary files a/images/showcase/visitsarasota.png and /dev/null differ diff --git a/images/toast.gif b/images/toast.gif old mode 100755 new mode 100644 diff --git a/index.html b/index.html deleted file mode 100644 index cdce0889ce..0000000000 --- a/index.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - - - Documentation - Materialize - - - - - - - - - - - - - - - - -
                  -
                  - -
                  -
                  -
                  -
                  -

                  Materialize

                  -
                  -

                  A modern responsive front-end framework based on Material Design

                  -
                  - - - -
                  - - -
                  -
                  - -
                  -
                  -
                  -
                  - Latest Commit on Github: -    - -    - - Github -
                  -
                  -
                  -
                  - -
                  -
                  - -
                  -
                  -
                  - -
                  -
                  - -
                  -

                  Materialize simplifies life for developers and the users they serve.

                  -
                  - - -
                  -
                  -
                  - flash_on -

                  Speeds up development

                  -

                  We did most of the heavy lifting for you to provide a default stylings that incorporate our custom components. Additionally, we refined animations and transitions to provide a smoother experience for developers.

                  -
                  -
                  - -
                  -
                  - group -

                  User Experience Focused

                  -

                  By utilizing elements and principles of Material Design, we were able to create a framework that incorporates components and animations that provide more feedback to users. Additionally, a single underlying responsive system across all platforms allow for a more unified user experience.

                  -
                  -
                  - -
                  -
                  - settings -

                  Easy to work with

                  -

                  We have provided detailed documentation as well as specific code examples to help new users get started. We are also always open to feedback and can answer any questions a user may have about Materialize.

                  -
                  -
                  -
                  - -
                  -
                  -
                  -
                  -

                  Materialize Showcase

                  -

                  Checkout what people are creating with Materialize. Get inspired by these beautiful sites and you can even submit your own website to be showcased here.

                  - Explore our Showcase -
                  -
                  -
                  - - -
                  -
                  -
                  -
                  -
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - -
                  -
                  -
                  Join the Discussion
                  -

                  We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                  - Chat -
                  -
                  -
                  Connect
                  - -
                  - -
                  -
                  -
                  -
                  -
                  - -
                  - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jade/404.jade b/jade/404.jade new file mode 100644 index 0000000000..3a31640e91 --- /dev/null +++ b/jade/404.jade @@ -0,0 +1,13 @@ +- var white_nav = true +- var page = "404" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/404_content.html + include _footer.html + include _scripts.html diff --git a/jade/_footer.html b/jade/_footer.html index e8466d8b84..dcb926b898 100644 --- a/jade/_footer.html +++ b/jade/_footer.html @@ -3,15 +3,8 @@
                  Help Materialize Grow
                  -

                  We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                  -
                  - - - -
                  - +

                  We hope you have enjoyed using Materialize and if you feel like it has helped you out and want to support the team you can help us by donating or backing us on Patreon. Any amount would help support and continue development on this project and is greatly appreciated.

                  + Support Us
                  Join the Discussion
                  @@ -20,18 +13,70 @@
                  Join the Discussion
                  +
                  +
                  +
                  Patreon Sponsors
                  +
                  +
                  + + + + + +
                  +
                  + + + + +
                  +
                  - \ No newline at end of file + diff --git a/jade/_head.jade b/jade/_head.jade index 70b2731d6c..44ec1bbac5 100644 --- a/jade/_head.jade +++ b/jade/_head.jade @@ -25,15 +25,16 @@ meta(name='theme-color', content='#EE6E73') // CSS link(href='css/prism.css', rel='stylesheet') link(href='css/ghpages-materialize.css', type='text/css', rel='stylesheet', media='screen,projection') -link(href='http://fonts.googleapis.com/css?family=Inconsolata', rel='stylesheet', type='text/css') -link(href='http://fonts.googleapis.com/icon?family=Material+Icons', rel='stylesheet') +link(href='https://fonts.googleapis.com/css?family=Inconsolata', rel='stylesheet', type='text/css') +link(href='https://fonts.googleapis.com/icon?family=Material+Icons', rel='stylesheet') -script. - window.liveSettings = { - api_key: "a0b49b34b93844c38eaee15690d86413", - picker: "bottom-right", - detectlang: true, - dynamic: true, - autocollect: true - }; -script(src='//cdn.transifex.com/live.js') +if !isDemo + script. + window.liveSettings = { + api_key: "a0b49b34b93844c38eaee15690d86413", + picker: "bottom-right", + detectlang: true, + dynamic: true, + autocollect: true + }; + script(src='//cdn.transifex.com/live.js') diff --git a/jade/_navbar.jade b/jade/_navbar.jade index 4fe9c8924c..9c34b3d41a 100644 --- a/jade/_navbar.jade +++ b/jade/_navbar.jade @@ -6,11 +6,24 @@ header a.page-title #{page} .container a.button-collapse.top-nav(href='#', data-activates='nav-mobile', class=(no_nav == false ? "full hide-on-large-only" : "" + "waves-effect waves-light circle hide-on-large-only")) - i.mdi-navigation-menu + i.material-icons menu ul#nav-mobile.side-nav.fixed li(class="logo") - a#logo-container.brand-logo(href='http://materializecss.com/') + a#logo-container.brand-logo(href='/') object#front-page-logo(type='image/svg+xml', data='res/materialize.svg') Your browser does not support SVG + li.version + a.dropdown-button(href='#' data-activates='version-dropdown') 0.100.2 + + ul#version-dropdown.dropdown-content + li + a(href='http://materializecss.com') 1.0.0-beta + li + a(href='http://archives.materializecss.com/0.100.2/') 0.100.2 + li(class="search") + div.search-wrapper.card + input(id="search") + i.material-icons search + div.search-results li.bold(class=(page == "About" ? "active" : "")) a.waves-effect.waves-teal(href='about.html') About li.bold(class=(page == "Getting Started" ? "active" : "")) @@ -19,7 +32,7 @@ header li.no-padding ul.collapsible.collapsible-accordion li.bold - a.collapsible-header(class=(page == "Sass" || page == "Typography" || page == "Color" || page == "Shadow" || page == "Grid" || page == "Media CSS" || page == "Table" || page == "Helpers" ? "active" : "")+" waves-effect waves-teal") + a.collapsible-header(class=(page == "Sass" || page == "Typography" || page == "Color" || page == "Shadow" || page == "Grid" || page == "Media CSS" || page == "Pulse" || page == "Table" || page == "CSS Transitions" || page == "Helpers" ? "active" : "")+" waves-effect waves-teal") | CSS .collapsible-body ul @@ -31,16 +44,20 @@ header a(href='helpers.html') Helpers li(class=(page == "Media CSS" ? "active" : "")) a(href='media-css.html') Media + li(class=(page == "Pulse" ? "active" : "")) + a(href='pulse.html') Pulse li(class=(page == "Sass" ? "active" : "")) a(href='sass.html') Sass li(class=(page == "Shadow" ? "active" : "")) a(href='shadow.html') Shadow li(class=(page == "Table" ? "active" : "")) a(href='table.html') Table + li(class=(page == "CSS Transitions" ? "active" : "")) + a(href='css-transitions.html') Transitions li(class=(page == "Typography" ? "active" : "")) a(href='typography.html') Typography li.bold - a.collapsible-header(class=(page == "Forms" || page == "Buttons" || page == "Navbar" || page == "Cards" || page == "Chips" || page == "Preloader" || page == "Pagination" || page == "Collections" || page == "Badges" || page == "Footer" ? "active" : "" || page == "Icons" ? "active" : "")+" waves-effect waves-teal") + a.collapsible-header(class=(page == "Forms" || page == "Buttons" || page == "Navbar" || page == "Cards" || page == "Chips" || page == "Preloader" || page == "Pagination" || page == "Collections" || page == "Badges" || page == "Breadcrumbs" || page == "Footer" ? "active" : "" || page == "Icons" ? "active" : "")+" waves-effect waves-teal") | Components .collapsible-body ul @@ -48,6 +65,8 @@ header a(href='badges.html') Badges li(class=(page == "Buttons" ? "active" : "")) a(href='buttons.html') Buttons + li(class=(page == "Breadcrumbs" ? "active" : "")) + a(href='breadcrumbs.html') Breadcrumbs li(class=(page == "Cards" ? "active" : "")) a(href='cards.html') Cards li(class=(page == "Chips" ? "active" : "")) @@ -67,16 +86,20 @@ header li(class=(page == "Preloader" ? "active" : "")) a(href='preloader.html') Preloader li.bold - a.collapsible-header(class=(page == "Dialogs" || page == "Modals" || page == "Dropdown" || page == "Tabs" || page == "ScrollFire" || page == "Scrollspy" || page == "SideNav" || page == "Pushpin" || page == "Waves" || page == "Media" || page == "Transitions" || page == "Parallax" || page == "Collapsible" ? "active" : "")+" waves-effect waves-teal") + a.collapsible-header(class=(page == "Dialogs" || page == "Modals" || page == "Dropdown" || page == "FeatureDiscovery" || page == "Tabs" || page == "ScrollFire" || page == "Scrollspy" || page == "SideNav" || page == "Pushpin" || page == "Waves" || page == "Media" || page == "Transitions" || page == "Parallax" || page == "Collapsible" ? "active" : "" || page == "Carousel" ? "active" : "")+" waves-effect waves-teal") | JavaScript .collapsible-body ul + li(class=(page == "Carousel" ? "active" : "")) + a(href='carousel.html') Carousel li(class=(page == "Collapsible" ? "active" : "")) a(href='collapsible.html') Collapsible li(class=(page == "Dialogs" ? "active" : "")) a(href='dialogs.html') Dialogs li(class=(page == "Dropdown" ? "active" : "")) a(href='dropdown.html') Dropdown + li(class=(page == "FeatureDiscovery" ? "active" : "")) + a(href='feature-discovery.html') FeatureDiscovery li(class=(page == "Media" ? "active" : "")) a(href='media.html') Media li(class=(page == "Modals" ? "active" : "")) @@ -99,6 +122,25 @@ header a(href='waves.html') Waves li.bold(class=(page == "Mobile" ? "active" : "")) - a.waves-effect.waves-teal(href='http://materializecss.com/mobile.html') Mobile + a.waves-effect.waves-teal(href='mobile.html') Mobile li.bold(class=(page == "Showcase" ? "active" : "")) a.waves-effect.waves-teal(href='showcase.html') Showcase + li.bold(class=(page == "Themes" ? "active" : "")) + a.waves-effect.waves-teal(href='themes.html') Themes + + // Sidebar BSA + script(src="//m.servedby-buysellads.com/monetization.js" type="text/javascript"). + .bsa-cpc + script. + (function(){ + if(typeof _bsa !== 'undefined' && _bsa) { + _bsa.init('default', 'CKYD55QM', 'placement:materializecsscom', { + target: '.bsa-cpc', + align: 'horizontal', + disable_css: 'true' + }); + } + })(); + + .patreon-ad + a.waves-effect(href='https://www.patreon.com/materialize', target='_blank') Become a Patron \ No newline at end of file diff --git a/jade/_scripts.html b/jade/_scripts.html index f03a39aee1..6780197d1c 100644 --- a/jade/_scripts.html +++ b/jade/_scripts.html @@ -1,10 +1,12 @@ - - + - + + + @@ -23,4 +25,4 @@ ga('create', 'UA-56218128-1', 'auto'); ga('require', 'displayfeatures'); ga('send', 'pageview'); - \ No newline at end of file + diff --git a/jade/about.jade b/jade/about.jade index e35e8657c9..f9eb4ce5b5 100644 --- a/jade/about.jade +++ b/jade/about.jade @@ -10,4 +10,4 @@ html(lang="en") main include about/about_content.html include _footer.html - include _scripts.html \ No newline at end of file + include _scripts.html diff --git a/jade/about/about_content.html b/jade/about/about_content.html index 0c2640bb9e..931369b5bc 100644 --- a/jade/about/about_content.html +++ b/jade/about/about_content.html @@ -3,7 +3,7 @@

                  About

                  -

                  Learn about the Material Design and our Project Team.

                  +

                  Learn about Material Design and our Project Team.

                  @@ -129,4 +129,4 @@

                  Kevin Louie

                  -
                  \ No newline at end of file +
                  diff --git a/jade/breadcrumbs.jade b/jade/breadcrumbs.jade new file mode 100644 index 0000000000..0d4196ae11 --- /dev/null +++ b/jade/breadcrumbs.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Breadcrumbs" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/breadcrumbs_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/jade/carousel.jade b/jade/carousel.jade new file mode 100644 index 0000000000..00e5945160 --- /dev/null +++ b/jade/carousel.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Carousel" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/carousel_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/jade/css-transitions.jade b/jade/css-transitions.jade new file mode 100644 index 0000000000..569fddaa8e --- /dev/null +++ b/jade/css-transitions.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "CSS Transitions" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/css-transitions_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/jade/dialogs.jade b/jade/dialogs.jade index a95627da6e..bff10af572 100644 --- a/jade/dialogs.jade +++ b/jade/dialogs.jade @@ -13,6 +13,6 @@ html(lang="en") include _scripts.html script(type='text/javascript'). var displayCustomHTMLToast = function () { - var $toastContent = $('I am toast content'); - Materialize.toast($toastContent, 5000); - } \ No newline at end of file + var $toastContent = $('I am toast content').add($('')); + Materialize.toast($toastContent, 10000); + } diff --git a/jade/feature-discovery.jade b/jade/feature-discovery.jade new file mode 100644 index 0000000000..a6c646e84c --- /dev/null +++ b/jade/feature-discovery.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "FeatureDiscovery" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/featureDiscovery_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/jade/forms.jade b/jade/forms.jade index f9eb52860b..2d432881f7 100644 --- a/jade/forms.jade +++ b/jade/forms.jade @@ -5,9 +5,26 @@ doctype html html(lang="en") head include _head.jade + link(href='/extras/noUiSlider/nouislider.css', rel='stylesheet') body include _navbar.jade main include page-contents/forms_content.html include _footer.html - include _scripts.html \ No newline at end of file + include _scripts.html + script(src="/extras/noUiSlider/nouislider.js") + script(type='text/javascript'). + var slider = document.getElementById('range-input'); + noUiSlider.create(slider, { + start: [20, 80], + connect: true, + step: 1, + orientation: 'horizontal', + range: { + 'min': 0, + 'max': 100 + }, + format: wNumb({ + decimals: 0 + }) + }); diff --git a/jade/fullscreen-slider-demo.jade b/jade/fullscreen-slider-demo.jade index 986e229ddf..bb995f41d4 100644 --- a/jade/fullscreen-slider-demo.jade +++ b/jade/fullscreen-slider-demo.jade @@ -1,4 +1,5 @@ - var page = "Fullscreen Slider" +- var isDemo = true doctype html html(lang="en") diff --git a/jade/getting_started/getting_started_content.html b/jade/getting_started/getting_started_content.html index db6021808d..f0afd35477 100644 --- a/jade/getting_started/getting_started_content.html +++ b/jade/getting_started/getting_started_content.html @@ -29,12 +29,12 @@

                  Download

                  Materialize

                  This is the standard version that comes with both the minified and unminified CSS and JavaScript files. This option requires little to no setup. Use this if you are unfamiliar with Sass.

                  - Materializefile_download + Materializefile_download

                  Sass

                  This version contains the source SCSS files. By choosing this version you have more control over which components to include. You will need a Sass compiler if you choose this option.

                  - Sourcefile_download + Sourcefile_download

                  @@ -42,10 +42,10 @@

                  Download

                  You can find all the versions of the CDN at cdnjs.

                  
                     <!-- Compiled and minified CSS -->
                  -  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/css/materialize.min.css">
                  +  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css">
                   
                     <!-- Compiled and minified JavaScript -->
                  -  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/js/materialize.min.js"></script>
                  +  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>
                             
                  @@ -81,7 +81,7 @@

                  Thanks for Downloading!


                  - +
                  @@ -107,8 +107,7 @@

                  Project Structure

                  |--css/ | |--materialize.css | - |--font/ - | |--material-design-icons/ + |--fonts/ | |--roboto/ | |--js/ @@ -126,7 +125,7 @@

                  HTML Setup

                  <html> <head> <!--Import Google Icon Font--> - <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <!--Import materialize.css--> <link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/> @@ -136,7 +135,7 @@

                  HTML Setup

                  <body> <!--Import jQuery before materialize.js--> - <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script> + <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="js/materialize.min.js"></script> </body> </html> @@ -160,8 +159,8 @@

                  Templates

                  Parallax Template

                  This is the simplest starter page with a Header, Call-to-Action, and Icon Features.

                  - Demo - Download + Demosearch + Downloadfile_download
                  @@ -203,8 +202,7 @@

                  Compiling Sass

                  |--css/ | |--materialize.css <-- compiled from scss/materialize.scss | - |--font/ - | |--material-design-icons/ + |--fonts/ | |--roboto/ | |--js/ diff --git a/jade/index.jade b/jade/index.jade index 868b763511..50dfc275d6 100644 --- a/jade/index.jade +++ b/jade/index.jade @@ -9,4 +9,4 @@ html(lang="en") main include index/index_content.html include _footer.html - include _scripts.html \ No newline at end of file + include _scripts.html diff --git a/jade/index/index_content.html b/jade/index/index_content.html index 183a567a8c..83282f1dfb 100644 --- a/jade/index/index_content.html +++ b/jade/index/index_content.html @@ -1,4 +1,3 @@ -

                  Materialize

                  @@ -8,9 +7,9 @@

                  A modern responsive front-end framework - + -
                  +
                  @@ -76,10 +75,23 @@

                  Materialize simplifies life for develope
                  -

                  Materialize Showcase

                  -

                  Checkout what people are creating with Materialize. Get inspired by these beautiful sites and you can even submit your own website to be showcased here.

                  +

                  Showcase

                  +

                  Checkout what people are creating with Materialize. Get inspired by these beautiful sites and you can even submit your own website to be showcased here.

                  Explore our Showcase
                  +
                  +
                  +
                  +

                  Themes

                  +
                  +

                  + Take a look at our official themes for Materialize.

                  + +

                  + Explore our Themes +
                  +
                  +

                  diff --git a/jade/lunr.min.js b/jade/lunr.min.js new file mode 100644 index 0000000000..6aa6bc7d69 --- /dev/null +++ b/jade/lunr.min.js @@ -0,0 +1,7 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12 + * Copyright (C) 2015 Oliver Nightingale + * MIT Licensed + * @license + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.5.12",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){return arguments.length&&null!=t&&void 0!=t?Array.isArray(t)?t.map(function(t){return t.toLowerCase()}):t.toString().trim().toLowerCase().split(/[\s\-]+/):[]},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+o+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+="e":h.test(n)?(s=g,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:"a",able:"able",about:"about",across:"across",after:"after",all:"all",almost:"almost",also:"also",am:"am",among:"among",an:"an",and:"and",any:"any",are:"are",as:"as",at:"at",be:"be",because:"because",been:"been",but:"but",by:"by",can:"can",cannot:"cannot",could:"could",dear:"dear",did:"did","do":"do",does:"does",either:"either","else":"else",ever:"ever",every:"every","for":"for",from:"from",get:"get",got:"got",had:"had",has:"has",have:"have",he:"he",her:"her",hers:"hers",him:"him",his:"his",how:"how",however:"however",i:"i","if":"if","in":"in",into:"into",is:"is",it:"it",its:"its",just:"just",least:"least",let:"let",like:"like",likely:"likely",may:"may",me:"me",might:"might",most:"most",must:"must",my:"my",neither:"neither",no:"no",nor:"nor",not:"not",of:"of",off:"off",often:"often",on:"on",only:"only",or:"or",other:"other",our:"our",own:"own",rather:"rather",said:"said",say:"say",says:"says",she:"she",should:"should",since:"since",so:"so",some:"some",than:"than",that:"that",the:"the",their:"their",them:"them",then:"then",there:"there",these:"these",they:"they","this":"this",tis:"tis",to:"to",too:"too",twas:"twas",us:"us",wants:"wants",was:"was",we:"we",were:"were",what:"what",when:"when",where:"where",which:"which","while":"while",who:"who",whom:"whom",why:"why",will:"will","with":"with",would:"would",yet:"yet",you:"you",your:"your"},t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){var e=t.replace(/^\W+/,"").replace(/\W+$/,"");return""===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n +
                  +
                  +
                  +

                  404

                  +

                  Page not found.

                  +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +

                  + +
                  + +
                  + +
                  + +
                  +

                  Are You Lost?

                  +

                  The page you were looking for does not exist. If you think this is a mistake and one of our pages has gone missing, throw us an email or send us a tweet. Click below to learn more about our CSS framework.

                  + Learn More +
                  + +
                  + +
                  +
                  \ No newline at end of file diff --git a/jade/page-contents/badges_content.html b/jade/page-contents/badges_content.html index efcf9cf853..d6e8e8f70b 100644 --- a/jade/page-contents/badges_content.html +++ b/jade/page-contents/badges_content.html @@ -9,20 +9,21 @@

                  Badges can notify you that there are new or unread messages or notifications. Add the new class to the badge to give it the background.

                  +

                  Collections

                  
                     <div class="collection">
                  -    <a href="#!" class="collection-item">Alan<span class="badge">1</span></a>
                  -    <a href="#!" class="collection-item">Alan<span class="new badge">4</span></a>
                  +    <a href="#!" class="collection-item"><span class="badge">1</span>Alan</a>
                  +    <a href="#!" class="collection-item"><span class="new badge">4</span>Alan</a>
                       <a href="#!" class="collection-item">Alan</a>
                  -    <a href="#!" class="collection-item">Alan<span class="badge">14</span></a>
                  +    <a href="#!" class="collection-item"><span class="badge">14</span>Alan</a>
                     </div>
                               
                  @@ -40,7 +41,7 @@

                  Badges in Dropdown

                • two1
                • three
                • - Dropdown + Dropdownarrow_drop_down
                  
                     <ul id="dropdown2" class="dropdown-content">
                  @@ -48,12 +49,131 @@ 

                  Badges in Dropdown

                  <li><a href="#!">two<span class="new badge">1</span></a></li> <li><a href="#!">three</a></li> </ul> - <a class="btn dropdown-button" href="#!" data-activates="dropdown2">Dropdown<i class="mdi-navigation-arrow-drop-down right"></i></a> + <a class="btn dropdown-button" href="#!" data-activates="dropdown2">Dropdown<i class="material-icons right">arrow_drop_down</i></a>
                  + + + +
                  +
                  +
                  + +

                  Badges in Collapsibles

                  + +
                    +
                  • +
                    filter_dramaFirst4
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    placeSecond1
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  +
                  + +
                  
                  +<ul class="collapsible" data-collapsible="accordion">
                  +  <li>
                  +    <div class="collapsible-header">
                  +      <i class="material-icons">filter_drama</i>
                  +      First
                  +      <span class="new badge">4</span></div>
                  +    <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
                  +  </li>
                  +  <li>
                  +    <div class="collapsible-header">
                  +      <i class="material-icons">place</i>
                  +      Second
                  +      <span class="badge">1</span></div>
                  +    <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div>
                  +  </li>
                  +</ul>
                  + +
                  +
                  +
                  + +
                  + +
                  +
                  +

                  Options

                  +

                  You can customize captions in many ways.

                  +
                  +
                  + +
                  +
                  Custom Caption
                  + +
                  +

                  You can explicitly set the caption in a badge using the data-badge-caption attribute.

                  +
                  
                  +  <span class="new badge" data-badge-caption="custom caption">4</span>
                  +  <span class="badge" data-badge-caption="custom caption">4</span>
                  +            
                  +
                  +
                  + +
                  +
                  Colors
                  +
                  +
                  + Red4 + Blue4 +
                  +
                  +
                  +

                  You can use our color classes to set the background-color of the badge.

                  +
                  
                  +  <span class="new badge red">4</span>
                  +  <span class="new badge blue">4</span>
                  +            
                  +
                  +
                  + +
                  @@ -69,6 +189,9 @@

                  Badges in Dropdown

                  diff --git a/jade/page-contents/breadcrumbs_content.html b/jade/page-contents/breadcrumbs_content.html new file mode 100644 index 0000000000..7553c2170c --- /dev/null +++ b/jade/page-contents/breadcrumbs_content.html @@ -0,0 +1,61 @@ +
                  +
                  + +
                  + + +
                  + +
                  +
                  +

                  Breadcrumbs are a good way to display your current location. This is usually used when you have multiple layers of content.

                  +

                  Basic

                  + + + +

                  +
                  
                  +  <nav>
                  +    <div class="nav-wrapper">
                  +      <div class="col s12">
                  +        <a href="#!" class="breadcrumb">First</a>
                  +        <a href="#!" class="breadcrumb">Second</a>
                  +        <a href="#!" class="breadcrumb">Third</a>
                  +      </div>
                  +    </div>
                  +  </nav>
                  +            
                  +
                  +
                  +
                  +
                  + + + +
                  + +
                  +
                  +
                  + + +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + diff --git a/jade/page-contents/buttons_content.html b/jade/page-contents/buttons_content.html index 5328bc4a98..e18f381244 100644 --- a/jade/page-contents/buttons_content.html +++ b/jade/page-contents/buttons_content.html @@ -11,7 +11,7 @@

                  Raised

                  cloudbutton cloudbutton
                  
                  -<a class="waves-effect waves-light btn">Stuff</a>
                  +<a class="waves-effect waves-light btn">button</a>
                   <a class="waves-effect waves-light btn"><i class="material-icons left">cloud</i>button</a>
                   <a class="waves-effect waves-light btn"><i class="material-icons right">cloud</i>button</a>
                           
                  @@ -27,12 +27,12 @@

                  Floating

                  Fixed Action Button

                  If you want a fixed floating action button, you can add multiple actions that will appear on hover. Our demo is in the bottom righthand corner of the page.

                  
                  -  <div class="fixed-action-btn" style="bottom: 45px; right: 24px;">
                  +  <div class="fixed-action-btn">
                       <a class="btn-floating btn-large red">
                         <i class="large material-icons">mode_edit</i>
                       </a>
                       <ul>
                  -      <li><a class="btn-floating red"><i class="material-icons">insert_chart</i></i></a></li>
                  +      <li><a class="btn-floating red"><i class="material-icons">insert_chart</i></a></li>
                         <li><a class="btn-floating yellow darken-1"><i class="material-icons">format_quote</i></a></li>
                         <li><a class="btn-floating green"><i class="material-icons">publish</i></a></li>
                         <li><a class="btn-floating blue"><i class="material-icons">attach_file</i></a></li>
                  @@ -40,13 +40,41 @@ 

                  Fixed Action Button

                  </div>
                  -

                  You can also open the Fixed Action Button Menu programatically, the below code will make your FAB Menu open:

                  +

                  You can also open and close the Fixed Action Button Menu programatically.

                  
                     $('.fixed-action-btn').openFAB();
                  -          
                  -

                  You can also close them programatically:

                  -
                  
                     $('.fixed-action-btn').closeFAB();
                  +  $('.fixed-action-btn.toolbar').openToolbar();
                  +  $('.fixed-action-btn.toolbar').closeToolbar();
                  +        
                  +
                  +

                  Horizontal FAB

                  +

                  Creating a horizontal FAB is easy! Just add the class horizontal to the FAB.

                  + +
                  
                  +  <div class="fixed-action-btn horizontal">
                  +    <a class="btn-floating btn-large red">
                  +      <i class="large material-icons">mode_edit</i>
                  +    </a>
                  +    <ul>
                  +      <li><a class="btn-floating red"><i class="material-icons">insert_chart</i></a></li>
                  +      <li><a class="btn-floating yellow darken-1"><i class="material-icons">format_quote</i></a></li>
                  +      <li><a class="btn-floating green"><i class="material-icons">publish</i></a></li>
                  +      <li><a class="btn-floating blue"><i class="material-icons">attach_file</i></a></li>
                  +    </ul>
                  +  </div>
                           
                  @@ -60,9 +88,58 @@

                  Fixed Action Button

                • attach_file
                • +
                  + +

                  Click-only FAB

                  +

                  If you want to disable the hover behaviour, and instead toggle the FAB menu when the user clicks on the large button (works great on mobile!), just add the click-to-toggle class to the FAB.

                  + +
                  
                  +  <div class="fixed-action-btn horizontal click-to-toggle">
                  +    <a class="btn-floating btn-large red">
                  +      <i class="material-icons">menu</i>
                  +    </a>
                  +    <ul>
                  +      <li><a class="btn-floating red"><i class="material-icons">insert_chart</i></a></li>
                  +      <li><a class="btn-floating yellow darken-1"><i class="material-icons">format_quote</i></a></li>
                  +      <li><a class="btn-floating green"><i class="material-icons">publish</i></a></li>
                  +      <li><a class="btn-floating blue"><i class="material-icons">attach_file</i></a></li>
                  +    </ul>
                  +  </div>
                  +        
                  + +

                  FAB to Toolbar

                  +

                  Instead of displaying individual button options, you can transition your FAB into a toolbar on click. Just add the toolbar class to the FAB.

                  + +
                  
                  +  <div class="fixed-action-btn toolbar">
                  +    <a class="btn-floating btn-large red">
                  +      <i class="large material-icons">mode_edit</i>
                  +    </a>
                  +    <ul>
                  +      <li class="waves-effect waves-light"><a href="#!"><i class="material-icons">insert_chart</i></a></li>
                  +      <li class="waves-effect waves-light"><a href="#!"><i class="material-icons">format_quote</i></a></li>
                  +      <li class="waves-effect waves-light"><a href="#!"><i class="material-icons">publish</i></a></li>
                  +      <li class="waves-effect waves-light"><a href="#!"><i class="material-icons">attach_file</i></a></li>
                  +    </ul>
                  +  </div>
                  +        
                  +

                  Flat

                  +

                  Flat buttons are used to reduce excessive layering. For example, flat buttons are usually used for actions within a card or modal so there aren't too many overlapping shadows.

                  Button
                  
                     <a class="waves-effect waves-teal btn-flat">Button</a>
                  @@ -128,4 +205,3 @@ 

                  Disabled

                  - diff --git a/jade/page-contents/cards_content.html b/jade/page-contents/cards_content.html index 73ea92da34..b177156c1d 100644 --- a/jade/page-contents/cards_content.html +++ b/jade/page-contents/cards_content.html @@ -96,6 +96,120 @@

                  Image Card

                  +
                  +
                  + +
                  +

                  FABs in Cards

                  +
                  +
                  + + Card Title + add +
                  +
                  +

                  I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                  +
                  +
                  +
                  +
                  +



                  +

                  + Here is an image card with a Floating Action Button. +

                  +
                  +
                  +
                  +
                  +
                  +
                  + + add +
                  +
                  + Card Title +

                  I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                  +
                  +
                  +
                  +
                  +

                  + Here is an image card with a large Floating Action Button. +

                  +
                  +
                  +
                  +
                  
                  +  <div class="row">
                  +    <div class="col s12 m6">
                  +      <div class="card">
                  +        <div class="card-image">
                  +          <img src="images/sample-1.jpg">
                  +          <span class="card-title">Card Title</span>
                  +          <a class="btn-floating halfway-fab waves-effect waves-light red"><i class="material-icons">add</i></a>
                  +        </div>
                  +        <div class="card-content">
                  +          <p>I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.</p>
                  +        </div>
                  +      </div>
                  +    </div>
                  +  </div>
                  +            
                  +
                  +
                  +
                  +
                  + +
                  +
                  + +
                  +

                  Horizontal Card

                  +
                  +
                  + +
                  +
                  +
                  +

                  I am a very simple card. I am good at containing small bits of information.

                  +
                  + +
                  +
                  +
                  +
                  +



                  +

                  + Here is the standard card with a horizontal image. +

                  +
                  +
                  +
                  +
                  
                  +  <div class="col s12 m7">
                  +    <h2 class="header">Horizontal Card</h2>
                  +    <div class="card horizontal">
                  +      <div class="card-image">
                  +        <img src="https://lorempixel.com/100/190/nature/6">
                  +      </div>
                  +      <div class="card-stacked">
                  +        <div class="card-content">
                  +          <p>I am a very simple card. I am good at containing small bits of information.</p>
                  +        </div>
                  +        <div class="card-action">
                  +          <a href="#">This is a link</a>
                  +        </div>
                  +      </div>
                  +    </div>
                  +  </div>
                  +            
                  +
                  +
                  +
                  +
                  +
                  @@ -111,7 +225,7 @@

                  Card Reveal

                  This is a link

                  - Card Titleclose + closeCard Title

                  Here is some more information about this product that is only revealed once clicked on.

                  @@ -130,16 +244,173 @@

                  Card Reveal

                  <img class="activator" src="images/office.jpg"> </div> <div class="card-content"> - <span class="card-title activator grey-text text-darken-4">Card Title<i class="material-icons right">more_vert</i></span> + <span class="card-title activator grey-text text-darken-4">Card Title<i class="material-icons right">more_vert</i></span> <p><a href="#">This is a link</a></p> </div> <div class="card-reveal"> - <span class="card-title grey-text text-darken-4">Card Title<i class="material-icons right">close</i></span> + <span class="card-title grey-text text-darken-4"><i class="material-icons right">close</i>Card Title</span> <p>Here is some more information about this product that is only revealed once clicked on.</p> </div> </div>
                  + + +
                  +
                  +

                  Card Action Options

                  +
                  +
                  + +
                  +
                  + Card Titlemore_vert + +

                  This is a link

                  +
                  +
                  + Card Titleclose +

                  Here is some more information about this product that is only revealed once clicked on.

                  +
                  + + +
                  +
                  +
                  +

                  +

                  + The default state is having the card-reveal go over the card-action. +

                  +
                  +
                  +
                  +
                  +
                  +
                  + +
                  +
                  + Card Titlemore_vert + +

                  This is a link

                  +
                  + + + +
                  + Card Titleclose +

                  Here is some more information about this product that is only revealed once clicked on.

                  +
                  +
                  +
                  +
                  +

                  + You can make your card-action always visible by adding the class sticky-action to the overall card. +

                  +
                  +

                  +
                  
                  +  <div class="card sticky-action">
                  +    ...
                  +
                  +    <div class="card-action">...</div>
                  +
                  +    <div class="card-reveal">...</div>
                  +  </div>
                  +            
                  +
                  +
                  + + + +
                  +
                  + +
                  +

                  Tabs in Cards

                  +

                  + You can add tabs to your cards by adding a dividing cards-tabs div inbetween your header content and your tab content. +

                  +
                  
                  +  <div class="card">
                  +    <div class="card-content">
                  +      <p>I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.</p>
                  +    </div>
                  +    <div class="card-tabs">
                  +      <ul class="tabs tabs-fixed-width">
                  +        <li class="tab"><a href="#test4">Test 1</a></li>
                  +        <li class="tab"><a class="active" href="#test5">Test 2</a></li>
                  +        <li class="tab"><a href="#test6">Test 3</a></li>
                  +      </ul>
                  +    </div>
                  +    <div class="card-content grey lighten-4">
                  +      <div id="test4">Test 1</div>
                  +      <div id="test5">Test 2</div>
                  +      <div id="test6">Test 3</div>
                  +    </div>
                  +  </div>
                  +
                  +
                  +
                  +
                  +

                  White

                  +
                  +
                  +

                  I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                  +
                  +
                  + +
                  +
                  +
                  Test 1
                  +
                  Test 2
                  +
                  Test 3
                  +
                  +
                  +
                  +
                  +

                  +

                  + Basic white background card with tabs. +

                  +
                  +
                  +
                  +
                  +

                  Colored

                  +
                  +
                  +

                  I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                  +
                  +
                  + +
                  +
                  +
                  Test 1
                  +
                  Test 2
                  +
                  Test 3
                  +
                  +
                  +
                  +
                  +

                  +

                  + Colored or dark background card with tabs. +

                  @@ -279,7 +550,10 @@

                  Card Panel

                  @@ -289,4 +563,3 @@

                  Card Panel

                  - diff --git a/jade/page-contents/carousel_content.html b/jade/page-contents/carousel_content.html new file mode 100644 index 0000000000..c0b00d996a --- /dev/null +++ b/jade/page-contents/carousel_content.html @@ -0,0 +1,208 @@ +
                  +
                  +
                  + + +
                  +

                  Introduction

                  +

                  Our Carousel is a robust and versatile component that can be an image slider, to an item carousel, to an onboarding experience. It is touch enabled making it especially smooth to use on mobile.

                  +

                  Note: This is also touch compatible! Try swiping with your finger to scroll through the carousel.


                  + +
                  + +
                  
                  +  <div class="carousel">
                  +    <a class="carousel-item" href="#one!"><img src="https://lorempixel.com/250/250/nature/1"></a>
                  +    <a class="carousel-item" href="#two!"><img src="https://lorempixel.com/250/250/nature/2"></a>
                  +    <a class="carousel-item" href="#three!"><img src="https://lorempixel.com/250/250/nature/3"></a>
                  +    <a class="carousel-item" href="#four!"><img src="https://lorempixel.com/250/250/nature/4"></a>
                  +    <a class="carousel-item" href="#five!"><img src="https://lorempixel.com/250/250/nature/5"></a>
                  +  </div>
                  +      
                  +
                  + + +
                  +

                  jQuery Initialization

                  +
                  
                  +    $(document).ready(function(){
                  +      $('.carousel').carousel();
                  +    });
                  +        
                  +
                  + +

                  jQuery Plugin Options

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  Option NameDescription
                  durationTransition duration in milliseconds. (Default: 200)
                  distPerspective zoom. If 0, all items are the same size. (Default: -100)
                  shiftSet the spacing of the center item. (Default: 0)
                  paddingSet the padding between non center items. (Default: 0)
                  fullWidthMake the carousel a full width slider like the second example. (Default: false)
                  indicatorsSet to true to show indicators. (Default: false)
                  noWrapDon't wrap around and cycle through items. (Default: false)
                  +
                  + +

                  jQuery Plugin Methods

                  +

                  We have methods to pause, start, move to next and move to previous slide.

                  +
                  
                  +// Next slide
                  +$('.carousel').carousel('next');
                  +$('.carousel').carousel('next', 3); // Move next n times.
                  +
                  +// Previous slide
                  +$('.carousel').carousel('prev');
                  +$('.carousel').carousel('prev', 4); // Move prev n times.
                  +
                  +// Set to nth slide
                  +$('.carousel').carousel('set', 4);
                  +
                  +// Destroy carousel
                  +$('.carousel').carousel('destroy');
                  +      
                  +
                  + + +
                  +

                  Full Width Slider

                  +

                  Our carousel has a full width option that makes it into a simple and elegant image carousel. You can also have indicators that show up on the bottom of the slider.

                  +

                  Note: This is also touch compatible! Try swiping with your finger to scroll through the carousel.


                  + +
                  + +
                  
                  +  <div class="carousel carousel-slider">
                  +    <a class="carousel-item" href="#one!"><img src="https://lorempixel.com/800/400/food/1"></a>
                  +    <a class="carousel-item" href="#two!"><img src="https://lorempixel.com/800/400/food/2"></a>
                  +    <a class="carousel-item" href="#three!"><img src="https://lorempixel.com/800/400/food/3"></a>
                  +    <a class="carousel-item" href="#four!"><img src="https://lorempixel.com/800/400/food/4"></a>
                  +  </div>
                  +        
                  + +
                  
                  +  $('.carousel.carousel-slider').carousel({fullWidth: true});
                  +        
                  +
                  + + +
                  +

                  Special Options

                  +

                  The carousel doesn't only support images but also allows you to make content carousels. You can add fixed items to your carousel by adding a div with the class carousel-fixed-item and adding your fixed content in there.

                  +

                  Note: This is also touch compatible! Try swiping with your finger to scroll through the carousel.

                  +
                  + +
                  +
                  
                  +  <div class="carousel carousel-slider center" data-indicators="true">
                  +    <div class="carousel-fixed-item center">
                  +      <a class="btn waves-effect white grey-text darken-text-2">button</a>
                  +    </div>
                  +    <div class="carousel-item red white-text" href="#one!">
                  +      <h2>First Panel</h2>
                  +      <p class="white-text">This is your first panel</p>
                  +    </div>
                  +    <div class="carousel-item amber white-text" href="#two!">
                  +      <h2>Second Panel</h2>
                  +      <p class="white-text">This is your second panel</p>
                  +    </div>
                  +    <div class="carousel-item green white-text" href="#three!">
                  +      <h2>Third Panel</h2>
                  +      <p class="white-text">This is your third panel</p>
                  +    </div>
                  +    <div class="carousel-item blue white-text" href="#four!">
                  +      <h2>Fourth Panel</h2>
                  +      <p class="white-text">This is your fourth panel</p>
                  +    </div>
                  +  </div>
                  +        
                  +
                  
                  +  $('.carousel.carousel-slider').carousel({fullWidth: true});
                  +        
                  +
                  + +
                  + + + + + +
                  + +
                  + +
                  +
                  diff --git a/jade/page-contents/chips_content.html b/jade/page-contents/chips_content.html index d2e5787ec8..ec1256d8cc 100644 --- a/jade/page-contents/chips_content.html +++ b/jade/page-contents/chips_content.html @@ -6,7 +6,7 @@

                  Introduction

                  - Collapsibles can be used to represent small blocks of information. They are most commonly used either for contacts or for tags. + Chips can be used to represent small blocks of information. They are most commonly used either for contacts or for tags.

                  Contact Person @@ -14,7 +14,7 @@

                  Introduction

                  Tag - close + close
                  @@ -34,18 +34,190 @@

                  Contacts

                  Tags

                  - To create a tag chip just add an close icon inside. + To create a tag chip just add a close icon inside with the class close.

                  
                     <div class="chip">
                       Tag
                  -    <i class="material-icons">close</i>
                  +    <i class="close material-icons">close</i>
                     </div>
                           
                  - +
                  +

                  Javascript Plugin Usage

                  +

                  To add tags, just enter your tag text and press enter. You can delete them by clicking on the close icon or by using your delete button.

                  +
                  +
                  +

                  Set initial tags.

                  +
                  +
                  +

                  Use placeholders and override hint texts.

                  +
                  +
                  +

                  Use autocomplete with chips.

                  +
                  +
                  + +
                  +

                  Markup

                  +
                  
                  +  <div class="chips"></div>
                  +  <div class="chips chips-initial"></div>
                  +  <div class="chips chips-placeholder"></div>
                  +  <div class="chips chips-autocomplete"></div>
                  +        
                  +

                  jQuery Initialization

                  +
                  
                  +  $('.chips').material_chip();
                  +  $('.chips-initial').material_chip({
                  +    data: [{
                  +      tag: 'Apple',
                  +    }, {
                  +      tag: 'Microsoft',
                  +    }, {
                  +      tag: 'Google',
                  +    }],
                  +  });
                  +  $('.chips-placeholder').material_chip({
                  +    placeholder: 'Enter a tag',
                  +    secondaryPlaceholder: '+Tag',
                  +  });
                  +  $('.chips-autocomplete').material_chip({
                  +    autocompleteOptions: {
                  +      data: {
                  +        'Apple': null,
                  +        'Microsoft': null,
                  +        'Google': null
                  +      },
                  +      limit: Infinity,
                  +      minLength: 1
                  +    }
                  +  });
                  +        
                  +

                  Chip data object

                  +
                  
                  +  var chip = {
                  +    tag: 'chip content',
                  +    image: '', //optional
                  +    id: 1, //optional
                  +  };
                  +        
                  + +
                  +

                  jQuery Plugin Options

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  Option NameTypeDescription
                  dataarraySet the chip data (look at the Chip data object)
                  placeholderstringSet first placeholder when there are no tags.
                  secondaryPlaceholderstringSet second placeholder when adding additional tags.
                  autocompleteDataObjectSet autocomplete data.
                  autocompleteLimitIntegerSet autocomplete limit.
                  +
                  + +
                  +

                  Events

                  +

                  Material chips exposes a few events for hooking + into chips functionality. +

                  + + + + + + + + + + + + + + + + + + + + + +
                  EventDescription
                  chip.addthis method is triggered when a chip is added.
                  chip.deletethis method is triggered when a chip is deleted.
                  chip.selectthis method is triggered when a chip is selected.
                  + +

                  + +
                  
                  +  $('.chips').on('chip.add', function(e, chip){
                  +    // you have the added chip here
                  +  });
                   
                  +  $('.chips').on('chip.delete', function(e, chip){
                  +    // you have the deleted chip here
                  +  });
                  +
                  +  $('.chips').on('chip.select', function(e, chip){
                  +    // you have the selected chip here
                  +  });
                  +        
                  + +
                  +
                  +

                  Methods

                  +

                  + Use these methods to access the chip data. +

                  + + + + + + + + + + + + + +
                  ParameterDescription
                  dataIt returns the stored data.
                  + +

                  + +
                  
                  +  $('.chips-initial').material_chip('data');
                  +        
                  + +
                  +
                  @@ -58,6 +230,10 @@

                  Tags

                  @@ -65,4 +241,3 @@

                  Tags

                  - diff --git a/jade/page-contents/collapsible_content.html b/jade/page-contents/collapsible_content.html index 0521152e00..68e30acd28 100644 --- a/jade/page-contents/collapsible_content.html +++ b/jade/page-contents/collapsible_content.html @@ -7,19 +7,19 @@

                  Introduction

                  Collapsibles are accordion elements that expand when clicked on. They allow you to hide content that is not immediately relevant to the user. -

                  +
                  • filter_dramaFirst
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • placeSecond
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • whatshotThird
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  @@ -28,19 +28,19 @@

                  Introduction

                  Popout

                  To create a popout collapsible, just add the class popout. -

                  +
                  • subtitlesFirst
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • gamesSecond
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • library_booksThird
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  
                  @@ -56,15 +56,15 @@ 

                  Collapsible HTML Structure

                  <ul class="collapsible" data-collapsible="accordion"> <li> <div class="collapsible-header"><i class="material-icons">filter_drama</i>First</div> - <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div> + <div class="collapsible-body"><span>Lorem ipsum dolor sit amet.</span></div> </li> <li> <div class="collapsible-header"><i class="material-icons">place</i>Second</div> - <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div> + <div class="collapsible-body"><span>Lorem ipsum dolor sit amet.</span></div> </li> <li> <div class="collapsible-header"><i class="material-icons">whatshot</i>Third</div> - <div class="collapsible-body"><p>Lorem ipsum dolor sit amet.</p></div> + <div class="collapsible-body"><span>Lorem ipsum dolor sit amet.</span></div> </li> </ul>
                  @@ -72,41 +72,66 @@

                  Collapsible HTML Structure

                  Initialization

                  -

                  Collapsible elements only need initialization if they are added dynamically. You can also pass in options inside the initialization, however this can be done in the HTML markup as well.

                  + Collapsible elements only need initialization if they are added dynamically. You can also pass in options inside the initialization, however this can be done in the HTML markup as well.
                  
                     $(document).ready(function(){
                  -    $('.collapsible').collapsible({
                  -      accordion : false // A setting that changes the collapsible behavior to expandable instead of the default accordion style
                  -    });
                  +    $('.collapsible').collapsible();
                     });
                           


                  Preselected Section
                  -

                  If you want a collapsible with a preopened section just add the active class to the collapsible-header.

                  + If you want a collapsible with a preopened section just add the active class to the collapsible-header.
                  • filter_dramaFirst
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • placeSecond
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • whatshotThird
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  
                  -  <div class="collapsible-header active"><i class="mdi-maps-place"></i>Second</div>
                  +  <div class="collapsible-header active"><i class="material-icons">place</i>Second</div>
                           
                  -
                  +

                  Options

                  -

                  There are two ways a collapsible can behave. It can either allow multiple sections to stay open, or it can only allow one section to stay open at a time, which is called an accordion. See below for a demo of each type

                  + You can customize the behavior of each collapsible using these options. For example, you can call a custom function to run when a collapsbile is opened or closed. The function passes the li element that was opened or closed as an argument. +
                  
                  +  $('.collapsible').collapsible({
                  +    accordion: false, // A setting that changes the collapsible behavior to expandable instead of the default accordion style
                  +    onOpen: function(el) { alert('Open'); }, // Callback for Collapsible open
                  +    onClose: function(el) { alert('Closed'); } // Callback for Collapsible close
                  +  });
                  +        
                  + +
                  +

                  Methods

                  + You can programmatically open and close collapsibles through these methods. The second parameter is the 0-based index of the collapsible you want to open. +
                  
                  +  // Open
                  +  $('.collapsible').collapsible('open', 0);
                  +
                  +  // Close
                  +  $('.collapsible').collapsible('close', 0);
                  +
                  +  // Destroy
                  +  $('.collapsible').collapsible('destroy');
                  +        
                  +

                  + +

                  Collapsible Types

                  + There are two ways a collapsible can behave. It can either allow multiple sections to stay open, or it can only allow one section to stay open at a time, which is called an accordion. See below for a demo of each type. +
                  +
                  Accordion
                  @@ -114,20 +139,20 @@

                  Options

                  • filter_dramaFirst
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • placeSecond
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • whatshotThird
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  -

                  This is default behavior, but you can explicitly set it by setting the data-collapsible attribute in HTML.

                  + This is default behavior, but you can explicitly set it by setting the data-collapsible attribute in HTML.
                  
                       <ul class="collapsible" data-collapsible="accordion">
                               
                  @@ -141,15 +166,15 @@

                  Options

                  • filter_dramaFirst
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • placeSecond
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  • whatshotThird
                    -

                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

                    +
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                  @@ -177,6 +202,8 @@

                  Options

                • Popout
                • Structure
                • Initialization
                • +
                • Options
                • +
                • Methods
                • Accordion
                • Expandable
                • @@ -186,4 +213,3 @@

                  Options

                  - diff --git a/jade/page-contents/css-transitions_content.html b/jade/page-contents/css-transitions_content.html new file mode 100644 index 0000000000..bddb37f855 --- /dev/null +++ b/jade/page-contents/css-transitions_content.html @@ -0,0 +1,47 @@ +
                  +
                  + +
                  + +
                  +

                  We've made some custom animation classes that will transition your content with only CSS. Each CSS transition consists of a base class that applies the necessary styles and additional classes that control the state of the transition.

                  + +

                  Scale

                  +

                  Use this scale in and out elements. Make sure to add the base transition class scale-transition. Then add the class scale-out to scale the element down until it is hidden. To start something as hidden, add the class scale-out first, and then add the class scale-in to scale the element up until it is shown.

                  + + add + + Toggle Scale + +
                  
                  +  <!-- Scaled in -->
                  +  <a id="scale-demo" href="#!" class="btn-floating btn-large scale-transition">
                  +    <i class="material-icons">add</i>
                  +  </a>
                  +
                  +  <!-- Scaled out -->
                  +  <a id="scale-demo" href="#!" class="btn-floating btn-large scale-transition scale-out">
                  +    <i class="material-icons">add</i>
                  +  </a>
                  +  
                  +
                  + +
                  + +
                  +
                  +
                  + + +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + diff --git a/jade/page-contents/dialogs_content.html b/jade/page-contents/dialogs_content.html index 27aaebe524..c741c8ef17 100644 --- a/jade/page-contents/dialogs_content.html +++ b/jade/page-contents/dialogs_content.html @@ -3,7 +3,7 @@
                  -

                  Dialogs are content that are not original visible on a page but show up with extra information if needed. The transitions should make the appearance of the dialog make sense and not jarring to the user.

                  +

                  Dialogs are content that are not originally visible on a page but show up with extra information if needed. The transitions should make the appearance of the dialog make sense and not jarring to the user.

                  Toasts

                  Materialize provides an easy way for you to send unobtrusive alerts to your users through toasts. These toasts are also placed and sized responsively, try it out by clicking the button below on different device sizes.

                  Toast! @@ -12,7 +12,7 @@

                  Toasts

                  // Materialize.toast(message, displayLength, className, completeCallback); Materialize.toast('I am a toast!', 4000) // 4000 is the duration of the toast -

                  One way to add this into your application is to add this as an onclick event to a button

                  +

                  One way to add this into your application is to add this as an onclick event to a button.

                  
                     <a class="btn" onclick="Materialize.toast('I am a toast', 4000)">Toast!</a>
                           
                  @@ -21,12 +21,12 @@

                  Custom HTML

                  You can pass in an HTML String as the first argument as well. Take a look at the example below, where we pass in text as well as a flat button. If you call an external function instead of in-line JavaScript, you will not need to escape quotation marks.

                  Toast with Action
                  
                  -  var $toastContent = $('I am toast content');
                  -  Materialize.toast($toastContent, 5000);
                  +  var $toastContent = $('<span>I am toast content</span>').add($('<button class="btn-flat toast-action">Undo</button>'));
                  +  Materialize.toast($toastContent, 10000);
                           

                  Callback

                  -

                  You can have the toast callback a function when it has been dismissed

                  +

                  You can have the toast callback a function when it has been dismissed.

                  Toast!
                  
                     <a class="btn" onclick="Materialize.toast('I am a toast', 4000,'',function(){alert('Your toast was dismissed')})">Toast!</a>
                  @@ -40,6 +40,22 @@ 

                  Styling Toasts

                  
                     Materialize.toast('I am a toast!', 3000, 'rounded') // 'rounded' is the class I'm applying to the toast
                           
                  + +

                  Dismiss a Toast Programatically

                  +

                  To remove a specific toast using JavaScript, access the M_Toast toast HTML element and call the remove function

                  + +
                  
                  +  // Get toast DOM Element, get instance, then call remove function
                  +  var toastElement = $('.toast').first()[0];
                  +  var toastInstance = toastElement.M_Toast;
                  +  toastInstance.remove();
                  +        
                  + +

                  Dismiss all Toasts

                  +
                  
                  +  Materialize.Toast.removeAll();
                  +        
                  +
                  @@ -50,10 +66,10 @@

                  Tooltips

                  Tooltips are small, interactive, textual hints for mainly graphical elements. When using icons for actions you can use a tooltip to give people clarification on its function.

                  @@ -61,7 +77,7 @@

                  Tooltips

                  
                     <!-- data-position can be : bottom, top, left, or right -->
                     <!-- data-delay controls delay before tooltip shows (in milliseconds)-->
                  -  <a class="btn tooltipped" data-position="bottom" data-delay="50" data-tooltip="I am tooltip">Hover me!</a>
                  +  <a class="btn tooltipped" data-position="bottom" data-delay="50" data-tooltip="I am a tooltip">Hover me!</a>
                           

                  Initialization

                  @@ -70,8 +86,38 @@

                  Initialization

                  $(document).ready(function(){ $('.tooltipped').tooltip({delay: 50}); }); -
                  - +
                  + +

                  jQuery Plugin Options

                  + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  Option NameDescription
                  delayDelay time before tooltip appears. (Default: 350)
                  tooltipTooltip text. Can use custom HTML if you set the html option.
                  positionSet the direction of the tooltip. 'top', 'right', 'bottom', 'left'. (Default: 'bottom')
                  htmlAllow custom html inside the tooltip. (Default: false)
                  + +

                  Removal

                  To remove the tooltip from the button, pass in 'remove' as the option to the tooltip function

                  
                  @@ -101,4 +147,3 @@ 

                  Removal

                  - diff --git a/jade/page-contents/dropdown_content.html b/jade/page-contents/dropdown_content.html index f4cd921f5c..c9a3cc2b91 100644 --- a/jade/page-contents/dropdown_content.html +++ b/jade/page-contents/dropdown_content.html @@ -4,15 +4,17 @@

                  Introduction

                  -

                  Add a dropdown list to any button. Make sure that the data-activates attribute matches the id in the <ul> tag.

                  -

                  You can add a divider with the <li class="divider"></li> tag.

                  +

                  Add a dropdown list to any button. Make sure that the data-activates attribute matches the id in the <ul> tag. You can add a divider with the <li class="divider"></li> tag. You can also add icons. Just add the icon inside the anchor tag.

                  Drop Me! +

                  
                     <!-- Dropdown Trigger -->
                     <a class='dropdown-button btn' href='#' data-activates='dropdown1'>Drop Me!</a>
                  @@ -23,10 +25,13 @@ 

                  Introduction

                  <li><a href="#!">two</a></li> <li class="divider"></li> <li><a href="#!">three</a></li> + <li><a href="#!"><i class="material-icons">view_module</i>four</a></li> + <li><a href="#!"><i class="material-icons">cloud</i>five</a></li> </ul>
                  +

                  Options

                  @@ -39,15 +44,15 @@

                  Options

                  - + - + - + @@ -59,9 +64,17 @@

                  Options

                  - + + + + + + + + +
                  indurationinDuration The duration of the transition enter in milliseconds. Default: 300
                  outdurationoutDuration The duration of the transition out in milliseconds. Default: 225
                  constrainwidthconstrainWidth If true, constrainWidth to the size of the dropdown activator. Default: true
                  This defines the spacing from the aligned edge. Default: 0
                  beloworiginbelowOrigin If true, the dropdown will show below the activator. Default: false
                  alignmentDefines the edge the menu is aligned to. Default: 'left'
                  stopPropagationIf true, stops the event propagating from the dropdown origin click handler. Default: false

                  To use these inline you have to add them as data attributes. If you want more dynamic control, you can define them using the jQuery plugin below.

                  @@ -79,13 +92,31 @@

                  jQuery Plugin Initialization

                  $('.dropdown-button').dropdown({ inDuration: 300, outDuration: 225, - constrain_width: false, // Does not change width of dropdown to that of the activator + constrainWidth: false, // Does not change width of dropdown to that of the activator hover: true, // Activate on hover gutter: 0, // Spacing from edge - belowOrigin: false // Displays dropdown below the button + belowOrigin: false, // Displays dropdown below the button + alignment: 'left', // Displays dropdown with edge aligned to the left of button + stopPropagation: false // Stops event propagation } );
                  + +

                  + You can also open dropdowns programatically, the below code will make your modal open on document ready: +

                  + +
                  
                  +  $('.dropdown-button').dropdown('open');
                  +        
                  + +

                  + You can also close dropdowns programatically: +

                  + +
                  
                  +  $('.dropdown-button').dropdown('close');
                  +        
                  @@ -110,4 +141,3 @@

                  jQuery Plugin Initialization

                  - diff --git a/jade/page-contents/featureDiscovery_content.html b/jade/page-contents/featureDiscovery_content.html new file mode 100644 index 0000000000..3859eaddde --- /dev/null +++ b/jade/page-contents/featureDiscovery_content.html @@ -0,0 +1,74 @@ +
                  +
                  +
                  + +
                  +

                  Provide value and encourage return visits by introducing users to new features and functionality at contextually relevant moments.

                  + +

                  Tap Target

                  +

                  Feature discovery prompts have more impact when they are presented to the right users at contextually relevant moments. When presented to the wrong user at the wrong time, they can be intrusive and annoying.

                  + + Open tap target    Close tap target + +
                  + menu +
                  + +
                  +
                  +
                  I am here
                  +

                  Provide value and encourage return visits by introducing users to new features and functionality at contextually relevant moments.

                  +
                  +
                  +
                  + + + +
                  +

                  Tap Target HTML Structure

                  +
                  
                  +  <!-- Element Showed -->
                  +  <a id="menu" class="waves-effect waves-light btn btn-floating" ><i class="material-icons">menu</i></a>
                  +
                  +  <!-- Tap Target Structure -->
                  +  <div class="tap-target" data-activates="menu">
                  +    <div class="tap-target-content">
                  +      <h5>Title</h5>
                  +      <p>A bunch of text</p>
                  +    </div>
                  +  </div>
                  +          
                  +
                  + + + +
                  +

                  jQuery Plugin Methods

                  +

                  To open/close a tap target:

                  +
                  
                  +  $('.tap-target').tapTarget('open');
                  +  $('.tap-target').tapTarget('close');
                  +        
                  +
                  + +
                  + + +
                  +
                  +
                  + + +
                  + +
                  +
                  + +
                  +
                  diff --git a/jade/page-contents/footer_content.html b/jade/page-contents/footer_content.html index 446df76c7d..711a0a1f16 100644 --- a/jade/page-contents/footer_content.html +++ b/jade/page-contents/footer_content.html @@ -5,7 +5,7 @@ +
                  +
                  + This is an inline input field: +
                  + + +
                  +
                  +
                  
                  @@ -75,11 +84,20 @@ 

                  Input fields

                  <label for="email">Email</label> </div> </div> + <div class="row"> + <div class="col s12"> + This is an inline input field: + <div class="input-field inline"> + <input id="email" type="email" class="validate"> + <label for="email" data-error="wrong" data-success="right">Email</label> + </div> + </div> + </div> </form> </div>

                  Prefilling Text Inputs

                  -

                  If you are having trouble with the labels overlapping prefilled content, Try adding class="active" to the label

                  +

                  If you are having trouble with the labels overlapping prefilled content, Try adding class="active" to the label.
                  You can also call the function Materialize.updateTextFields(); to reinitialize all the Materialize labels on the page if you are dynamically adding inputs.

                  @@ -96,6 +114,12 @@

                  Prefilling Text Inputs

                  </div> +
                  
                  +  $(document).ready(function() {
                  +    Materialize.updateTextFields();
                  +  });
                  +        
                  +

                  Icon Prefixes

                  You can add an icon prefix to make the form input label even more clear. Just add an icon with the class prefix before the input and label.


                  @@ -140,8 +164,8 @@

                  Custom Error or Success Messages

                  - - + +
                  @@ -261,11 +285,11 @@

                  Icon Prefixes

                  Select

                  -

                  Select allows user input through specified options. Make sure you wrap it in a .input-field for proper alignment with other text fields.

                  +

                  Select allows user input through specified options. Make sure you wrap it in a .input-field for proper alignment with other text fields. Remember that this is a jQuery plugin so make sure you initialize this in your document ready.

                  -
                  +
                  -
                  +
                  +
                  +
                  +

                  You can add the property multiple to get the multiple select and select several options.

                  +
                  +
                  + + +
                  +
                  +
                  +

                  We also support optgroups in our selects.

                  +
                  +
                  + + +
                  +
                  +
                  +

                  You can add icons to your options in any type of select. In the option you add the image source with the data-icon attribute. You can add the left or right class to align your icon. You can also add the circle class to your icon.

                  +
                  +
                  + + +
                  +
                  + + +

                  You can add the class browser-default to get the browser default.

                  +
                  +
                  + +
                  +
                  +
                  +
                  @@ -393,7 +522,7 @@

                  Radio Buttons

                  -

                  Add radio buttons to a group by adding the name attribute along with the same corresponding value for each of the radio buttons in the group. Create disabled radio buttons by adding the disabled attribute as shown below.

                  +
                  
                     <form action="#">
                       <p>
                  @@ -408,9 +537,9 @@ 

                  Radio Buttons

                  <input class="with-gap" name="group1" type="radio" id="test3" /> <label for="test3">Green</label> </p> - <p> - <input name="group1" type="radio" id="test4" disabled="disabled" /> - <label for="test4">Brown</label> + <p> + <input name="group1" type="radio" id="test4" disabled="disabled" /> + <label for="test4">Brown</label> </p> </form>
                  @@ -434,7 +563,7 @@

                  Options

                  Checkboxes

                  -

                  Use checkboxes when looking for yes or no answers. The for attribute is necessary to bind the our custom checkbox with the input. Add the input's id as the value of the for attribute of the label.

                  +

                  Use checkboxes when looking for yes or no answers. The for attribute is necessary to bind our custom checkbox with the input. Add the input's id as the value of the for attribute of the label.

                  @@ -475,13 +604,17 @@

                  Checkboxes

                  <input type="checkbox" class="filled-in" id="filled-in-box" checked="checked" /> <label for="filled-in-box">Filled in</label> </p> + <p> + <input type="checkbox" id="indeterminate-checkbox" /> + <label for="indeterminate-checkbox">Indeterminate Style</label> + </p> <p> <input type="checkbox" id="test7" checked="checked" disabled="disabled" /> <label for="test7">Green</label> </p> - <p> - <input type="checkbox" id="test8" disabled="disabled" /> - <label for="test8">Brown</label> + <p> + <input type="checkbox" id="test8" disabled="disabled" /> + <label for="test8">Brown</label> </p> </form> @@ -594,7 +727,31 @@

                  File Input

                  Range

                  -

                  Add a range slider for values with a wide range. This one is set to be a number between 0 and 100.

                  +

                  Add a range slider for values with a wide range. This one is set to be a number between 0 and 100. We have two different types of sliders. nouiSlider is a 3rd party plugin which we've modified. To use the noUiSlider, you will have to manually link the nouislider.css and nouislider.js files located in the extras folder.

                  +

                  noUiSlider

                  +

                  See noUiSlider's official documentation here to see a variety of slider options

                  +
                  +

                   

                  +
                  
                  +  <div id="test-slider"></div>
                  +        
                  +
                  
                  +  var slider = document.getElementById('test-slider');
                  +  noUiSlider.create(slider, {
                  +   start: [20, 80],
                  +   connect: true,
                  +   step: 1,
                  +   orientation: 'horizontal', // 'horizontal' or 'vertical'
                  +   range: {
                  +     'min': 0,
                  +     'max': 100
                  +   },
                  +   format: wNumb({
                  +     decimals: 0
                  +   })
                  +  });
                  +        
                  +

                  HTML5 Range

                  @@ -615,7 +772,7 @@

                  Date Picker

                  
                  -  <input type="date" class="datepicker">
                  +  <input type="text" class="datepicker">
                           

                  Initialization

                  @@ -623,11 +780,40 @@

                  Initialization

                  
                     $('.datepicker').pickadate({
                       selectMonths: true, // Creates a dropdown to control month
                  -    selectYears: 15 // Creates a dropdown of 15 years to control year
                  +    selectYears: 15, // Creates a dropdown of 15 years to control year,
                  +    today: 'Today',
                  +    clear: 'Clear',
                  +    close: 'Ok',
                  +    closeOnSelect: false // Close upon selecting a date,
                  +    container: undefined, // ex. 'body' will append picker to body
                     });
                           
                  +
                  +

                  Time Picker

                  + + +
                  
                  +  <input type="text" class="timepicker">
                  +        
                  + +

                  Initialization

                  +
                  
                  +  $('.timepicker').pickatime({
                  +    default: 'now', // Set default time: 'now', '1:30AM', '16:30'
                  +    fromnow: 0,       // set default time to * milliseconds from now (using with default = 'now')
                  +    twelvehour: false, // Use AM/PM or 24-hour format
                  +    donetext: 'OK', // text for done-button
                  +    cleartext: 'Clear', // text for clear-button
                  +    canceltext: 'Cancel', // Text for cancel-button,
                  +    container: undefined, // ex. 'body' will append picker to body
                  +    autoclose: false, // automatic close timepicker
                  +    ampmclickable: true, // make AM PM clickable
                  +    aftershow: function(){} //Function for after opening timepicker
                  +  });
                  +        
                  +

                  Character Counter

                  @@ -636,14 +822,14 @@

                  Character Counter

                  - +

                  - +
                  @@ -654,13 +840,13 @@

                  Character Counter

                  <form class="col s12"> <div class="row"> <div class="input-field col s6"> - <input id="input_text" type="text" length="10"> + <input id="input_text" type="text" data-length="10"> <label for="input_text">Input text</label> </div> </div> <div class="row"> <div class="input-field col s12"> - <textarea id="textarea1" class="materialize-textarea" length="120"></textarea> + <textarea id="textarea1" class="materialize-textarea" data-length="120"></textarea> <label for="textarea1">Textarea</label> </div> </div> @@ -677,6 +863,56 @@

                  Initialization

                  +
                  +

                  Autocomplete

                  +

                  + Add an autocomplete dropdown below your input to suggest possible values. +

                  + +
                  +
                  +
                  +
                  + textsms + + +
                  +
                  +
                  +
                  + +
                  
                  +  <div class="row">
                  +    <div class="col s12">
                  +      <div class="row">
                  +        <div class="input-field col s12">
                  +          <i class="material-icons prefix">textsms</i>
                  +          <input type="text" id="autocomplete-input" class="autocomplete">
                  +          <label for="autocomplete-input">Autocomplete</label>
                  +        </div>
                  +      </div>
                  +    </div>
                  +  </div>
                  +        
                  + +

                  Initialization

                  +

                  The data is a json object where the key is the matching string and the value is an optional image url.

                  +
                  
                  +  $('input.autocomplete').autocomplete({
                  +    data: {
                  +      "Apple": null,
                  +      "Microsoft": null,
                  +      "Google": 'https://placehold.it/250x250'
                  +    },
                  +    limit: 20, // The max amount of results that can be shown at once. Default: Infinity.
                  +    onAutocomplete: function(val) {
                  +      // Callback function when value is autcompleted.
                  +    },
                  +    minLength: 1, // The minimum length of the input for the autocomplete to start. Default: 1.
                  +  });
                  +        
                  +
                  +
                  @@ -697,7 +933,9 @@

                  Initialization

                • File Input Button
                • Range
                • Date Picker
                • +
                • Time Picker
                • Character Counter
                • +
                • Autocomplete
                • @@ -705,4 +943,3 @@

                  Initialization

                  - diff --git a/jade/page-contents/fullscreen_slider_demo_content.html b/jade/page-contents/fullscreen_slider_demo_content.html index be8e2ce755..c63635fece 100644 --- a/jade/page-contents/fullscreen_slider_demo_content.html +++ b/jade/page-contents/fullscreen_slider_demo_content.html @@ -1,7 +1,7 @@
                  • - +

                    This is our big Tagline!

                    Here's our small slogan.
                    @@ -22,4 +22,10 @@
                    Here's our small slogan.
                  +
                  + +
                  + close + +
                  \ No newline at end of file diff --git a/jade/page-contents/grid_content.html b/jade/page-contents/grid_content.html index 23cff92913..fd6e53c537 100644 --- a/jade/page-contents/grid_content.html +++ b/jade/page-contents/grid_content.html @@ -6,12 +6,12 @@
                  -

                  We are using a standard 12 column fluid responsive grid system.The grid helps you layout your page in an ordered, easy fashion

                  +

                  We are using a standard 12 column fluid responsive grid system. The grid helps you layout your page in an ordered, easy fashion.

                  Container

                  The container class is not strictly part of the grid but is important in laying out content. It allows you to center your page content. The container class is set to ~70% of the window width. It helps you center and contain your page content. We use the container to contain our body content.

                  Demo

                  -

                  Try the button below to see what the page looks like without containers

                  +

                  Try the button below to see what the page looks like without containers.

                  Turn off Containers @@ -110,14 +110,16 @@

                  Columns live inside Rows

                  
                       <div class="row">
                  -      <div class="col s12">This div is 12-columns wide</div>
                  -      <div class="col s6">This div is 6-columns wide</div>
                  -      <div class="col s6">This div is 6-columns wide</div>
                  +      <div class="col s12">This div is 12-columns wide on all screen sizes</div>
                  +      <div class="col s6">6-columns (one-half)</div>
                  +      <div class="col s6">6-columns (one-half)</div>
                       </div>
                             

                  + +

                  Offsets

                  To offset, simply add offset-s2 to the class where s signifies the screen class-prefix (s = small, m = medium, l = large) and the number after is the number of columns you want to offset by.

                  @@ -127,8 +129,26 @@

                  Offsets

                  
                       <div class="row">
                  -      <div class="col s12 grid-example"><span class="flow-text">This div is 12-columns wide on all screen sizes</span></div>
                  -      <div class="col s6 offset-s6 grid-example"><span class="flow-text">6-columns (offset-by-6)</span></div>
                  +      <div class="col s12"><span class="flow-text">This div is 12-columns wide on all screen sizes</span></div>
                  +      <div class="col s6 offset-s6"><span class="flow-text">6-columns (offset-by-6)</span></div>
                  +    </div>
                  +          
                  +
                  + +
                  + + +
                  +

                  Push and Pull

                  +

                  You can easily change the order of your columns with push and pull. Simply add push-s2 or pull-s2 to the class where s signifies the screen class-prefix (s = small, m = medium, l = large) and the number after is the number of columns you want to push or pull by.

                  +
                  +
                  This div is 7-columns wide on pushed to the right by 5-columns.
                  +
                  5-columns wide pulled to the left by 7-columns.
                  +
                  +
                  
                  +    <div class="row">
                  +      <div class="col s7 push-s5"><span class="flow-text">This div is 7-columns wide on pushed to the right by 5-columns.</span></div>
                  +      <div class="col s5 pull-s7"><span class="flow-text">5-columns wide pulled to the left by 7-columns.</span></div>
                       </div>
                             
                  @@ -186,7 +206,7 @@
                  Section 3

                  Example Promotion Table

                  -

                  If we want 3 divs that are equal size, we define the divs with a width of 4-columns, 4+4+4 = 12, which nicely adds up to 12. Inside those divs, we can put our content. Take our front page content for example. We've modified it slightly for the sake of this example.

                  +

                  If we want 3 divs that are equal size, we define the divs with a width of 4-columns, as 4+4+4 nicely adds up to 12. Inside those divs, we can put our content. Take our front page content for example. We've modified it slightly for the sake of this example.

                  @@ -289,13 +309,14 @@

                  Example Side Navigation Layout

                  Creating Responsive Layouts

                  Above we showed you how to layout elements using our grid system. Now we'll show you how to design your layouts so that they look great on all screen sizes.

                  Screen Sizes

                  - +
                  - + + @@ -304,11 +325,13 @@

                  Screen Sizes

                  + + - + @@ -316,6 +339,7 @@

                  Screen Sizes

                  +
                  Mobile Devices
                  <= 600px
                  Tablet Devices
                  <= 992px
                  Tablet Devices
                  > 600px
                  Desktop Devices
                  > 992px
                  Large Desktop Devices
                  > 1200px
                  .s .m .l.xl
                  Container Width90% 85%85%70% 70%
                  12 12 1212
                  @@ -447,6 +471,7 @@

                  More Responsive Grid Examples

                • Container
                • Introduction
                • Offsets
                • +
                • Push and Pull
                • Creating Layouts
                • Responsive Layouts
                • diff --git a/jade/page-contents/helpers_content.html b/jade/page-contents/helpers_content.html index f8f31964f3..f6ca5db067 100644 --- a/jade/page-contents/helpers_content.html +++ b/jade/page-contents/helpers_content.html @@ -11,16 +11,16 @@

                  Alignment

                  Vertical Align

                  You can easily vertically center things by adding the class valign-wrapper to the container holding the items you want to vertically align.

                  -
                  This should be vertically aligned
                  +
                  This should be vertically aligned
                  
                   <div class="valign-wrapper">
                  -  <h5 class="valign">This should be vertically aligned</h5>
                  +  <h5>This should be vertically aligned</h5>
                   </div>
                           

                  Text Align
                  -

                  These classes are for horizontally aligning content. We have .left-align, .right-align and .center-align

                  +

                  These classes are for horizontally aligning content: .left-align, .right-align and .center-align.


                  This should be left aligned
                  @@ -56,10 +56,10 @@
                  Quick Floats
                  - +
                  -

                  Hiding Content

                  -

                  We provide easy to use classes to hide content on specific screen sizes.

                  +

                  Hiding/Showing Content

                  +

                  We provide easy to use classes to hide/show content on specific screen sizes.

                  @@ -92,6 +92,26 @@

                  Hiding Content

                  + + + + + + + + + + + + + + + + + + + +
                  .hide-on-large-only Hidden for Desktop Only
                  .show-on-smallShow for Mobile Only
                  .show-on-mediumShow for Tablet Only
                  .show-on-largeShow for Desktop Only
                  .show-on-medium-and-upShow for Tablet and Above
                  .show-on-medium-and-downShow for Tablet and Below

                  @@ -145,6 +165,35 @@
                  Hover
                  + +
                  +

                  Browser Defaults

                  +

                  Because we override many of the default browser styles and elements, we provide the .browser-default class to revert these elements to their original state.

                  + + + + + + + + + + + + + + + + + + + + + + +
                  Name of ElementReverted Style
                  ULBullet points
                  SELECTBrowser default select element
                  INPUTBrowser default input
                  +
                  +
                  @@ -157,8 +206,9 @@
                  Hover
                  diff --git a/jade/page-contents/icons_content.html b/jade/page-contents/icons_content.html index 530fa7ce82..72e01b0cf6 100644 --- a/jade/page-contents/icons_content.html +++ b/jade/page-contents/icons_content.html @@ -3,7 +3,7 @@
                  -

                  We have included 740 Material Design Icons courtesy of Google. You can download them directly from the Material Design specs.

                  +

                  We have included 932 Material Design Icons courtesy of Google. You can download them directly from the Material Design specs.

                  Usage

                  To be able to use these icons, you must include this line in the <head>portion of your HTML code

                  
                  @@ -37,255 +37,938 @@ 

                  Sizes



                  +
                  3d_rotation3d_rotation
                  +
                  ac_unitac_unit
                  +
                  access_alarmaccess_alarm
                  +
                  access_alarmsaccess_alarms
                  +
                  access_timeaccess_time
                  +
                  accessibilityaccessibility
                  +
                  accessibleaccessible
                  +
                  account_balanceaccount_balance
                  +
                  account_balance_walletaccount_balance_wallet
                  +
                  account_boxaccount_box
                  +
                  account_circleaccount_circle
                  +
                  adbadb
                  +
                  addadd
                  +
                  add_a_photoadd_a_photo
                  +
                  add_alarmadd_alarm
                  +
                  add_alertadd_alert
                  +
                  add_boxadd_box
                  +
                  add_circleadd_circle
                  +
                  add_circle_outlineadd_circle_outline
                  +
                  add_locationadd_location
                  +
                  add_shopping_cartadd_shopping_cart
                  +
                  add_to_photosadd_to_photos
                  +
                  add_to_queueadd_to_queue
                  +
                  adjustadjust
                  +
                  airline_seat_flatairline_seat_flat
                  +
                  airline_seat_flat_angledairline_seat_flat_angled
                  +
                  airline_seat_individual_suiteairline_seat_individual_suite
                  +
                  airline_seat_legroom_extraairline_seat_legroom_extra
                  +
                  airline_seat_legroom_normalairline_seat_legroom_normal
                  +
                  airline_seat_legroom_reducedairline_seat_legroom_reduced
                  +
                  airline_seat_recline_extraairline_seat_recline_extra
                  +
                  airline_seat_recline_normalairline_seat_recline_normal
                  +
                  airplanemode_activeairplanemode_active
                  +
                  airplanemode_inactiveairplanemode_inactive
                  +
                  airplayairplay
                  +
                  airport_shuttleairport_shuttle
                  +
                  alarmalarm
                  +
                  alarm_addalarm_add
                  +
                  alarm_offalarm_off
                  +
                  alarm_onalarm_on
                  +
                  albumalbum
                  +
                  all_inclusiveall_inclusive
                  +
                  all_outall_out
                  +
                  androidandroid
                  +
                  announcementannouncement
                  +
                  appsapps
                  +
                  archivearchive
                  +
                  arrow_backarrow_back
                  +
                  arrow_downwardarrow_downward
                  +
                  arrow_drop_downarrow_drop_down
                  +
                  arrow_drop_down_circlearrow_drop_down_circle
                  +
                  arrow_drop_uparrow_drop_up
                  +
                  arrow_forwardarrow_forward
                  +
                  arrow_upwardarrow_upward
                  +
                  art_trackart_track
                  +
                  aspect_ratioaspect_ratio
                  +
                  assessmentassessment
                  +
                  assignmentassignment
                  +
                  assignment_indassignment_ind
                  +
                  assignment_lateassignment_late
                  +
                  assignment_returnassignment_return
                  +
                  assignment_returnedassignment_returned
                  +
                  assignment_turned_inassignment_turned_in
                  +
                  assistantassistant
                  +
                  assistant_photoassistant_photo
                  +
                  attach_fileattach_file
                  +
                  attach_moneyattach_money
                  +
                  attachmentattachment
                  +
                  audiotrackaudiotrack
                  +
                  autorenewautorenew
                  +
                  av_timerav_timer
                  +
                  backspacebackspace
                  +
                  backupbackup
                  +
                  battery_alertbattery_alert
                  +
                  battery_charging_fullbattery_charging_full
                  +
                  battery_fullbattery_full
                  +
                  battery_stdbattery_std
                  +
                  battery_unknownbattery_unknown
                  +
                  beach_accessbeach_access
                  +
                  beenherebeenhere
                  +
                  blockblock
                  +
                  bluetoothbluetooth
                  +
                  bluetooth_audiobluetooth_audio
                  +
                  bluetooth_connectedbluetooth_connected
                  +
                  bluetooth_disabledbluetooth_disabled
                  +
                  bluetooth_searchingbluetooth_searching
                  +
                  blur_circularblur_circular
                  +
                  blur_linearblur_linear
                  +
                  blur_offblur_off
                  +
                  blur_onblur_on
                  +
                  bookbook
                  +
                  bookmarkbookmark
                  +
                  bookmark_borderbookmark_border
                  +
                  border_allborder_all
                  +
                  border_bottomborder_bottom
                  +
                  border_clearborder_clear
                  +
                  border_colorborder_color
                  +
                  border_horizontalborder_horizontal
                  +
                  border_innerborder_inner
                  +
                  border_leftborder_left
                  +
                  border_outerborder_outer
                  +
                  border_rightborder_right
                  +
                  border_styleborder_style
                  +
                  border_topborder_top
                  +
                  border_verticalborder_vertical
                  +
                  branding_watermarkbranding_watermark
                  +
                  brightness_1brightness_1
                  +
                  brightness_2brightness_2
                  +
                  brightness_3brightness_3
                  +
                  brightness_4brightness_4
                  +
                  brightness_5brightness_5
                  +
                  brightness_6brightness_6
                  +
                  brightness_7brightness_7
                  +
                  brightness_autobrightness_auto
                  +
                  brightness_highbrightness_high
                  +
                  brightness_lowbrightness_low
                  +
                  brightness_mediumbrightness_medium
                  +
                  broken_imagebroken_image
                  +
                  brushbrush
                  +
                  bubble_chartbubble_chart
                  +
                  bug_reportbug_report
                  +
                  buildbuild
                  +
                  burst_modeburst_mode
                  +
                  businessbusiness
                  +
                  business_centerbusiness_center
                  +
                  cachedcached
                  +
                  cakecake
                  +
                  callcall
                  +
                  call_endcall_end
                  +
                  call_madecall_made
                  +
                  call_mergecall_merge
                  +
                  call_missedcall_missed
                  +
                  call_missed_outgoingcall_missed_outgoing
                  +
                  call_receivedcall_received
                  +
                  call_splitcall_split
                  +
                  call_to_actioncall_to_action
                  +
                  cameracamera
                  +
                  camera_altcamera_alt
                  +
                  camera_enhancecamera_enhance
                  +
                  camera_frontcamera_front
                  +
                  camera_rearcamera_rear
                  +
                  camera_rollcamera_roll
                  +
                  cancelcancel
                  +
                  card_giftcardcard_giftcard
                  +
                  card_membershipcard_membership
                  +
                  card_travelcard_travel
                  +
                  casinocasino
                  +
                  castcast
                  +
                  cast_connectedcast_connected
                  +
                  center_focus_strongcenter_focus_strong
                  +
                  center_focus_weakcenter_focus_weak
                  +
                  change_historychange_history
                  +
                  chatchat
                  +
                  chat_bubblechat_bubble
                  +
                  chat_bubble_outlinechat_bubble_outline
                  +
                  checkcheck
                  +
                  check_boxcheck_box
                  +
                  check_box_outline_blankcheck_box_outline_blank
                  +
                  check_circlecheck_circle
                  +
                  chevron_leftchevron_left
                  +
                  chevron_rightchevron_right
                  +
                  child_carechild_care
                  +
                  child_friendlychild_friendly
                  +
                  chrome_reader_modechrome_reader_mode
                  +
                  classclass
                  +
                  clearclear
                  +
                  clear_allclear_all
                  +
                  closeclose
                  +
                  closed_captionclosed_caption
                  +
                  cloudcloud
                  +
                  cloud_circlecloud_circle
                  +
                  cloud_donecloud_done
                  +
                  cloud_downloadcloud_download
                  +
                  cloud_offcloud_off
                  +
                  cloud_queuecloud_queue
                  +
                  cloud_uploadcloud_upload
                  +
                  codecode
                  +
                  collectionscollections
                  +
                  collections_bookmarkcollections_bookmark
                  +
                  color_lenscolor_lens
                  +
                  colorizecolorize
                  +
                  commentcomment
                  +
                  comparecompare
                  +
                  compare_arrowscompare_arrows
                  +
                  computercomputer
                  +
                  confirmation_numberconfirmation_number
                  +
                  contact_mailcontact_mail
                  +
                  contact_phonecontact_phone
                  +
                  contactscontacts
                  +
                  content_copycontent_copy
                  +
                  content_cutcontent_cut
                  +
                  content_pastecontent_paste
                  +
                  control_pointcontrol_point
                  +
                  control_point_duplicatecontrol_point_duplicate
                  +
                  copyrightcopyright
                  +
                  createcreate
                  +
                  create_new_foldercreate_new_folder
                  +
                  credit_cardcredit_card
                  +
                  cropcrop
                  +
                  crop_16_9crop_16_9
                  +
                  crop_3_2crop_3_2
                  +
                  crop_5_4crop_5_4
                  +
                  crop_7_5crop_7_5
                  +
                  crop_dincrop_din
                  +
                  crop_freecrop_free
                  +
                  crop_landscapecrop_landscape
                  +
                  crop_originalcrop_original
                  +
                  crop_portraitcrop_portrait
                  +
                  crop_rotatecrop_rotate
                  +
                  crop_squarecrop_square
                  +
                  dashboarddashboard
                  +
                  data_usagedata_usage
                  +
                  date_rangedate_range
                  +
                  dehazedehaze
                  +
                  deletedelete
                  +
                  delete_foreverdelete_forever
                  +
                  delete_sweepdelete_sweep
                  +
                  descriptiondescription
                  +
                  desktop_macdesktop_mac
                  +
                  desktop_windowsdesktop_windows
                  +
                  detailsdetails
                  +
                  developer_boarddeveloper_board
                  +
                  developer_modedeveloper_mode
                  +
                  device_hubdevice_hub
                  +
                  devicesdevices
                  +
                  devices_otherdevices_other
                  +
                  dialer_sipdialer_sip
                  +
                  dialpaddialpad
                  +
                  directionsdirections
                  +
                  directions_bikedirections_bike
                  +
                  directions_boatdirections_boat
                  +
                  directions_busdirections_bus
                  +
                  directions_cardirections_car
                  +
                  directions_railwaydirections_railway
                  +
                  directions_rundirections_run
                  +
                  directions_subwaydirections_subway
                  +
                  directions_transitdirections_transit
                  +
                  directions_walkdirections_walk
                  +
                  disc_fulldisc_full
                  +
                  dnsdns
                  +
                  do_not_disturbdo_not_disturb
                  +
                  do_not_disturb_altdo_not_disturb_alt
                  +
                  do_not_disturb_offdo_not_disturb_off
                  +
                  do_not_disturb_ondo_not_disturb_on
                  +
                  dockdock
                  +
                  domaindomain
                  +
                  donedone
                  +
                  done_alldone_all
                  +
                  donut_largedonut_large
                  +
                  donut_smalldonut_small
                  +
                  draftsdrafts
                  +
                  drag_handledrag_handle
                  +
                  drive_etadrive_eta
                  +
                  dvrdvr
                  +
                  editedit
                  +
                  edit_locationedit_location
                  +
                  ejecteject
                  +
                  emailemail
                  +
                  enhanced_encryptionenhanced_encryption
                  +
                  equalizerequalizer
                  +
                  errorerror
                  +
                  error_outlineerror_outline
                  +
                  euro_symboleuro_symbol
                  +
                  ev_stationev_station
                  +
                  eventevent
                  +
                  event_availableevent_available
                  +
                  event_busyevent_busy
                  +
                  event_noteevent_note
                  +
                  event_seatevent_seat
                  +
                  exit_to_appexit_to_app
                  +
                  expand_lessexpand_less
                  +
                  expand_moreexpand_more
                  +
                  explicitexplicit
                  +
                  exploreexplore
                  +
                  exposureexposure
                  +
                  exposure_neg_1exposure_neg_1
                  +
                  exposure_neg_2exposure_neg_2
                  +
                  exposure_plus_1exposure_plus_1
                  +
                  exposure_plus_2exposure_plus_2
                  +
                  exposure_zeroexposure_zero
                  +
                  extensionextension
                  +
                  faceface
                  +
                  fast_forwardfast_forward
                  +
                  fast_rewindfast_rewind
                  +
                  favoritefavorite
                  +
                  favorite_borderfavorite_border
                  +
                  featured_play_listfeatured_play_list
                  +
                  featured_videofeatured_video
                  +
                  feedbackfeedback
                  +
                  fiber_dvrfiber_dvr
                  +
                  fiber_manual_recordfiber_manual_record
                  +
                  fiber_newfiber_new
                  +
                  fiber_pinfiber_pin
                  +
                  fiber_smart_recordfiber_smart_record
                  +
                  file_downloadfile_download
                  +
                  file_uploadfile_upload
                  +
                  filterfilter
                  +
                  filter_1filter_1
                  +
                  filter_2filter_2
                  +
                  filter_3filter_3
                  +
                  filter_4filter_4
                  +
                  filter_5filter_5
                  +
                  filter_6filter_6
                  +
                  filter_7filter_7
                  +
                  filter_8filter_8
                  +
                  filter_9filter_9
                  +
                  filter_9_plusfilter_9_plus
                  +
                  filter_b_and_wfilter_b_and_w
                  +
                  filter_center_focusfilter_center_focus
                  +
                  filter_dramafilter_drama
                  +
                  filter_framesfilter_frames
                  +
                  filter_hdrfilter_hdr
                  +
                  filter_listfilter_list
                  +
                  filter_nonefilter_none
                  +
                  filter_tilt_shiftfilter_tilt_shift
                  +
                  filter_vintagefilter_vintage
                  +
                  find_in_pagefind_in_page
                  +
                  find_replacefind_replace
                  +
                  fingerprintfingerprint
                  +
                  first_pagefirst_page
                  +
                  fitness_centerfitness_center
                  +
                  flagflag
                  +
                  flareflare
                  +
                  flash_autoflash_auto
                  +
                  flash_offflash_off
                  +
                  flash_onflash_on
                  +
                  flightflight
                  +
                  flight_landflight_land
                  +
                  flight_takeoffflight_takeoff
                  +
                  flipflip
                  +
                  flip_to_backflip_to_back
                  +
                  flip_to_frontflip_to_front
                  +
                  folderfolder
                  +
                  folder_openfolder_open
                  +
                  folder_sharedfolder_shared
                  +
                  folder_specialfolder_special
                  +
                  font_downloadfont_download
                  +
                  format_align_centerformat_align_center
                  +
                  format_align_justifyformat_align_justify
                  +
                  format_align_leftformat_align_left
                  +
                  format_align_rightformat_align_right
                  +
                  format_boldformat_bold
                  +
                  format_clearformat_clear
                  +
                  format_color_fillformat_color_fill
                  +
                  format_color_resetformat_color_reset
                  +
                  format_color_textformat_color_text
                  +
                  format_indent_decreaseformat_indent_decrease
                  +
                  format_indent_increaseformat_indent_increase
                  +
                  format_italicformat_italic
                  +
                  format_line_spacingformat_line_spacing
                  +
                  format_list_bulletedformat_list_bulleted
                  +
                  format_list_numberedformat_list_numbered
                  +
                  format_paintformat_paint
                  +
                  format_quoteformat_quote
                  +
                  format_shapesformat_shapes
                  +
                  format_sizeformat_size
                  +
                  format_strikethroughformat_strikethrough
                  +
                  format_textdirection_l_to_rformat_textdirection_l_to_r
                  +
                  format_textdirection_r_to_lformat_textdirection_r_to_l
                  +
                  format_underlinedformat_underlined
                  +
                  forumforum
                  +
                  forwardforward
                  +
                  forward_10forward_10
                  +
                  forward_30forward_30
                  +
                  forward_5forward_5
                  +
                  free_breakfastfree_breakfast
                  +
                  fullscreenfullscreen
                  +
                  fullscreen_exitfullscreen_exit
                  +
                  functionsfunctions
                  +
                  g_translateg_translate
                  +
                  gamepadgamepad
                  +
                  gamesgames
                  +
                  gavelgavel
                  +
                  gesturegesture
                  +
                  get_appget_app
                  +
                  gifgif
                  +
                  golf_coursegolf_course
                  +
                  gps_fixedgps_fixed
                  +
                  gps_not_fixedgps_not_fixed
                  +
                  gps_offgps_off
                  +
                  gradegrade
                  +
                  gradientgradient
                  +
                  graingrain
                  +
                  graphic_eqgraphic_eq
                  +
                  grid_offgrid_off
                  +
                  grid_ongrid_on
                  +
                  groupgroup
                  +
                  group_addgroup_add
                  +
                  group_workgroup_work
                  +
                  hdhd
                  +
                  hdr_offhdr_off
                  +
                  hdr_onhdr_on
                  +
                  hdr_stronghdr_strong
                  +
                  hdr_weakhdr_weak
                  +
                  headsetheadset
                  +
                  headset_micheadset_mic
                  +
                  healinghealing
                  +
                  hearinghearing
                  +
                  helphelp
                  +
                  help_outlinehelp_outline
                  +
                  high_qualityhigh_quality
                  +
                  highlighthighlight
                  +
                  highlight_offhighlight_off
                  +
                  historyhistory
                  +
                  homehome
                  +
                  hot_tubhot_tub
                  +
                  hotelhotel
                  +
                  hourglass_emptyhourglass_empty
                  +
                  hourglass_fullhourglass_full
                  +
                  httphttp
                  +
                  httpshttps
                  +
                  imageimage
                  +
                  image_aspect_ratioimage_aspect_ratio
                  +
                  import_contactsimport_contacts
                  +
                  import_exportimport_export
                  +
                  important_devicesimportant_devices
                  +
                  inboxinbox
                  +
                  indeterminate_check_boxindeterminate_check_box
                  +
                  infoinfo
                  info_outlineinfo_outline
                  inputinput
                  +
                  insert_chartinsert_chart
                  +
                  insert_commentinsert_comment
                  +
                  insert_drive_fileinsert_drive_file
                  +
                  insert_emoticoninsert_emoticon
                  +
                  insert_invitationinsert_invitation
                  +
                  insert_linkinsert_link
                  +
                  insert_photoinsert_photo
                  invert_colorsinvert_colors
                  +
                  invert_colors_offinvert_colors_off
                  +
                  isoiso
                  +
                  keyboardkeyboard
                  +
                  keyboard_arrow_downkeyboard_arrow_down
                  +
                  keyboard_arrow_leftkeyboard_arrow_left
                  +
                  keyboard_arrow_rightkeyboard_arrow_right
                  +
                  keyboard_arrow_upkeyboard_arrow_up
                  +
                  keyboard_backspacekeyboard_backspace
                  +
                  keyboard_capslockkeyboard_capslock
                  +
                  keyboard_hidekeyboard_hide
                  +
                  keyboard_returnkeyboard_return
                  +
                  keyboard_tabkeyboard_tab
                  +
                  keyboard_voicekeyboard_voice
                  +
                  kitchenkitchen
                  labellabel
                  label_outlinelabel_outline
                  +
                  landscapelandscape
                  languagelanguage
                  -
                  query_builderquery_builder
                  +
                  laptoplaptop
                  +
                  laptop_chromebooklaptop_chromebook
                  +
                  laptop_maclaptop_mac
                  +
                  laptop_windowslaptop_windows
                  +
                  last_pagelast_page
                  +
                  launchlaunch
                  +
                  layerslayers
                  +
                  layers_clearlayers_clear
                  +
                  leak_addleak_add
                  +
                  leak_removeleak_remove
                  +
                  lenslens
                  +
                  library_addlibrary_add
                  +
                  library_bookslibrary_books
                  +
                  library_musiclibrary_music
                  +
                  lightbulb_outlinelightbulb_outline
                  +
                  line_styleline_style
                  +
                  line_weightline_weight
                  +
                  linear_scalelinear_scale
                  +
                  linklink
                  +
                  linked_cameralinked_camera
                  +
                  listlist
                  +
                  live_helplive_help
                  +
                  live_tvlive_tv
                  +
                  local_activitylocal_activity
                  +
                  local_airportlocal_airport
                  +
                  local_atmlocal_atm
                  +
                  local_barlocal_bar
                  +
                  local_cafelocal_cafe
                  +
                  local_car_washlocal_car_wash
                  +
                  local_convenience_storelocal_convenience_store
                  +
                  local_dininglocal_dining
                  +
                  local_drinklocal_drink
                  +
                  local_floristlocal_florist
                  +
                  local_gas_stationlocal_gas_station
                  +
                  local_grocery_storelocal_grocery_store
                  +
                  local_hospitallocal_hospital
                  +
                  local_hotellocal_hotel
                  +
                  local_laundry_servicelocal_laundry_service
                  +
                  local_librarylocal_library
                  +
                  local_malllocal_mall
                  +
                  local_movieslocal_movies
                  +
                  local_offerlocal_offer
                  +
                  local_parkinglocal_parking
                  +
                  local_pharmacylocal_pharmacy
                  +
                  local_phonelocal_phone
                  +
                  local_pizzalocal_pizza
                  +
                  local_playlocal_play
                  +
                  local_post_officelocal_post_office
                  +
                  local_printshoplocal_printshop
                  +
                  local_seelocal_see
                  +
                  local_shippinglocal_shipping
                  +
                  local_taxilocal_taxi
                  +
                  location_citylocation_city
                  +
                  location_disabledlocation_disabled
                  +
                  location_offlocation_off
                  +
                  location_onlocation_on
                  +
                  location_searchinglocation_searching
                  +
                  locklock
                  +
                  lock_openlock_open
                  +
                  lock_outlinelock_outline
                  +
                  lookslooks
                  +
                  looks_3looks_3
                  +
                  looks_4looks_4
                  +
                  looks_5looks_5
                  +
                  looks_6looks_6
                  +
                  looks_onelooks_one
                  +
                  looks_twolooks_two
                  +
                  looploop
                  +
                  loupeloupe
                  +
                  low_prioritylow_priority
                  +
                  loyaltyloyalty
                  +
                  mailmail
                  +
                  mail_outlinemail_outline
                  +
                  mapmap
                  +
                  markunreadmarkunread
                  +
                  markunread_mailboxmarkunread_mailbox
                  +
                  memorymemory
                  +
                  menumenu
                  +
                  merge_typemerge_type
                  +
                  messagemessage
                  +
                  micmic
                  +
                  mic_nonemic_none
                  +
                  mic_offmic_off
                  +
                  mmsmms
                  +
                  mode_commentmode_comment
                  +
                  mode_editmode_edit
                  +
                  monetization_onmonetization_on
                  +
                  money_offmoney_off
                  +
                  monochrome_photosmonochrome_photos
                  +
                  moodmood
                  +
                  mood_badmood_bad
                  +
                  moremore
                  +
                  more_horizmore_horiz
                  +
                  more_vertmore_vert
                  +
                  motorcyclemotorcycle
                  +
                  mousemouse
                  +
                  move_to_inboxmove_to_inbox
                  +
                  moviemovie
                  +
                  movie_creationmovie_creation
                  +
                  movie_filtermovie_filter
                  +
                  multiline_chartmultiline_chart
                  +
                  music_notemusic_note
                  +
                  music_videomusic_video
                  +
                  my_locationmy_location
                  +
                  naturenature
                  +
                  nature_peoplenature_people
                  +
                  navigate_beforenavigate_before
                  +
                  navigate_nextnavigate_next
                  +
                  navigationnavigation
                  +
                  near_menear_me
                  +
                  network_cellnetwork_cell
                  +
                  network_checknetwork_check
                  +
                  network_lockednetwork_locked
                  +
                  network_wifinetwork_wifi
                  +
                  new_releasesnew_releases
                  +
                  next_weeknext_week
                  +
                  nfcnfc
                  +
                  no_encryptionno_encryption
                  +
                  no_simno_sim
                  +
                  not_interestednot_interested
                  +
                  notenote
                  +
                  note_addnote_add
                  +
                  notificationsnotifications
                  +
                  notifications_activenotifications_active
                  +
                  notifications_nonenotifications_none
                  +
                  notifications_offnotifications_off
                  +
                  notifications_pausednotifications_paused
                  +
                  offline_pinoffline_pin
                  +
                  ondemand_videoondemand_video
                  +
                  opacityopacity
                  +
                  open_in_browseropen_in_browser
                  +
                  open_in_newopen_in_new
                  +
                  open_withopen_with
                  +
                  pagespages
                  +
                  pageviewpageview
                  +
                  palettepalette
                  +
                  pan_toolpan_tool
                  +
                  panoramapanorama
                  +
                  panorama_fish_eyepanorama_fish_eye
                  +
                  panorama_horizontalpanorama_horizontal
                  +
                  panorama_verticalpanorama_vertical
                  +
                  panorama_wide_anglepanorama_wide_angle
                  +
                  party_modeparty_mode
                  +
                  pausepause
                  +
                  pause_circle_filledpause_circle_filled
                  +
                  pause_circle_outlinepause_circle_outline
                  +
                  paymentpayment
                  +
                  peoplepeople
                  +
                  people_outlinepeople_outline
                  +
                  perm_camera_micperm_camera_mic
                  +
                  perm_contact_calendarperm_contact_calendar
                  +
                  perm_data_settingperm_data_setting
                  +
                  perm_device_informationperm_device_information
                  perm_identityperm_identity
                  perm_mediaperm_media
                  perm_phone_msgperm_phone_msg
                  perm_scan_wifiperm_scan_wifi
                  +
                  personperson
                  +
                  person_addperson_add
                  +
                  person_outlineperson_outline
                  +
                  person_pinperson_pin
                  +
                  person_pin_circleperson_pin_circle
                  +
                  personal_videopersonal_video
                  +
                  petspets
                  +
                  phonephone
                  +
                  phone_androidphone_android
                  +
                  phone_bluetooth_speakerphone_bluetooth_speaker
                  +
                  phone_forwardedphone_forwarded
                  +
                  phone_in_talkphone_in_talk
                  +
                  phone_iphonephone_iphone
                  +
                  phone_lockedphone_locked
                  +
                  phone_missedphone_missed
                  +
                  phone_pausedphone_paused
                  +
                  phonelinkphonelink
                  +
                  phonelink_erasephonelink_erase
                  +
                  phonelink_lockphonelink_lock
                  +
                  phonelink_offphonelink_off
                  +
                  phonelink_ringphonelink_ring
                  +
                  phonelink_setupphonelink_setup
                  +
                  photophoto
                  +
                  photo_albumphoto_album
                  +
                  photo_cameraphoto_camera
                  +
                  photo_filterphoto_filter
                  +
                  photo_libraryphoto_library
                  +
                  photo_size_select_actualphoto_size_select_actual
                  +
                  photo_size_select_largephoto_size_select_large
                  +
                  photo_size_select_smallphoto_size_select_small
                  +
                  picture_as_pdfpicture_as_pdf
                  picture_in_picturepicture_in_picture
                  +
                  picture_in_picture_altpicture_in_picture_alt
                  +
                  pie_chartpie_chart
                  +
                  pie_chart_outlinedpie_chart_outlined
                  +
                  pin_droppin_drop
                  +
                  placeplace
                  +
                  play_arrowplay_arrow
                  +
                  play_circle_filledplay_circle_filled
                  +
                  play_circle_outlineplay_circle_outline
                  play_for_workplay_for_work
                  +
                  playlist_addplaylist_add
                  +
                  playlist_add_checkplaylist_add_check
                  +
                  playlist_playplaylist_play
                  +
                  plus_oneplus_one
                  +
                  pollpoll
                  polymerpolymer
                  +
                  poolpool
                  +
                  portable_wifi_offportable_wifi_off
                  +
                  portraitportrait
                  +
                  powerpower
                  +
                  power_inputpower_input
                  power_settings_newpower_settings_new
                  +
                  pregnant_womanpregnant_woman
                  +
                  present_to_allpresent_to_all
                  printprint
                  -
                  thumb_downthumb_down
                  -
                  thumb_upthumb_up
                  -
                  thumbs_up_downthumbs_up_down
                  -
                  emailemail
                  -
                  dialpaddialpad
                  -
                  dialer_sipdialer_sip
                  -
                  contactscontacts
                  -
                  forward_5forward_5
                  -
                  stay_current_portraitstay_current_portrait
                  -
                  stay_primary_landscapestay_primary_landscape
                  -
                  stay_primary_portraitstay_primary_portrait
                  -
                  swap_callsswap_calls
                  -
                  textsmstextsms
                  -
                  voicemailvoicemail
                  -
                  vpn_keyvpn_key
                  -
                  group_workgroup_work
                  -
                  gradegrade
                  -
                  clear_allclear_all
                  -
                  chat_bubble_outlinechat_bubble_outline
                  -
                  chat_bubblechat_bubble
                  +
                  priority_highpriority_high
                  +
                  publicpublic
                  +
                  publishpublish
                  +
                  query_builderquery_builder
                  +
                  question_answerquestion_answer
                  +
                  queuequeue
                  +
                  queue_musicqueue_music
                  +
                  queue_play_nextqueue_play_next
                  +
                  radioradio
                  +
                  radio_button_checkedradio_button_checked
                  +
                  radio_button_uncheckedradio_button_unchecked
                  +
                  rate_reviewrate_review
                  +
                  receiptreceipt
                  +
                  recent_actorsrecent_actors
                  +
                  record_voice_overrecord_voice_over
                  +
                  redeemredeem
                  +
                  redoredo
                  +
                  refreshrefresh
                  +
                  removeremove
                  +
                  remove_circleremove_circle
                  +
                  remove_circle_outlineremove_circle_outline
                  +
                  remove_from_queueremove_from_queue
                  +
                  remove_red_eyeremove_red_eye
                  +
                  remove_shopping_cartremove_shopping_cart
                  +
                  reorderreorder
                  repeatrepeat
                  repeat_onerepeat_one
                  replayreplay
                  replay_10replay_10
                  replay_30replay_30
                  replay_5replay_5
                  +
                  replyreply
                  +
                  reply_allreply_all
                  +
                  reportreport
                  +
                  report_problemreport_problem
                  +
                  restaurantrestaurant
                  +
                  restaurant_menurestaurant_menu
                  +
                  restorerestore
                  +
                  restore_pagerestore_page
                  +
                  ring_volumering_volume
                  +
                  roomroom
                  +
                  room_serviceroom_service
                  +
                  rotate_90_degrees_ccwrotate_90_degrees_ccw
                  +
                  rotate_leftrotate_left
                  +
                  rotate_rightrotate_right
                  +
                  rounded_cornerrounded_corner
                  +
                  routerrouter
                  +
                  rowingrowing
                  +
                  rss_feedrss_feed
                  +
                  rv_hookuprv_hookup
                  +
                  satellitesatellite
                  +
                  savesave
                  +
                  scannerscanner
                  +
                  scheduleschedule
                  +
                  schoolschool
                  +
                  screen_lock_landscapescreen_lock_landscape
                  +
                  screen_lock_portraitscreen_lock_portrait
                  +
                  screen_lock_rotationscreen_lock_rotation
                  +
                  screen_rotationscreen_rotation
                  +
                  screen_sharescreen_share
                  +
                  sd_cardsd_card
                  +
                  sd_storagesd_storage
                  +
                  searchsearch
                  +
                  securitysecurity
                  +
                  select_allselect_all
                  +
                  sendsend
                  +
                  sentiment_dissatisfiedsentiment_dissatisfied
                  +
                  sentiment_neutralsentiment_neutral
                  +
                  sentiment_satisfiedsentiment_satisfied
                  +
                  sentiment_very_dissatisfiedsentiment_very_dissatisfied
                  +
                  sentiment_very_satisfiedsentiment_very_satisfied
                  +
                  settingssettings
                  +
                  settings_applicationssettings_applications
                  +
                  settings_backup_restoresettings_backup_restore
                  +
                  settings_bluetoothsettings_bluetooth
                  +
                  settings_brightnesssettings_brightness
                  +
                  settings_cellsettings_cell
                  +
                  settings_ethernetsettings_ethernet
                  +
                  settings_input_antennasettings_input_antenna
                  +
                  settings_input_componentsettings_input_component
                  +
                  settings_input_compositesettings_input_composite
                  +
                  settings_input_hdmisettings_input_hdmi
                  +
                  settings_input_svideosettings_input_svideo
                  +
                  settings_overscansettings_overscan
                  +
                  settings_phonesettings_phone
                  +
                  settings_powersettings_power
                  +
                  settings_remotesettings_remote
                  +
                  settings_system_daydreamsettings_system_daydream
                  +
                  settings_voicesettings_voice
                  +
                  shareshare
                  +
                  shopshop
                  +
                  shop_twoshop_two
                  +
                  shopping_basketshopping_basket
                  +
                  shopping_cartshopping_cart
                  +
                  short_textshort_text
                  +
                  show_chartshow_chart
                  shuffleshuffle
                  +
                  signal_cellular_4_barsignal_cellular_4_bar
                  +
                  signal_cellular_connected_no_internet_4_barsignal_cellular_connected_no_internet_4_bar
                  +
                  signal_cellular_no_simsignal_cellular_no_sim
                  +
                  signal_cellular_nullsignal_cellular_null
                  +
                  signal_cellular_offsignal_cellular_off
                  +
                  signal_wifi_4_barsignal_wifi_4_bar
                  +
                  signal_wifi_4_bar_locksignal_wifi_4_bar_lock
                  +
                  signal_wifi_offsignal_wifi_off
                  +
                  sim_cardsim_card
                  +
                  sim_card_alertsim_card_alert
                  skip_nextskip_next
                  skip_previousskip_previous
                  -
                  contact_phonecontact_phone
                  -
                  commentcomment
                  -
                  recent_actorsrecent_actors
                  +
                  slideshowslideshow
                  +
                  slow_motion_videoslow_motion_video
                  +
                  smartphonesmartphone
                  +
                  smoke_freesmoke_free
                  +
                  smoking_roomssmoking_rooms
                  +
                  smssms
                  +
                  sms_failedsms_failed
                  snoozesnooze
                  +
                  sortsort
                  sort_by_alphasort_by_alpha
                  +
                  spaspa
                  +
                  space_barspace_bar
                  +
                  speakerspeaker
                  +
                  speaker_groupspeaker_group
                  +
                  speaker_notesspeaker_notes
                  +
                  speaker_notes_offspeaker_notes_off
                  +
                  speaker_phonespeaker_phone
                  +
                  spellcheckspellcheck
                  +
                  starstar
                  +
                  star_borderstar_border
                  +
                  star_halfstar_half
                  +
                  starsstars
                  +
                  stay_current_landscapestay_current_landscape
                  +
                  stay_current_portraitstay_current_portrait
                  +
                  stay_primary_landscapestay_primary_landscape
                  +
                  stay_primary_portraitstay_primary_portrait
                  stopstop
                  +
                  stop_screen_sharestop_screen_share
                  +
                  storagestorage
                  +
                  storestore
                  +
                  store_mall_directorystore_mall_directory
                  +
                  straightenstraighten
                  +
                  streetviewstreetview
                  +
                  strikethrough_sstrikethrough_s
                  +
                  stylestyle
                  +
                  subdirectory_arrow_leftsubdirectory_arrow_left
                  +
                  subdirectory_arrow_rightsubdirectory_arrow_right
                  +
                  subjectsubject
                  +
                  subscriptionssubscriptions
                  subtitlessubtitles
                  +
                  subwaysubway
                  +
                  supervisor_accountsupervisor_account
                  surround_soundsurround_sound
                  -
                  webweb
                  -
                  volume_upvolume_up
                  -
                  volume_offvolume_off
                  -
                  volume_mutevolume_mute
                  +
                  swap_callsswap_calls
                  +
                  swap_horizswap_horiz
                  +
                  swap_vertswap_vert
                  +
                  swap_vertical_circleswap_vertical_circle
                  +
                  switch_cameraswitch_camera
                  +
                  switch_videoswitch_video
                  +
                  syncsync
                  +
                  sync_disabledsync_disabled
                  +
                  sync_problemsync_problem
                  +
                  system_updatesystem_update
                  +
                  system_update_altsystem_update_alt
                  +
                  tabtab
                  +
                  tab_unselectedtab_unselected
                  +
                  tablettablet
                  +
                  tablet_androidtablet_android
                  +
                  tablet_mactablet_mac
                  +
                  tag_facestag_faces
                  +
                  tap_and_playtap_and_play
                  +
                  terrainterrain
                  +
                  text_fieldstext_fields
                  +
                  text_formattext_format
                  +
                  textsmstextsms
                  +
                  texturetexture
                  +
                  theaterstheaters
                  +
                  thumb_downthumb_down
                  +
                  thumb_upthumb_up
                  +
                  thumbs_up_downthumbs_up_down
                  +
                  time_to_leavetime_to_leave
                  +
                  timelapsetimelapse
                  +
                  timelinetimeline
                  +
                  timertimer
                  +
                  timer_10timer_10
                  +
                  timer_3timer_3
                  +
                  timer_offtimer_off
                  +
                  titletitle
                  toctoc
                  todaytoday
                  tolltoll
                  +
                  tonalitytonality
                  +
                  touch_apptouch_app
                  +
                  toystoys
                  track_changestrack_changes
                  +
                  traffictraffic
                  +
                  traintrain
                  +
                  tramtram
                  +
                  transfer_within_a_stationtransfer_within_a_station
                  +
                  transformtransform
                  translatetranslate
                  trending_downtrending_down
                  -
                  question_answerquestion_answer
                  -
                  receiptreceipt
                  -
                  donedone
                  -
                  tabtab
                  -
                  tab_unselectedtab_unselected
                  -
                  theaterstheaters
                  -
                  hdhd
                  -
                  gamesgames
                  -
                  hearinghearing
                  -
                  view_moduleview_module
                  -
                  view_listview_list
                  -
                  settings_remotesettings_remote
                  -
                  settings_voicesettings_voice
                  -
                  searchsearch
                  -
                  settingssettings
                  -
                  settings_applicationssettings_applications
                  -
                  settings_backup_restoresettings_backup_restore
                  -
                  settings_bluetoothsettings_bluetooth
                  -
                  settings_brightnesssettings_brightness
                  -
                  settings_cellsettings_cell
                  -
                  settings_ethernetsettings_ethernet
                  -
                  settings_input_antennasettings_input_antenna
                  trending_flattrending_flat
                  trending_uptrending_up
                  -
                  workwork
                  -
                  youtube_searched_foryoutube_searched_for
                  -
                  zoom_inzoom_in
                  -
                  my_locationmy_location
                  -
                  visibility_offvisibility_off
                  -
                  visibilityvisibility
                  -
                  view_weekview_week
                  -
                  view_streamview_stream
                  -
                  view_quiltview_quilt
                  +
                  tunetune
                  +
                  turned_inturned_in
                  +
                  turned_in_notturned_in_not
                  +
                  tvtv
                  +
                  unarchiveunarchive
                  +
                  undoundo
                  +
                  unfold_lessunfold_less
                  +
                  unfold_moreunfold_more
                  +
                  updateupdate
                  +
                  usbusb
                  +
                  verified_userverified_user
                  +
                  vertical_align_bottomvertical_align_bottom
                  +
                  vertical_align_centervertical_align_center
                  +
                  vertical_align_topvertical_align_top
                  +
                  vibrationvibration
                  +
                  video_callvideo_call
                  +
                  video_labelvideo_label
                  video_libraryvideo_library
                  videocamvideocam
                  videocam_offvideocam_off
                  -
                  volume_downvolume_down
                  -
                  settings_overscansettings_overscan
                  -
                  settings_input_svideosettings_input_svideo
                  -
                  settings_input_hdmisettings_input_hdmi
                  -
                  settings_input_compositesettings_input_composite
                  -
                  settings_input_componentsettings_input_component
                  -
                  launchlaunch
                  -
                  perm_device_informationperm_device_information
                  -
                  perm_data_settingperm_data_setting
                  -
                  zoom_outzoom_out
                  -
                  alarm_onalarm_on
                  -
                  dnsdns
                  -
                  redeemredeem
                  -
                  reorderreorder
                  -
                  report_problemreport_problem
                  -
                  restorerestore
                  -
                  roomroom
                  -
                  scheduleschedule
                  -
                  moviemovie
                  -
                  androidandroid
                  -
                  announcementannouncement
                  -
                  mic_offmic_off
                  -
                  mic_nonemic_none
                  -
                  swap_horizswap_horiz
                  -
                  swap_vertswap_vert
                  -
                  swap_vertical_circleswap_vertical_circle
                  -
                  system_update_altsystem_update_alt
                  -
                  subtitlessubtitles
                  -
                  present_to_allpresent_to_all
                  -
                  portable_wifi_offportable_wifi_off
                  -
                  phonelink_setupphonelink_setup
                  -
                  phonelink_ringphonelink_ring
                  -
                  phonelink_lockphonelink_lock
                  -
                  phonelink_erasephonelink_erase
                  -
                  person_pinperson_pin
                  -
                  navigationnavigation
                  -
                  new_releasesnew_releases
                  -
                  not_interestednot_interested
                  -
                  pausepause
                  -
                  pause_circle_filledpause_circle_filled
                  -
                  pause_circle_outlinepause_circle_outline
                  -
                  play_arrowplay_arrow
                  -
                  play_circle_filledplay_circle_filled
                  -
                  play_circle_outlineplay_circle_outline
                  -
                  playlist_addplaylist_add
                  -
                  queuequeue
                  -
                  queue_musicqueue_music
                  -
                  radioradio
                  -
                  classclass
                  -
                  codecode
                  -
                  credit_cardcredit_card
                  -
                  dashboarddashboard
                  -
                  deletedelete
                  -
                  descriptiondescription
                  -
                  open_withopen_with
                  -
                  pageviewpageview
                  -
                  paymentpayment
                  -
                  perm_camera_micperm_camera_mic
                  -
                  perm_contact_calendarperm_contact_calendar
                  -
                  airplayairplay
                  -
                  done_alldone_all
                  -
                  phonephone
                  -
                  no_simno_sim
                  -
                  invert_colors_offinvert_colors_off
                  -
                  chatchat
                  -
                  call_splitcall_split
                  -
                  call_receivedcall_received
                  -
                  call_missedcall_missed
                  -
                  call_mergecall_merge
                  -
                  call_madecall_made
                  -
                  call_endcall_end
                  -
                  callcall
                  -
                  businessbusiness
                  -
                  stopstop
                  -
                  sort_by_alphasort_by_alpha
                  -
                  snoozesnooze
                  -
                  commentcomment
                  -
                  clear_allclear_all
                  -
                  chat_bubble_outlinechat_bubble_outline
                  -
                  chat_bubblechat_bubble
                  -
                  alarm_offalarm_off
                  -
                  messagemessage
                  -
                  location_onlocation_on
                  -
                  location_offlocation_off
                  -
                  live_helplive_help
                  -
                  albumalbum
                  -
                  av_timerav_timer
                  -
                  closed_captionclosed_caption
                  -
                  equalizerequalizer
                  -
                  turned_in_notturned_in_not
                  -
                  verified_userverified_user
                  +
                  videogame_assetvideogame_asset
                  view_agendaview_agenda
                  view_arrayview_array
                  view_carouselview_carousel
                  view_columnview_column
                  -
                  subjectsubject
                  -
                  supervisor_accountsupervisor_account
                  -
                  settings_powersettings_power
                  -
                  shopshop
                  -
                  shop_twoshop_two
                  -
                  shopping_basketshopping_basket
                  -
                  shopping_cartshopping_cart
                  -
                  speaker_notesspeaker_notes
                  -
                  spellcheckspellcheck
                  -
                  star_ratestar_rate
                  -
                  starsstars
                  -
                  storestore
                  -
                  ring_volumering_volume
                  -
                  speaker_phonespeaker_phone
                  -
                  stay_current_landscapestay_current_landscape
                  -
                  forumforum
                  -
                  import_exportimport_export
                  -
                  open_in_browseropen_in_browser
                  -
                  open_in_newopen_in_new
                  -
                  forward_30forward_30
                  -
                  turned_inturned_in
                  -
                  view_headlineview_headline
                  +
                  view_comfyview_comfy
                  +
                  view_compactview_compact
                  view_dayview_day
                  +
                  view_headlineview_headline
                  +
                  view_listview_list
                  +
                  view_moduleview_module
                  +
                  view_quiltview_quilt
                  +
                  view_streamview_stream
                  +
                  view_weekview_week
                  +
                  vignettevignette
                  +
                  visibilityvisibility
                  +
                  visibility_offvisibility_off
                  +
                  voice_chatvoice_chat
                  +
                  voicemailvoicemail
                  +
                  volume_downvolume_down
                  +
                  volume_mutevolume_mute
                  +
                  volume_offvolume_off
                  +
                  volume_upvolume_up
                  +
                  vpn_keyvpn_key
                  +
                  vpn_lockvpn_lock
                  +
                  wallpaperwallpaper
                  warningwarning
                  -
                  error_outlineerror_outline
                  -
                  errorerror
                  -
                  add_alertadd_alert
                  -
                  settings_phonesettings_phone
                  -
                  forward_10forward_10
                  -
                  fast_rewindfast_rewind
                  -
                  fast_forwardfast_forward
                  -
                  explicitexplicit
                  -
                  listlist
                  -
                  locklock
                  -
                  lock_openlock_open
                  -
                  lock_outlinelock_outline
                  -
                  loyaltyloyalty
                  -
                  markunread_mailboxmarkunread_mailbox
                  -
                  note_addnote_add
                  -
                  offline_pinoffline_pin
                  -
                  httphttp
                  -
                  micmic
                  -
                  looploop
                  -
                  library_musiclibrary_music
                  -
                  library_bookslibrary_books
                  -
                  library_addlibrary_add
                  -
                  high_qualityhigh_quality
                  -
                  surround_soundsurround_sound
                  -
                  infoinfo
                  -
                  httpshttps
                  -
                  aspect_ratioaspect_ratio
                  -
                  assessmentassessment
                  -
                  assignmentassignment
                  -
                  assignment_indassignment_ind
                  -
                  assignment_lateassignment_late
                  +
                  watchwatch
                  +
                  watch_laterwatch_later
                  +
                  wb_autowb_auto
                  +
                  wb_cloudywb_cloudy
                  +
                  wb_incandescentwb_incandescent
                  +
                  wb_iridescentwb_iridescent
                  +
                  wb_sunnywb_sunny
                  +
                  wcwc
                  +
                  webweb
                  +
                  web_assetweb_asset
                  +
                  weekendweekend
                  +
                  whatshotwhatshot
                  +
                  widgetswidgets
                  +
                  wifiwifi
                  +
                  wifi_lockwifi_lock
                  +
                  wifi_tetheringwifi_tethering
                  +
                  workwork
                  +
                  wrap_textwrap_text
                  +
                  youtube_searched_foryoutube_searched_for
                  +
                  zoom_inzoom_in
                  +
                  zoom_outzoom_out
                  +
                  zoom_out_mapzoom_out_map
                  @@ -303,7 +986,7 @@

                  Sizes

                  @@ -311,4 +994,3 @@

                  Sizes

                  - diff --git a/jade/page-contents/media-css_content.html b/jade/page-contents/media-css_content.html index 2f9de48d61..c090d46179 100644 --- a/jade/page-contents/media-css_content.html +++ b/jade/page-contents/media-css_content.html @@ -66,20 +66,11 @@

                  Responsive Embeds

                  <iframe width="853" height="480" src="//www.youtube.com/embed/Q8TXgCzxEnw?rel=0" frameborder="0" allowfullscreen></iframe> </div>
                  -

                  If your video does not have video controls, add the no-controls class to the video container.

                  -
                  - -
                  -
                  
                  -        <div class="video-container no-controls">
                  -          <iframe width="853" height="480" src="//www.youtube.com/embed/Q8TXgCzxEnw?rel=0;autohide=1" frameborder="0" allowfullscreen></iframe>
                  -        </div>
                  -          

                  Responsive Videos

                  To make your HTML5 Videos responsive just add the class responsive-video to the video tag.

                  
                     <video class="responsive-video" controls>
                  diff --git a/jade/page-contents/media_content.html b/jade/page-contents/media_content.html
                  index 6560b57a26..d7a03b77ab 100644
                  --- a/jade/page-contents/media_content.html
                  +++ b/jade/page-contents/media_content.html
                  @@ -5,7 +5,7 @@
                   
                         

                  Material Box

                  -

                  Material box is a material design implementation of the Lightbox plugin. When a user clicks on an image that can be enlarged. Material box centers the image and enlarges it in a smooth, non-jarring manner. To dismiss the image, the user can either click on the image again, scroll away, or press the ESC key.

                  +

                  Material box is a material design implementation of the Lightbox plugin. When a user clicks on an image that can be enlarged, Material box centers the image and enlarges it in a smooth, non-jarring manner. To dismiss the image, the user can either click on the image again, scroll away, or press the ESC key.

                  Creating the above image with the effect is as simple as adding a materialboxed class to the image tag.

                  @@ -24,9 +24,9 @@

                  Initialization

                  Captions

                  It is very easy to add a short caption to your photo. Just add the caption as a data-caption attribute.

                  - +
                  
                  -  <img class="materialboxed" data-caption="A picture of some deer and tons of trees" width="250" src="http://th01.deviantart.net/fs70/PRE/i/2013/126/1/e/nature_portrait_by_pw_fotografie-d63tx0n.jpg">
                  +  <img class="materialboxed" data-caption="A picture of a way with a group of trees in a park" width="250" src="https://lorempixel.com/800/400/nature/4">
                             
                  @@ -42,28 +42,28 @@

                  Slider

                  • - +

                    This is our big Tagline!

                    Here's our small slogan.
                  • - +

                    Left Aligned Caption

                    Here's our small slogan.
                  • - +

                    Right Aligned Caption

                    Here's our small slogan.
                  • - +

                    This is our big Tagline!

                    Here's our small slogan.
                    @@ -76,28 +76,28 @@
                    Here's our small slogan.
                    <div class="slider"> <ul class="slides"> <li> - <img src="http://lorempixel.com/580/250/nature/1"> <!-- random image --> + <img src="https://lorempixel.com/580/250/nature/1"> <!-- random image --> <div class="caption center-align"> <h3>This is our big Tagline!</h3> <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5> </div> </li> <li> - <img src="http://lorempixel.com/580/250/nature/2"> <!-- random image --> + <img src="https://lorempixel.com/580/250/nature/2"> <!-- random image --> <div class="caption left-align"> <h3>Left Aligned Caption</h3> <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5> </div> </li> <li> - <img src="http://lorempixel.com/580/250/nature/3"> <!-- random image --> + <img src="https://lorempixel.com/580/250/nature/3"> <!-- random image --> <div class="caption right-align"> <h3>Right Aligned Caption</h3> <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5> </div> </li> <li> - <img src="http://lorempixel.com/580/250/nature/4"> <!-- random image --> + <img src="https://lorempixel.com/580/250/nature/4"> <!-- random image --> <div class="caption center-align"> <h3>This is our big Tagline!</h3> <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5> @@ -116,13 +116,13 @@

                    Fullscreen Slider

                    jQuery Initialization

                    
                         $(document).ready(function(){
                    -      $('.slider').slider({full_width: true});
                    +      $('.slider').slider();
                         });
                             

                    jQuery Plugin Options

                    - +
                    @@ -132,19 +132,19 @@

                    jQuery Plugin Options

                    - + - + - + - + @@ -152,12 +152,16 @@

                    jQuery Plugin Options


                    jQuery Plugin Methods

                    -

                    We have methods to show and hide your sidebar you can use to programmatically control your sidebar.

                    +

                    We have methods to pause, start, move to next and move to previous slide.

                    
                     // Pause slider
                     $('.slider').slider('pause');
                     // Start slider
                     $('.slider').slider('start');
                    +// Next slide
                    +$('.slider').slider('next');
                    +// Previous slide
                    +$('.slider').slider('prev');
                           
                    @@ -182,4 +186,3 @@

                    jQuery Plugin Methods

                    - diff --git a/jade/page-contents/modals_content.html b/jade/page-contents/modals_content.html index 4fb5217dcb..f53ef4d6ec 100644 --- a/jade/page-contents/modals_content.html +++ b/jade/page-contents/modals_content.html @@ -85,7 +85,7 @@

                    Modals HTML Structure

                    <p>A bunch of text</p> </div> <div class="modal-footer"> - <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">Agree</a> + <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Agree</a> </div> </div> @@ -97,7 +97,7 @@

                    Modals with Fixed Footer

                    If you have content that is very long and you want the action buttons to be visible all the time, you can add the modal-fixed-footer class to the modal.

                    
                       <!-- Modal Trigger -->
                    -  <a class="modal-trigger waves-effect waves-light btn" href="#modal1">Modal</a>
                    +  <a class="waves-effect waves-light btn modal-trigger" href="#modal1">Modal</a>
                     
                       <!-- Modal Structure -->
                       <div id="modal1" class="modal modal-fixed-footer">
                    @@ -126,7 +126,7 @@ 

                    Bottom Sheet Modals

                    <p>A bunch of text</p> </div> <div class="modal-footer"> - <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">Agree</a> + <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Agree</a> </div> </div>
                    @@ -134,7 +134,7 @@

                    Bottom Sheet Modals

                    Modals with Button trigger

                    -

                    If you prefer to use a button to open a modal specify the Modal ID in data-target rather that the href attribute.

                    +

                    If you prefer to use a button to open a modal specify the Modal ID in data-target rather than the href attribute.

                    
                       <!-- Modal Trigger -->
                    @@ -149,17 +149,17 @@ 

                    jQuery Plugin Initialization

                    To open a modal using a trigger:

                    
                       $(document).ready(function(){
                    -    // the "href" attribute of .modal-trigger must specify the modal ID that wants to be triggered
                    -    $('.modal-trigger').leanModal();
                    +    // the "href" attribute of the modal trigger must specify the modal ID that wants to be triggered
                    +    $('.modal').modal();
                       });
                               

                    You can also open modals programatically, the below code will make your modal open on document ready:

                    
                    -  $('#modal1').openModal();
                    +  $('#modal1').modal('open');
                               

                    You can also close them programatically:

                    
                    -  $('#modal1').closeModal();
                    +  $('#modal1').modal('close');
                             
                    @@ -169,12 +169,17 @@

                    jQuery Plugin Initialization

                    Options

                    You can customize the behavior of each modal using these options. For example, you can call a custom function to run when a modal is dismissed. To do this, just place your function in the intialization code as shown below.

                    
                    -  $('.modal-trigger').leanModal({
                    +  $('.modal').modal({
                           dismissible: true, // Modal can be dismissed by clicking outside of the modal
                           opacity: .5, // Opacity of modal background
                    -      in_duration: 300, // Transition in duration
                    -      out_duration: 200, // Transition out duration
                    -      ready: function() { alert('Ready'); }, // Callback for Modal open
                    +      inDuration: 300, // Transition in duration
                    +      outDuration: 200, // Transition out duration
                    +      startingTop: '4%', // Starting top style attribute
                    +      endingTop: '10%', // Ending top style attribute
                    +      ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available.
                    +        alert("Ready");
                    +        console.log(modal, trigger);
                    +      },
                           complete: function() { alert('Closed'); } // Callback for Modal close
                         }
                       );
                    @@ -206,4 +211,3 @@ 

                    Options

                    - diff --git a/jade/page-contents/navbar_content.html b/jade/page-contents/navbar_content.html index fc7534d05b..e8c0ea458e 100644 --- a/jade/page-contents/navbar_content.html +++ b/jade/page-contents/navbar_content.html @@ -109,18 +109,85 @@

                    Active Items


                    
                    -  <div class="navbar-fixed">
                    -    <nav>
                    -      <div class="nav-wrapper">
                    -        <a href="#!" class="brand-logo">Logo</a>
                    -        <ul class="right hide-on-med-and-down">
                    -          <li><a href="sass.html">Sass</a></li>
                    -          <li><a href="badges.html">Components</a></li>
                    -          <li class="active"><a href="collapsible.html">JavaScript</a></li>
                    -        </ul>
                    -      </div>
                    -    </nav>
                    -  </div>
                    +  <nav>
                    +    <div class="nav-wrapper">
                    +      <a href="#!" class="brand-logo center">Logo</a>
                    +      <ul class="left hide-on-med-and-down">
                    +        <li><a href="sass.html">Sass</a></li>
                    +        <li><a href="badges.html">Components</a></li>
                    +        <li class="active"><a href="collapsible.html">JavaScript</a></li>
                    +      </ul>
                    +    </div>
                    +  </nav>
                    +        
                    + + + @@ -210,7 +277,7 @@

                    Icon Links

                    @@ -42,4 +42,10 @@

                    Parallax Demo HTML

                    +
                    + +
                    + close + +
                    \ No newline at end of file diff --git a/jade/page-contents/preloader_content.html b/jade/page-contents/preloader_content.html index 23d44dad71..5b19388176 100644 --- a/jade/page-contents/preloader_content.html +++ b/jade/page-contents/preloader_content.html @@ -3,7 +3,6 @@

                    If you have content that will take a long time to load, you should give the user feedback. For this reason we provide a number activity + progress indicators.

                    -

                    Linear

                    There are a couple different types of linear progress bars.

                    @@ -40,6 +39,8 @@

                    Indeterminate

                    Circular

                    +

                    There are 4 colors and 3 sizes of circular spinners. The spinner should be nested in a preloader-wrapper div. The default size is medium, but you can add the classes big or small to adjust the size accordingly. You can add the classes spinner-red-only, spinner-blue-only, spinner-yellow-only and spinner-green-only. You can also leave this class as just spinner-layer and it will be set to the $spinner-default-color variable in our variables.scss file.

                    +

                    Colors

                    @@ -98,6 +99,30 @@

                    Circular

                    </div> </div> </div> + + <div class="preloader-wrapper active"> + <div class="spinner-layer spinner-red-only"> + <div class="circle-clipper left"> + <div class="circle"></div> + </div><div class="gap-patch"> + <div class="circle"></div> + </div><div class="circle-clipper right"> + <div class="circle"></div> + </div> + </div> + </div> + + <div class="preloader-wrapper small active"> + <div class="spinner-layer spinner-green-only"> + <div class="circle-clipper left"> + <div class="circle"></div> + </div><div class="gap-patch"> + <div class="circle"></div> + </div><div class="circle-clipper right"> + <div class="circle"></div> + </div> + </div> + </div>
                    diff --git a/jade/page-contents/pulse_content.html b/jade/page-contents/pulse_content.html new file mode 100644 index 0000000000..cd6fce5f20 --- /dev/null +++ b/jade/page-contents/pulse_content.html @@ -0,0 +1,39 @@ +
                    +
                    +
                    + +
                    +

                    Draw attention to your buttons with this subtle but captivating effect. Just add the class pulse to your button. Note: This is meant for floating buttons, so it may not work perfectly with every component.

                    + +
                    + menu + cloud + edit +
                    + +

                    Pulse HTML Structure

                    +
                    
                    +<a class="btn btn-floating pulse"><i class="material-icons">menu</i></a>
                    +<a class="btn btn-floating btn-large pulse"><i class="material-icons">cloud</i></a>
                    +<a class="btn btn-floating btn-large cyan pulse"><i class="material-icons">edit</i></a>
                    +
                    +
                    +
                    + + +
                    +
                    +
                    + + +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    diff --git a/jade/page-contents/pushpin_content.html b/jade/page-contents/pushpin_content.html index 38ee527cef..9c282f6311 100644 --- a/jade/page-contents/pushpin_content.html +++ b/jade/page-contents/pushpin_content.html @@ -5,25 +5,70 @@

                    Introduction

                    -

                    Pushpin is our fixed positioning plugin. You can check out our live examples: the fixed Table of Contents on the right.

                    -
                    +

                    Pushpin is our fixed positioning plugin. Use this to pin elements to your page during specific scroll ranges. You can check out our live example: the fixed table of contents on the right.

                    + + Open Demo +

                    +
                    Demo Code
                    +
                    
                    +  $('.pushpin-demo-nav').each(function() {
                    +    var $this = $(this);
                    +    var $target = $('#' + $(this).attr('data-target'));
                    +    $this.pushpin({
                    +      top: $target.offset().top,
                    +      bottom: $target.offset().top + $target.outerHeight() - $this.height()
                    +    });
                    +  });
                    +        
                    +
                    
                    +  // Only necessary for window height sized blocks.
                    +  html, body, .block {
                    +    height: 100%;
                    +  }
                    +        
                    +

                    jQuery Plugin Initialization

                    +

                    Here is a sample initialization of pushpin. Take a look at what the options are and customize them to your needs.

                    
                       $(document).ready(function(){
                    -    $('.tabs-wrapper .row').pushpin({ top: $('.tabs-wrapper').offset().top });
                    +    $('.target').pushpin({
                    +      top: 0,
                    +      bottom: 1000,
                    +      offset: 0
                    +    });
                       });
                             
                    +
                    +

                    CSS Classes

                    +

                    A pushpinned element has 3 states. One above and below the scrolling threshold, and the pinned state where the element becomes fixed. Because pushpin changes positioning, chances are your element will look different when the states change. Use these css classes to correctly style your 3 states.

                    +
                    
                    +  // Class for when element is above threshold
                    +  .pin-top {
                    +    position: relative;
                    +  }
                    +
                    +  // Class for when element is below threshold
                    +  .pin-bottom {
                    +    position: relative;
                    +  }
                    +
                    +  // Class for when element is pinned
                    +  .pinned {
                    +    position: fixed !important;
                    +  }
                    +        
                    +

                    jQuery Plugin Options

                    -
                    Option Name
                    Indicatorsindicators Set to false to hide slide indicators. (Default: True)
                    Heightheight Set height of slider. (Default: 400)
                    Transitiontransition Set the duration of the transition animation in ms. (Default: 500)
                    Intervalinterval Set the duration between transitions in ms. (Default: 6000)
                    +
                    @@ -33,21 +78,29 @@

                    jQuery Plugin Options

                    - + - + - +
                    Option Name
                    Toptop The distance in pixels from the top of the page where the element becomes fixed. (Default: 0)
                    Bottombottom The distance in pixels from the top of the page where the elements stops being fixed. (Default: Infinity)
                    Offsetoffset The offset from the top the element will be fixed at. (Default: 0)
                    -
                    +
                    +

                    Removal

                    +

                    To remove the pushpin from an element, pass in 'remove' as the option to the pushpin function.

                    +
                    
                    +  //Removes pushpin and pushpin classes
                    +  $('.tabs-wrapper .row').pushpin('remove');
                    +        
                    + +
                  @@ -62,6 +115,7 @@

                  jQuery Plugin Options

                  @@ -70,4 +124,3 @@

                  jQuery Plugin Options

                  - diff --git a/jade/page-contents/pushpin_demo_content.html b/jade/page-contents/pushpin_demo_content.html new file mode 100644 index 0000000000..13f7ddbcae --- /dev/null +++ b/jade/page-contents/pushpin_demo_content.html @@ -0,0 +1,50 @@ +
                  + +
                  + +
                  + +
                  + +
                  + +
                  + +
                  + close + + +
                  diff --git a/jade/page-contents/sass_content.html b/jade/page-contents/sass_content.html index 97d0e1ee4e..285e7e9717 100644 --- a/jade/page-contents/sass_content.html +++ b/jade/page-contents/sass_content.html @@ -7,7 +7,7 @@

                  Variables

                  - When using Sass, you can change the color scheme of your site extremely quickly. Below is a very small sample of what you can change through sass in _variables.scss. + When using Sass, you can change the color scheme of your site extremely quickly. Below is a very small sample of what you can change through sass in _variables.scss.

                  
                     $primary-color: color("materialize-red", "lighten-2") !default;
                  @@ -41,6 +41,8 @@ 

                  Media Queries

                  Medium screens are defined as having a max-width of 992px
                  Large screen are defined as having a min-width of 993px +
                  + Extra Large screen are defined as having a min-width of 1200px

                  CSS

                  @@ -74,69 +76,12 @@

                  Sass

                  } @media #{$large-and-up} { // styles for large screens and up + } + @media #{$extra-large-and-up} { + // styles for extra large screens and up }
                  - - -
                  -

                  Prefixer

                  -

                  - One major goal of this framework is to be as adaptable as possible which includes cross browser compatibility. We have adapted a prefixer script to Sass which will automatically add all browser prefixes for certain CSS properties. -

                  - - - For Example: Using this Sass mixin -
                  
                  -  @include transition(.3s);
                  -        
                  - Will Output This -
                  
                  -  -webkit-transition: 0.3s;
                  -  -moz-transition: 0.3s;
                  -  -o-transition: 0.3s;
                  -  -ms-transition: 0.3s;
                  -  transition: 0.3s;
                  -        
                  - Here is the full list of mixins -
                  
                  -  animation($args)
                  -  animation-delay($delay)
                  -  animation-direction($direction)
                  -  animation-duration($duration)
                  -  animation-fill-mode($mode)
                  -  animation-iteration-count($count)
                  -  animation-name($name)
                  -  animation-play-state($state)
                  -  animation-timing-function($function)
                  -  background-size($args)
                  -  box-sizing($args)
                  -      border-box()
                  -      content-box()
                  -  columns($args)
                  -      column-count($count)
                  -      column-gap($gap)
                  -      column-rule($args)
                  -      column-width($width)
                  -  gradient($default,$start,$stop)
                  -      linear-gradient-top($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])
                  -      linear-gradient-left($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])
                  -  transform($args)
                  -      transform-origin($args)
                  -      transform-style($style)
                  -      rotate($deg)
                  -      scale($factor)
                  -      translate($x,$y)
                  -      translate3d($x,$y,$z)
                  -      translateHardware($x,$y)
                  -  text-shadow($args)
                  -  transition($args)
                  -      transition-delay($delay)
                  -      transition-duration($duration)
                  -      transition-property($property)
                  -      transition-timing-function($function)
                  -        
                  -
                  @@ -148,7 +93,6 @@

                  Prefixer

                  diff --git a/jade/page-contents/scrollfire_content.html b/jade/page-contents/scrollfire_content.html index 7ab2e3b799..91fb867f3b 100644 --- a/jade/page-contents/scrollfire_content.html +++ b/jade/page-contents/scrollfire_content.html @@ -13,8 +13,10 @@

                  Introduction

                  jQuery Plugin Initialization

                  
                     var options = [
                  -    {selector: '.class', offset: 200, callback: 'globalFunction()' },
                  -    {selector: '.other-class', offset: 200, callback: 'globalFunction()' },
                  +    {selector: '.class', offset: 200, callback: customCallbackFunc },
                  +    {selector: '.other-class', offset: 200, callback: function() {
                  +      customCallbackFunc();
                  +    } },
                     ];
                     Materialize.scrollFire(options);
                           
                  @@ -32,58 +34,67 @@

                  jQuery Plugin Options

                  - Selector + selector The selector for the element that is being tracked. - Offset + offset If this is 0, the callback will be fired when the selector element is at the very bottom of the user's window. - Callback - This string is the function call that you want to make when the user scrolls to the threshold. It will only be called once. + callback + Execute a callback function when the user scrolls to the threshold. It will only be called once.
                  The callback provides a parameter which refers to the current element selected. + + +

                  ScrollFire Demo

                  +

                  Scroll through slowly to get sense of what ScrollFire can do for you. This is the ScrollFire code that we have used on this page.

                  +
                  +    
                  +    var options = [
                  +      {selector: '#staggered-test', offset: 50, callback: function(el) {
                  +        Materialize.toast("This is our ScrollFire Demo!", 1500 );
                  +      } },
                  +      {selector: '#staggered-test', offset: 205, callback: function(el) {
                  +        Materialize.toast("Please continue scrolling!", 1500 );
                  +      } },
                  +      {selector: '#staggered-test', offset: 400, callback: function(el) {
                  +        Materialize.showStaggeredList($(el));
                  +      } },
                  +      {selector: '#image-test', offset: 500, callback: function(el) {
                  +        Materialize.fadeInImage($(el));
                  +      } }
                  +    ];
                  +    Materialize.scrollFire(options);
                  +        
                  + + + - -

                  ScrollFire Demo

                  -

                  Scroll through slowly to get sense of what ScrollFire can do for you. This is the ScrollFire code that we have used on this page.

                  -
                  -  
                  -  var options = [
                  -    {selector: '#staggered-test', offset: 50, callback: 'Materialize.toast("This is our ScrollFire Demo!", 1500 )' },
                  -    {selector: '#staggered-test', offset: 205, callback: 'Materialize.toast("Please continue scrolling!", 1500 )' },
                  -    {selector: '#staggered-test', offset: 400, callback: 'Materialize.showStaggeredList("#staggered-test")' },
                  -    {selector: '#image-test', offset: 500, callback: 'Materialize.fadeInImage("#image-test")' }
                  -  ];
                  -  Materialize.scrollFire(options);
                  -      
                  - - - diff --git a/jade/page-contents/scrollspy_content.html b/jade/page-contents/scrollspy_content.html index 8fb8b4dfb4..9b7a6d6663 100644 --- a/jade/page-contents/scrollspy_content.html +++ b/jade/page-contents/scrollspy_content.html @@ -5,9 +5,10 @@

                  Introduction

                  -

                  Scrollspy is a jQuery plugin that tracks certain elements and which element the user's screen is currently centered on. Our main demo of this is our table of contents on every documentation page to the right. Clicking on these links will also scroll the page to that element.

                  +

                  Scrollspy is a jQuery plugin that tracks certain elements and which element the user's screen is currently centered on. Our main demo of this is our table of contents on every documentation page to the right. Clicking on these links will also scroll the page to that element.

                  +

                  Table of Contents Structure

                  
                  @@ -37,7 +38,6 @@ 

                  Table of Contents Structure

                  -

                  jQuery Plugin Initialization

                  
                  @@ -47,6 +47,42 @@ 

                  jQuery Plugin Initialization

                  + +
                  +

                  jQuery Plugin Options

                  + + + + + + + + + + + + + + + + + + + + + + +
                  Option NameDescription
                  scrollOffsetOffset for centering element when scrolled to. Default: 200
                  activeClassClass name to be added to the active link. Default: active
                  getActiveElement + Function that returns a selector to add activeClass to. The parameter is the section id. + + Default:
                  
                  +  function(id) {
                  +    return 'a[href="#' + id + '"]';
                  +  }
                  +                
                  +
                  +
                  + @@ -61,6 +97,7 @@

                  jQuery Plugin Initialization

                • Introduction
                • Structure
                • Intialization
                • +
                • Options
                • @@ -68,4 +105,3 @@

                  jQuery Plugin Initialization

                  - diff --git a/jade/page-contents/sideNav_content.html b/jade/page-contents/sideNav_content.html index 9bf200c492..bf52e774c7 100644 --- a/jade/page-contents/sideNav_content.html +++ b/jade/page-contents/sideNav_content.html @@ -3,27 +3,48 @@
                  -
                  +

                  Introduction

                  -

                  This is a slide out menu. You can add a dropdown to your sidebar by using our collapsible component. If you want to see a demo, our sidebar will use this on smaller screens. To use this in conjunction with a fullscreen navigation, you have to use two copies of the same UL.

                  -
                  - +

                  This is a slide out menu. You can add a dropdown to your sidebar by using our collapsible component. If you want to see a demo, our sidebar will use this on smaller screens. To use this in conjunction with a fullscreen navigation, you have to use two copies of the same UL.

                  + + Side nav demo + + -

                  HTML Structure

                  
                  -<nav>
                  -  <ul class="right hide-on-med-and-down">
                  -    <li><a href="#!">First Sidebar Link</a></li>
                  -    <li><a href="#!">Second Sidebar Link</a></li>
                  -  </ul>
                     <ul id="slide-out" class="side-nav">
                  -    <li><a href="#!">First Sidebar Link</a></li>
                  -    <li><a href="#!">Second Sidebar Link</a></li>
                  +    <li><div class="user-view">
                  +      <div class="background">
                  +        <img src="images/office.jpg">
                  +      </div>
                  +      <a href="#!user"><img class="circle" src="images/yuna.jpg"></a>
                  +      <a href="#!name"><span class="white-text name">John Doe</span></a>
                  +      <a href="#!email"><span class="white-text email">jdandturk@gmail.com</span></a>
                  +    </div></li>
                  +    <li><a href="#!"><i class="material-icons">cloud</i>First Link With Icon</a></li>
                  +    <li><a href="#!">Second Link</a></li>
                  +    <li><div class="divider"></div></li>
                  +    <li><a class="subheader">Subheader</a></li>
                  +    <li><a class="waves-effect" href="#!">Third Link With Waves</a></li>
                     </ul>
                  -  <a href="#" data-activates="slide-out" class="button-collapse"><i class="mdi-navigation-menu"></i></a>
                  -</nav>
                  +  <a href="#" data-activates="slide-out" class="button-collapse"><i class="material-icons">menu</i></a>
                           
                  +

                  jQuery Plugin Initialization

                  @@ -41,101 +62,106 @@

                  Options

                  You can customize the sideNav by setting your own width and the alignment of the menu.

                  
                     $('.button-collapse').sideNav({
                  -      menuWidth: 300, // Default is 240
                  +      menuWidth: 300, // Default is 300
                         edge: 'right', // Choose the horizontal origin
                  -      closeOnClick: true // Closes side-nav on <a> clicks, useful for Angular/Meteor
                  +      closeOnClick: true, // Closes side-nav on <a> clicks, useful for Angular/Meteor
                  +      draggable: true, // Choose whether you can drag to open on touch screens,
                  +      onOpen: function(el) { /* Do Stuff* / }, // A function to be called when sideNav is opened
                  +      onClose: function(el) { /* Do Stuff* / }, // A function to be called when sideNav is closed
                       }
                     );
                  -      
                  -
                  - -
                  -

                  jQuery Plugin Methods

                  -

                  We have methods to show and hide your sidebar you can use to programmatically control your sidebar.

                  -
                  
                  -// Show sideNav
                  -$('.button-collapse').sideNav('show');
                  -// Hide sideNav
                  -$('.button-collapse').sideNav('hide');
                  -      
                  -
                  +
                  +
                  +
                  +

                  jQuery Plugin Methods

                  +

                  We have methods to show and hide your sidebar you can use to programmatically control your sidebar.

                  +
                  
                  +  // Show sideNav
                  +  $('.button-collapse').sideNav('show');
                  +  // Hide sideNav
                  +  $('.button-collapse').sideNav('hide');
                  +  // Destroy sideNav
                  +  $('.button-collapse').sideNav('destroy');
                  +        
                  +
                  -
                  -

                  Variations

                  -

                  Dropdown HTML Structure

                  -
                  
                  -  <ul id="slide-out" class="side-nav">
                  -    <li><a href="#!">First Sidebar Link</a></li>
                  -    <li><a href="#!">Second Sidebar Link</a></li>
                  -    <li class="no-padding">
                  -      <ul class="collapsible collapsible-accordion">
                  -        <li>
                  -          <a class="collapsible-header">Dropdown<i class="mdi-navigation-arrow-drop-down"></i></a>
                  -          <div class="collapsible-body">
                  -            <ul>
                  -              <li><a href="#!">First</a></li>
                  -              <li><a href="#!">Second</a></li>
                  -              <li><a href="#!">Third</a></li>
                  -              <li><a href="#!">Fourth</a></li>
                  -            </ul>
                  -          </div>
                  -        </li>
                  +      
                  +

                  Variations

                  +

                  + Here are some useful variations and additional elements you can add to your sidebar. +

                  + +

                  Dropdown HTML Structure

                  +

                  Add collapsible menus to your sidebar.

                  +
                  
                  +    <ul id="slide-out" class="side-nav">
                  +      <li><a href="#!">First Sidebar Link</a></li>
                  +      <li><a href="#!">Second Sidebar Link</a></li>
                  +      <li class="no-padding">
                  +        <ul class="collapsible collapsible-accordion">
                  +          <li>
                  +            <a class="collapsible-header">Dropdown<i class="material-icons">arrow_drop_down</i></a>
                  +            <div class="collapsible-body">
                  +              <ul>
                  +                <li><a href="#!">First</a></li>
                  +                <li><a href="#!">Second</a></li>
                  +                <li><a href="#!">Third</a></li>
                  +                <li><a href="#!">Fourth</a></li>
                  +              </ul>
                  +            </div>
                  +          </li>
                  +        </ul>
                  +      </li>
                  +    </ul>
                  +    <ul class="right hide-on-med-and-down">
                  +      <li><a href="#!">First Sidebar Link</a></li>
                  +      <li><a href="#!">Second Sidebar Link</a></li>
                  +      <li><a class="dropdown-button" href="#!" data-activates="dropdown1">Dropdown<i class="material-icons right">arrow_drop_down</i></a></li>
                  +      <ul id='dropdown1' class='dropdown-content'>
                  +        <li><a href="#!">First</a></li>
                  +        <li><a href="#!">Second</a></li>
                  +        <li><a href="#!">Third</a></li>
                  +        <li><a href="#!">Fourth</a></li>
                         </ul>
                  -    </li>
                  -  </ul>
                  -  <ul class="right hide-on-med-and-down">
                  -    <li><a href="#!">First Sidebar Link</a></li>
                  -    <li><a href="#!">Second Sidebar Link</a></li>
                  -    <li><a class="dropdown-button" href="#!" data-activates="dropdown1">Dropdown<i class="mdi-navigation-arrow-drop-down right"></i></a></li>
                  -    <ul id='dropdown1' class='dropdown-content'>
                  -      <li><a href="#!">First</a></li>
                  -      <li><a href="#!">Second</a></li>
                  -      <li><a href="#!">Third</a></li>
                  -      <li><a href="#!">Fourth</a></li>
                       </ul>
                  -  </ul>
                  -  <a href="#" data-activates="slide-out" class="button-collapse"><i class="mdi-navigation-menu"></i></a>
                  -        
                  + <a href="#" data-activates="slide-out" class="button-collapse"><i class="material-icons">menu</i></a> +

                  -

                  Fullscreen HTML Structure

                  -

                  If you want the menu to be accessible on all screensizes you just have to add a simple helper class show-on-large to the .button-collapse.

                  +

                  Fullscreen HTML Structure

                  +

                  If you want the menu to be accessible on all screensizes you just have to add a simple helper class show-on-large to the .button-collapse.

                  -
                  
                  -  <ul id="slide-out" class="side-nav">
                  -    <li><a href="#!">First Sidebar Link</a></li>
                  -    <li><a href="#!">Second Sidebar Link</a></li>
                  -  </ul>
                  -  <a href="#" data-activates="slide-out" class="button-collapse show-on-large"><i class="mdi-navigation-menu"></i></a>
                  -        
                  - -

                  Fixed HTML Structure

                  -

                  Add the class fixed to have the sideNav be fixed and open on large screens and hides to the regular functionality on smaller screens. Our sideNav on the left is an example of this.

                  -
                  
                  -  <ul id="slide-out" class="side-nav fixed">
                  -    <li><a href="#!">First Sidebar Link</a></li>
                  -    <li><a href="#!">Second Sidebar Link</a></li>
                  -  </ul>
                  -  <a href="#" data-activates="slide-out" class="button-collapse"><i class="mdi-navigation-menu"></i></a>
                  -        
                  -

                  If you are planning on using this you will have to offset your content by the width of the side menu. Place the padding on where the offset content will be, which in our case is in header, main and footer.

                  -
                  
                  -  header, main, footer {
                  -    padding-left: 240px;
                  -  }
                  -
                  -  @media only screen and (max-width : 992px) {
                  +          
                  
                  +    <ul id="slide-out" class="side-nav">
                  +      <li><a href="#!">First Sidebar Link</a></li>
                  +      <li><a href="#!">Second Sidebar Link</a></li>
                  +    </ul>
                  +    <a href="#" data-activates="slide-out" class="button-collapse show-on-large"><i class="material-icons">menu</i></a>
                  +          

                  + +

                  Fixed HTML Structure

                  +

                  Add the class fixed to have the sideNav be fixed and open on large screens and hides to the regular functionality on smaller screens. Our sideNav on the left is an example of this.

                  +
                  
                  +    <ul id="slide-out" class="side-nav fixed">
                  +      <li><a href="#!">First Sidebar Link</a></li>
                  +      <li><a href="#!">Second Sidebar Link</a></li>
                  +    </ul>
                  +    <a href="#" data-activates="slide-out" class="button-collapse"><i class="material-icons">menu</i></a>
                  +          
                  +

                  If you are planning on using this you will have to offset your content by the width of the side menu. Place the padding on where the offset content will be, which in our case is in header, main and footer.

                  +
                  
                       header, main, footer {
                  -      padding-left: 0;
                  +      padding-left: 300px;
                       }
                  -  }
                  -        
                  -
                  -
                  - - - + @media only screen and (max-width : 992px) { + header, main, footer { + padding-left: 0; + } + } + + +
                  @@ -146,7 +172,6 @@

                  Fixed HTML Structure

                  - diff --git a/jade/page-contents/support_us_content.html b/jade/page-contents/support_us_content.html new file mode 100644 index 0000000000..1f1646da81 --- /dev/null +++ b/jade/page-contents/support_us_content.html @@ -0,0 +1,90 @@ +
                  +
                  + +
                  + + + +
                  +

                  Patreon

                  +

                  Back us on patreon and get access to reward tiers including things like having your name on this page, access to early versions of future features, and even advertising space on our website.

                  + + Become a Patron +
                  +
                  + +
                  Patrons
                  +

                  Thanks to all our backers!

                  +
                    +
                  • Ernest C
                  • +
                  • Ronan MINGON
                  • +
                  • TypeStack
                  • +
                  • Gertjan Ekkel
                  • +
                  • Ali Jaffar
                  • +
                  • Ivan Braun
                  • +
                  • Jamesy
                  • +
                  • Stevijn de Jong
                  • +
                  • Simon Hutton
                  • +
                  • Jonathan Crossland
                  • +
                  • daminik00
                  • +
                  • Jacob Quant
                  • +
                  • Andrey Bichkevsky
                  • +
                  • David Nunn
                  • +
                  • Mike Pengelly
                  • +
                  • Leland Elie
                  • +
                  • Andrew Leung
                  • +
                  • Luke Welton
                  • +
                  • XSAMA
                  • +
                  • Scott Hoch
                  • +
                  • Kgothatso Ngako
                  • +
                  • Stefan Stahl
                  • +
                  • Nikola Škarica
                  • +
                  • Beaucamps Hugo
                  • +
                  • Coded Creations
                  • +
                  • Cesar Oniel Azpilcueta Najera
                  • +
                  • Francois Hill
                  • +
                  • JSek
                  • +
                  • Equivalent
                  • +
                  • Egee
                  • +
                  • Tasuku Oikawa
                  • +
                  • Iñigo
                  • +
                  +
                  + +
                  + +
                  +
                  +
                  + + +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + diff --git a/jade/page-contents/table_content.html b/jade/page-contents/table_content.html index 3d3827330a..4e7f64e512 100644 --- a/jade/page-contents/table_content.html +++ b/jade/page-contents/table_content.html @@ -13,9 +13,9 @@

                  Borderless Table

                  - - - + + + @@ -49,9 +49,9 @@

                  Borderless Table

                  <table> <thead> <tr> - <th data-field="id">Name</th> - <th data-field="name">Item Name</th> - <th data-field="price">Item Price</th> + <th>Name</th> + <th>Item Name</th> + <th>Item Price</th> </tr> </thead> @@ -82,13 +82,13 @@

                  Borderless Table

                  Bordered Table

                  -

                  Add class="bordered" to the table tag for a bordered table

                  +

                  Add class="bordered" to the table tag for a bordered table.

                  NameItem NameItem PriceNameItem NameItem Price
                  - - - + + + @@ -126,9 +126,9 @@

                  Striped Table

                  NameItem NameItem PriceNameItem NameItem Price
                  - - - + + + @@ -162,13 +162,13 @@

                  Striped Table

                  Highlight Table

                  -

                  Add class="highlight" to the table tag for a highlight table

                  +

                  Add class="highlight" to the table tag for a highlight table.

                  NameItem NameItem PriceNameItem NameItem Price
                  - - - + + + @@ -206,9 +206,9 @@

                  Centered Table

                  NameItem NameItem PriceNameItem NameItem Price
                  - - - + + + @@ -247,9 +247,9 @@

                  Responsive Table

                  NameItem NameItem PriceNameItem NameItem Price
                  - - - + + + @@ -294,7 +294,7 @@

                  Responsive Table

                • Borderless
                • Bordered
                • Striped
                • -
                • highlight
                • +
                • Highlight
                • Centered
                • Responsive
                • @@ -304,4 +304,3 @@

                  Responsive Table

                  - diff --git a/jade/page-contents/tabs_content.html b/jade/page-contents/tabs_content.html index ced4c2eb16..d705d0d543 100644 --- a/jade/page-contents/tabs_content.html +++ b/jade/page-contents/tabs_content.html @@ -5,19 +5,62 @@

                  Introduction

                  -

                  The tabs structure consists of an unordered list of tabs that have hashes corresponding to tab ids. Then when you click on each tab, only the container with the corresponding tab id will become visible. You can add the class .disabled to make a tab inaccessible.

                  +

                  The tabs structure consists of an unordered list of tabs that have hashes corresponding to tab ids. Then when you click on each tab, only the container with the corresponding tab id will become visible. You can add the class .disabled to make a tab inaccessible.

                  +
                  +
                  Variable Width TabsDefault
                  +

                  Test 1

                  +

                  Test 2

                  +

                  Test 3

                  +

                  Test 4

                  + +
                  +
                  Fixed Width TabsAdd the .tabs-fixed-width class
                  +

                  Test 1

                  Test 2

                  Test 3

                  Test 4

                  +

                  Test 5

                  +
                  +
                  Scrollable Tabs Tabs automatically become scrollable
                  + +

                  Test 5

                  +

                  Test 6

                  +

                  Test 7

                  +

                  Test 8

                  +

                  Test 9

                  +

                  Test 10

                  +

                  Test 11

                  +

                  Test 12

                  +

                  Test 13

                  +

                  Test 14

                  +

                  Test 15

                  @@ -41,8 +84,6 @@

                  Tabs HTML Structure

                  - -

                  jQuery Plugin Initialization

                  Tabs are initialized automatically, but if you add tabs dynamically you will have to initialize them like this.

                  @@ -64,6 +105,33 @@

                  jQuery Plugin Methods

                  +
                  +

                  jQuery Plugin Options

                  +
                  NameItem NameItem PriceNameItem NameItem Price
                  + + + + + + + + + + + + + + + + + + + + + +
                  Option NameDescription
                  onShowExecute a callback function when the tab is changed.
                  The callback provides a parameter which refers to the current tab being shown.
                  swipeableSet to true to enable swipeable tabs. This also uses the responsiveThreshold option. Default: false
                  responsiveThresholdThe maximum width of the screen, in pixels, where the swipeable functionality initializes. Default: Infinity
                  + +

                  Preselecting a tab

                  @@ -73,6 +141,46 @@

                  Preselecting a tab

                  + +
                  +

                  Linking to an External Page

                  +

                  By default, Materialize tabs will ignore their default anchor behaviour. To force a tab to behave as a regular hyperlink, just specify the target property of that link! A list of target values may be found here.

                  +
                  
                  +  <li class="tab col s2">
                  +    <a target="_blank" href="https://github.com/Dogfalo/materialize">External link in new window</a>
                  +  </li>
                  +  <li class="tab col s2">
                  +    <a target="_self" href="https://github.com/Dogfalo/materialize">External link in same window</a>
                  +  </li>
                  +        
                  +
                  + + +
                  +

                  Swipeable Tabs

                  +

                  By setting the swipeable option to true, you can enable tabs where you can swipe on touch enabled devices to switch tabs. Make sure you keep the tab content divs in the same wrapping container. You can also set the responsiveThreshold option to a screen width in pixels where the swipeable functionality will activate.

                  +

                  Note: This is also touch compatible! Try swiping with your finger to scroll through the carousel.

                  + +
                  Test 1
                  +
                  Test 2
                  +
                  Test 3
                  + +
                  
                  +  <ul id="tabs-swipe-demo" class="tabs">
                  +    <li class="tab col s3"><a href="#test-swipe-1">Test 1</a></li>
                  +    <li class="tab col s3"><a class="active" href="#test-swipe-2">Test 2</a></li>
                  +    <li class="tab col s3"><a href="#test-swipe-3">Test 3</a></li>
                  +  </ul>
                  +  <div id="test-swipe-1" class="col s12 blue">Test 1</div>
                  +  <div id="test-swipe-2" class="col s12 red">Test 2</div>
                  +  <div id="test-swipe-3" class="col s12 green">Test 3</div>
                  +        
                  +
                  + @@ -88,7 +196,10 @@

                  Preselecting a tab

                • Structure
                • Intialization
                • Methods
                • +
                • Options
                • Preselecting
                • +
                • External Links
                • +
                • Swipeable Tabs
                • @@ -96,4 +207,3 @@

                  Preselecting a tab

                  - diff --git a/jade/page-contents/themes_content.html b/jade/page-contents/themes_content.html new file mode 100644 index 0000000000..961fbc0072 --- /dev/null +++ b/jade/page-contents/themes_content.html @@ -0,0 +1,443 @@ +
                  +
                  + +
                  +

                  Gallery Shopify Theme

                  +

                  Make your products pop with this Shopify Theme and its Google Play Store inspired content transition. Have a more seamless store experience with this powerful ecommerce platform. This theme is in active development and will be maintained.

                  +

                  Note: This is a theme made for the Shopify Ecommerce Platform

                  + +
                  + + + DEMO +
                  +
                  + +
                  + +
                  + +
                  +
                  +

                  Startup

                  +

                  Startup is a perfect theme for showcasing your new app, company or project. With the help of GSAP and ScrollMagic, create unique scrolling experiences that will keep users engaged.

                  +

                  Note: This is a static HTML template

                  +
                  + + DEMO +
                  +
                  + +
                  + +
                  + +
                  +
                  +

                  Gallery

                  +

                  This theme is perfect for Portfolio, Blogs, and Stores with its Google Play Store inspired content transition. This theme is in active development and will have more features and styles added to it in the future.

                  +

                  Note: This is a static HTML template

                  +
                  + + DEMO +
                  +
                  + +
                  + +
                  +
                  + +
                  +
                  +

                  All themes come with active support. Send your questions and concerns to MaterializeThemes

                  +

                  All themes are under the Personal Use License meaning you can use and modify these themes for personal and client projects. You cannot redistribute or resell these themes in any way.

                  +
                  +
                  \ No newline at end of file diff --git a/jade/page-contents/transitions_content.html b/jade/page-contents/transitions_content.html index 38505b7aa5..bfd0047011 100644 --- a/jade/page-contents/transitions_content.html +++ b/jade/page-contents/transitions_content.html @@ -6,9 +6,26 @@

                  We've made some custom animation functions that will transition your content. It's recommended to use this with our ScrollFire Plugin to make your content transition in as you scroll.

                  -

                  showStaggeredList

                  Use this to create a staggered reveal effect for any UL Tag with list items. Just make sure the list items in the UL are opacity: 0; to ensure the animation works correctly.

                  + + + + + + + + + + + + + + + +
                  Option NameDescription
                  selectorOrElThe selector or element that the transition targets.
                  +
                  + Click Me
                  
                     <a href="#!" class="btn" onclick="Materialize.showStaggeredList('#staggered-test')">Click Me</a>
                  @@ -40,6 +57,24 @@ 

                  List Item

                  fadeInImage

                  Use this to fade in images. It also animates grayscale and brightness to give it a unique effect.

                  + + + + + + + + + + + + + + + +
                  Option NameDescription
                  selectorOrElThe selector or element that the transition targets.
                  +
                  + Click Me
                  
                     <a href="#!" class="btn" onclick="Materialize.fadeInImage('#image-test')">Click Me</a>
                  diff --git a/jade/page-contents/typography_content.html b/jade/page-contents/typography_content.html
                  index b351b384ba..e03542a25b 100644
                  --- a/jade/page-contents/typography_content.html
                  +++ b/jade/page-contents/typography_content.html
                  @@ -10,8 +10,8 @@ 

                  Roboto 2.0

                  The standard font Material Design uses is Roboto. We have included the font files with our framework.

                  -

                  We bundle our framework with the latest iteration of Roboto Google has released. It comes with 5 different font weights you can use: 200, 300, 400, 500, 600.

                  Here is an image from Google's Roboto Specimen document displaying the different font weights.

                  - +

                  We bundle our framework with the latest iteration of Roboto Google has released. It comes with 5 different font weights you can use: 100, 300, 400, 500, 600.

                  Here is an image from Google's Roboto Specimen document displaying the different font weights.

                  +

                  Removing Roboto

                  @@ -64,7 +64,7 @@

                  Flow Text


                  -

                  To use flow-text on a body of text, simply just add the class flow-text to a tag, see the code blow.

                  +

                  To use flow-text on a body of text, simply just add the class flow-text to a tag, see the code below.

                  
                       <p class="flow-text">I am Flow Text</p>
                  @@ -92,4 +92,4 @@ 

                  Flow Text

                  - \ No newline at end of file + diff --git a/jade/page-contents/waves_content.html b/jade/page-contents/waves_content.html index e6910dd4cf..8fa1d3f468 100644 --- a/jade/page-contents/waves_content.html +++ b/jade/page-contents/waves_content.html @@ -6,7 +6,7 @@

                  Introduction

                  -

                  Waves is an external library that we've included in Materialize to allow us to create the ink effect outlined in Material Design

                  +

                  Waves is an external library that we've included in Materialize to allow us to create the ink effect outlined in Material Design.

                  Wave
                  @@ -14,7 +14,7 @@

                  Introduction

                  Applying Waves

                  -

                  To put the waves effect on buttons, you just have to put the class waves-effect on to the buttons. If you want the waves effect to be white instead, add both waves-effect waves-light as classes.

                  +

                  The waves effect can be applied to any element. To put the waves effect on buttons, you just have to put the class waves-effect on to the buttons. If you want the waves effect to be white instead, add both waves-effect waves-light as classes.

                  
                     <a class="waves-effect waves-light btn-large" href="#">Wave</a>
                         
                  @@ -25,7 +25,7 @@

                  Applying Waves

                  Customization

                  -

                  There are several ways to customize waves, you can either use pre-created classes, or you can define your own color by creating a new class

                  +

                  There are several ways to customize waves, you can either use pre-created classes, or you can define your own color by creating a new class.

                  Available Colors
                  @@ -47,7 +47,7 @@
                  Available Colors
                  Custom Colors
                  -

                  If the color you want is not already available, you can easily make your own waves color by creating a custom CSS class. Take a look at the example below where we add a waves-brown effect

                  +

                  If the color you want is not already available, you can easily make your own waves color by creating a custom CSS class. Take a look at the example below where we add a waves brown effect.

                  
                       /*
                  @@ -67,7 +67,7 @@ 
                  Custom Colors

                  Circle

                  -

                  If you want waves to form to a non rectangular shape, there is an option for circular waves. Just add the waves-circle in addition to waves-effect

                  +

                  If you want waves to form to a non rectangular shape, there is an option for circular waves. Just add the waves-circle in addition to waves-effect.

                  HTML Markup
                  diff --git a/jade/parallax-demo.jade b/jade/parallax-demo.jade index 98b43cd1e8..1303858b89 100644 --- a/jade/parallax-demo.jade +++ b/jade/parallax-demo.jade @@ -1,4 +1,5 @@ - var page = "Parallax" +- var isDemo = true doctype html html(lang="en") diff --git a/jade/parallax/parallax_content.html b/jade/parallax/parallax_content.html index 6f0cec1a39..0e3b972b6e 100644 --- a/jade/parallax/parallax_content.html +++ b/jade/parallax/parallax_content.html @@ -4,14 +4,14 @@
                  diff --git a/jade/pulse.jade b/jade/pulse.jade new file mode 100644 index 0000000000..9e17b6f88c --- /dev/null +++ b/jade/pulse.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Pulse" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/pulse_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/jade/pushpin-demo.jade b/jade/pushpin-demo.jade new file mode 100644 index 0000000000..0cfefed7e8 --- /dev/null +++ b/jade/pushpin-demo.jade @@ -0,0 +1,21 @@ +- var page = "Pushpin Demo" +- var isDemo = true + +doctype html +html(lang="en") + head + include _head.jade + style. + html, body, .block { + height: 100%; + } + nav ul li a:hover, nav ul li a.active { + background-color: rgba(0,0,0,.1); + } + footer { + padding-left: 0; + } + body + include page-contents/pushpin_demo_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/jade/scrollFire.jade b/jade/scrollFire.jade index 5f31e91383..11d76c94ab 100644 --- a/jade/scrollFire.jade +++ b/jade/scrollFire.jade @@ -14,9 +14,21 @@ html(lang="en") //- Scrollfire Script script(type='text/javascript'). var options = [ - {selector: '#staggered-test', offset: 50, callback: 'Materialize.toast("This is our ScrollFire Demo!", 1500); $("#call-1").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500}); ' }, - {selector: '#staggered-test', offset: 205, callback: 'Materialize.toast("Please continue scrolling!", 1500); $("#call-2").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500});' }, - {selector: '#staggered-test', offset: 500, callback: 'Materialize.showStaggeredList("#staggered-test"); $("#call-3").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500});' }, - {selector: '#image-test', offset: 500, callback: 'Materialize.fadeInImage("#image-test"); $("#call-4").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500});' } + {selector: '#staggered-test', offset: 50, callback: function(el) { + Materialize.toast("This is our ScrollFire Demo!", 1500); + $("#call-1").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500}); + } }, + {selector: '#staggered-test', offset: 205, callback: function(el) { + Materialize.toast("Please continue scrolling!", 1500); + $("#call-2").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500}); + } }, + {selector: '#staggered-test', offset: 500, callback: function(el) { + Materialize.showStaggeredList($(el)); + $("#call-3").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500}); + } }, + {selector: '#image-test', offset: 500, callback: function(el) { + Materialize.fadeInImage($(el)); + $("#call-4").velocity({ backgroundColor: "#333", color: "#ef5350" }, {duration: 500}); + } } ]; Materialize.scrollFire(options); diff --git a/jade/search.js b/jade/search.js new file mode 100644 index 0000000000..c50f775a67 --- /dev/null +++ b/jade/search.js @@ -0,0 +1,360 @@ +(function ($) { + $(document).ready(function() { + window.index = lunr(function () { + this.field('title', {boost: 10}); + this.field('body'); + this.ref('href'); + }); + window.index.pipeline.reset(); + + window.index.add({ + href: 'http://materializecss.com/about.html', + title: 'About', + body: 'Created and designed by Google, Material Design is a design language that combines the classic principles of successful design along with innovation and technology. Google"s goal is to develop a system of design that allows for a unified user experience across all their products on any platform.' + }); + + window.index.add({ + href: 'http://materializecss.com/badges.html', + title: 'Badges', + body: 'Badges can notify you that there are new or unread messages or notifications.' + }); + + window.index.add({ + href: 'http://materializecss.com/buttons.html', + title: 'Buttons', + body: 'There are 3 main button types described in material design. The raised button is a standard button that signify actions and seek to give depth to a mostly flat page. The floating circular action button is meant for very important functions. Flat buttons are usually used within elements that already have depth like cards or modals.' + }); + + window.index.add({ + href: 'http://materializecss.com/breadcrumbs.html', + title: 'Breadcrumbs', + body: 'There are 3 main button types described in material design. The raised button is a standard button that signify actions and seek to give depth to a mostly flat page. The floating circular action button is meant for very important functions. Flat buttons are usually used within elements that already have depth like cards or modals.' + }); + + window.index.add({ + href: 'http://materializecss.com/cards.html', + title: 'Cards', + body: 'Breadcrumbs are a good way to display your current location. This is usually used when you have multiple layers of content.' + }); + + window.index.add({ + href: 'http://materializecss.com/carousel.html', + title: 'Carousel', + body: 'Our Carousel is a robust and versatile component that can be an image slider, to an item carousel, to an onboarding experience.' + }); + + window.index.add({ + href: 'http://materializecss.com/chips.html', + title: 'Chips', + body: 'Chips can be used to represent small blocks of information. They are most commonly used either for contacts or for tags.' + }); + + window.index.add({ + href: 'http://materializecss.com/collapsible.html', + title: 'Collapsible', + body: 'Collapsibles are accordion elements that expand when clicked on. They allow you to hide content that is not immediately relevant to the user.' + }); + + window.index.add({ + href: 'http://materializecss.com/collections.html', + title: 'Collections', + body: 'Collections allow you to group list objects together.' + }); + + window.index.add({ + href: 'http://materializecss.com/color.html', + title: 'Color', + body: 'Here is a color palette based on the material design base colors. Each of these colors is defined with a base color class and an optional lighten or darken class.' + }); + + window.index.add({ + href: 'http://materializecss.com/dialogs.html', + title: 'dialogs tooltips toasts', + body: 'Dialogs are content that are not original visible on a page but show up with extra information if needed. The transitions should make the appearance of the dialog make sense and not jarring to the user.' + }); + + window.index.add({ + href: 'http://materializecss.com/dropdown.html', + title: 'dropdown', + body: 'Add a dropdown list to any button.' + }); + + window.index.add({ + href: 'http://materializecss.com/feature-discovery.html', + title: 'feature discovery', + body: 'Provide value and encourage return visits by introducing users to new features and functionality at contextually relevant moments.' + }); + + window.index.add({ + href: 'http://materializecss.com/footer.html', + title: 'footer', + body: 'Footers are a great way to organize a lot of site navigation and information at the end of a page. This is where the user will look once hes finished scrolling through the current page or is looking for additional information about your website.' + }); + + window.index.add({ + href: 'http://materializecss.com/forms.html', + title: 'forms select radio checkbox switch range textarea', + body: 'Forms are the standard way to receive user inputted data. The transitions and smoothness of these elements are very important because of the inherent user interaction associated with forms.' + }); + + window.index.add({ + href: 'http://materializecss.com/fullscreen-slider-demo.html', + title: 'Fullscreen slider demo', + body: 'Fullscreen slider demo' + }); + + window.index.add({ + href: 'http://materializecss.com/getting-started.html', + title: 'Getting Started', + body: 'Learn how to easily start using Materialize in your website.' + }); + + window.index.add({ + href: 'http://materializecss.com/grid.html', + title: 'Grid', + body: 'We are using a standard 12 column fluid responsive grid system. The grid helps you layout your page in an ordered, easy fashion.' + }); + + window.index.add({ + href: 'http://materializecss.com/helpers.html', + title: 'Helpers', + body: 'helper classes' + }); + + window.index.add({ + href: 'http://materializecss.com/icons.html', + title: 'icons', + body: 'We have included 740 Material Design Icons courtesy of Google' + }); + + window.index.add({ + href: 'http://materializecss.com/media-css.html', + title: 'Media CSS', + body: 'Media CSS classes' + }); + + window.index.add({ + href: 'http://materializecss.com/media.html', + title: 'Media JavaScript slider materialbox', + body: 'Media components include things that have to do with large media objects like Images, Video, Audio, etc.' + }); + + window.index.add({ + href: 'http://materializecss.com/mobile.html', + title: 'Mobile', + body: 'Mobile only interactive components.' + }); + + window.index.add({ + href: 'http://materializecss.com/modals.html', + title: 'modals', + body: 'Use a modal for dialog boxes, confirmation messages, or other content that can be called up.' + }); + + window.index.add({ + href: 'http://materializecss.com/navbar.html', + title: 'navbar', + body: 'The navbar is fully contained by an HTML5 Nav tag. Inside a recommended container div, there are 2 main parts of the navbar. A logo or brand link, and the navigations links. You can align these links to the left or right.' + }); + + window.index.add({ + href: 'http://materializecss.com/pagination.html', + title: 'pagination', + body: 'Add pagination links to help split up your long content into shorter, easier to understand blocks.' + }); + + window.index.add({ + href: 'http://materializecss.com/parallax.html', + title: 'parallax', + body: 'Parallax is an effect where the background content or image in this case, is moved at a different speed than the foreground content while scrolling.' + }); + + window.index.add({ + href: 'http://materializecss.com/preloader.html', + title: 'preloader', + body: 'If you have content that will take a long time to load, you should give the user feedback. For this reason we provide a number activity + progress indicators.' + }); + + window.index.add({ + href: 'http://materializecss.com/pulse.html', + title: 'pulse', + body: 'Draw attention to your buttons with this subtle but captivating effect.' + }); + + window.index.add({ + href: 'http://materializecss.com/pushpin.html', + title: 'Pushpin', + body: 'Pushpin is our fixed positioning plugin. You can check out our live examples: the fixed Table of Contents on the right.' + }); + + window.index.add({ + href: 'http://materializecss.com/sass.html', + title: 'Sass', + body: 'When using Sass, you can change the color scheme of your site extremely quickly.' + }); + + window.index.add({ + href: 'http://materializecss.com/scrollfire.html', + title: 'scrollFire', + body: 'ScrollFire is a jQuery Plugin that executes callback functions depending on how far into the page you"ve scrolled.' + }); + + window.index.add({ + href: 'http://materializecss.com/scrollspy.html', + title: 'scrollspy', + body: 'Scrollspy is a jQuery plugin that tracks certain elements and which element the users screen is currently centered on.' + }); + + window.index.add({ + href: 'http://materializecss.com/shadow.html', + title: 'shadow', + body: 'In material design, everything should have a certain z-depth that determines how far raised or close to the page the element is.' + }); + + window.index.add({ + href: 'http://materializecss.com/showcase.html', + title: 'showcase', + body: 'Here is our showcase of websites that use materialize.' + }); + + window.index.add({ + href: 'http://materializecss.com/side-nav.html', + title: 'sideNav side Nav', + body: 'This is a slide out menu. You can add a dropdown to your sidebar by using our collapsible component.' + }); + + window.index.add({ + href: 'http://materializecss.com/table.html', + title: 'table', + body: 'Tables are a nice way to organize a lot of data. We provide a few utility classes to help you style your table as easily as possible.' + }); + + window.index.add({ + href: 'http://materializecss.com/tabs.html', + title: 'tabs', + body: 'The tabs structure consists of an unordered list of tabs that have hashes corresponding to tab ids. Then when you click on each tab, only the container with the corresponding tab id will become visible.' + }); + + window.index.add({ + href: 'http://materializecss.com/transitions.html', + title: 'transitions animation', + body: 'Weve made some custom animation functions that will transition your content.' + }); + + window.index.add({ + href: 'http://materializecss.com/typography.html', + title: 'Typography', + body: 'font, headers, blockquotes, flow text.' + }); + + window.index.add({ + href: 'http://materializecss.com/waves.html', + title: 'waves', + body: 'Waves is an external library that weve included in Materialize to allow us to create the ink effect outlined in Material Design' + }); + + // icon click + $('ul#nav-mobile li.search .search-wrapper i.material-icons').click(function() { + if ($('.search-results .focused').length) { + $('.search-results .focused').first()[0].click(); + } else if ($('.search-results').children().length) { + $('.search-results').children().first()[0].click(); + } + }); + + var renderResults = function(results) { + var resultsContainer = $('.search-results'); + resultsContainer.empty(); + Array.prototype.forEach.call(results, function(result) { + var resultDiv = $('' + result[0] + ''); + resultsContainer.append(resultDiv); + }); + }; + + var debounce = function (fn) { + var timeout; + return function () { + var args = Array.prototype.slice.call(arguments), + ctx = this; + + clearTimeout(timeout); + timeout = setTimeout(function () { + fn.apply(ctx, args); + }, 100); + }; + }; + + $('input#search').focus(function() { $(this).parent().addClass('focused'); }); + $('input#search').blur(function() { + if (!$(this).val()) { + $(this).parent().removeClass('focused'); + } + }); + + $('input#search').on('keyup', debounce(function (e) { + if ($(this).val() < 2) { + renderResults([]); + return; + } + + if (e.which === 38 || e.which === 40 || e.keyCode === 13) return; + + var query = $(this).val(); + var results = window.index.search(query).slice(0, 6).map(function (result) { + var href = result.ref.split('http://materializecss.com/')[1]; + return [href.charAt(0).toUpperCase() + href.slice(1), result.ref]; + }); + renderResults(results); + })); + + + $('input#search').on('keydown', debounce(function (e) { + // Escape. + if (e.keyCode === 27) { + $(this).val(''); + $(this).blur(); + renderResults([]); + return; + } else if (e.keyCode === 13) { + // enter + if ($('.search-results .focused').length) { + $('.search-results .focused').first()[0].click(); + } else if ($('.search-results').children().length) { + $('.search-results').children().first()[0].click(); + } + return; + } + + // Arrow keys. + var focused; + switch(e.which) { + case 38: // up + if ($('.search-results .focused').length) { + focused = $('.search-results .focused'); + focused.removeClass('focused'); + focused.prev().addClass('focused'); + } + break; + + case 40: // down + if (!$('.search-results .focused').length) { + focused = $('.search-results').children().first(); + focused.addClass('focused'); + } else { + focused = $('.search-results .focused'); + if (focused.next().length) { + focused.removeClass('focused'); + focused.next().addClass('focused'); + } + } + break; + + default: return; // exit this handler for other keys + } + e.preventDefault(); + })); + + + + }); +}( jQuery )); \ No newline at end of file diff --git a/jade/showcase/showcase_content.html b/jade/showcase/showcase_content.html index c46e2b2a44..997a54caf5 100644 --- a/jade/showcase/showcase_content.html +++ b/jade/showcase/showcase_content.html @@ -1,6 +1,6 @@
                  -
                  - +
                  eadBox
                  -
                  Webonise
                  -
                  -
                  - -
                  Kenya Apps
                  -
                  - -
                  - - - -
                  -
                  - -
                  Mako
                  -
                  -
                  - - -
                  - - - - diff --git a/jade/support-us.jade b/jade/support-us.jade new file mode 100644 index 0000000000..57d92372e1 --- /dev/null +++ b/jade/support-us.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Support Us" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/support_us_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/jade/themes.jade b/jade/themes.jade new file mode 100644 index 0000000000..8b12941d66 --- /dev/null +++ b/jade/themes.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Themes" + +doctype html +html(lang="en") + head + include _head.jade + body.themes + include _navbar.jade + main + include page-contents/themes_content.html + include _footer.html + include _scripts.html diff --git a/js/.npmignore b/js/.npmignore new file mode 100644 index 0000000000..023a3885a0 --- /dev/null +++ b/js/.npmignore @@ -0,0 +1,5 @@ +# Ignore documentation related files + +jquery.timeago.min.js +init.js +prism.js diff --git a/js/animation.js b/js/animation.js index d194de79d4..f9e6cf31e9 100644 --- a/js/animation.js +++ b/js/animation.js @@ -1,9 +1,8 @@ - // Custom Easing - jQuery.extend( jQuery.easing, - { - easeInOutMaterial: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return c/4*((t-=2)*t*t + 2) + b; - } - }); - +// Custom Easing +jQuery.extend( jQuery.easing, +{ + easeInOutMaterial: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return c/4*((t-=2)*t*t + 2) + b; + } +}); \ No newline at end of file diff --git a/js/buttons.js b/js/buttons.js index 2657bdffc2..b15a04c89e 100644 --- a/js/buttons.js +++ b/js/buttons.js @@ -4,42 +4,75 @@ // jQuery reverse $.fn.reverse = [].reverse; - $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn', function(e) { + // Hover behaviour: make sure this doesn't work on .click-to-toggle FABs! + $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle):not(.toolbar)', function(e) { var $this = $(this); openFABMenu($this); + }); + $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle):not(.toolbar)', function(e) { + var $this = $(this); + closeFABMenu($this); + }); + // Toggle-on-click behaviour. + $(document).on('click.fabClickToggle', '.fixed-action-btn.click-to-toggle > a', function(e) { + var $this = $(this); + var $menu = $this.parent(); + if ($menu.hasClass('active')) { + closeFABMenu($menu); + } else { + openFABMenu($menu); + } }); - $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn', function(e) { + // Toolbar transition behaviour. + $(document).on('click.fabToolbar', '.fixed-action-btn.toolbar > a', function(e) { var $this = $(this); - closeFABMenu($this); + var $menu = $this.parent(); + FABtoToolbar($menu); }); }); $.fn.extend({ openFAB: function() { - var $this = $(this); - openFABMenu($this); + openFABMenu($(this)); }, closeFAB: function() { - closeFABMenu($this); + closeFABMenu($(this)); + }, + openToolbar: function() { + FABtoToolbar($(this)); + }, + closeToolbar: function() { + toolbarToFAB($(this)); } }); var openFABMenu = function (btn) { - $this = btn; + var $this = btn; if ($this.hasClass('active') === false) { + + // Get direction option + var horizontal = $this.hasClass('horizontal'); + var offsetY, offsetX; + + if (horizontal === true) { + offsetX = 40; + } else { + offsetY = 40; + } + $this.addClass('active'); $this.find('ul .btn-floating').velocity( - { scaleY: ".4", scaleX: ".4", translateY: "40px"}, + { scaleY: ".4", scaleX: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px'}, { duration: 0 }); var time = 0; - $this.find('ul .btn-floating').reverse().each(function () { + $this.find('ul .btn-floating').reverse().each( function () { $(this).velocity( - { opacity: "1", scaleX: "1", scaleY: "1", translateY: "0"}, + { opacity: "1", scaleX: "1", scaleY: "1", translateY: "0", translateX: '0'}, { duration: 80, delay: time }); time += 40; }); @@ -47,15 +80,188 @@ }; var closeFABMenu = function (btn) { - $this = btn; + var $this = btn; + // Get direction option + var horizontal = $this.hasClass('horizontal'); + var offsetY, offsetX; + + if (horizontal === true) { + offsetX = 40; + } else { + offsetY = 40; + } + $this.removeClass('active'); var time = 0; $this.find('ul .btn-floating').velocity("stop", true); $this.find('ul .btn-floating').velocity( - { opacity: "0", scaleX: ".4", scaleY: ".4", translateY: "40px"}, + { opacity: "0", scaleX: ".4", scaleY: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px'}, { duration: 80 } ); }; + /** + * Transform FAB into toolbar + * @param {Object} object jQuery object + */ + var FABtoToolbar = function(btn) { + if (btn.attr('data-open') === "true") { + return; + } + + var offsetX, offsetY, scaleFactor; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var btnRect = btn[0].getBoundingClientRect(); + var anchor = btn.find('> a').first(); + var menu = btn.find('> ul').first(); + var backdrop = $('
                  '); + var fabColor = anchor.css('background-color'); + anchor.append(backdrop); + + offsetX = btnRect.left - (windowWidth / 2) + (btnRect.width / 2); + offsetY = windowHeight - btnRect.bottom; + scaleFactor = windowWidth / backdrop.width(); + btn.attr('data-origin-bottom', btnRect.bottom); + btn.attr('data-origin-left', btnRect.left); + btn.attr('data-origin-width', btnRect.width); + + // Set initial state + btn.addClass('active'); + btn.attr('data-open', true); + btn.css({ + 'text-align': 'center', + width: '100%', + bottom: 0, + left: 0, + transform: 'translateX(' + offsetX + 'px)', + transition: 'none' + }); + anchor.css({ + transform: 'translateY(' + -offsetY + 'px)', + transition: 'none' + }); + backdrop.css({ + 'background-color': fabColor + }); + + + setTimeout(function() { + btn.css({ + transform: '', + transition: 'transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s' + }); + anchor.css({ + overflow: 'visible', + transform: '', + transition: 'transform .2s' + }); + + setTimeout(function() { + btn.css({ + overflow: 'hidden', + 'background-color': fabColor + }); + backdrop.css({ + transform: 'scale(' + scaleFactor + ')', + transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)' + }); + menu.find('> li > a').css({ + opacity: 1 + }); + + // Scroll to close. + $(window).on('scroll.fabToolbarClose', function() { + toolbarToFAB(btn); + $(window).off('scroll.fabToolbarClose'); + $(document).off('click.fabToolbarClose'); + }); + + $(document).on('click.fabToolbarClose', function(e) { + if (!$(e.target).closest(menu).length) { + toolbarToFAB(btn); + $(window).off('scroll.fabToolbarClose'); + $(document).off('click.fabToolbarClose'); + } + }); + }, 100); + }, 0); + }; + + /** + * Transform toolbar back into FAB + * @param {Object} object jQuery object + */ + var toolbarToFAB = function(btn) { + if (btn.attr('data-open') !== "true") { + return; + } + + var offsetX, offsetY, scaleFactor; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var btnWidth = btn.attr('data-origin-width'); + var btnBottom = btn.attr('data-origin-bottom'); + var btnLeft = btn.attr('data-origin-left'); + var anchor = btn.find('> .btn-floating').first(); + var menu = btn.find('> ul').first(); + var backdrop = btn.find('.fab-backdrop'); + var fabColor = anchor.css('background-color'); + + offsetX = btnLeft - (windowWidth / 2) + (btnWidth / 2); + offsetY = windowHeight - btnBottom; + scaleFactor = windowWidth / backdrop.width(); + + + // Hide backdrop + btn.removeClass('active'); + btn.attr('data-open', false); + btn.css({ + 'background-color': 'transparent', + transition: 'none' + }); + anchor.css({ + transition: 'none' + }); + backdrop.css({ + transform: 'scale(0)', + 'background-color': fabColor + }); + menu.find('> li > a').css({ + opacity: '' + }); + + setTimeout(function() { + backdrop.remove(); + + // Set initial state. + btn.css({ + 'text-align': '', + width: '', + bottom: '', + left: '', + overflow: '', + 'background-color': '', + transform: 'translate3d(' + -offsetX + 'px,0,0)' + }); + anchor.css({ + overflow: '', + transform: 'translate3d(0,' + offsetY + 'px,0)' + }); + + setTimeout(function() { + btn.css({ + transform: 'translate3d(0,0,0)', + transition: 'transform .2s' + }); + anchor.css({ + transform: 'translate3d(0,0,0)', + transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)' + }); + }, 20); + }, 200); + }; + + }( jQuery )); diff --git a/js/cards.js b/js/cards.js index c989eb62e2..5b8381849a 100644 --- a/js/cards.js +++ b/js/cards.js @@ -3,6 +3,13 @@ $(document).on('click.card', '.card', function (e) { if ($(this).find('> .card-reveal').length) { + var $card = $(e.target).closest('.card'); + if ($card.data('initialOverflow') === undefined) { + $card.data( + 'initialOverflow', + $card.css('overflow') === undefined ? '' : $card.css('overflow') + ); + } if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) { // Make Reveal animate down and display none $(this).find('.card-reveal').velocity( @@ -10,18 +17,20 @@ duration: 225, queue: false, easing: 'easeInOutQuad', - complete: function() { $(this).css({ display: 'none'}); } + complete: function() { + $(this).css({ display: 'none'}); + $card.css('overflow', $card.data('initialOverflow')); + } } ); } else if ($(e.target).is($('.card .activator')) || $(e.target).is($('.card .activator i')) ) { + $card.css('overflow', 'hidden'); $(this).find('.card-reveal').css({ display: 'block'}).velocity("stop", false).velocity({translateY: '-100%'}, {duration: 300, queue: false, easing: 'easeInOutQuad'}); } } - - }); }); -}( jQuery )); \ No newline at end of file +}( jQuery )); diff --git a/js/carousel.js b/js/carousel.js new file mode 100644 index 0000000000..259759f26c --- /dev/null +++ b/js/carousel.js @@ -0,0 +1,565 @@ +(function ($) { + + var methods = { + + init : function(options) { + var defaults = { + duration: 200, // ms + dist: -100, // zoom scale TODO: make this more intuitive as an option + shift: 0, // spacing for center image + padding: 0, // Padding between non center items + fullWidth: false, // Change to full width styles + indicators: false, // Toggle indicators + noWrap: false, // Don't wrap around and cycle through items. + onCycleTo: null // Callback for when a new slide is cycled to. + }; + options = $.extend(defaults, options); + var namespace = Materialize.objectSelectorString($(this)); + + return this.each(function(i) { + + var images, item_width, item_height, offset, center, pressed, dim, count, + reference, referenceY, amplitude, target, velocity, scrolling, + xform, frame, timestamp, ticker, dragged, vertical_dragged; + var $indicators = $('
                    '); + var scrollingTimeout = null; + var oneTimeCallback = null; + + + // Initialize + var view = $(this); + var hasMultipleSlides = view.find('.carousel-item').length > 1; + var showIndicators = (view.attr('data-indicators') || options.indicators) && hasMultipleSlides; + var noWrap = (view.attr('data-no-wrap') || options.noWrap) || !hasMultipleSlides; + var uniqueNamespace = view.attr('data-namespace') || namespace+i; + view.attr('data-namespace', uniqueNamespace); + + + // Options + var setCarouselHeight = function(imageOnly) { + var firstSlide = view.find('.carousel-item.active').length ? view.find('.carousel-item.active').first() : view.find('.carousel-item').first(); + var firstImage = firstSlide.find('img').first(); + if (firstImage.length) { + if (firstImage[0].complete) { + // If image won't trigger the load event + var imageHeight = firstImage.height(); + if (imageHeight > 0) { + view.css('height', firstImage.height()); + } else { + // If image still has no height, use the natural dimensions to calculate + var naturalWidth = firstImage[0].naturalWidth; + var naturalHeight = firstImage[0].naturalHeight; + var adjustedHeight = (view.width() / naturalWidth) * naturalHeight; + view.css('height', adjustedHeight); + } + } else { + // Get height when image is loaded normally + firstImage.on('load', function(){ + view.css('height', $(this).height()); + }); + } + } else if (!imageOnly) { + var slideHeight = firstSlide.height(); + view.css('height', slideHeight); + } + }; + + if (options.fullWidth) { + options.dist = 0; + setCarouselHeight(); + + // Offset fixed items when indicators. + if (showIndicators) { + view.find('.carousel-fixed-item').addClass('with-indicators'); + } + } + + + // Don't double initialize. + if (view.hasClass('initialized')) { + // Recalculate variables + $(window).trigger('resize'); + + // Redraw carousel. + view.trigger('carouselNext', [0.000001]); + return true; + } + + + view.addClass('initialized'); + pressed = false; + offset = target = 0; + images = []; + item_width = view.find('.carousel-item').first().innerWidth(); + item_height = view.find('.carousel-item').first().innerHeight(); + dim = item_width * 2 + options.padding; + + view.find('.carousel-item').each(function (i) { + images.push($(this)[0]); + if (showIndicators) { + var $indicator = $('
                  • '); + + // Add active to first by default. + if (i === 0) { + $indicator.addClass('active'); + } + + // Handle clicks on indicators. + $indicator.click(function (e) { + e.stopPropagation(); + + var index = $(this).index(); + cycleTo(index); + }); + $indicators.append($indicator); + } + }); + + if (showIndicators) { + view.append($indicators); + } + count = images.length; + + + function setupEvents() { + if (typeof window.ontouchstart !== 'undefined') { + view.on('touchstart.carousel', tap); + view.on('touchmove.carousel', drag); + view.on('touchend.carousel', release); + } + view.on('mousedown.carousel', tap); + view.on('mousemove.carousel', drag); + view.on('mouseup.carousel', release); + view.on('mouseleave.carousel', release); + view.on('click.carousel', click); + } + + function xpos(e) { + // touch event + if (e.targetTouches && (e.targetTouches.length >= 1)) { + return e.targetTouches[0].clientX; + } + + // mouse event + return e.clientX; + } + + function ypos(e) { + // touch event + if (e.targetTouches && (e.targetTouches.length >= 1)) { + return e.targetTouches[0].clientY; + } + + // mouse event + return e.clientY; + } + + function wrap(x) { + return (x >= count) ? (x % count) : (x < 0) ? wrap(count + (x % count)) : x; + } + + function scroll(x) { + // Track scrolling state + scrolling = true; + if (!view.hasClass('scrolling')) { + view.addClass('scrolling'); + } + if (scrollingTimeout != null) { + window.clearTimeout(scrollingTimeout); + } + scrollingTimeout = window.setTimeout(function() { + scrolling = false; + view.removeClass('scrolling'); + }, options.duration); + + // Start actual scroll + var i, half, delta, dir, tween, el, alignment, xTranslation; + var lastCenter = center; + + offset = (typeof x === 'number') ? x : offset; + center = Math.floor((offset + dim / 2) / dim); + delta = offset - center * dim; + dir = (delta < 0) ? 1 : -1; + tween = -dir * delta * 2 / dim; + half = count >> 1; + + if (!options.fullWidth) { + alignment = 'translateX(' + (view[0].clientWidth - item_width) / 2 + 'px) '; + alignment += 'translateY(' + (view[0].clientHeight - item_height) / 2 + 'px)'; + } else { + alignment = 'translateX(0)'; + } + + // Set indicator active + if (showIndicators) { + var diff = (center % count); + var activeIndicator = $indicators.find('.indicator-item.active'); + if (activeIndicator.index() !== diff) { + activeIndicator.removeClass('active'); + $indicators.find('.indicator-item').eq(diff).addClass('active'); + } + } + + // center + // Don't show wrapped items. + if (!noWrap || (center >= 0 && center < count)) { + el = images[wrap(center)]; + + // Add active class to center item. + if (!$(el).hasClass('active')) { + view.find('.carousel-item').removeClass('active'); + $(el).addClass('active'); + } + el.style[xform] = alignment + + ' translateX(' + (-delta / 2) + 'px)' + + ' translateX(' + (dir * options.shift * tween * i) + 'px)' + + ' translateZ(' + (options.dist * tween) + 'px)'; + el.style.zIndex = 0; + if (options.fullWidth) { tweenedOpacity = 1; } + else { tweenedOpacity = 1 - 0.2 * tween; } + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } + + for (i = 1; i <= half; ++i) { + // right side + if (options.fullWidth) { + zTranslation = options.dist; + tweenedOpacity = (i === half && delta < 0) ? 1 - tween : 1; + } else { + zTranslation = options.dist * (i * 2 + tween * dir); + tweenedOpacity = 1 - 0.2 * (i * 2 + tween * dir); + } + // Don't show wrapped items. + if (!noWrap || center + i < count) { + el = images[wrap(center + i)]; + el.style[xform] = alignment + + ' translateX(' + (options.shift + (dim * i - delta) / 2) + 'px)' + + ' translateZ(' + zTranslation + 'px)'; + el.style.zIndex = -i; + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } + + + // left side + if (options.fullWidth) { + zTranslation = options.dist; + tweenedOpacity = (i === half && delta > 0) ? 1 - tween : 1; + } else { + zTranslation = options.dist * (i * 2 - tween * dir); + tweenedOpacity = 1 - 0.2 * (i * 2 - tween * dir); + } + // Don't show wrapped items. + if (!noWrap || center - i >= 0) { + el = images[wrap(center - i)]; + el.style[xform] = alignment + + ' translateX(' + (-options.shift + (-dim * i - delta) / 2) + 'px)' + + ' translateZ(' + zTranslation + 'px)'; + el.style.zIndex = -i; + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } + } + + // center + // Don't show wrapped items. + if (!noWrap || (center >= 0 && center < count)) { + el = images[wrap(center)]; + el.style[xform] = alignment + + ' translateX(' + (-delta / 2) + 'px)' + + ' translateX(' + (dir * options.shift * tween) + 'px)' + + ' translateZ(' + (options.dist * tween) + 'px)'; + el.style.zIndex = 0; + if (options.fullWidth) { tweenedOpacity = 1; } + else { tweenedOpacity = 1 - 0.2 * tween; } + el.style.opacity = tweenedOpacity; + el.style.display = 'block'; + } + + // onCycleTo callback + if (lastCenter !== center && + typeof(options.onCycleTo) === "function") { + var $curr_item = view.find('.carousel-item').eq(wrap(center)); + options.onCycleTo.call(this, $curr_item, dragged); + } + + // One time callback + if (typeof(oneTimeCallback) === "function") { + oneTimeCallback.call(this, $curr_item, dragged); + oneTimeCallback = null; + } + } + + function track() { + var now, elapsed, delta, v; + + now = Date.now(); + elapsed = now - timestamp; + timestamp = now; + delta = offset - frame; + frame = offset; + + v = 1000 * delta / (1 + elapsed); + velocity = 0.8 * v + 0.2 * velocity; + } + + function autoScroll() { + var elapsed, delta; + + if (amplitude) { + elapsed = Date.now() - timestamp; + delta = amplitude * Math.exp(-elapsed / options.duration); + if (delta > 2 || delta < -2) { + scroll(target - delta); + requestAnimationFrame(autoScroll); + } else { + scroll(target); + } + } + } + + function click(e) { + // Disable clicks if carousel was dragged. + if (dragged) { + e.preventDefault(); + e.stopPropagation(); + return false; + + } else if (!options.fullWidth) { + var clickedIndex = $(e.target).closest('.carousel-item').index(); + var diff = wrap(center) - clickedIndex; + + // Disable clicks if carousel was shifted by click + if (diff !== 0) { + e.preventDefault(); + e.stopPropagation(); + } + cycleTo(clickedIndex); + } + } + + function cycleTo(n) { + var diff = (center % count) - n; + + // Account for wraparound. + if (!noWrap) { + if (diff < 0) { + if (Math.abs(diff + count) < Math.abs(diff)) { diff += count; } + + } else if (diff > 0) { + if (Math.abs(diff - count) < diff) { diff -= count; } + } + } + + // Call prev or next accordingly. + if (diff < 0) { + view.trigger('carouselNext', [Math.abs(diff)]); + + } else if (diff > 0) { + view.trigger('carouselPrev', [diff]); + } + } + + function tap(e) { + // Fixes firefox draggable image bug + if (e.type === 'mousedown' && $(e.target).is('img')) { + e.preventDefault(); + } + pressed = true; + dragged = false; + vertical_dragged = false; + reference = xpos(e); + referenceY = ypos(e); + + velocity = amplitude = 0; + frame = offset; + timestamp = Date.now(); + clearInterval(ticker); + ticker = setInterval(track, 100); + } + + function drag(e) { + var x, delta, deltaY; + if (pressed) { + x = xpos(e); + y = ypos(e); + delta = reference - x; + deltaY = Math.abs(referenceY - y); + if (deltaY < 30 && !vertical_dragged) { + // If vertical scrolling don't allow dragging. + if (delta > 2 || delta < -2) { + dragged = true; + reference = x; + scroll(offset + delta); + } + + } else if (dragged) { + // If dragging don't allow vertical scroll. + e.preventDefault(); + e.stopPropagation(); + return false; + + } else { + // Vertical scrolling. + vertical_dragged = true; + } + } + + if (dragged) { + // If dragging don't allow vertical scroll. + e.preventDefault(); + e.stopPropagation(); + return false; + } + } + + function release(e) { + if (pressed) { + pressed = false; + } else { + return; + } + + clearInterval(ticker); + target = offset; + if (velocity > 10 || velocity < -10) { + amplitude = 0.9 * velocity; + target = offset + amplitude; + } + target = Math.round(target / dim) * dim; + + // No wrap of items. + if (noWrap) { + if (target >= dim * (count - 1)) { + target = dim * (count - 1); + } else if (target < 0) { + target = 0; + } + } + amplitude = target - offset; + timestamp = Date.now(); + requestAnimationFrame(autoScroll); + + if (dragged) { + e.preventDefault(); + e.stopPropagation(); + } + return false; + } + + xform = 'transform'; + ['webkit', 'Moz', 'O', 'ms'].every(function (prefix) { + var e = prefix + 'Transform'; + if (typeof document.body.style[e] !== 'undefined') { + xform = e; + return false; + } + return true; + }); + + + var throttledResize = Materialize.throttle(function() { + if (options.fullWidth) { + item_width = view.find('.carousel-item').first().innerWidth(); + var imageHeight = view.find('.carousel-item.active').height(); + dim = item_width * 2 + options.padding; + offset = center * 2 * item_width; + target = offset; + setCarouselHeight(true); + } else { + scroll(); + } + }, 200); + $(window) + .off('resize.carousel-'+uniqueNamespace) + .on('resize.carousel-'+uniqueNamespace, throttledResize); + + setupEvents(); + scroll(offset); + + $(this).on('carouselNext', function(e, n, callback) { + if (n === undefined) { + n = 1; + } + if (typeof(callback) === "function") { + oneTimeCallback = callback; + } + + target = (dim * Math.round(offset / dim)) + (dim * n); + if (offset !== target) { + amplitude = target - offset; + timestamp = Date.now(); + requestAnimationFrame(autoScroll); + } + }); + + $(this).on('carouselPrev', function(e, n, callback) { + if (n === undefined) { + n = 1; + } + if (typeof(callback) === "function") { + oneTimeCallback = callback; + } + + target = (dim * Math.round(offset / dim)) - (dim * n); + if (offset !== target) { + amplitude = target - offset; + timestamp = Date.now(); + requestAnimationFrame(autoScroll); + } + }); + + $(this).on('carouselSet', function(e, n, callback) { + if (n === undefined) { + n = 0; + } + if (typeof(callback) === "function") { + oneTimeCallback = callback; + } + + cycleTo(n); + }); + + }); + + + + }, + next : function(n, callback) { + $(this).trigger('carouselNext', [n, callback]); + }, + prev : function(n, callback) { + $(this).trigger('carouselPrev', [n, callback]); + }, + set : function(n, callback) { + $(this).trigger('carouselSet', [n, callback]); + }, + destroy : function() { + var uniqueNamespace = $(this).attr('data-namespace'); + $(this).removeAttr('data-namespace'); + $(this).removeClass('initialized'); + $(this).find('.indicators').remove(); + + // Remove event handlers + $(this).off('carouselNext carouselPrev carouselSet'); + $(window).off('resize.carousel-'+uniqueNamespace); + if (typeof window.ontouchstart !== 'undefined') { + $(this).off('touchstart.carousel touchmove.carousel touchend.carousel'); + } + $(this).off('mousedown.carousel mousemove.carousel mouseup.carousel mouseleave.carousel click.carousel'); + } + }; + + + $.fn.carousel = function(methodOrOptions) { + if ( methods[methodOrOptions] ) { + return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { + // Default to "init" + return methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.carousel' ); + } + }; // Plugin end +}( jQuery )); diff --git a/js/character_counter.js b/js/character_counter.js index dfda543774..f85bf917cb 100644 --- a/js/character_counter.js +++ b/js/character_counter.js @@ -2,22 +2,29 @@ $.fn.characterCounter = function(){ return this.each(function(){ + var $input = $(this); + var $counterElement = $input.parent().find('span[class="character-counter"]'); - var itHasLengthAttribute = $(this).attr('length') !== undefined; + // character counter has already been added appended to the parent container + if ($counterElement.length) { + return; + } + + var itHasLengthAttribute = $input.attr('data-length') !== undefined; if(itHasLengthAttribute){ - $(this).on('input', updateCounter); - $(this).on('focus', updateCounter); - $(this).on('blur', removeCounterElement); + $input.on('input', updateCounter); + $input.on('focus', updateCounter); + $input.on('blur', removeCounterElement); - addCounterElement($(this)); + addCounterElement($input); } }); }; function updateCounter(){ - var maxLength = +$(this).attr('length'), + var maxLength = +$(this).attr('data-length'), actualLength = +$(this).val().length, isValidLength = actualLength <= maxLength; @@ -27,8 +34,14 @@ addInputStyle(isValidLength, $(this)); } - function addCounterElement($input){ - var $counterElement = $('') + function addCounterElement($input) { + var $counterElement = $input.parent().find('span[class="character-counter"]'); + + if ($counterElement.length) { + return; + } + + $counterElement = $('') .addClass('character-counter') .css('float','right') .css('font-size','12px') diff --git a/js/chips.js b/js/chips.js index 1c553d5f64..3de8a11096 100644 --- a/js/chips.js +++ b/js/chips.js @@ -1,9 +1,318 @@ (function ($) { - $(document).ready(function() { + var materialChipsDefaults = { + data: [], + placeholder: '', + secondaryPlaceholder: '', + autocompleteOptions: {}, + }; - $(document).on('click.chip', '.chip .material-icons', function (e) { - $(this).parent().remove(); + $(document).ready(function() { + // Handle removal of static chips. + $(document).on('click', '.chip .close', function(e){ + var $chips = $(this).closest('.chips'); + if ($chips.attr('data-initialized')) { + return; + } + $(this).closest('.chip').remove(); }); - }); -}( jQuery )); \ No newline at end of file + + $.fn.material_chip = function (options) { + var self = this; + this.$el = $(this); + this.$document = $(document); + this.SELS = { + CHIPS: '.chips', + CHIP: '.chip', + INPUT: 'input', + DELETE: '.material-icons', + SELECTED_CHIP: '.selected', + }; + + if ('data' === options) { + return this.$el.data('chips'); + } + + var curr_options = $.extend({}, materialChipsDefaults, options); + self.hasAutocomplete = !$.isEmptyObject(curr_options.autocompleteOptions.data); + + // Initialize + this.init = function() { + var i = 0; + var chips; + self.$el.each(function(){ + var $chips = $(this); + var chipId = Materialize.guid(); + self.chipId = chipId; + + if (!curr_options.data || !(curr_options.data instanceof Array)) { + curr_options.data = []; + } + $chips.data('chips', curr_options.data); + $chips.attr('data-index', i); + $chips.attr('data-initialized', true); + + if (!$chips.hasClass(self.SELS.CHIPS)) { + $chips.addClass('chips'); + } + + self.chips($chips, chipId); + i++; + }); + }; + + this.handleEvents = function() { + var SELS = self.SELS; + + self.$document.off('click.chips-focus', SELS.CHIPS).on('click.chips-focus', SELS.CHIPS, function(e){ + $(e.target).find(SELS.INPUT).focus(); + }); + + self.$document.off('click.chips-select', SELS.CHIP).on('click.chips-select', SELS.CHIP, function(e){ + var $chip = $(e.target); + if ($chip.length) { + var wasSelected = $chip.hasClass('selected'); + var $chips = $chip.closest(SELS.CHIPS); + $(SELS.CHIP).removeClass('selected'); + + if (!wasSelected) { + self.selectChip($chip.index(), $chips); + } + } + }); + + self.$document.off('keydown.chips').on('keydown.chips', function(e){ + if ($(e.target).is('input, textarea')) { + return; + } + + // delete + var $chip = self.$document.find(SELS.CHIP + SELS.SELECTED_CHIP); + var $chips = $chip.closest(SELS.CHIPS); + var length = $chip.siblings(SELS.CHIP).length; + var index; + + if (!$chip.length) { + return; + } + + if (e.which === 8 || e.which === 46) { + e.preventDefault(); + + index = $chip.index(); + self.deleteChip(index, $chips); + + var selectIndex = null; + if ((index + 1) < length) { + selectIndex = index; + } else if (index === length || (index + 1) === length) { + selectIndex = length - 1; + } + + if (selectIndex < 0) selectIndex = null; + + if (null !== selectIndex) { + self.selectChip(selectIndex, $chips); + } + if (!length) $chips.find('input').focus(); + + // left + } else if (e.which === 37) { + index = $chip.index() - 1; + if (index < 0) { + return; + } + $(SELS.CHIP).removeClass('selected'); + self.selectChip(index, $chips); + + // right + } else if (e.which === 39) { + index = $chip.index() + 1; + $(SELS.CHIP).removeClass('selected'); + if (index > length) { + $chips.find('input').focus(); + return; + } + self.selectChip(index, $chips); + } + }); + + self.$document.off('focusin.chips', SELS.CHIPS + ' ' + SELS.INPUT).on('focusin.chips', SELS.CHIPS + ' ' + SELS.INPUT, function(e){ + var $currChips = $(e.target).closest(SELS.CHIPS); + $currChips.addClass('focus'); + $currChips.siblings('label, .prefix').addClass('active'); + $(SELS.CHIP).removeClass('selected'); + }); + + self.$document.off('focusout.chips', SELS.CHIPS + ' ' + SELS.INPUT).on('focusout.chips', SELS.CHIPS + ' ' + SELS.INPUT, function(e){ + var $currChips = $(e.target).closest(SELS.CHIPS); + $currChips.removeClass('focus'); + + // Remove active if empty + if ($currChips.data('chips') === undefined || !$currChips.data('chips').length) { + $currChips.siblings('label').removeClass('active'); + } + $currChips.siblings('.prefix').removeClass('active'); + }); + + self.$document.off('keydown.chips-add', SELS.CHIPS + ' ' + SELS.INPUT).on('keydown.chips-add', SELS.CHIPS + ' ' + SELS.INPUT, function(e){ + var $target = $(e.target); + var $chips = $target.closest(SELS.CHIPS); + var chipsLength = $chips.children(SELS.CHIP).length; + + // enter + if (13 === e.which) { + // Override enter if autocompleting. + if (self.hasAutocomplete && + $chips.find('.autocomplete-content.dropdown-content').length && + $chips.find('.autocomplete-content.dropdown-content').children().length) { + return; + } + + e.preventDefault(); + self.addChip({tag: $target.val()}, $chips); + $target.val(''); + return; + } + + // delete or left + if ((8 === e.keyCode || 37 === e.keyCode) && '' === $target.val() && chipsLength) { + e.preventDefault(); + self.selectChip(chipsLength - 1, $chips); + $target.blur(); + return; + } + }); + + // Click on delete icon in chip. + self.$document.off('click.chips-delete', SELS.CHIPS + ' ' + SELS.DELETE).on('click.chips-delete', SELS.CHIPS + ' ' + SELS.DELETE, function(e) { + var $target = $(e.target); + var $chips = $target.closest(SELS.CHIPS); + var $chip = $target.closest(SELS.CHIP); + e.stopPropagation(); + self.deleteChip($chip.index(), $chips); + $chips.find('input').focus(); + }); + }; + + this.chips = function($chips, chipId) { + $chips.empty(); + $chips.data('chips').forEach(function(elem){ + $chips.append(self.renderChip(elem)); + }); + $chips.append($('')); + self.setPlaceholder($chips); + + // Set for attribute for label + var label = $chips.next('label'); + if (label.length) { + label.attr('for', chipId); + + if ($chips.data('chips')!== undefined && $chips.data('chips').length) { + label.addClass('active'); + } + } + + // Setup autocomplete if needed. + var input = $('#' + chipId); + if (self.hasAutocomplete) { + curr_options.autocompleteOptions.onAutocomplete = function(val) { + self.addChip({tag: val}, $chips); + input.val(''); + input.focus(); + } + input.autocomplete(curr_options.autocompleteOptions); + } + }; + + /** + * Render chip jQuery element. + * @param {Object} elem + * @return {jQuery} + */ + this.renderChip = function(elem) { + if (!elem.tag) return; + + var $renderedChip = $('
                    '); + $renderedChip.text(elem.tag); + if (elem.image) { + $renderedChip.prepend($('').attr('src', elem.image)) + } + $renderedChip.append($('close')); + return $renderedChip; + }; + + this.setPlaceholder = function($chips) { + if (($chips.data('chips') !== undefined && !$chips.data('chips').length) && curr_options.placeholder) { + $chips.find('input').prop('placeholder', curr_options.placeholder); + + } else if (($chips.data('chips') === undefined || !!$chips.data('chips').length) && curr_options.secondaryPlaceholder) { + $chips.find('input').prop('placeholder', curr_options.secondaryPlaceholder); + } + }; + + this.isValid = function($chips, elem) { + var chips = $chips.data('chips'); + var exists = false; + for (var i=0; i < chips.length; i++) { + if (chips[i].tag === elem.tag) { + exists = true; + return; + } + } + return '' !== elem.tag && !exists; + }; + + this.addChip = function(elem, $chips) { + if (!self.isValid($chips, elem)) { + return; + } + var $renderedChip = self.renderChip(elem); + var newData = []; + var oldData = $chips.data('chips'); + for (var i = 0; i < oldData.length; i++) { + newData.push(oldData[i]); + } + newData.push(elem); + + $chips.data('chips', newData); + $renderedChip.insertBefore($chips.find('input')); + $chips.trigger('chip.add', elem); + self.setPlaceholder($chips); + }; + + this.deleteChip = function(chipIndex, $chips) { + var chip = $chips.data('chips')[chipIndex]; + $chips.find('.chip').eq(chipIndex).remove(); + + var newData = []; + var oldData = $chips.data('chips'); + for (var i = 0; i < oldData.length; i++) { + if (i !== chipIndex) { + newData.push(oldData[i]); + } + } + + $chips.data('chips', newData); + $chips.trigger('chip.delete', chip); + self.setPlaceholder($chips); + }; + + this.selectChip = function(chipIndex, $chips) { + var $chip = $chips.find('.chip').eq(chipIndex); + if ($chip && false === $chip.hasClass('selected')) { + $chip.addClass('selected'); + $chips.trigger('chip.select', $chips.data('chips')[chipIndex]); + } + }; + + this.getChipsElement = function(index, $chips) { + return $chips.eq(index); + }; + + // init + this.init(); + + this.handleEvents(); + }; +}( jQuery )); diff --git a/js/collapsible.js b/js/collapsible.js index 45a897e97c..17610ec78e 100644 --- a/js/collapsible.js +++ b/js/collapsible.js @@ -1,9 +1,12 @@ (function ($) { - $.fn.collapsible = function(options) { + $.fn.collapsible = function(options, methodParam) { var defaults = { - accordion: undefined + accordion: undefined, + onOpen: undefined, + onClose: undefined }; + var methodName = options; options = $.extend(defaults, options); @@ -15,23 +18,18 @@ var collapsible_type = $this.data("collapsible"); - // Turn off any existing event handlers - $this.off('click.collapse', '.collapsible-header'); - $panel_headers.off('click.collapse'); - - - /**************** - Helper Functions - ****************/ + /**************** + Helper Functions + ****************/ // Accordion Open function accordionOpen(object) { $panel_headers = $this.find('> li > .collapsible-header'); if (object.hasClass('active')) { - object.parent().addClass('active'); + object.parent().addClass('active'); } else { - object.parent().removeClass('active'); + object.parent().removeClass('active'); } if (object.parent().hasClass('active')){ object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}}); @@ -41,34 +39,68 @@ } $panel_headers.not(object).removeClass('active').parent().removeClass('active'); - $panel_headers.not(object).parent().children('.collapsible-body').stop(true,false).slideUp( - { - duration: 350, - easing: "easeOutQuart", - queue: false, - complete: - function() { - $(this).css('height', ''); - } - }); + + // Close previously open accordion elements. + $panel_headers.not(object).parent().children('.collapsible-body').stop(true,false).each(function() { + if ($(this).is(':visible')) { + $(this).slideUp({ + duration: 350, + easing: "easeOutQuart", + queue: false, + complete: + function() { + $(this).css('height', ''); + execCallbacks($(this).siblings('.collapsible-header')); + } + }); + } + }); } // Expandable Open function expandableOpen(object) { if (object.hasClass('active')) { - object.parent().addClass('active'); + object.parent().addClass('active'); } else { - object.parent().removeClass('active'); + object.parent().removeClass('active'); } if (object.parent().hasClass('active')){ object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}}); } - else{ + else { object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}}); } } + // Open collapsible. object: .collapsible-header + function collapsibleOpen(object, noToggle) { + if (!noToggle) { + object.toggleClass('active'); + } + + if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion + accordionOpen(object); + } else { // Handle Expandables + expandableOpen(object); + } + + execCallbacks(object); + } + + // Handle callbacks + function execCallbacks(object) { + if (object.hasClass('active')) { + if (typeof(options.onOpen) === "function") { + options.onOpen.call(this, object.parent()); + } + } else { + if (typeof(options.onClose) === "function") { + options.onClose.call(this, object.parent()); + } + } + } + /** * Check if object is children of panel header * @param {Object} object Jquery object @@ -91,42 +123,54 @@ return object.closest('li > .collapsible-header'); } + + // Turn off any existing event handlers + function removeEventHandlers() { + $this.off('click.collapse', '> li > .collapsible-header'); + } + /***** End Helper Functions *****/ + // Methods + if (methodName === 'destroy') { + removeEventHandlers(); + return; + } else if (methodParam >= 0 && + methodParam < $panel_headers.length) { + var $curr_header = $panel_headers.eq(methodParam); + if ($curr_header.length && + (methodName === 'open' || + (methodName === 'close' && + $curr_header.hasClass('active')))) { + collapsibleOpen($curr_header); + } + return; + } - if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion - // Add click handler to only direct collapsible header children - $panel_headers = $this.find('> li > .collapsible-header'); - $panel_headers.on('click.collapse', function (e) { - var element = $(e.target); - if (isChildrenOfPanelHeader(element)) { - element = getPanelHeader(element); - } + removeEventHandlers(); - element.toggleClass('active'); - accordionOpen(element); - }); - // Open first active - accordionOpen($panel_headers.filter('.active').first()); - } - else { // Handle Expandables - $panel_headers.each(function () { - // Add click handler to only direct collapsible header children - $(this).on('click.collapse', function (e) { - var element = $(e.target); - if (isChildrenOfPanelHeader(element)) { - element = getPanelHeader(element); - } - element.toggleClass('active'); - expandableOpen(element); - }); - // Open any bodies that have the active class - if ($(this).hasClass('active')) { - expandableOpen($(this)); - } + // Add click handler to only direct collapsible header children + $this.on('click.collapse', '> li > .collapsible-header', function(e) { + var element = $(e.target); + + if (isChildrenOfPanelHeader(element)) { + element = getPanelHeader(element); + } + + collapsibleOpen(element); + }); + + + // Open first active + if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion + collapsibleOpen($panel_headers.filter('.active').first(), true); + + } else { // Handle Expandables + $panel_headers.filter('.active').each(function() { + collapsibleOpen($(this), true); }); } diff --git a/js/date_picker/picker.date.js b/js/date_picker/picker.date.js index fb264d06ae..f282f4cf5e 100644 --- a/js/date_picker/picker.date.js +++ b/js/date_picker/picker.date.js @@ -4,17 +4,7 @@ */ (function ( factory ) { - - // AMD. - if ( typeof define == 'function' && define.amd ) - define( ['picker', 'jquery'], factory ) - - // Node.js/browserify. - else if ( typeof exports == 'object' ) - module.exports = factory( require('./picker.js'), require('jquery') ) - - // Browser globals. - else factory( Picker, jQuery ) + factory( Materialize.Picker, jQuery ) }(function( Picker, $ ) { @@ -24,7 +14,7 @@ */ var DAYS_IN_WEEK = 7, WEEKS_IN_CALENDAR = 6, - _ = Picker._ + _ = Picker._; @@ -1089,8 +1079,8 @@ DatePicker.prototype.nodes = function( isOpen ) { // Materialize modified if (override == "short_months") if (selectedObject != null) - return _.node( 'div', monthsCollection[ selectedObject.month ] ); - else return _.node( 'div', monthsCollection[ viewsetObject.month ] ); + return monthsCollection[ selectedObject.month ]; + else return monthsCollection[ viewsetObject.month ]; // If there's a need for a month selector return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month ) @@ -1107,6 +1097,7 @@ DatePicker.prototype.nodes = function( isOpen ) { // divide in half to get half before and half after focused year. numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 ) + // If there are years to select, add a dropdown menu. if ( numberYears ) { @@ -1160,9 +1151,13 @@ DatePicker.prototype.nodes = function( isOpen ) { } } - // Materialize modified - if (override == "raw") - return _.node( 'div', focusedYear ) + + // Materialize modified + if (override === 'raw' && selectedObject != null) { + return _.node( 'div', selectedObject.year ) + } + + // Otherwise just return the year focused return _.node( 'div', focusedYear, settings.klass.year ) @@ -1172,8 +1167,8 @@ DatePicker.prototype.nodes = function( isOpen ) { // Materialize modified createDayLabel = function() { if (selectedObject != null) - return _.node( 'div', selectedObject.date) - else return _.node( 'div', nowObject.date) + return selectedObject.date + else return nowObject.date } createWeekdayLabel = function() { var display_day; @@ -1182,155 +1177,158 @@ DatePicker.prototype.nodes = function( isOpen ) { display_day = selectedObject.day; else display_day = nowObject.day; - var weekday = settings.weekdaysFull[ display_day ] + var weekday = settings.weekdaysShort[ display_day ]; return weekday } - // Create and return the entire calendar. + // Create and return the entire calendar. + return _.node( // Date presentation View 'div', _.node( + // Div for Year 'div', - createWeekdayLabel(), + createYearLabel("raw") , + settings.klass.year_display + )+ + _.node( + 'span', + createWeekdayLabel() + ', ', "picker__weekday-display" )+ _.node( // Div for short Month - 'div', - createMonthLabel("short_months"), + 'span', + createMonthLabel("short_months") + ' ', settings.klass.month_display )+ _.node( - // Div for Day - 'div', - createDayLabel() , - settings.klass.day_display - )+ - _.node( - // Div for Year - 'div', - createYearLabel("raw") , - settings.klass.year_display + // Div for Day + 'span', + createDayLabel() , + settings.klass.day_display ), settings.klass.date_display )+ // Calendar container _.node('div', - _.node('div', - ( settings.selectYears ? createMonthLabel() + createYearLabel() : createMonthLabel() + createYearLabel() ) + - createMonthNav() + createMonthNav( 1 ), - settings.klass.header - ) + _.node( - 'table', - tableHead + - _.node( - 'tbody', - _.group({ - min: 0, - max: WEEKS_IN_CALENDAR - 1, - i: 1, - node: 'tr', - item: function( rowCounter ) { - - // If Monday is the first day and the month starts on Sunday, shift the date back a week. - var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0 - - return [ - _.group({ - min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index - max: function() { - return this.min + DAYS_IN_WEEK - 1 - }, - i: 1, - node: 'td', - item: function( targetDate ) { - - // Convert the time date from a relative date to a target date. - targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ]) - - var isSelected = selectedObject && selectedObject.pick == targetDate.pick, - isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick, - isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick, - formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ) - - return [ - _.node( - 'div', - targetDate.date, - (function( klasses ) { - - // Add the `infocus` or `outfocus` classes based on month in view. - klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus ) - - // Add the `today` class if needed. - if ( nowObject.pick == targetDate.pick ) { - klasses.push( settings.klass.now ) - } - - // Add the `selected` class if something's selected and the time matches. - if ( isSelected ) { - klasses.push( settings.klass.selected ) - } - - // Add the `highlighted` class if something's highlighted and the time matches. - if ( isHighlighted ) { - klasses.push( settings.klass.highlighted ) - } - - // Add the `disabled` class if something's disabled and the object matches. - if ( isDisabled ) { - klasses.push( settings.klass.disabled ) - } - - return klasses.join( ' ' ) - })([ settings.klass.day ]), - 'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({ - role: 'gridcell', - label: formattedDate, - selected: isSelected && calendar.$node.val() === formattedDate ? true : null, - activedescendant: isHighlighted ? true : null, - disabled: isDisabled ? true : null - }) - ), - '', - _.ariaAttr({ role: 'presentation' }) - ] //endreturn - } - }) - ] //endreturn - } - }) - ), - settings.klass.table, - 'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({ - role: 'grid', - controls: calendar.$node[0].id, - readonly: true - }) - ) - , settings.klass.calendar_container) // end calendar - - + - - // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”. - _.node( - 'div', - _.node( 'button', settings.today, "btn-flat picker__today", - 'type=button data-pick=' + nowObject.pick + - ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' + - _.ariaAttr({ controls: calendar.$node[0].id }) ) + - _.node( 'button', settings.clear, "btn-flat picker__clear", - 'type=button data-clear=1' + - ( isOpen ? '' : ' disabled' ) + ' ' + - _.ariaAttr({ controls: calendar.$node[0].id }) ) + - _.node('button', settings.close, "btn-flat picker__close", - 'type=button data-close=true ' + - ( isOpen ? '' : ' disabled' ) + ' ' + - _.ariaAttr({ controls: calendar.$node[0].id }) ), - settings.klass.footer - ) //endreturn + _.node('div', + _.node('div', + ( settings.selectYears ? createMonthLabel() + createYearLabel() : createMonthLabel() + createYearLabel() ) + + createMonthNav() + createMonthNav( 1 ), + settings.klass.header + ) + _.node( + 'table', + tableHead + + _.node( + 'tbody', + _.group({ + min: 0, + max: WEEKS_IN_CALENDAR - 1, + i: 1, + node: 'tr', + item: function( rowCounter ) { + + // If Monday is the first day and the month starts on Sunday, shift the date back a week. + var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0 + + return [ + _.group({ + min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index + max: function() { + return this.min + DAYS_IN_WEEK - 1 + }, + i: 1, + node: 'td', + item: function( targetDate ) { + + // Convert the time date from a relative date to a target date. + targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ]) + + var isSelected = selectedObject && selectedObject.pick == targetDate.pick, + isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick, + isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick, + formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ) + + return [ + _.node( + 'div', + targetDate.date, + (function( klasses ) { + + // Add the `infocus` or `outfocus` classes based on month in view. + klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus ) + + // Add the `today` class if needed. + if ( nowObject.pick == targetDate.pick ) { + klasses.push( settings.klass.now ) + } + + // Add the `selected` class if something's selected and the time matches. + if ( isSelected ) { + klasses.push( settings.klass.selected ) + } + + // Add the `highlighted` class if something's highlighted and the time matches. + if ( isHighlighted ) { + klasses.push( settings.klass.highlighted ) + } + + // Add the `disabled` class if something's disabled and the object matches. + if ( isDisabled ) { + klasses.push( settings.klass.disabled ) + } + + return klasses.join( ' ' ) + })([ settings.klass.day ]), + 'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({ + role: 'gridcell', + label: formattedDate, + selected: isSelected && calendar.$node.val() === formattedDate ? true : null, + activedescendant: isHighlighted ? true : null, + disabled: isDisabled ? true : null + }) + ' ' + (isDisabled ? '' : 'tabindex="0"') + ), + '', + _.ariaAttr({ role: 'presentation' }) + ] //endreturn + } + }) + ] //endreturn + } + }) + ), + settings.klass.table, + 'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({ + role: 'grid', + controls: calendar.$node[0].id, + readonly: true + }) + ) + , settings.klass.calendar_container) // end calendar + + + + + // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”. + _.node( + 'div', + _.node( 'button', settings.today, "btn-flat picker__today waves-effect", + 'type=button data-pick=' + nowObject.pick + + ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' + + _.ariaAttr({ controls: calendar.$node[0].id }) ) + + _.node( 'button', settings.clear, "btn-flat picker__clear waves-effect", + 'type=button data-clear=1' + + ( isOpen ? '' : ' disabled' ) + ' ' + + _.ariaAttr({ controls: calendar.$node[0].id }) ) + + _.node('button', settings.close, "btn-flat picker__close waves-effect", + 'type=button data-close=true ' + + ( isOpen ? '' : ' disabled' ) + ' ' + + _.ariaAttr({ controls: calendar.$node[0].id }) ), + settings.klass.footer + ), 'picker__container__wrapper' + ) //endreturn } //DatePicker.prototype.nodes @@ -1363,7 +1361,10 @@ DatePicker.defaults = (function( prefix ) { // Today and clear today: 'Today', clear: 'Clear', - close: 'Close', + close: 'Ok', + + // Picker close behavior (Prevent a change in behaviour for backwards compatibility) + closeOnSelect: false, // The format to show on the `input` element format: 'd mmmm, yyyy', @@ -1426,5 +1427,3 @@ Picker.extend( 'pickadate', DatePicker ) })); - - diff --git a/js/date_picker/picker.js b/js/date_picker/picker.js index 88a1aec26c..0b3ca36043 100644 --- a/js/date_picker/picker.js +++ b/js/date_picker/picker.js @@ -7,16 +7,7 @@ (function ( factory ) { - // AMD. - if ( typeof define == 'function' && define.amd ) - define( 'picker', ['jquery'], factory ) - - // Node.js/browserify. - else if ( typeof exports == 'object' ) - module.exports = factory( require('jquery') ) - - // Browser globals. - else this.Picker = factory( jQuery ) + Materialize.Picker = factory( jQuery ) }(function( $ ) { @@ -117,7 +108,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // Insert the root as specified in the settings. if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root ) - else $ELEMENT.after( P.$root ) + else $ELEMENT.before( P.$root ) // Bind the default component and settings events. @@ -246,7 +237,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // Pass focus to the root element’s jQuery object. // * Workaround for iOS8 to bring the picker’s root into view. - P.$root[0].focus() + P.$root.eq(0).focus() // Bind the document events. $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) { @@ -299,7 +290,10 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // On “enter”, if the highlighted item isn’t disabled, set the value and close. else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) { - P.set( 'select', P.component.item.highlight ).close() + P.set( 'select', P.component.item.highlight ) + if ( SETTINGS.closeOnSelect ) { + P.close( true ) + } } } @@ -328,7 +322,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :| // The focus is triggered *after* the close has completed - causing it // to open again. So unbind and rebind the event at the next tick. - P.$root.off( 'focus.toOpen' )[0].focus() + P.$root.off( 'focus.toOpen' ).eq(0).focus() setTimeout( function() { P.$root.on( 'focus.toOpen', handleFocusToOpenEvent ) }, 0 ) @@ -585,6 +579,8 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { /** * Prepare the input element with all bindings. + * The contents of this function are copied from pickadate v3.6.3 + * https://github.com/amsul/pickadate.js/blob/master/lib/picker.js */ function prepareElement() { @@ -596,14 +592,34 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // Add the “input” class name. addClass(CLASSES.input). - // Remove the tabindex. - attr('tabindex', -1). - // If there’s a `data-value`, update the value of the element. val( $ELEMENT.data('value') ? P.get('select', SETTINGS.format) : ELEMENT.value - ) + ). + + // On focus/click, open the picker. + on( 'focus.' + STATE.id + ' click.' + STATE.id, + debounce(function(event) { + event.preventDefault() + P.open() + }, 150)) + + // Mousedown handler to capture when the user starts interacting + // with the picker. This is used in working around a bug in Chrome 73. + .on('mousedown', function() { + STATE.handlingOpen = true; + var handler = function() { + // By default mouseup events are fired before a click event. + // By using a timeout we can force the mouseup to be handled + // after the corresponding click event is handled. + setTimeout(function() { + $(document).off('mouseup', handler); + STATE.handlingOpen = false; + }, 0); + }; + $(document).on('mouseup', handler); + }); // Only bind keydown events if the element isn’t editable. @@ -611,17 +627,10 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { $ELEMENT. - // On focus/click, focus onto the root to open it up. - on( 'focus.' + STATE.id + ' click.' + STATE.id, function( event ) { - event.preventDefault() - P.$root[0].focus() - }). - // Handle keyboard event based on the picker being opened or not. on( 'keydown.' + STATE.id, handleKeydownEvent ) } - // Update the aria attributes. aria(ELEMENT, { haspopup: true, @@ -631,6 +640,20 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { }) } + function debounce(func, wait, immediate) { + var timeout; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; + } /** * Prepare the root picker element with all bindings. @@ -672,7 +695,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // Re-focus onto the root so that users can click away // from elements focused within the picker. - P.$root[0].focus() + P.$root.eq(0).focus() } } } @@ -700,12 +723,12 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // * For IE, non-focusable elements can be active elements as well // (http://stackoverflow.com/a/2684561). - activeElement = getActiveElement() - activeElement = activeElement && ( activeElement.type || activeElement.href ) + activeElement = getActiveElement(); + activeElement = activeElement && ( activeElement.type || activeElement.href ) && activeElement; // If it’s disabled or nothing inside is actively focused, re-focus the element. if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) { - P.$root[0].focus() + P.$root.eq(0).focus() } // If something is superficially changed, update the `highlight` based on the `nav`. @@ -716,11 +739,17 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // If something is picked, set `select` then close with focus. else if ( !targetDisabled && 'pick' in targetData ) { P.set( 'select', targetData.pick ) + if ( SETTINGS.closeOnSelect ) { + P.close( true ) + } } // If a “clear” button is pressed, empty the values and close with focus. else if ( targetData.clear ) { - P.clear().close( true ) + P.clear() + if ( SETTINGS.closeOnSelect ) { + P.close( true ) + } } else if ( targetData.close ) { @@ -780,7 +809,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { // Insert the hidden input as specified in the settings. if ( SETTINGS.container ) $( SETTINGS.container ).append( P._hidden ) - else $ELEMENT.after( P._hidden ) + else $ELEMENT.before( P._hidden ) } @@ -1119,5 +1148,3 @@ return PickerConstructor })); - - diff --git a/js/date_picker/picker.time.js b/js/date_picker/picker.time.js new file mode 100755 index 0000000000..b00c3af339 --- /dev/null +++ b/js/date_picker/picker.time.js @@ -0,0 +1,698 @@ +/*! + * ClockPicker v0.0.7 (http://weareoutman.github.io/clockpicker/) + * Copyright 2014 Wang Shenwei. + * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE) + * + * Further modified + * Copyright 2015 Ching Yaw Hao. + */ + +(function($){ + var $win = $(window), + $doc = $(document); + + // Can I use inline svg ? + var svgNS = 'http://www.w3.org/2000/svg', + svgSupported = 'SVGAngle' in window && (function() { + var supported, + el = document.createElement('div'); + el.innerHTML = ''; + supported = (el.firstChild && el.firstChild.namespaceURI) == svgNS; + el.innerHTML = ''; + return supported; + })(); + + // Can I use transition ? + var transitionSupported = (function() { + var style = document.createElement('div').style; + return 'transition' in style || + 'WebkitTransition' in style || + 'MozTransition' in style || + 'msTransition' in style || + 'OTransition' in style; + })(); + + // Listen touch events in touch screen device, instead of mouse events in desktop. + var touchSupported = 'ontouchstart' in window, + mousedownEvent = 'mousedown' + ( touchSupported ? ' touchstart' : ''), + mousemoveEvent = 'mousemove.clockpicker' + ( touchSupported ? ' touchmove.clockpicker' : ''), + mouseupEvent = 'mouseup.clockpicker' + ( touchSupported ? ' touchend.clockpicker' : ''); + + // Vibrate the device if supported + var vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null; + + function createSvgElement(name) { + return document.createElementNS(svgNS, name); + } + + function leadingZero(num) { + return (num < 10 ? '0' : '') + num; + } + + // Get a unique id + var idCounter = 0; + function uniqueId(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + } + + // Clock size + var dialRadius = 135, + outerRadius = 105, + // innerRadius = 80 on 12 hour clock + innerRadius = 70, + tickRadius = 20, + diameter = dialRadius * 2, + duration = transitionSupported ? 350 : 1; + + // Popover template + var tpl = [ + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '', + ':', + '', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ', + '
                    ' + ].join(''); + + // ClockPicker + function ClockPicker(element, options) { + var popover = $(tpl), + plate = popover.find('.clockpicker-plate'), + holder = popover.find('.picker__holder'), + hoursView = popover.find('.clockpicker-hours'), + minutesView = popover.find('.clockpicker-minutes'), + amPmBlock = popover.find('.clockpicker-am-pm-block'), + isInput = element.prop('tagName') === 'INPUT', + input = isInput ? element : element.find('input'), + label = $("label[for=" + input.attr("id") + "]"), + self = this; + + this.id = uniqueId('cp'); + this.element = element; + this.holder = holder; + this.options = options; + this.isAppended = false; + this.isShown = false; + this.currentView = 'hours'; + this.isInput = isInput; + this.input = input; + this.label = label; + this.popover = popover; + this.plate = plate; + this.hoursView = hoursView; + this.minutesView = minutesView; + this.amPmBlock = amPmBlock; + this.spanHours = popover.find('.clockpicker-span-hours'); + this.spanMinutes = popover.find('.clockpicker-span-minutes'); + this.spanAmPm = popover.find('.clockpicker-span-am-pm'); + this.footer = popover.find('.picker__footer'); + this.amOrPm = "PM"; + + // Setup for for 12 hour clock if option is selected + if (options.twelvehour) { + if (!options.ampmclickable) { + this.spanAmPm.empty(); + $('
                    AM
                    ').appendTo(this.spanAmPm); + $('
                    PM
                    ').appendTo(this.spanAmPm); + } + else { + this.spanAmPm.empty(); + $('
                    AM
                    ').on("click", function() { + self.spanAmPm.children('#click-am').addClass("text-primary"); + self.spanAmPm.children('#click-pm').removeClass("text-primary"); + self.amOrPm = "AM"; + }).appendTo(this.spanAmPm); + $('
                    PM
                    ').on("click", function() { + self.spanAmPm.children('#click-pm').addClass("text-primary"); + self.spanAmPm.children('#click-am').removeClass("text-primary"); + self.amOrPm = 'PM'; + }).appendTo(this.spanAmPm); + } + } + + // Add buttons to footer + $('').click($.proxy(this.clear, this)).appendTo(this.footer); + $('').click($.proxy(this.hide, this)).appendTo(this.footer); + $('').click($.proxy(this.done, this)).appendTo(this.footer); + + this.spanHours.click($.proxy(this.toggleView, this, 'hours')); + this.spanMinutes.click($.proxy(this.toggleView, this, 'minutes')); + + // Show or toggle + input.on('focus.clockpicker click.clockpicker', $.proxy(this.show, this)); + + // Build ticks + var tickTpl = $('
                    '), + i, tick, radian, radius; + + // Hours view + if (options.twelvehour) { + for (i = 1; i < 13; i += 1) { + tick = tickTpl.clone(); + radian = i / 6 * Math.PI; + radius = outerRadius; + tick.css({ + left: dialRadius + Math.sin(radian) * radius - tickRadius, + top: dialRadius - Math.cos(radian) * radius - tickRadius + }); + tick.html(i === 0 ? '00' : i); + hoursView.append(tick); + tick.on(mousedownEvent, mousedown); + } + } else { + for (i = 0; i < 24; i += 1) { + tick = tickTpl.clone(); + radian = i / 6 * Math.PI; + var inner = i > 0 && i < 13; + radius = inner ? innerRadius : outerRadius; + tick.css({ + left: dialRadius + Math.sin(radian) * radius - tickRadius, + top: dialRadius - Math.cos(radian) * radius - tickRadius + }); + tick.html(i === 0 ? '00' : i); + hoursView.append(tick); + tick.on(mousedownEvent, mousedown); + } + } + + // Minutes view + for (i = 0; i < 60; i += 5) { + tick = tickTpl.clone(); + radian = i / 30 * Math.PI; + tick.css({ + left: dialRadius + Math.sin(radian) * outerRadius - tickRadius, + top: dialRadius - Math.cos(radian) * outerRadius - tickRadius + }); + tick.html(leadingZero(i)); + minutesView.append(tick); + tick.on(mousedownEvent, mousedown); + } + + // Clicking on minutes view space + plate.on(mousedownEvent, function(e) { + if ($(e.target).closest('.clockpicker-tick').length === 0) { + mousedown(e, true); + } + }); + + // Mousedown or touchstart + function mousedown(e, space) { + var offset = plate.offset(), + isTouch = /^touch/.test(e.type), + x0 = offset.left + dialRadius, + y0 = offset.top + dialRadius, + dx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0, + dy = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0, + z = Math.sqrt(dx * dx + dy * dy), + moved = false; + + // When clicking on minutes view space, check the mouse position + if (space && (z < outerRadius - tickRadius || z > outerRadius + tickRadius)) { + return; + } + e.preventDefault(); + + // Set cursor style of body after 200ms + var movingTimer = setTimeout(function(){ + self.popover.addClass('clockpicker-moving'); + }, 200); + + // Clock + self.setHand(dx, dy, !space, true); + + // Mousemove on document + $doc.off(mousemoveEvent).on(mousemoveEvent, function(e){ + e.preventDefault(); + var isTouch = /^touch/.test(e.type), + x = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0, + y = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0; + if (! moved && x === dx && y === dy) { + // Clicking in chrome on windows will trigger a mousemove event + return; + } + moved = true; + self.setHand(x, y, false, true); + }); + + // Mouseup on document + $doc.off(mouseupEvent).on(mouseupEvent, function(e) { + $doc.off(mouseupEvent); + e.preventDefault(); + var isTouch = /^touch/.test(e.type), + x = (isTouch ? e.originalEvent.changedTouches[0] : e).pageX - x0, + y = (isTouch ? e.originalEvent.changedTouches[0] : e).pageY - y0; + if ((space || moved) && x === dx && y === dy) { + self.setHand(x, y); + } + + if (self.currentView === 'hours') { + self.toggleView('minutes', duration / 2); + } else if (options.autoclose) { + self.minutesView.addClass('clockpicker-dial-out'); + setTimeout(function(){ + self.done(); + }, duration / 2); + } + plate.prepend(canvas); + + // Reset cursor style of body + clearTimeout(movingTimer); + self.popover.removeClass('clockpicker-moving'); + + // Unbind mousemove event + $doc.off(mousemoveEvent); + }); + } + + if (svgSupported) { + // Draw clock hands and others + var canvas = popover.find('.clockpicker-canvas'), + svg = createSvgElement('svg'); + svg.setAttribute('class', 'clockpicker-svg'); + svg.setAttribute('width', diameter); + svg.setAttribute('height', diameter); + var g = createSvgElement('g'); + g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')'); + var bearing = createSvgElement('circle'); + bearing.setAttribute('class', 'clockpicker-canvas-bearing'); + bearing.setAttribute('cx', 0); + bearing.setAttribute('cy', 0); + bearing.setAttribute('r', 4); + var hand = createSvgElement('line'); + hand.setAttribute('x1', 0); + hand.setAttribute('y1', 0); + var bg = createSvgElement('circle'); + bg.setAttribute('class', 'clockpicker-canvas-bg'); + bg.setAttribute('r', tickRadius); + g.appendChild(hand); + g.appendChild(bg); + g.appendChild(bearing); + svg.appendChild(g); + canvas.append(svg); + + this.hand = hand; + this.bg = bg; + this.bearing = bearing; + this.g = g; + this.canvas = canvas; + } + + raiseCallback(this.options.init); + } + + function raiseCallback(callbackFunction) { + if (callbackFunction && typeof callbackFunction === "function") + callbackFunction(); + } + + // Default options + ClockPicker.DEFAULTS = { + 'default': '', // default time, 'now' or '13:14' e.g. + fromnow: 0, // set default time to * milliseconds from now (using with default = 'now') + donetext: 'Ok', // done button text + cleartext: 'Clear', + canceltext: 'Cancel', + autoclose: false, // auto close when minute is selected + ampmclickable: true, // set am/pm button on itself + darktheme: false, // set to dark theme + twelvehour: true, // change to 12 hour AM/PM clock from 24 hour + vibrate: true // vibrate the device when dragging clock hand + }; + + // Show or hide popover + ClockPicker.prototype.toggle = function() { + this[this.isShown ? 'hide' : 'show'](); + }; + + // Set popover position + ClockPicker.prototype.locate = function() { + var element = this.element, + popover = this.popover, + offset = element.offset(), + width = element.outerWidth(), + height = element.outerHeight(), + align = this.options.align, + self = this; + + popover.show(); + }; + + // Show popover + ClockPicker.prototype.show = function(e){ + // Not show again + if (this.isShown) { + return; + } + raiseCallback(this.options.beforeShow); + $(':input').each(function() { + $(this).attr('tabindex', -1); + }) + var self = this; + // Initialize + this.input.blur(); + this.popover.addClass('picker--opened'); + this.input.addClass('picker__input picker__input--active'); + $(document.body).css('overflow', 'hidden'); + // Get the time + var value = ((this.input.prop('value') || this.options['default'] || '') + '').split(':'); + if (this.options.twelvehour && !(typeof value[1] === 'undefined')) { + if (value[1].indexOf("AM") > 0){ + this.amOrPm = 'AM'; + } else { + this.amOrPm = 'PM'; + } + value[1] = value[1].replace("AM", "").replace("PM", ""); + } + if (value[0] === 'now') { + var now = new Date(+ new Date() + this.options.fromnow); + value = [ + now.getHours(), + now.getMinutes() + ]; + if (this.options.twelvehour) { + this.amOrPm = value[0] >= 12 && value[0] < 24 ? 'PM' : 'AM'; + } + } + this.hours = + value[0] || 0; + this.minutes = + value[1] || 0; + this.spanHours.html(this.hours); + this.spanMinutes.html(leadingZero(this.minutes)); + if (!this.isAppended) { + + // Append popover to input by default + var containerEl = document.querySelector(this.options.container); + if (this.options.container && containerEl) { + containerEl.appendChild(this.popover[0]); + } else { + this.popover.insertAfter(this.input); + } + + if (this.options.twelvehour) { + if (this.amOrPm === 'PM'){ + this.spanAmPm.children('#click-pm').addClass("text-primary"); + this.spanAmPm.children('#click-am').removeClass("text-primary"); + } else { + this.spanAmPm.children('#click-am').addClass("text-primary"); + this.spanAmPm.children('#click-pm').removeClass("text-primary"); + } + } + // Reset position when resize + $win.on('resize.clockpicker' + this.id, function() { + if (self.isShown) { + self.locate(); + } + }); + this.isAppended = true; + } + // Toggle to hours view + this.toggleView('hours'); + // Set position + this.locate(); + this.isShown = true; + // Hide when clicking or tabbing on any element except the clock and input + let $this = this; + setTimeout(function() { + $doc.on('click.clockpicker.' + $this.id + ' focusin.clockpicker.' + $this.id, function(e) { + var target = $(e.target); + if (target.closest(self.popover.find('.picker__wrap')).length === 0 && target.closest(self.input).length === 0) { + self.hide(); + } + }); + }, 100); + // Hide when ESC is pressed + $doc.on('keyup.clockpicker.' + this.id, function(e){ + if (e.keyCode === 27) { + self.hide(); + } + }); + raiseCallback(this.options.afterShow); + }; + // Hide popover + ClockPicker.prototype.hide = function() { + raiseCallback(this.options.beforeHide); + this.input.removeClass('picker__input picker__input--active'); + this.popover.removeClass('picker--opened'); + $(document.body).css('overflow', 'visible'); + this.isShown = false; + $(':input').each(function(index) { + $(this).attr('tabindex', index + 1); + }); + // Unbinding events on document + $doc.off('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id); + $doc.off('keyup.clockpicker.' + this.id); + this.popover.hide(); + raiseCallback(this.options.afterHide); + }; + // Toggle to hours or minutes view + ClockPicker.prototype.toggleView = function(view, delay) { + var raiseAfterHourSelect = false; + if (view === 'minutes' && $(this.hoursView).css("visibility") === "visible") { + raiseCallback(this.options.beforeHourSelect); + raiseAfterHourSelect = true; + } + var isHours = view === 'hours', + nextView = isHours ? this.hoursView : this.minutesView, + hideView = isHours ? this.minutesView : this.hoursView; + this.currentView = view; + + this.spanHours.toggleClass('text-primary', isHours); + this.spanMinutes.toggleClass('text-primary', ! isHours); + + // Let's make transitions + hideView.addClass('clockpicker-dial-out'); + nextView.css('visibility', 'visible').removeClass('clockpicker-dial-out'); + + // Reset clock hand + this.resetClock(delay); + + // After transitions ended + clearTimeout(this.toggleViewTimer); + this.toggleViewTimer = setTimeout(function() { + hideView.css('visibility', 'hidden'); + }, duration); + + if (raiseAfterHourSelect) { + raiseCallback(this.options.afterHourSelect); + } + }; + + // Reset clock hand + ClockPicker.prototype.resetClock = function(delay) { + var view = this.currentView, + value = this[view], + isHours = view === 'hours', + unit = Math.PI / (isHours ? 6 : 30), + radian = value * unit, + radius = isHours && value > 0 && value < 13 ? innerRadius : outerRadius, + x = Math.sin(radian) * radius, + y = - Math.cos(radian) * radius, + self = this; + + if (svgSupported && delay) { + self.canvas.addClass('clockpicker-canvas-out'); + setTimeout(function(){ + self.canvas.removeClass('clockpicker-canvas-out'); + self.setHand(x, y); + }, delay); + } else + this.setHand(x, y); + }; + + // Set clock hand to (x, y) + ClockPicker.prototype.setHand = function(x, y, roundBy5, dragging) { + var radian = Math.atan2(x, - y), + isHours = this.currentView === 'hours', + unit = Math.PI / (isHours || roundBy5? 6 : 30), + z = Math.sqrt(x * x + y * y), + options = this.options, + inner = isHours && z < (outerRadius + innerRadius) / 2, + radius = inner ? innerRadius : outerRadius, + value; + + if (options.twelvehour) { + radius = outerRadius; + } + + // Radian should in range [0, 2PI] + if (radian < 0) { + radian = Math.PI * 2 + radian; + } + + // Get the round value + value = Math.round(radian / unit); + + // Get the round radian + radian = value * unit; + + // Correct the hours or minutes + if (options.twelvehour) { + if (isHours) { + if (value === 0) + value = 12; + } else { + if (roundBy5) + value *= 5; + if (value === 60) + value = 0; + } + } else { + if (isHours) { + if (value === 12) + value = 0; + value = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12; + } else { + if (roundBy5) + value *= 5; + if (value === 60) + value = 0; + } + } + + // Once hours or minutes changed, vibrate the device + if (this[this.currentView] !== value) { + if (vibrate && this.options.vibrate) { + // Do not vibrate too frequently + if (!this.vibrateTimer) { + navigator[vibrate](10); + this.vibrateTimer = setTimeout($.proxy(function(){ + this.vibrateTimer = null; + }, this), 100); + } + } + } + + this[this.currentView] = value; + if (isHours) { + this['spanHours'].html(value); + } else { + this['spanMinutes'].html(leadingZero(value)); + } + + // If svg is not supported, just add an active class to the tick + if (!svgSupported) { + this[isHours ? 'hoursView' : 'minutesView'].find('.clockpicker-tick').each(function(){ + var tick = $(this); + tick.toggleClass('active', value === + tick.html()); + }); + return; + } + + // Set clock hand and others' position + var cx1 = Math.sin(radian) * (radius - tickRadius), + cy1 = - Math.cos(radian) * (radius - tickRadius), + cx2 = Math.sin(radian) * radius, + cy2 = - Math.cos(radian) * radius; + this.hand.setAttribute('x2', cx1); + this.hand.setAttribute('y2', cy1); + this.bg.setAttribute('cx', cx2); + this.bg.setAttribute('cy', cy2); + }; + + // Hours and minutes are selected + ClockPicker.prototype.done = function() { + raiseCallback(this.options.beforeDone); + this.hide(); + this.label.addClass('active'); + + var last = this.input.prop('value'), + value = leadingZero(this.hours) + ':' + leadingZero(this.minutes); + if (this.options.twelvehour) { + value = value + this.amOrPm; + } + + this.input.prop('value', value); + if (value !== last) { + this.input.triggerHandler('change'); + if (!this.isInput) { + this.element.trigger('change'); + } + } + + if (this.options.autoclose) + this.input.trigger('blur'); + + raiseCallback(this.options.afterDone); + }; + + // Clear input field + ClockPicker.prototype.clear = function() { + this.hide(); + this.label.removeClass('active'); + + var last = this.input.prop('value'), + value = ''; + + this.input.prop('value', value); + if (value !== last) { + this.input.triggerHandler('change'); + if (! this.isInput) { + this.element.trigger('change'); + } + } + + if (this.options.autoclose) { + this.input.trigger('blur'); + } + }; + + // Remove clockpicker from input + ClockPicker.prototype.remove = function() { + this.element.removeData('clockpicker'); + this.input.off('focus.clockpicker click.clockpicker'); + if (this.isShown) { + this.hide(); + } + if (this.isAppended) { + $win.off('resize.clockpicker' + this.id); + this.popover.remove(); + } + }; + + // Extends $.fn.clockpicker + $.fn.pickatime = function(option){ + var args = Array.prototype.slice.call(arguments, 1); + return this.each(function(){ + var $this = $(this), + data = $this.data('clockpicker'); + if (!data) { + var options = $.extend({}, ClockPicker.DEFAULTS, $this.data(), typeof option == 'object' && option); + $this.data('clockpicker', new ClockPicker($this, options)); + } else { + // Manual operatsions. show, hide, remove, e.g. + if (typeof data[option] === 'function') { + data[option].apply(data, args); + } + } + }); + }; +})(jQuery); diff --git a/js/dropdown.js b/js/dropdown.js index 6a8b8d16ef..62f6e5a27c 100644 --- a/js/dropdown.js +++ b/js/dropdown.js @@ -7,169 +7,265 @@ return this; }; - $.fn.dropdown = function (option) { + $.fn.dropdown = function (options) { var defaults = { inDuration: 300, outDuration: 225, - constrain_width: true, // Constrains width of dropdown to the activator + constrainWidth: true, // Constrains width of dropdown to the activator hover: false, gutter: 0, // Spacing from edge - belowOrigin: false + belowOrigin: false, + alignment: 'left', + stopPropagation: false }; - this.each(function(){ - var origin = $(this); - var options = $.extend({}, defaults, option); - - // Dropdown menu - var activates = $("#"+ origin.attr('data-activates')); - - function updateOptions() { - if (origin.data('induration') !== undefined) - options.inDuration = origin.data('inDuration'); - if (origin.data('outduration') !== undefined) - options.outDuration = origin.data('outDuration'); - if (origin.data('constrainwidth') !== undefined) - options.constrain_width = origin.data('constrainwidth'); - if (origin.data('hover') !== undefined) - options.hover = origin.data('hover'); - if (origin.data('gutter') !== undefined) - options.gutter = origin.data('gutter'); - if (origin.data('beloworigin') !== undefined) - options.belowOrigin = origin.data('beloworigin'); + // Open dropdown. + if (options === "open") { + this.each(function() { + $(this).trigger('open'); + }); + return false; + } + + // Close dropdown. + if (options === "close") { + this.each(function() { + $(this).trigger('close'); + }); + return false; } - updateOptions(); + this.each(function(){ + var origin = $(this); + var curr_options = $.extend({}, defaults, options); + var isFocused = false; + + // Dropdown menu + var activates = $("#"+ origin.attr('data-activates')); - // Attach dropdown to its activator - origin.after(activates); + function updateOptions() { + if (origin.data('induration') !== undefined) + curr_options.inDuration = origin.data('induration'); + if (origin.data('outduration') !== undefined) + curr_options.outDuration = origin.data('outduration'); + if (origin.data('constrainwidth') !== undefined) + curr_options.constrainWidth = origin.data('constrainwidth'); + if (origin.data('hover') !== undefined) + curr_options.hover = origin.data('hover'); + if (origin.data('gutter') !== undefined) + curr_options.gutter = origin.data('gutter'); + if (origin.data('beloworigin') !== undefined) + curr_options.belowOrigin = origin.data('beloworigin'); + if (origin.data('alignment') !== undefined) + curr_options.alignment = origin.data('alignment'); + if (origin.data('stoppropagation') !== undefined) + curr_options.stopPropagation = origin.data('stoppropagation'); + } - /* - Helper function to position and resize dropdown. - Used in hover and click handler. - */ - function placeDropdown() { - // Check html data attributes updateOptions(); - // Set Dropdown state - activates.addClass('active'); + // Attach dropdown to its activator + origin.after(activates); - // Constrain width - if (options.constrain_width === true) { - activates.css('width', origin.outerWidth()); - } - var offset = 0; - if (options.belowOrigin === true) { - offset = origin.height(); - } + /* + Helper function to position and resize dropdown. + Used in hover and click handler. + */ + function placeDropdown(eventType) { + // Check for simultaneous focus and click events. + if (eventType === 'focus') { + isFocused = true; + } - // Handle edge alignment - var offsetLeft = origin.offset().left; - var width_difference = 0; - var gutter_spacing = options.gutter; + // Check html data attributes + updateOptions(); + // Set Dropdown state + activates.addClass('active'); + origin.addClass('active'); - if (offsetLeft + activates.innerWidth() > $(window).width()) { - width_difference = origin.innerWidth() - activates.innerWidth(); - gutter_spacing = gutter_spacing * -1; - } + var originWidth = origin[0].getBoundingClientRect().width; - // Position dropdown - activates.css({ - position: 'absolute', - top: origin.position().top + offset, - left: origin.position().left + width_difference + gutter_spacing - }); + // Constrain width + if (curr_options.constrainWidth === true) { + activates.css('width', originWidth); + } else { + activates.css('white-space', 'nowrap'); + } + // Offscreen detection + var windowHeight = window.innerHeight; + var originHeight = origin.innerHeight(); + var offsetLeft = origin.offset().left; + var offsetTop = origin.offset().top - $(window).scrollTop(); + var currAlignment = curr_options.alignment; + var gutterSpacing = 0; + var leftPosition = 0; - // Show dropdown - activates.stop(true, true).css('opacity', 0) - .slideDown({ - queue: false, - duration: options.inDuration, - easing: 'easeOutCubic', - complete: function() { - $(this).css('height', ''); + // Below Origin + var verticalOffset = 0; + if (curr_options.belowOrigin === true) { + verticalOffset = originHeight; } - }) - .animate( {opacity: 1}, {queue: false, duration: options.inDuration, easing: 'easeOutSine'}); - } - function hideDropdown() { - activates.fadeOut(options.outDuration); - activates.removeClass('active'); - } + // Check for scrolling positioned container. + var scrollYOffset = 0; + var scrollXOffset = 0; + var wrapper = origin.parent(); + if (!wrapper.is('body')) { + if (wrapper[0].scrollHeight > wrapper[0].clientHeight) { + scrollYOffset = wrapper[0].scrollTop; + } + if (wrapper[0].scrollWidth > wrapper[0].clientWidth) { + scrollXOffset = wrapper[0].scrollLeft; + } + } + + + if (offsetLeft + activates.innerWidth() > $(window).width()) { + // Dropdown goes past screen on right, force right alignment + currAlignment = 'right'; - // Hover - if (options.hover) { - var open = false; - origin.unbind('click.' + origin.attr('id')); - // Hover handler to show dropdown - origin.on('mouseenter', function(e){ // Mouse over - if (open === false) { - placeDropdown(); - open = true; + } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) { + // Dropdown goes past screen on left, force left alignment + currAlignment = 'left'; } - }); - origin.on('mouseleave', function(e){ - // If hover on origin then to something other than dropdown content, then close - var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element - if(!$(toEl).closest('.dropdown-content').is(activates)) { - activates.stop(true, true); - hideDropdown(); - open = false; + // Vertical bottom offscreen detection + if (offsetTop + activates.innerHeight() > windowHeight) { + // If going upwards still goes offscreen, just crop height of dropdown. + if (offsetTop + originHeight - activates.innerHeight() < 0) { + var adjustedHeight = windowHeight - offsetTop - verticalOffset; + activates.css('max-height', adjustedHeight); + } else { + // Flow upwards. + if (!verticalOffset) { + verticalOffset += originHeight; + } + verticalOffset -= activates.innerHeight(); + } } - }); - activates.on('mouseleave', function(e){ // Mouse out - var toEl = e.toElement || e.relatedTarget; - if(!$(toEl).closest('.dropdown-button').is(origin)) { - activates.stop(true, true); - hideDropdown(); - open = false; + // Handle edge alignment + if (currAlignment === 'left') { + gutterSpacing = curr_options.gutter; + leftPosition = origin.position().left + gutterSpacing; } - }); + else if (currAlignment === 'right') { + // Material icons fix + activates + .stop(true, true) + .css({ + opacity: 0, + left: 0 + }) - // Click - } else { + var offsetRight = origin.position().left + originWidth - activates.width(); + gutterSpacing = -curr_options.gutter; + leftPosition = offsetRight + gutterSpacing; + } - // Click handler to show dropdown - origin.unbind('click.' + origin.attr('id')); - origin.bind('click.'+origin.attr('id'), function(e){ + // Position dropdown + activates.css({ + position: 'absolute', + top: origin.position().top + verticalOffset + scrollYOffset, + left: leftPosition + scrollXOffset + }); - if ( origin[0] == e.currentTarget && ($(e.target).closest('.dropdown-content').length === 0) ) { - e.preventDefault(); // Prevents button click from moving window - placeDropdown(); + // Show dropdown + activates + .slideDown({ + queue: false, + duration: curr_options.inDuration, + easing: 'easeOutCubic', + complete: function() { + $(this).css('height', ''); + } + }) + .animate( {opacity: 1}, {queue: false, duration: curr_options.inDuration, easing: 'easeOutSine'}); - } - // If origin is clicked and menu is open, close menu - else { - if (origin.hasClass('active')) { + // Add click close handler to document + setTimeout(function() { + $(document).on('click.'+ activates.attr('id'), function (e) { hideDropdown(); - $(document).unbind('click.' + activates.attr('id')); + $(document).off('click.'+ activates.attr('id')); + }); + }, 0); + } + + function hideDropdown() { + // Check for simultaneous focus and click events. + isFocused = false; + activates.fadeOut(curr_options.outDuration); + activates.removeClass('active'); + origin.removeClass('active'); + $(document).off('click.'+ activates.attr('id')); + setTimeout(function() { activates.css('max-height', ''); }, curr_options.outDuration); + } + + // Hover + if (curr_options.hover) { + var open = false; + origin.off('click.' + origin.attr('id')); + // Hover handler to show dropdown + origin.on('mouseenter', function(e){ // Mouse over + if (open === false) { + placeDropdown(); + open = true; } - } - // If menu open, add click close handler to document - if (activates.hasClass('active')) { - $(document).bind('click.'+ activates.attr('id'), function (e) { - if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length > 0) ) { + }); + origin.on('mouseleave', function(e){ + // If hover on origin then to something other than dropdown content, then close + var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element + if(!$(toEl).closest('.dropdown-content').is(activates)) { + activates.stop(true, true); + hideDropdown(); + open = false; + } + }); + + activates.on('mouseleave', function(e){ // Mouse out + var toEl = e.toElement || e.relatedTarget; + if(!$(toEl).closest('.dropdown-button').is(origin)) { + activates.stop(true, true); + hideDropdown(); + open = false; + } + }); + + // Click + } else { + // Click handler to show dropdown + origin.off('click.' + origin.attr('id')); + origin.on('click.'+origin.attr('id'), function(e){ + if (!isFocused) { + if ( origin[0] == e.currentTarget && + !origin.hasClass('active') && + ($(e.target).closest('.dropdown-content').length === 0)) { + e.preventDefault(); // Prevents button click from moving window + if (curr_options.stopPropagation) { + e.stopPropagation(); + } + placeDropdown('click'); + } + // If origin is clicked and menu is open, close menu + else if (origin.hasClass('active')) { hideDropdown(); - $(document).unbind('click.' + activates.attr('id')); + $(document).off('click.'+ activates.attr('id')); } - }); - } - }); + } + }); - } // End else + } // End else - // Listen to open and close event - useful for select component - origin.on('open', placeDropdown); - origin.on('close', hideDropdown); + // Listen to open and close event - useful for select component + origin.on('open', function(e, eventType) { + placeDropdown(eventType); + }); + origin.on('close', hideDropdown); - }); + }); }; // End dropdown plugin $(document).ready(function(){ diff --git a/js/forms.js b/js/forms.js index b1f36cf449..ac701d0634 100644 --- a/js/forms.js +++ b/js/forms.js @@ -5,11 +5,13 @@ Materialize.updateTextFields = function() { var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea'; $(input_selector).each(function(index, element) { - if ($(element).val().length > 0 || $(this).attr('placeholder') !== undefined || $(element)[0].validity.badInput === true) { - $(this).siblings('label').addClass('active'); - } - else { - $(this).siblings('label, i').removeClass('active'); + var $this = $(this); + if ($(element).val().length > 0 || $(element).is(':focus') || element.autofocus || $this.attr('placeholder') !== undefined) { + $this.siblings('label').addClass('active'); + } else if ($(element)[0].validity) { + $this.siblings('label').toggleClass('active', $(element)[0].validity.badInput === true); + } else { + $this.siblings('label').removeClass('active'); } }); }; @@ -17,9 +19,6 @@ // Text based inputs var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea'; - // Handle HTML5 autofocus - $('input[autofocus]').siblings('label, i').addClass('active'); - // Add active if form auto complete $(document).on('change', input_selector, function () { if($(this).val().length !== 0 || $(this).attr('placeholder') !== undefined) { @@ -40,7 +39,7 @@ formReset.find(input_selector).removeClass('valid').removeClass('invalid'); formReset.find(input_selector).each(function () { if ($(this).attr('value') === '') { - $(this).siblings('label, i').removeClass('active'); + $(this).siblings('label').removeClass('active'); } }); @@ -54,27 +53,28 @@ // Add active when element has focus $(document).on('focus', input_selector, function () { - $(this).siblings('label, i').addClass('active'); + $(this).siblings('label, .prefix').addClass('active'); }); $(document).on('blur', input_selector, function () { var $inputElement = $(this); + var selector = ".prefix"; + if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') === undefined) { - $inputElement.siblings('label, i').removeClass('active'); + selector += ", label"; } - if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') !== undefined) { - $inputElement.siblings('i').removeClass('active'); - } + $inputElement.siblings(selector).removeClass('active'); + validate_field($inputElement); }); window.validate_field = function(object) { - var hasLength = object.attr('length') !== undefined; - var lenAttr = parseInt(object.attr('length')); + var hasLength = object.attr('data-length') !== undefined; + var lenAttr = parseInt(object.attr('data-length')); var len = object.val().length; - if (object.val().length === 0 && object[0].validity.badInput === false) { + if (object.val().length === 0 && object[0].validity.badInput === false && !object.is(':required')) { if (object.hasClass('validate')) { object.removeClass('valid'); object.removeClass('invalid'); @@ -95,6 +95,20 @@ } }; + // Radio and Checkbox focus class + var radio_checkbox = 'input[type=radio], input[type=checkbox]'; + $(document).on('keyup.radio', radio_checkbox, function(e) { + // TAB, check if tabbing to radio or checkbox. + if (e.which === 9) { + $(this).addClass('tabbed'); + var $this = $(this); + $this.one('blur', function(e) { + + $(this).removeClass('tabbed'); + }); + return; + } + }); // Textarea Auto Resize var hiddenDiv = $('.hiddendiv').first(); @@ -109,17 +123,23 @@ var fontFamily = $textarea.css('font-family'); var fontSize = $textarea.css('font-size'); + var lineHeight = $textarea.css('line-height'); + var padding = $textarea.css('padding'); if (fontSize) { hiddenDiv.css('font-size', fontSize); } if (fontFamily) { hiddenDiv.css('font-family', fontFamily); } + if (lineHeight) { hiddenDiv.css('line-height', lineHeight); } + if (padding) { hiddenDiv.css('padding', padding); } - if ($textarea.attr('wrap') === "off") { - hiddenDiv.css('overflow-wrap', "normal") - .css('white-space', "pre"); + // Set original-height, if none + if (!$textarea.data('original-height')) { + $textarea.data('original-height', $textarea.height()); } - - + if ($textarea.attr('wrap') === 'off') { + hiddenDiv.css('overflow-wrap', 'normal') + .css('white-space', 'pre'); + } hiddenDiv.text($textarea.val() + '\n'); var content = hiddenDiv.html().replace(/\n/g, '
                    '); @@ -136,23 +156,39 @@ hiddenDiv.css('width', $(window).width()/2); } - $textarea.css('height', hiddenDiv.height()); + + /** + * Resize if the new height is greater than the + * original height of the textarea + */ + if ($textarea.data('original-height') <= hiddenDiv.height()) { + $textarea.css('height', hiddenDiv.height()); + } else if ($textarea.val().length < $textarea.data('previous-length')) { + /** + * In case the new height is less than original height, it + * means the textarea has less text than before + * So we set the height to the original one + */ + $textarea.css('height', $textarea.data('original-height')); + } + $textarea.data('previous-length', $textarea.val().length); } $(text_area_selector).each(function () { var $textarea = $(this); - if ($textarea.val().length) { - textareaAutoResize($textarea); - } + /** + * Instead of resizing textarea on document load, + * store the original height and the original length + */ + $textarea.data('original-height', $textarea.height()); + $textarea.data('previous-length', $textarea.val().length); }); $('body').on('keyup keydown autoresize', text_area_selector, function () { textareaAutoResize($(this)); }); - // File Input Path - $(document).on('change', '.file-field input[type="file"]', function () { var file_field = $(this).closest('.file-field'); var path_input = file_field.find('input.file-path'); @@ -165,7 +201,6 @@ path_input.trigger('change'); }); - /**************** * Range Input * ****************/ @@ -179,19 +214,40 @@ $(this).after(thumb); }); + var showRangeBubble = function(thumb) { + var paddingLeft = parseInt(thumb.parent().css('padding-left')); + var marginLeft = (-7 + paddingLeft) + 'px'; + thumb.velocity({ height: "30px", width: "30px", top: "-30px", marginLeft: marginLeft}, { duration: 300, easing: 'easeOutExpo' }); + }; + + var calcRangeOffset = function(range) { + var width = range.width() - 15; + var max = parseFloat(range.attr('max')); + var min = parseFloat(range.attr('min')); + var percent = (parseFloat(range.val()) - min) / (max - min); + return percent * width; + } + var range_wrapper = '.range-field'; $(document).on('change', range_type, function(e) { var thumb = $(this).siblings('.thumb'); thumb.find('.value').html($(this).val()); + + if (!thumb.hasClass('active')) { + showRangeBubble(thumb); + } + + var offsetLeft = calcRangeOffset($(this)); + thumb.addClass('active').css('left', offsetLeft); }); - $(document).on('input mousedown touchstart', range_type, function(e) { + $(document).on('mousedown touchstart', range_type, function(e) { var thumb = $(this).siblings('.thumb'); // If thumb indicator does not exist yet, create it if (thumb.length <= 0) { thumb = $(''); - $(this).append(thumb); + $(this).after(thumb); } // Set indicator value @@ -201,27 +257,13 @@ $(this).addClass('active'); if (!thumb.hasClass('active')) { - thumb.velocity({ height: "30px", width: "30px", top: "-20px", marginLeft: "-15px"}, { duration: 300, easing: 'easeOutExpo' }); - } - - if(e.pageX === undefined || e.pageX === null){//mobile - left = e.originalEvent.touches[0].pageX - $(this).offset().left; - } - else{ // desktop - left = e.pageX - $(this).offset().left; + showRangeBubble(thumb); } - var width = $(this).outerWidth(); - if (left < 0) { - left = 0; + if (e.type !== 'input') { + var offsetLeft = calcRangeOffset($(this)); + thumb.addClass('active').css('left', offsetLeft); } - else if (left > width) { - left = width; - } - thumb.addClass('active').css('left', left); - thumb.find('.value').html($(this).val()); - - }); $(document).on('mouseup touchend', range_wrapper, function() { @@ -229,28 +271,18 @@ $(this).removeClass('active'); }); - $(document).on('mousemove touchmove', range_wrapper, function(e) { + $(document).on('input mousemove touchmove', range_wrapper, function(e) { var thumb = $(this).children('.thumb'); var left; + var input = $(this).find(range_type); + if (range_mousedown) { if (!thumb.hasClass('active')) { - thumb.velocity({ height: '30px', width: '30px', top: '-20px', marginLeft: '-15px'}, { duration: 300, easing: 'easeOutExpo' }); - } - if (e.pageX === undefined || e.pageX === null) { //mobile - left = e.originalEvent.touches[0].pageX - $(this).offset().left; + showRangeBubble(thumb); } - else{ // desktop - left = e.pageX - $(this).offset().left; - } - var width = $(this).outerWidth(); - if (left < 0) { - left = 0; - } - else if (left > width) { - left = width; - } - thumb.addClass('active').css('left', left); + var offsetLeft = calcRangeOffset(input); + thumb.addClass('active').css('left', offsetLeft); thumb.find('.value').html(thumb.siblings(range_type).val()); } }); @@ -259,30 +291,211 @@ if (!range_mousedown) { var thumb = $(this).children('.thumb'); + var paddingLeft = parseInt($(this).css('padding-left')); + var marginLeft = (7 + paddingLeft) + 'px'; if (thumb.hasClass('active')) { - thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: '-6px'}, { duration: 100 }); + thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: marginLeft}, { duration: 100 }); } thumb.removeClass('active'); } }); - }); // End of $(document).ready + /************************** + * Auto complete plugin * + *************************/ + $.fn.autocomplete = function (options) { + // Defaults + var defaults = { + data: {}, + limit: Infinity, + onAutocomplete: null, + minLength: 1 + }; + + options = $.extend(defaults, options); + + return this.each(function() { + var $input = $(this); + var data = options.data, + count = 0, + activeIndex = -1, + oldVal, + $inputDiv = $input.closest('.input-field'); // Div to append on + + // Check if data isn't empty + if (!$.isEmptyObject(data)) { + var $autocomplete = $(''); + var $oldAutocomplete; + + // Append autocomplete element. + // Prevent double structure init. + if ($inputDiv.length) { + $oldAutocomplete = $inputDiv.children('.autocomplete-content.dropdown-content').first(); + if (!$oldAutocomplete.length) { + $inputDiv.append($autocomplete); // Set ul in body + } + } else { + $oldAutocomplete = $input.next('.autocomplete-content.dropdown-content'); + if (!$oldAutocomplete.length) { + $input.after($autocomplete); + } + } + if ($oldAutocomplete.length) { + $autocomplete = $oldAutocomplete; + } + // Highlight partial match. + var highlight = function(string, $el) { + var img = $el.find('img'); + var matchStart = $el.text().toLowerCase().indexOf("" + string.toLowerCase() + ""), + matchEnd = matchStart + string.length - 1, + beforeMatch = $el.text().slice(0, matchStart), + matchText = $el.text().slice(matchStart, matchEnd + 1), + afterMatch = $el.text().slice(matchEnd + 1); + $el.html("" + beforeMatch + "" + matchText + "" + afterMatch + ""); + if (img.length) { + $el.prepend(img); + } + }; + + // Reset current element position + var resetCurrentElement = function() { + activeIndex = -1; + $autocomplete.find('.active').removeClass('active'); + } + // Remove autocomplete elements + var removeAutocomplete = function() { + $autocomplete.empty(); + resetCurrentElement(); + oldVal = undefined; + }; + + $input.off('blur.autocomplete').on('blur.autocomplete', function() { + removeAutocomplete(); + }); + + // Perform search + $input.off('keyup.autocomplete focus.autocomplete').on('keyup.autocomplete focus.autocomplete', function (e) { + // Reset count. + count = 0; + var val = $input.val().toLowerCase(); + + // Don't capture enter or arrow key usage. + if (e.which === 13 || + e.which === 38 || + e.which === 40) { + return; + } + + + // Check if the input isn't empty + if (oldVal !== val) { + removeAutocomplete(); + + if (val.length >= options.minLength) { + for(var key in data) { + if (data.hasOwnProperty(key) && + key.toLowerCase().indexOf(val) !== -1) { + // Break if past limit + if (count >= options.limit) { + break; + } + + var autocompleteOption = $('
                  • '); + if (!!data[key]) { + autocompleteOption.append(''+ key +''); + } else { + autocompleteOption.append(''+ key +''); + } + + $autocomplete.append(autocompleteOption); + highlight(val, autocompleteOption); + count++; + } + } + } + } + + // Update oldVal + oldVal = val; + }); + + $input.off('keydown.autocomplete').on('keydown.autocomplete', function (e) { + // Arrow keys and enter key usage + var keyCode = e.which, + liElement, + numItems = $autocomplete.children('li').length, + $active = $autocomplete.children('.active').first(); + + // select element on Enter + if (keyCode === 13 && activeIndex >= 0) { + liElement = $autocomplete.children('li').eq(activeIndex); + if (liElement.length) { + liElement.trigger('mousedown.autocomplete'); + e.preventDefault(); + } + return; + } + + // Capture up and down key + if ( keyCode === 38 || keyCode === 40 ) { + e.preventDefault(); + + if (keyCode === 38 && + activeIndex > 0) { + activeIndex--; + } + + if (keyCode === 40 && + activeIndex < (numItems - 1)) { + activeIndex++; + } + + $active.removeClass('active'); + if (activeIndex >= 0) { + $autocomplete.children('li').eq(activeIndex).addClass('active'); + } + } + }); + + // Set input value + $autocomplete.off('mousedown.autocomplete touchstart.autocomplete').on('mousedown.autocomplete touchstart.autocomplete', 'li', function () { + var text = $(this).text().trim(); + $input.val(text); + $input.trigger('change'); + removeAutocomplete(); + + // Handle onAutocomplete callback. + if (typeof(options.onAutocomplete) === "function") { + options.onAutocomplete.call(this, text); + } + }); + + // Empty data + } else { + $input.off('keyup.autocomplete focus.autocomplete'); + } + }); + }; + }); // End of $(document).ready - // Select Plugin + /******************* + * Select Plugin * + ******************/ $.fn.material_select = function (callback) { $(this).each(function(){ - $select = $(this); + var $select = $(this); - if ( $select.hasClass('browser-default')) { + if ($select.hasClass('browser-default')) { return; // Continue to next (return false breaks out of entire loop) } - // Tear down structure if Select needs to be rebuilt - var lastID = $select.data('select-id'); + var multiple = $select.attr('multiple') ? true : false, + lastID = $select.attr('data-select-id'); // Tear down structure if Select needs to be rebuilt + if (lastID) { $select.parent().find('span.caret').remove(); $select.parent().find('input').remove(); @@ -293,66 +506,120 @@ // If destroying the select, remove the selelct-id and reset it to it's uninitialized state. if(callback === 'destroy') { - $select.data('select-id', null).removeClass('initialized'); - return; + $select.removeAttr('data-select-id').removeClass('initialized'); + $(window).off('click.select'); + return; } var uniqueID = Materialize.guid(); - $select.data('select-id', uniqueID); + $select.attr('data-select-id', uniqueID); var wrapper = $('
                    '); - wrapper.addClass($select.attr('class')); - var options = $(''); - var selectOptions = $select.children('option'); - - var label; - if ($select.find('option:selected') !== undefined) { - label = $select.find('option:selected'); - } - else { - label = options.first(); - } + // to fix Chrome 73 bug + wrapper.click(function (e) { + e.stopPropagation(); + }); - // Create Dropdown structure - selectOptions.each(function () { + wrapper.addClass($select.attr('class')); + if ($select.is(':disabled')) + wrapper.addClass('disabled'); + var options = $(''), + selectChildren = $select.children('option, optgroup'), + valuesSelected = [], + optionsHover = false; + + var label = $select.find('option:selected').html() || $select.find('option:first').html() || ""; + + // Function that renders and appends the option taking into + // account type and possible image icon. + var appendOptionWithIcon = function(select, option, type) { // Add disabled attr if disabled - options.append($('
                  • ' + $(this).html() + '
                  • ')); - }); + var disabledClass = (option.is(':disabled')) ? 'disabled ' : ''; + var optgroupClass = (type === 'optgroup-option') ? 'optgroup-option ' : ''; + var multipleCheckbox = multiple ? '' : ''; + + // add icons + var icon_url = option.data('icon'); + var classes = option.attr('class'); + if (!!icon_url) { + var classString = ''; + if (!!classes) classString = ' class="' + classes + '"'; + + // Check for multiple type. + options.append($('
                  • ' + multipleCheckbox + option.html() + '
                  • ')); + return true; + } + + // Check for multiple type. + options.append($('
                  • ' + multipleCheckbox + option.html() + '
                  • ')); + }; + /* Create dropdown structure. */ + if (selectChildren.length) { + selectChildren.each(function() { + if ($(this).is('option')) { + // Direct descendant option. + if (multiple) { + appendOptionWithIcon($select, $(this), 'multiple'); + + } else { + appendOptionWithIcon($select, $(this)); + } + } else if ($(this).is('optgroup')) { + // Optgroup. + var selectOptions = $(this).children('option'); + options.append($('
                  • ' + $(this).attr('label') + '
                  • ')); + + selectOptions.each(function() { + appendOptionWithIcon($select, $(this), 'optgroup-option'); + }); + } + }); + } - options.find('li').each(function (i) { - var $curr_select = $select; - $(this).click(function () { + options.find('li:not(.optgroup)').each(function (i) { + $(this).click(function (e) { // Check if option element is disabled - if (!$(this).hasClass('disabled')) { - $curr_select.find('option').eq(i).prop('selected', true); + if (!$(this).hasClass('disabled') && !$(this).hasClass('optgroup')) { + var selected = true; + + if (multiple) { + $('input[type="checkbox"]', this).prop('checked', function(i, v) { return !v; }); + selected = toggleEntryFromArray(valuesSelected, i, $select); + $newSelect.trigger('focus'); + } else { + options.find('li').removeClass('active'); + $(this).toggleClass('active'); + $newSelect.val($(this).text()); + } + + activateOption(options, $(this)); + $select.find('option').eq(i).prop('selected', selected); // Trigger onchange() event - $curr_select.trigger('change'); - $curr_select.siblings('input.select-dropdown').val($(this).text()); + $select.trigger('change'); if (typeof callback !== 'undefined') callback(); } - }); + e.stopPropagation(); + }); }); // Wrap Elements $select.wrap(wrapper); // Add Select Display Element var dropdownIcon = $(''); - if ( $select.is(':disabled') ) - dropdownIcon.addClass('disabled'); // escape double quotes - var sanitizedLabelHtml = label.html().replace(/"/g, '"'); + var sanitizedLabelHtml = label.replace(/"/g, '"'); var $newSelect = $(''); $select.before($newSelect); $newSelect.before(dropdownIcon); - $('body').append(options); + $newSelect.after(options); // Check if section element is disabled if (!$select.is(':disabled')) { - $newSelect.dropdown({"hover": false}); + $newSelect.dropdown({'hover': false}); } // Copy tabindex @@ -362,103 +629,189 @@ $select.addClass('initialized'); - $newSelect.on('focus', function(){ - $(this).trigger('open'); - label = $(this).val(); - selectedOption = options.find('li').filter(function() { - return $(this).text().toLowerCase() === label.toLowerCase(); - })[0]; - activateOption(options, selectedOption); + $newSelect.on({ + 'focus': function (){ + if ($('ul.select-dropdown').not(options[0]).is(':visible')) { + $('input.select-dropdown').trigger('close'); + $(window).off('click.select'); + } + if (!options.is(':visible')) { + $(this).trigger('open', ['focus']); + var label = $(this).val(); + if (multiple && label.indexOf(',') >= 0) { + label = label.split(',')[0]; + } + + var selectedOption = options.find('li').filter(function() { + return $(this).text().toLowerCase() === label.toLowerCase(); + })[0]; + activateOption(options, selectedOption, true); + + $(window).off('click.select').on('click.select', function () { + multiple && (optionsHover || $newSelect.trigger('close')); + $(window).off('click.select'); + }); + } + }, + 'click': function (e){ + e.stopPropagation(); + } }); - $newSelect.on('blur', function(){ - $(this).trigger('close'); + $newSelect.on('blur', function() { + if (!multiple) { + $(this).trigger('close'); + $(window).off('click.select'); + } + options.find('li.selected').removeClass('selected'); }); - // Make option as selected and scroll to selected position - activateOption = function(collection, newOption) { - collection.find('li.active').removeClass('active'); - $(newOption).addClass('active'); - collection.scrollTo(newOption); - }; + options.hover(function() { + optionsHover = true; + }, function () { + optionsHover = false; + }); - // Allow user to search by typing - // this array is cleared after 1 second - filterQuery = []; + // Add initial multiple selections. + if (multiple) { + $select.find("option:selected:not(:disabled)").each(function () { + var index = this.index; - onKeyDown = function(event){ - // TAB - switch to another input - if(event.which == 9){ - $newSelect.trigger('close'); - return; - } + toggleEntryFromArray(valuesSelected, index, $select); + options.find("li:not(.optgroup)").eq(index).find(":checkbox").prop("checked", true); + }); + } - // ARROW DOWN WHEN SELECT IS CLOSED - open select options - if(event.which == 40 && !options.is(":visible")){ - $newSelect.trigger('open'); - return; + /** + * Make option as selected and scroll to selected position + * @param {jQuery} collection Select options jQuery element + * @param {Element} newOption element of the new option + * @param {Boolean} firstActivation If on first activation of select + */ + var activateOption = function(collection, newOption, firstActivation) { + if (newOption) { + collection.find('li.selected').removeClass('selected'); + var option = $(newOption); + option.addClass('selected'); + if (!multiple || !!firstActivation) { + options.scrollTo(option); + } } + }; - // ENTER WHEN SELECT IS CLOSED - submit form - if(event.which == 13 && !options.is(":visible")){ - return; - } + // Allow user to search by typing + // this array is cleared after 1 second + var filterQuery = [], + onKeyDown = function(e){ + // TAB - switch to another input + if(e.which == 9){ + $newSelect.trigger('close'); + return; + } + + // ARROW DOWN WHEN SELECT IS CLOSED - open select options + if(e.which == 40 && !options.is(':visible')){ + $newSelect.trigger('open'); + return; + } + + // ENTER WHEN SELECT IS CLOSED - submit form + if(e.which == 13 && !options.is(':visible')){ + return; + } + + e.preventDefault(); + + // CASE WHEN USER TYPE LETTERS + var letter = String.fromCharCode(e.which).toLowerCase(), + nonLetters = [9,13,27,38,40]; + if (letter && (nonLetters.indexOf(e.which) === -1)) { + filterQuery.push(letter); + + var string = filterQuery.join(''), + newOption = options.find('li').filter(function() { + return $(this).text().toLowerCase().indexOf(string) === 0; + })[0]; + + if (newOption) { + activateOption(options, newOption); + } + } + + // ENTER - select option and close when select options are opened + if (e.which == 13) { + var activeOption = options.find('li.selected:not(.disabled)')[0]; + if(activeOption){ + $(activeOption).trigger('click'); + if (!multiple) { + $newSelect.trigger('close'); + } + } + } + + // ARROW DOWN - move to next not disabled option + if (e.which == 40) { + if (options.find('li.selected').length) { + newOption = options.find('li.selected').next('li:not(.disabled)')[0]; + } else { + newOption = options.find('li:not(.disabled)')[0]; + } + activateOption(options, newOption); + } + + // ESC - close options + if (e.which == 27) { + $newSelect.trigger('close'); + } + + // ARROW UP - move to previous not disabled option + if (e.which == 38) { + newOption = options.find('li.selected').prev('li:not(.disabled)')[0]; + if(newOption) + activateOption(options, newOption); + } + + // Automaticaly clean filter query so user can search again by starting letters + setTimeout(function(){ filterQuery = []; }, 1000); + }; - event.preventDefault(); + $newSelect.on('keydown', onKeyDown); + }); - // CASE WHEN USER TYPE LETTERS - letter = String.fromCharCode(event.which).toLowerCase(); - var nonLetters = [9,13,27,38,40]; - if (letter && (nonLetters.indexOf(event.which) === -1)){ - filterQuery.push(letter); + function toggleEntryFromArray(entriesArray, entryIndex, select) { + var index = entriesArray.indexOf(entryIndex), + notAdded = index === -1; - string = filterQuery.join(""); + if (notAdded) { + entriesArray.push(entryIndex); + } else { + entriesArray.splice(index, 1); + } - newOption = options.find('li').filter(function() { - return $(this).text().toLowerCase().indexOf(string) === 0; - })[0]; + select.siblings('ul.dropdown-content').find('li:not(.optgroup)').eq(entryIndex).toggleClass('active'); - if(newOption){ - activateOption(options, newOption); - } - } + // use notAdded instead of true (to detect if the option is selected or not) + select.find('option').eq(entryIndex).prop('selected', notAdded); + setValueToInput(entriesArray, select); - // ENTER - select option and close when select options are opened - if(event.which == 13){ - activeOption = options.find('li.active:not(.disabled)')[0]; - if(activeOption){ - $(activeOption).trigger('click'); - $newSelect.trigger('close'); - } - } + return notAdded; + } - // ARROW DOWN - move to next not disabled option - if(event.which == 40){ - newOption = options.find('li.active').next('li:not(.disabled)')[0]; - if(newOption){ - activateOption(options, newOption); - } - } + function setValueToInput(entriesArray, select) { + var value = ''; - // ESC - close options - if(event.which == 27){ - $newSelect.trigger('close'); - } + for (var i = 0, count = entriesArray.length; i < count; i++) { + var text = select.find('option').eq(entriesArray[i]).text(); - // ARROW UP - move to previous not disabled option - if(event.which == 38){ - newOption = options.find('li.active').prev('li:not(.disabled)')[0]; - if(newOption){ - activateOption(options, newOption); - } - } + i === 0 ? value += text : value += ', ' + text; + } - // Automaticaly clean filter query so user can search again by starting letters - setTimeout(function(){ filterQuery = []; }, 1000); - }; + if (value === '') { + value = select.find('option:disabled').eq(0).text(); + } - $newSelect.on('keydown', onKeyDown); - }); + select.siblings('input.select-dropdown').val(value); + } }; }( jQuery )); diff --git a/js/global.js b/js/global.js index a2603be46f..106e10d122 100644 --- a/js/global.js +++ b/js/global.js @@ -1,6 +1,75 @@ -window.Materialize = {}; +// Required for Meteor package, the use of window prevents export by Meteor +(function(window){ + if(window.Package){ + Materialize = {}; + } else { + window.Materialize = {}; + } +})(window); + +if (typeof exports !== 'undefined' && !exports.nodeType) { + if (typeof module !== 'undefined' && !module.nodeType && module.exports) { + exports = module.exports = Materialize; + } + exports.default = Materialize; +} + +/* + * raf.js + * https://github.com/ngryman/raf.js + * + * original requestAnimationFrame polyfill by Erik Möller + * inspired from paul_irish gist and post + * + * Copyright (c) 2013 ngryman + * Licensed under the MIT license. + */ +(function(window) { + var lastTime = 0, + vendors = ['webkit', 'moz'], + requestAnimationFrame = window.requestAnimationFrame, + cancelAnimationFrame = window.cancelAnimationFrame, + i = vendors.length; + + // try to un-prefix existing raf + while (--i >= 0 && !requestAnimationFrame) { + requestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame']; + cancelAnimationFrame = window[vendors[i] + 'CancelRequestAnimationFrame']; + } + + // polyfill with setTimeout fallback + // heavily inspired from @darius gist mod: https://gist.github.com/paulirish/1579671#comment-837945 + if (!requestAnimationFrame || !cancelAnimationFrame) { + requestAnimationFrame = function(callback) { + var now = +Date.now(), + nextTime = Math.max(lastTime + 16, now); + return setTimeout(function() { + callback(lastTime = nextTime); + }, nextTime - now); + }; + + cancelAnimationFrame = clearTimeout; + } + + // export to window + window.requestAnimationFrame = requestAnimationFrame; + window.cancelAnimationFrame = cancelAnimationFrame; +}(window)); + +/** + * Generate approximated selector string for a jQuery object + * @param {jQuery} obj jQuery object to be parsed + * @returns {string} + */ +Materialize.objectSelectorString = function(obj) { + var tagStr = obj.prop('tagName') || ''; + var idStr = obj.attr('id') || ''; + var classStr = obj.attr('class') || ''; + return (tagStr + idStr + classStr).replace(/\s/g,''); +}; + -// Unique ID +// Unique Random ID Materialize.guid = (function() { function s4() { return Math.floor((1 + Math.random()) * 0x10000) @@ -13,6 +82,15 @@ Materialize.guid = (function() { }; })(); +/** + * Escapes hash from special characters + * @param {string} hash String returned from this.hash + * @returns {string} + */ +Materialize.escapeHash = function(hash) { + return hash.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" ); +}; + Materialize.elementOrParentIsFixed = function(element) { var $element = $(element); var $checkElements = $element.add($element.parents()); @@ -26,11 +104,74 @@ Materialize.elementOrParentIsFixed = function(element) { return isFixed; }; + +/** + * Get time in ms + * @license https://raw.github.com/jashkenas/underscore/master/LICENSE + * @type {function} + * @return {number} + */ +var getTime = (Date.now || function () { + return new Date().getTime(); +}); + + +/** + * Returns a function, that, when invoked, will only be triggered at most once + * during a given window of time. Normally, the throttled function will run + * as much as it can, without ever going more than once per `wait` duration; + * but if you'd like to disable the execution on the leading edge, pass + * `{leading: false}`. To disable execution on the trailing edge, ditto. + * @license https://raw.github.com/jashkenas/underscore/master/LICENSE + * @param {function} func + * @param {number} wait + * @param {Object=} options + * @returns {Function} + */ +Materialize.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + options || (options = {}); + var later = function () { + previous = options.leading === false ? 0 : getTime(); + timeout = null; + result = func.apply(context, args); + context = args = null; + }; + return function () { + var now = getTime(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; +}; + + // Velocity has conflicts when loaded with jQuery, this will check for it +// First, check if in noConflict mode var Vel; -if ($) { +if (jQuery) { + Vel = jQuery.Velocity; +} else if ($) { Vel = $.Velocity; -} -else { +} else { Vel = Velocity; } + +if (Vel) { + Materialize.Vel = Vel; +} else { + Materialize.Vel = Velocity; +} diff --git a/js/init.js b/js/init.js index f5e68fe4ee..5ff35f4145 100644 --- a/js/init.js +++ b/js/init.js @@ -29,18 +29,33 @@ }); }); - // Floating-Fixed table of contents - if ($('nav').length) { - $('.toc-wrapper').pushpin({ top: $('nav').height() }); - } - else if ($('#index-banner').length) { - $('.toc-wrapper').pushpin({ top: $('#index-banner').height() }); - } - else { - $('.toc-wrapper').pushpin({ top: 0 }); - } - + setTimeout(function() { + var tocWrapperHeight = 260; // Max height of ads. + var tocHeight = $('.toc-wrapper .table-of-contents').length ? $('.toc-wrapper .table-of-contents').height() : 0; + var socialHeight = 95; // Height of unloaded social media in footer. + var footerOffset = $('body > footer').first().length ? $('body > footer').first().offset().top : 0; + var bottomOffset = footerOffset - socialHeight - tocHeight - tocWrapperHeight; + + if ($('nav').length) { + $('.toc-wrapper').pushpin({ + top: $('nav').height(), + bottom: bottomOffset + }); + } + else if ($('#index-banner').length) { + $('.toc-wrapper').pushpin({ + top: $('#index-banner').height(), + bottom: bottomOffset + }); + } + else { + $('.toc-wrapper').pushpin({ + top: 0, + bottom: bottomOffset + }); + } + }, 100); // BuySellAds Detection @@ -63,6 +78,12 @@ checkForChanges(); + // BuySellAds Demos close button. + $('.buysellads.buysellads-demo .close').on('click', function() { + $(this).parent().remove(); + }); + + // Github Latest Commit if ($('.github-commit').length) { // Checks if widget div exists (Index only) $.ajax({ @@ -122,14 +143,71 @@ indeterminateCheckbox.indeterminate = true; + // Pushpin Demo Init + if ($('.pushpin-demo-nav').length) { + $('.pushpin-demo-nav').each(function() { + var $this = $(this); + var $target = $('#' + $(this).attr('data-target')); + $this.pushpin({ + top: $target.offset().top, + bottom: $target.offset().top + $target.outerHeight() - $this.height() + }); + }); + } + + // CSS Transitions Demo Init + if ($('#scale-demo').length && + $('#scale-demo-trigger').length) { + $('#scale-demo-trigger').click(function() { + $('#scale-demo').toggleClass('scale-out'); + }); + } + + // Swipeable Tabs Demo Init + if ($('#tabs-swipe-demo').length) { + $('#tabs-swipe-demo').tabs({ 'swipeable': true }); + } + // Plugin initialization - $('.slider').slider({full_width: true}); + $('.carousel.carousel-slider').carousel({fullWidth: true}); + $('.carousel').carousel(); + $('.slider').slider(); $('.parallax').parallax(); - $('.modal-trigger').leanModal(); + $('.modal').modal(); $('.scrollspy').scrollSpy(); $('.button-collapse').sideNav({'edge': 'left'}); $('.datepicker').pickadate({selectYears: 20}); + $('.timepicker').pickatime(); $('select').not('.disabled').material_select(); + $('input.autocomplete').autocomplete({ + data: {"Apple": null, "Microsoft": null, "Google": 'http://placehold.it/250x250'}, + }); + + // Chips + $('.chips').material_chip(); + $('.chips-initial').material_chip({ + readOnly: true, + data: [{ + tag: 'Apple', + }, { + tag: 'Microsoft', + }, { + tag: 'Google', + }] + }); + $('.chips-placeholder').material_chip({ + placeholder: 'Enter a tag', + secondaryPlaceholder: '+Tag', + }); + $('.chips-autocomplete').material_chip({ + autocompleteOptions: { + data: { + 'Apple': null, + 'Microsoft': null, + 'Google': null + } + }, + }); }); // end of document ready diff --git a/js/initial.js b/js/initial.js new file mode 100644 index 0000000000..02b4e31cae --- /dev/null +++ b/js/initial.js @@ -0,0 +1,10 @@ +// Check for jQuery. +if (typeof(jQuery) === 'undefined') { + // Check if require is a defined function. + if (typeof(require) === 'function') { + jQuery = $ = require('jquery'); + // Else use the dollar sign alias. + } else { + jQuery = $; + } +} diff --git a/js/jquery.easing.1.3.js b/js/jquery.easing.1.3.js deleted file mode 100644 index 2e679986e7..0000000000 --- a/js/jquery.easing.1.3.js +++ /dev/null @@ -1,205 +0,0 @@ -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -jQuery.easing['jswing'] = jQuery.easing['swing']; - -jQuery.extend( jQuery.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert(jQuery.easing.default); - return jQuery.easing[jQuery.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; - } - }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright © 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ \ No newline at end of file diff --git a/js/jquery.easing.1.4.js b/js/jquery.easing.1.4.js new file mode 100644 index 0000000000..8e982f0905 --- /dev/null +++ b/js/jquery.easing.1.4.js @@ -0,0 +1,166 @@ +/* + * jQuery Easing v1.4.0 - http://gsgd.co.uk/sandbox/jquery/easing/ + * Open source under the BSD License. + * Copyright © 2008 George McGinley Smith + * All rights reserved. + * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE +*/ + +(function (factory) { + if (typeof define === "function" && define.amd) { + define(['jquery'], function ($) { + return factory($); + }); + } else if (typeof module === "object" && typeof module.exports === "object") { + exports = factory(require('jquery')); + } else { + factory(jQuery); + } +})(function($){ + +// Preserve the original jQuery "swing" easing as "jswing" +$.easing['jswing'] = $.easing['swing']; + +var pow = Math.pow, + sqrt = Math.sqrt, + sin = Math.sin, + cos = Math.cos, + PI = Math.PI, + c1 = 1.70158, + c2 = c1 * 1.525, + c3 = c1 + 1, + c4 = ( 2 * PI ) / 3, + c5 = ( 2 * PI ) / 4.5; + +// x is the fraction of animation progress, in the range 0..1 +function bounceOut(x) { + var n1 = 7.5625, + d1 = 2.75; + if ( x < 1/d1 ) { + return n1*x*x; + } else if ( x < 2/d1 ) { + return n1*(x-=(1.5/d1))*x + .75; + } else if ( x < 2.5/d1 ) { + return n1*(x-=(2.25/d1))*x + .9375; + } else { + return n1*(x-=(2.625/d1))*x + .984375; + } +} + +$.extend( $.easing, +{ + def: 'easeOutQuad', + swing: function (x) { + return $.easing[$.easing.def](x); + }, + easeInQuad: function (x) { + return x * x; + }, + easeOutQuad: function (x) { + return 1 - ( 1 - x ) * ( 1 - x ); + }, + easeInOutQuad: function (x) { + return x < 0.5 ? + 2 * x * x : + 1 - pow( -2 * x + 2, 2 ) / 2; + }, + easeInCubic: function (x) { + return x * x * x; + }, + easeOutCubic: function (x) { + return 1 - pow( 1 - x, 3 ); + }, + easeInOutCubic: function (x) { + return x < 0.5 ? + 4 * x * x * x : + 1 - pow( -2 * x + 2, 3 ) / 2; + }, + easeInQuart: function (x) { + return x * x * x * x; + }, + easeOutQuart: function (x) { + return 1 - pow( 1 - x, 4 ); + }, + easeInOutQuart: function (x) { + return x < 0.5 ? + 8 * x * x * x * x : + 1 - pow( -2 * x + 2, 4 ) / 2; + }, + easeInQuint: function (x) { + return x * x * x * x * x; + }, + easeOutQuint: function (x) { + return 1 - pow( 1 - x, 5 ); + }, + easeInOutQuint: function (x) { + return x < 0.5 ? + 16 * x * x * x * x * x : + 1 - pow( -2 * x + 2, 5 ) / 2; + }, + easeInSine: function (x) { + return 1 - cos( x * PI/2 ); + }, + easeOutSine: function (x) { + return sin( x * PI/2 ); + }, + easeInOutSine: function (x) { + return -( cos( PI * x ) - 1 ) / 2; + }, + easeInExpo: function (x) { + return x === 0 ? 0 : pow( 2, 10 * x - 10 ); + }, + easeOutExpo: function (x) { + return x === 1 ? 1 : 1 - pow( 2, -10 * x ); + }, + easeInOutExpo: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? + pow( 2, 20 * x - 10 ) / 2 : + ( 2 - pow( 2, -20 * x + 10 ) ) / 2; + }, + easeInCirc: function (x) { + return 1 - sqrt( 1 - pow( x, 2 ) ); + }, + easeOutCirc: function (x) { + return sqrt( 1 - pow( x - 1, 2 ) ); + }, + easeInOutCirc: function (x) { + return x < 0.5 ? + ( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 : + ( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2; + }, + easeInElastic: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : + -pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 ); + }, + easeOutElastic: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : + pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1; + }, + easeInOutElastic: function (x) { + return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? + -( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 : + pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1; + }, + easeInBack: function (x) { + return c3 * x * x * x - c1 * x * x; + }, + easeOutBack: function (x) { + return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 ); + }, + easeInOutBack: function (x) { + return x < 0.5 ? + ( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 : + ( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2; + }, + easeInBounce: function (x) { + return 1 - bounceOut( 1 - x ); + }, + easeOutBounce: bounceOut, + easeInOutBounce: function (x) { + return x < 0.5 ? + ( 1 - bounceOut( 1 - 2 * x ) ) / 2 : + ( 1 + bounceOut( 2 * x - 1 ) ) / 2; + } +}); + +}); \ No newline at end of file diff --git a/js/jquery.hammer.js b/js/jquery.hammer.js old mode 100755 new mode 100644 diff --git a/js/leanModal.js b/js/leanModal.js deleted file mode 100644 index 99a771e713..0000000000 --- a/js/leanModal.js +++ /dev/null @@ -1,178 +0,0 @@ -(function($) { - var _stack = 0, - _lastID = 0, - _generateID = function() { - _lastID++; - return 'materialize-lean-overlay-' + _lastID; - }; - - $.fn.extend({ - openModal: function(options) { - - $('body').css('overflow', 'hidden'); - - var defaults = { - opacity: 0.5, - in_duration: 350, - out_duration: 250, - ready: undefined, - complete: undefined, - dismissible: true, - starting_top: '4%' - }, - overlayID = _generateID(), - $modal = $(this), - $overlay = $('
                    '), - lStack = (++_stack); - - // Store a reference of the overlay - $overlay.attr('id', overlayID).css('z-index', 1000 + lStack * 2); - $modal.data('overlay-id', overlayID).css('z-index', 1000 + lStack * 2 + 1); - - $("body").append($overlay); - - // Override defaults - options = $.extend(defaults, options); - - if (options.dismissible) { - $overlay.click(function() { - $modal.closeModal(options); - }); - // Return on ESC - $(document).on('keyup.leanModal' + overlayID, function(e) { - if (e.keyCode === 27) { // ESC key - $modal.closeModal(options); - } - }); - } - - $modal.find(".modal-close").on('click.close', function(e) { - $modal.closeModal(options); - }); - - $overlay.css({ display : "block", opacity : 0 }); - - $modal.css({ - display : "block", - opacity: 0 - }); - - $overlay.velocity({opacity: options.opacity}, {duration: options.in_duration, queue: false, ease: "easeOutCubic"}); - $modal.data('associated-overlay', $overlay[0]); - - // Define Bottom Sheet animation - if ($modal.hasClass('bottom-sheet')) { - $modal.velocity({bottom: "0", opacity: 1}, { - duration: options.in_duration, - queue: false, - ease: "easeOutCubic", - // Handle modal ready callback - complete: function() { - if (typeof(options.ready) === "function") { - options.ready(); - } - } - }); - } - else { - $.Velocity.hook($modal, "scaleX", 0.7); - $modal.css({ top: options.starting_top }); - $modal.velocity({top: "10%", opacity: 1, scaleX: '1'}, { - duration: options.in_duration, - queue: false, - ease: "easeOutCubic", - // Handle modal ready callback - complete: function() { - if (typeof(options.ready) === "function") { - options.ready(); - } - } - }); - } - - - } - }); - - $.fn.extend({ - closeModal: function(options) { - var defaults = { - out_duration: 250, - complete: undefined - }, - $modal = $(this), - overlayID = $modal.data('overlay-id'), - $overlay = $('#' + overlayID); - - options = $.extend(defaults, options); - - // Disable scrolling - $('body').css('overflow', ''); - - $modal.find('.modal-close').off('click.close'); - $(document).off('keyup.leanModal' + overlayID); - - $overlay.velocity( { opacity: 0}, {duration: options.out_duration, queue: false, ease: "easeOutQuart"}); - - - // Define Bottom Sheet animation - if ($modal.hasClass('bottom-sheet')) { - $modal.velocity({bottom: "-100%", opacity: 0}, { - duration: options.out_duration, - queue: false, - ease: "easeOutCubic", - // Handle modal ready callback - complete: function() { - $overlay.css({display:"none"}); - - // Call complete callback - if (typeof(options.complete) === "function") { - options.complete(); - } - $overlay.remove(); - _stack--; - } - }); - } - else { - $modal.velocity( - { top: options.starting_top, opacity: 0, scaleX: 0.7}, { - duration: options.out_duration, - complete: - function() { - - $(this).css('display', 'none'); - // Call complete callback - if (typeof(options.complete) === "function") { - options.complete(); - } - $overlay.remove(); - _stack--; - } - } - ); - } - } - }); - - $.fn.extend({ - leanModal: function(option) { - return this.each(function() { - - var defaults = { - starting_top: '4%' - }, - // Override defaults - options = $.extend(defaults, option); - - // Close Handlers - $(this).click(function(e) { - options.starting_top = ($(this).offset().top - $(window).scrollTop()) /1.15; - var modal_id = $(this).attr("href") || '#' + $(this).data('target'); - $(modal_id).openModal(options); - e.preventDefault(); - }); // done set on click - }); // done return - } - }); -})(jQuery); diff --git a/js/materialbox.js b/js/materialbox.js index d86e1ab027..e859c8f7ca 100644 --- a/js/materialbox.js +++ b/js/materialbox.js @@ -18,10 +18,14 @@ var placeholder = $('
                    ').addClass('material-placeholder'); var originalWidth = 0; var originalHeight = 0; + var ancestorsChanged; + var ancestor; + var originInlineStyles = origin.attr('style'); origin.wrap(placeholder); - origin.on('click', function(){ + // Start click handler + origin.on('click', function() { var placeholder = origin.parent('.material-placeholder'); var windowWidth = window.innerWidth; var windowHeight = window.innerHeight; @@ -46,7 +50,6 @@ overlayActive = true; // Set positioning for placeholder - placeholder.css({ width: placeholder[0].getBoundingClientRect().width, height: placeholder[0].getBoundingClientRect().height, @@ -55,10 +58,30 @@ left: 0 }); - + // Find ancestor with overflow: hidden; and remove it + ancestorsChanged = undefined; + ancestor = placeholder[0].parentNode; + var count = 0; + while (ancestor !== null && !$(ancestor).is(document)) { + var curr = $(ancestor); + if (curr.css('overflow') !== 'visible') { + curr.css('overflow', 'visible'); + if (ancestorsChanged === undefined) { + ancestorsChanged = curr; + } + else { + ancestorsChanged = ancestorsChanged.add(curr); + } + } + ancestor = ancestor.parentNode; + } // Set css on origin - origin.css({position: 'absolute', 'z-index': 1000}) + origin.css({ + position: 'absolute', + 'z-index': 1000, + 'will-change': 'left, top, width, height' + }) .data('width', originalWidth) .data('height', originalHeight); @@ -71,11 +94,22 @@ if (doneAnimating === true) returnToOriginal(); }); - // Animate Overlay - $('body').append(overlay); - overlay.velocity({opacity: 1}, {duration: inDuration, queue: false, easing: 'easeOutQuad'} - ); + // Put before in origin image to preserve z-index layering. + origin.before(overlay); + + // Set dimensions if needed + var overlayOffset = overlay[0].getBoundingClientRect(); + overlay.css({ + width: windowWidth, + height: windowHeight, + left: -1 * overlayOffset.left, + top: -1 * overlayOffset.top + }) + + // Animate Overlay + overlay.velocity({opacity: 1}, + {duration: inDuration, queue: false, easing: 'easeOutQuad'} ); // Add and animate caption if it exists if (origin.data('caption') !== "") { @@ -86,8 +120,6 @@ $photo_caption.velocity({opacity: 1}, {duration: inDuration, queue: false, easing: 'easeOutQuad'}); } - - // Resize Image var ratio = 0; var widthPercent = originalWidth / windowWidth; @@ -147,72 +179,73 @@ ); // End Velocity } - }); // End origin on click - - - // Return on scroll - $(window).scroll(function() { - if (overlayActive ) { - returnToOriginal(); - } - }); - - // Return on ESC - $(document).keyup(function(e) { - - if (e.keyCode === 27 && doneAnimating === true) { // ESC key + // Handle Exit triggers + $(window).on('scroll.materialbox', function() { if (overlayActive) { returnToOriginal(); } - } - }); - + }); - // This function returns the modaled image to the original spot - function returnToOriginal() { + $(window).on('resize.materialbox', function() { + if (overlayActive) { + returnToOriginal(); + } + }); - doneAnimating = false; + $(document).on('keyup.materialbox', function(e) { + // ESC key + if (e.keyCode === 27 && + doneAnimating === true && + overlayActive) { + returnToOriginal(); + } + }); - var placeholder = origin.parent('.material-placeholder'); - var windowWidth = window.innerWidth; - var windowHeight = window.innerHeight; - var originalWidth = origin.data('width'); - var originalHeight = origin.data('height'); + }); // End click handler - origin.velocity("stop", true); - $('#materialbox-overlay').velocity("stop", true); - $('.materialbox-caption').velocity("stop", true); + // This function returns the modaled image to the original spot + function returnToOriginal() { - $('#materialbox-overlay').velocity({opacity: 0}, { - duration: outDuration, // Delay prevents animation overlapping - queue: false, easing: 'easeOutQuad', - complete: function(){ - // Remove Overlay - overlayActive = false; - $(this).remove(); - } - }); + doneAnimating = false; - // Resize Image - origin.velocity( - { - width: originalWidth, - height: originalHeight, - left: 0, - top: 0 - }, - { - duration: outDuration, - queue: false, easing: 'easeOutQuad' - } - ); + var placeholder = origin.parent('.material-placeholder'); + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var originalWidth = origin.data('width'); + var originalHeight = origin.data('height'); + + origin.velocity("stop", true); + $('#materialbox-overlay').velocity("stop", true); + $('.materialbox-caption').velocity("stop", true); + + // disable exit handlers + $(window).off('scroll.materialbox'); + $(document).off('keyup.materialbox'); + $(window).off('resize.materialbox'); + + $('#materialbox-overlay').velocity({opacity: 0}, { + duration: outDuration, // Delay prevents animation overlapping + queue: false, easing: 'easeOutQuad', + complete: function(){ + // Remove Overlay + overlayActive = false; + $(this).remove(); + } + }); - // Remove Caption + reset css settings on image - $('.materialbox-caption').velocity({opacity: 0}, { - duration: outDuration, // Delay prevents animation overlapping + // Resize Image + origin.velocity( + { + width: originalWidth, + height: originalHeight, + left: 0, + top: 0 + }, + { + duration: outDuration, queue: false, easing: 'easeOutQuad', - complete: function(){ + complete: function() { placeholder.css({ height: '', width: '', @@ -221,29 +254,36 @@ left: '' }); - origin.css({ - height: '', - top: '', - left: '', - width: '', - 'max-width': '', - position: '', - 'z-index': '' - }); + origin.removeAttr('style'); + origin.attr('style', originInlineStyles); // Remove class origin.removeClass('active'); doneAnimating = true; - $(this).remove(); - } - }); - } + // Remove overflow overrides on ancestors + if (ancestorsChanged) { + ancestorsChanged.css('overflow', ''); + } + } + } + ); + + // Remove Caption + reset css settings on image + $('.materialbox-caption').velocity({opacity: 0}, { + duration: outDuration, // Delay prevents animation overlapping + queue: false, easing: 'easeOutQuad', + complete: function(){ + $(this).remove(); + } }); -}; -$(document).ready(function(){ - $('.materialboxed').materialbox(); -}); + } + }); + }; + + $(document).ready(function(){ + $('.materialboxed').materialbox(); + }); }( jQuery )); diff --git a/js/modal.js b/js/modal.js new file mode 100644 index 0000000000..8ada9ca037 --- /dev/null +++ b/js/modal.js @@ -0,0 +1,371 @@ +(function($, Vel) { + 'use strict'; + + let _defaults = { + opacity: 0.5, + inDuration: 250, + outDuration: 250, + ready: undefined, + complete: undefined, + dismissible: true, + startingTop: '4%', + endingTop: '10%' + }; + + + /** + * @class + * + */ + class Modal { + /** + * Construct Modal instance and set up overlay + * @constructor + * @param {jQuery} $el + * @param {Object} options + */ + constructor($el, options) { + + // If exists, destroy and reinitialize + if (!!$el[0].M_Modal) { + $el[0].M_Modal.destroy(); + } + + /** + * The jQuery element + * @type {jQuery} + */ + this.$el = $el; + + /** + * Options for the modal + * @member Modal#options + * @prop {Number} [opacity=0.5] - Opacity of the modal overlay + * @prop {Number} [inDuration=250] - Length in ms of enter transition + * @prop {Number} [outDuration=250] - Length in ms of exit transition + * @prop {Function} ready - Callback function called when modal is finished entering + * @prop {Function} complete - Callback function called when modal is finished exiting + * @prop {Boolean} [dismissible=true] - Allow modal to be dismissed by keyboard or overlay click + * @prop {String} [startingTop='4%'] - startingTop + * @prop {String} [endingTop='10%'] - endingTop + */ + this.options = $.extend({}, Modal.defaults, options); + + /** + * Describes open/close state of modal + * @type {Boolean} + */ + this.isOpen = false; + + this.$el[0].M_Modal = this; + this.id = $el.attr('id'); + this.openingTrigger = undefined; + this.$overlay = $(''); + + Modal._increment++; + Modal._count++; + this.$overlay[0].style.zIndex = 1000 + Modal._increment * 2; + this.$el[0].style.zIndex = 1000 + Modal._increment * 2 + 1; + this.setupEventHandlers(); + } + + static get defaults() { + return _defaults; + } + + static init($els, options) { + let arr = []; + $els.each(function() { + arr.push(new Modal($(this), options)); + }); + return arr; + } + + /** + * Get Instance + */ + getInstance() { + return this; + } + + /** + * Teardown component + */ + destroy() { + this.removeEventHandlers(); + this.$el[0].removeAttribute('style') + if (!!this.$overlay[0].parentNode) { + this.$overlay[0].parentNode.removeChild(this.$overlay[0]); + } + this.$el[0].M_Modal = undefined; + Modal._count--; + } + + /** + * Setup Event Handlers + */ + setupEventHandlers() { + this.handleOverlayClickBound = this.handleOverlayClick.bind(this); + this.handleModalCloseClickBound = this.handleModalCloseClick.bind(this); + + if (Modal._count === 1) { + document.body.addEventListener('click', this.handleTriggerClick); + } + this.$overlay[0].addEventListener('click', this.handleOverlayClickBound); + this.$el[0].addEventListener('click', this.handleModalCloseClickBound); + } + + /** + * Remove Event Handlers + */ + removeEventHandlers() { + if (Modal._count === 0) { + document.body.removeEventListener('click', this.handleTriggerClick); + } + this.$overlay[0].removeEventListener('click', this.handleOverlayClickBound); + this.$el[0].removeEventListener('click', this.handleModalCloseClickBound); + } + + /** + * Handle Trigger Click + * @param {Event} e + */ + handleTriggerClick(e) { + let $trigger = $(e.target).closest('.modal-trigger'); + if (e.target && $trigger.length) { + let modalId = $trigger[0].getAttribute('href'); + if (modalId) { + modalId = modalId.slice(1); + } else { + modalId = $trigger[0].getAttribute('data-target'); + } + let modalInstance = document.getElementById(modalId).M_Modal; + if (modalInstance) { + modalInstance.open($trigger); + } + e.preventDefault(); + } + } + + /** + * Handle Overlay Click + */ + handleOverlayClick() { + if (this.options.dismissible) { + this.close(); + } + } + + /** + * Handle Modal Close Click + * @param {Event} e + */ + handleModalCloseClick(e) { + let $closeTrigger = $(e.target).closest('.modal-close'); + if (e.target && $closeTrigger.length) { + this.close(); + } + } + + /** + * Handle Keydown + * @param {Event} e + */ + handleKeydown(e) { + // ESC key + if (e.keyCode === 27 && this.options.dismissible) { + this.close(); + } + } + + /** + * Animate in modal + */ + animateIn() { + // Set initial styles + $.extend(this.$el[0].style, { + display: 'block', + opacity: 0 + }); + $.extend(this.$overlay[0].style, { + display: 'block', + opacity: 0 + }); + + // Animate overlay + Vel( + this.$overlay[0], + {opacity: this.options.opacity}, + {duration: this.options.inDuration, queue: false, ease: 'easeOutCubic'} + ); + + + // Define modal animation options + let enterVelocityOptions = { + duration: this.options.inDuration, + queue: false, + ease: 'easeOutCubic', + // Handle modal ready callback + complete: () => { + if (typeof(this.options.ready) === 'function') { + this.options.ready.call(this, this.$el, this.openingTrigger); + } + } + }; + + // Bottom sheet animation + if (this.$el[0].classList.contains('bottom-sheet')) { + Vel( + this.$el[0], + {bottom: 0, opacity: 1}, + enterVelocityOptions); + + // Normal modal animation + } else { + Vel.hook(this.$el[0], 'scaleX', 0.7); + this.$el[0].style.top = this.options.startingTop; + Vel( + this.$el[0], + {top: this.options.endingTop, opacity: 1, scaleX: 1}, + enterVelocityOptions + ); + } + } + + /** + * Animate out modal + */ + animateOut() { + // Animate overlay + Vel( + this.$overlay[0], + { opacity: 0}, + {duration: this.options.outDuration, queue: false, ease: 'easeOutQuart'} + ); + + // Define modal animation options + var exitVelocityOptions = { + duration: this.options.outDuration, + queue: false, + ease: 'easeOutCubic', + // Handle modal ready callback + complete: () => { + this.$el[0].style.display = 'none'; + // Call complete callback + if (typeof(this.options.complete) === 'function') { + this.options.complete.call(this, this.$el); + } + this.$overlay[0].parentNode.removeChild(this.$overlay[0]); + } + }; + + // Bottom sheet animation + if (this.$el[0].classList.contains('bottom-sheet')) { + Vel( + this.$el[0], + {bottom: '-100%', opacity: 0}, + exitVelocityOptions + ); + + // Normal modal animation + } else { + Vel( + this.$el[0], + {top: this.options.startingTop, opacity: 0, scaleX: 0.7}, + exitVelocityOptions + ); + } + } + + + /** + * Open Modal + * @param {jQuery} [$trigger] + */ + open($trigger) { + if (this.isOpen) { + return; + } + + this.isOpen = true; + let body = document.body; + body.style.overflow = 'hidden'; + this.$el[0].classList.add('open'); + body.appendChild(this.$overlay[0]); + + // Set opening trigger, undefined indicates modal was opened by javascript + this.openingTrigger = !!$trigger ? $trigger : undefined; + + + if (this.options.dismissible) { + this.handleKeydownBound = this.handleKeydown.bind(this); + document.addEventListener('keydown', this.handleKeydownBound); + } + + this.animateIn(); + + return this; + } + + /** + * Close Modal + */ + close() { + if (!this.isOpen) { + return; + } + + this.isOpen = false; + this.$el[0].classList.remove('open'); + document.body.style.overflow = ''; + + if (this.options.dismissible) { + document.removeEventListener('keydown', this.handleKeydownBound); + } + + this.animateOut(); + + return this; + } + } + + /** + * @static + * @memberof Modal + */ + Modal._increment = 0; + + /** + * @static + * @memberof Modal + */ + Modal._count = 0; + + Materialize.Modal = Modal; + + $.fn.modal = function(methodOrOptions) { + // Call plugin method if valid method name is passed in + if (Modal.prototype[methodOrOptions]) { + // Getter methods + if (methodOrOptions.slice(0,3) === 'get') { + return this.first()[0].M_Modal[methodOrOptions](); + + // Void methods + } else { + return this.each(function() { + this.M_Modal[methodOrOptions](); + }); + } + + // Initialize plugin if options or no argument is passed in + } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { + Modal.init(this, arguments[0]); + return this; + + // Return error if an unrecognized method name is passed in + } else { + $.error(`Method ${methodOrOptions} does not exist on jQuery.modal`); + } + }; + +})(jQuery, Materialize.Vel); diff --git a/js/parallax.js b/js/parallax.js index 841d7aca6d..8c82a37ca5 100644 --- a/js/parallax.js +++ b/js/parallax.js @@ -1,58 +1,58 @@ (function ($) { - $.fn.parallax = function () { - var window_width = $(window).width(); - // Parallax Scripts - return this.each(function(i) { - var $this = $(this); - $this.addClass('parallax'); - - function updateParallax(initial) { - var container_height; - if (window_width < 601) { - container_height = ($this.height() > 0) ? $this.height() : $this.children("img").height(); - } - else { - container_height = ($this.height() > 0) ? $this.height() : 500; - } - var $img = $this.children("img").first(); - var img_height = $img.height(); - var parallax_dist = img_height - container_height; - var bottom = $this.offset().top + container_height; - var top = $this.offset().top; - var scrollTop = $(window).scrollTop(); - var windowHeight = window.innerHeight; - var windowBottom = scrollTop + windowHeight; - var percentScrolled = (windowBottom - top) / (container_height + windowHeight); - var parallax = Math.round((parallax_dist * percentScrolled)); - - if (initial) { - $img.css('display', 'block'); - } - if ((bottom > scrollTop) && (top < (scrollTop + windowHeight))) { - $img.css('transform', "translate3D(-50%," + parallax + "px, 0)"); - } - + $.fn.parallax = function () { + var window_width = $(window).width(); + // Parallax Scripts + return this.each(function(i) { + var $this = $(this); + $this.addClass('parallax'); + + function updateParallax(initial) { + var container_height; + if (window_width < 601) { + container_height = ($this.height() > 0) ? $this.height() : $this.children("img").height(); + } + else { + container_height = ($this.height() > 0) ? $this.height() : 500; + } + var $img = $this.children("img").first(); + var img_height = $img.height(); + var parallax_dist = img_height - container_height; + var bottom = $this.offset().top + container_height; + var top = $this.offset().top; + var scrollTop = $(window).scrollTop(); + var windowHeight = window.innerHeight; + var windowBottom = scrollTop + windowHeight; + var percentScrolled = (windowBottom - top) / (container_height + windowHeight); + var parallax = Math.round((parallax_dist * percentScrolled)); + + if (initial) { + $img.css('display', 'block'); + } + if ((bottom > scrollTop) && (top < (scrollTop + windowHeight))) { + $img.css('transform', "translate3D(-50%," + parallax + "px, 0)"); } - // Wait for image load - $this.children("img").one("load", function() { - updateParallax(true); - }).each(function() { - if(this.complete) $(this).load(); - }); + } - $(window).scroll(function() { - window_width = $(window).width(); - updateParallax(false); - }); + // Wait for image load + $this.children("img").one("load", function() { + updateParallax(true); + }).each(function() { + if (this.complete) $(this).trigger("load"); + }); - $(window).resize(function() { - window_width = $(window).width(); - updateParallax(false); - }); + $(window).scroll(function() { + window_width = $(window).width(); + updateParallax(false); + }); + $(window).resize(function() { + window_width = $(window).width(); + updateParallax(false); }); - }; -}( jQuery )); \ No newline at end of file + }); + + }; +}( jQuery )); diff --git a/js/pushpin.js b/js/pushpin.js index 6071c82ba4..5f42246880 100644 --- a/js/pushpin.js +++ b/js/pushpin.js @@ -1,62 +1,71 @@ (function ($) { - $(document).ready(function() { + $.fn.pushpin = function (options) { + // Defaults + var defaults = { + top: 0, + bottom: Infinity, + offset: 0 + }; + + // Remove pushpin event and classes + if (options === "remove") { + this.each(function () { + if (id = $(this).data('pushpin-id')) { + $(window).off('scroll.' + id); + $(this).removeData('pushpin-id').removeClass('pin-top pinned pin-bottom').removeAttr('style'); + } + }); + return false; + } + + options = $.extend(defaults, options); + - $.fn.pushpin = function (options) { + $index = 0; + return this.each(function() { + var $uniqueId = Materialize.guid(), + $this = $(this), + $original_offset = $(this).offset().top; - var defaults = { - top: 0, - bottom: Infinity, - offset: 0 + function removePinClasses(object) { + object.removeClass('pin-top'); + object.removeClass('pinned'); + object.removeClass('pin-bottom'); } - options = $.extend(defaults, options); - - $index = 0; - return this.each(function() { - var $uniqueId = Materialize.guid(), - $this = $(this), - $original_offset = $(this).offset().top; - - function removePinClasses(object) { - object.removeClass('pin-top'); - object.removeClass('pinned'); - object.removeClass('pin-bottom'); - } - function updateElements(objects, scrolled) { - objects.each(function () { - // Add position fixed (because its between top and bottom) - if (options.top <= scrolled && options.bottom >= scrolled && !$(this).hasClass('pinned')) { - removePinClasses($(this)); - $(this).css('top', options.offset); - $(this).addClass('pinned'); - } - - // Add pin-top (when scrolled position is above top) - if (scrolled < options.top && !$(this).hasClass('pin-top')) { - removePinClasses($(this)); - $(this).css('top', 0); - $(this).addClass('pin-top'); - } - - // Add pin-bottom (when scrolled position is below bottom) - if (scrolled > options.bottom && !$(this).hasClass('pin-bottom')) { - removePinClasses($(this)); - $(this).addClass('pin-bottom'); - $(this).css('top', options.bottom - $original_offset); - } - }); - } + function updateElements(objects, scrolled) { + objects.each(function () { + // Add position fixed (because its between top and bottom) + if (options.top <= scrolled && options.bottom >= scrolled && !$(this).hasClass('pinned')) { + removePinClasses($(this)); + $(this).css('top', options.offset); + $(this).addClass('pinned'); + } + + // Add pin-top (when scrolled position is above top) + if (scrolled < options.top && !$(this).hasClass('pin-top')) { + removePinClasses($(this)); + $(this).css('top', 0); + $(this).addClass('pin-top'); + } - updateElements($this, $(window).scrollTop()); - $(window).on('scroll.' + $uniqueId, function () { - var $scrolled = $(window).scrollTop() + options.offset; - updateElements($this, $scrolled); + // Add pin-bottom (when scrolled position is below bottom) + if (scrolled > options.bottom && !$(this).hasClass('pin-bottom')) { + removePinClasses($(this)); + $(this).addClass('pin-bottom'); + $(this).css('top', options.bottom - $original_offset); + } }); + } + $(this).data('pushpin-id', $uniqueId); + updateElements($this, $(window).scrollTop()); + $(window).on('scroll.' + $uniqueId, function () { + var $scrolled = $(window).scrollTop() + options.offset; + updateElements($this, $scrolled); }); - }; - + }); - }); + }; }( jQuery )); \ No newline at end of file diff --git a/js/scrollFire.js b/js/scrollFire.js old mode 100755 new mode 100644 index 0d86eadc11..96d1230c85 --- a/js/scrollFire.js +++ b/js/scrollFire.js @@ -1,44 +1,51 @@ (function($) { - // Input: Array of JSON objects {selector, offset, callback} + var scrollFireEventsHandled = false; + // Input: Array of JSON objects {selector, offset, callback} Materialize.scrollFire = function(options) { - - var didScroll = false; - - window.addEventListener("scroll", function() { - didScroll = true; - }); - - // Rate limit to 100ms - setInterval(function() { - if(didScroll) { - didScroll = false; - - var windowScroll = window.pageYOffset + window.innerHeight; - - for (var i = 0 ; i < options.length; i++) { - // Get options from each line - var value = options[i]; - var selector = value.selector, - offset = value.offset, - callback = value.callback; - - var currentElement = document.querySelector(selector); - if ( currentElement !== null) { - var elementOffset = currentElement.getBoundingClientRect().top + window.pageYOffset; - - if (windowScroll > (elementOffset + offset)) { - if (value.done !== true) { - var callbackFunc = new Function(callback); - callbackFunc(); - value.done = true; - } + var onScroll = function() { + var windowScroll = window.pageYOffset + window.innerHeight; + + for (var i = 0 ; i < options.length; i++) { + // Get options from each line + var value = options[i]; + var selector = value.selector, + offset = value.offset, + callback = value.callback; + + var currentElement = document.querySelector(selector); + if ( currentElement !== null) { + var elementOffset = currentElement.getBoundingClientRect().top + window.pageYOffset; + + if (windowScroll > (elementOffset + offset)) { + if (value.done !== true) { + if (typeof(callback) === 'function') { + callback.call(this, currentElement); + } else if (typeof(callback) === 'string') { + var callbackFunc = new Function(callback); + callbackFunc(currentElement); } + value.done = true; } } + } } - }, 100); + }; + + + var throttledScroll = Materialize.throttle(function() { + onScroll(); + }, options.throttle || 100); + + if (!scrollFireEventsHandled) { + window.addEventListener("scroll", throttledScroll); + window.addEventListener("resize", throttledScroll); + scrollFireEventsHandled = true; + } + + // perform a scan once, after current execution context, and after dom is ready + setTimeout(throttledScroll, 0); }; -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/scrollspy.js b/js/scrollspy.js old mode 100755 new mode 100644 index d486bd22ac..fa8150b7d9 --- a/js/scrollspy.js +++ b/js/scrollspy.js @@ -60,7 +60,7 @@ /** * Called when the user scrolls the window */ - function onScroll() { + function onScroll(scrollOffset) { // unique tick id ++ticks; @@ -71,8 +71,7 @@ bottom = top + jWindow.height(); // determine which elements are in view -// + 60 accounts for fixed nav - var intersections = findElements(top+offset.top + 200, right+offset.right, bottom+offset.bottom, left+offset.left); + var intersections = findElements(top+offset.top + scrollOffset || 200, right+offset.right, bottom+offset.bottom, left+offset.left); $.each(intersections, function(i, element) { var lastTick = element.data('scrollSpy:ticks'); @@ -106,57 +105,6 @@ jWindow.trigger('scrollSpy:winSize'); } - /** - * Get time in ms - * @license https://raw.github.com/jashkenas/underscore/master/LICENSE - * @type {function} - * @return {number} - */ - var getTime = (Date.now || function () { - return new Date().getTime(); - }); - - /** - * Returns a function, that, when invoked, will only be triggered at most once - * during a given window of time. Normally, the throttled function will run - * as much as it can, without ever going more than once per `wait` duration; - * but if you'd like to disable the execution on the leading edge, pass - * `{leading: false}`. To disable execution on the trailing edge, ditto. - * @license https://raw.github.com/jashkenas/underscore/master/LICENSE - * @param {function} func - * @param {number} wait - * @param {Object=} options - * @returns {Function} - */ - function throttle(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - options || (options = {}); - var later = function () { - previous = options.leading === false ? 0 : getTime(); - timeout = null; - result = func.apply(context, args); - context = args = null; - }; - return function () { - var now = getTime(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; /** * Enables ScrollSpy using a selector @@ -167,35 +115,41 @@ offsetRight : number -> offset from right. Default: 0 offsetBottom : number -> offset from bottom. Default: 0 offsetLeft : number -> offset from left. Default: 0 + activeClass : string -> Class name to be added to the active link. Default: active * @returns {jQuery} */ $.scrollSpy = function(selector, options) { + var defaults = { + throttle: 100, + scrollOffset: 200, // offset - 200 allows elements near bottom of page to scroll + activeClass: 'active', + getActiveElement: function(id) { + return 'a[href="#' + id + '"]'; + } + }; + options = $.extend(defaults, options); + var visible = []; selector = $(selector); selector.each(function(i, element) { elements.push($(element)); $(element).data("scrollSpy:id", i); // Smooth scroll to section - $('a[href=#' + $(element).attr('id') + ']').click(function(e) { + $('a[href="#' + $(element).attr('id') + '"]').click(function(e) { e.preventDefault(); - var offset = $(this.hash).offset().top + 1; - -// offset - 200 allows elements near bottom of page to scroll - - $('html, body').animate({ scrollTop: offset - 200 }, {duration: 400, queue: false, easing: 'easeOutCubic'}); - + var offset = $(Materialize.escapeHash(this.hash)).offset().top + 1; + $('html, body').animate({ scrollTop: offset - options.scrollOffset }, {duration: 400, queue: false, easing: 'easeOutCubic'}); }); }); - options = options || { - throttle: 100 - }; offset.top = options.offsetTop || 0; offset.right = options.offsetRight || 0; offset.bottom = options.offsetBottom || 0; offset.left = options.offsetLeft || 0; - var throttledScroll = throttle(onScroll, options.throttle || 100); + var throttledScroll = Materialize.throttle(function() { + onScroll(options.scrollOffset); + }, options.throttle || 100); var readyScroll = function(){ $(document).ready(throttledScroll); }; @@ -218,7 +172,7 @@ var $this = $(this); if (visible[0]) { - $('a[href=#' + visible[0].attr('id') + ']').removeClass('active'); + $(options.getActiveElement(visible[0].attr('id'))).removeClass(options.activeClass); if ($this.data('scrollSpy:id') < visible[0].data('scrollSpy:id')) { visible.unshift($(this)); } @@ -231,7 +185,7 @@ } - $('a[href=#' + visible[0].attr('id') + ']').addClass('active'); + $(options.getActiveElement(visible[0].attr('id'))).addClass(options.activeClass); }); selector.on('scrollSpy:exit', function() { visible = $.grep(visible, function(value) { @@ -239,13 +193,13 @@ }); if (visible[0]) { - $('a[href=#' + visible[0].attr('id') + ']').removeClass('active'); + $(options.getActiveElement(visible[0].attr('id'))).removeClass(options.activeClass); var $this = $(this); visible = $.grep(visible, function(value) { return value.attr('id') != $this.attr('id'); }); if (visible[0]) { // Check if empty - $('a[href=#' + visible[0].attr('id') + ']').addClass('active'); + $(options.getActiveElement(visible[0].attr('id'))).addClass(options.activeClass); } } }); @@ -263,7 +217,7 @@ options = options || { throttle: 100 }; - return jWindow.on('resize', throttle(onWinSize, options.throttle || 100)); + return jWindow.on('resize', Materialize.throttle(onWinSize, options.throttle || 100)); }; /** @@ -281,4 +235,4 @@ return $.scrollSpy($(this), options); }; -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/sideNav.js b/js/sideNav.js index fa178aa8b9..80685ed874 100644 --- a/js/sideNav.js +++ b/js/sideNav.js @@ -3,61 +3,77 @@ var methods = { init : function(options) { var defaults = { - menuWidth: 240, + menuWidth: 300, edge: 'left', - closeOnClick: false + closeOnClick: false, + draggable: true, + onOpen: null, + onClose: null }; options = $.extend(defaults, options); $(this).each(function(){ var $this = $(this); - var menu_id = $("#"+ $this.attr('data-activates')); + var menuId = $this.attr('data-activates'); + var menu = $("#"+ menuId); // Set to width - if (options.menuWidth != 240) { - menu_id.css('width', options.menuWidth); + if (options.menuWidth != 300) { + menu.css('width', options.menuWidth); } // Add Touch Area - var dragTarget = $('
                    '); - $('body').append(dragTarget); + var $dragTarget = $('.drag-target[data-sidenav="' + menuId + '"]'); + if (options.draggable) { + // Regenerate dragTarget + if ($dragTarget.length) { + $dragTarget.remove(); + } + + $dragTarget = $('
                    ').attr('data-sidenav', menuId); + $('body').append($dragTarget); + } else { + $dragTarget = $(); + } if (options.edge == 'left') { - menu_id.css('left', -1 * (options.menuWidth + 10)); - dragTarget.css({'left': 0}); // Add Touch Area + menu.css('transform', 'translateX(-100%)'); + $dragTarget.css({'left': 0}); // Add Touch Area } else { - menu_id.addClass('right-aligned') // Change text-alignment to right - .css('right', -1 * (options.menuWidth + 10)) - .css('left', ''); - dragTarget.css({'right': 0}); // Add Touch Area + menu.addClass('right-aligned') // Change text-alignment to right + .css('transform', 'translateX(100%)'); + $dragTarget.css({'right': 0}); // Add Touch Area } // If fixed sidenav, bring menu out - if (menu_id.hasClass('fixed')) { + if (menu.hasClass('fixed')) { if (window.innerWidth > 992) { - menu_id.css('left', 0); + menu.css('transform', 'translateX(0)'); } } // Window resize to reset on large screens fixed - if (menu_id.hasClass('fixed')) { + if (menu.hasClass('fixed')) { $(window).resize( function() { if (window.innerWidth > 992) { // Close menu if window is resized bigger than 992 and user has fixed sidenav - if ($('#sidenav-overlay').css('opacity') !== 0 && menuOut) { + if ($('#sidenav-overlay').length !== 0 && menuOut) { removeMenu(true); } else { - menu_id.removeAttr('style'); - menu_id.css('width', options.menuWidth); + // menu.removeAttr('style'); + menu.css('transform', 'translateX(0%)'); + // menu.css('width', options.menuWidth); } } else if (menuOut === false){ - if (options.edge === 'left') - menu_id.css('left', -1 * (options.menuWidth + 10)); - else - menu_id.css('right', -1 * (options.menuWidth + 10)); + if (options.edge === 'left') { + menu.css('transform', 'translateX(-100%)'); + } else { + menu.css('transform', 'translateX(100%)'); + } + } }); @@ -65,35 +81,40 @@ // if closeOnClick, then add close event for all a tags in side sideNav if (options.closeOnClick === true) { - menu_id.on("click.itemclick", "a:not(.collapsible-header)", function(){ - removeMenu(); + menu.on("click.itemclick", "a:not(.collapsible-header)", function(){ + if (!(window.innerWidth > 992 && menu.hasClass('fixed'))){ + removeMenu(); + } }); } - function removeMenu(restoreNav) { + var removeMenu = function(restoreNav) { panning = false; menuOut = false; - // Reenable scrolling - $('body').css('overflow', ''); + $('body').css({ + overflow: '', + width: '' + }); - $('#sidenav-overlay').velocity({opacity: 0}, {duration: 200, queue: false, easing: 'easeOutQuad', + $('#sidenav-overlay').velocity({opacity: 0}, {duration: 200, + queue: false, easing: 'easeOutQuad', complete: function() { $(this).remove(); } }); if (options.edge === 'left') { // Reset phantom div - dragTarget.css({width: '', right: '', left: '0'}); - menu_id.velocity( - {left: -1 * (options.menuWidth + 10)}, + $dragTarget.css({width: '', right: '', left: '0'}); + menu.velocity( + {'translateX': '-100%'}, { duration: 200, queue: false, easing: 'easeOutCubic', complete: function() { if (restoreNav === true) { // Restore Fixed sidenav - menu_id.removeAttr('style'); - menu_id.css('width', options.menuWidth); + menu.removeAttr('style'); + menu.css('width', options.menuWidth); } } @@ -101,21 +122,26 @@ } else { // Reset phantom div - dragTarget.css({width: '', right: '0', left: ''}); - menu_id.velocity( - {right: -1 * (options.menuWidth + 10)}, + $dragTarget.css({width: '', right: '0', left: ''}); + menu.velocity( + {'translateX': '100%'}, { duration: 200, queue: false, easing: 'easeOutCubic', complete: function() { if (restoreNav === true) { // Restore Fixed sidenav - menu_id.removeAttr('style'); - menu_id.css('width', options.menuWidth); + menu.removeAttr('style'); + menu.css('width', options.menuWidth); } } }); } + + // Callback + if (typeof(options.onClose) === 'function') { + options.onClose.call(this, menu); + } } @@ -124,174 +150,247 @@ var panning = false; var menuOut = false; - dragTarget.on('click', function(){ - removeMenu(); - }); - - dragTarget.hammer({ - prevent_default: false - }).bind('pan', function(e) { - - if (e.gesture.pointerType == "touch") { + if (options.draggable) { + $dragTarget.on('click', function(){ + if (menuOut) { + removeMenu(); + } + }); - var direction = e.gesture.direction; - var x = e.gesture.center.x; - var y = e.gesture.center.y; - var velocityX = e.gesture.velocityX; + $dragTarget.hammer({ + prevent_default: false + }).on('pan', function(e) { - // Disable Scrolling - $('body').css('overflow', 'hidden'); + if (e.gesture.pointerType == "touch") { - // If overlay does not exist, create one and if it is clicked, close menu - if ($('#sidenav-overlay').length === 0) { - var overlay = $('
                    '); - overlay.css('opacity', 0).click( function(){ - removeMenu(); - }); - $('body').append(overlay); - } + var direction = e.gesture.direction; + var x = e.gesture.center.x; + var y = e.gesture.center.y; + var velocityX = e.gesture.velocityX; - // Keep within boundaries - if (options.edge === 'left') { - if (x > options.menuWidth) { x = options.menuWidth; } - else if (x < 0) { x = 0; } - } + // Vertical scroll bugfix + if (x === 0 && y === 0) { + return; + } - if (options.edge === 'left') { - // Left Direction - if (x < (options.menuWidth / 2)) { menuOut = false; } - // Right Direction - else if (x >= (options.menuWidth / 2)) { menuOut = true; } + // Disable Scrolling + var $body = $('body'); + var $overlay = $('#sidenav-overlay'); + var oldWidth = $body.innerWidth(); + $body.css('overflow', 'hidden'); + $body.width(oldWidth); + + // If overlay does not exist, create one and if it is clicked, close menu + if ($overlay.length === 0) { + $overlay = $('
                    '); + $overlay.css('opacity', 0).click( function(){ + removeMenu(); + }); + + // Run 'onOpen' when sidenav is opened via touch/swipe if applicable + if (typeof(options.onOpen) === 'function') { + options.onOpen.call(this, menu); + } - menu_id.css('left', (x - options.menuWidth)); - } - else { - // Left Direction - if (x < (window.innerWidth - options.menuWidth / 2)) { - menuOut = true; - } - // Right Direction - else if (x >= (window.innerWidth - options.menuWidth / 2)) { - menuOut = false; - } - var rightPos = -1 *(x - options.menuWidth / 2); - if (rightPos > 0) { - rightPos = 0; + $('body').append($overlay); } - menu_id.css('right', rightPos); - } + // Keep within boundaries + if (options.edge === 'left') { + if (x > options.menuWidth) { x = options.menuWidth; } + else if (x < 0) { x = 0; } + } + if (options.edge === 'left') { + // Left Direction + if (x < (options.menuWidth / 2)) { menuOut = false; } + // Right Direction + else if (x >= (options.menuWidth / 2)) { menuOut = true; } + menu.css('transform', 'translateX(' + (x - options.menuWidth) + 'px)'); + } + else { + // Left Direction + if (x < (window.innerWidth - options.menuWidth / 2)) { + menuOut = true; + } + // Right Direction + else if (x >= (window.innerWidth - options.menuWidth / 2)) { + menuOut = false; + } + var rightPos = (x - options.menuWidth / 2); + if (rightPos < 0) { + rightPos = 0; + } + menu.css('transform', 'translateX(' + rightPos + 'px)'); + } - // Percentage overlay - var overlayPerc; - if (options.edge === 'left') { - overlayPerc = x / options.menuWidth; - $('#sidenav-overlay').velocity({opacity: overlayPerc }, {duration: 50, queue: false, easing: 'easeOutQuad'}); - } - else { - overlayPerc = Math.abs((x - window.innerWidth) / options.menuWidth); - $('#sidenav-overlay').velocity({opacity: overlayPerc }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + // Percentage overlay + var overlayPerc; + if (options.edge === 'left') { + overlayPerc = x / options.menuWidth; + $overlay.velocity({opacity: overlayPerc }, {duration: 10, queue: false, easing: 'easeOutQuad'}); + } + else { + overlayPerc = Math.abs((x - window.innerWidth) / options.menuWidth); + $overlay.velocity({opacity: overlayPerc }, {duration: 10, queue: false, easing: 'easeOutQuad'}); + } } - } - }).bind('panend', function(e) { + }).on('panend', function(e) { - if (e.gesture.pointerType == "touch") { - var velocityX = e.gesture.velocityX; - panning = false; - if (options.edge === 'left') { - // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut - if ((menuOut && velocityX <= 0.3) || velocityX < -0.5) { - menu_id.velocity({left: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'}); - dragTarget.css({width: '50%', right: 0, left: ''}); + if (e.gesture.pointerType == "touch") { + var $overlay = $('#sidenav-overlay'); + var velocityX = e.gesture.velocityX; + var x = e.gesture.center.x; + var leftPos = x - options.menuWidth; + var rightPos = x - options.menuWidth / 2; + if (leftPos > 0 ) { + leftPos = 0; } - else if (!menuOut || velocityX > 0.3) { - // Enable Scrolling - $('body').css('overflow', ''); - // Slide menu closed - menu_id.velocity({left: -1 * (options.menuWidth + 10)}, {duration: 200, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad', - complete: function () { - $(this).remove(); - }}); - dragTarget.css({width: '10px', right: '', left: 0}); + if (rightPos < 0) { + rightPos = 0; } - } - else { - if ((menuOut && velocityX >= -0.3) || velocityX > 0.5) { - menu_id.velocity({right: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'}); - dragTarget.css({width: '50%', right: '', left: 0}); + panning = false; + + if (options.edge === 'left') { + // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut + if ((menuOut && velocityX <= 0.3) || velocityX < -0.5) { + // Return menu to open + if (leftPos !== 0) { + menu.velocity({'translateX': [0, leftPos]}, {duration: 300, queue: false, easing: 'easeOutQuad'}); + } + + $overlay.velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + $dragTarget.css({width: '50%', right: 0, left: ''}); + menuOut = true; + } + else if (!menuOut || velocityX > 0.3) { + // Enable Scrolling + $('body').css({ + overflow: '', + width: '' + }); + // Slide menu closed + menu.velocity({'translateX': [-1 * options.menuWidth - 10, leftPos]}, {duration: 200, queue: false, easing: 'easeOutQuad'}); + $overlay.velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad', + complete: function () { + // Run 'onClose' when sidenav is closed via touch/swipe if applicable + if (typeof(options.onClose) === 'function') { + options.onClose.call(this, menu); + } + + $(this).remove(); + }}); + $dragTarget.css({width: '10px', right: '', left: 0}); + } } - else if (!menuOut || velocityX < -0.3) { - // Enable Scrolling - $('body').css('overflow', ''); - // Slide menu closed - menu_id.velocity({right: -1 * (options.menuWidth + 10)}, {duration: 200, queue: false, easing: 'easeOutQuad'}); - $('#sidenav-overlay').velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad', - complete: function () { - $(this).remove(); - }}); - dragTarget.css({width: '10px', right: 0, left: ''}); + else { + if ((menuOut && velocityX >= -0.3) || velocityX > 0.5) { + // Return menu to open + if (rightPos !== 0) { + menu.velocity({'translateX': [0, rightPos]}, {duration: 300, queue: false, easing: 'easeOutQuad'}); + } + + $overlay.velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + $dragTarget.css({width: '50%', right: '', left: 0}); + menuOut = true; + } + else if (!menuOut || velocityX < -0.3) { + // Enable Scrolling + $('body').css({ + overflow: '', + width: '' + }); + + // Slide menu closed + menu.velocity({'translateX': [options.menuWidth + 10, rightPos]}, {duration: 200, queue: false, easing: 'easeOutQuad'}); + $overlay.velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad', + complete: function () { + // Run 'onClose' when sidenav is closed via touch/swipe if applicable + if (typeof(options.onClose) === 'function') { + options.onClose.call(this, menu); + } + + $(this).remove(); + }}); + $dragTarget.css({width: '10px', right: 0, left: ''}); + } } + } + }); + } + $this.off('click.sidenav').on('click.sidenav', function() { + if (menuOut === true) { + menuOut = false; + panning = false; + removeMenu(); } - }); + else { - $this.click(function() { - if (menuOut === true) { - menuOut = false; - panning = false; - removeMenu(); + // Disable Scrolling + var $body = $('body'); + var $overlay = $('
                    '); + var oldWidth = $body.innerWidth(); + $body.css('overflow', 'hidden'); + $body.width(oldWidth); + + // Push current drag target on top of DOM tree + $('body').append($dragTarget); + + if (options.edge === 'left') { + $dragTarget.css({width: '50%', right: 0, left: ''}); + menu.velocity({'translateX': [0, -1 * options.menuWidth]}, {duration: 300, queue: false, easing: 'easeOutQuad'}); } else { + $dragTarget.css({width: '50%', right: '', left: 0}); + menu.velocity({'translateX': [0, options.menuWidth]}, {duration: 300, queue: false, easing: 'easeOutQuad'}); + } - // Disable Scrolling - $('body').css('overflow', 'hidden'); - // Push current drag target on top of DOM tree - $('body').append(dragTarget); - - if (options.edge === 'left') { - dragTarget.css({width: '50%', right: 0, left: ''}); - menu_id.velocity({left: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - } - else { - dragTarget.css({width: '50%', right: '', left: 0}); - menu_id.velocity({right: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'}); - menu_id.css('left',''); - } - - var overlay = $('
                    '); - overlay.css('opacity', 0) - .click(function(){ + // Overlay close on click + $overlay.css('opacity', 0) + .click(function() { menuOut = false; panning = false; removeMenu(); - overlay.velocity({opacity: 0}, {duration: 300, queue: false, easing: 'easeOutQuad', + $overlay.velocity({opacity: 0}, {duration: 300, queue: false, easing: 'easeOutQuad', complete: function() { $(this).remove(); - } }); - - }); - $('body').append(overlay); - overlay.velocity({opacity: 1}, {duration: 300, queue: false, easing: 'easeOutQuad', - complete: function () { - menuOut = true; - panning = false; - } + } + }); }); + + // Append body + $('body').append($overlay); + $overlay.velocity({opacity: 1}, {duration: 300, queue: false, easing: 'easeOutQuad', + complete: function () { + menuOut = true; + panning = false; + } + }); + + // Callback + if (typeof(options.onOpen) === 'function') { + options.onOpen.call(this, menu); } + } - return false; - }); + return false; + }); }); + }, + destroy: function () { + var $overlay = $('#sidenav-overlay'); + var $dragTarget = $('.drag-target[data-sidenav="' + $(this).attr('data-activates') + '"]'); + $overlay.trigger('click'); + $dragTarget.remove(); + $(this).off('click'); + $overlay.remove(); }, show : function() { this.trigger('click'); @@ -302,14 +401,14 @@ }; - $.fn.sideNav = function(methodOrOptions) { - if ( methods[methodOrOptions] ) { - return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { - // Default to "init" - return methods.init.apply( this, arguments ); - } else { - $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.sideNav' ); - } - }; // Plugin end + $.fn.sideNav = function(methodOrOptions) { + if ( methods[methodOrOptions] ) { + return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { + // Default to "init" + return methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.sideNav' ); + } + }; // Plugin end }( jQuery )); diff --git a/js/slider.js b/js/slider.js index e9578937ee..2b90dda959 100644 --- a/js/slider.js +++ b/js/slider.js @@ -17,9 +17,9 @@ // which slide is active and its associated content var $this = $(this); var $slider = $this.find('ul.slides').first(); - var $slides = $slider.find('li'); + var $slides = $slider.find('> li'); var $active_index = $slider.find('.active').index(); - var $active; + var $active, $indicators, $interval; if ($active_index != -1) { $active = $slides.eq($active_index); } // Transitions the caption depending on alignment @@ -37,6 +37,7 @@ // This function will transition the slide to any index of the next slide function moveToSlide(index) { + // Wrap around indices. if (index >= $slides.length) index = 0; else if (index < 0) index = $slides.length -1; @@ -93,13 +94,16 @@ // Move img src into background-image $slides.find('img').each(function () { - $(this).css('background-image', 'url(' + $(this).attr('src') + ')' ); - $(this).attr('src', 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='); + var placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; + if ($(this).attr('src') !== placeholderBase64) { + $(this).css('background-image', 'url("' + $(this).attr('src') + '")' ); + $(this).attr('src', placeholderBase64); + } }); // dynamically add indicators if (options.indicators) { - var $indicators = $('
                      '); + $indicators = $('
                        '); $slides.each(function( index ) { var $indicator = $('
                      • '); @@ -167,7 +171,7 @@ $this.hammer({ prevent_default: false - }).bind('pan', function(e) { + }).on('pan', function(e) { if (e.gesture.pointerType === "touch") { // reset interval @@ -176,10 +180,13 @@ var direction = e.gesture.direction; var x = e.gesture.deltaX; var velocityX = e.gesture.velocityX; + var velocityY = e.gesture.velocityY; $curr_slide = $slider.find('.active'); - $curr_slide.velocity({ translateX: x - }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + if (Math.abs(velocityX) > Math.abs(velocityY)) { + $curr_slide.velocity({ translateX: x + }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + } // Swipe Left if (direction === 4 && (x > ($this.innerWidth() / 2) || velocityX < -0.65)) { @@ -212,14 +219,14 @@ } - }).bind('panend', function(e) { + }).on('panend', function(e) { if (e.gesture.pointerType === "touch") { $curr_slide = $slider.find('.active'); panning = false; curr_index = $slider.find('.active').index(); - if (!swipeRight && !swipeLeft) { + if (!swipeRight && !swipeLeft || $slides.length <=1) { // Return to original spot $curr_slide.velocity({ translateX: 0 }, {duration: 300, queue: false, easing: 'easeOutQuad'}); @@ -274,6 +281,16 @@ ); }); + $this.on('sliderNext', function() { + $active_index = $slider.find('.active').index(); + moveToSlide($active_index + 1); + }); + + $this.on('sliderPrev', function() { + $active_index = $slider.find('.active').index(); + moveToSlide($active_index - 1); + }); + }); @@ -284,18 +301,24 @@ }, start : function() { $(this).trigger('sliderStart'); + }, + next : function() { + $(this).trigger('sliderNext'); + }, + prev : function() { + $(this).trigger('sliderPrev'); } }; - $.fn.slider = function(methodOrOptions) { - if ( methods[methodOrOptions] ) { - return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { - // Default to "init" - return methods.init.apply( this, arguments ); - } else { - $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' ); - } - }; // Plugin end -}( jQuery )); \ No newline at end of file + $.fn.slider = function(methodOrOptions) { + if ( methods[methodOrOptions] ) { + return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { + // Default to "init" + return methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' ); + } + }; // Plugin end +}( jQuery )); diff --git a/js/tabs.js b/js/tabs.js index a89c1f2f5d..5d9de907d8 100644 --- a/js/tabs.js +++ b/js/tabs.js @@ -1,105 +1,222 @@ (function ($) { var methods = { - init : function() { - return this.each(function() { + init : function(options) { + var defaults = { + onShow: null, + swipeable: false, + responsiveThreshold: Infinity, // breakpoint for swipeable + }; + options = $.extend(defaults, options); + var namespace = Materialize.objectSelectorString($(this)); + + return this.each(function(i) { + + var uniqueNamespace = namespace+i; // For each set of tabs, we want to keep track of // which tab is active and its associated content var $this = $(this), window_width = $(window).width(); - $this.width('100%'); var $active, $content, $links = $this.find('li.tab a'), $tabs_width = $this.width(), - $tab_width = $this.find('li').first().outerWidth(), - $index = 0; + $tabs_content = $(), + $tabs_wrapper, + $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length, + $indicator, + index = 0, + prev_index = 0, + clicked = false, + clickedTimeout, + transition = 300; + + + // Finds right attribute for indicator based on active tab. + // el: jQuery Object + var calcRightPos = function(el) { + return Math.ceil($tabs_width - el.position().left - el[0].getBoundingClientRect().width - $this.scrollLeft()); + }; + + // Finds left attribute for indicator based on active tab. + // el: jQuery Object + var calcLeftPos = function(el) { + return Math.floor(el.position().left + $this.scrollLeft()); + }; + + // Animates Indicator to active tab. + // prev_index: Number + var animateIndicator = function(prev_index) { + if ((index - prev_index) >= 0) { + $indicator.velocity({"right": calcRightPos($active) }, { duration: transition, queue: false, easing: 'easeOutQuad'}); + $indicator.velocity({"left": calcLeftPos($active) }, {duration: transition, queue: false, easing: 'easeOutQuad', delay: 90}); + + } else { + $indicator.velocity({"left": calcLeftPos($active) }, { duration: transition, queue: false, easing: 'easeOutQuad'}); + $indicator.velocity({"right": calcRightPos($active) }, {duration: transition, queue: false, easing: 'easeOutQuad', delay: 90}); + } + }; + + // Change swipeable according to responsive threshold + if (options.swipeable) { + if (window_width > options.responsiveThreshold) { + options.swipeable = false; + } + } + // If the location.hash matches one of the links, use that as the active tab. $active = $($links.filter('[href="'+location.hash+'"]')); // If no match is found, use the first link or any with class 'active' as the initial active tab. if ($active.length === 0) { - $active = $(this).find('li.tab a.active').first(); + $active = $(this).find('li.tab a.active').first(); } if ($active.length === 0) { $active = $(this).find('li.tab a').first(); } $active.addClass('active'); - $index = $links.index($active); - if ($index < 0) { - $index = 0; + index = $links.index($active); + if (index < 0) { + index = 0; } - $content = $($active[0].hash); + if ($active[0] !== undefined) { + $content = $($active[0].hash); + $content.addClass('active'); + } // append indicator then set indicator width to tab width - $this.append('
                        '); - var $indicator = $this.find('.indicator'); + if (!$this.find('.indicator').length) { + $this.append('
                      • '); + } + $indicator = $this.find('.indicator'); + + // we make sure that the indicator is at the end of the tabs + $this.append($indicator); + if ($this.is(":visible")) { - $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)}); - $indicator.css({"left": $index * $tab_width}); + // $indicator.css({"right": $tabs_width - ((index + 1) * $tab_width)}); + // $indicator.css({"left": index * $tab_width}); + setTimeout(function() { + $indicator.css({"right": calcRightPos($active) }); + $indicator.css({"left": calcLeftPos($active) }); + }, 0); } - $(window).resize(function () { + $(window).off('resize.tabs-'+uniqueNamespace).on('resize.tabs-'+uniqueNamespace, function () { $tabs_width = $this.width(); - $tab_width = $this.find('li').first().outerWidth(); - if ($index < 0) { - $index = 0; + $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length; + if (index < 0) { + index = 0; } if ($tab_width !== 0 && $tabs_width !== 0) { - $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)}); - $indicator.css({"left": $index * $tab_width}); + $indicator.css({"right": calcRightPos($active) }); + $indicator.css({"left": calcLeftPos($active) }); } }); - // Hide the remaining content - $links.not($active).each(function () { - $(this.hash).hide(); - }); + // Initialize Tabs Content. + if (options.swipeable) { + // TODO: Duplicate calls with swipeable? handle multiple div wrapping. + $links.each(function () { + var $curr_content = $(Materialize.escapeHash(this.hash)); + $curr_content.addClass('carousel-item'); + $tabs_content = $tabs_content.add($curr_content); + }); + $tabs_wrapper = $tabs_content.wrapAll(''); + $tabs_content.css('display', ''); + $('.tabs-content.carousel').carousel({ + fullWidth: true, + noWrap: true, + onCycleTo: function(item) { + if (!clicked) { + var prev_index = index; + index = $tabs_wrapper.index(item); + $active.removeClass('active'); + $active = $links.eq(index); + $active.addClass('active'); + animateIndicator(prev_index); + if (typeof(options.onShow) === "function") { + options.onShow.call($this[0], $content); + } + } + }, + }); + } else { + // Hide the remaining content + $links.not($active).each(function () { + $(Materialize.escapeHash(this.hash)).hide(); + }); + } // Bind the click event handler - $this.on('click', 'a', function(e){ + $this.off('click.tabs').on('click.tabs', 'a', function(e) { if ($(this).parent().hasClass('disabled')) { e.preventDefault(); return; } + // Act as regular link if target attribute is specified. + if (!!$(this).attr("target")) { + return; + } + + clicked = true; $tabs_width = $this.width(); - $tab_width = $this.find('li').first().outerWidth(); + $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length; // Make the old tab inactive. $active.removeClass('active'); - $content.hide(); + var $oldContent = $content // Update the variables with the new link and content $active = $(this); - $content = $(this.hash); + $content = $(Materialize.escapeHash(this.hash)); $links = $this.find('li.tab a'); + var activeRect = $active.position(); // Make the tab active. $active.addClass('active'); - var $prev_index = $index; - $index = $links.index($(this)); - if ($index < 0) { - $index = 0; + prev_index = index; + index = $links.index($(this)); + if (index < 0) { + index = 0; } // Change url to current tab // window.location.hash = $active.attr('href'); - $content.show(); + // Swap content + if (options.swipeable) { + if ($tabs_content.length) { + $tabs_content.carousel('set', index, function() { + if (typeof(options.onShow) === "function") { + options.onShow.call($this[0], $content); + } + }); + } + } else { + if ($content !== undefined) { + $content.show(); + $content.addClass('active'); + if (typeof(options.onShow) === "function") { + options.onShow.call(this, $content); + } + } + + if ($oldContent !== undefined && + !$oldContent.is($content)) { + $oldContent.hide(); + $oldContent.removeClass('active'); + } + } - // Update indicator - if (($index - $prev_index) >= 0) { - $indicator.velocity({"right": $tabs_width - (($index + 1) * $tab_width)}, { duration: 300, queue: false, easing: 'easeOutQuad'}); - $indicator.velocity({"left": $index * $tab_width}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90}); + // Reset clicked state + clickedTimeout = setTimeout(function(){ clicked = false; }, transition); - } - else { - $indicator.velocity({"left": $index * $tab_width}, { duration: 300, queue: false, easing: 'easeOutQuad'}); - $indicator.velocity({"right": $tabs_width - (($index + 1) * $tab_width)}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90}); - } + // Update indicator + animateIndicator(prev_index); // Prevent the anchor's default click action e.preventDefault(); @@ -119,7 +236,7 @@ // Default to "init" return methods.init.apply( this, arguments ); } else { - $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' ); + $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tabs' ); } }; diff --git a/js/tapTarget.js b/js/tapTarget.js new file mode 100644 index 0000000000..22b48d36a0 --- /dev/null +++ b/js/tapTarget.js @@ -0,0 +1,187 @@ +(function ($) { + + var methods = { + init: function (options) { + return this.each(function() { + var origin = $('#'+$(this).attr('data-activates')); + var screen = $('body'); + + // Creating tap target + var tapTargetEl = $(this); + var tapTargetWrapper = tapTargetEl.parent('.tap-target-wrapper'); + var tapTargetWave = tapTargetWrapper.find('.tap-target-wave'); + var tapTargetOriginEl = tapTargetWrapper.find('.tap-target-origin'); + var tapTargetContentEl = tapTargetEl.find('.tap-target-content'); + + // Creating wrapper + if (!tapTargetWrapper.length) { + tapTargetWrapper = tapTargetEl.wrap($('
                        ')).parent(); + } + + // Creating content + if (!tapTargetContentEl.length) { + tapTargetContentEl = $('
                        '); + tapTargetEl.append(tapTargetContentEl); + } + + // Creating foreground wave + if (!tapTargetWave.length) { + tapTargetWave = $('
                        '); + + // Creating origin + if (!tapTargetOriginEl.length) { + tapTargetOriginEl = origin.clone(true, true); + tapTargetOriginEl.addClass('tap-target-origin'); + tapTargetOriginEl.removeAttr('id'); + tapTargetOriginEl.removeAttr('style'); + tapTargetWave.append(tapTargetOriginEl); + } + + tapTargetWrapper.append(tapTargetWave); + } + + // Open + var openTapTarget = function() { + if (tapTargetWrapper.is('.open')) { + return; + } + + // Adding open class + tapTargetWrapper.addClass('open'); + + setTimeout(function() { + tapTargetOriginEl.off('click.tapTarget').on('click.tapTarget', function(e) { + closeTapTarget(); + tapTargetOriginEl.off('click.tapTarget'); + }); + + $(document).off('click.tapTarget').on('click.tapTarget', function(e) { + closeTapTarget(); + $(document).off('click.tapTarget'); + }); + + var throttledCalc = Materialize.throttle(function() { + calculateTapTarget(); + }, 200); + $(window).off('resize.tapTarget').on('resize.tapTarget', throttledCalc); + }, 0); + }; + + // Close + var closeTapTarget = function(){ + if (!tapTargetWrapper.is('.open')) { + return; + } + + tapTargetWrapper.removeClass('open'); + tapTargetOriginEl.off('click.tapTarget') + $(document).off('click.tapTarget'); + $(window).off('resize.tapTarget'); + }; + + // Pre calculate + var calculateTapTarget = function() { + // Element or parent is fixed position? + var isFixed = origin.css('position') === 'fixed'; + if (!isFixed) { + var parents = origin.parents(); + for(var i = 0; i < parents.length; i++) { + isFixed = $(parents[i]).css('position') == 'fixed'; + if (isFixed) { + break; + } + } + } + + // Calculating origin + var originWidth = origin.outerWidth(); + var originHeight = origin.outerHeight(); + var originTop = isFixed ? origin.offset().top - $(document).scrollTop() : origin.offset().top; + var originLeft = isFixed ? origin.offset().left - $(document).scrollLeft() : origin.offset().left; + + // Calculating screen + var windowWidth = $(window).width(); + var windowHeight = $(window).height(); + var centerX = windowWidth / 2; + var centerY = windowHeight / 2; + var isLeft = originLeft <= centerX; + var isRight = originLeft > centerX; + var isTop = originTop <= centerY; + var isBottom = originTop > centerY; + var isCenterX = originLeft >= windowWidth*0.25 && originLeft <= windowWidth*0.75; + var isCenterY = originTop >= windowHeight*0.25 && originTop <= windowHeight*0.75; + + // Calculating tap target + var tapTargetWidth = tapTargetEl.outerWidth(); + var tapTargetHeight = tapTargetEl.outerHeight(); + var tapTargetTop = originTop + originHeight/2 - tapTargetHeight/2; + var tapTargetLeft = originLeft + originWidth/2 - tapTargetWidth/2; + var tapTargetPosition = isFixed ? 'fixed' : 'absolute'; + + // Calculating content + var tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth/2 + originWidth; + var tapTargetTextHeight = tapTargetHeight/2; + var tapTargetTextTop = isTop ? tapTargetHeight/2 : 0; + var tapTargetTextBottom = 0; + var tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth/2 - originWidth : 0; + var tapTargetTextRight = 0; + var tapTargetTextPadding = originWidth; + var tapTargetTextAlign = isBottom ? 'bottom' : 'top'; + + // Calculating wave + var tapTargetWaveWidth = originWidth > originHeight ? originWidth*2 : originWidth*2; + var tapTargetWaveHeight = tapTargetWaveWidth; + var tapTargetWaveTop = tapTargetHeight/2 - tapTargetWaveHeight/2; + var tapTargetWaveLeft = tapTargetWidth/2 - tapTargetWaveWidth/2; + + // Setting tap target + var tapTargetWrapperCssObj = {}; + tapTargetWrapperCssObj.top = isTop ? tapTargetTop : ''; + tapTargetWrapperCssObj.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth : ''; + tapTargetWrapperCssObj.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight : ''; + tapTargetWrapperCssObj.left = isLeft ? tapTargetLeft : ''; + tapTargetWrapperCssObj.position = tapTargetPosition; + tapTargetWrapper.css(tapTargetWrapperCssObj); + + // Setting content + tapTargetContentEl.css({ + width: tapTargetTextWidth, + height: tapTargetTextHeight, + top: tapTargetTextTop, + right: tapTargetTextRight, + bottom: tapTargetTextBottom, + left: tapTargetTextLeft, + padding: tapTargetTextPadding, + verticalAlign: tapTargetTextAlign + }); + + // Setting wave + tapTargetWave.css({ + top: tapTargetWaveTop, + left: tapTargetWaveLeft, + width: tapTargetWaveWidth, + height: tapTargetWaveHeight + }); + } + + if (options == 'open') { + calculateTapTarget(); + openTapTarget(); + } + + if (options == 'close') + closeTapTarget(); + }); + }, + open: function() {}, + close: function() {} + }; + + $.fn.tapTarget = function(methodOrOptions) { + if (methods[methodOrOptions] || typeof methodOrOptions === 'object') + return methods.init.apply( this, arguments ); + + $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tap-target' ); + }; + +}( jQuery )); diff --git a/js/toasts.js b/js/toasts.js index 6eb70d1dd4..d67725769e 100644 --- a/js/toasts.js +++ b/js/toasts.js @@ -1,136 +1,320 @@ -Materialize.toast = function (message, displayLength, className, completeCallback) { - className = className || ""; +(function($, Vel) { + 'use strict'; - var container = document.getElementById('toast-container'); + let _defaults = { + displayLength: Infinity, + inDuration: 300, + outDuration: 375, + className: undefined, + completeCallback: undefined, + activationPercent: 0.8 + }; - // Create toast container if it does not exist - if (container === null) { - // create notification container - container = document.createElement('div'); - container.id = 'toast-container'; - document.body.appendChild(container); - } + class Toast { + constructor(message, displayLength, className, completeCallback) { + if (!message) { + return; + } + + + /** + * Options for the toast + * @member Toast#options + */ + this.options = { + displayLength: displayLength, + className: className, + completeCallback: completeCallback + }; - // Select and append toast - var newToast = createToast(message); + this.options = $.extend({}, Toast.defaults, this.options); + this.message = message; + + /** + * Describes current pan state toast + * @type {Boolean} + */ + this.panning = false; + + /** + * Time remaining until toast is removed + */ + this.timeRemaining = this.options.displayLength; + + if (Toast._toasts.length === 0) { + Toast._createContainer(); + } - // only append toast if message is not undefined - if(message){ - container.appendChild(newToast); + // Create new toast + Toast._toasts.push(this); + let toastElement = this.createToast(); + toastElement.M_Toast = this; + this.el = toastElement; + this._animateIn(); + this.setTimer(); } - newToast.style.top = '35px'; - newToast.style.opacity = 0; + static get defaults() { + return _defaults; + } - // Animate toast in - Vel(newToast, { "top" : "0px", opacity: 1 }, {duration: 300, - easing: 'easeOutCubic', - queue: false}); + /** + * Append toast container and add event handlers + */ + static _createContainer() { + let container = document.createElement('div'); + container.setAttribute('id', 'toast-container'); - // Allows timer to be pause while being panned - var timeLeft = displayLength; - var counterInterval = setInterval (function(){ + // Add event handler + container.addEventListener('touchstart', Toast._onDragStart); + container.addEventListener('touchmove', Toast._onDragMove); + container.addEventListener('touchend', Toast._onDragEnd); + container.addEventListener('mousedown', Toast._onDragStart); + document.addEventListener('mousemove', Toast._onDragMove); + document.addEventListener('mouseup', Toast._onDragEnd); - if (newToast.parentNode === null) - window.clearInterval(counterInterval); + document.body.appendChild(container); + Toast._container = container; + } - // If toast is not being dragged, decrease its time remaining - if (!newToast.classList.contains('panning')) { - timeLeft -= 20; - } + /** + * Remove toast container and event handlers + */ + static _removeContainer() { + // Add event handler + document.removeEventListener('mousemove', Toast._onDragMove); + document.removeEventListener('mouseup', Toast._onDragEnd); - if (timeLeft <= 0) { - // Animate toast out - Vel(newToast, {"opacity": 0, marginTop: '-40px'}, { duration: 375, - easing: 'easeOutExpo', - queue: false, - complete: function(){ - // Call the optional callback - if(typeof(completeCallback) === "function") - completeCallback(); - // Remove toast after it times out - this[0].parentNode.removeChild(this[0]); - } - }); - window.clearInterval(counterInterval); + Toast._container.parentNode.removeChild(Toast._container); + Toast._container = null; + } + + /** + * Begin drag handler + * @param {Event} e + */ + static _onDragStart(e) { + if (e.target && $(e.target).closest('.toast').length) { + let $toast = $(e.target).closest('.toast'); + let toast = $toast[0].M_Toast; + toast.panning = true; + Toast._draggedToast = toast; + toast.el.classList.add('panning'); + toast.el.style.transition = ''; + toast.startingXPos = Toast._xPos(e); + toast.time = Date.now(); + toast.xPos = Toast._xPos(e); } - }, 20); + } + /** + * Drag move handler + * @param {Event} e + */ + static _onDragMove(e) { + if (!!Toast._draggedToast) { + e.preventDefault(); + let toast = Toast._draggedToast; + toast.deltaX = Math.abs(toast.xPos - Toast._xPos(e)); + toast.xPos = Toast._xPos(e); + toast.velocityX = toast.deltaX / (Date.now() - toast.time); + toast.time = Date.now(); + let totalDeltaX = toast.xPos - toast.startingXPos; + let activationDistance = + toast.el.offsetWidth * toast.options.activationPercent; + toast.el.style.transform = `translateX(${totalDeltaX}px)`; + toast.el.style.opacity = 1-Math.abs(totalDeltaX / activationDistance); + } + } - function createToast(html) { + /** + * End drag handler + * @param {Event} e + */ + static _onDragEnd(e) { + if (!!Toast._draggedToast) { + let toast = Toast._draggedToast; + toast.panning = false; + toast.el.classList.remove('panning'); - // Create toast - var toast = document.createElement('div'); - toast.classList.add('toast'); - if (className) { - var classes = className.split(' '); + let totalDeltaX = toast.xPos - toast.startingXPos; + let activationDistance = + toast.el.offsetWidth * toast.options.activationPercent; + let shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || + toast.velocityX > 1; - for (var i = 0, count = classes.length; i < count; i++) { - toast.classList.add(classes[i]); - } - } - // If type of parameter is HTML Element - if ( typeof HTMLElement === "object" ? html instanceof HTMLElement : html && typeof html === "object" && html !== null && html.nodeType === 1 && typeof html.nodeName==="string" -) { - toast.appendChild(html); - } - else if (html instanceof jQuery) { - // Check if it is jQuery object - toast.appendChild(html[0]); + // Remove toast + if (shouldBeDismissed) { + toast.wasSwiped = true; + toast.remove(); + + // Animate toast back to original position + } else { + toast.el.style.transition = 'transform .2s, opacity .2s'; + toast.el.style.transform = ''; + toast.el.style.opacity = ''; } - else { - // Insert as text; - toast.innerHTML = html; + Toast._draggedToast = null; + } + } + + /** + * Get x position of mouse or touch event + * @param {Event} e + */ + static _xPos(e) { + if (e.targetTouches && (e.targetTouches.length >= 1)) { + return e.targetTouches[0].clientX; + } + // mouse event + return e.clientX; + } + + /** + * Remove all toasts + */ + static removeAll() { + for(let toastIndex in Toast._toasts) { + Toast._toasts[toastIndex].remove(); + } + } + + + /** + * Create toast and append it to toast container + */ + createToast() { + let toast = document.createElement('div'); + toast.classList.add('toast'); + + // Add custom classes onto toast + if (this.options.className) { + let classes = this.options.className.split(' '); + let i, count; + for (i = 0, count = classes.length; i < count; i++) { + toast.classList.add(classes[i]); } - // Bind hammer - var hammerHandler = new Hammer(toast, {prevent_default: false}); - hammerHandler.on('pan', function(e) { - var deltaX = e.deltaX; - var activationDistance = 80; - - // Change toast state - if (!toast.classList.contains('panning')){ - toast.classList.add('panning'); - } + } + + // Set content + if ( typeof HTMLElement === 'object' ? + this.message instanceof HTMLElement : + this.message && typeof this.message === 'object' && + this.message !== null && this.message.nodeType === 1 && + typeof this.message.nodeName==='string' + ) { + toast.appendChild(this.message); - var opacityPercent = 1-Math.abs(deltaX / activationDistance); - if (opacityPercent < 0) - opacityPercent = 0; - - Vel(toast, {left: deltaX, opacity: opacityPercent }, {duration: 50, queue: false, easing: 'easeOutQuad'}); - - }); - - hammerHandler.on('panend', function(e) { - var deltaX = e.deltaX; - var activationDistance = 80; - - // If toast dragged past activation point - if (Math.abs(deltaX) > activationDistance) { - Vel(toast, {marginTop: '-40px'}, { duration: 375, - easing: 'easeOutExpo', - queue: false, - complete: function(){ - if(typeof(completeCallback) === "function") { - completeCallback(); - } - toast.parentNode.removeChild(toast); - } - }); - - } else { - toast.classList.remove('panning'); - // Put toast back into original position - Vel(toast, { left: 0, opacity: 1 }, { duration: 300, - easing: 'easeOutExpo', - queue: false - }); + // Check if it is jQuery object + } else if (this.message instanceof jQuery) { + $(toast).append(this.message); + + // Insert as text; + } else { + toast.innerHTML = this.message; + } + // Append toasft + Toast._container.appendChild(toast); + return toast; + } + + /** + * Animate in toast + */ + _animateIn() { + // Animate toast in + Vel(this.el, {top: 0, opacity: 1 }, { + duration: 300, + easing: 'easeOutCubic', + queue: false + }); + } + + + /** + * Create setInterval which automatically removes toast when timeRemaining >= 0 + * has been reached + */ + setTimer() { + if (this.timeRemaining !== Infinity) { + this.counterInterval = setInterval(() => { + // If toast is not being dragged, decrease its time remaining + if (!this.panning) { + this.timeRemaining -= 20; } - }); - return toast; + // Animate toast out + if (this.timeRemaining <= 0) { + this.remove(); + } + }, 20); + } } -}; + + + /** + * Dismiss toast with animation + */ + remove() { + window.clearInterval(this.counterInterval); + let activationDistance = + this.el.offsetWidth * this.options.activationPercent; + + if(this.wasSwiped) { + this.el.style.transition = 'transform .05s, opacity .05s'; + this.el.style.transform = `translateX(${activationDistance}px)`; + this.el.style.opacity = 0; + } + + Vel( + this.el, + {opacity: 0, marginTop: '-40px'}, + { + duration: this.options.outDuration, + easing: 'easeOutExpo', + queue: false, + complete: () => { + // Call the optional callback + if(typeof(this.options.completeCallback) === 'function') { + this.options.completeCallback(); + } + // Remove toast from DOM + this.el.parentNode.removeChild(this.el); + Toast._toasts.splice(Toast._toasts.indexOf(this), 1); + if (Toast._toasts.length === 0) { + Toast._removeContainer(); + } + } + } + ); + } + } + + /** + * @static + * @memberof Toast + * @type {Array.} + */ + Toast._toasts = []; + + /** + * @static + * @memberof Toast + */ + Toast._container = null; + + /** + * @static + * @memberof Toast + * @type {Toast} + */ + Toast._draggedToast = null; + + Materialize.Toast = Toast; + Materialize.toast = function(message, displayLength, className, completeCallback) { + return new Toast(message, displayLength, className, completeCallback); + }; +})(jQuery, Materialize.Vel); diff --git a/js/tooltip.js b/js/tooltip.js index fa4467bb4d..ebed0556d8 100644 --- a/js/tooltip.js +++ b/js/tooltip.js @@ -1,176 +1,238 @@ (function ($) { $.fn.tooltip = function (options) { - var timeout = null, - counter = null, - started = false, - counterInterval = null, - margin = 5; + var timeout = null, + margin = 5; // Defaults var defaults = { - delay: 350 + delay: 350, + tooltip: '', + position: 'bottom', + html: false }; // Remove tooltip from the activator if (options === "remove") { - this.each(function(){ + this.each(function() { $('#' + $(this).attr('data-tooltip-id')).remove(); + $(this).removeAttr('data-tooltip-id'); + $(this).off('mouseenter.tooltip mouseleave.tooltip'); }); return false; } options = $.extend(defaults, options); - - return this.each(function(){ + return this.each(function() { var tooltipId = Materialize.guid(); var origin = $(this); - origin.attr('data-tooltip-id', tooltipId); - - // Create Text span - var tooltip_text = $('').text(origin.attr('data-tooltip')); - - // Create tooltip - var newTooltip = $('
                        '); - newTooltip.addClass('material-tooltip').append(tooltip_text) - .appendTo($('body')) - .attr('id', tooltipId); - var backdrop = $('
                        ').addClass('backdrop'); - backdrop.appendTo(newTooltip); - backdrop.css({ top: 0, left:0 }); + // Destroy old tooltip + if (origin.attr('data-tooltip-id')) { + $('#' + origin.attr('data-tooltip-id')).remove(); + } + origin.attr('data-tooltip-id', tooltipId); - //Destroy previously binded events - origin.off('mouseenter.tooltip mouseleave.tooltip'); + // Get attributes. + var allowHtml, + tooltipDelay, + tooltipPosition, + tooltipText, + tooltipEl, + backdrop; + var setAttributes = function() { + allowHtml = origin.attr('data-html') ? origin.attr('data-html') === 'true' : options.html; + tooltipDelay = origin.attr('data-delay'); + tooltipDelay = (tooltipDelay === undefined || tooltipDelay === '') ? + options.delay : tooltipDelay; + tooltipPosition = origin.attr('data-position'); + tooltipPosition = (tooltipPosition === undefined || tooltipPosition === '') ? + options.position : tooltipPosition; + tooltipText = origin.attr('data-tooltip'); + tooltipText = (tooltipText === undefined || tooltipText === '') ? + options.tooltip : tooltipText; + }; + setAttributes(); + + var renderTooltipEl = function() { + var tooltip = $('
                        '); + + // Create Text span + if (allowHtml) { + tooltipText = $('').html(tooltipText); + } else{ + tooltipText = $('').text(tooltipText); + } + + // Create tooltip + tooltip.append(tooltipText) + .appendTo($('body')) + .attr('id', tooltipId); + + // Create backdrop + backdrop = $('
                        '); + backdrop.appendTo(tooltip); + return tooltip; + }; + tooltipEl = renderTooltipEl(); + + // Destroy previously binded events + origin.off('mouseenter.tooltip mouseleave.tooltip'); // Mouse In - origin.on({ - 'mouseenter.tooltip': function(e) { - var tooltip_delay = origin.data("delay"); - tooltip_delay = (tooltip_delay === undefined || tooltip_delay === '') ? options.delay : tooltip_delay; - counter = 0; - counterInterval = setInterval(function(){ - counter += 10; - if (counter >= tooltip_delay && started === false) { - started = true; - newTooltip.css({ display: 'block', left: '0px', top: '0px' }); - - // Set Tooltip text - newTooltip.children('span').text(origin.attr('data-tooltip')); - - // Tooltip positioning - var originWidth = origin.outerWidth(); - var originHeight = origin.outerHeight(); - var tooltipPosition = origin.attr('data-position'); - var tooltipHeight = newTooltip.outerHeight(); - var tooltipWidth = newTooltip.outerWidth(); - var tooltipVerticalMovement = '0px'; - var tooltipHorizontalMovement = '0px'; - var scale_factor = 8; - - if (tooltipPosition === "top") { + var started = false, timeoutRef; + origin.on({'mouseenter.tooltip': function(e) { + var showTooltip = function() { + setAttributes(); + started = true; + tooltipEl.velocity('stop'); + backdrop.velocity('stop'); + tooltipEl.css({ visibility: 'visible', left: '0px', top: '0px' }); + + // Tooltip positioning + var originWidth = origin.outerWidth(); + var originHeight = origin.outerHeight(); + var tooltipHeight = tooltipEl.outerHeight(); + var tooltipWidth = tooltipEl.outerWidth(); + var tooltipVerticalMovement = '0px'; + var tooltipHorizontalMovement = '0px'; + var backdropOffsetWidth = backdrop[0].offsetWidth; + var backdropOffsetHeight = backdrop[0].offsetHeight; + var scaleXFactor = 8; + var scaleYFactor = 8; + var scaleFactor = 0; + var targetTop, targetLeft, newCoordinates; + + if (tooltipPosition === "top") { // Top Position - newTooltip.css({ - top: origin.offset().top - tooltipHeight - margin, - left: origin.offset().left + originWidth/2 - tooltipWidth/2 - }); + targetTop = origin.offset().top - tooltipHeight - margin; + targetLeft = origin.offset().left + originWidth/2 - tooltipWidth/2; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); tooltipVerticalMovement = '-10px'; backdrop.css({ + bottom: 0, + left: 0, borderRadius: '14px 14px 0 0', - transformOrigin: '50% 90%', + transformOrigin: '50% 100%', marginTop: tooltipHeight, - marginLeft: (tooltipWidth/2) - (backdrop.width()/2) + marginLeft: (tooltipWidth/2) - (backdropOffsetWidth/2) + }); + } + // Left Position + else if (tooltipPosition === "left") { + targetTop = origin.offset().top + originHeight/2 - tooltipHeight/2; + targetLeft = origin.offset().left - tooltipWidth - margin; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + tooltipHorizontalMovement = '-10px'; + backdrop.css({ + top: '-7px', + right: 0, + width: '14px', + height: '14px', + borderRadius: '14px 0 0 14px', + transformOrigin: '95% 50%', + marginTop: tooltipHeight/2, + marginLeft: tooltipWidth }); - } - // Left Position - else if (tooltipPosition === "left") { - newTooltip.css({ - top: origin.offset().top + originHeight/2 - tooltipHeight/2, - left: origin.offset().left - tooltipWidth - margin - }); - tooltipHorizontalMovement = '-10px'; - backdrop.css({ - width: '14px', - height: '14px', - borderRadius: '14px 0 0 14px', - transformOrigin: '95% 50%', - marginTop: tooltipHeight/2, - marginLeft: tooltipWidth - }); - } - // Right Position - else if (tooltipPosition === "right") { - newTooltip.css({ - top: origin.offset().top + originHeight/2 - tooltipHeight/2, - left: origin.offset().left + originWidth + margin - }); - tooltipHorizontalMovement = '+10px'; - backdrop.css({ - width: '14px', - height: '14px', - borderRadius: '0 14px 14px 0', - transformOrigin: '5% 50%', - marginTop: tooltipHeight/2, - marginLeft: '0px' - }); - } - else { - // Bottom Position - newTooltip.css({ - top: origin.offset().top + origin.outerHeight() + margin, - left: origin.offset().left + originWidth/2 - tooltipWidth/2 - }); - tooltipVerticalMovement = '+10px'; - backdrop.css({ - marginLeft: (tooltipWidth/2) - (backdrop.width()/2) - }); - } - - // Calculate Scale to fill - scale_factor = tooltipWidth / 8; - if (scale_factor < 8) { - scale_factor = 8; - } - if (tooltipPosition === "right" || tooltipPosition === "left") { - scale_factor = tooltipWidth / 10; - if (scale_factor < 6) - scale_factor = 6; - } - - newTooltip.velocity({ marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 350, queue: false }) - .velocity({opacity: 1}, {duration: 300, delay: 50, queue: false}); - backdrop.css({ display: 'block' }) - .velocity({opacity:1},{duration: 55, delay: 0, queue: false}) - .velocity({scale: scale_factor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'}); + } + // Right Position + else if (tooltipPosition === "right") { + targetTop = origin.offset().top + originHeight/2 - tooltipHeight/2; + targetLeft = origin.offset().left + originWidth + margin; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + tooltipHorizontalMovement = '+10px'; + backdrop.css({ + top: '-7px', + left: 0, + width: '14px', + height: '14px', + borderRadius: '0 14px 14px 0', + transformOrigin: '5% 50%', + marginTop: tooltipHeight/2, + marginLeft: '0px' + }); } - }, 10); // End Interval + else { + // Bottom Position + targetTop = origin.offset().top + origin.outerHeight() + margin; + targetLeft = origin.offset().left + originWidth/2 - tooltipWidth/2; + newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + tooltipVerticalMovement = '+10px'; + backdrop.css({ + top: 0, + left: 0, + marginLeft: (tooltipWidth/2) - (backdropOffsetWidth/2) + }); + } + + // Set tooptip css placement + tooltipEl.css({ + top: newCoordinates.y, + left: newCoordinates.x + }); + + // Calculate Scale to fill + scaleXFactor = Math.SQRT2 * tooltipWidth / parseInt(backdropOffsetWidth); + scaleYFactor = Math.SQRT2 * tooltipHeight / parseInt(backdropOffsetHeight); + scaleFactor = Math.max(scaleXFactor, scaleYFactor); + + tooltipEl.velocity({ translateY: tooltipVerticalMovement, translateX: tooltipHorizontalMovement}, { duration: 350, queue: false }) + .velocity({opacity: 1}, {duration: 300, delay: 50, queue: false}); + backdrop.css({ visibility: 'visible' }) + .velocity({opacity:1},{duration: 55, delay: 0, queue: false}) + .velocity({scaleX: scaleFactor, scaleY: scaleFactor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'}); + }; + + timeoutRef = setTimeout(showTooltip, tooltipDelay); // End Interval // Mouse Out }, 'mouseleave.tooltip': function(){ // Reset State - clearInterval(counterInterval); - counter = 0; + started = false; + clearTimeout(timeoutRef); // Animate back - newTooltip.velocity({ - opacity: 0, marginTop: 0, marginLeft: 0}, { duration: 225, queue: false, delay: 225 } - ); - backdrop.velocity({opacity: 0, scale: 1}, { - duration:225, - delay: 275, queue: false, - complete: function(){ - backdrop.css('display', 'none'); - newTooltip.css('display', 'none'); - started = false;} - }); + setTimeout(function() { + if (started !== true) { + tooltipEl.velocity({ + opacity: 0, translateY: 0, translateX: 0}, { duration: 225, queue: false}); + backdrop.velocity({opacity: 0, scaleX: 1, scaleY: 1}, { + duration:225, + queue: false, + complete: function(){ + backdrop.css({ visibility: 'hidden' }); + tooltipEl.css({ visibility: 'hidden' }); + started = false;} + }); + } + },225); } }); }); }; + var repositionWithinScreen = function(x, y, width, height) { + var newX = x; + var newY = y; + + if (newX < 0) { + newX = 4; + } else if (newX + width > window.innerWidth) { + newX -= newX + width - window.innerWidth; + } + + if (newY < 0) { + newY = 4; + } else if (newY + height > window.innerHeight + $(window).scrollTop) { + newY -= newY + height - window.innerHeight; + } + + return {x: newX, y: newY}; + }; + $(document).ready(function(){ $('.tooltipped').tooltip(); }); diff --git a/js/transitions.js b/js/transitions.js index caa7192930..bf3ffbaaaf 100644 --- a/js/transitions.js +++ b/js/transitions.js @@ -1,43 +1,58 @@ (function ($) { // Image transition function - Materialize.fadeInImage = function(selector){ - var element = $(selector); + Materialize.fadeInImage = function(selectorOrEl) { + var element; + if (typeof(selectorOrEl) === 'string') { + element = $(selectorOrEl); + } else if (typeof(selectorOrEl) === 'object') { + element = selectorOrEl; + } else { + return; + } element.css({opacity: 0}); $(element).velocity({opacity: 1}, { - duration: 650, - queue: false, - easing: 'easeOutSine' - }); + duration: 650, + queue: false, + easing: 'easeOutSine' + }); $(element).velocity({opacity: 1}, { - duration: 1300, - queue: false, - easing: 'swing', - step: function(now, fx) { - fx.start = 100; - var grayscale_setting = now/100; - var brightness_setting = 150 - (100 - now)/1.75; - - if (brightness_setting < 100) { - brightness_setting = 100; - } - if (now >= 0) { - $(this).css({ - "-webkit-filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)", - "filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)" - }); - } - } - }); + duration: 1300, + queue: false, + easing: 'swing', + step: function(now, fx) { + fx.start = 100; + var grayscale_setting = now/100; + var brightness_setting = 150 - (100 - now)/1.75; + + if (brightness_setting < 100) { + brightness_setting = 100; + } + if (now >= 0) { + $(this).css({ + "-webkit-filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)", + "filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)" + }); + } + } + }); }; // Horizontal staggered list - Materialize.showStaggeredList = function(selector) { + Materialize.showStaggeredList = function(selectorOrEl) { + var element; + if (typeof(selectorOrEl) === 'string') { + element = $(selectorOrEl); + } else if (typeof(selectorOrEl) === 'object') { + element = selectorOrEl; + } else { + return; + } var time = 0; - $(selector).find('li').velocity( + element.find('li').velocity( { translateX: "-100px"}, { duration: 0 }); - $(selector).find('li').each(function() { + element.find('li').each(function() { $(this).velocity( { opacity: "1", translateX: "0"}, { duration: 800, delay: time, easing: [60, 10] }); @@ -71,7 +86,7 @@ $('.dismissable').each(function() { $(this).hammer({ prevent_default: false - }).bind('pan', function(e) { + }).on('pan', function(e) { if (e.gesture.pointerType === "touch") { var $this = $(this); var direction = e.gesture.direction; @@ -91,7 +106,7 @@ swipeRight = true; } } - }).bind('panend', function(e) { + }).on('panend', function(e) { // Reset if collection is moved back into original position if (Math.abs(e.gesture.deltaX) < ($(this).innerWidth() / 2)) { swipeRight = false; diff --git a/js/velocity.min.js b/js/velocity.min.js index 58244c80e3..ea21aad889 100644 --- a/js/velocity.min.js +++ b/js/velocity.min.js @@ -1,4 +1,5 @@ -/*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ +/*! VelocityJS.org (1.2.3). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ /*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */ -!function(e){function t(e){var t=e.length,r=$.type(e);return"function"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===r||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?a[o.call(e)]||"object":typeof e},$.isArray=Array.isArray||function(e){return"array"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||"object"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof i&&(u=i,i=arguments[s]||{},s++),"object"!=typeof i&&"function"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||"fx")+"queue";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||"fx";var a=$.queue(r,t),n=a.shift();"inprogress"===n&&(n=a.shift()),n&&("fx"===t&&a.unshift("inprogress"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando="velocity"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i="Boolean Number String Function Array Date RegExp Object Error".split(" "),s=0;sn;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var C=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];$.each(C,function(e,t){x.setPropertyValue(w,"display",t)})}x.setPropertyValue(w,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&x.setPropertyValue(w,"visibility",u.visibility);for(var T in S)if("element"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,"tween"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?"":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j]("extract",null,N[1]):N[1]),"transform"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d="(0px, 0px, 0px)",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&"none"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&x.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&x.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="",t.getElementsByTagName("span").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h="swing",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,"velocity",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft="pageXOffset",v.State.scrollPropertyTop="pageYOffset"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft="scrollLeft",v.State.scrollPropertyTop="scrollTop");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e=f)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;en&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e=f||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=f?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=f?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,"display","none")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,"display")&&(u=!0,x.setPropertyValue(e,"display",x.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(x.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(x.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===f&&"filter"===r?d.getPropertyValue(r):d[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,"position");("fixed"===g||"absolute"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+"px")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c]("extract",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r]("name",e),"transform"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r]("extract",e,d)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&"transform"===x.Normalizations.registered[r]("name",e))x.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r]("inject",e,a),r=x.Normalizations.registered[r]("name",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r="";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===f&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}x.setPropertyValue(e,"transform",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,"position"),fontSize:x.getPropertyValue(n,"fontSize")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");v.init(u),e.myParent.appendChild(u),$.each(["overflow","overflowX","overflowY"],function(e,t){v.CSS.setPropertyValue(u,t,"hidden")}),v.CSS.setPropertyValue(u,"position",e.position),v.CSS.setPropertyValue(u,"fontSize",e.fontSize),v.CSS.setPropertyValue(u,"boxSizing","content-box"),$.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){v.CSS.setPropertyValue(u,t,s+"%")}),v.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,"fontSize"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if("scroll"===k){var S=/^x$/i.test(o.axis)?"Left":"Top",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container["scroll"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State["scrollProperty"+S]],A=v.State.scrollAnchor[v.State["scrollProperty"+("Left"===S?"Top":"Left")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:"",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log("tweensContainer (scroll): ",s.scroll,n)}else if("reverse"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);"none"===i(n).opts.display&&(i(n).opts.display="auto"),"hidden"===i(n).opts.visibility&&(i(n).opts.visibility="visible"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if("element"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log("reverse tweensContainer ("+j+"): "+JSON.stringify(E[j]),n)}s=E}else if("start"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp("^"+x.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;cO;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)}); \ No newline at end of file +/*! Note that this has been modified by Materialize to confirm that Velocity is not already being imported. */ +jQuery.Velocity?console.log("Velocity is already loaded. You may be needlessly importing Velocity again; note that Materialize includes Velocity."):(!function(e){function t(e){var t=e.length,a=r.type(e);return"function"===a||r.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===a||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var r=function(e,t){return new r.fn.init(e,t)};r.isWindow=function(e){return null!=e&&e==e.window},r.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e},r.isArray=Array.isArray||function(e){return"array"===r.type(e)},r.isPlainObject=function(e){var t;if(!e||"object"!==r.type(e)||e.nodeType||r.isWindow(e))return!1;try{if(e.constructor&&!o.call(e,"constructor")&&!o.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(a){return!1}for(t in e);return void 0===t||o.call(e,t)},r.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},r.data=function(e,t,n){if(void 0===n){var o=e[r.expando],i=o&&a[o];if(void 0===t)return i;if(i&&t in i)return i[t]}else if(void 0!==t){var o=e[r.expando]||(e[r.expando]=++r.uuid);return a[o]=a[o]||{},a[o][t]=n,n}},r.removeData=function(e,t){var n=e[r.expando],o=n&&a[n];o&&r.each(t,function(e,t){delete o[t]})},r.extend=function(){var e,t,a,n,o,i,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[l]||{},l++),"object"!=typeof s&&"function"!==r.type(s)&&(s={}),l===u&&(s=this,l--);u>l;l++)if(null!=(o=arguments[l]))for(n in o)e=s[n],a=o[n],s!==a&&(c&&a&&(r.isPlainObject(a)||(t=r.isArray(a)))?(t?(t=!1,i=e&&r.isArray(e)?e:[]):i=e&&r.isPlainObject(e)?e:{},s[n]=r.extend(c,i,a)):void 0!==a&&(s[n]=a));return s},r.queue=function(e,a,n){function o(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){a=(a||"fx")+"queue";var i=r.data(e,a);return n?(!i||r.isArray(n)?i=r.data(e,a,o(n)):i.push(n),i):i||[]}},r.dequeue=function(e,t){r.each(e.nodeType?[e]:e,function(e,a){t=t||"fx";var n=r.queue(a,t),o=n.shift();"inprogress"===o&&(o=n.shift()),o&&("fx"===t&&n.unshift("inprogress"),o.call(a,function(){r.dequeue(a,t)}))})},r.fn=r.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),a=this.offset(),n=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:r(e).offset();return a.top-=parseFloat(t.style.marginTop)||0,a.left-=parseFloat(t.style.marginLeft)||0,e.style&&(n.top+=parseFloat(e.style.borderTopWidth)||0,n.left+=parseFloat(e.style.borderLeftWidth)||0),{top:a.top-n.top,left:a.left-n.left}}};var a={};r.expando="velocity"+(new Date).getTime(),r.uuid=0;for(var n={},o=n.hasOwnProperty,i=n.toString,s="Boolean Number String Function Array Date RegExp Object Error".split(" "),l=0;ln;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return m.isString(e)?b.Easings[e]||(r=!1):r=m.isArray(e)&&1===e.length?s.apply(null,e):m.isArray(e)&&2===e.length?x.apply(null,e.concat([t])):m.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=b.Easings[b.defaults.easing]?b.defaults.easing:v),r}function c(e){if(e){var t=(new Date).getTime(),r=b.State.calls.length;r>1e4&&(b.State.calls=n(b.State.calls));for(var o=0;r>o;o++)if(b.State.calls[o]){var s=b.State.calls[o],l=s[0],u=s[2],d=s[3],g=!!d,y=null;d||(d=b.State.calls[o][3]=t-16);for(var h=Math.min((t-d)/u.duration,1),v=0,x=l.length;x>v;v++){var P=l[v],V=P.element;if(i(V)){var C=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var T=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];f.each(T,function(e,t){S.setPropertyValue(V,"display",t)})}S.setPropertyValue(V,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&S.setPropertyValue(V,"visibility",u.visibility);for(var k in P)if("element"!==k){var A,F=P[k],j=m.isString(F.easing)?b.Easings[F.easing]:F.easing;if(1===h)A=F.endValue;else{var E=F.endValue-F.startValue;if(A=F.startValue+E*j(h,u,E),!g&&A===F.currentValue)continue}if(F.currentValue=A,"tween"===k)y=A;else{if(S.Hooks.registered[k]){var H=S.Hooks.getRoot(k),N=i(V).rootPropertyValueCache[H];N&&(F.rootPropertyValue=N)}var L=S.setPropertyValue(V,k,F.currentValue+(0===parseFloat(A)?"":F.unitType),F.rootPropertyValue,F.scrollData);S.Hooks.registered[k]&&(i(V).rootPropertyValueCache[H]=S.Normalizations.registered[H]?S.Normalizations.registered[H]("extract",null,L[1]):L[1]),"transform"===L[0]&&(C=!0)}}u.mobileHA&&i(V).transformCache.translate3d===a&&(i(V).transformCache.translate3d="(0px, 0px, 0px)",C=!0),C&&S.flushTransformCache(V)}}u.display!==a&&"none"!==u.display&&(b.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(b.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],h,Math.max(0,d+u.duration-t),d,y),1===h&&p(o)}}b.State.isTicking&&w(c)}function p(e,t){if(!b.State.calls[e])return!1;for(var r=b.State.calls[e][0],n=b.State.calls[e][1],o=b.State.calls[e][2],s=b.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&S.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&S.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&(f.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test(f.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var d=!1;f.each(S.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(d=!0,delete i(p).transformCache[t])}),o.mobileHA&&(d=!0,delete i(p).transformCache.translate3d),d&&S.flushTransformCache(p),S.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(g){setTimeout(function(){throw g},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&(f.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),b(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&f.dequeue(p,o.queue)}b.State.calls[e]=!1;for(var m=0,y=b.State.calls.length;y>m;m++)if(b.State.calls[m]!==!1){l=!0;break}l===!1&&(b.State.isTicking=!1,delete b.State.calls,b.State.calls=[])}var f,d=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="",t.getElementsByTagName("span").length)return t=null,e}return a}(),g=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r,a=(new Date).getTime();return r=Math.max(0,16-(a-e)),e=a+r,setTimeout(function(){t(a+r)},r)}}(),m={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},y=!1;if(e.fn&&e.fn.jquery?(f=e,y=!0):f=t.Velocity.Utilities,8>=d&&!y)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=d)return void(jQuery.fn.velocity=jQuery.fn.animate);var h=400,v="swing",b={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:f,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:h,easing:v,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){f.data(e,"velocity",{isSVG:m.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(b.State.scrollAnchor=t,b.State.scrollPropertyLeft="pageXOffset",b.State.scrollPropertyTop="pageYOffset"):(b.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,b.State.scrollPropertyLeft="scrollLeft",b.State.scrollPropertyTop="scrollTop");var x=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o,i,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,p=1e-4,f=.016;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,l.tension=e,l.friction=t,o=null!==n,o?(c=a(e,t),i=c/n*f):i=f;s=r(s||l,i),u.push(1+s.x),c+=16,Math.abs(s.x)>p&&Math.abs(s.v)>p;);return o?function(e){return u[e*(u.length-1)|0]}:c}}();b.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},f.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){b.Easings[t[0]]=l.apply(null,t[1])});var S=b.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e=d)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=d||b.State.isGingerbread||(S.Lists.transformsBase=S.Lists.transformsBase.concat(S.Lists.transforms3D));for(var e=0;en&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e=d||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=d?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=d?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(d||b.State.isAndroid&&!b.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(b.State.prefixMatches[e])return[b.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),m.isString(b.State.prefixElement.style[n]))return b.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t,r=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return e=e.replace(r,function(e,t,r,a){return t+t+r+r+a+a}),t=a.exec(e),t?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&S.setPropertyValue(e,"display","none")}var l=0;if(8>=d)l=f.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===S.getPropertyValue(e,"display")&&(u=!0,S.setPropertyValue(e,"display",S.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==S.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(S.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(S.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(S.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(S.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==S.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(S.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(S.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(S.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(S.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var g;g=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===d&&"filter"===r?g.getPropertyValue(r):g[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var m=s(e,"position");("fixed"===m||"absolute"===m&&/top|left/i.test(r))&&(l=f(e).position()[r]+"px")}return l}var l;if(S.Hooks.registered[r]){var u=r,c=S.Hooks.getRoot(u);n===a&&(n=S.getPropertyValue(e,S.Names.prefixCheck(c)[0])),S.Normalizations.registered[c]&&(n=S.Normalizations.registered[c]("extract",e,n)),l=S.Hooks.extractValue(u,n)}else if(S.Normalizations.registered[r]){var p,g;p=S.Normalizations.registered[r]("name",e),"transform"!==p&&(g=s(e,S.Names.prefixCheck(p)[0]),S.Values.isCSSNullValue(g)&&S.Hooks.templates[r]&&(g=S.Hooks.templates[r][1])),l=S.Normalizations.registered[r]("extract",e,g)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&S.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(m){l=0}else l=e.getAttribute(r);else l=s(e,S.Names.prefixCheck(r)[0]);return S.Values.isCSSNullValue(l)&&(l=0),b.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(S.Normalizations.registered[r]&&"transform"===S.Normalizations.registered[r]("name",e))S.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(S.Hooks.registered[r]){var l=r,u=S.Hooks.getRoot(r);n=n||S.getPropertyValue(e,u),a=S.Hooks.injectValue(l,a,n),r=u}if(S.Normalizations.registered[r]&&(a=S.Normalizations.registered[r]("inject",e,a),r=S.Normalizations.registered[r]("name",e)),s=S.Names.prefixCheck(r)[0],8>=d)try{e.style[s]=a}catch(c){b.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&S.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;b.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(S.getPropertyValue(e,t))}var r="";if((d||b.State.isAndroid&&!b.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};f.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;f.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===d&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}S.setPropertyValue(e,"transform",r)}};S.Hooks.register(),S.Normalizations.register(),b.hook=function(e,t,r){var n=a;return e=o(e),f.each(e,function(e,o){if(i(o)===a&&b.init(o),r===a)n===a&&(n=b.CSS.getPropertyValue(o,t));else{var s=b.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&b.CSS.flushTransformCache(o),n=s}}),n};var P=function(){function e(){return s?k.promise||null:l}function n(){function e(e){function p(e,t){var r=a,n=a,i=a;return m.isArray(e)?(r=e[0],!m.isArray(e[1])&&/^[\d-]/.test(e[1])||m.isFunction(e[1])||S.RegEx.isHex.test(e[1])?i=e[1]:(m.isString(e[1])&&!S.RegEx.isHex.test(e[1])||m.isArray(e[1]))&&(n=t?e[1]:u(e[1],s.duration),e[2]!==a&&(i=e[2]))):r=e,t||(n=n||s.easing),m.isFunction(r)&&(r=r.call(o,V,w)),m.isFunction(i)&&(i=i.call(o,V,w)),[r||0,n,i]}function d(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=S.Values.getUnitType(e)),[a,r]}function h(){var e={myParent:o.parentNode||r.body,position:S.getPropertyValue(o,"position"),fontSize:S.getPropertyValue(o,"fontSize")},a=e.position===L.lastPosition&&e.myParent===L.lastParent,n=e.fontSize===L.lastFontSize;L.lastParent=e.myParent,L.lastPosition=e.position,L.lastFontSize=e.fontSize;var s=100,l={};if(n&&a)l.emToPx=L.lastEmToPx,l.percentToPxWidth=L.lastPercentToPxWidth,l.percentToPxHeight=L.lastPercentToPxHeight;else{var u=i(o).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");b.init(u),e.myParent.appendChild(u),f.each(["overflow","overflowX","overflowY"],function(e,t){b.CSS.setPropertyValue(u,t,"hidden")}),b.CSS.setPropertyValue(u,"position",e.position),b.CSS.setPropertyValue(u,"fontSize",e.fontSize),b.CSS.setPropertyValue(u,"boxSizing","content-box"),f.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){b.CSS.setPropertyValue(u,t,s+"%")}),b.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=L.lastPercentToPxWidth=(parseFloat(S.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=L.lastPercentToPxHeight=(parseFloat(S.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=L.lastEmToPx=(parseFloat(S.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===L.remToPx&&(L.remToPx=parseFloat(S.getPropertyValue(r.body,"fontSize"))||16),null===L.vwToPx&&(L.vwToPx=parseFloat(t.innerWidth)/100,L.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=L.remToPx,l.vwToPx=L.vwToPx,l.vhToPx=L.vhToPx,b.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),o),l}if(s.begin&&0===V)try{s.begin.call(g,g)}catch(x){setTimeout(function(){throw x},1)}if("scroll"===A){var P,C,T,F=/^x$/i.test(s.axis)?"Left":"Top",j=parseFloat(s.offset)||0;s.container?m.isWrapped(s.container)||m.isNode(s.container)?(s.container=s.container[0]||s.container,P=s.container["scroll"+F],T=P+f(o).position()[F.toLowerCase()]+j):s.container=null:(P=b.State.scrollAnchor[b.State["scrollProperty"+F]],C=b.State.scrollAnchor[b.State["scrollProperty"+("Left"===F?"Top":"Left")]],T=f(o).offset()[F.toLowerCase()]+j),l={scroll:{rootPropertyValue:!1,startValue:P,currentValue:P,endValue:T,unitType:"",easing:s.easing,scrollData:{container:s.container,direction:F,alternateValue:C}},element:o},b.debug&&console.log("tweensContainer (scroll): ",l.scroll,o)}else if("reverse"===A){if(!i(o).tweensContainer)return void f.dequeue(o,s.queue);"none"===i(o).opts.display&&(i(o).opts.display="auto"),"hidden"===i(o).opts.visibility&&(i(o).opts.visibility="visible"),i(o).opts.loop=!1,i(o).opts.begin=null,i(o).opts.complete=null,v.easing||delete s.easing,v.duration||delete s.duration,s=f.extend({},i(o).opts,s);var E=f.extend(!0,{},i(o).tweensContainer);for(var H in E)if("element"!==H){var N=E[H].startValue;E[H].startValue=E[H].currentValue=E[H].endValue,E[H].endValue=N,m.isEmptyObject(v)||(E[H].easing=s.easing),b.debug&&console.log("reverse tweensContainer ("+H+"): "+JSON.stringify(E[H]),o)}l=E}else if("start"===A){var E;i(o).tweensContainer&&i(o).isAnimating===!0&&(E=i(o).tweensContainer),f.each(y,function(e,t){if(RegExp("^"+S.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(S.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=S.Values.hexToRgb(n),u=i?S.Values.hexToRgb(i):a,c=0;cO;O++){var q={delay:j.delay,progress:j.progress};O===z-1&&(q.display=j.display,q.visibility=j.visibility,q.complete=j.complete),P(g,"reverse",q)}return e()}};b=f.extend(P,b),b.animate=P;var w=t.requestAnimationFrame||g;return b.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(w=function(e){return setTimeout(function(){e(!0)},16)},c()):w=t.requestAnimationFrame||g}),e.Velocity=b,e!==t&&(e.fn.velocity=P,e.fn.velocity.defaults=b.defaults),f.each(["Down","Up"],function(e,t){b.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=f.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},d={};l.display===a&&(l.display="Down"===t?"inline"===b.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){d[r]=e.style[r];var a=b.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}d.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in d)e.style[t]=d[t];c&&c.call(i,i),s&&s.resolver(i)},b(e,p,l)}}),f.each(["In","Out"],function(e,t){b.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=f.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),b(this,u,l)}}),b}(window.jQuery||window.Zepto||window,window,document)})); diff --git a/js/waves.js b/js/waves.js index c76d46324f..ae2cdcb6b3 100644 --- a/js/waves.js +++ b/js/waves.js @@ -258,17 +258,13 @@ var element = null; var target = e.target || e.srcElement; - while (target.parentElement !== null) { + while (target.parentNode !== null) { if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) { element = target; break; - } else if (target.classList.contains('waves-effect')) { - element = target; - break; } - target = target.parentElement; + target = target.parentNode; } - return element; } @@ -288,6 +284,7 @@ element.addEventListener('mouseup', Effect.hide, false); element.addEventListener('mouseleave', Effect.hide, false); + element.addEventListener('dragend', Effect.hide, false); } } @@ -319,7 +316,7 @@ // to specify them with an options param? Eg. light/classic/button if (element.tagName.toLowerCase() === 'input') { Effect.wrapInput([element]); - element = element.parentElement; + element = element.parentNode; } if ('ontouchstart' in window) { diff --git a/media-css.html b/media-css.html deleted file mode 100644 index f9aec267fa..0000000000 --- a/media-css.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - - - Media CSS - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - - -
                        -

                        Images

                        -

                        Images can be styled in different ways using Materialize

                        - -

                        Responsive Images

                        -

                        To make images resize responsively to page width, you can add the class responsive-img to your image tag. It will now have a max-width: 100% and height:auto.

                        -
                        
                        -    <img class="responsive-img" src="cool_pic.jpg">
                        -        
                        -

                        Circular images

                        -
                        -
                        -
                        -
                        - -
                        -
                        - - This is a square image. Add the "circle" class to it to make it appear circular. - -
                        -
                        -
                        -
                        - -
                        -
                        -

                        To make images appear circular, simply add class="circle" to them

                        -
                        
                        -      <div class="col s12 m8 offset-m2 l6 offset-l3">
                        -        <div class="card-panel grey lighten-5 z-depth-1">
                        -          <div class="row valign-wrapper">
                        -            <div class="col s2">
                        -              <img src="images/yuna.jpg" alt="" class="circle responsive-img"> <!-- notice the "circle" class -->
                        -            </div>
                        -            <div class="col s10">
                        -              <span class="black-text">
                        -                This is a square image. Add the "circle" class to it to make it appear circular.
                        -              </span>
                        -            </div>
                        -          </div>
                        -        </div>
                        -      </div>
                        -            
                        -
                        -
                        -
                        - - -
                        -

                        Videos

                        -

                        We provide a container for Embedded Videos that resizes them responsively.

                        -

                        Responsive Embeds

                        -

                        To make your embeds responsive, merely wrap them with a containing div which has the class video-container

                        -
                        - -
                        -
                        
                        -      <div class="video-container">
                        -        <iframe width="853" height="480" src="//www.youtube.com/embed/Q8TXgCzxEnw?rel=0" frameborder="0" allowfullscreen></iframe>
                        -      </div>
                        -        
                        -

                        If your video does not have video controls, add the no-controls class to the video container.

                        -
                        - -
                        -
                        
                        -        <div class="video-container no-controls">
                        -          <iframe width="853" height="480" src="//www.youtube.com/embed/Q8TXgCzxEnw?rel=0;autohide=1" frameborder="0" allowfullscreen></iframe>
                        -        </div>
                        -          
                        -

                        Responsive Videos

                        -

                        To make your HTML5 Videos responsive just add the class responsive-video to the video tag.

                        - - -
                        
                        -  <video class="responsive-video" controls>
                        -    <source src="movie.mp4" type="video/mp4">
                        -  </video>
                        -        
                        - -
                        - - -
                        - -
                        -
                        -
                        - - -
                        -
                        - -
                        -
                        -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/media.html b/media.html deleted file mode 100644 index e4e7e400cc..0000000000 --- a/media.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - Media - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        -
                        -

                        Media components include things that have to do with large media objects like Images, Video, Audio, etc.

                        - -
                        -

                        Material Box

                        -

                        Material box is a material design implementation of the Lightbox plugin. When a user clicks on an image that can be enlarged. Material box centers the image and enlarges it in a smooth, non-jarring manner. To dismiss the image, the user can either click on the image again, scroll away, or press the ESC key.

                        - - -

                        Creating the above image with the effect is as simple as adding a materialboxed class to the image tag.

                        -
                        
                        -    <img class="materialboxed" width="650" src="images/sample-1.jpg">
                        -      
                        - - -

                        Initialization

                        -

                        Materialbox is intialized automatically. However, if you add images dynamically, you will have to add this initialization code.

                        -
                        
                        -  $(document).ready(function(){
                        -    $('.materialboxed').materialbox();
                        -  });
                        -        
                        - -

                        Captions

                        -

                        It is very easy to add a short caption to your photo. Just add the caption as a data-caption attribute.

                        - -
                        
                        -  <img class="materialboxed" data-caption="A picture of some deer and tons of trees" width="250" src="http://th01.deviantart.net/fs70/PRE/i/2013/126/1/e/nature_portrait_by_pw_fotografie-d63tx0n.jpg">
                        -          
                        -
                        - -
                        - - - -
                        -

                        Slider

                        -

                        Our slider is a simple and elegant image carousel. You can also have captions that will be transitioned on their own depending on their alignment. You can also have indicators that show up on the bottom of the slider.

                        -

                        Note: This is also Hammer.js compatible! Try swiping with your finger to scroll through the slider.


                        - -
                        -
                          -
                        • - -
                          -

                          This is our big Tagline!

                          -
                          Here's our small slogan.
                          -
                          -
                        • -
                        • - -
                          -

                          Left Aligned Caption

                          -
                          Here's our small slogan.
                          -
                          -
                        • -
                        • - -
                          -

                          Right Aligned Caption

                          -
                          Here's our small slogan.
                          -
                          -
                        • -
                        • - -
                          -

                          This is our big Tagline!

                          -
                          Here's our small slogan.
                          -
                          -
                        • -
                        -

                        - -
                        
                        -  <div class="slider">
                        -    <ul class="slides">
                        -      <li>
                        -        <img src="http://lorempixel.com/580/250/nature/1"> <!-- random image -->
                        -        <div class="caption center-align">
                        -          <h3>This is our big Tagline!</h3>
                        -          <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5>
                        -        </div>
                        -      </li>
                        -      <li>
                        -        <img src="http://lorempixel.com/580/250/nature/2"> <!-- random image -->
                        -        <div class="caption left-align">
                        -          <h3>Left Aligned Caption</h3>
                        -          <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5>
                        -        </div>
                        -      </li>
                        -      <li>
                        -        <img src="http://lorempixel.com/580/250/nature/3"> <!-- random image -->
                        -        <div class="caption right-align">
                        -          <h3>Right Aligned Caption</h3>
                        -          <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5>
                        -        </div>
                        -      </li>
                        -      <li>
                        -        <img src="http://lorempixel.com/580/250/nature/4"> <!-- random image -->
                        -        <div class="caption center-align">
                        -          <h3>This is our big Tagline!</h3>
                        -          <h5 class="light grey-text text-lighten-3">Here's our small slogan.</h5>
                        -        </div>
                        -      </li>
                        -    </ul>
                        -  </div>
                        -      
                        - -
                        -

                        Fullscreen Slider

                        -

                        You can easliy make this slider a fullscreen slider by adding the class fullscreen to the slider div. Here's a quick demo.

                        - Open Demo - -
                        -

                        jQuery Initialization

                        -
                        
                        -    $(document).ready(function(){
                        -      $('.slider').slider({full_width: true});
                        -    });
                        -        
                        -
                        - -

                        jQuery Plugin Options

                        - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        Option NameDescription
                        IndicatorsSet to false to hide slide indicators. (Default: True)
                        HeightSet height of slider. (Default: 400)
                        TransitionSet the duration of the transition animation in ms. (Default: 500)
                        IntervalSet the duration between transitions in ms. (Default: 6000)
                        -
                        - -

                        jQuery Plugin Methods

                        -

                        We have methods to show and hide your sidebar you can use to programmatically control your sidebar.

                        -
                        
                        -// Pause slider
                        -$('.slider').slider('pause');
                        -// Start slider
                        -$('.slider').slider('start');
                        -      
                        -
                        - -
                        - - - -
                        -
                        -
                        - - -
                        -
                        - -
                        -
                        -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mobile.html b/mobile.html deleted file mode 100644 index 4d1fabb0ac..0000000000 --- a/mobile.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - Mobile - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        -
                        - - - - - -
                        -

                        Toast

                        -

                        Swipe to Dismiss

                        -

                        On all devices, you can swipe to dismiss toasts.

                        - - -
                        -
                        -
                        -
                        -
                        - - -
                        -
                        - -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modals.html b/modals.html deleted file mode 100644 index d403a41918..0000000000 --- a/modals.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - - - - Modals - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        -
                        - -
                        -

                        Introduction

                        -

                        Use a modal for dialog boxes, confirmation messages, or other content that can be called up. In order for the modal to work you have to add the Modal ID to the link of the trigger. To add a close button, just add the class .modal-close to your button.

                        - Modal    Modal With Fixed Footer    Modal Bottom Sheet Style - - - -
                        - - - -
                        -

                        Modals HTML Structure

                        -
                        
                        -  <!-- Modal Trigger -->
                        -  <a class="waves-effect waves-light btn modal-trigger" href="#modal1">Modal</a>
                        -
                        -  <!-- Modal Structure -->
                        -  <div id="modal1" class="modal">
                        -    <div class="modal-content">
                        -      <h4>Modal Header</h4>
                        -      <p>A bunch of text</p>
                        -    </div>
                        -    <div class="modal-footer">
                        -      <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">Agree</a>
                        -    </div>
                        -  </div>
                        -          
                        -
                        - - - - -
                        -

                        Bottom Sheet Modals

                        -

                        Bottom Sheet Modals are good for displaying actions to the user on the bottom of a screen. They still act the same as regular modals.

                        -
                        
                        -  <!-- Modal Trigger -->
                        -  <a class="waves-effect waves-light btn modal-trigger" href="#modal1">Modal</a>
                        -
                        -  <!-- Modal Structure -->
                        -  <div id="modal1" class="modal bottom-sheet">
                        -    <div class="modal-content">
                        -      <h4>Modal Header</h4>
                        -      <p>A bunch of text</p>
                        -    </div>
                        -    <div class="modal-footer">
                        -      <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">Agree</a>
                        -    </div>
                        -  </div>
                        -          
                        -
                        - -
                        -

                        Modals with Button trigger

                        -

                        If you prefer to use a button to open a modal specify the Modal ID in data-target rather that the href attribute.

                        - -
                        
                        -  <!-- Modal Trigger -->
                        -  <button data-target="modal1" class="btn modal-trigger">Modal</button>
                        -          
                        -
                        - - - -
                        -

                        jQuery Plugin Initialization

                        -

                        To open a modal using a trigger:

                        -
                        
                        -  $(document).ready(function(){
                        -    // the "href" attribute of .modal-trigger must specify the modal ID that wants to be triggered
                        -    $('.modal-trigger').leanModal();
                        -  });
                        -          
                        -

                        You can also open modals programatically, the below code will make your modal open on document ready:

                        -
                        
                        -  $('#modal1').openModal();
                        -          
                        -

                        You can also close them programatically:

                        -
                        
                        -  $('#modal1').closeModal();
                        -        
                        -
                        - - - -
                        -

                        Options

                        -

                        You can customize the behavior of each modal using these options. For example, you can call a custom function to run when a modal is dismissed. To do this, just place your function in the intialization code as shown below.

                        -
                        
                        -  $('.modal-trigger').leanModal({
                        -      dismissible: true, // Modal can be dismissed by clicking outside of the modal
                        -      opacity: .5, // Opacity of modal background
                        -      in_duration: 300, // Transition in duration
                        -      out_duration: 200, // Transition out duration
                        -      ready: function() { alert('Ready'); }, // Callback for Modal open
                        -      complete: function() { alert('Closed'); } // Callback for Modal close
                        -    }
                        -  );
                        -      
                        -
                        - -
                        - - - - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/navbar.html b/navbar.html deleted file mode 100644 index 9b411bf1fe..0000000000 --- a/navbar.html +++ /dev/null @@ -1,548 +0,0 @@ - - - - - - - - - Navbar - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - - - -
                        -

                        Left Aligned Links

                        -

                        To left align your navbar links, just add a left class to your <ul> that contains them.

                        -
                        -
                        
                        -  <nav>
                        -    <div class="nav-wrapper">
                        -      <a href="#" class="brand-logo right">Logo</a>
                        -      <ul id="nav-mobile" class="left hide-on-med-and-down">
                        -        <li><a href="sass.html">Sass</a></li>
                        -        <li><a href="badges.html">Components</a></li>
                        -        <li><a href="collapsible.html">JavaScript</a></li>
                        -      </ul>
                        -    </div>
                        -  </nav>
                        -        
                        -
                        - -
                        -

                        Centering the logo

                        -

                        The logo will center itself on medium and down screens, but if you want the logo to always be centered, add the center class to your <a class="brand-logo">. You will have to make sure yourself that links do not overlap if you use this.

                        -
                        -
                        
                        -  <nav>
                        -    <div class="nav-wrapper">
                        -      <a href="#" class="brand-logo center">Logo</a>
                        -      <ul id="nav-mobile" class="left hide-on-med-and-down">
                        -        <li><a href="sass.html">Sass</a></li>
                        -        <li><a href="badges.html">Components</a></li>
                        -        <li><a href="collapsible.html">JavaScript</a></li>
                        -      </ul>
                        -    </div>
                        -  </nav>
                        -        
                        -
                        - -
                        - -

                        Active Items

                        -

                        - Add active class to your li tags to denote the current page. -

                        - -
                        - -
                        
                        -  <div class="navbar-fixed">
                        -    <nav>
                        -      <div class="nav-wrapper">
                        -        <a href="#!" class="brand-logo">Logo</a>
                        -        <ul class="right hide-on-med-and-down">
                        -          <li><a href="sass.html">Sass</a></li>
                        -          <li><a href="badges.html">Components</a></li>
                        -          <li class="active"><a href="collapsible.html">JavaScript</a></li>
                        -        </ul>
                        -      </div>
                        -    </nav>
                        -  </div>
                        -        
                        -
                        - - - - - -
                        -

                        Icon Links

                        - - - -
                        - -

                        You can add icons into links. For icon only links you don't need any additional class. Just pop the i tag in and it will work.

                        -
                        
                        -  <nav>
                        -    <div class="nav-wrapper">
                        -      <a href="#!" class="brand-logo">Logo</a>
                        -      <ul class="right hide-on-med-and-down">
                        -        <li><a href="sass.html"><i class="material-icons">search</i></a></li>
                        -        <li><a href="badges.html"><i class="material-icons">view_module</i></a></li>
                        -        <li><a href="collapsible.html"><i class="material-icons">refresh</i></a></li>
                        -        <li><a href="mobile.html"><i class="material-icons">more_vert</i></a></li>
                        -      </ul>
                        -    </div>
                        -  </nav>
                        -
                        - - - -
                        - -

                        For adding an icon to a text link you need to add either a left or right class to the icon depending on where you want the icon to be.

                        -
                        
                        -  <nav>
                        -    <div class="nav-wrapper">
                        -      <a href="#!" class="brand-logo">Logo</a>
                        -      <ul class="right hide-on-med-and-down">
                        -        <li><a href="sass.html"><i class="material-icons left">search</i>Link with Left Icon</a></li>
                        -        <li><a href="badges.html"><i class="material-icons right">view_module</i>Link with Right Icon</a></li>
                        -      </ul>
                        -    </div>
                        -  </nav>
                        -
                        -
                        - - - -
                        -

                        Mobile Collapse Button

                        - - - -
                        - -

                        When your nav bar is resized, you will see that the links on the right turn into a hamburger icon menu. Take a look at the example below to get this functionality. Add the entire button-collapse line to your nav.

                        -
                        
                        -  <nav>
                        -    <div class="nav-wrapper">
                        -      <a href="#!" class="brand-logo">Logo</a>
                        -      <a href="#" data-activates="mobile-demo" class="button-collapse"><i class="material-icons">menu</i></a>
                        -      <ul class="right hide-on-med-and-down">
                        -        <li><a href="sass.html">Sass</a></li>
                        -        <li><a href="badges.html">Components</a></li>
                        -        <li><a href="collapsible.html">Javascript</a></li>
                        -        <li><a href="mobile.html">Mobile</a></li>
                        -      </ul>
                        -      <ul class="side-nav" id="mobile-demo">
                        -        <li><a href="sass.html">Sass</a></li>
                        -        <li><a href="badges.html">Components</a></li>
                        -        <li><a href="collapsible.html">Javascript</a></li>
                        -        <li><a href="mobile.html">Mobile</a></li>
                        -      </ul>
                        -    </div>
                        -  </nav>
                        -          
                        - -
                        -

                        Initialization

                        -

                        After including the button-collapse line into your navbar, all you have to do now is place this code in your page's $( document ).ready(function(){}) code. This example below assumes you have not modified the classes in the above example. In the case that you have, just change the jQuery selector in the line below to match it.

                        -
                        
                        -    $(".button-collapse").sideNav();
                        -        
                        -
                        - -
                        - - - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..bdda4bc719 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6785 @@ +{ + "name": "materialize-css", + "version": "0.100.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "dev": true, + "requires": { + "acorn": "2.7.0" + }, + "dependencies": { + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + } + }, + "acorn-object-spread": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/acorn-object-spread/-/acorn-object-spread-1.0.0.tgz", + "integrity": "sha1-SOrQ9KjrFplaF6Dbn/xqyq2kumg=", + "dev": true, + "requires": { + "acorn": "3.3.0" + } + }, + "after": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", + "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=", + "dev": true + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==", + "dev": true + }, + "archiver": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", + "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "async": "2.4.1", + "buffer-crc32": "0.2.13", + "glob": "7.0.6", + "lodash": "4.17.4", + "readable-stream": "2.2.11", + "tar-stream": "1.5.4", + "walkdir": "0.0.11", + "zip-stream": "1.1.1" + }, + "dependencies": { + "async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", + "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "dev": true, + "requires": { + "glob": "7.0.6", + "graceful-fs": "4.1.11", + "lazystream": "1.0.0", + "lodash": "4.17.4", + "normalize-path": "2.1.1", + "readable-stream": "2.2.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.11" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.0.3" + } + }, + "arr-flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", + "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "autoprefixer": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.1.tgz", + "integrity": "sha1-l7yFTH0Ll5+NZIneVHoNF/swf20=", + "dev": true, + "requires": { + "browserslist": "2.1.5", + "caniuse-lite": "1.0.30000690", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.2", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "browserslist": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.1.5.tgz", + "integrity": "sha1-6IJVDfPRzW1IHBo+ADjyuvE6RxE=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000690", + "electron-to-chromium": "1.3.14" + } + }, + "postcss": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.2.tgz", + "integrity": "sha1-XE/qWJ8Kw7AMqnWxy8OihBlbfl0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + } + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", + "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-generator": "6.25.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "convert-source-map": "1.5.0", + "debug": "2.2.0", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "slash": "1.0.0", + "source-map": "0.5.6" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-define-map": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", + "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", + "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", + "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.24.1", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", + "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", + "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", + "dev": true, + "requires": { + "regenerator-transform": "0.9.11" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.24.1" + } + }, + "babel-register": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", + "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", + "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-runtime": "6.23.0", + "core-js": "2.4.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "babel-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + } + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-traverse": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "debug": "2.2.0", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-types": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babylon": { + "version": "6.17.4", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64id": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", + "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=", + "dev": true + }, + "batch": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "bl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "dev": true, + "requires": { + "readable-stream": "2.2.11" + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "body-parser": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", + "dev": true, + "requires": { + "bytes": "2.2.0", + "content-type": "1.0.2", + "debug": "2.2.0", + "depd": "1.1.0", + "http-errors": "1.3.1", + "iconv-lite": "0.4.13", + "on-finished": "2.3.0", + "qs": "5.2.0", + "raw-body": "2.1.7", + "type-is": "1.6.15" + }, + "dependencies": { + "http-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + }, + "qs": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", + "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", + "dev": true + } + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-sync": { + "version": "2.18.12", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.18.12.tgz", + "integrity": "sha1-u6oKF6lh4rXwqOdg5pUCcYZmR3k=", + "dev": true, + "requires": { + "browser-sync-client": "2.5.1", + "browser-sync-ui": "0.6.3", + "bs-recipes": "1.3.4", + "chokidar": "1.7.0", + "connect": "3.5.0", + "dev-ip": "1.0.1", + "easy-extender": "2.3.2", + "eazy-logger": "3.0.2", + "emitter-steward": "1.0.0", + "fs-extra": "3.0.1", + "http-proxy": "1.15.2", + "immutable": "3.8.1", + "localtunnel": "1.8.2", + "micromatch": "2.3.11", + "opn": "4.0.2", + "portscanner": "2.1.1", + "qs": "6.2.1", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "serve-index": "1.8.0", + "serve-static": "1.12.2", + "server-destroy": "1.0.1", + "socket.io": "1.6.0", + "socket.io-client": "1.6.0", + "ua-parser-js": "0.7.12", + "yargs": "6.4.0" + } + }, + "browser-sync-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.5.1.tgz", + "integrity": "sha1-7BrWmknC4tS2RbGLHAbCmz2a+Os=", + "dev": true, + "requires": { + "etag": "1.8.0", + "fresh": "0.3.0" + } + }, + "browser-sync-ui": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-0.6.3.tgz", + "integrity": "sha1-ZApTfBgGiTA9W+krxHa568RBwLw=", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "1.3.0", + "immutable": "3.8.1", + "server-destroy": "1.0.1", + "stream-throttle": "0.1.3", + "weinre": "2.0.0-pre-I0Z7U9OV" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "buble": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/buble/-/buble-0.12.5.tgz", + "integrity": "sha1-xm/+kvn0o8ZdMlYHm3EeK9C8UBM=", + "dev": true, + "requires": { + "acorn": "3.3.0", + "acorn-jsx": "3.0.1", + "acorn-object-spread": "1.0.0", + "chalk": "1.1.3", + "magic-string": "0.14.0", + "minimist": "1.2.0", + "os-homedir": "1.0.2" + } + }, + "bubleify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/bubleify/-/bubleify-0.5.1.tgz", + "integrity": "sha1-9lxHzuMbgMrYuedHu+GH1/5R6Sc=", + "dev": true, + "requires": { + "buble": "0.12.5", + "object-assign": "4.1.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30000690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000690.tgz", + "integrity": "sha1-OyMtvAzzK8KoiOwZmFKlCvo39e8=", + "dev": true + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "clean-css": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.27.tgz", + "integrity": "sha1-re91sxwWD/pdcvTeZ5ZuJmDBolU=", + "dev": true, + "requires": { + "commander": "2.8.1", + "source-map": "0.4.4" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "coffee-script": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", + "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compress-commons": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", + "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "crc32-stream": "2.0.0", + "normalize-path": "2.1.1", + "readable-stream": "2.2.11" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", + "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "connect": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz", + "integrity": "sha1-s1dSWgtMH1BZnNmD4dnv7qlncZg=", + "dev": true, + "requires": { + "debug": "2.2.0", + "finalhandler": "0.5.0", + "parseurl": "1.3.1", + "utils-merge": "1.0.0" + } + }, + "connect-history-api-fallback": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", + "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "dev": true, + "requires": { + "acorn": "2.7.0" + }, + "dependencies": { + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=", + "dev": true + }, + "crc32-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "dev": true, + "requires": { + "crc": "3.4.4", + "readable-stream": "2.2.11" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", + "dev": true, + "requires": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } + }, + "css-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", + "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=", + "dev": true + }, + "css-stringify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", + "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "dev": true + }, + "duplexify": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", + "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", + "dev": true, + "requires": { + "end-of-stream": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.2.11", + "stream-shift": "1.0.0" + } + }, + "each-async": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "dev": true, + "requires": { + "onetime": "1.1.0", + "set-immediate-shim": "1.0.1" + } + }, + "easy-extender": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", + "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=", + "dev": true, + "requires": { + "lodash": "3.10.1" + } + }, + "eazy-logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", + "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "dev": true, + "requires": { + "tfunk": "3.1.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz", + "integrity": "sha1-ZK8Pnv08PGrNV9cfg7Scp+6cS0M=", + "dev": true + }, + "emitter-steward": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emitter-steward/-/emitter-steward-1.0.0.tgz", + "integrity": "sha1-80Ea3pdYp1Zd+Eiy2gy70bRsvWQ=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "end-of-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", + "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", + "dev": true, + "requires": { + "once": "1.3.3" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + } + } + }, + "engine.io": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.0.tgz", + "integrity": "sha1-PutfJky3XbvsG6rqJtYfWk6s4qo=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "0.1.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.1", + "ws": "1.1.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.0.tgz", + "integrity": "sha1-e3MOQSdBQIdZbZvjyI0rxf22z1w=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.1", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.1.tgz", + "integrity": "sha1-lVTxrjMQfW+9FwylRm0vgz9qB88=", + "dev": true, + "requires": { + "after": "0.8.1", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.6", + "wtf-8": "1.0.0" + }, + "dependencies": { + "has-binary": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", + "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es6-promise": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", + "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "express": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/express/-/express-2.5.11.tgz", + "integrity": "sha1-TOjqHzY15p5J8Ou0l7aksKUc5vA=", + "dev": true, + "requires": { + "connect": "1.9.2", + "mime": "1.2.4", + "mkdirp": "0.3.0", + "qs": "0.4.2" + }, + "dependencies": { + "connect": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/connect/-/connect-1.9.2.tgz", + "integrity": "sha1-QogKIulDiuWait105Df1iujlKAc=", + "dev": true, + "requires": { + "formidable": "1.0.17", + "mime": "1.2.4", + "qs": "0.4.2" + } + }, + "qs": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.4.2.tgz", + "integrity": "sha1-PKxMhh43GoycR3CsI82o3mObjl8=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extract-zip": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", + "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", + "dev": true, + "requires": { + "concat-stream": "1.5.0", + "debug": "0.7.4", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-sync-cmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", + "integrity": "sha1-6VCKvs6bbbqHGmlCodeRG5GRGsc=", + "dev": true, + "requires": { + "debug": "2.2.0", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "5.0.15" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "formidable": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", + "integrity": "sha1-71SRSQ+UM7cF+qdyScmQKa40hVk=", + "dev": true + }, + "fresh": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=", + "dev": true + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.0", + "universalify": "0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true, + "requires": { + "globule": "1.2.0" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "grunt": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", + "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", + "dev": true, + "requires": { + "coffee-script": "1.10.0", + "dateformat": "1.0.12", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.3.0", + "glob": "7.0.6", + "grunt-cli": "1.2.0", + "grunt-known-options": "1.1.0", + "grunt-legacy-log": "1.0.0", + "grunt-legacy-util": "1.0.0", + "iconv-lite": "0.4.18", + "js-yaml": "3.5.5", + "minimatch": "3.0.4", + "nopt": "3.0.6", + "path-is-absolute": "1.0.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true, + "requires": { + "findup-sync": "0.3.0", + "grunt-known-options": "1.1.0", + "nopt": "3.0.6", + "resolve": "1.1.7" + } + } + } + }, + "grunt-babel": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/grunt-babel/-/grunt-babel-6.0.0.tgz", + "integrity": "sha1-N4GJtIfeEWjExKn8iN1gBbNd+WA=", + "dev": true, + "requires": { + "babel-core": "6.25.0" + } + }, + "grunt-banner": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.6.0.tgz", + "integrity": "sha1-P4eQIdEj+linuloLb7a+QStYhaw=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "grunt-browser-sync": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/grunt-browser-sync/-/grunt-browser-sync-2.2.0.tgz", + "integrity": "sha1-oOnB/RzLXEVMJexRcBE///BqR3I=", + "dev": true, + "requires": { + "browser-sync": "2.18.12" + } + }, + "grunt-concurrent": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/grunt-concurrent/-/grunt-concurrent-2.3.1.tgz", + "integrity": "sha1-Hj2zjM71o9oRleYdYx/n4yE0TSM=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "async": "1.5.2", + "indent-string": "2.1.0", + "pad-stream": "1.2.0" + } + }, + "grunt-contrib-clean": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz", + "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", + "dev": true, + "requires": { + "async": "1.5.2", + "rimraf": "2.6.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.0.6" + } + } + } + }, + "grunt-contrib-compress": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.4.3.tgz", + "integrity": "sha1-Ac7/ucY39S5wgfRjdQmD0KOw+nM=", + "dev": true, + "requires": { + "archiver": "1.3.0", + "chalk": "1.1.3", + "iltorb": "1.3.1", + "lodash": "4.17.4", + "pretty-bytes": "4.0.2", + "stream-buffers": "2.2.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "grunt-contrib-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", + "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "source-map": "0.5.6" + } + }, + "grunt-contrib-copy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "file-sync-cmp": "0.1.1" + } + }, + "grunt-contrib-jade": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jade/-/grunt-contrib-jade-1.0.0.tgz", + "integrity": "sha1-tVe8uc0uczrU4gkOEpvrIBsLhFw=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "jade": "1.11.0" + } + }, + "grunt-contrib-jasmine": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jasmine/-/grunt-contrib-jasmine-1.1.0.tgz", + "integrity": "sha1-9oL3dX2il3Wf4+G0xl1GcMw66kk=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "grunt-lib-phantomjs": "1.1.0", + "jasmine-core": "2.4.1", + "lodash": "2.4.2", + "rimraf": "2.2.8", + "sprintf-js": "1.0.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "grunt-contrib-uglify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.0.1.tgz", + "integrity": "sha1-/etfk4pMgEL46Grkb2NVTo6VEcs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "maxmin": "1.1.0", + "uglify-js": "3.0.18", + "uri-path": "1.0.0" + }, + "dependencies": { + "uglify-js": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.18.tgz", + "integrity": "sha512-0M/KeXO8bPYtlqnwIYpO4R6om1mrScMzPuWn2UPfUYOaowIhQmmFpL9Q5tlD18ulKLRKD12GQ0IiYDKJS/si1w==", + "dev": true, + "requires": { + "commander": "2.9.0", + "source-map": "0.5.6" + } + } + } + }, + "grunt-contrib-watch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", + "integrity": "sha1-hKGnodar0m7VaEE0lscxM+mQAY8=", + "dev": true, + "requires": { + "async": "1.5.2", + "gaze": "1.1.2", + "lodash": "3.10.1", + "tiny-lr": "0.2.1" + } + }, + "grunt-known-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", + "dev": true + }, + "grunt-legacy-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", + "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", + "dev": true, + "requires": { + "colors": "1.1.2", + "grunt-legacy-log-utils": "1.0.0", + "hooker": "0.2.3", + "lodash": "3.10.1", + "underscore.string": "3.2.3" + } + }, + "grunt-legacy-log-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", + "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "lodash": "4.3.0" + }, + "dependencies": { + "lodash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", + "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "4.3.0", + "underscore.string": "3.2.3", + "which": "1.2.14" + }, + "dependencies": { + "lodash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + } + } + }, + "grunt-lib-phantomjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-1.1.0.tgz", + "integrity": "sha1-np7c3Z/S3UDgwYHJQ3HVcqpe6tI=", + "dev": true, + "requires": { + "eventemitter2": "0.4.14", + "phantomjs-prebuilt": "2.1.14", + "rimraf": "2.6.1", + "semver": "5.3.0", + "temporary": "0.0.8" + }, + "dependencies": { + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.0.6" + } + } + } + }, + "grunt-notify": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt-notify/-/grunt-notify-0.4.5.tgz", + "integrity": "sha1-BSk5kGFhENtrwK0V5sBZL/4YrDE=", + "dev": true, + "requires": { + "semver": "5.3.0", + "stack-parser": "0.0.1", + "which": "1.2.14" + } + }, + "grunt-postcss": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.8.0.tgz", + "integrity": "sha1-jzCor2B5A84MRfAfC+QsYOMc6w4=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "diff": "2.2.3", + "postcss": "5.2.17" + } + }, + "grunt-remove-logging": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-remove-logging/-/grunt-remove-logging-0.2.0.tgz", + "integrity": "sha1-RoZZD3AD4h/cSiHF9zjoizXgCRY=", + "dev": true + }, + "grunt-rename-util": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-rename-util/-/grunt-rename-util-1.0.0.tgz", + "integrity": "sha1-xInhg/k1e4dWlVRAe+BuGFikp5A=", + "dev": true + }, + "grunt-sass": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-2.0.0.tgz", + "integrity": "sha1-kHTPnXtFkuIPd4jKpye4+aoGtgo=", + "dev": true, + "requires": { + "each-async": "1.1.1", + "node-sass": "4.5.3", + "object-assign": "4.1.1" + } + }, + "grunt-text-replace": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz", + "integrity": "sha1-252c5Z4v5J2id+nbwZXD4Rz7FsI=", + "dev": true + }, + "gzip-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", + "dev": true, + "requires": { + "browserify-zlib": "0.1.4", + "concat-stream": "1.5.0" + } + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.16.0", + "pinkie-promise": "2.0.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", + "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=", + "dev": true + }, + "http-errors": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", + "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "setprototypeof": "1.0.2", + "statuses": "1.3.1" + } + }, + "http-proxy": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", + "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } + }, + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", + "dev": true + }, + "iltorb": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.1.tgz", + "integrity": "sha512-sduf4Kgg7INvWtxGYIOALqfLesJZdWJhzPvpl6nOEHLhPkDZZma8tdl6Ejf+uOZlWPZcGBd9girvcNDxjpMa8g==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.34" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.34", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz", + "integrity": "sha1-lK0ceYoR1/xnOBtQ1H+MwY2Xmfc=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "integrity": "sha1-3Fm+6F9k8A7UJO+yrweD3yXRwLU=", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", + "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } + }, + "immutable": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.1.tgz", + "integrity": "sha1-IAgH8Rqw9ycQ6khVQt4IgHX2jNI=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.8.0" + } + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-my-json-valid": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-number-like": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.7.tgz", + "integrity": "sha1-o41rD9LNQoJEkSiFnu2GwD/SNVI=", + "dev": true, + "requires": { + "bubleify": "0.5.1", + "lodash.isfinite": "3.3.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jade": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", + "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", + "dev": true, + "requires": { + "character-parser": "1.2.1", + "clean-css": "3.4.27", + "commander": "2.6.0", + "constantinople": "3.0.2", + "jstransformer": "0.0.2", + "mkdirp": "0.5.1", + "transformers": "2.1.0", + "uglify-js": "2.8.29", + "void-elements": "2.0.1", + "with": "4.0.3" + }, + "dependencies": { + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "jasmine": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz", + "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.0.6", + "jasmine-core": "2.6.3" + }, + "dependencies": { + "jasmine-core": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.3.tgz", + "integrity": "sha1-RQcpUOSkKx4yL+VcABEApGXXeBU=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz", + "integrity": "sha1-b4OrOg8WlRcizgfSBsdz1XzIOL4=", + "dev": true + }, + "jasmine-jquery": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/jasmine-jquery/-/jasmine-jquery-2.1.1.tgz", + "integrity": "sha1-1AleZGlEomdjI1dpqwGNnzDw1Hs=", + "dev": true + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" + }, + "js-base64": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", + "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", + "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "jstransformer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", + "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", + "dev": true, + "requires": { + "is-promise": "2.1.0", + "promise": "6.1.0" + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "2.2.11" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "limiter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.0.tgz", + "integrity": "sha1-bivRLKP82qEfIk4uU8iW3z8I2RM=", + "dev": true + }, + "livereload-js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", + "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "localtunnel": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.8.2.tgz", + "integrity": "sha1-kTBR6DKLUfda2KIq0fXFuMWZo1k=", + "dev": true, + "requires": { + "debug": "2.2.0", + "openurl": "1.1.0", + "request": "2.78.0", + "yargs": "3.29.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "yargs": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.29.0.tgz", + "integrity": "sha1-GquWYOrnnYuPZ1vK7qtu40ws9pw=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "window-size": "0.1.4", + "y18n": "3.2.1" + } + } + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "magic-string": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.14.0.tgz", + "integrity": "sha1-VyJK7xcByu7Sc7F6OalW5ysXJGI=", + "dev": true, + "requires": { + "vlq": "0.2.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "maxmin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "figures": "1.7.0", + "gzip-size": "1.0.0", + "pretty-bytes": "1.0.4" + }, + "dependencies": { + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.3.8", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "mime": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.4.tgz", + "integrity": "sha1-EbX9rynCUJJVF2uArVIClPXekrc=", + "dev": true + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "node-archiver": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/node-archiver/-/node-archiver-0.3.0.tgz", + "integrity": "sha1-ufGv5QBtC98pJgGBgzoHCXi8aUc=", + "dev": true, + "requires": { + "fstream": "1.0.11", + "tar": "2.2.1" + } + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.0.6", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.0", + "osenv": "0.1.4", + "request": "2.78.0", + "rimraf": "2.2.8", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.2.14" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "node-sass": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", + "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", + "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.0.6", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.6.2", + "node-gyp": "3.6.2", + "npmlog": "4.1.0", + "request": "2.81.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0" + }, + "dependencies": { + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true + } + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.0" + } + }, + "normalize-package-data": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", + "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", + "dev": true, + "requires": { + "hosted-git-info": "2.4.2", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npmlog": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "openurl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.0.tgz", + "integrity": "sha1-4vIYnZmcBIIyAfCD8PGnzYkDGHo=", + "dev": true + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw=", + "dev": true + }, + "pad-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pad-stream/-/pad-stream-1.2.0.tgz", + "integrity": "sha1-Yx3Mn3mBC3BZZeid7eps/w/B38k=", + "dev": true, + "requires": { + "meow": "3.7.0", + "pumpify": "1.3.5", + "repeating": "2.0.1", + "split2": "1.1.1", + "through2": "2.0.3" + } + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", + "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", + "dev": true, + "requires": { + "es6-promise": "4.0.5", + "extract-zip": "1.5.0", + "fs-extra": "1.0.0", + "hasha": "2.2.0", + "kew": "0.7.0", + "progress": "1.1.8", + "request": "2.79.0", + "request-progress": "2.0.1", + "which": "1.2.14" + }, + "dependencies": { + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + } + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "1.0.7" + } + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, + "private": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", + "dev": true, + "requires": { + "asap": "1.0.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "once": "1.4.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "1.4.0" + } + } + } + }, + "pumpify": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", + "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", + "dev": true, + "requires": { + "duplexify": "3.5.0", + "inherits": "2.0.3", + "pump": "1.0.2" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", + "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.3.8", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", + "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.2.11", + "set-immediate-shim": "1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "regenerator-transform": { + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", + "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "private": "0.1.7" + } + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + }, + "remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.78.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.78.0.tgz", + "integrity": "sha1-4cjew0bhyBkjskrNszfxHeyr6cw=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3" + }, + "dependencies": { + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + } + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "2.2.0", + "minimatch": "3.0.4" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "7.0.6", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "2.1.9", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "send": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.2.tgz", + "integrity": "sha1-+R+rRAO8+H5xb3DOtdsvV4vcF9Y=", + "dev": true, + "requires": { + "debug": "2.6.4", + "depd": "1.1.0", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.1", + "mime": "1.3.4", + "ms": "1.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", + "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", + "dev": true, + "requires": { + "ms": "0.7.3" + }, + "dependencies": { + "ms": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", + "dev": true + } + } + }, + "fresh": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", + "dev": true + }, + "http-errors": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", + "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", + "dev": true, + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + }, + "ms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-1.0.0.tgz", + "integrity": "sha1-Wa3NIu3FQ/e1OBhi0xOHsfS8lHM=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "serve-index": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", + "integrity": "sha1-fF2WwT+xMRAfk8HFd0+FFqHnjTs=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "batch": "0.5.3", + "debug": "2.2.0", + "escape-html": "1.0.3", + "http-errors": "1.5.1", + "mime-types": "2.1.15", + "parseurl": "1.3.1" + } + }, + "serve-static": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.2.tgz", + "integrity": "sha1-5UbicmCBuBtLzsjpCAjrzdMjr7o=", + "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", + "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.6.0.tgz", + "integrity": "sha1-PkDZMmN+a9kjmBslyvfFPoO24uE=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.0", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.6.0", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.6.0.tgz", + "integrity": "sha1-W2aPT3cTBN/u0XkGRwg4b6ZxeFM=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.0", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "split2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz", + "integrity": "sha1-Fi2bGIZfAqsvKtlYVSLbm1TEgfk=", + "dev": true, + "requires": { + "through2": "2.0.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stack-parser": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/stack-parser/-/stack-parser-0.0.1.tgz", + "integrity": "sha1-fTtjoXiH6eLCv1Xb0zGP40o50ec=", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "requires": { + "readable-stream": "2.2.11" + } + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "dev": true + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "2.9.0", + "limiter": "1.1.0" + } + }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-stream": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "dev": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.0.0", + "readable-stream": "2.2.11", + "xtend": "4.0.1" + } + }, + "temporary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=", + "dev": true, + "requires": { + "package": "1.0.1" + } + }, + "tfunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", + "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "object-path": "0.9.2" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.2.11", + "xtend": "4.0.1" + } + }, + "tiny-lr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", + "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", + "dev": true, + "requires": { + "body-parser": "1.14.2", + "debug": "2.2.0", + "faye-websocket": "0.10.0", + "livereload-js": "2.2.2", + "parseurl": "1.3.1", + "qs": "5.1.0" + }, + "dependencies": { + "qs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", + "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", + "dev": true + } + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", + "dev": true, + "requires": { + "css": "1.0.8", + "promise": "2.0.0", + "uglify-js": "2.2.5" + }, + "dependencies": { + "is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=", + "dev": true + }, + "promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", + "dev": true, + "requires": { + "is-promise": "1.0.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", + "dev": true, + "requires": { + "optimist": "0.3.7", + "source-map": "0.1.43" + } + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.15" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.12.tgz", + "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, + "underscore.string": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", + "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", + "dev": true + }, + "universalify": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.0.tgz", + "integrity": "sha1-nrHEZR3rzGcMyU8adXYjMruWd3g=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "uri-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "vlq": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz", + "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=", + "dev": true + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "walkdir": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", + "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", + "dev": true + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", + "dev": true + }, + "weinre": { + "version": "2.0.0-pre-I0Z7U9OV", + "resolved": "https://registry.npmjs.org/weinre/-/weinre-2.0.0-pre-I0Z7U9OV.tgz", + "integrity": "sha1-/viqIjkh97QLu71MPtQwL2/QqBM=", + "dev": true, + "requires": { + "express": "2.5.11", + "nopt": "3.0.6", + "underscore": "1.7.0" + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, + "with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", + "dev": true, + "requires": { + "acorn": "1.2.2", + "acorn-globals": "1.0.9" + }, + "dependencies": { + "acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=", + "dev": true + } + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz", + "integrity": "sha1-CC3bbGQehdS7RR8D1S8G6r2x8Bg=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "zip-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.1.1.tgz", + "integrity": "sha1-Uha0i7tNJlH2TVxubwnrSnOZ1Vc=", + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "compress-commons": "1.2.0", + "lodash": "4.17.4", + "readable-stream": "2.2.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + } + } +} diff --git a/package.js b/package.js index ef8cb8611a..4d1a754dce 100644 --- a/package.js +++ b/package.js @@ -3,39 +3,92 @@ Package.describe({ name: 'materialize:materialize', // http://atmospherejs.com/materialize/materialize summary: 'Materialize (official): A modern responsive front-end framework based on Material Design', - version: '0.97.0', + version: '0.100.2', git: 'https://github.com/Dogfalo/materialize.git' }); + Package.onUse(function (api) { api.versionsFrom('METEOR@1.0'); + api.use('fourseven:scss@4.5.4'); api.use('jquery', 'client'); + api.imply('jquery', 'client'); - api.export('Materialize', 'client'); + var assets = [ + 'fonts/roboto/Roboto-Bold.woff', + 'fonts/roboto/Roboto-Bold.woff2', + 'fonts/roboto/Roboto-Light.woff', + 'fonts/roboto/Roboto-Light.woff2', + 'fonts/roboto/Roboto-Medium.woff', + 'fonts/roboto/Roboto-Medium.woff2', + 'fonts/roboto/Roboto-Regular.woff', + 'fonts/roboto/Roboto-Regular.woff2', + 'fonts/roboto/Roboto-Thin.woff', + 'fonts/roboto/Roboto-Thin.woff2', + ]; + + addAssets(api, assets); api.addFiles([ - 'font/material-design-icons/Material-Design-Icons.eot', - 'font/material-design-icons/Material-Design-Icons.svg', - 'font/material-design-icons/Material-Design-Icons.ttf', - 'font/material-design-icons/Material-Design-Icons.woff', - 'font/material-design-icons/Material-Design-Icons.woff2', - 'font/roboto/Roboto-Bold.ttf', - 'font/roboto/Roboto-Bold.woff', - 'font/roboto/Roboto-Bold.woff2', - 'font/roboto/Roboto-Light.ttf', - 'font/roboto/Roboto-Light.woff', - 'font/roboto/Roboto-Light.woff2', - 'font/roboto/Roboto-Medium.ttf', - 'font/roboto/Roboto-Medium.woff', - 'font/roboto/Roboto-Medium.woff2', - 'font/roboto/Roboto-Regular.ttf', - 'font/roboto/Roboto-Regular.woff', - 'font/roboto/Roboto-Regular.woff2', - 'font/roboto/Roboto-Thin.ttf', - 'font/roboto/Roboto-Thin.woff', - 'font/roboto/Roboto-Thin.woff2', - 'bin/materialize.css', - 'bin/materialize.js', + 'dist/js/materialize.js' ], 'client'); + + var scssFiles = [ + 'sass/components/date_picker/_default.date.scss', + 'sass/components/date_picker/_default.scss', + 'sass/components/date_picker/_default.time.scss', + 'sass/components/forms/_checkboxes.scss', + 'sass/components/forms/_file-input.scss', + 'sass/components/forms/_forms.scss', + 'sass/components/forms/_input-fields.scss', + 'sass/components/forms/_radio-buttons.scss', + 'sass/components/forms/_range.scss', + 'sass/components/forms/_select.scss', + 'sass/components/forms/_switches.scss', + 'sass/components/_badges.scss', + 'sass/components/_buttons.scss', + 'sass/components/_cards.scss', + 'sass/components/_carousel.scss', + 'sass/components/_chips.scss', + 'sass/components/_collapsible.scss', + 'sass/components/_color.scss', + 'sass/components/_dropdown.scss', + 'sass/components/_global.scss', + 'sass/components/_grid.scss', + 'sass/components/_icons-material-design.scss', + 'sass/components/_materialbox.scss', + 'sass/components/_modal.scss', + 'sass/components/_navbar.scss', + 'sass/components/_normalize.scss', + 'sass/components/_preloader.scss', + 'sass/components/_pulse.scss', + 'sass/components/_roboto.scss', + 'sass/components/_sideNav.scss', + 'sass/components/_slider.scss', + 'sass/components/_table_of_contents.scss', + 'sass/components/_tabs.scss', + 'sass/components/_tapTarget.scss', + 'sass/components/_toast.scss', + 'sass/components/_tooltip.scss', + 'sass/components/_transitions.scss', + 'sass/components/_typography.scss', + 'sass/components/_variables.scss', + 'sass/components/_waves.scss', + 'sass/materialize.scss' + ]; + + api.addFiles(scssFiles, 'client'); + + + api.export('Materialize', 'client'); }); + + +function addAssets(api, assets){ + if(api.addAssets){ + api.addAssets(assets, 'client'); + } else { + api.addFiles(assets, 'client', {isAsset: true}); + } +} diff --git a/package.json b/package.json index e186c8b82f..af668ae203 100644 --- a/package.json +++ b/package.json @@ -2,44 +2,61 @@ "name": "materialize-css", "description": "Builds Materialize distribution packages", "author": "Alvin Wang, Alan Chang", - "url": "http://materializecss.com/", - "version": "0.97.0", + "homepage": "http://materializecss.com/", + "version": "0.100.2", + "main": "dist/js/materialize.js", + "style": "dist/css/materialize.css", + "sass": "sass/materialize.scss", + "license": "MIT", "repository": { "type": "git", "url": "git://github.com/Dogfalo/materialize.git" }, - "directories": { - "sass": "sass", - "bin": "bin", - "font": "font" + "bugs": { + "url": "https://github.com/Dogfalo/materialize/issues" + }, + "scripts": { + "test": "grunt travis --verbose" }, "dependencies": { + "hammerjs": "^2.0.8", + "jquery": "^3.0.0 || ^2.1.4" }, - "engine": "node >= 0.10", + "engine": "node >= 6", "devDependencies": { - "grunt": "^0.4.5", - "grunt-banner": "^0.3.0", - "grunt-browser-sync": "^2.1.1", - "grunt-concurrent": "^1.0.0", - "grunt-contrib-clean": "0.5.x", - "grunt-contrib-compress": "^0.12.0", - "grunt-contrib-concat": "^0.5.0", - "grunt-contrib-connect": "^0.4.2", - "grunt-contrib-copy": "0.4.x", - "grunt-contrib-cssmin": "0.6.x", - "grunt-contrib-jade": "0.8.x", - "grunt-contrib-testem": "^0.5.16", - "grunt-contrib-uglify": "0.2.x", - "grunt-contrib-watch": "^0.5.3", - "grunt-notify": "^0.4.1", + "autoprefixer": "^7.1.1", + "babel-preset-es2015": "^6.24.1", + "grunt": "^1.0.1", + "grunt-babel": "^6.0.0", + "grunt-banner": "^0.6.0", + "grunt-browser-sync": "^2.2.0", + "grunt-concurrent": "^2.3.1", + "grunt-contrib-clean": "^1.1.0", + "grunt-contrib-compress": "^1.4.1", + "grunt-contrib-concat": "^1.0.1", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-jade": "^1.0.0", + "grunt-contrib-jasmine": "^1.1.0", + "grunt-contrib-uglify": "^3.0.1", + "grunt-contrib-watch": "^1.0.0", + "grunt-notify": "^0.4.5", + "grunt-postcss": "^0.8.0", "grunt-remove-logging": "^0.2.0", - "grunt-rename": "^0.1.4", - "grunt-sass": "^0.18.1", + "grunt-rename-util": "^1.0.0", + "grunt-sass": "^2.0.0", "grunt-text-replace": "^0.4.0", - "node-sass": "^2.1.1", - "qunit": "^0.7.6" + "jasmine": "^2.6.0", + "jasmine-jquery": "^2.1.1", + "node-archiver": "^0.3.0", + "node-sass": "^4.5.2", + "phantomjs-prebuilt": "^2.1.14" }, - "scripts": { - "test": "grunt testem:run:default" - } + "files": [ + "dist", + "extras", + "js/**/*.js", + "sass/**/*.scss", + "Gruntfile.js", + "LICENSE" + ] } diff --git a/pagination.html b/pagination.html deleted file mode 100644 index 3420989dc6..0000000000 --- a/pagination.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - - Pagination - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - - -
                        - -
                        -
                        -

                        Add pagination links to help split up your long content into shorter, easier to understand blocks.

                        -

                        Basic

                        - -

                        -
                        
                        -  <ul class="pagination">
                        -    <li class="disabled"><a href="#!"><i class="material-icons">chevron_left</i></a></li>
                        -    <li class="active"><a href="#!">1</a></li>
                        -    <li class="waves-effect"><a href="#!">2</a></li>
                        -    <li class="waves-effect"><a href="#!">3</a></li>
                        -    <li class="waves-effect"><a href="#!">4</a></li>
                        -    <li class="waves-effect"><a href="#!">5</a></li>
                        -    <li class="waves-effect"><a href="#!"><i class="material-icons">chevron_right</i></a></li>
                        -  </ul>
                        -            
                        -
                        -
                        -
                        -
                        - - - -
                        - -
                        -
                        -
                        - - -
                        -
                        - -
                        -
                        -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/parallax-demo.html b/parallax-demo.html deleted file mode 100644 index a6d12c1b0e..0000000000 --- a/parallax-demo.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - Parallax - Materialize - - - - - - - - - - - - - - - -
                        - -
                        - -
                        - -
                        -
                        -
                        -
                        -
                        -

                        Parallax

                        -

                        Parallax is an effect where the background content or image in this case, is moved at a different speed than the foreground content while scrolling.

                        -
                        -
                        -

                        Parallax Demo HTML

                        -
                        
                        -  <div class="parallax-container">
                        -    <div class="parallax"><img src="images/parallax1.jpg"></div>
                        -  </div>
                        -  <div class="section white">
                        -    <div class="row container">
                        -      <h2 class="header">Parallax</h2>
                        -      <p class="grey-text text-darken-3 lighten-3">Parallax is an effect where the background content or image in this case, is moved at a different speed than the foreground content while scrolling.</p>
                        -    </div>
                        -  </div>
                        -  <div class="parallax-container">
                        -    <div class="parallax"><img src="images/parallax2.jpg"></div>
                        -  </div>
                        -      
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/parallax.html b/parallax.html deleted file mode 100644 index 6d2adb4998..0000000000 --- a/parallax.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - Parallax - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - - -
                        -

                        Introduction

                        -

                        Parallax is an effect where the background content or image in this case, is moved at a different speed than the foreground content while scrolling. Check out the demo to get a better idea of it.

                        - Open Demo -
                        - - - -
                        -

                        Parallax HTML Structure

                        -
                        
                        -    <div class="parallax-container">
                        -      <div class="parallax"><img src="images/parallax1.jpg"></div>
                        -    </div>
                        -        
                        -
                        - - - -
                        -

                        Initialization

                        -
                        
                        -    $(document).ready(function(){
                        -      $('.parallax').parallax();
                        -    });
                        -        
                        -
                        - - - -
                        -

                        Parallax Customization

                        -

                        The parallax container height is what defines how much of the image can be seen. This is set to a default of 500px. You can add your own style to override this.

                        -
                        
                        -    .parallax-container {
                        -      height: "your height here";
                        -    }
                        -        
                        -
                        - -
                        - - - -
                        - -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/preloader.html b/preloader.html deleted file mode 100644 index 4a4303db16..0000000000 --- a/preloader.html +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - - - - Preloader - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        -

                        If you have content that will take a long time to load, you should give the user feedback. For this reason we provide a number activity + progress indicators.

                        - -
                        -

                        Linear

                        -

                        There are a couple different types of linear progress bars.

                        -

                        Determinate

                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        
                        -  <div class="progress">
                        -      <div class="determinate" style="width: 70%"></div>
                        -  </div>
                        -        
                        - -

                        Indeterminate

                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        
                        -  <div class="progress">
                        -      <div class="indeterminate"></div>
                        -  </div>
                        -        
                        - -
                        - - -
                        -

                        Circular

                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        
                        -  <div class="preloader-wrapper big active">
                        -    <div class="spinner-layer spinner-blue-only">
                        -      <div class="circle-clipper left">
                        -        <div class="circle"></div>
                        -      </div><div class="gap-patch">
                        -        <div class="circle"></div>
                        -      </div><div class="circle-clipper right">
                        -        <div class="circle"></div>
                        -      </div>
                        -    </div>
                        -  </div>
                        -        
                        -
                        - -
                        -

                        Circular Flashing Colors

                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        - -
                        -
                        -
                        
                        -    <div class="preloader-wrapper big active">
                        -      <div class="spinner-layer spinner-blue">
                        -        <div class="circle-clipper left">
                        -          <div class="circle"></div>
                        -        </div><div class="gap-patch">
                        -          <div class="circle"></div>
                        -        </div><div class="circle-clipper right">
                        -          <div class="circle"></div>
                        -        </div>
                        -      </div>
                        -
                        -      <div class="spinner-layer spinner-red">
                        -        <div class="circle-clipper left">
                        -          <div class="circle"></div>
                        -        </div><div class="gap-patch">
                        -          <div class="circle"></div>
                        -        </div><div class="circle-clipper right">
                        -          <div class="circle"></div>
                        -        </div>
                        -      </div>
                        -
                        -      <div class="spinner-layer spinner-yellow">
                        -        <div class="circle-clipper left">
                        -          <div class="circle"></div>
                        -        </div><div class="gap-patch">
                        -          <div class="circle"></div>
                        -        </div><div class="circle-clipper right">
                        -          <div class="circle"></div>
                        -        </div>
                        -      </div>
                        -
                        -      <div class="spinner-layer spinner-green">
                        -        <div class="circle-clipper left">
                        -          <div class="circle"></div>
                        -        </div><div class="gap-patch">
                        -          <div class="circle"></div>
                        -        </div><div class="circle-clipper right">
                        -          <div class="circle"></div>
                        -        </div>
                        -      </div>
                        -    </div>
                        -        
                        -
                        - - -
                        - - -
                        -
                        -
                        - - -
                        - -
                        -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pushpin.html b/pushpin.html deleted file mode 100644 index df7c77dff2..0000000000 --- a/pushpin.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - Pushpin - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -

                        Introduction

                        -

                        Pushpin is our fixed positioning plugin. You can check out our live examples: the fixed Table of Contents on the right.

                        -
                        - - - -
                        -

                        jQuery Plugin Initialization

                        -
                        
                        -  $(document).ready(function(){
                        -    $('.tabs-wrapper .row').pushpin({ top: $('.tabs-wrapper').offset().top });
                        -  });
                        -        
                        -
                        - - - -
                        -

                        jQuery Plugin Options

                        - - - - - - - - - - - - - - - - - - - - - - -
                        Option NameDescription
                        TopThe distance in pixels from the top of the page where the element becomes fixed. (Default: 0)
                        BottomThe distance in pixels from the top of the page where the elements stops being fixed. (Default: Infinity)
                        OffsetThe offset from the top the element will be fixed at. (Default: 0)
                        -
                        - -
                        - - - -
                        -
                        -
                        - - -
                        - -
                        -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sass.html b/sass.html deleted file mode 100644 index e4a572dae2..0000000000 --- a/sass.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - - - Sass - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - - -
                        -

                        Variables

                        -

                        - When using Sass, you can change the color scheme of your site extremely quickly. Below is a very small sample of what you can change through sass in _variables.scss. -

                        -
                        
                        -  $primary-color: color("materialize-red", "lighten-2") !default;
                        -  $primary-color-light: false !default;
                        -  $primary-color-dark: false !default;
                        -  @if not $primary-color-light {
                        -    $primary-color-light: lighten($primary-color, 15%);
                        -  }
                        -  @if not $primary-color-dark {
                        -    $primary-color-dark: darken($primary-color, 15%);
                        -  }
                        -  $secondary-color: color("teal", "lighten-1") !default;
                        -  $success-color: color("green", "base") !default;
                        -  $error-color: color("red", "base") !default;
                        -
                        -  $link-color: color("light-blue", "darken-1") !default;
                        -
                        -  /*** More variables not shown here.. ***/
                        -        
                        -
                        - - -
                        -

                        Media Queries

                        -

                        - We have 3 media queries for the 3 standard screen sizes you can use in your custom Sass files. This also includes media query variables that will define the range. -

                        -

                        - Small screens are defined as having a max-width of 600px -
                        - Medium screens are defined as having a max-width of 992px -
                        - Large screen are defined as having a min-width of 993px -

                        - -

                        CSS

                        -
                        
                        -  /* These classes can be added to HTML Elements
                        -   * to affect visibility on certain displays.
                        -   */
                        -  .hide-on-small-only
                        -  .hide-on-small-and-down
                        -  .hide-on-med-and-down
                        -  .hide-on-med-and-up
                        -  .hide-on-med-only
                        -  .hide-on-large-only
                        -  .show-on-large
                        -  .show-on-medium
                        -  .show-on-small
                        -  .show-on-medium-and-up
                        -  .show-on-medium-and-down
                        -            
                        - -

                        Sass

                        -
                        
                        -  @media #{$small-and-down} {
                        -    // styles for small screens and down
                        -  }
                        -  @media #{$medium-and-up} {
                        -    // styles for medium screens and larger
                        -  }
                        -  @media #{$medium-and-down} {
                        -    // styles for medium screens and down
                        -  }
                        -  @media #{$large-and-up} {
                        -    // styles for large screens and up
                        -  }
                        -            
                        -
                        - - -
                        -

                        Prefixer

                        -

                        - One major goal of this framework is to be as adaptable as possible which includes cross browser compatibility. We have adapted a prefixer script to Sass which will automatically add all browser prefixes for certain CSS properties. -

                        - - - For Example: Using this Sass mixin -
                        
                        -  @include transition(.3s);
                        -        
                        - Will Output This -
                        
                        -  -webkit-transition: 0.3s;
                        -  -moz-transition: 0.3s;
                        -  -o-transition: 0.3s;
                        -  -ms-transition: 0.3s;
                        -  transition: 0.3s;
                        -        
                        - Here is the full list of mixins -
                        
                        -  animation($args)
                        -  animation-delay($delay)
                        -  animation-direction($direction)
                        -  animation-duration($duration)
                        -  animation-fill-mode($mode)
                        -  animation-iteration-count($count)
                        -  animation-name($name)
                        -  animation-play-state($state)
                        -  animation-timing-function($function)
                        -  background-size($args)
                        -  box-sizing($args)
                        -      border-box()
                        -      content-box()
                        -  columns($args)
                        -      column-count($count)
                        -      column-gap($gap)
                        -      column-rule($args)
                        -      column-width($width)
                        -  gradient($default,$start,$stop)
                        -      linear-gradient-top($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])
                        -      linear-gradient-left($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])
                        -  transform($args)
                        -      transform-origin($args)
                        -      transform-style($style)
                        -      rotate($deg)
                        -      scale($factor)
                        -      translate($x,$y)
                        -      translate3d($x,$y,$z)
                        -      translateHardware($x,$y)
                        -  text-shadow($args)
                        -  transition($args)
                        -      transition-delay($delay)
                        -      transition-duration($duration)
                        -      transition-property($property)
                        -      transition-timing-function($function)
                        -        
                        -
                        -
                        -
                        -
                        -
                        - - -
                        - -
                        -
                        - -
                        - -
                        - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sass/.npmignore b/sass/.npmignore new file mode 100644 index 0000000000..d832e56a7c --- /dev/null +++ b/sass/.npmignore @@ -0,0 +1,4 @@ +# Ignore documentation related files + +_style.scss +ghpages-materialize.scss diff --git a/sass/style.scss b/sass/_style.scss similarity index 65% rename from sass/style.scss rename to sass/_style.scss index 6e4b0e4820..fefe0f6c48 100644 --- a/sass/style.scss +++ b/sass/_style.scss @@ -1,3 +1,5 @@ +$border-color: rgba(0,0,0,.14); + /*************** HTML Styles ***************/ @@ -18,13 +20,19 @@ h1,h2,h3,h4,h5,h6 { -webkit-font-smoothing: antialiased; } +h5 > span { + font-size: 14px; + margin-left: 15px; + color: #777; +} + nav { // background-color: color("materialize-red", "lighten-2"); a { -webkit-font-smoothing: antialiased; } - ul li:hover, ul li.active { + ul li a:hover, ul li.active { background-color: color("materialize-red", "lighten-1"); } } @@ -47,7 +55,7 @@ nav { } header, main, footer { - padding-left: 240px; + padding-left: 300px; } .parallax-demo header, .parallax-demo main, @@ -62,6 +70,11 @@ footer.example { header, main, footer { padding-left: 0; } + h5 > span { + display: block; + margin: 0 0 15px 0; + } + } /******************** @@ -72,10 +85,10 @@ footer.example { ul.side-nav.fixed li.logo { text-align: center; margin-top: 32px; - margin-bottom: 16px; - border-bottom: 1px solid #ddd; + margin-bottom: 136px; - &:hover { + &:hover, + #logo-container:hover { background-color: transparent; } } @@ -85,7 +98,7 @@ ul.side-nav.fixed { li { line-height: 44px; - &:hover, &.active { + &.active { background-color: rgba(0,0,0,.05); } @@ -93,11 +106,25 @@ ul.side-nav.fixed { font-size: 13px; line-height: 44px; height: 44px; + padding: 0 30px; + + .new.badge { + margin-top: calc(22px - 11px); + } } } ul.collapsible-accordion { background-color: #FFF; + + a.collapsible-header { + padding: 0 30px; + } + + .collapsible-body li a { + font-weight: 400; + padding: 0 37.5px 0 45px; + } } // Only show scrollbar on hover @@ -115,6 +142,62 @@ ul.side-nav.fixed { margin-bottom: 32px; } +.patreon-ad { + display: none; + position: fixed; + left: 0; + bottom: 0; + height: 45px; + width: 299px; + background-color: #fff; + z-index: 1000; + border-top: 1px solid $border-color; + + a { + width: 100%; + line-height: 45px; + padding: 0 30px; + } +} +.patreon-footer-ad { + &:last-child { + margin-right: 0; + } + + display: inline-block; + float: left; + margin-right: 50px; + margin-bottom: 20px; + + a { + display: flex; + align-items: center; + justify-content: center; + height: 70px; + } + img { + max-width: 180px; + max-height: 100%; + } +} + +@media #{$medium-and-down} { + .patreon-ad, + .bsa-cpc { + display: none; + } + + .patreon-footer-ad { + display: block; + float: none; + margin-right: 0; + } + + footer.page-footer .container { + text-align: center; + } +} + nav.top-nav { height: 122px; box-shadow: none; @@ -134,13 +217,18 @@ a.button-collapse.top-nav { float: none; margin-left: 1.5rem; color: #fff; - font-size: 32px; + font-size: 36px; z-index: 2; &.full { line-height: 122px; } + + i { + font-size: 32px; + } } + @media #{$small-and-down} { a.button-collapse.top-nav { left: 5%; @@ -242,7 +330,7 @@ a.button-collapse.top-nav { #github-button { background-color: #6f6d6d; - @include transition(.25s ease); + transition: .25s ease; &:hover { background-color: #797777; } @@ -268,11 +356,6 @@ a.button-collapse.top-nav { .promo{ width: 100%; - @media #{$medium-and-down} { - width: 60%; - margin: 0 auto; - display: block; - } i { margin: 40px 0; @@ -322,7 +405,7 @@ a.button-collapse.top-nav { padding: 0; span { - font-weight: 200; + font-weight: 100; line-height: 50px; } } @@ -452,7 +535,7 @@ $height: auto; font-weight: 500; font-size: 12px; display: block; - @include box-sizing(border-box); + box-sizing: border-box; } .col { margin-bottom: 55px; @@ -550,6 +633,10 @@ code, pre { font-size: 1rem; line-height: 1.1rem !important; } +:not(pre) > code[class*="language-"] { + padding: .1em .25em; + border: solid 1px rgba(51,51,51,0.12); +} pre[class*="language-"] { &:before { position: absolute; @@ -573,6 +660,10 @@ pre[class*="language-"] { // Carbon Ads styling .toc-wrapper { + &.pin-bottom { + margin-top: 84px; + } + position: relative; margin-top: 42px; } @@ -637,8 +728,81 @@ pre[class*="language-"] { } +.buysellads-homepage #carbonads { + display: block; + overflow: hidden; + margin: 4em auto 0; + padding: 1em; + max-width: 360px; + border-radius: 2px; + background-color: hsla(0, 0%, 100%, .13); + + + span { + position: relative; + display: block; + overflow: hidden; + } + + .carbon-img { + float: left; + margin-right: 1em; + } + + .carbon-text { + max-width: calc(100% - 135px - 1em); + width: auto; + } + + .carbon-poweredby { + position: absolute; + left: auto; + right: 0; + bottom: -4px; + } +} + + // BuySellAds Styling .buysellads { + &.buysellads-demo { + bottom: 20px; + right: 20px; + position: fixed; + padding: 10px; + background-color: rgba(255,255,255,.9); + z-index: 1000; + + #carbonads a.carbon-img { + margin-right: 0; + } + + #carbonads a.carbon-text { + top: 0; + } + + a.close { + &:hover { + background-color: #ddd; + } + .material-icons { + font-size: 18px; + line-height: 24px; + } + text-align: center; + background-color: #fff; + border-radius: 50%; + box-shadow: 0 2px 4px 0 rgba(0,0,0,.1); + height: 24px; + width: 24px; + position: absolute; + top: -6px; + right: -6px; + z-index: 1; + transition: background-color .2s; + } + } + -webkit-font-smoothing: antialiased; position: relative; @@ -693,6 +857,73 @@ pre[class*="language-"] { } +/** BSA Sidebar */ +.bsa-cpc #_default_ { + position: fixed; + bottom: 0; + left: 0; + z-index: 10000; + padding: 15px 30px 20px; + width: 299px; + border-top: solid 1px #dbdbdb; + background-color: #fff; + font-size: 14px; + line-height: 1.5; +} + +.bsa-cpc .default-ad { + display: none; +} + +.bsa-cpc ._default_ { + display: inline; + overflow: hidden; + line-height: 1; +} + +.bsa-cpc ._default_ > * { + vertical-align: middle; +} + +.bsa-cpc a { + color: inherit; +} + +.bsa-cpc a:hover { + color: #ee6e73; +} + +.bsa-cpc .default-image { + display: none; +} + +.bsa-cpc .default-title, +.bsa-cpc .default-description { + display: inline; +} + +.bsa-cpc .default-title { + position: relative; + margin-right: 8px; + font-weight: 600; +} + +.bsa-cpc .default-title:before { + position: absolute; + top: calc(-50% - 17px); + padding: 4px 6px; + border-radius: 3px; + background-color: #ee6e73; + color: #fff; + content: "Sponsor"; + text-transform: uppercase; + letter-spacing: .4px; + font-weight: 600; + font-size: 10px; + line-height: 1; +} + + // Footer styling footer{ @@ -722,10 +953,12 @@ body.parallax-demo footer { // Waves page styling .waves-color-demo { .collection-item { - height: 57px; - line-height: 57px; + height: 37px; + line-height: 37px; + box-sizing: content-box; + code { - line-height: 57px; + line-height: 37px; } } .btn { @@ -809,7 +1042,6 @@ body.parallax-demo footer { // Thanks for Downloading - #download-thanks { display: none; } @@ -817,5 +1049,188 @@ body.parallax-demo footer { // Twitter widget #twitter-widget-0 { - width: 190px !important; -} \ No newline at end of file + width: 300px !important; +} + + +// Version dropdown +#nav-mobile li.version { + position: absolute; + top: 100px; + left: 0; + right: 0; + font-family: "Inconsolata"; + text-align: center; + + .dropdown-button { + font-family: "Inconsolata"; + margin: 0 auto; + display: inline-block; + min-width: 120px; + padding: 0 10px; + border-bottom: 1px solid rgba(0,0,0, .2); + + .caret { + position: relative; + top: 10px; + fill: rgba(0,0,0,.6); + } + } +} + +#version-dropdown { + text-align: left; + + li > a { + padding: 0 10px; + } + + a { + height: 50px; + line-height: 50px; + } + } + + +// Search +#nav-mobile li.search { + &:hover { background-color: #fff; } + + position: absolute; + left: 0; + right: 0; + top: 160px; + margin-top: 1px; + padding: 1px 0 0 0; + z-index: 2; + + .search-wrapper { + &.focused { margin: 0; } + + margin: 0 12px; + transition: margin .25s ease; + + input#search { + &:focus { + outline: none; + box-shadow: none; + } + + display: block; + font-size: 16px; + font-weight: 300; + width: 100%; + height: 45px; + margin: 0; + box-sizing: border-box; + padding: 0 45px 0 15px; + border: 0; + } + + i.material-icons { + position: absolute; + top: 10px; + right: 10px; + cursor: pointer; + } + } + + + .search-results { + margin: 0; + border-top: 1px solid #e9e9e9; + background-color: #fff; + + a { + &:hover, + &.focused { + background-color: #eee; + outline: none; + } + + font-size: 12px; + white-space: nowrap; + display: block; + } + } +} + + +// Themes +body.themes { + .themes-section { + &.right-aligned { + flex-direction: row-reverse; + } + + padding: 60px 0 40px 0; + @extend .valign-wrapper; + + .theme-preview { + width: 100%; + } + + h4 { + margin-top: 0; + } + + .badge.new { + font-weight: 400; + float: none; + display: inline-block; + transform: translateY(-6px); + } + } +} +.shopify-buy-frame, +.shopify-btn { + float: left; +} +.shopify-buy-frame { + width: 107px; +} +.shopify-btn { + &:hover { + background-color: #5f9d3e; + } + background-color: #78B657; + font-size: 15px; + font-family: 'Helvetica Neue'; + letter-spacing: .3px; + border-radius: 2px; + color: #fff; + padding: 10px 20px; + transition: background .2s; + margin: 20px 0 0 5px; + -webkit-font-smoothing: antialiased; +} +.themes-banner { + text-align: center; + background-color: #5f5f5f; + padding: 30px 0; + + p { + font-size: 18px; + color: #fff; + } + + a { + color: #baef74; + } +} + +@media #{$small-and-down} { + body.themes { + .themes-section { + &.right-aligned { + flex-direction: column-reverse; + } + + flex-direction: column-reverse; + + .theme-preview { + margin-bottom: 40px; + } + } + } +} diff --git a/sass/components/_badges.scss b/sass/components/_badges.scss new file mode 100644 index 0000000000..807de3d923 --- /dev/null +++ b/sass/components/_badges.scss @@ -0,0 +1,47 @@ +// Badges +span.badge { + min-width: 3rem; + padding: 0 6px; + margin-left: 14px; + text-align: center; + font-size: 1rem; + line-height: $badge-height; + height: $badge-height; + color: color('grey', 'darken-1'); + float: right; + box-sizing: border-box; + + &.new { + font-weight: 300; + font-size: 0.8rem; + color: #fff; + background-color: $badge-bg-color; + border-radius: 2px; + } + &.new:after { + content: " new"; + } + + &[data-badge-caption]::after { + content: " " attr(data-badge-caption); + } +} +nav ul a span.badge { + display: inline-block; + float: none; + margin-left: 4px; + line-height: $badge-height; + height: $badge-height; + -webkit-font-smoothing: auto; +} + +// Line height centering +.collection-item span.badge { + margin-top: calc(#{$collection-line-height / 2} - #{$badge-height / 2}); +} +.collapsible span.badge { + margin-left: auto; +} +.side-nav span.badge { + margin-top: calc(#{$sidenav-line-height / 2} - #{$badge-height / 2}); +} diff --git a/sass/components/_buttons.scss b/sass/components/_buttons.scss old mode 100755 new mode 100644 index 7192bec4fc..62b6255c4d --- a/sass/components/_buttons.scss +++ b/sass/components/_buttons.scss @@ -1,62 +1,118 @@ // shared styles -.btn, .btn-flat { - border: none; - border-radius: 2px; +.btn, +.btn-flat { + border: $button-border; + border-radius: $button-radius; display: inline-block; height: $button-height; - line-height: $button-line-height; - // margin-bottom: 15px; - outline: 0; - padding: 0 2rem; + line-height: $button-height; + padding: $button-padding; text-transform: uppercase; vertical-align: middle; // Gets rid of tap active state -webkit-tap-highlight-color: transparent; } + // Disabled shared style -.btn.disabled, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-floating:disabled { - background-color: $button-bg-color-disabled !important; +.btn.disabled, +.btn-floating.disabled, +.btn-large.disabled, +.btn-flat.disabled, +.btn:disabled, +.btn-floating:disabled, +.btn-large:disabled, +.btn-flat:disabled, +.btn[disabled], +.btn-floating[disabled], +.btn-large[disabled], +.btn-flat[disabled] { + pointer-events: none; + background-color: $button-disabled-background !important; box-shadow: none; - color: $button-color-disabled !important; + color: $button-disabled-color !important; cursor: default; - * { - pointer-events: none; - } &:hover { - background-color: $button-bg-color-disabled; - color: $button-color-disabled; + background-color: $button-disabled-background !important; + color: $button-disabled-color !important; } } + // Shared icon styles -.btn, .btn-floating, .btn-large, .btn-flat { +.btn, +.btn-floating, +.btn-large, +.btn-flat { + font-size: $button-font-size; + outline: 0; + i { - font-size: $button-font-size-shared; + font-size: $button-icon-font-size; line-height: inherit; } } +// Shared focus button style +.btn, +.btn-floating { + &:focus { + background-color: darken($button-raised-background, 10%); + } +} + // Raised Button .btn { - text-decoration:none; - color: $button-color-raised; - background-color: $button-color; + text-decoration: none; + color: $button-raised-color; + background-color: $button-raised-background; text-align: center; letter-spacing: .5px; @extend .z-depth-1; - @include transition(.2s ease-out); + transition: .2s ease-out; cursor: pointer; &:hover { - background-color: lighten($button-color, 5%); + background-color: $button-raised-background-hover; @extend .z-depth-1-half; } } // Floating button .btn-floating { + &:hover { + background-color: $button-floating-background-hover; + @extend .z-depth-1-half; + } + + &:before { + border-radius: 0; + } + + &.btn-large { + &.halfway-fab { + bottom: -$button-floating-large-size / 2; + } + + width: $button-floating-large-size; + height: $button-floating-large-size; + i { + line-height: $button-floating-large-size; + } + } + + &.halfway-fab { + &.left { + right: auto; + left: 24px; + } + + position: absolute; + right: 24px; + bottom: -$button-floating-size / 2; + } + display: inline-block; - color: $button-color-raised; + color: $button-floating-color; position: relative; overflow: hidden; z-index: 1; @@ -64,8 +120,8 @@ height: $button-floating-size; line-height: $button-floating-size; padding: 0; - background-color: $button-color; - border-radius: 50%; + background-color: $button-floating-background; + border-radius: $button-floating-radius; @extend .z-depth-1; transition: .3s; cursor: pointer; @@ -75,39 +131,93 @@ width: inherit; display: inline-block; text-align: center; - color: $button-color-raised; + color: $button-floating-color; font-size: $button-large-icon-font-size; line-height: $button-floating-size; } - - &:hover { - @extend .z-depth-1-half; - } - &:before { - border-radius: 0; - } - &.btn-large { - width: $button-floating-size * 1.5; - height: $button-floating-size * 1.5; - i{ - line-height: $button-floating-size * 1.5; - } - } - } + // button fix button.btn-floating { - border: none; + border: $button-border; } // Fixed Action Button .fixed-action-btn { + &.active { + ul { + visibility: visible; + } + } + + &.horizontal { + padding: 0 0 0 15px; + + ul { + text-align: right; + right: 64px; + top: 50%; + transform: translateY(-50%); + height: 100%; + left: auto; + width: 500px; /*width 100% only goes to width of button container */ + + li { + display: inline-block; + margin: 15px 15px 0 0; + } + } + } + + &.toolbar { + &.active { + & > a i { + opacity: 0; + } + } + + padding: 0; + height: $button-floating-large-size; + + ul { + display: flex; + top: 0; + bottom: 0; + z-index: 1; + + li { + flex: 1; + display: inline-block; + margin: 0; + height: 100%; + transition: none; + + a { + display: block; + overflow: hidden; + position: relative; + width: 100%; + height: 100%; + background-color: transparent; + box-shadow: none; + color: #fff; + line-height: $button-floating-large-size; + z-index: 1; + + i { + line-height: inherit; + } + } + } + } + } + position: fixed; right: 23px; bottom: 23px; padding-top: 15px; margin-bottom: 0; - z-index: 998; + z-index: 997; ul { left: 0; @@ -116,6 +226,7 @@ button.btn-floating { position: absolute; bottom: 64px; margin: 0; + visibility: hidden; li { margin-bottom: 15px; @@ -125,17 +236,40 @@ button.btn-floating { opacity: 0; } } + + .fab-backdrop { + position: absolute; + top: 0; + left: 0; + z-index: -1; + width: $button-floating-size; + height: $button-floating-size; + background-color: $button-floating-background; + border-radius: $button-floating-radius; + transform: scale(0); + } } // Flat button .btn-flat { box-shadow: none; background-color: transparent; - color: $button-color-flat; + color: $button-flat-color; cursor: pointer; + transition: background-color .2s; + + &:focus, + &:hover { + box-shadow: none; + } + + &:focus { + background-color: rgba(0,0,0,.1); + } &.disabled { - color: lighten(#999, 10%); + background-color: transparent !important; + color: $button-flat-disabled-color !important; cursor: default; } } @@ -143,8 +277,8 @@ button.btn-floating { // Large button .btn-large { @extend .btn; - height: $button-height * 1.5; - line-height: 56px; + height: $button-large-height; + line-height: $button-large-height; i { font-size: $button-large-icon-font-size; diff --git a/sass/components/_cards.scss b/sass/components/_cards.scss index bf8180d0fc..11f9caec8c 100644 --- a/sass/components/_cards.scss +++ b/sass/components/_cards.scss @@ -11,7 +11,6 @@ .card { position: relative; - overflow: hidden; margin: $element-top-margin 0 $element-bottom-margin 0; background-color: $card-bg-color; transition: box-shadow .25s; @@ -20,7 +19,6 @@ .card-title { - color: $card-bg-color; font-size: 24px; font-weight: 300; &.activator { @@ -33,9 +31,14 @@ position: relative; .card-image { + max-height: 60%; overflow: hidden; } + .card-image + .card-content { + max-height: 40%; + } .card-content { + max-height: 100%; overflow: hidden; } .card-action { @@ -48,39 +51,68 @@ &.small { height: 300px; - - .card-image { - height: 150px; - } - .card-content { - height: 150px; - } - } &.medium { height: 400px; - - .card-image { - height: 250px; - } - .card-content { - height: 150px; - } } &.large { height: 500px; + } + + // Horizontal Cards + &.horizontal { + &.small, &.medium, &.large { + .card-image { + height: 100%; + max-height: none; + overflow: visible; + + img { + height: 100%; + } + } + } + + display: flex; .card-image { - height: 330px; + max-width: 50%; + img { + border-radius: 2px 0 0 2px; + max-width: 100%; + width: auto; + } + } + + .card-stacked { + display: flex; + flex-direction: column; + flex: 1; + position: relative; + + .card-content { + flex-grow: 1; + } } - .card-content { - height: 170px; + } + + // Sticky Action Section + &.sticky-action { + .card-action { + z-index: 2; + } + + .card-reveal { + z-index: 1; + padding-bottom: 64px; } } + + .card-image { position: relative; @@ -97,36 +129,47 @@ } .card-title { + color: $card-bg-color; position: absolute; bottom: 0; left: 0; + max-width: 100%; padding: $card-padding; } - } .card-content { padding: $card-padding; border-radius: 0 0 2px 2px; - p { margin: 0; color: inherit; } .card-title { - line-height: 48px; + display: block; + line-height: 32px; + margin-bottom: 8px; + + i { + line-height: 32px; + } } } .card-action { + &:last-child { + border-radius: 0 0 2px 2px; + } + position: relative; + background-color: inherit; border-top: 1px solid rgba(160,160,160,.2); - padding: $card-padding; + padding: 16px $card-padding; - a { + a:not(.btn):not(.btn-large):not(.btn-floating) { color: $card-link-color; margin-right: $card-padding; - @include transition(color .3s ease); + transition: color .3s ease; text-transform: uppercase; &:hover { color: $card-link-color-light; } @@ -139,15 +182,15 @@ background-color: $card-bg-color; width: 100%; overflow-y: auto; + left: 0; top: 100%; height: 100%; - z-index: 1; + z-index: 3; display: none; .card-title { cursor: pointer; display: block; } - } } diff --git a/sass/components/_carousel.scss b/sass/components/_carousel.scss new file mode 100644 index 0000000000..0b867f93df --- /dev/null +++ b/sass/components/_carousel.scss @@ -0,0 +1,90 @@ +.carousel { + &.carousel-slider { + top: 0; + left: 0; + + .carousel-fixed-item { + &.with-indicators { + bottom: 68px; + } + + position: absolute; + left: 0; + right: 0; + bottom: 20px; + z-index: 1; + } + + .carousel-item { + width: 100%; + height: 100%; + min-height: $carousel-height; + position: absolute; + top: 0; + left: 0; + + h2 { + font-size: 24px; + font-weight: 500; + line-height: 32px; + } + + p { + font-size: 15px; + } + } + } + + overflow: hidden; + position: relative; + width: 100%; + height: $carousel-height; + perspective: 500px; + transform-style: preserve-3d; + transform-origin: 0% 50%; + + .carousel-item { + display: none; + width: $carousel-item-width; + height: $carousel-item-height; + position: absolute; + top: 0; + left: 0; + + & > img { + width: 100%; + } + } + + .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; + + .indicator-item { + &.active { + background-color: #fff; + } + + display: inline-block; + position: relative; + cursor: pointer; + height: 8px; + width: 8px; + margin: 24px 4px; + background-color: rgba(255,255,255,.5); + + transition: background-color .3s; + border-radius: 50%; + } + } + + // Materialbox compatibility + &.scrolling .carousel-item .materialboxed, + .carousel-item:not(.active) .materialboxed { + pointer-events: none; + } +} diff --git a/sass/components/_chips.scss b/sass/components/_chips.scss index 80a30b57c3..353c12c94c 100644 --- a/sass/components/_chips.scss +++ b/sass/components/_chips.scss @@ -7,9 +7,11 @@ line-height: 32px; padding: 0 12px; border-radius: 16px; - background-color: #E4E4E4; + background-color: $chip-bg-color; + margin-bottom: $chip-margin; + margin-right: $chip-margin; - img { + > img { float: left; margin: 0 8px 0 -12px; height: 32px; @@ -17,11 +19,71 @@ border-radius: 50%; } - i.material-icons { + .close { cursor: pointer; float: right; font-size: 16px; line-height: 32px; padding-left: 8px; } -} \ No newline at end of file +} + +.chips { + border: none; + border-bottom: 1px solid $chip-border-color; + box-shadow: none; + margin: $input-margin; + min-height: 45px; + outline: none; + transition: all .3s; + + &.focus { + border-bottom: 1px solid $chip-selected-color; + box-shadow: 0 1px 0 0 $chip-selected-color; + } + + &:hover { + cursor: text; + } + + .chip.selected { + background-color: $chip-selected-color; + color: #fff; + } + + .input { + background: none; + border: 0; + color: rgba(0,0,0,.6); + display: inline-block; + font-size: $input-font-size; + height: $input-height; + line-height: 32px; + outline: 0; + margin: 0; + padding: 0 !important; + width: 120px !important; + } + + .input:focus { + border: 0 !important; + box-shadow: none !important; + } + + // Autocomplete + .autocomplete-content { + margin-top: 0; + margin-bottom: 0; + } +} + +// Form prefix +.prefix ~ .chips { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} +.chips:empty ~ label { + font-size: 0.8rem; + transform: translateY(-140%); +} diff --git a/sass/components/_collapsible.scss b/sass/components/_collapsible.scss index 3fa68177a1..8138426d8d 100644 --- a/sass/components/_collapsible.scss +++ b/sass/components/_collapsible.scss @@ -7,20 +7,18 @@ } .collapsible-header { - display: block; + display: flex; cursor: pointer; - min-height: $collapsible-height; - line-height: $collapsible-height; - padding: 0 1rem; + -webkit-tap-highlight-color: transparent; + line-height: 1.5; + padding: 1rem; background-color: $collapsible-header-color; border-bottom: 1px solid $collapsible-border-color; i { width: 2rem; font-size: 1.6rem; - line-height: $collapsible-height; - display: block; - float: left; + display: inline-block; text-align: center; margin-right: 1rem; } @@ -29,16 +27,13 @@ .collapsible-body { display: none; border-bottom: 1px solid $collapsible-border-color; - @include box-sizing(border-box); - - p { - margin: 0; - padding: 2rem; - } + box-sizing: border-box; + padding: 2rem; } // sideNav collapsible styling -.side-nav { +.side-nav, +.side-nav.fixed { .collapsible { border: none; @@ -52,8 +47,9 @@ border: none; line-height: inherit; height: inherit; - margin: 0 1rem; + padding: 0 $sidenav-padding; + &:hover { background-color: rgba(0,0,0,.05); } i { line-height: inherit; } } @@ -61,7 +57,10 @@ border: 0; background-color: $collapsible-header-color; - li a { margin: 0 1rem 0 2rem; } + li a { + padding: 0 (7.5px + $sidenav-padding) + 0 (15px + $sidenav-padding); + } } } diff --git a/sass/components/_color.scss b/sass/components/_color.scss index 95d65d5f95..27ea17736a 100644 --- a/sass/components/_color.scss +++ b/sass/components/_color.scss @@ -8,12 +8,12 @@ $materialize-red: ( + "base": #e51c23, "lighten-5": #fdeaeb, "lighten-4": #f8c1c3, "lighten-3": #f3989b, "lighten-2": #ee6e73, "lighten-1": #ea454b, - "base": #e51c23, "darken-1": #d0181e, "darken-2": #b9151b, "darken-3": #a21318, @@ -21,12 +21,12 @@ $materialize-red: ( ); $red: ( + "base": #F44336, "lighten-5": #FFEBEE, "lighten-4": #FFCDD2, "lighten-3": #EF9A9A, "lighten-2": #E57373, "lighten-1": #EF5350, - "base": #F44336, "darken-1": #E53935, "darken-2": #D32F2F, "darken-3": #C62828, @@ -38,12 +38,12 @@ $red: ( ); $pink: ( + "base": #e91e63, "lighten-5": #fce4ec, "lighten-4": #f8bbd0, "lighten-3": #f48fb1, "lighten-2": #f06292, "lighten-1": #ec407a, - "base": #e91e63, "darken-1": #d81b60, "darken-2": #c2185b, "darken-3": #ad1457, @@ -55,12 +55,12 @@ $pink: ( ); $purple: ( + "base": #9c27b0, "lighten-5": #f3e5f5, "lighten-4": #e1bee7, "lighten-3": #ce93d8, "lighten-2": #ba68c8, "lighten-1": #ab47bc, - "base": #9c27b0, "darken-1": #8e24aa, "darken-2": #7b1fa2, "darken-3": #6a1b9a, @@ -72,12 +72,12 @@ $purple: ( ); $deep-purple: ( + "base": #673ab7, "lighten-5": #ede7f6, "lighten-4": #d1c4e9, "lighten-3": #b39ddb, "lighten-2": #9575cd, "lighten-1": #7e57c2, - "base": #673ab7, "darken-1": #5e35b1, "darken-2": #512da8, "darken-3": #4527a0, @@ -89,12 +89,12 @@ $deep-purple: ( ); $indigo: ( + "base": #3f51b5, "lighten-5": #e8eaf6, "lighten-4": #c5cae9, "lighten-3": #9fa8da, "lighten-2": #7986cb, "lighten-1": #5c6bc0, - "base": #3f51b5, "darken-1": #3949ab, "darken-2": #303f9f, "darken-3": #283593, @@ -106,12 +106,12 @@ $indigo: ( ); $blue: ( + "base": #2196F3, "lighten-5": #E3F2FD, "lighten-4": #BBDEFB, "lighten-3": #90CAF9, "lighten-2": #64B5F6, "lighten-1": #42A5F5, - "base": #2196F3, "darken-1": #1E88E5, "darken-2": #1976D2, "darken-3": #1565C0, @@ -123,12 +123,12 @@ $blue: ( ); $light-blue: ( + "base": #03a9f4, "lighten-5": #e1f5fe, "lighten-4": #b3e5fc, "lighten-3": #81d4fa, "lighten-2": #4fc3f7, "lighten-1": #29b6f6, - "base": #03a9f4, "darken-1": #039be5, "darken-2": #0288d1, "darken-3": #0277bd, @@ -140,12 +140,12 @@ $light-blue: ( ); $cyan: ( + "base": #00bcd4, "lighten-5": #e0f7fa, "lighten-4": #b2ebf2, "lighten-3": #80deea, "lighten-2": #4dd0e1, "lighten-1": #26c6da, - "base": #00bcd4, "darken-1": #00acc1, "darken-2": #0097a7, "darken-3": #00838f, @@ -157,12 +157,12 @@ $cyan: ( ); $teal: ( + "base": #009688, "lighten-5": #e0f2f1, "lighten-4": #b2dfdb, "lighten-3": #80cbc4, "lighten-2": #4db6ac, "lighten-1": #26a69a, - "base": #009688, "darken-1": #00897b, "darken-2": #00796b, "darken-3": #00695c, @@ -174,12 +174,12 @@ $teal: ( ); $green: ( + "base": #4CAF50, "lighten-5": #E8F5E9, "lighten-4": #C8E6C9, "lighten-3": #A5D6A7, "lighten-2": #81C784, "lighten-1": #66BB6A, - "base": #4CAF50, "darken-1": #43A047, "darken-2": #388E3C, "darken-3": #2E7D32, @@ -191,12 +191,12 @@ $green: ( ); $light-green: ( + "base": #8bc34a, "lighten-5": #f1f8e9, "lighten-4": #dcedc8, "lighten-3": #c5e1a5, "lighten-2": #aed581, "lighten-1": #9ccc65, - "base": #8bc34a, "darken-1": #7cb342, "darken-2": #689f38, "darken-3": #558b2f, @@ -208,12 +208,12 @@ $light-green: ( ); $lime: ( + "base": #cddc39, "lighten-5": #f9fbe7, "lighten-4": #f0f4c3, "lighten-3": #e6ee9c, "lighten-2": #dce775, "lighten-1": #d4e157, - "base": #cddc39, "darken-1": #c0ca33, "darken-2": #afb42b, "darken-3": #9e9d24, @@ -225,12 +225,12 @@ $lime: ( ); $yellow: ( + "base": #ffeb3b, "lighten-5": #fffde7, "lighten-4": #fff9c4, "lighten-3": #fff59d, "lighten-2": #fff176, "lighten-1": #ffee58, - "base": #ffeb3b, "darken-1": #fdd835, "darken-2": #fbc02d, "darken-3": #f9a825, @@ -242,12 +242,12 @@ $yellow: ( ); $amber: ( + "base": #ffc107, "lighten-5": #fff8e1, "lighten-4": #ffecb3, "lighten-3": #ffe082, "lighten-2": #ffd54f, "lighten-1": #ffca28, - "base": #ffc107, "darken-1": #ffb300, "darken-2": #ffa000, "darken-3": #ff8f00, @@ -259,12 +259,12 @@ $amber: ( ); $orange: ( + "base": #ff9800, "lighten-5": #fff3e0, "lighten-4": #ffe0b2, "lighten-3": #ffcc80, "lighten-2": #ffb74d, "lighten-1": #ffa726, - "base": #ff9800, "darken-1": #fb8c00, "darken-2": #f57c00, "darken-3": #ef6c00, @@ -276,12 +276,12 @@ $orange: ( ); $deep-orange: ( + "base": #ff5722, "lighten-5": #fbe9e7, "lighten-4": #ffccbc, "lighten-3": #ffab91, "lighten-2": #ff8a65, "lighten-1": #ff7043, - "base": #ff5722, "darken-1": #f4511e, "darken-2": #e64a19, "darken-3": #d84315, @@ -293,12 +293,12 @@ $deep-orange: ( ); $brown: ( + "base": #795548, "lighten-5": #efebe9, "lighten-4": #d7ccc8, "lighten-3": #bcaaa4, "lighten-2": #a1887f, "lighten-1": #8d6e63, - "base": #795548, "darken-1": #6d4c41, "darken-2": #5d4037, "darken-3": #4e342e, @@ -306,12 +306,12 @@ $brown: ( ); $blue-grey: ( + "base": #607d8b, "lighten-5": #eceff1, "lighten-4": #cfd8dc, "lighten-3": #b0bec5, "lighten-2": #90a4ae, "lighten-1": #78909c, - "base": #607d8b, "darken-1": #546e7a, "darken-2": #455a64, "darken-3": #37474f, @@ -319,12 +319,12 @@ $blue-grey: ( ); $grey: ( + "base": #9e9e9e, "lighten-5": #fafafa, "lighten-4": #f5f5f5, "lighten-3": #eeeeee, "lighten-2": #e0e0e0, "lighten-1": #bdbdbd, - "base": #9e9e9e, "darken-1": #757575, "darken-2": #616161, "darken-3": #424242, @@ -359,7 +359,7 @@ $colors: ( "blue-grey": $blue-grey, "grey": $grey, "shades": $shades -); +) !default; // Color Classes @@ -374,7 +374,7 @@ $colors: ( color: $color_value !important; } } - @else { + @else if $color_name != "shades" { .#{$color_name}.#{$color_type} { background-color: $color_value !important; } @@ -406,7 +406,7 @@ $colors: ( @return map-get($curr_color, $type); } } - @warn "Unknown `#{name}` in $colors."; + @warn "Unknown `#{$color}` - `#{$type}` in $colors."; @return null; } diff --git a/sass/components/_dropdown.scss b/sass/components/_dropdown.scss index 585fbd60b2..fa6c85b198 100644 --- a/sass/components/_dropdown.scss +++ b/sass/components/_dropdown.scss @@ -15,26 +15,54 @@ clear: both; color: $off-black; cursor: pointer; + min-height: $dropdown-item-height; line-height: 1.5rem; width: 100%; text-align: left; text-transform: none; - &:hover, &.active { + &:hover, &.active, &.selected { background-color: $dropdown-hover-bg-color; } + &.active.selected { + background-color: darken($dropdown-hover-bg-color, 5%); + } + + &.divider { + min-height: 0; + height: 1px; + } + & > a, & > span { - font-size: 1.2rem; + font-size: 16px; color: $dropdown-color; display: block; - padding: 1rem 1rem; + line-height: 22px; + padding: (($dropdown-item-height - 22) / 2) 16px; + } + + & > span > label { + top: 1px; + left: 0; + height: 18px; } // Icon alignment override & > a > i { height: inherit; line-height: inherit; + float: left; + margin: 0 24px 0 0; + width: 24px; } } } + +// Input field specificity bugfix +.input-field.col .dropdown-content [type="checkbox"] + label { + top: 1px; + left: 0; + height: 18px; +} + diff --git a/sass/components/_form.scss b/sass/components/_form.scss deleted file mode 100644 index d7bc64bb10..0000000000 --- a/sass/components/_form.scss +++ /dev/null @@ -1,888 +0,0 @@ -/* Remove Focus Boxes */ -select:focus { - outline: 1px solid lighten($secondary-color, 47%); -} -button:focus { - outline: none; - background-color: lighten($button-color, 4%); -} - -label { - font-size: $label-font-size; - color: $input-border-color; -} - -/*************************** - Text Inputs + Textarea -****************************/ - -// Style Placeholders -::-webkit-input-placeholder { - color: lighten($input-border-color, 20%); -} - -:-moz-placeholder { /* Firefox 18- */ - color: lighten($input-border-color, 20%); -} - -::-moz-placeholder { /* Firefox 19+ */ - color: lighten($input-border-color, 20%); -} - -:-ms-input-placeholder { - color: lighten($input-border-color, 20%); -} - -// Text inputs -input[type=text], -input[type=password], -input[type=email], -input[type=url], -input[type=time], -input[type=date], -input[type=datetime-local], -input[type=tel], -input[type=number], -input[type=search], -textarea.materialize-textarea { - - // General Styles - background-color: transparent; - border: none; - border-bottom: 1px solid $input-border-color; - border-radius: 0; - outline: none; - height: 3rem; - width: 100%; - - font-size: 1rem; - margin: 0 0 15px 0; - padding: 0; - box-shadow: none; - @include box-sizing(content-box); - transition: all .3s; - - - // Disabled input style - &:disabled, &[readonly="readonly"] { - color: $input-disabled-color; - border-bottom: 1px dotted $input-disabled-color; - } - // Disabled label style - &:disabled+label, &[readonly="readonly"]+label { - color: $input-disabled-color; - } - // Focused input style - &:focus:not([readonly]) { - border-bottom: 1px solid $input-focus-color; - box-shadow: 0 1px 0 0 $input-focus-color; - } - // Focused label style - &:focus:not([readonly])+label { - color: $input-focus-color; - } - // Valid Input Style - &.valid, - &:focus.valid { - border-bottom: 1px solid $input-success-color; - box-shadow: 0 1px 0 0 $input-success-color; - } - // Custom Success Message - &.valid + label:after, - &:focus.valid + label:after { - content: attr(data-success); - color: $input-success-color; - opacity: 1; - } - // Invalid Input Style - &.invalid, - &:focus.invalid { - border-bottom: 1px solid $input-error-color; - box-shadow: 0 1px 0 0 $input-error-color; - } - // Custom Error message - &.invalid + label:after, - &:focus.invalid + label:after { - content: attr(data-error); - color: $input-error-color; - opacity: 1; - } - - // Form Message Shared Styles - & + label:after { - display: block; - content: ""; - position: absolute; - top: 65px; - opacity: 0; - transition: .2s opacity ease-out, .2s color ease-out; - } -} - -// Styling for input field wrapper -.input-field { - position: relative; - margin-top: 1rem; - - label { - color: $input-border-color; - position: absolute; - top: 0.8rem; - left: $gutter-width / 2; - font-size: 1rem; - cursor: text; - @include transition(.2s ease-out); - } - label.active { - font-size: $label-font-size; - @include transform(translateY(-140%)); - } - - // Prefix Icons - .prefix { - position: absolute; - width: 3rem; - font-size: 2rem; - @include transition(color .2s); - - &.active { color: $input-focus-color; } - } - .prefix ~ input, - .prefix ~ textarea { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); - } - .prefix ~ textarea { padding-top: .8rem; } - .prefix ~ label { margin-left: 3rem; } - - @media #{$medium-and-down} { - .prefix ~ input { - width: 86%; - width: calc(100% - 3rem); - } - } - @media #{$small-and-down} { - .prefix ~ input { - width: 80%; - width: calc(100% - 3rem); - } - } -} - - -// Search Field - - -.input-field input[type=search] { - display: block; - line-height: inherit; - padding-left: 4rem; - width: calc(100% - 4rem); - - &:focus { - background-color: $input-bg-color; - border: 0; - box-shadow: none; - color: #444; - - & + label i, - & ~ .mdi-navigation-close, - & ~ .material-icons { - color: #444; - } - } - - & + label { - left: 1rem; - } - - & ~ .mdi-navigation-close, - & ~ .material-icons { - position: absolute; - top: 0; - right: 1rem; - color: transparent; - cursor: pointer; - font-size: 2rem; - transition: .3s color; - } -} - - -// Default textarea -textarea { - width: 100%; - height: 3rem; - background-color: transparent; - - &.materialize-textarea { - overflow-y: hidden; /* prevents scroll bar flash */ - padding: 1.6rem 0; /* prevents text jump on Enter keypress */ - resize: none; - min-height: 3rem; - } -} - - -// For textarea autoresize -.hiddendiv { - display: none; - white-space: pre-wrap; - word-wrap: break-word; - overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */ - padding-top: 1.2rem; /* prevents text jump on Enter keypress */ -} - - -/*************** - Radio Buttons -***************/ - -/* Remove default Radio Buttons */ -[type="radio"]:not(:checked), -[type="radio"]:checked { - position: absolute; - left: -9999px; - visibility: hidden; -} - -[type="radio"]:not(:checked) + label, -[type="radio"]:checked + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - @include transition(.28s ease); - - -webkit-user-select: none; /* webkit (safari, chrome) browsers */ - -moz-user-select: none; /* mozilla browsers */ - -khtml-user-select: none; /* webkit (konqueror) browsers */ - -ms-user-select: none; /* IE10+ */ -} - -[type="radio"] + label:before, -[type="radio"] + label:after { - content: ''; - position: absolute; - left: 0; - top: 0; - margin: 4px; - width: 16px; - height: 16px; - z-index: 0; - @include transition(.28s ease); -} - - -/* Unchecked styles */ -[type="radio"]:not(:checked) + label:before { - border-radius: 50%; - border: 2px solid $radio-empty-color; -} -[type="radio"]:not(:checked) + label:after { - border-radius: 50%; - border: 2px solid $radio-empty-color; - z-index: -1; - - @include transform(scale(0)); -} - -/* Checked styles */ -[type="radio"]:checked + label:before { - border-radius: 50%; - border: 2px solid transparent; -} -[type="radio"]:checked + label:after { - border-radius: 50%; - border: 2px solid $radio-fill-color; - background-color: $radio-fill-color; - z-index: 0; - @include transform(scale(1.02)); -} - -/* Radio With gap */ -[type="radio"].with-gap:checked + label:before { - border-radius: 50%; - border: 2px solid $radio-fill-color; -} -[type="radio"].with-gap:checked + label:after { - border-radius: 50%; - border: 2px solid $radio-fill-color; - background-color: $radio-fill-color; - z-index: 0; - @include transform(scale(.5)); -} - -/* Disabled Radio With gap */ -[type="radio"].with-gap:disabled:checked + label:before { - border: 2px solid $input-disabled-color; -} -[type="radio"].with-gap:disabled:checked + label:after { - border: none; - background-color: $input-disabled-color; -} - -/* Disabled style */ -[type="radio"]:disabled:not(:checked) + label:before, -[type="radio"]:disabled:checked + label:before { - background-color: transparent; - border-color: $input-disabled-color; -} -[type="radio"]:disabled + label { - color: $input-disabled-color; -} -[type="radio"]:disabled:not(:checked) + label:before { - border-color: $input-disabled-color; -} -[type="radio"]:disabled:checked + label:after { - background-color: $input-disabled-color; - border-color: $input-disabled-solid-color; -} - - -/*************** - Checkboxes -***************/ - -/* CUSTOM CSS CHECKBOXES */ -form p { - margin-bottom: 10px; - text-align: left; -} -form p:last-child { - margin-bottom: 0; -} - -/* Remove default checkbox */ -[type="checkbox"]:not(:checked), -[type="checkbox"]:checked { - position: absolute; - left: -9999px; - visibility: hidden; -} - - -// Checkbox Styles -[type="checkbox"] { - - // Text Label Style - + label { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - - -webkit-user-select: none; /* webkit (safari, chrome) browsers */ - -moz-user-select: none; /* mozilla browsers */ - -khtml-user-select: none; /* webkit (konqueror) browsers */ - -ms-user-select: none; /* IE10+ */ - } - - /* checkbox aspect */ - + label:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; - z-index: 0; - border: 2px solid $radio-empty-color; - border-radius: 1px; - margin-top: 2px; - @include transition(.2s); - } - - &:not(:checked):disabled + label:before { - border: none; - background-color: $input-disabled-color; - } - -} - -[type="checkbox"]:checked { - + label:before { - top: -4px; - left: -3px; - width: 12px; height: 22px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid $radio-fill-color; - border-bottom: 2px solid $radio-fill-color; - @include transform(rotate(40deg)); - -webkit-backface-visibility: hidden; - @include transform-origin(100% 100%); - } - - &:disabled + label:before { - border-right: 2px solid $input-disabled-color; - border-bottom: 2px solid $input-disabled-color; - } - -} - -/* Indeterminate checkbox */ -[type="checkbox"]:indeterminate { - +label:before { - left: -10px; - top: -11px; - width: 10px; height: 22px; - border-top: none; - border-left: none; - border-right: 2px solid $radio-fill-color; - border-bottom: none; - @include transform(rotate(90deg)); - -webkit-backface-visibility: hidden; - @include transform-origin(100% 100%); - } - - // Disabled indeterminate - &:disabled + label:before { - border-right: 2px solid $input-disabled-color; - background-color: transparent; - } -} - - -// Filled in Style -[type="checkbox"].filled-in { - // General - + label:after { - border-radius: 2px; - } - + label:before, - + label:after { - content: ''; - left: 0; - position: absolute; - /* .1s delay is for check animation */ - transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; - z-index: 1; - } - // Unchecked style - &:not(:checked) + label:before { - width: 0; - height: 0; - border: 3px solid transparent; - left: 6px; - top: 10px; - - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 20% 40%; - transform-origin: 100% 100%; - } - &:not(:checked) + label:after { - height: 20px; - width: 20px; - background-color: transparent; - border: 2px solid $radio-empty-color; - top: 0px; - z-index: 0; - } - // Checked style - &:checked { - + label:before { - top: 0; - left: 1px; - width: 8px; - height: 13px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid $input-bg-color; - border-bottom: 2px solid $input-bg-color; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; - } - + label:after { - top: 0px; - width: 20px; - height: 20px; - border: 2px solid $secondary-color; - background-color: $secondary-color; - z-index: 0; - } - } - // Disabled style - &:disabled:not(:checked) + label:before { - - background-color: transparent; - border: 2px solid transparent; - } - &:disabled:not(:checked) + label:after { - border-color: transparent; - background-color: $input-disabled-solid-color; - } - &:disabled:checked + label:before { - background-color: transparent; - - } - &:disabled:checked + label:after { - background-color: $input-disabled-solid-color; - border-color: $input-disabled-solid-color; - } - -} - -/*************** - Switch -***************/ -.switch, -.switch * { - -webkit-user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -ms-user-select: none; -} -.switch label { - cursor: pointer; -} -.switch label input[type=checkbox]{ - opacity: 0; - width: 0; - height: 0; -} -.switch label input[type=checkbox]:checked + .lever { - background-color: $switch-checked-lever-bg; -} -.switch label input[type=checkbox]:checked + .lever:after { - background-color: $switch-bg-color; -} -.switch label .lever { - content: ""; - display: inline-block; - position: relative; - width: 40px; - height: 15px; - background-color: $switch-unchecked-lever-bg; - border-radius: 15px; - margin-right: 10px; - transition: background 0.3s ease; - vertical-align: middle; - margin: 0 16px; -} -.switch label .lever:after { - content: ""; - position: absolute; - display: inline-block; - width: 21px; - height: 21px; - background-color: $switch-unchecked-bg; - border-radius: 21px; - box-shadow: 0 1px 3px 1px rgba(0,0,0,.4); - left: -5px; - top: -3px; - transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease; -} -// Switch active style -input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px transparentize($switch-bg-color, .9); -} -input[type=checkbox]:not(:disabled) ~ .lever:active:after { - box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px rgba(0, 0, 0, .08); -} -.switch label input[type=checkbox]:checked + .lever:after { - left: 24px; -} - -// Disabled Styles - -.switch input[type=checkbox][disabled] + .lever{ - cursor: default; -} -.switch label input[type=checkbox][disabled] + .lever:after, -.switch label input[type=checkbox][disabled]:checked + .lever:after { - background-color: $input-disabled-solid-color; -} - - - - -/*************** - Select Field -***************/ - -.select-label { - position: absolute; -} - -.select-wrapper { - position: relative; - - input.select-dropdown { - position: relative; - cursor: pointer; - // color: #444; - background-color: transparent; - border: none; - border-bottom: 1px solid $input-border-color; - outline: none; - height: 3rem; - line-height: 3rem; - width: 100%; - font-size: 1rem; - margin: 0 0 15px 0; - padding: 0; - display: block; - } - span.caret { - color: initial; - position: absolute; - right: 0; - top: 16px; - font-size: 10px; - &.disabled { - color: $input-disabled-color; - } - } - & + label { - position: absolute; - top: -14px; - font-size: $label-font-size; - } -} - -select { display: none; } -select.browser-default { display: block; } - - -// Disabled styles -select:disabled { - color: rgba(0,0,0,.3); -} -.select-wrapper input.select-dropdown:disabled { - color: rgba(0,0,0,.3); - cursor: default; - -webkit-user-select: none; /* webkit (safari, chrome) browsers */ - -moz-user-select: none; /* mozilla browsers */ - -ms-user-select: none; /* IE10+ */ - border-bottom: 1px solid rgba(0,0,0,.3); -} -.select-wrapper i { - color: rgba(0,0,0,.3); -} -.select-dropdown li.disabled { - color: rgba(0,0,0,.3); - background-color: transparent; -} - - -/********************* - File Input -**********************/ -.file-field { - position: relative; - - .file-path-wrapper { - overflow: hidden; - padding-left: 10px; - } - input.file-path { width: 100%; } - - .btn { - float: left; - height: 3rem; - line-height: 3rem; - } - - span { - cursor: pointer; - } - - input[type=file] { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - width: 100%; - margin: 0; - padding: 0; - font-size: 20px; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); - } -} - - - -/*************** - Range -***************/ - -.range-field { - position: relative; -} - -input[type=range], input[type=range] + .thumb { - @extend .no-select; - cursor: pointer; -} - -input[type=range] { - position: relative; - background-color: transparent; - border: none; - outline: none; - width: 100%; - margin: 15px 0px; - padding: 0; -} -input[type=range] + .thumb { - position: absolute; - border: none; - height: 0; - width: 0; - border-radius: 50%; - background-color: $radio-fill-color; - top: 10px; - margin-left: -6px; - - @include transform-origin(50% 50%); - @include transform(rotate(-45deg)); - - .value { - display: block; - width: 30px; - text-align: center; - color: $radio-fill-color; - font-size: 0; - @include transform(rotate(45deg)); - } - - &.active { - border-radius: 50% 50% 50% 0; - - .value { - color: $input-bg-color; - margin-left: -1px; - margin-top: 8px; - font-size: 10px; - } - } -} - - -input[type=range]:focus { - outline: none; -} - - - -// WebKit -input[type=range]{ - -webkit-appearance: none; -} - -input[type=range]::-webkit-slider-runnable-track { - height: 3px; - background: #c2c0c2; - border: none; -} - -input[type=range]::-webkit-slider-thumb { - -webkit-appearance: none; - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background-color: $radio-fill-color; - transform-origin: 50% 50%; - margin: -5px 0 0 0; - @include transition(.3s); -} - -input[type=range]:focus::-webkit-slider-runnable-track { - background: #ccc; -} - -// FireFox -input[type=range]{ - /* fix for FF unable to apply focus style bug */ - border: 1px solid white; - - /*required for proper track sizing in FF*/ -} - -input[type=range]::-moz-range-track { - height: 3px; - background: #ddd; - border: none; -} - -input[type=range]::-moz-range-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: $radio-fill-color; - margin-top: -5px; -} - -/*hide the outline behind the border*/ -input[type=range]:-moz-focusring{ - outline: 1px solid white; - outline-offset: -1px; -} - -input[type=range]:focus::-moz-range-track { - background: #ccc; -} - -// IE 10+ -input[type=range]::-ms-track { - height: 3px; - - /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */ - background: transparent; - - /*leave room for the larger thumb to overflow with a transparent border */ - border-color: transparent; - border-width: 6px 0; - - /*remove default tick marks*/ - color: transparent; -} -input[type=range]::-ms-fill-lower { - background: #777; -} -input[type=range]::-ms-fill-upper { - background: #ddd; -} -input[type=range]::-ms-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: $radio-fill-color; -} -input[type=range]:focus::-ms-fill-lower { - background: #888; -} -input[type=range]:focus::-ms-fill-upper { - background: #ccc; -} - -/*************************** - Text Inputs + Textarea -****************************/ - -select { - background-color: rgba(255, 255, 255, 0.90); - width: 100%; - padding: 5px; - border: 1px solid #f2f2f2; - border-radius: 2px; - height: 3rem; - } diff --git a/sass/components/_global.scss b/sass/components/_global.scss index 2c9d2ff85f..42b235d2a3 100644 --- a/sass/components/_global.scss +++ b/sass/components/_global.scss @@ -18,7 +18,14 @@ main { } ul { - list-style-type: none; + &:not(.browser-default) { + padding-left: 0; + list-style-type: none; + + & > li { + list-style-type: none; + } + } } a { @@ -32,22 +39,11 @@ a { // Positioning .valign-wrapper { - @include flexbox(); - @include align(center); - - .valign { - display: block; - } + display: flex; + align-items: center; } -ul { - padding: 0; - li { - list-style-type: none; - } -} - // classic clearfix .clearfix { clear: both; @@ -58,28 +54,31 @@ ul { .z-depth-0 { box-shadow: none !important; } -.z-depth-1{ - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); +.z-depth-1 { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); } -.z-depth-1-half{ - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); +.z-depth-1-half { + box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); } -.z-depth-2{ - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +.z-depth-2 { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); } -.z-depth-3{ - box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); +.z-depth-3 { + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.3); } -.z-depth-4{ - box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); +.z-depth-4 { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3); } -.z-depth-5{ - box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); +.z-depth-5 { + box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.3); } -.hoverable:hover { +.hoverable { transition: box-shadow .25s; - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + + &:hover { + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + } } // Dividers @@ -140,13 +139,18 @@ video.responsive-video { li { display: inline-block; - font-size: 1.2rem; - padding: 0 10px; - line-height: 30px; border-radius: 2px; text-align: center; - - a { color: #444; } + vertical-align: top; + height: 30px; + + a { + color: #444; + display: inline-block; + font-size: 1.2rem; + padding: 0 10px; + line-height: 30px; + } &.active a { color: #fff; } @@ -185,32 +189,65 @@ video.responsive-video { } } +// Breadcrumbs +.breadcrumb { + font-size: 18px; + color: rgba(255,255,255, .7); + + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + display: inline-block; + float: left; + font-size: 24px; + } + + &:before { + content: '\E5CC'; + color: rgba(255,255,255, .7); + vertical-align: top; + display: inline-block; + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 25px; + margin: 0 10px 0 8px; + -webkit-font-smoothing: antialiased; + } + + &:first-child:before { + display: none; + } + + &:last-child { + color: #fff; + } +} // Parallax .parallax-container { position: relative; overflow: hidden; height: 500px; -} -.parallax { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; - - img { - display: none; + .parallax { position: absolute; - left: 50%; + top: 0; + left: 0; + right: 0; bottom: 0; - min-width: 100%; - min-height: 100%; - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - transform: translateX(-50%); + z-index: -1; + + img { + display: none; + position: absolute; + left: 50%; + bottom: 0; + min-width: 100%; + min-height: 100%; + transform: translate3d(0,0,0); + transform: translateX(-50%); + } } } @@ -266,27 +303,27 @@ ul.staggered-list li { } .show-on-large { @media #{$large-and-up} { - display: initial !important; + display: block !important; } } .show-on-medium { @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { - display: initial !important; + display: block !important; } } .show-on-small { @media #{$small-and-down} { - display: initial !important; + display: block !important; } } .show-on-medium-and-up { @media #{$medium-and-up} { - display: initial !important; + display: block !important; } } .show-on-medium-and-down { @media #{$medium-and-down} { - display: initial !important; + display: block !important; } } @@ -299,17 +336,19 @@ ul.staggered-list li { } // Footer -footer.page-footer { - margin-top: 20px; +.page-footer { padding-top: 20px; + color: $footer-font-color; background-color: $footer-bg-color; .footer-copyright { overflow: hidden; - height: 50px; - line-height: 50px; - color: rgba(255,255,255,.8); - background-color: rgba(51,51,51,.08); + min-height: 50px; + display: flex; + align-items: center; + padding: 10px 0px; + color: $footer-copyright-font-color; + background-color: $footer-copyright-bg-color; @extend .light; } } @@ -334,12 +373,12 @@ table { } > tr > td { - border-radius: 0px; + border-radius: 0; } } &.highlight > tbody > tr { - @include transition(background-color .25s ease); + transition: background-color .25s ease; &:hover { background-color: $table-striped-color; } @@ -348,7 +387,6 @@ table { &.centered { thead tr th, tbody tr td { text-align: center; - } } @@ -376,6 +414,10 @@ td, th{ display: block; position: relative; + td:empty:before { + content: '\00a0'; + } + th, td { margin: 0; @@ -447,7 +489,7 @@ td, th{ .collection-item { background-color: $collection-bg-color; - line-height: 1.5rem; + line-height: $collection-line-height; padding: 10px 20px; margin: 0; border-bottom: 1px solid $collection-border-color; @@ -458,7 +500,9 @@ td, th{ padding-left: 72px; position: relative; - .circle { + // Don't style circles inside preloader classes. + &:not(.circle-clipper) > .circle, + :not(.circle-clipper) > .circle { position: absolute; width: 42px; height: 42px; @@ -508,8 +552,8 @@ td, th{ } a.collection-item{ display: block; - @include transition(.25s); - color: $secondary-color; + transition: .25s; + color: $collection-link-color; &:not(.active) { &:hover { background-color: $collection-hover-bg-color; @@ -537,42 +581,19 @@ td, th{ float: right; color: $secondary-color; } +.collapsible .collection { + margin: 0; + border: none; +} -// Badges -span.badge { - min-width: 3rem; - padding: 0 6px; - text-align: center; - font-size: 1rem; - line-height: inherit; - color: color('grey', 'darken-1'); - position: absolute; - right: 15px; - @include box-sizing(border-box); - - &.new { - font-weight: 300; - font-size: 0.8rem; - color: #fff; - background-color: $badge-bg-color; - border-radius: 2px; - } - &.new:after { - content: " new"; - } -} // Responsive Videos .video-container { position: relative; padding-bottom: 56.25%; - padding-top: 30px; height: 0; overflow: hidden; - &.no-controls { - padding-top: 0; - } iframe, object, embed { position: absolute; @@ -595,12 +616,11 @@ span.badge { overflow: hidden; .determinate { position: absolute; - background-color: inherit; top: 0; left: 0; bottom: 0; background-color: $progress-bar-color; - @include transition(width .3s linear); + transition: width .3s linear; } .indeterminate { background-color: $progress-bar-color; @@ -613,7 +633,7 @@ span.badge { bottom: 0; will-change: left, right; // Custom bezier - @include animation(indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite); + animation: indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite; } &:after { @@ -625,34 +645,34 @@ span.badge { bottom: 0; will-change: left, right; // Custom bezier - @include animation(indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite); - @include animation-delay(1.15s); + animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite; + animation-delay: 1.15s; } } } -@include keyframes(indeterminate) { +@keyframes indeterminate { 0% { - left: -35%; - right:100%; - } + left: -35%; + right:100%; + } 60% { - left: 100%; - right: -90%; + left: 100%; + right: -90%; } 100% { - left: 100%; - right: -90%; + left: 100%; + right: -90%; } } -@include keyframes(indeterminate-short) { +@keyframes indeterminate-short { 0% { - left: -200%; - right: 100%; + left: -200%; + right: 100%; } 60% { - left: 107%; - right: -8%; + left: 107%; + right: -8%; } 100% { left: 107%; @@ -689,11 +709,6 @@ span.badge { // No Text Select .no-select { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; user-select: none; } diff --git a/sass/components/_grid.scss b/sass/components/_grid.scss index 68d727d1ee..295fe4fcef 100644 --- a/sass/components/_grid.scss +++ b/sass/components/_grid.scss @@ -19,8 +19,8 @@ } .section { - padding-top: 1rem; - padding-bottom: 1rem; + padding-top: 1rem; + padding-bottom: 1rem; &.no-pad { padding: 0; @@ -34,6 +34,25 @@ } +// Mixins to eliminate code repitition +@mixin reset-offset { + margin-left: auto; + left: auto; + right: auto; +} +@mixin grid-classes($size, $i, $perc) { + &.offset-#{$size}#{$i} { + margin-left: $perc; + } + &.pull-#{$size}#{$i} { + right: $perc; + } + &.push-#{$size}#{$i} { + left: $perc; + } +} + + .row { margin-left: auto; margin-right: auto; @@ -48,24 +67,29 @@ .col { float: left; - @include box-sizing(border-box); + box-sizing: border-box; padding: 0 $gutter-width / 2; + min-height: 1px; + + &[class*="push-"], + &[class*="pull-"] { + position: relative; + } $i: 1; @while $i <= $num-cols { $perc: unquote((100 / ($num-cols / $i)) + "%"); &.s#{$i} { width: $perc; - margin-left: 0; + @include reset-offset; } $i: $i + 1; } + $i: 1; @while $i <= $num-cols { $perc: unquote((100 / ($num-cols / $i)) + "%"); - &.offset-s#{$i} { - margin-left: $perc; - } + @include grid-classes("s", $i, $perc); $i: $i + 1; } @@ -76,19 +100,17 @@ $perc: unquote((100 / ($num-cols / $i)) + "%"); &.m#{$i} { width: $perc; - margin-left: 0; + @include reset-offset; } - $i: $i + 1; + $i: $i + 1 } + $i: 1; @while $i <= $num-cols { $perc: unquote((100 / ($num-cols / $i)) + "%"); - &.offset-m#{$i} { - margin-left: $perc; - } + @include grid-classes("m", $i, $perc); $i: $i + 1; } - } @media #{$large-and-up} { @@ -98,20 +120,37 @@ $perc: unquote((100 / ($num-cols / $i)) + "%"); &.l#{$i} { width: $perc; - margin-left: 0; + @include reset-offset; } $i: $i + 1; } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + @include grid-classes("l", $i, $perc); + $i: $i + 1; + } + } + + @media #{$extra-large-and-up} { + $i: 1; @while $i <= $num-cols { $perc: unquote((100 / ($num-cols / $i)) + "%"); - &.offset-l#{$i} { - margin-left: $perc; + &.xl#{$i} { + width: $perc; + @include reset-offset; } $i: $i + 1; } + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + @include grid-classes("xl", $i, $perc); + $i: $i + 1; + } } - } } diff --git a/sass/components/_icons-material-design.scss b/sass/components/_icons-material-design.scss old mode 100755 new mode 100644 index 3c78470d0b..d8d91c1901 --- a/sass/components/_icons-material-design.scss +++ b/sass/components/_icons-material-design.scss @@ -1,3257 +1,5 @@ -$font-mdi : 'Material-Design-Icons'; -$mdi-prefix : 'mdi-'; - -@font-face { - font-family: "#{$font-mdi}"; - src:url("#{$icons-font-path}#{$font-mdi}.eot?#iefix") format("embedded-opentype"), - url("#{$icons-font-path}#{$font-mdi}.woff2") format("woff2"), - url("#{$icons-font-path}#{$font-mdi}.woff") format("woff"), - url("#{$icons-font-path}#{$font-mdi}.ttf") format("truetype"), - url("#{$icons-font-path}#{$font-mdi}.svg##{$font-mdi}") format("svg"); - font-weight: normal; - font-style: normal; +/* This is needed for some mobile phones to display the Google Icon font properly */ +.material-icons { + text-rendering: optimizeLegibility; + font-feature-settings: 'liga'; } - -[class^="mdi-"], [class*="mdi-"] { - speak: none; - display: inline-block; - font-family: "Material-Design-Icons"; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-rendering: auto; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); - &:before { - display: inline-block; - speak: none; - text-decoration: inherit; - } - &.pull-left { - margin-right: .3em; - } - &.pull-right{ - margin-left: .3em; - } - &.mdi-lg:before, &.mdi-lg:after { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; - } - &.mdi-2x:before, &.mdi-2x:after { - font-size: 2em; - } - &.mdi-3x:before, &.mdi-3x:after { - font-size: 3em; - } - &.mdi-4x:before, &.mdi-4x:after { - font-size: 4em; - } - &.mdi-5x:before, &.mdi-5x:after { - font-size: 5em; - } -} - -[class^="mdi-device-signal-cellular-"], -[class^="mdi-device-battery-"], -[class^="mdi-device-battery-charging-"], -[class^="mdi-device-signal-cellular-connected-no-internet-"], -[class^="mdi-device-signal-wifi-"], -[class^="mdi-device-signal-wifi-statusbar-not-connected"], -.mdi-device-network-wifi{ - &:after { - opacity: .3; - position: absolute; - left: 0; - top: 0; - z-index: 1; - display: inline-block; - speak: none; - text-decoration: inherit; - } -} - -[class^="mdi-device-signal-cellular-"]:after {content:"\e758";} -[class^="mdi-device-battery-"]:after {content:"\e735";} -[class^="mdi-device-battery-charging-"]:after {content:"\e733";} -[class^="mdi-device-signal-cellular-connected-no-internet-"]:after {content:"\e75d";} -[class^="mdi-device-signal-wifi-"]:after, .mdi-device-network-wifi:after {content:"\e765";} -[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after {content:"\e8f7";} - -.mdi-device-signal-cellular-off, .mdi-device-signal-cellular-null, .mdi-device-signal-cellular-no-sim, .mdi-device-signal-wifi-off, .mdi-device-signal-wifi-4-bar, .mdi-device-signal-cellular-4-bar, .mdi-device-battery-alert, .mdi-device-signal-cellular-connected-no-internet-4-bar, .mdi-device-battery-std, .mdi-device-battery-full .mdi-device-battery-unknown { - &:after { - content: ""; - } -} - -.mdi-fw { - width: 1.28571429em; - text-align: center; -} -.mdi-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.mdi-ul > li { - position: relative; -} -.mdi-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.mdi-li.mdi-lg { - left: -1.85714286em; -} -.mdi-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} - -.mdi-spin { - -webkit-animation: mdi-spin 2s infinite linear; - animation: mdi-spin 2s infinite linear; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; -} -.mdi-pulse { - -webkit-animation: mdi-spin 1s steps(8) infinite; - animation: mdi-spin 1s steps(8) infinite ; - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - -o-transform-origin: 50% 50%; - transform-origin: 50% 50%; -} -@-webkit-keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes mdi-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.mdi-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.mdi-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.mdi-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.mdi-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.mdi-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .mdi-rotate-90, -:root .mdi-rotate-180, -:root .mdi-rotate-270, -:root .mdi-flip-horizontal, -:root .mdi-flip-vertical { - filter: none; -} -.mdi-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.mdi-stack-1x, -.mdi-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.mdi-stack-1x { - line-height: inherit; -} -.mdi-stack-2x { - font-size: 2em; -} -.mdi-inverse { - color: #ffffff; -} - - -/* Start Icons */ - - -.mdi-action-3d-rotation:before { - content: "\e600"; -} - -.mdi-action-accessibility:before { - content: "\e601"; -} - -.mdi-action-account-balance-wallet:before { - content: "\e602"; -} - -.mdi-action-account-balance:before { - content: "\e603"; -} - -.mdi-action-account-box:before { - content: "\e604"; -} - -.mdi-action-account-child:before { - content: "\e605"; -} - -.mdi-action-account-circle:before { - content: "\e606"; -} - -.mdi-action-add-shopping-cart:before { - content: "\e607"; -} - -.mdi-action-alarm-add:before { - content: "\e608"; -} - -.mdi-action-alarm-off:before { - content: "\e609"; -} - -.mdi-action-alarm-on:before { - content: "\e60a"; -} - -.mdi-action-alarm:before { - content: "\e60b"; -} - -.mdi-action-android:before { - content: "\e60c"; -} - -.mdi-action-announcement:before { - content: "\e60d"; -} - -.mdi-action-aspect-ratio:before { - content: "\e60e"; -} - -.mdi-action-assessment:before { - content: "\e60f"; -} - -.mdi-action-assignment-ind:before { - content: "\e610"; -} - -.mdi-action-assignment-late:before { - content: "\e611"; -} - -.mdi-action-assignment-return:before { - content: "\e612"; -} - -.mdi-action-assignment-returned:before { - content: "\e613"; -} - -.mdi-action-assignment-turned-in:before { - content: "\e614"; -} - -.mdi-action-assignment:before { - content: "\e615"; -} - -.mdi-action-autorenew:before { - content: "\e616"; -} - -.mdi-action-backup:before { - content: "\e617"; -} - -.mdi-action-book:before { - content: "\e618"; -} - -.mdi-action-bookmark-outline:before { - content: "\e619"; -} - -.mdi-action-bookmark:before { - content: "\e61a"; -} - -.mdi-action-bug-report:before { - content: "\e61b"; -} - -.mdi-action-cached:before { - content: "\e61c"; -} - -.mdi-action-check-circle:before { - content: "\e61d"; -} - -.mdi-action-class:before { - content: "\e61e"; -} - -.mdi-action-credit-card:before { - content: "\e61f"; -} - -.mdi-action-dashboard:before { - content: "\e620"; -} - -.mdi-action-delete:before { - content: "\e621"; -} - -.mdi-action-description:before { - content: "\e622"; -} - -.mdi-action-dns:before { - content: "\e623"; -} - -.mdi-action-done-all:before { - content: "\e624"; -} - -.mdi-action-done:before { - content: "\e625"; -} - -.mdi-action-event:before { - content: "\e626"; -} - -.mdi-action-exit-to-app:before { - content: "\e627"; -} - -.mdi-action-explore:before { - content: "\e628"; -} - -.mdi-action-extension:before { - content: "\e629"; -} - -.mdi-action-face-unlock:before { - content: "\e62a"; -} - -.mdi-action-favorite-outline:before { - content: "\e62b"; -} - -.mdi-action-favorite:before { - content: "\e62c"; -} - -.mdi-action-find-in-page:before { - content: "\e62d"; -} - -.mdi-action-find-replace:before { - content: "\e62e"; -} - -.mdi-action-flip-to-back:before { - content: "\e62f"; -} - -.mdi-action-flip-to-front:before { - content: "\e630"; -} - -.mdi-action-get-app:before { - content: "\e631"; -} - -.mdi-action-grade:before { - content: "\e632"; -} - -.mdi-action-group-work:before { - content: "\e633"; -} - -.mdi-action-help:before { - content: "\e634"; -} - -.mdi-action-highlight-remove:before { - content: "\e635"; -} - -.mdi-action-history:before { - content: "\e636"; -} - -.mdi-action-home:before { - content: "\e637"; -} - -.mdi-action-https:before { - content: "\e638"; -} - -.mdi-action-info-outline:before { - content: "\e639"; -} - -.mdi-action-info:before { - content: "\e63a"; -} - -.mdi-action-input:before { - content: "\e63b"; -} - -.mdi-action-invert-colors:before { - content: "\e63c"; -} - -.mdi-action-label-outline:before { - content: "\e63d"; -} - -.mdi-action-label:before { - content: "\e63e"; -} - -.mdi-action-language:before { - content: "\e63f"; -} - -.mdi-action-launch:before { - content: "\e640"; -} - -.mdi-action-list:before { - content: "\e641"; -} - -.mdi-action-lock-open:before { - content: "\e642"; -} - -.mdi-action-lock-outline:before { - content: "\e643"; -} - -.mdi-action-lock:before { - content: "\e644"; -} - -.mdi-action-loyalty:before { - content: "\e645"; -} - -.mdi-action-markunread-mailbox:before { - content: "\e646"; -} - -.mdi-action-note-add:before { - content: "\e647"; -} - -.mdi-action-open-in-browser:before { - content: "\e648"; -} - -.mdi-action-open-in-new:before { - content: "\e649"; -} - -.mdi-action-open-with:before { - content: "\e64a"; -} - -.mdi-action-pageview:before { - content: "\e64b"; -} - -.mdi-action-payment:before { - content: "\e64c"; -} - -.mdi-action-perm-camera-mic:before { - content: "\e64d"; -} - -.mdi-action-perm-contact-cal:before { - content: "\e64e"; -} - -.mdi-action-perm-data-setting:before { - content: "\e64f"; -} - -.mdi-action-perm-device-info:before { - content: "\e650"; -} - -.mdi-action-perm-identity:before { - content: "\e651"; -} - -.mdi-action-perm-media:before { - content: "\e652"; -} - -.mdi-action-perm-phone-msg:before { - content: "\e653"; -} - -.mdi-action-perm-scan-wifi:before { - content: "\e654"; -} - -.mdi-action-picture-in-picture:before { - content: "\e655"; -} - -.mdi-action-polymer:before { - content: "\e656"; -} - -.mdi-action-print:before { - content: "\e657"; -} - -.mdi-action-query-builder:before { - content: "\e658"; -} - -.mdi-action-question-answer:before { - content: "\e659"; -} - -.mdi-action-receipt:before { - content: "\e65a"; -} - -.mdi-action-redeem:before { - content: "\e65b"; -} - -.mdi-action-reorder:before { - content: "\e65c"; -} - -.mdi-action-report-problem:before { - content: "\e65d"; -} - -.mdi-action-restore:before { - content: "\e65e"; -} - -.mdi-action-room:before { - content: "\e65f"; -} - -.mdi-action-schedule:before { - content: "\e660"; -} - -.mdi-action-search:before { - content: "\e661"; -} - -.mdi-action-settings-applications:before { - content: "\e662"; -} - -.mdi-action-settings-backup-restore:before { - content: "\e663"; -} - -.mdi-action-settings-bluetooth:before { - content: "\e664"; -} - -.mdi-action-settings-cell:before { - content: "\e665"; -} - -.mdi-action-settings-display:before { - content: "\e666"; -} - -.mdi-action-settings-ethernet:before { - content: "\e667"; -} - -.mdi-action-settings-input-antenna:before { - content: "\e668"; -} - -.mdi-action-settings-input-component:before { - content: "\e669"; -} - -.mdi-action-settings-input-composite:before { - content: "\e66a"; -} - -.mdi-action-settings-input-hdmi:before { - content: "\e66b"; -} - -.mdi-action-settings-input-svideo:before { - content: "\e66c"; -} - -.mdi-action-settings-overscan:before { - content: "\e66d"; -} - -.mdi-action-settings-phone:before { - content: "\e66e"; -} - -.mdi-action-settings-power:before { - content: "\e66f"; -} - -.mdi-action-settings-remote:before { - content: "\e670"; -} - -.mdi-action-settings-voice:before { - content: "\e671"; -} - -.mdi-action-settings:before { - content: "\e672"; -} - -.mdi-action-shop-two:before { - content: "\e673"; -} - -.mdi-action-shop:before { - content: "\e674"; -} - -.mdi-action-shopping-basket:before { - content: "\e675"; -} - -.mdi-action-shopping-cart:before { - content: "\e676"; -} - -.mdi-action-speaker-notes:before { - content: "\e677"; -} - -.mdi-action-spellcheck:before { - content: "\e678"; -} - -.mdi-action-star-rate:before { - content: "\e679"; -} - -.mdi-action-stars:before { - content: "\e67a"; -} - -.mdi-action-store:before { - content: "\e67b"; -} - -.mdi-action-subject:before { - content: "\e67c"; -} - -.mdi-action-supervisor-account:before { - content: "\e67d"; -} - -.mdi-action-swap-horiz:before { - content: "\e67e"; -} - -.mdi-action-swap-vert-circle:before { - content: "\e67f"; -} - -.mdi-action-swap-vert:before { - content: "\e680"; -} - -.mdi-action-system-update-tv:before { - content: "\e681"; -} - -.mdi-action-tab-unselected:before { - content: "\e682"; -} - -.mdi-action-tab:before { - content: "\e683"; -} - -.mdi-action-theaters:before { - content: "\e684"; -} - -.mdi-action-thumb-down:before { - content: "\e685"; -} - -.mdi-action-thumb-up:before { - content: "\e686"; -} - -.mdi-action-thumbs-up-down:before { - content: "\e687"; -} - -.mdi-action-toc:before { - content: "\e688"; -} - -.mdi-action-today:before { - content: "\e689"; -} - -.mdi-action-track-changes:before { - content: "\e68a"; -} - -.mdi-action-translate:before { - content: "\e68b"; -} - -.mdi-action-trending-down:before { - content: "\e68c"; -} - -.mdi-action-trending-neutral:before { - content: "\e68d"; -} - -.mdi-action-trending-up:before { - content: "\e68e"; -} - -.mdi-action-turned-in-not:before { - content: "\e68f"; -} - -.mdi-action-turned-in:before { - content: "\e690"; -} - -.mdi-action-verified-user:before { - content: "\e691"; -} - -.mdi-action-view-agenda:before { - content: "\e692"; -} - -.mdi-action-view-array:before { - content: "\e693"; -} - -.mdi-action-view-carousel:before { - content: "\e694"; -} - -.mdi-action-view-column:before { - content: "\e695"; -} - -.mdi-action-view-day:before { - content: "\e696"; -} - -.mdi-action-view-headline:before { - content: "\e697"; -} - -.mdi-action-view-list:before { - content: "\e698"; -} - -.mdi-action-view-module:before { - content: "\e699"; -} - -.mdi-action-view-quilt:before { - content: "\e69a"; -} - -.mdi-action-view-stream:before { - content: "\e69b"; -} - -.mdi-action-view-week:before { - content: "\e69c"; -} - -.mdi-action-visibility-off:before { - content: "\e69d"; -} - -.mdi-action-visibility:before { - content: "\e69e"; -} - -.mdi-action-wallet-giftcard:before { - content: "\e69f"; -} - -.mdi-action-wallet-membership:before { - content: "\e6a0"; -} - -.mdi-action-wallet-travel:before { - content: "\e6a1"; -} - -.mdi-action-work:before { - content: "\e6a2"; -} - -.mdi-alert-error:before { - content: "\e6a3"; -} - -.mdi-alert-warning:before { - content: "\e6a4"; -} - -.mdi-av-album:before { - content: "\e6a5"; -} - -.mdi-av-closed-caption:before { - content: "\e6a6"; -} - -.mdi-av-equalizer:before { - content: "\e6a7"; -} - -.mdi-av-explicit:before { - content: "\e6a8"; -} - -.mdi-av-fast-forward:before { - content: "\e6a9"; -} - -.mdi-av-fast-rewind:before { - content: "\e6aa"; -} - -.mdi-av-games:before { - content: "\e6ab"; -} - -.mdi-av-hearing:before { - content: "\e6ac"; -} - -.mdi-av-high-quality:before { - content: "\e6ad"; -} - -.mdi-av-loop:before { - content: "\e6ae"; -} - -.mdi-av-mic-none:before { - content: "\e6af"; -} - -.mdi-av-mic-off:before { - content: "\e6b0"; -} - -.mdi-av-mic:before { - content: "\e6b1"; -} - -.mdi-av-movie:before { - content: "\e6b2"; -} - -.mdi-av-my-library-add:before { - content: "\e6b3"; -} - -.mdi-av-my-library-books:before { - content: "\e6b4"; -} - -.mdi-av-my-library-music:before { - content: "\e6b5"; -} - -.mdi-av-new-releases:before { - content: "\e6b6"; -} - -.mdi-av-not-interested:before { - content: "\e6b7"; -} - -.mdi-av-pause-circle-fill:before { - content: "\e6b8"; -} - -.mdi-av-pause-circle-outline:before { - content: "\e6b9"; -} - -.mdi-av-pause:before { - content: "\e6ba"; -} - -.mdi-av-play-arrow:before { - content: "\e6bb"; -} - -.mdi-av-play-circle-fill:before { - content: "\e6bc"; -} - -.mdi-av-play-circle-outline:before { - content: "\e6bd"; -} - -.mdi-av-play-shopping-bag:before { - content: "\e6be"; -} - -.mdi-av-playlist-add:before { - content: "\e6bf"; -} - -.mdi-av-queue-music:before { - content: "\e6c0"; -} - -.mdi-av-queue:before { - content: "\e6c1"; -} - -.mdi-av-radio:before { - content: "\e6c2"; -} - -.mdi-av-recent-actors:before { - content: "\e6c3"; -} - -.mdi-av-repeat-one:before { - content: "\e6c4"; -} - -.mdi-av-repeat:before { - content: "\e6c5"; -} - -.mdi-av-replay:before { - content: "\e6c6"; -} - -.mdi-av-shuffle:before { - content: "\e6c7"; -} - -.mdi-av-skip-next:before { - content: "\e6c8"; -} - -.mdi-av-skip-previous:before { - content: "\e6c9"; -} - -.mdi-av-snooze:before { - content: "\e6ca"; -} - -.mdi-av-stop:before { - content: "\e6cb"; -} - -.mdi-av-subtitles:before { - content: "\e6cc"; -} - -.mdi-av-surround-sound:before { - content: "\e6cd"; -} - -.mdi-av-timer:before { - content: "\e6ce"; -} - -.mdi-av-video-collection:before { - content: "\e6cf"; -} - -.mdi-av-videocam-off:before { - content: "\e6d0"; -} - -.mdi-av-videocam:before { - content: "\e6d1"; -} - -.mdi-av-volume-down:before { - content: "\e6d2"; -} - -.mdi-av-volume-mute:before { - content: "\e6d3"; -} - -.mdi-av-volume-off:before { - content: "\e6d4"; -} - -.mdi-av-volume-up:before { - content: "\e6d5"; -} - -.mdi-av-web:before { - content: "\e6d6"; -} - -.mdi-communication-business:before { - content: "\e6d7"; -} - -.mdi-communication-call-end:before { - content: "\e6d8"; -} - -.mdi-communication-call-made:before { - content: "\e6d9"; -} - -.mdi-communication-call-merge:before { - content: "\e6da"; -} - -.mdi-communication-call-missed:before { - content: "\e6db"; -} - -.mdi-communication-call-received:before { - content: "\e6dc"; -} - -.mdi-communication-call-split:before { - content: "\e6dd"; -} - -.mdi-communication-call:before { - content: "\e6de"; -} - -.mdi-communication-chat:before { - content: "\e6df"; -} - -.mdi-communication-clear-all:before { - content: "\e6e0"; -} - -.mdi-communication-comment:before { - content: "\e6e1"; -} - -.mdi-communication-contacts:before { - content: "\e6e2"; -} - -.mdi-communication-dialer-sip:before { - content: "\e6e3"; -} - -.mdi-communication-dialpad:before { - content: "\e6e4"; -} - -.mdi-communication-dnd-on:before { - content: "\e6e5"; -} - -.mdi-communication-email:before { - content: "\e6e6"; -} - -.mdi-communication-forum:before { - content: "\e6e7"; -} - -.mdi-communication-import-export:before { - content: "\e6e8"; -} - -.mdi-communication-invert-colors-off:before { - content: "\e6e9"; -} - -.mdi-communication-invert-colors-on:before { - content: "\e6ea"; -} - -.mdi-communication-live-help:before { - content: "\e6eb"; -} - -.mdi-communication-location-off:before { - content: "\e6ec"; -} - -.mdi-communication-location-on:before { - content: "\e6ed"; -} - -.mdi-communication-message:before { - content: "\e6ee"; -} - -.mdi-communication-messenger:before { - content: "\e6ef"; -} - -.mdi-communication-no-sim:before { - content: "\e6f0"; -} - -.mdi-communication-phone:before { - content: "\e6f1"; -} - -.mdi-communication-portable-wifi-off:before { - content: "\e6f2"; -} - -.mdi-communication-quick-contacts-dialer:before { - content: "\e6f3"; -} - -.mdi-communication-quick-contacts-mail:before { - content: "\e6f4"; -} - -.mdi-communication-ring-volume:before { - content: "\e6f5"; -} - -.mdi-communication-stay-current-landscape:before { - content: "\e6f6"; -} - -.mdi-communication-stay-current-portrait:before { - content: "\e6f7"; -} - -.mdi-communication-stay-primary-landscape:before { - content: "\e6f8"; -} - -.mdi-communication-stay-primary-portrait:before { - content: "\e6f9"; -} - -.mdi-communication-swap-calls:before { - content: "\e6fa"; -} - -.mdi-communication-textsms:before { - content: "\e6fb"; -} - -.mdi-communication-voicemail:before { - content: "\e6fc"; -} - -.mdi-communication-vpn-key:before { - content: "\e6fd"; -} - -.mdi-content-add-box:before { - content: "\e6fe"; -} - -.mdi-content-add-circle-outline:before { - content: "\e6ff"; -} - -.mdi-content-add-circle:before { - content: "\e700"; -} - -.mdi-content-add:before { - content: "\e701"; -} - -.mdi-content-archive:before { - content: "\e702"; -} - -.mdi-content-backspace:before { - content: "\e703"; -} - -.mdi-content-block:before { - content: "\e704"; -} - -.mdi-content-clear:before { - content: "\e705"; -} - -.mdi-content-content-copy:before { - content: "\e706"; -} - -.mdi-content-content-cut:before { - content: "\e707"; -} - -.mdi-content-content-paste:before { - content: "\e708"; -} - -.mdi-content-create:before { - content: "\e709"; -} - -.mdi-content-drafts:before { - content: "\e70a"; -} - -.mdi-content-filter-list:before { - content: "\e70b"; -} - -.mdi-content-flag:before { - content: "\e70c"; -} - -.mdi-content-forward:before { - content: "\e70d"; -} - -.mdi-content-gesture:before { - content: "\e70e"; -} - -.mdi-content-inbox:before { - content: "\e70f"; -} - -.mdi-content-link:before { - content: "\e710"; -} - -.mdi-content-mail:before { - content: "\e711"; -} - -.mdi-content-markunread:before { - content: "\e712"; -} - -.mdi-content-redo:before { - content: "\e713"; -} - -.mdi-content-remove-circle-outline:before { - content: "\e714"; -} - -.mdi-content-remove-circle:before { - content: "\e715"; -} - -.mdi-content-remove:before { - content: "\e716"; -} - -.mdi-content-reply-all:before { - content: "\e717"; -} - -.mdi-content-reply:before { - content: "\e718"; -} - -.mdi-content-report:before { - content: "\e719"; -} - -.mdi-content-save:before { - content: "\e71a"; -} - -.mdi-content-select-all:before { - content: "\e71b"; -} - -.mdi-content-send:before { - content: "\e71c"; -} - -.mdi-content-sort:before { - content: "\e71d"; -} - -.mdi-content-text-format:before { - content: "\e71e"; -} - -.mdi-content-undo:before { - content: "\e71f"; -} - -.mdi-editor-attach-file:before { - content: "\e776"; -} - -.mdi-editor-attach-money:before { - content: "\e777"; -} - -.mdi-editor-border-all:before { - content: "\e778"; -} - -.mdi-editor-border-bottom:before { - content: "\e779"; -} - -.mdi-editor-border-clear:before { - content: "\e77a"; -} - -.mdi-editor-border-color:before { - content: "\e77b"; -} - -.mdi-editor-border-horizontal:before { - content: "\e77c"; -} - -.mdi-editor-border-inner:before { - content: "\e77d"; -} - -.mdi-editor-border-left:before { - content: "\e77e"; -} - -.mdi-editor-border-outer:before { - content: "\e77f"; -} - -.mdi-editor-border-right:before { - content: "\e780"; -} - -.mdi-editor-border-style:before { - content: "\e781"; -} - -.mdi-editor-border-top:before { - content: "\e782"; -} - -.mdi-editor-border-vertical:before { - content: "\e783"; -} - -.mdi-editor-format-align-center:before { - content: "\e784"; -} - -.mdi-editor-format-align-justify:before { - content: "\e785"; -} - -.mdi-editor-format-align-left:before { - content: "\e786"; -} - -.mdi-editor-format-align-right:before { - content: "\e787"; -} - -.mdi-editor-format-bold:before { - content: "\e788"; -} - -.mdi-editor-format-clear:before { - content: "\e789"; -} - -.mdi-editor-format-color-fill:before { - content: "\e78a"; -} - -.mdi-editor-format-color-reset:before { - content: "\e78b"; -} - -.mdi-editor-format-color-text:before { - content: "\e78c"; -} - -.mdi-editor-format-indent-decrease:before { - content: "\e78d"; -} - -.mdi-editor-format-indent-increase:before { - content: "\e78e"; -} - -.mdi-editor-format-italic:before { - content: "\e78f"; -} - -.mdi-editor-format-line-spacing:before { - content: "\e790"; -} - -.mdi-editor-format-list-bulleted:before { - content: "\e791"; -} - -.mdi-editor-format-list-numbered:before { - content: "\e792"; -} - -.mdi-editor-format-paint:before { - content: "\e793"; -} - -.mdi-editor-format-quote:before { - content: "\e794"; -} - -.mdi-editor-format-size:before { - content: "\e795"; -} - -.mdi-editor-format-strikethrough:before { - content: "\e796"; -} - -.mdi-editor-format-textdirection-l-to-r:before { - content: "\e797"; -} - -.mdi-editor-format-textdirection-r-to-l:before { - content: "\e798"; -} - -.mdi-editor-format-underline:before { - content: "\e799"; -} - -.mdi-editor-functions:before { - content: "\e79a"; -} - -.mdi-editor-insert-chart:before { - content: "\e79b"; -} - -.mdi-editor-insert-comment:before { - content: "\e79c"; -} - -.mdi-editor-insert-drive-file:before { - content: "\e79d"; -} - -.mdi-editor-insert-emoticon:before { - content: "\e79e"; -} - -.mdi-editor-insert-invitation:before { - content: "\e79f"; -} - -.mdi-editor-insert-link:before { - content: "\e7a0"; -} - -.mdi-editor-insert-photo:before { - content: "\e7a1"; -} - -.mdi-editor-merge-type:before { - content: "\e7a2"; -} - -.mdi-editor-mode-comment:before { - content: "\e7a3"; -} - -.mdi-editor-mode-edit:before { - content: "\e7a4"; -} - -.mdi-editor-publish:before { - content: "\e7a5"; -} - -.mdi-editor-vertical-align-bottom:before { - content: "\e7a6"; -} - -.mdi-editor-vertical-align-center:before { - content: "\e7a7"; -} - -.mdi-editor-vertical-align-top:before { - content: "\e7a8"; -} - -.mdi-editor-wrap-text:before { - content: "\e7a9"; -} - -.mdi-file-attachment:before { - content: "\e7aa"; -} - -.mdi-file-cloud-circle:before { - content: "\e7ab"; -} - -.mdi-file-cloud-done:before { - content: "\e7ac"; -} - -.mdi-file-cloud-download:before { - content: "\e7ad"; -} - -.mdi-file-cloud-off:before { - content: "\e7ae"; -} - -.mdi-file-cloud-queue:before { - content: "\e7af"; -} - -.mdi-file-cloud-upload:before { - content: "\e7b0"; -} - -.mdi-file-cloud:before { - content: "\e7b1"; -} - -.mdi-file-file-download:before { - content: "\e7b2"; -} - -.mdi-file-file-upload:before { - content: "\e7b3"; -} - -.mdi-file-folder-open:before { - content: "\e7b4"; -} - -.mdi-file-folder-shared:before { - content: "\e7b5"; -} - -.mdi-file-folder:before { - content: "\e7b6"; -} - -.mdi-device-access-alarm:before { - content: "\e720"; -} - -.mdi-device-access-alarms:before { - content: "\e721"; -} - -.mdi-device-access-time:before { - content: "\e722"; -} - -.mdi-device-add-alarm:before { - content: "\e723"; -} - -.mdi-device-airplanemode-off:before { - content: "\e724"; -} - -.mdi-device-airplanemode-on:before { - content: "\e725"; -} - -.mdi-device-battery-20:before { - content: "\e726"; -} - -.mdi-device-battery-30:before { - content: "\e727"; -} - -.mdi-device-battery-50:before { - content: "\e728"; -} - -.mdi-device-battery-60:before { - content: "\e729"; -} - -.mdi-device-battery-80:before { - content: "\e72a"; -} - -.mdi-device-battery-90:before { - content: "\e72b"; -} - -.mdi-device-battery-alert:before { - content: "\e72c"; -} - -.mdi-device-battery-charging-20:before { - content: "\e72d"; -} - -.mdi-device-battery-charging-30:before { - content: "\e72e"; -} - -.mdi-device-battery-charging-50:before { - content: "\e72f"; -} - -.mdi-device-battery-charging-60:before { - content: "\e730"; -} - -.mdi-device-battery-charging-80:before { - content: "\e731"; -} - -.mdi-device-battery-charging-90:before { - content: "\e732"; -} - -.mdi-device-battery-charging-full:before { - content: "\e733"; -} - -.mdi-device-battery-full:before { - content: "\e734"; -} - -.mdi-device-battery-std:before { - content: "\e735"; -} - -.mdi-device-battery-unknown:before { - content: "\e736"; -} - -.mdi-device-bluetooth-connected:before { - content: "\e737"; -} - -.mdi-device-bluetooth-disabled:before { - content: "\e738"; -} - -.mdi-device-bluetooth-searching:before { - content: "\e739"; -} - -.mdi-device-bluetooth:before { - content: "\e73a"; -} - -.mdi-device-brightness-auto:before { - content: "\e73b"; -} - -.mdi-device-brightness-high:before { - content: "\e73c"; -} - -.mdi-device-brightness-low:before { - content: "\e73d"; -} - -.mdi-device-brightness-medium:before { - content: "\e73e"; -} - -.mdi-device-data-usage:before { - content: "\e73f"; -} - -.mdi-device-developer-mode:before { - content: "\e740"; -} - -.mdi-device-devices:before { - content: "\e741"; -} - -.mdi-device-dvr:before { - content: "\e742"; -} - -.mdi-device-gps-fixed:before { - content: "\e743"; -} - -.mdi-device-gps-not-fixed:before { - content: "\e744"; -} - -.mdi-device-gps-off:before { - content: "\e745"; -} - -.mdi-device-location-disabled:before { - content: "\e746"; -} - -.mdi-device-location-searching:before { - content: "\e747"; -} - -.mdi-device-multitrack-audio:before { - content: "\e748"; -} - -.mdi-device-network-cell:before { - content: "\e749"; -} - -.mdi-device-network-wifi:before { - content: "\e74a"; -} - -.mdi-device-nfc:before { - content: "\e74b"; -} - -.mdi-device-now-wallpaper:before { - content: "\e74c"; -} - -.mdi-device-now-widgets:before { - content: "\e74d"; -} - -.mdi-device-screen-lock-landscape:before { - content: "\e74e"; -} - -.mdi-device-screen-lock-portrait:before { - content: "\e74f"; -} - -.mdi-device-screen-lock-rotation:before { - content: "\e750"; -} - -.mdi-device-screen-rotation:before { - content: "\e751"; -} - -.mdi-device-sd-storage:before { - content: "\e752"; -} - -.mdi-device-settings-system-daydream:before { - content: "\e753"; -} - -.mdi-device-signal-cellular-0-bar:before { - content: "\e754"; -} - -.mdi-device-signal-cellular-1-bar:before { - content: "\e755"; -} - -.mdi-device-signal-cellular-2-bar:before { - content: "\e756"; -} - -.mdi-device-signal-cellular-3-bar:before { - content: "\e757"; -} - -.mdi-device-signal-cellular-4-bar:before { - content: "\e758"; -} - -.mdi-signal-wifi-statusbar-connected-no-internet-after:before { - content: "\e8f6"; -} - -.mdi-device-signal-cellular-connected-no-internet-0-bar:before { - content: "\e759"; -} - -.mdi-device-signal-cellular-connected-no-internet-1-bar:before { - content: "\e75a"; -} - -.mdi-device-signal-cellular-connected-no-internet-2-bar:before { - content: "\e75b"; -} - -.mdi-device-signal-cellular-connected-no-internet-3-bar:before { - content: "\e75c"; -} - -.mdi-device-signal-cellular-connected-no-internet-4-bar:before { - content: "\e75d"; -} - -.mdi-device-signal-cellular-no-sim:before { - content: "\e75e"; -} - -.mdi-device-signal-cellular-null:before { - content: "\e75f"; -} - -.mdi-device-signal-cellular-off:before { - content: "\e760"; -} - -.mdi-device-signal-wifi-0-bar:before { - content: "\e761"; -} - -.mdi-device-signal-wifi-1-bar:before { - content: "\e762"; -} - -.mdi-device-signal-wifi-2-bar:before { - content: "\e763"; -} - -.mdi-device-signal-wifi-3-bar:before { - content: "\e764"; -} - -.mdi-device-signal-wifi-4-bar:before { - content: "\e765"; -} - -.mdi-device-signal-wifi-off:before { - content: "\e766"; -} - -.mdi-device-signal-wifi-statusbar-1-bar:before { - content: "\e767"; -} - -.mdi-device-signal-wifi-statusbar-2-bar:before { - content: "\e768"; -} - -.mdi-device-signal-wifi-statusbar-3-bar:before { - content: "\e769"; -} - -.mdi-device-signal-wifi-statusbar-4-bar:before { - content: "\e76a"; -} - -.mdi-device-signal-wifi-statusbar-connected-no-internet-:before { - content: "\e76b"; -} - -.mdi-device-signal-wifi-statusbar-connected-no-internet:before { - content: "\e76f"; -} - -.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before { - content: "\e76c"; -} - -.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before { - content: "\e76d"; -} - -.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before { - content: "\e76e"; -} - -.mdi-signal-wifi-statusbar-not-connected-after:before { - content: "\e8f7"; -} - -.mdi-device-signal-wifi-statusbar-not-connected:before { - content: "\e770"; -} - -.mdi-device-signal-wifi-statusbar-null:before { - content: "\e771"; -} - -.mdi-device-storage:before { - content: "\e772"; -} - -.mdi-device-usb:before { - content: "\e773"; -} - -.mdi-device-wifi-lock:before { - content: "\e774"; -} - -.mdi-device-wifi-tethering:before { - content: "\e775"; -} - -.mdi-hardware-cast-connected:before { - content: "\e7b7"; -} - -.mdi-hardware-cast:before { - content: "\e7b8"; -} - -.mdi-hardware-computer:before { - content: "\e7b9"; -} - -.mdi-hardware-desktop-mac:before { - content: "\e7ba"; -} - -.mdi-hardware-desktop-windows:before { - content: "\e7bb"; -} - -.mdi-hardware-dock:before { - content: "\e7bc"; -} - -.mdi-hardware-gamepad:before { - content: "\e7bd"; -} - -.mdi-hardware-headset-mic:before { - content: "\e7be"; -} - -.mdi-hardware-headset:before { - content: "\e7bf"; -} - -.mdi-hardware-keyboard-alt:before { - content: "\e7c0"; -} - -.mdi-hardware-keyboard-arrow-down:before { - content: "\e7c1"; -} - -.mdi-hardware-keyboard-arrow-left:before { - content: "\e7c2"; -} - -.mdi-hardware-keyboard-arrow-right:before { - content: "\e7c3"; -} - -.mdi-hardware-keyboard-arrow-up:before { - content: "\e7c4"; -} - -.mdi-hardware-keyboard-backspace:before { - content: "\e7c5"; -} - -.mdi-hardware-keyboard-capslock:before { - content: "\e7c6"; -} - -.mdi-hardware-keyboard-control:before { - content: "\e7c7"; -} - -.mdi-hardware-keyboard-hide:before { - content: "\e7c8"; -} - -.mdi-hardware-keyboard-return:before { - content: "\e7c9"; -} - -.mdi-hardware-keyboard-tab:before { - content: "\e7ca"; -} - -.mdi-hardware-keyboard-voice:before { - content: "\e7cb"; -} - -.mdi-hardware-keyboard:before { - content: "\e7cc"; -} - -.mdi-hardware-laptop-chromebook:before { - content: "\e7cd"; -} - -.mdi-hardware-laptop-mac:before { - content: "\e7ce"; -} - -.mdi-hardware-laptop-windows:before { - content: "\e7cf"; -} - -.mdi-hardware-laptop:before { - content: "\e7d0"; -} - -.mdi-hardware-memory:before { - content: "\e7d1"; -} - -.mdi-hardware-mouse:before { - content: "\e7d2"; -} - -.mdi-hardware-phone-android:before { - content: "\e7d3"; -} - -.mdi-hardware-phone-iphone:before { - content: "\e7d4"; -} - -.mdi-hardware-phonelink-off:before { - content: "\e7d5"; -} - -.mdi-hardware-phonelink:before { - content: "\e7d6"; -} - -.mdi-hardware-security:before { - content: "\e7d7"; -} - -.mdi-hardware-sim-card:before { - content: "\e7d8"; -} - -.mdi-hardware-smartphone:before { - content: "\e7d9"; -} - -.mdi-hardware-speaker:before { - content: "\e7da"; -} - -.mdi-hardware-tablet-android:before { - content: "\e7db"; -} - -.mdi-hardware-tablet-mac:before { - content: "\e7dc"; -} - -.mdi-hardware-tablet:before { - content: "\e7dd"; -} - -.mdi-hardware-tv:before { - content: "\e7de"; -} - -.mdi-hardware-watch:before { - content: "\e7df"; -} - -.mdi-image-add-to-photos:before { - content: "\e7e0"; -} - -.mdi-image-adjust:before { - content: "\e7e1"; -} - -.mdi-image-assistant-photo:before { - content: "\e7e2"; -} - -.mdi-image-audiotrack:before { - content: "\e7e3"; -} - -.mdi-image-blur-circular:before { - content: "\e7e4"; -} - -.mdi-image-blur-linear:before { - content: "\e7e5"; -} - -.mdi-image-blur-off:before { - content: "\e7e6"; -} - -.mdi-image-blur-on:before { - content: "\e7e7"; -} - -.mdi-image-brightness-1:before { - content: "\e7e8"; -} - -.mdi-image-brightness-2:before { - content: "\e7e9"; -} - -.mdi-image-brightness-3:before { - content: "\e7ea"; -} - -.mdi-image-brightness-4:before { - content: "\e7eb"; -} - -.mdi-image-brightness-5:before { - content: "\e7ec"; -} - -.mdi-image-brightness-6:before { - content: "\e7ed"; -} - -.mdi-image-brightness-7:before { - content: "\e7ee"; -} - -.mdi-image-brush:before { - content: "\e7ef"; -} - -.mdi-image-camera-alt:before { - content: "\e7f0"; -} - -.mdi-image-camera-front:before { - content: "\e7f1"; -} - -.mdi-image-camera-rear:before { - content: "\e7f2"; -} - -.mdi-image-camera-roll:before { - content: "\e7f3"; -} - -.mdi-image-camera:before { - content: "\e7f4"; -} - -.mdi-image-center-focus-strong:before { - content: "\e7f5"; -} - -.mdi-image-center-focus-weak:before { - content: "\e7f6"; -} - -.mdi-image-collections:before { - content: "\e7f7"; -} - -.mdi-image-color-lens:before { - content: "\e7f8"; -} - -.mdi-image-colorize:before { - content: "\e7f9"; -} - -.mdi-image-compare:before { - content: "\e7fa"; -} - -.mdi-image-control-point-duplicate:before { - content: "\e7fb"; -} - -.mdi-image-control-point:before { - content: "\e7fc"; -} - -.mdi-image-crop-3-2:before { - content: "\e7fd"; -} - -.mdi-image-crop-5-4:before { - content: "\e7fe"; -} - -.mdi-image-crop-7-5:before { - content: "\e7ff"; -} - -.mdi-image-crop-16-9:before { - content: "\e800"; -} - -.mdi-image-crop-din:before { - content: "\e801"; -} - -.mdi-image-crop-free:before { - content: "\e802"; -} - -.mdi-image-crop-landscape:before { - content: "\e803"; -} - -.mdi-image-crop-original:before { - content: "\e804"; -} - -.mdi-image-crop-portrait:before { - content: "\e805"; -} - -.mdi-image-crop-square:before { - content: "\e806"; -} - -.mdi-image-crop:before { - content: "\e807"; -} - -.mdi-image-dehaze:before { - content: "\e808"; -} - -.mdi-image-details:before { - content: "\e809"; -} - -.mdi-image-edit:before { - content: "\e80a"; -} - -.mdi-image-exposure-minus-1:before { - content: "\e80b"; -} - -.mdi-image-exposure-minus-2:before { - content: "\e80c"; -} - -.mdi-image-exposure-plus-1:before { - content: "\e80d"; -} - -.mdi-image-exposure-plus-2:before { - content: "\e80e"; -} - -.mdi-image-exposure-zero:before { - content: "\e80f"; -} - -.mdi-image-exposure:before { - content: "\e810"; -} - -.mdi-image-filter-1:before { - content: "\e811"; -} - -.mdi-image-filter-2:before { - content: "\e812"; -} - -.mdi-image-filter-3:before { - content: "\e813"; -} - -.mdi-image-filter-4:before { - content: "\e814"; -} - -.mdi-image-filter-5:before { - content: "\e815"; -} - -.mdi-image-filter-6:before { - content: "\e816"; -} - -.mdi-image-filter-7:before { - content: "\e817"; -} - -.mdi-image-filter-8:before { - content: "\e818"; -} - -.mdi-image-filter-9-plus:before { - content: "\e819"; -} - -.mdi-image-filter-9:before { - content: "\e81a"; -} - -.mdi-image-filter-b-and-w:before { - content: "\e81b"; -} - -.mdi-image-filter-center-focus:before { - content: "\e81c"; -} - -.mdi-image-filter-drama:before { - content: "\e81d"; -} - -.mdi-image-filter-frames:before { - content: "\e81e"; -} - -.mdi-image-filter-hdr:before { - content: "\e81f"; -} - -.mdi-image-filter-none:before { - content: "\e820"; -} - -.mdi-image-filter-tilt-shift:before { - content: "\e821"; -} - -.mdi-image-filter-vintage:before { - content: "\e822"; -} - -.mdi-image-filter:before { - content: "\e823"; -} - -.mdi-image-flare:before { - content: "\e824"; -} - -.mdi-image-flash-auto:before { - content: "\e825"; -} - -.mdi-image-flash-off:before { - content: "\e826"; -} - -.mdi-image-flash-on:before { - content: "\e827"; -} - -.mdi-image-flip:before { - content: "\e828"; -} - -.mdi-image-gradient:before { - content: "\e829"; -} - -.mdi-image-grain:before { - content: "\e82a"; -} - -.mdi-image-grid-off:before { - content: "\e82b"; -} - -.mdi-image-grid-on:before { - content: "\e82c"; -} - -.mdi-image-hdr-off:before { - content: "\e82d"; -} - -.mdi-image-hdr-on:before { - content: "\e82e"; -} - -.mdi-image-hdr-strong:before { - content: "\e82f"; -} - -.mdi-image-hdr-weak:before { - content: "\e830"; -} - -.mdi-image-healing:before { - content: "\e831"; -} - -.mdi-image-image-aspect-ratio:before { - content: "\e832"; -} - -.mdi-image-image:before { - content: "\e833"; -} - -.mdi-image-iso:before { - content: "\e834"; -} - -.mdi-image-landscape:before { - content: "\e835"; -} - -.mdi-image-leak-add:before { - content: "\e836"; -} - -.mdi-image-leak-remove:before { - content: "\e837"; -} - -.mdi-image-lens:before { - content: "\e838"; -} - -.mdi-image-looks-3:before { - content: "\e839"; -} - -.mdi-image-looks-4:before { - content: "\e83a"; -} - -.mdi-image-looks-5:before { - content: "\e83b"; -} - -.mdi-image-looks-6:before { - content: "\e83c"; -} - -.mdi-image-looks-one:before { - content: "\e83d"; -} - -.mdi-image-looks-two:before { - content: "\e83e"; -} - -.mdi-image-looks:before { - content: "\e83f"; -} - -.mdi-image-loupe:before { - content: "\e840"; -} - -.mdi-image-movie-creation:before { - content: "\e841"; -} - -.mdi-image-nature-people:before { - content: "\e842"; -} - -.mdi-image-nature:before { - content: "\e843"; -} - -.mdi-image-navigate-before:before { - content: "\e844"; -} - -.mdi-image-navigate-next:before { - content: "\e845"; -} - -.mdi-image-palette:before { - content: "\e846"; -} - -.mdi-image-panorama-fisheye:before { - content: "\e847"; -} - -.mdi-image-panorama-horizontal:before { - content: "\e848"; -} - -.mdi-image-panorama-vertical:before { - content: "\e849"; -} - -.mdi-image-panorama-wide-angle:before { - content: "\e84a"; -} - -.mdi-image-panorama:before { - content: "\e84b"; -} - -.mdi-image-photo-album:before { - content: "\e84c"; -} - -.mdi-image-photo-camera:before { - content: "\e84d"; -} - -.mdi-image-photo-library:before { - content: "\e84e"; -} - -.mdi-image-photo:before { - content: "\e84f"; -} - -.mdi-image-portrait:before { - content: "\e850"; -} - -.mdi-image-remove-red-eye:before { - content: "\e851"; -} - -.mdi-image-rotate-left:before { - content: "\e852"; -} - -.mdi-image-rotate-right:before { - content: "\e853"; -} - -.mdi-image-slideshow:before { - content: "\e854"; -} - -.mdi-image-straighten:before { - content: "\e855"; -} - -.mdi-image-style:before { - content: "\e856"; -} - -.mdi-image-switch-camera:before { - content: "\e857"; -} - -.mdi-image-switch-video:before { - content: "\e858"; -} - -.mdi-image-tag-faces:before { - content: "\e859"; -} - -.mdi-image-texture:before { - content: "\e85a"; -} - -.mdi-image-timelapse:before { - content: "\e85b"; -} - -.mdi-image-timer-3:before { - content: "\e85c"; -} - -.mdi-image-timer-10:before { - content: "\e85d"; -} - -.mdi-image-timer-auto:before { - content: "\e85e"; -} - -.mdi-image-timer-off:before { - content: "\e85f"; -} - -.mdi-image-timer:before { - content: "\e860"; -} - -.mdi-image-tonality:before { - content: "\e861"; -} - -.mdi-image-transform:before { - content: "\e862"; -} - -.mdi-image-tune:before { - content: "\e863"; -} - -.mdi-image-wb-auto:before { - content: "\e864"; -} - -.mdi-image-wb-cloudy:before { - content: "\e865"; -} - -.mdi-image-wb-incandescent:before { - content: "\e866"; -} - -.mdi-image-wb-irradescent:before { - content: "\e867"; -} - -.mdi-image-wb-sunny:before { - content: "\e868"; -} - -.mdi-maps-beenhere:before { - content: "\e869"; -} - -.mdi-maps-directions-bike:before { - content: "\e86a"; -} - -.mdi-maps-directions-bus:before { - content: "\e86b"; -} - -.mdi-maps-directions-car:before { - content: "\e86c"; -} - -.mdi-maps-directions-ferry:before { - content: "\e86d"; -} - -.mdi-maps-directions-subway:before { - content: "\e86e"; -} - -.mdi-maps-directions-train:before { - content: "\e86f"; -} - -.mdi-maps-directions-transit:before { - content: "\e870"; -} - -.mdi-maps-directions-walk:before { - content: "\e871"; -} - -.mdi-maps-directions:before { - content: "\e872"; -} - -.mdi-maps-flight:before { - content: "\e873"; -} - -.mdi-maps-hotel:before { - content: "\e874"; -} - -.mdi-maps-layers-clear:before { - content: "\e875"; -} - -.mdi-maps-layers:before { - content: "\e876"; -} - -.mdi-maps-local-airport:before { - content: "\e877"; -} - -.mdi-maps-local-atm:before { - content: "\e878"; -} - -.mdi-maps-local-attraction:before { - content: "\e879"; -} - -.mdi-maps-local-bar:before { - content: "\e87a"; -} - -.mdi-maps-local-cafe:before { - content: "\e87b"; -} - -.mdi-maps-local-car-wash:before { - content: "\e87c"; -} - -.mdi-maps-local-convenience-store:before { - content: "\e87d"; -} - -.mdi-maps-local-drink:before { - content: "\e87e"; -} - -.mdi-maps-local-florist:before { - content: "\e87f"; -} - -.mdi-maps-local-gas-station:before { - content: "\e880"; -} - -.mdi-maps-local-grocery-store:before { - content: "\e881"; -} - -.mdi-maps-local-hospital:before { - content: "\e882"; -} - -.mdi-maps-local-hotel:before { - content: "\e883"; -} - -.mdi-maps-local-laundry-service:before { - content: "\e884"; -} - -.mdi-maps-local-library:before { - content: "\e885"; -} - -.mdi-maps-local-mall:before { - content: "\e886"; -} - -.mdi-maps-local-movies:before { - content: "\e887"; -} - -.mdi-maps-local-offer:before { - content: "\e888"; -} - -.mdi-maps-local-parking:before { - content: "\e889"; -} - -.mdi-maps-local-pharmacy:before { - content: "\e88a"; -} - -.mdi-maps-local-phone:before { - content: "\e88b"; -} - -.mdi-maps-local-pizza:before { - content: "\e88c"; -} - -.mdi-maps-local-play:before { - content: "\e88d"; -} - -.mdi-maps-local-post-office:before { - content: "\e88e"; -} - -.mdi-maps-local-print-shop:before { - content: "\e88f"; -} - -.mdi-maps-local-restaurant:before { - content: "\e890"; -} - -.mdi-maps-local-see:before { - content: "\e891"; -} - -.mdi-maps-local-shipping:before { - content: "\e892"; -} - -.mdi-maps-local-taxi:before { - content: "\e893"; -} - -.mdi-maps-location-history:before { - content: "\e894"; -} - -.mdi-maps-map:before { - content: "\e895"; -} - -.mdi-maps-my-location:before { - content: "\e896"; -} - -.mdi-maps-navigation:before { - content: "\e897"; -} - -.mdi-maps-pin-drop:before { - content: "\e898"; -} - -.mdi-maps-place:before { - content: "\e899"; -} - -.mdi-maps-rate-review:before { - content: "\e89a"; -} - -.mdi-maps-restaurant-menu:before { - content: "\e89b"; -} - -.mdi-maps-satellite:before { - content: "\e89c"; -} - -.mdi-maps-store-mall-directory:before { - content: "\e89d"; -} - -.mdi-maps-terrain:before { - content: "\e89e"; -} - -.mdi-maps-traffic:before { - content: "\e89f"; -} - -.mdi-navigation-apps:before { - content: "\e8a0"; -} - -.mdi-navigation-arrow-back:before { - content: "\e8a1"; -} - -.mdi-navigation-arrow-drop-down-circle:before { - content: "\e8a2"; -} - -.mdi-navigation-arrow-drop-down:before { - content: "\e8a3"; -} - -.mdi-navigation-arrow-drop-up:before { - content: "\e8a4"; -} - -.mdi-navigation-arrow-forward:before { - content: "\e8a5"; -} - -.mdi-navigation-cancel:before { - content: "\e8a6"; -} - -.mdi-navigation-check:before { - content: "\e8a7"; -} - -.mdi-navigation-chevron-left:before { - content: "\e8a8"; -} - -.mdi-navigation-chevron-right:before { - content: "\e8a9"; -} - -.mdi-navigation-close:before { - content: "\e8aa"; -} - -.mdi-navigation-expand-less:before { - content: "\e8ab"; -} - -.mdi-navigation-expand-more:before { - content: "\e8ac"; -} - -.mdi-navigation-fullscreen-exit:before { - content: "\e8ad"; -} - -.mdi-navigation-fullscreen:before { - content: "\e8ae"; -} - -.mdi-navigation-menu:before { - content: "\e8af"; -} - -.mdi-navigation-more-horiz:before { - content: "\e8b0"; -} - -.mdi-navigation-more-vert:before { - content: "\e8b1"; -} - -.mdi-navigation-refresh:before { - content: "\e8b2"; -} - -.mdi-navigation-unfold-less:before { - content: "\e8b3"; -} - -.mdi-navigation-unfold-more:before { - content: "\e8b4"; -} - -.mdi-notification-adb:before { - content: "\e8b5"; -} - -.mdi-notification-bluetooth-audio:before { - content: "\e8b6"; -} - -.mdi-notification-disc-full:before { - content: "\e8b7"; -} - -.mdi-notification-dnd-forwardslash:before { - content: "\e8b8"; -} - -.mdi-notification-do-not-disturb:before { - content: "\e8b9"; -} - -.mdi-notification-drive-eta:before { - content: "\e8ba"; -} - -.mdi-notification-event-available:before { - content: "\e8bb"; -} - -.mdi-notification-event-busy:before { - content: "\e8bc"; -} - -.mdi-notification-event-note:before { - content: "\e8bd"; -} - -.mdi-notification-folder-special:before { - content: "\e8be"; -} - -.mdi-notification-mms:before { - content: "\e8bf"; -} - -.mdi-notification-more:before { - content: "\e8c0"; -} - -.mdi-notification-network-locked:before { - content: "\e8c1"; -} - -.mdi-notification-phone-bluetooth-speaker:before { - content: "\e8c2"; -} - -.mdi-notification-phone-forwarded:before { - content: "\e8c3"; -} - -.mdi-notification-phone-in-talk:before { - content: "\e8c4"; -} - -.mdi-notification-phone-locked:before { - content: "\e8c5"; -} - -.mdi-notification-phone-missed:before { - content: "\e8c6"; -} - -.mdi-notification-phone-paused:before { - content: "\e8c7"; -} - -.mdi-notification-play-download:before { - content: "\e8c8"; -} - -.mdi-notification-play-install:before { - content: "\e8c9"; -} - -.mdi-notification-sd-card:before { - content: "\e8ca"; -} - -.mdi-notification-sim-card-alert:before { - content: "\e8cb"; -} - -.mdi-notification-sms-failed:before { - content: "\e8cc"; -} - -.mdi-notification-sms:before { - content: "\e8cd"; -} - -.mdi-notification-sync-disabled:before { - content: "\e8ce"; -} - -.mdi-notification-sync-problem:before { - content: "\e8cf"; -} - -.mdi-notification-sync:before { - content: "\e8d0"; -} - -.mdi-notification-system-update:before { - content: "\e8d1"; -} - -.mdi-notification-tap-and-play:before { - content: "\e8d2"; -} - -.mdi-notification-time-to-leave:before { - content: "\e8d3"; -} - -.mdi-notification-vibration:before { - content: "\e8d4"; -} - -.mdi-notification-voice-chat:before { - content: "\e8d5"; -} - -.mdi-notification-vpn-lock:before { - content: "\e8d6"; -} - -.mdi-social-cake:before { - content: "\e8d7"; -} - -.mdi-social-domain:before { - content: "\e8d8"; -} - -.mdi-social-group-add:before { - content: "\e8d9"; -} - -.mdi-social-group:before { - content: "\e8da"; -} - -.mdi-social-location-city:before { - content: "\e8db"; -} - -.mdi-social-mood:before { - content: "\e8dc"; -} - -.mdi-social-notifications-none:before { - content: "\e8dd"; -} - -.mdi-social-notifications-off:before { - content: "\e8de"; -} - -.mdi-social-notifications-on:before { - content: "\e8df"; -} - -.mdi-social-notifications-paused:before { - content: "\e8e0"; -} - -.mdi-social-notifications:before { - content: "\e8e1"; -} - -.mdi-social-pages:before { - content: "\e8e2"; -} - -.mdi-social-party-mode:before { - content: "\e8e3"; -} - -.mdi-social-people-outline:before { - content: "\e8e4"; -} - -.mdi-social-people:before { - content: "\e8e5"; -} - -.mdi-social-person-add:before { - content: "\e8e6"; -} - -.mdi-social-person-outline:before { - content: "\e8e7"; -} - -.mdi-social-person:before { - content: "\e8e8"; -} - -.mdi-social-plus-one:before { - content: "\e8e9"; -} - -.mdi-social-poll:before { - content: "\e8ea"; -} - -.mdi-social-public:before { - content: "\e8eb"; -} - -.mdi-social-school:before { - content: "\e8ec"; -} - -.mdi-social-share:before { - content: "\e8ed"; -} - -.mdi-social-whatshot:before { - content: "\e8ee"; -} - -.mdi-toggle-check-box-outline-blank:before { - content: "\e8ef"; -} - -.mdi-toggle-check-box:before { - content: "\e8f0"; -} - -.mdi-toggle-radio-button-off:before { - content: "\e8f1"; -} - -.mdi-toggle-radio-button-on:before { - content: "\e8f2"; -} - -.mdi-toggle-star-half:before { - content: "\e8f3"; -} - -.mdi-toggle-star-outline:before { - content: "\e8f4"; -} - -.mdi-toggle-star:before { - content: "\e8f5"; -} \ No newline at end of file diff --git a/sass/components/_materialbox.scss b/sass/components/_materialbox.scss index a5b3e54154..0ebd63ff94 100644 --- a/sass/components/_materialbox.scss +++ b/sass/components/_materialbox.scss @@ -1,38 +1,39 @@ .materialboxed { - display: block; - cursor: zoom-in; - position: relative; - @include transition(opacity .4s); - &:hover { &:not(.active) { opacity: .8; } - will-change: left, top, width, height; } -} -.materialboxed.active { - cursor: zoom-out; + display: block; + cursor: zoom-in; + position: relative; + transition: opacity .4s; + -webkit-backface-visibility: hidden; + + &.active { + cursor: zoom-out; + } } #materialbox-overlay { position:fixed; - top:0; - left:0; + top: 0; right: 0; bottom: 0; + left: 0; background-color: #292929; - z-index: 999; - + z-index: 1000; will-change: opacity; } + .materialbox-caption { position: fixed; display: none; color: #fff; line-height: 50px; bottom: 0; + left: 0; width: 100%; text-align: center; padding: 0% 15%; diff --git a/sass/components/_mixins.scss b/sass/components/_mixins.scss deleted file mode 100644 index 4c3d3732c1..0000000000 --- a/sass/components/_mixins.scss +++ /dev/null @@ -1,5 +0,0 @@ -@mixin box-shadow-2($args1, $args2) { - -webkit-box-shadow: $args1, $args2; - -moz-box-shadow: $args1, $args2; - box-shadow: $args1, $args2; -} \ No newline at end of file diff --git a/sass/components/_modal.scss b/sass/components/_modal.scss index 0a6dcfb960..7061a35c0d 100644 --- a/sass/components/_modal.scss +++ b/sass/components/_modal.scss @@ -36,26 +36,26 @@ padding: 4px 6px; height: 56px; width: 100%; + text-align: right; .btn, .btn-flat { - float: right; margin: 6px 0; } } } -.lean-overlay { - position: fixed; - z-index:999; - top: -100px; - left: 0; - bottom: 0; - right: 0; - height: 125%; - width: 100%; - background: #000; - display: none; +.modal-overlay { + position: fixed; + z-index: 999; + top: -25%; + left: 0; + bottom: 0; + right: 0; + height: 125%; + width: 100%; + background: #000; + display: none; - will-change: opacity; + will-change: opacity; } // Modal with fixed action footer diff --git a/sass/components/_navbar.scss b/sass/components/_navbar.scss index e87d659d0d..6cc1c7bfa1 100644 --- a/sass/components/_navbar.scss +++ b/sass/components/_navbar.scss @@ -1,21 +1,39 @@ nav { + &.nav-extended { + height: auto; + + .nav-wrapper { + min-height: $navbar-height-mobile; + height: auto; + } + + .nav-content { + position: relative; + line-height: normal; + } + } + color: $navbar-font-color; @extend .z-depth-1; background-color: $primary-color; width: 100%; height: $navbar-height-mobile; - line-height: $navbar-height-mobile; + line-height: $navbar-line-height-mobile; a { color: $navbar-font-color; } + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + display: block; + font-size: 24px; + height: $navbar-height-mobile; + line-height: $navbar-line-height-mobile; + } + .nav-wrapper { position: relative; height: 100%; - - i { - display: block; - font-size: 2rem; - } } @media #{$large-and-up} { @@ -29,11 +47,11 @@ nav { position: relative; z-index: 1; height: $navbar-height-mobile; + margin: 0 18px; i { - font-size: 2.7rem; height: $navbar-height-mobile; - line-height: $navbar-height-mobile; + line-height: $navbar-line-height-mobile; } } @@ -45,20 +63,19 @@ nav { display: inline-block; font-size: $navbar-brand-font-size; padding: 0; - white-space: nowrap; &.center { left: 50%; - @include transform(translateX(-50%)); + transform: translateX(-50%); } @media #{$medium-and-down} { left: 50%; - @include transform(translateX(-50%)); + transform: translateX(-50%); &.left, &.right { padding: 0; - @include transform(none); + transform: none; } &.left { left: 0.5rem; } @@ -72,6 +89,21 @@ nav { right: 0.5rem; padding: 0; } + + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + float: left; + margin-right: 15px; + } + } + + + // Title + .nav-title { + display: inline-block; + font-size: 32px; + padding: 28px 0; } @@ -80,19 +112,36 @@ nav { margin: 0; li { - @include transition(background-color .3s); + transition: background-color .3s; float: left; padding: 0; - &:hover, &.active { + &.active { background-color: rgba(0,0,0,.1); } } a { - font-size: 1rem; + transition: background-color .3s; + font-size: $navbar-font-size; color: $navbar-font-color; display: block; padding: 0 15px; + cursor: pointer; + + &.btn, &.btn-large, &.btn-flat, &.btn-floating { + margin-top: -2px; + margin-left: 15px; + margin-right: 15px; + + & > .material-icons { + height: inherit; + line-height: inherit; + } + } + + &:hover { + background-color: rgba(0,0,0,.1); + } } &.left { @@ -101,8 +150,13 @@ nav { } // Navbar Search Form + form { + height: 100%; + } + .input-field { margin: 0; + height: 100%; input { height: 100%; @@ -116,38 +170,37 @@ nav { box-shadow: none; } } + label { top: 0; left: 0; i { color: rgba(255,255,255,.7); - @include transition(color .3s); + transition: color .3s; } &.active i { color: $navbar-font-color; } - &.active { - @include transform(translateY(0)); - } } - } - } // Fixed Navbar .navbar-fixed { position: relative; height: $navbar-height-mobile; - z-index: 998; + z-index: 997; nav { position: fixed; } } @media #{$medium-and-up} { + nav.nav-extended .nav-wrapper { + min-height: $navbar-height; + } nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i { height: $navbar-height; - line-height: $navbar-height; + line-height: $navbar-line-height; } .navbar-fixed { height: $navbar-height; diff --git a/sass/components/_normalize.scss b/sass/components/_normalize.scss index ab626c4173..5e5e3c8981 100644 --- a/sass/components/_normalize.scss +++ b/sass/components/_normalize.scss @@ -1,9 +1,9 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ /** * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. */ html { @@ -71,7 +71,7 @@ audio:not([controls]) { /** * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. */ [hidden], @@ -91,7 +91,8 @@ a { } /** - * Improve readability when focused and also mouse hovered in all browsers. + * Improve readability of focused elements when they are also in an + * active/hover state. */ a:active, @@ -209,7 +210,6 @@ figure { */ hr { - -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } @@ -287,8 +287,8 @@ select { * `input` and others. */ -/* 1 */ html input[type="button"], button, +html input[type="button"], /* 1 */ input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ @@ -350,15 +350,12 @@ input[type="number"]::-webkit-outer-spin-button { /** * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. */ input[type="search"] { -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; + box-sizing: content-box; /* 2 */ } /** diff --git a/sass/components/_prefixer.scss b/sass/components/_prefixer.scss deleted file mode 100755 index f483eaf823..0000000000 --- a/sass/components/_prefixer.scss +++ /dev/null @@ -1,376 +0,0 @@ -//--------------------------------------------------- -// Sass Prefixer -// ------------------------------------------------- -// TABLE OF CONTENTS -// (*) denotes a syntax-sugar helper -// ------------------------------------------------- -// -// animation($args) -// animation-delay($delay) -// animation-direction($direction) -// animation-duration($duration) -// animation-fill-mode($mode) -// animation-iteration-count($count) -// animation-name($name) -// animation-play-state($state) -// animation-timing-function($function) -// background-size($args) -// inner-shadow($args) * -// box-sizing($args) -// border-box() * -// content-box() * -// columns($args) -// column-count($count) -// column-gap($gap) -// column-rule($args) -// column-width($width) -// flexbox() -// flex($args) -// order($args) -// align($args) -// justify-content($args) -// gradient($default,$start,$stop) * -// linear-gradient-top($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])* -// linear-gradient-left($default,$color1,$stop1,$color2,$stop2,[$color3,$stop3,$color4,$stop4])* -// transform($args) -// transform-origin($args) -// transform-style($style) -// rotate($deg) -// scale($factor) -// translate($x,$y) -// translate3d($x,$y,$z) -// translateHardware($x,$y) * -// text-shadow($args) -// transition($args) -// transition-delay($delay) -// transition-duration($duration) -// transition-property($property) -// transition-timing-function($function) - - -// Animation - -@mixin animation($args) { - -webkit-animation: $args; - -moz-animation: $args; - -ms-animation: $args; - -o-animation: $args; - animation: $args; -} -@mixin animation-delay($delay) { - -webkit-animation-delay: $delay; - -moz-animation-delay: $delay; - -ms-animation-delay: $delay; - -o-animation-delay: $delay; - animation-delay: $delay; -} -@mixin animation-direction($direction) { - -webkit-animation-direction: $direction; - -moz-animation-direction: $direction; - -ms-animation-direction: $direction; - -o-animation-direction: $direction; -} -@mixin animation-duration($duration) { - -webkit-animation-duration: $duration; - -moz-animation-duration: $duration; - -ms-animation-duration: $duration; - -o-animation-duration: $duration; -} -@mixin animation-fill-mode($mode) { - -webkit-animation-fill-mode: $mode; - -moz-animation-fill-mode: $mode; - -ms-animation-fill-mode: $mode; - -o-animation-fill-mode: $mode; - animation-fill-mode: $mode; -} -@mixin animation-iteration-count($count) { - -webkit-animation-iteration-count: $count; - -moz-animation-iteration-count: $count; - -ms-animation-iteration-count: $count; - -o-animation-iteration-count: $count; - animation-iteration-count: $count; -} -@mixin animation-name($name) { - -webkit-animation-name: $name; - -moz-animation-name: $name; - -ms-animation-name: $name; - -o-animation-name: $name; - animation-name: $name; -} -@mixin animation-play-state($state) { - -webkit-animation-play-state: $state; - -moz-animation-play-state: $state; - -ms-animation-play-state: $state; - -o-animation-play-state: $state; - animation-play-state: $state; -} -@mixin animation-timing-function($function) { - -webkit-animation-timing-function: $function; - -moz-animation-timing-function: $function; - -ms-animation-timing-function: $function; - -o-animation-timing-function: $function; - animation-timing-function: $function; -} - -// Keyframes -@mixin keyframes($animation-name) { - @-webkit-keyframes #{$animation-name} { - @content; - } - @-moz-keyframes #{$animation-name} { - @content; - } - @keyframes #{$animation-name} { - @content; - } -} - -// Backface-visibility - -@mixin backface-visibility($args) { - -webkit-backface-visibility: $args; - -moz-backface-visibility: $args; - -ms-backface-visibility: $args; - backface-visibility: $args; -} - - -// Background Size - -@mixin background-size($args) { - -webkit-background-size: $args; - background-size: $args; -} - -// Box Sizing - -@mixin box-sizing($args) { - -webkit-box-sizing: $args; - -moz-box-sizing: $args; - box-sizing: $args; -} -@mixin border-box(){ - @include box-sizing(border-box); -} -@mixin content-box(){ - @include box-sizing(content-box); -} - - -// Columns - -@mixin columns($args) { - -webkit-columns: $args; - -moz-columns: $args; - columns: $args; -} -@mixin column-count($count) { - -webkit-column-count: $count; - -moz-column-count: $count; - column-count: $count; -} -@mixin column-gap($gap) { - -webkit-column-gap: $gap; - -moz-column-gap: $gap; - column-gap: $gap; -} -@mixin column-width($width) { - -webkit-column-width: $width; - -moz-column-width: $width; - column-width: $width; -} -@mixin column-rule($args) { - -webkit-column-rule: $args; - -moz-column-rule: $args; - column-rule: $args; -} - -// Filter -@mixin filter($args) { - -webkit-filter: $args; - -moz-filter: $args; - -o-filter: $args; - -ms-filter: $args; -} - -// Flexbox -@mixin flexbox() { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; -} - @mixin flex($values) { - -webkit-box-flex: $values; - -moz-box-flex: $values; - -webkit-flex: $values; - -ms-flex: $values; - flex: $values; - } - @mixin order($val) { - -webkit-box-ordinal-group: $val; - -moz-box-ordinal-group: $val; - -ms-flex-order: $val; - -webkit-order: $val; - order: $val; - } - @mixin align($align) { - -webkit-flex-align: $align; - -ms-flex-align: $align; - -webkit-align-items: $align; - align-items: $align; - } - @mixin justify-content($val) { - -webkit-justify-content: $val; - justify-content: $val; - } -// Gradients - -@mixin gradient($default: #F5F5F5, $start: #EEE, $stop: #FFF) { - @include linear-gradient-top($default,$start,0%,$stop,100%); -} -@mixin linear-gradient-top($default,$color1,$stop1,$color2,$stop2) { - background-color: $default; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2)); - background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2); - background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2); - background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2); - background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2); - background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2); -} -@mixin linear-gradient-top2($default,$color1,$stop1,$color2,$stop2,$color3,$stop3) { - background-color: $default; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3)); - background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3); -} -@mixin linear-gradient-top3($default,$color1,$stop1,$color2,$stop2,$color3,$stop3,$color4,$stop4) { - background-color: $default; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3), color-stop($stop4 $color4)); - background-image: -webkit-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: -moz-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: -ms-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: -o-linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: linear-gradient(top, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); -} -@mixin linear-gradient-left($default,$color1,$stop1,$color2,$stop2) { - background-color: $default; - background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2)); - background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2); - background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2); - background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2); - background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2); - background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2); -} -@mixin linear-gradient-left2($default,$color1,$stop1,$color2,$stop2,$color3,$stop3) { - background-color: $default; - background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3)); - background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); - background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3); -} -@mixin linear-gradient-left3($default,$color1,$stop1,$color2,$stop2,$color3,$stop3,$color4,$stop4) { - background-color: $default; - background-image: -webkit-gradient(linear, left top, left top, color-stop($stop1, $color1), color-stop($stop2 $color2), color-stop($stop3 $color3), color-stop($stop4 $color4)); - background-image: -webkit-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: -moz-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: -ms-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: -o-linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); - background-image: linear-gradient(left, $color1 $stop1, $color2 $stop2, $color3 $stop3, $color4 $stop4); -} - -// Text Shadow - -@mixin text-shadow($args) { - text-shadow: $args; -} - - -// Transforms - -@mixin transform($args) { - -webkit-transform: $args; - -moz-transform: $args; - -ms-transform: $args; - -o-transform: $args; - transform: $args; -} -@mixin transform-origin($args) { - -webkit-transform-origin: $args; - -moz-transform-origin: $args; - -ms-transform-origin: $args; - -o-transform-origin: $args; - transform-origin: $args; -} -@mixin transform-style($style) { - -webkit-transform-style: $style; - -moz-transform-style: $style; - -ms-transform-style: $style; - -o-transform-style: $style; - transform-style: $style; -} -@mixin rotate($deg:45deg){ - @include transform(rotate($deg)); -} -@mixin scale($factor:.5){ - @include transform(scale($factor)); -} -@mixin translate($x,$y){ - @include transform(translate($x,$y)); -} -@mixin translate3d($x,$y,$z) { - @include transform(translate3d($x,$y,$z)); -} -@mixin translateHardware($x,$y) { - @include translate($x,$y); - -webkit-transform: translate3d($x,$y,0); - -moz-transform: translate3d($x,$y,0); - -o-transform: translate3d($x,$y,0); - -ms-transform: translate3d($x,$y,0); - transform: translate3d($x,$y,0); -} - - -// Transitions - -@mixin transition($args:200ms) { - -webkit-transition: $args; - -moz-transition: $args; - -o-transition: $args; - -ms-transition: $args; - transition: $args; -} -@mixin transition-delay($delay:0) { - -webkit-transition-delay: $delay; - -moz-transition-delay: $delay; - -o-transition-delay: $delay; - -ms-transition-delay: $delay; - transition-delay: $delay; -} -@mixin transition-duration($duration:200ms) { - -webkit-transition-duration: $duration; - -moz-transition-duration: $duration; - -o-transition-duration: $duration; - -ms-transition-duration: $duration; - transition-duration: $duration; -} -@mixin transition-property($property:all) { - -webkit-transition-property: $property; - -moz-transition-property: $property; - -o-transition-property: $property; - -ms-transition-property: $property; - transition-property: $property; -} -@mixin transition-timing-function($function:ease) { - -webkit-transition-timing-function: $function; - -moz-transition-timing-function: $function; - -o-transition-timing-function: $function; - -ms-transition-timing-function: $function; - transition-timing-function: $function; -} diff --git a/sass/components/_preloader.scss b/sass/components/_preloader.scss index ab5c783f25..fbe862d2fd 100644 --- a/sass/components/_preloader.scss +++ b/sass/components/_preloader.scss @@ -30,8 +30,8 @@ .preloader-wrapper { display: inline-block; position: relative; - width: 48px; - height: 48px; + width: 50px; + height: 50px; &.small { width: 36px; @@ -63,6 +63,7 @@ width: 100%; height: 100%; opacity: 0; + border-color: $spinner-default-color; } .spinner-blue, @@ -122,6 +123,7 @@ animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; } +.active .spinner-layer, .active .spinner-layer.spinner-blue-only, .active .spinner-layer.spinner-red-only, .active .spinner-layer.spinner-yellow-only, @@ -329,4 +331,4 @@ @keyframes fade-out { from { opacity: 1; } to { opacity: 0; } -} \ No newline at end of file +} diff --git a/sass/components/_pulse.scss b/sass/components/_pulse.scss new file mode 100644 index 0000000000..b983060975 --- /dev/null +++ b/sass/components/_pulse.scss @@ -0,0 +1,34 @@ +.pulse { + &::before { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: inherit; + border-radius: inherit; + transition: opacity .3s, transform .3s; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + z-index: -1; + } + + overflow: initial; + position: relative; +} + +@keyframes pulse-animation { + 0% { + opacity: 1; + transform: scale(1); + } + 50% { + opacity: 0; + transform: scale(1.5); + } + 100% { + opacity: 0; + transform: scale(1.5); + } +} diff --git a/sass/components/_roboto.scss b/sass/components/_roboto.scss index 7ceb9d5c63..6afc057924 100644 --- a/sass/components/_roboto.scss +++ b/sass/components/_roboto.scss @@ -2,41 +2,38 @@ font-family: "Roboto"; src: local(Roboto Thin), url("#{$roboto-font-path}Roboto-Thin.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Thin.woff") format("woff"), - url("#{$roboto-font-path}Roboto-Thin.ttf") format("truetype"); - font-weight: 200; + url("#{$roboto-font-path}Roboto-Thin.woff") format("woff"); + + font-weight: 100; } @font-face { font-family: "Roboto"; src: local(Roboto Light), url("#{$roboto-font-path}Roboto-Light.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Light.woff") format("woff"), - url("#{$roboto-font-path}Roboto-Light.ttf") format("truetype"); + url("#{$roboto-font-path}Roboto-Light.woff") format("woff"); font-weight: 300; } @font-face { font-family: "Roboto"; - src: - local(Roboto Regular), + src: local(Roboto Regular), url("#{$roboto-font-path}Roboto-Regular.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Regular.woff") format("woff"), - url("#{$roboto-font-path}Roboto-Regular.ttf") format("truetype"); + url("#{$roboto-font-path}Roboto-Regular.woff") format("woff"); font-weight: 400; } @font-face { font-family: "Roboto"; - src: url("#{$roboto-font-path}Roboto-Medium.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Medium.woff") format("woff"), - url("#{$roboto-font-path}Roboto-Medium.ttf") format("truetype"); + src: local(Roboto Medium), + url("#{$roboto-font-path}Roboto-Medium.woff2") format("woff2"), + url("#{$roboto-font-path}Roboto-Medium.woff") format("woff"); font-weight: 500; } @font-face { font-family: "Roboto"; - src: url("#{$roboto-font-path}Roboto-Bold.woff2") format("woff2"), - url("#{$roboto-font-path}Roboto-Bold.woff") format("woff"), - url("#{$roboto-font-path}Roboto-Bold.ttf") format("truetype"); + src: local(Roboto Bold), + url("#{$roboto-font-path}Roboto-Bold.woff2") format("woff2"), + url("#{$roboto-font-path}Roboto-Bold.woff") format("woff"); font-weight: 700; } diff --git a/sass/components/_sideNav.scss b/sass/components/_sideNav.scss index 98794a1f2e..adadb79523 100644 --- a/sass/components/_sideNav.scss +++ b/sass/components/_sideNav.scss @@ -1,9 +1,10 @@ .side-nav { position: fixed; - width: 240px; - left: -105%; + width: 300px; + left: 0; top: 0; margin: 0; + transform: translateX(-100%); height: 100%; height: calc(100% + 60px); height: -moz-calc(100%); //Temporary Firefox Fix @@ -11,34 +12,132 @@ background-color: $sidenav-bg-color; z-index: 999; overflow-y: auto; + will-change: transform; + backface-visibility: hidden; + transform: translateX(-105%); @extend .z-depth-1; - will-change: left; // Right Align &.right-aligned { - will-change: right; - right: -105%; + right: 0; + transform: translateX(105%); left: auto; + transform: translateX(100%); } - .collapsible{ + .collapsible { margin: 0; } li { float: none; - padding: 0 $sidenav-padding-right; - &:hover, &.active { background-color: #ddd; } + line-height: $sidenav-line-height; + + &.active { background-color: rgba(0,0,0,.05); } } - a { - color: #444; + + li > a { + color: $sidenav-font-color; display: block; - font-size: 1rem; - height: 64px; - line-height: 64px; - padding: 0 $sidenav-padding-right; + font-size: $sidenav-font-size; + font-weight: 500; + height: $sidenav-item-height; + line-height: $sidenav-line-height; + padding: 0 ($sidenav-padding * 2); + + &:hover { background-color: rgba(0,0,0,.05);} + + &.btn, &.btn-large, &.btn-flat, &.btn-floating { + margin: 10px 15px; + } + + &.btn, + &.btn-large, + &.btn-floating { color: $button-raised-color; } + &.btn-flat { color: $button-flat-color; } + + &.btn:hover, + &.btn-large:hover { background-color: lighten($button-raised-background, 5%); } + &.btn-floating:hover { background-color: $button-raised-background; } + + & > i, + & > [class^="mdi-"], li > a > [class*="mdi-"], + & > i.material-icons { + float: left; + height: $sidenav-item-height; + line-height: $sidenav-line-height; + margin: 0 ($sidenav-padding * 2) 0 0; + width: $sidenav-item-height / 2; + color: rgba(0,0,0,.54); + } + } + + + .divider { + margin: ($sidenav-padding / 2) 0 0 0; + } + + .subheader { + &:hover { + background-color: transparent; + } + + cursor: initial; + pointer-events: none; + color: rgba(0,0,0,.54); + font-size: $sidenav-font-size; + font-weight: 500; + line-height: $sidenav-line-height; + } + + .user-view, + .userView { + position: relative; + padding: ($sidenav-padding * 2) ($sidenav-padding * 2) 0; + margin-bottom: $sidenav-padding / 2; + + & > a { + &:hover { background-color: transparent; } + height: auto; + padding: 0; + } + + .background { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + } + + .circle, .name, .email { + display: block; + } + + .circle { + height: 64px; + width: 64px; + } + + .name, + .email { + font-size: $sidenav-font-size; + line-height: $sidenav-line-height / 2; + } + + .name { + margin-top: 16px; + font-weight: 500; + } + + .email { + padding-bottom: 16px; + font-weight: 400; + } } } @@ -53,19 +152,10 @@ } -// Hidden side-nav for all sizes -.side-nav.fixed { - a { - display: block; - padding: 0 $sidenav-padding-right; - color: #444; - } -} - - // Fixed side-nav shown .side-nav.fixed { left: 0; + transform: translateX(0); position: fixed; // Right Align @@ -77,24 +167,37 @@ // Fixed sideNav hide on smaller @media #{$medium-and-down} { - .side-nav.fixed { - left: -105%; + .side-nav { + &.fixed { + transform: translateX(-105%); - &.right-aligned { - right: -105%; - left: auto; + &.right-aligned { + transform: translateX(105%); + } + } + + > a { + padding: 0 $sidenav-padding; + } + + .user-view, + .userView { + padding: $sidenav-padding $sidenav-padding 0; } } } -.side-nav .collapsible-body li.active, -.side-nav.fixed .collapsible-body li.active { +.side-nav .collapsible-body > ul:not(.collapsible) > li.active, +.side-nav.fixed .collapsible-body > ul:not(.collapsible) > li.active { background-color: $primary-color; a { color: $sidenav-bg-color; } } +.side-nav .collapsible-body { + padding: 0; +} #sidenav-overlay { diff --git a/sass/components/_slider.scss b/sass/components/_slider.scss index 3d2071a13a..2265cdb020 100644 --- a/sass/components/_slider.scss +++ b/sass/components/_slider.scss @@ -80,7 +80,7 @@ margin: 0 12px; background-color: $slider-bg-color-light; - @include transition(background-color .3s); + transition: background-color .3s; border-radius: 50%; &.active { diff --git a/sass/components/_table_of_contents.scss b/sass/components/_table_of_contents.scss index 2872bdbb36..4c67ee6cd2 100644 --- a/sass/components/_table_of_contents.scss +++ b/sass/components/_table_of_contents.scss @@ -22,12 +22,12 @@ &:hover { color: lighten(#757575, 20%); padding-left: 19px; - border-left: 1px solid lighten(color("materialize-red", "base"),10%); + border-left: 1px solid $primary-color; } &.active { font-weight: 500; padding-left: 18px; - border-left: 2px solid lighten(color("materialize-red", "base"),10%); + border-left: 2px solid $primary-color; } } } diff --git a/sass/components/_tabs.scss b/sass/components/_tabs.scss old mode 100755 new mode 100644 index 3fafec7c60..47f732278b --- a/sass/components/_tabs.scss +++ b/sass/components/_tabs.scss @@ -1,41 +1,70 @@ .tabs { - @include flexbox(); + &.tabs-transparent { + background-color: transparent; + + .tab a, + .tab.disabled a, + .tab.disabled a:hover { + color: rgba(255,255,255,0.7); + } + + .tab a:hover, + .tab a.active { + color: #fff; + } + + .indicator { + background-color: #fff; + } + } + + &.tabs-fixed-width { + display: flex; + + .tab { + flex-grow: 1; + } + } + position: relative; + overflow-x: auto; + overflow-y: hidden; height: 48px; + width: 100%; background-color: $tabs-bg-color; margin: 0 auto; - width: 100%; white-space: nowrap; .tab { - -webkit-box-flex: 1; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - display: block; - float: left; + display: inline-block; text-align: center; line-height: 48px; height: 48px; - padding: 0 20px; + padding: 0; margin: 0; text-transform: uppercase; - letter-spacing: .8px; - width: 15%; a { - color: $tabs-text-color; + &:hover, + &.active { + background-color: transparent; + color: $tabs-text-color; + } + + color: rgba($tabs-text-color, .7); display: block; width: 100%; height: 100%; - @include transition( color .28s ease); - &:hover { - color: lighten($tabs-text-color, 20%); - } + padding: 0 24px; + font-size: 14px; + text-overflow: ellipsis; + overflow: hidden; + transition: color .28s ease; } - &.disabled a { - color: lighten($tabs-text-color, 20%); + &.disabled a, + &.disabled a:hover { + color: rgba($tabs-text-color, .7); cursor: default; } } @@ -48,5 +77,17 @@ } } -.tabs .tab { padding: 0; } +// Fixed sideNav hide on smaller +@media #{$medium-and-down} { + .tabs { + display: flex; + .tab { + flex-grow: 1; + + a { + padding: 0 12px; + } + } + } +} diff --git a/sass/components/_tapTarget.scss b/sass/components/_tapTarget.scss new file mode 100644 index 0000000000..c015f34a95 --- /dev/null +++ b/sass/components/_tapTarget.scss @@ -0,0 +1,103 @@ +.tap-target-wrapper { + width: 800px; + height: 800px; + position: fixed; + z-index: 1000; + visibility: hidden; + transition: visibility 0s .3s; +} + +.tap-target-wrapper.open { + visibility: visible; + transition: visibility 0s; + + .tap-target { + transform: scale(1); + opacity: .95; + transition: + transform .3s cubic-bezier(.42,0,.58,1), + opacity .3s cubic-bezier(.42,0,.58,1); + } + + .tap-target-wave::before { + transform: scale(1); + } + .tap-target-wave::after { + visibility: visible; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + transition: + opacity .3s, + transform .3s, + visibility 0s 1s; + } +} + +.tap-target { + position: absolute; + font-size: 1rem; + border-radius: 50%; + background-color: $primary-color; + box-shadow: 0 20px 20px 0 rgba(0,0,0,0.14), 0 10px 50px 0 rgba(0,0,0,0.12), 0 30px 10px -20px rgba(0,0,0,0.2); + width: 100%; + height: 100%; + opacity: 0; + transform: scale(0); + transition: + transform .3s cubic-bezier(.42,0,.58,1), + opacity .3s cubic-bezier(.42,0,.58,1); +} + +.tap-target-content { + position: relative; + display: table-cell; +} + +.tap-target-wave { + &::before, + &::after { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #ffffff; + } + &::before { + transform: scale(0); + transition: transform .3s; + } + &::after { + visibility: hidden; + transition: + opacity .3s, + transform .3s, + visibility 0s; + z-index: -1; + } + + position: absolute; + border-radius: 50%; + z-index: 10001; +} + +.tap-target-origin { + &:not(.btn), + &:not(.btn):hover { + background: none; + } + + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + + z-index: 10002; + position: absolute !important; +} + +@media only screen and (max-width: 600px) { + .tap-target, .tap-target-wrapper { + width: 600px; + height: 600px; + } +} diff --git a/sass/components/_toast.scss b/sass/components/_toast.scss index 242638e136..c1fea0862e 100644 --- a/sass/components/_toast.scss +++ b/sass/components/_toast.scss @@ -8,40 +8,43 @@ bottom: 0%; } @media #{$medium-only} { - min-width: 30%; left: 5%; bottom: 7%; + max-width: 90%; } @media #{$large-and-up} { - min-width: 8%; top: 10%; right: 7%; + max-width: 86%; } } .toast { @extend .z-depth-1; border-radius: 2px; - top: 0; + top: 35px; width: auto; - clear: both; margin-top: 10px; position: relative; max-width:100%; - height: $toast-height; - line-height: $toast-height; + height: auto; + min-height: $toast-height; + line-height: 1.5em; + word-break: break-all; background-color: $toast-color; - padding: 0 25px; + padding: 10px 25px; font-size: 1.1rem; font-weight: 300; color: $toast-text-color; + display: flex; + align-items: center; + justify-content: space-between; + cursor: default; - @include flexbox(); - @include align(center); - @include justify-content(space-between); - - .btn, .btn-flat { - margin: 0; + .toast-action { + color: $toast-action-color; + font-weight: 500; + margin-right: -25px; margin-left: 3rem; } @@ -50,14 +53,7 @@ } @media #{$small-and-down} { - width:100%; + width: 100%; border-radius: 0; } - @media #{$medium-only} { - float: left; - } - @media #{$large-and-up} { - float: right; - } - } diff --git a/sass/components/_tooltip.scss b/sass/components/_tooltip.scss index 374ace97bd..8224a8ef96 100644 --- a/sass/components/_tooltip.scss +++ b/sass/components/_tooltip.scss @@ -1,34 +1,31 @@ .material-tooltip { - padding: 10px 8px; - font-size: 1rem; - z-index: 2000; - background-color: transparent; - border-radius: 2px; - color: #fff; - min-height: 36px; - line-height: 1rem; - // max-width: 350px; - opacity: 0; - display: none; - position: absolute; - text-align: center; - overflow: hidden; - left:0; - top:0; - - will-change: top, left; + padding: 10px 8px; + font-size: 1rem; + z-index: 2000; + background-color: transparent; + border-radius: 2px; + color: #fff; + min-height: 36px; + line-height: 120%; + opacity: 0; + position: absolute; + text-align: center; + max-width: calc(100% - 4px); + overflow: hidden; + left: 0; + top: 0; + pointer-events: none; + visibility: hidden; } .backdrop { position: absolute; opacity: 0; - display: none; height: 7px; width: 14px; - border-radius: 0 0 14px 14px; + border-radius: 0 0 50% 50%; background-color: #323232; z-index: -1; - @include transform-origin( 50% 10%); - - will-change: transform, opacity; + transform-origin: 50% 0%; + visibility: hidden; } diff --git a/sass/components/_transitions.scss b/sass/components/_transitions.scss new file mode 100644 index 0000000000..9c3660aa82 --- /dev/null +++ b/sass/components/_transitions.scss @@ -0,0 +1,13 @@ +// Scale transition +.scale-transition { + &.scale-out { + transform: scale(0); + transition: transform .2s !important; + } + + &.scale-in { + transform: scale(1); + } + + transition: transform .3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; +} \ No newline at end of file diff --git a/sass/components/_typography.scss b/sass/components/_typography.scss old mode 100755 new mode 100644 diff --git a/sass/components/_variables.scss b/sass/components/_variables.scss index 833d49f575..bb03aa2107 100644 --- a/sass/components/_variables.scss +++ b/sass/components/_variables.scss @@ -1,4 +1,40 @@ -/*** Colors ***/ +// ========================================================================== +// Materialize variables +// ========================================================================== +// +// Table of Contents: +// +// 1. Colors +// 2. Badges +// 3. Buttons +// 4. Cards +// 5. Carousel +// 6. Collapsible +// 7. Chips +// 8. Date + Time Picker +// 9. Dropdown +// 10. Fonts +// 11. Forms +// 12. Global +// 13. Grid +// 14. Navigation Bar +// 15. Side Navigation +// 16. Photo Slider +// 17. Spinners | Loaders +// 18. Tabs +// 19. Tables +// 20. Toasts +// 21. Typography +// 22. Footer +// 23. Flow Text +// 24. Collections +// 25. Progress Bar + + + +// 1. Colors +// ========================================================================== + $primary-color: color("materialize-red", "lighten-2") !default; $primary-color-light: lighten($primary-color, 15%) !default; $primary-color-dark: darken($primary-color, 15%) !default; @@ -8,72 +44,172 @@ $success-color: color("green", "base") !default; $error-color: color("red", "base") !default; $link-color: color("light-blue", "darken-1") !default; -/*** Badges ***/ + +// 2. Badges +// ========================================================================== + $badge-bg-color: $secondary-color !default; +$badge-height: 22px !default; + -/*** Buttons ***/ -$button-bg-color-disabled: #DFDFDF !default; -$button-color: $secondary-color !default; -$button-color-disabled: #9F9F9F !default; -$button-color-flat: #343434 !default; -$button-color-raised: #fff !default; -$button-floating-size: 37px !default; +// 3. Buttons +// ========================================================================== + +// Shared styles +$button-border: none !default; +$button-background-focus: lighten($secondary-color, 4%) !default; +$button-font-size: 1rem !default; +$button-icon-font-size: 1.3rem !default; $button-height: 36px !default; -$button-font-size-shared: 1.3rem !default; +$button-padding: 0 2rem !default; +$button-radius: 2px !default; + +// Disabled styles +$button-disabled-background: #DFDFDF !default; +$button-disabled-color: #9F9F9F !default; + +// Raised buttons +$button-raised-background: $secondary-color !default; +$button-raised-background-hover: lighten($button-raised-background, 5%) !default; +$button-raised-color: #fff !default; + +// Large buttons $button-large-icon-font-size: 1.6rem !default; -$button-line-height: 36px !default; +$button-large-height: $button-height * 1.5 !default; + +// Flat buttons +$button-flat-color: #343434 !default; +$button-flat-disabled-color: lighten(#999, 10%) !default; + +// Floating buttons +$button-floating-background: $secondary-color !default; +$button-floating-background-hover: $button-floating-background !default; +$button-floating-color: #fff !default; +$button-floating-size: 40px !default; +$button-floating-large-size: 56px !default; +$button-floating-radius: 50% !default; -/*** Cards ***/ -$card-padding: 20px !default; + +// 4. Cards +// ========================================================================== + +$card-padding: 24px !default; $card-bg-color: #fff !default; $card-link-color: color("orange", "accent-2") !default; $card-link-color-light: lighten($card-link-color, 20%) !default; -/*** Collapsible ***/ + +// 5. Carousel +// ========================================================================== + +$carousel-height: 400px !default; +$carousel-item-height: $carousel-height / 2 !default; +$carousel-item-width: $carousel-item-height !default; + + +// 6. Collapsible +// ========================================================================== + $collapsible-height: 3rem !default; +$collapsible-line-height: $collapsible-height !default; $collapsible-header-color: #fff !default; $collapsible-border-color: #ddd !default; -/*** Dropdown ***/ + +// 7. Chips +// ========================================================================== + +$chip-bg-color: #e4e4e4 !default; +$chip-border-color: #9e9e9e !default; +$chip-selected-color: #26a69a !default; +$chip-margin: 5px !default; + + +// 8. Date + Time Picker +// ========================================================================== + +$datepicker-display-font-size: 2.8rem; +$datepicker-weekday-color: rgba(0, 0, 0, .87) !default; +$datepicker-weekday-bg: darken($secondary-color, 7%) !default; +$datepicker-date-bg: $secondary-color !default; +$datepicker-year: rgba(255, 255, 255, .7) !default; +$datepicker-focus: rgba(0,0,0, .05) !default; +$datepicker-selected: $secondary-color !default; +$datepicker-selected-outfocus: desaturate(lighten($secondary-color, 35%), 15%) !default; + +$timepicker-clock-color: rgba(0, 0, 0, .87) !default; +$timepicker-clock-plate-bg: #eee; + + +// 9. Dropdown +// ========================================================================== + $dropdown-bg-color: #fff !default; $dropdown-hover-bg-color: #eee !default; $dropdown-color: $secondary-color !default; +$dropdown-item-height: 50px !default; + + +// 10. Fonts +// ========================================================================== -/*** Fonts ***/ -$roboto-font-path: "../font/roboto/" !default; -$icons-font-path: "../font/material-design-icons/" !default; +$roboto-font-path: "../fonts/roboto/" !default; + + +// 11. Forms +// ========================================================================== -/*** Forms ***/ // Text Inputs + Textarea +$input-height: 3rem !default; $input-border-color: color("grey", "base") !default; -$input-bg-color: #fff !default; +$input-border: 1px solid $input-border-color !default; +$input-background: #fff !default; $input-error-color: $error-color !default; $input-success-color: $success-color !default; $input-focus-color: $secondary-color !default; +$input-font-size: 1rem !default; +$input-margin-bottom: 20px; +$input-margin: 0 0 $input-margin-bottom 0 !default; +$input-padding: 0 !default; +$input-transition: all .3s !default; $label-font-size: .8rem !default; -$input-disabled-color: rgba(0,0,0, .26) !default; -$input-disabled-solid-color: #BDBDBD !default; +$input-disabled-color: rgba(0,0,0, .42) !default; +$input-disabled-solid-color: #949494 !default; +$input-disabled-border: 1px dotted $input-disabled-color !default; +$input-invalid-border: 1px solid $input-error-color !default; +$placeholder-text-color: lighten($input-border-color, 20%) !default; // Radio Buttons $radio-fill-color: $secondary-color !default; $radio-empty-color: #5a5a5a !default; +$radio-border: 2px solid $radio-fill-color !default; + +// Range +$range-height: 14px !default; +$range-width: 14px !default; +$track-height: 3px !default; + +// Select +$select-border: 1px solid #f2f2f2 !default; +$select-background: rgba(255, 255, 255, 0.90) !default; +$select-focus: 1px solid lighten($secondary-color, 47%) !default; +$select-option-hover: rgba(0,0,0,.06) !default; +$select-option-focus: rgba(0,0,0,.03) !default; +$select-padding: 5px !default; +$select-radius: 2px !default; +$select-disabled-color: rgba(0,0,0,.3) !default; // Switches $switch-bg-color: $secondary-color !default; -$switch-checked-lever-bg: desaturate(lighten($secondary-color, 25%), 25%) !default; +$switch-checked-lever-bg: desaturate(lighten($switch-bg-color, 25%), 25%) !default; $switch-unchecked-bg: #F1F1F1 !default; -$switch-unchecked-lever-bg: #818181 !default; +$switch-unchecked-lever-bg: rgba(0,0,0,.38) !default; +$switch-radius: 15px !default; -// Date Picker -$datepicker-weekday-bg: darken($secondary_color, 7%) !default; -$datepicker-date-bg: $secondary_color !default; -$datepicker-year: rgba(255, 255, 255, .4) !default; -$datepicker-focus: rgba(0,0,0, .05) !default; -$datepicker-selected: $secondary-color !default; -$datepicker-selected-outfocus: desaturate(lighten($secondary-color, 35%), 15%) !default; +// 12. Global +// ========================================================================== -/*** Global ***/ // Media Query Ranges $small-screen-up: 601px !default; $medium-screen-up: 993px !default; @@ -84,46 +220,84 @@ $large-screen: 1200px !default; $medium-and-up: "only screen and (min-width : #{$small-screen-up})" !default; $large-and-up: "only screen and (min-width : #{$medium-screen-up})" !default; +$extra-large-and-up: "only screen and (min-width : #{$large-screen-up})" !default; $small-and-down: "only screen and (max-width : #{$small-screen})" !default; $medium-and-down: "only screen and (max-width : #{$medium-screen})" !default; $medium-only: "only screen and (min-width : #{$small-screen-up}) and (max-width : #{$medium-screen})" !default; -// Grid Variables + +// 13. Grid +// ========================================================================== + $num-cols: 12 !default; $gutter-width: 1.5rem !default; $element-top-margin: $gutter-width/3 !default; $element-bottom-margin: ($gutter-width*2)/3 !default; -/*** Navbar ***/ + +// 14. Navigation Bar +// ========================================================================== + $navbar-height: 64px !default; +$navbar-line-height: $navbar-height !default; $navbar-height-mobile: 56px !default; +$navbar-line-height-mobile: $navbar-height-mobile !default; +$navbar-font-size: 1rem !default; $navbar-font-color: #fff !default; $navbar-brand-font-size: 2.1rem !default; -/*** SideNav ***/ +// 15. Side Navigation +// ========================================================================== + +$sidenav-font-size: 14px !default; +$sidenav-font-color: rgba(0,0,0,.87) !default; $sidenav-bg-color: #fff !default; -$sidenav-padding-right: 15px !default; +$sidenav-padding: 16px !default; +$sidenav-item-height: 48px !default; +$sidenav-line-height: $sidenav-item-height !default; + + +// 16. Photo Slider +// ========================================================================== -/*** Photo Slider ***/ $slider-bg-color: color('grey', 'base') !default; $slider-bg-color-light: color('grey', 'lighten-2') !default; $slider-indicator-color: color('green', 'base') !default; -/*** Tabs ***/ + +// 17. Spinners | Loaders +// ========================================================================== + +$spinner-default-color: $secondary-color !default; + + +// 18. Tabs +// ========================================================================== + $tabs-underline-color: $primary-color-light !default; $tabs-text-color: $primary-color !default; $tabs-bg-color: #fff !default; -/*** Tables ***/ + +// 19. Tables +// ========================================================================== + $table-border-color: #d0d0d0 !default; $table-striped-color: #f2f2f2 !default; -/*** Toasts ***/ + +// 20. Toasts +// ========================================================================== + $toast-height: 48px !default; $toast-color: #323232 !default; $toast-text-color: #fff !default; +$toast-action-color: #eeff41; + + +// 21. Typography +// ========================================================================== -/*** Typography ***/ $off-black: rgba(0, 0, 0, 0.87) !default; // Header Styles $h1-fontsize: 4.2rem !default; @@ -133,20 +307,37 @@ $h4-fontsize: 2.28rem !default; $h5-fontsize: 1.64rem !default; $h6-fontsize: 1rem !default; -// Footer + +// 22. Footer +// ========================================================================== + +$footer-font-color: #fff !default; $footer-bg-color: $primary-color !default; +$footer-copyright-font-color: rgba(255,255,255,.8) !default; +$footer-copyright-bg-color: rgba(51,51,51,.08) !default; + + +// 23. Flow Text +// ========================================================================== -// Flowtext $range : $large-screen - $small-screen !default; $intervals: 20 !default; $interval-size: $range / $intervals !default; -/*** Collections ***/ + +// 24. Collections +// ========================================================================== + $collection-border-color: #e0e0e0 !default; $collection-bg-color: #fff !default; $collection-active-bg-color: $secondary-color !default; $collection-active-color: lighten($secondary-color, 55%) !default; $collection-hover-bg-color: #ddd !default; +$collection-link-color: $secondary-color !default; +$collection-line-height: 1.5rem !default; + + +// 25. Progress Bar +// ========================================================================== -/* Progress Bar */ $progress-bar-color: $secondary-color !default; diff --git a/sass/components/_waves.scss b/sass/components/_waves.scss index 7a8e8c075e..5a3229b2a9 100644 --- a/sass/components/_waves.scss +++ b/sass/components/_waves.scss @@ -10,158 +10,105 @@ .waves-effect { + position: relative; + cursor: pointer; + display: inline-block; + overflow: hidden; + user-select: none; + -webkit-tap-highlight-color: transparent; + vertical-align: middle; + z-index: 1; + transition: .3s ease-out; + + .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top:-10px; + margin-left:-10px; + opacity: 0; + + background: rgba(0,0,0,0.2); + transition: all 0.7s ease-out; + transition-property: transform, opacity; + transform: scale(0); + pointer-events: none; + } + + // Waves Colors + &.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45); + } + &.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, .70); + } + &.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, .70); + } + &.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, .70); + } + &.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.70); + } + &.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.70); + } + &.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.70); + } + + // Style input button bug. + input[type="button"], input[type="reset"], input[type="submit"] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none; + } + + img { position: relative; - cursor: pointer; - display: inline-block; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: transparent; - // white-space: nowrap; - // outline: 0; - - vertical-align: middle; - // cursor: pointer; - // border: none; - // outline: none; - // color: inherit; - // background-color: rgba(0, 0, 0, 0); - // font-size: 1em; - // line-height:1em; - // text-align: center; - // text-decoration: none; - z-index: 1; - will-change: opacity, transform; - @include transition(all .3s ease-out); - - .waves-ripple { - position: absolute; - border-radius: 50%; - width: 20px; - height: 20px; - margin-top:-10px; - margin-left:-10px; - opacity: 0; - - background: rgba(0,0,0,0.2); - // $gradient: rgba(0,0,0,0.2) 0,rgba(0,0,0,.3) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.5) 60%,rgba(255,255,255,0) 70%; - // background: -webkit-radial-gradient($gradient); - // background: -o-radial-gradient($gradient); - // background: -moz-radial-gradient($gradient); - // background: radial-gradient($gradient); - @include transition(all 0.7s ease-out); - -webkit-transition-property: -webkit-transform, opacity; - -moz-transition-property: -moz-transform, opacity; - -o-transition-property: -o-transform, opacity; - transition-property: transform, opacity; - @include transform(scale(0)); - pointer-events: none; - } - - // Waves Colors - &.waves-light .waves-ripple { - background-color: rgba(255, 255, 255, 0.45); - } - - &.waves-red .waves-ripple { - background-color: rgba(244, 67, 54, .70); - } - &.waves-yellow .waves-ripple { - background-color: rgba(255, 235, 59, .70); - } - &.waves-orange .waves-ripple { - background-color: rgba(255, 152, 0, .70); - } - &.waves-purple .waves-ripple { - background-color: rgba(156, 39, 176, 0.70); - } - &.waves-green .waves-ripple { - background-color: rgba(76, 175, 80, 0.70); - } - &.waves-teal .waves-ripple { - background-color: rgba(0, 150, 136, 0.70); - } - + z-index: -1; + } } .waves-notransition { - @include transition(none #{"!important"}); + transition: none #{"!important"}; } .waves-circle { - @include transform(translateZ(0)); - -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); } -// .waves-button, -// .waves-button:hover, -// .waves-button:visited, -// .waves-button-input { -// white-space: nowrap; -// vertical-align: middle; -// cursor: pointer; -// border: none; -// outline: none; -// color: inherit; -// background-color: rgba(0, 0, 0, 0); -// font-size: 1em; -// line-height:1em; -// text-align: center; -// text-decoration: none; -// z-index: 1; -// } - -// .waves-button { -// padding: 0.85em 1.1em; -// border-radius: 0.2em; -// } - -// .waves-button-input { -// margin: 0; -// padding: 0.85em 1.1em; -// } - .waves-input-wrapper { - border-radius: 0.2em; - vertical-align: bottom; - - // &.waves-button { - // padding: 0; - // } + border-radius: 0.2em; + vertical-align: bottom; - .waves-button-input { - position: relative; - top: 0; - left: 0; - z-index: 1; - } + .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; + } } .waves-circle { - text-align: center; - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - border-radius: 50%; - -webkit-mask-image: none; + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; + -webkit-mask-image: none; } -// .waves-float { - // -webkit-mask-image: none; - // @include box-shadow(0px 1px 1.5px 1px rgba(0, 0, 0, 0.12)); - - // &:active { - // @include box-shadow(0px 8px 20px 1px rgba(0, 0, 0, 0.30)); -// } -// } - .waves-block { - display: block; + display: block; } /* Firefox Bug: link not triggered */ -a.waves-effect .waves-ripple { - z-index: -1; +.waves-effect .waves-ripple { + z-index: -1; } \ No newline at end of file diff --git a/sass/components/date_picker/_default.date.scss b/sass/components/date_picker/_default.date.scss old mode 100755 new mode 100644 index 1cd0f933af..efbe5b255d --- a/sass/components/date_picker/_default.date.scss +++ b/sass/components/date_picker/_default.date.scss @@ -5,7 +5,9 @@ * The picker box. */ .picker__box { - padding: 0 1em; + padding: 0; + border-radius: 2px; + overflow: hidden; } /** * The header containing the month and year stuff. @@ -46,7 +48,7 @@ .picker__select--year.browser-default { display: inline; background-color: #FFFFFF; - width: 25%; + width: 26%; } .picker__select--month:focus, .picker__select--year:focus { @@ -209,7 +211,7 @@ // Circle background border-radius: 50%; - @include transform(scale(.75)); + transform: scale(.75); background: #0089ec; color: #ffffff; } @@ -229,10 +231,7 @@ * The footer containing the "today", "clear", and "close" buttons. */ .picker__footer { - text-align: center; - display: flex; - align-items: center; - justify-content: space-between; + text-align: right; } .picker__button--today, .picker__button--clear, @@ -306,19 +305,31 @@ /* ========================================================================== CUSTOM MATERIALIZE STYLES ========================================================================== */ -.picker__box { +/*.picker__box { border-radius: 2px; overflow: hidden; -} +}*/ .picker__date-display { - text-align: center; + text-align: left; background-color: $datepicker-date-bg; color: #fff; - padding-bottom: 15px; + padding: 18px; font-weight: 300; } +@media only screen and (min-width: 601px) { + .picker__date-display { + flex:1; + } + .picker__weekday-display { + display:block; + } + .picker__container__wrapper { + flex:2 + } +} + .picker__nav--prev:hover, .picker__nav--next:hover { cursor: pointer; @@ -327,31 +338,31 @@ } .picker__weekday-display { - background-color: $datepicker-weekday-bg; - padding: 10px; - font-weight: 200; - letter-spacing: .5; - font-size: 1rem; - margin-bottom: 15px; + font-weight: 500; + font-size: $datepicker-display-font-size; + margin-right: 5px; + margin-top: 4px; } .picker__month-display { - text-transform: uppercase; - font-size: 2rem; + //text-transform: uppercase; + font-size: $datepicker-display-font-size; + font-weight: 500; } .picker__day-display { - - font-size: 4.5rem; - font-weight: 400; + font-size: $datepicker-display-font-size; + font-weight: 500; + margin-right: 5px; } .picker__year-display { - font-size: 1.8rem; + font-size: 1.5rem; + font-weight: 500; color: $datepicker-year; } -.picker__box { +/*.picker__box { padding: 0; -} +}*/ .picker__calendar-container { padding: 0 1rem; @@ -367,12 +378,18 @@ } .picker__day--infocus { - color: #595959; - letter-spacing: -.3; - padding: .75rem 0; + color: $datepicker-weekday-color; + letter-spacing: -.3px; + padding: 0.75rem 0; font-weight: 400; border: 1px solid transparent; } +@media only screen and (min-width: 601px) { + .picker__day--infocus { + padding: 1.1rem 0; + } +} + //Today style .picker__day.picker__day--today { @@ -394,7 +411,7 @@ .picker--focused .picker__day--selected { // Circle background border-radius: 50%; - @include transform(scale(.9)); + transform: scale(.9); background-color: $datepicker-selected; &.picker__day--outfocus { background-color: $datepicker-selected-outfocus; @@ -408,11 +425,15 @@ } // Materialize modified -.picker__close, .picker__today { +.picker__close, .picker__today, .picker__clear { font-size: 1.1rem; padding: 0 1rem; color: $datepicker-selected; } +.picker__clear { + color:#f44336; + float:left; +} //month nav buttons .picker__nav--prev:before, diff --git a/sass/components/date_picker/_default.scss b/sass/components/date_picker/_default.scss old mode 100755 new mode 100644 index d96395f186..11f9125b29 --- a/sass/components/date_picker/_default.scss +++ b/sass/components/date_picker/_default.scss @@ -15,6 +15,7 @@ -moz-user-select: none; -ms-user-select: none; user-select: none; + outline: none; } /** * The picker input element. @@ -173,7 +174,7 @@ @media (min-height: 35.875em) { .picker--opened .picker__frame { top: 10%; - bottom: 20%auto; + bottom: auto; } } /** @@ -198,4 +199,14 @@ top: 10%; bottom: auto; } -} \ No newline at end of file +} + +@media only screen and (min-width: 601px) { + .picker__box { + display:flex; + } + .picker__frame { + width: 80%; + max-width:600px; + } +} diff --git a/sass/components/date_picker/_default.time.scss b/sass/components/date_picker/_default.time.scss old mode 100755 new mode 100644 index 0b159c88a7..f45df73f18 --- a/sass/components/date_picker/_default.time.scss +++ b/sass/components/date_picker/_default.time.scss @@ -13,11 +13,11 @@ * The times on the clock. */ .picker__list-item { - border-bottom: 1px solid #dddddd; - border-top: 1px solid #dddddd; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; margin-bottom: -1px; position: relative; - background: #ffffff; + background: #fff; padding: .75em 1.25em; } @media (min-height: 46.75em) { @@ -28,7 +28,7 @@ /* Hovered time */ .picker__list-item:hover { cursor: pointer; - color: #000000; + color: #000; background: #b1dcfb; border-color: #0089ec; z-index: 10; @@ -41,7 +41,7 @@ .picker__list-item--highlighted:hover, .picker--focused .picker__list-item--highlighted { cursor: pointer; - color: #000000; + color: #000; background: #b1dcfb; } /* Selected and hovered/focused time */ @@ -49,7 +49,7 @@ .picker__list-item--selected:hover, .picker--focused .picker__list-item--selected { background: #0089ec; - color: #ffffff; + color: #fff; z-index: 10; } /* Disabled time */ @@ -58,9 +58,9 @@ .picker--focused .picker__list-item--disabled { background: #f5f5f5; border-color: #f5f5f5; - color: #dddddd; + color: #ddd; cursor: default; - border-color: #dddddd; + border-color: #ddd; z-index: auto; } /** @@ -77,27 +77,27 @@ font-size: .67em; text-align: center; text-transform: uppercase; - color: #666; + color: $timepicker-clock-color; } .picker--time .picker__button--clear:hover, .picker--time .picker__button--clear:focus { - color: #000000; + color: #000; background: #b1dcfb; background: #ee2200; border-color: #ee2200; cursor: pointer; - color: #ffffff; + color: #fff; outline: none; } .picker--time .picker__button--clear:before { top: -0.25em; - color: #666; + color: $timepicker-clock-color; font-size: 1.25em; font-weight: bold; } .picker--time .picker__button--clear:hover:before, .picker--time .picker__button--clear:focus:before { - color: #ffffff; + color: #fff; } /* ========================================================================== @@ -123,3 +123,145 @@ margin-bottom: 5em; } } + +/* ========================================================================== + $DEFAULT-TIME-PICKER + ========================================================================== */ +.clockpicker-display { + font-size: 4rem; + font-weight: bold; + text-align: center; + color: rgba(255, 255, 255, 0.6); + font-weight: 400; + clear: both; + position: relative; +} + +.clockpicker-span-am-pm { + font-size: 1.3rem; + position: absolute; + right: 1rem; + bottom: 0.3rem; + line-height: 2rem; + font-weight: 500; +} +@media only screen and (min-width: 601px) { + .clockpicker-display { + top: 32%; + } + .clockpicker-span-am-pm { + position: relative; + right: auto; + bottom: auto; + text-align: center; + margin-top: 1.2rem; + } +} + + +.text-primary{ + color: rgba(255, 255, 255, 1) +} +.clockpicker-span-hours { + margin-right: 3px; +} +.clockpicker-span-minutes { + margin-left: 3px; +} + +.clockpicker-span-hours, +.clockpicker-span-minutes, +.clockpicker-span-am-pm div { + cursor: pointer; +} +.clockpicker-moving { + cursor: move; +} +.clockpicker-plate { + background-color: $timepicker-clock-plate-bg; + border-radius: 50%; + width: 270px; + height: 270px; + overflow: visible; + position: relative; + margin: auto; + margin-top: 25px; + margin-bottom: 5px; + user-select: none; +} +.clockpicker-canvas, +.clockpicker-dial { + width: 270px; + height: 270px; + position: absolute; + left: -1px; + top: -1px; +} +.clockpicker-minutes { + visibility: hidden; +} +.clockpicker-tick { + border-radius: 50%; + color: $timepicker-clock-color; + line-height: 40px; + text-align: center; + width: 40px; + height: 40px; + position: absolute; + cursor: pointer; +} +.clockpicker-tick.active, +.clockpicker-tick:hover { + background-color: transparentize($secondary-color, .75); +} +.clockpicker-dial { + -webkit-transition: -webkit-transform 350ms, opacity 350ms; + -moz-transition: -moz-transform 350ms, opacity 350ms; + -ms-transition: -ms-transform 350ms, opacity 350ms; + -o-transition: -o-transform 350ms, opacity 350ms; + transition: transform 350ms, opacity 350ms; +} +.clockpicker-dial-out { + opacity: 0; +} +.clockpicker-hours.clockpicker-dial-out { + -webkit-transform: scale(1.2, 1.2); + -moz-transform: scale(1.2, 1.2); + -ms-transform: scale(1.2, 1.2); + -o-transform: scale(1.2, 1.2); + transform: scale(1.2, 1.2); +} +.clockpicker-minutes.clockpicker-dial-out { + -webkit-transform: scale(.8, .8); + -moz-transform: scale(.8, .8); + -ms-transform: scale(.8, .8); + -o-transform: scale(.8, .8); + transform: scale(.8, .8); +} +.clockpicker-canvas { + -webkit-transition: opacity 175ms; + -moz-transition: opacity 175ms; + -ms-transition: opacity 175ms; + -o-transition: opacity 175ms; + transition: opacity 175ms; +} +.clockpicker-canvas-out { + opacity: 0.25; +} +.clockpicker-canvas-bearing { + stroke: none; + fill: $secondary-color; +} +.clockpicker-canvas-bg { + stroke: none; + fill: $secondary-color; +} +.clockpicker-canvas-bg-trans { + fill: $secondary-color; +} +.clockpicker-canvas line { + stroke: $secondary-color; + stroke-width: 4; + stroke-linecap: round; + /*shape-rendering: crispEdges;*/ +} diff --git a/sass/components/forms/_checkboxes.scss b/sass/components/forms/_checkboxes.scss new file mode 100644 index 0000000000..e24d49a1f6 --- /dev/null +++ b/sass/components/forms/_checkboxes.scss @@ -0,0 +1,210 @@ +/* Checkboxes + ========================================================================== */ + +/* CUSTOM CSS CHECKBOXES */ +form p { + margin-bottom: 10px; + text-align: left; +} + +form p:last-child { + margin-bottom: 0; +} + +/* Remove default checkbox */ +[type="checkbox"]:not(:checked), +[type="checkbox"]:checked { + position: absolute; + opacity: 0; + pointer-events: none; +} + +// Checkbox Styles +[type="checkbox"] { + // Text Label Style + + label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + user-select: none; + } + + /* checkbox aspect */ + + label:before, + &:not(.filled-in) + label:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + z-index: 0; + border: 2px solid $radio-empty-color; + border-radius: 1px; + margin-top: 2px; + transition: .2s; + } + + &:not(.filled-in) + label:after { + border: 0; + transform: scale(0); + } + + &:not(:checked):disabled + label:before { + border: none; + background-color: $input-disabled-color; + } + + // Focused styles + &.tabbed:focus + label:after { + transform: scale(1); + border: 0; + border-radius: 50%; + box-shadow: 0 0 0 10px rgba(0,0,0,.1); + background-color: rgba(0,0,0,.1); + } +} + +[type="checkbox"]:checked { + + label:before { + top: -4px; + left: -5px; + width: 12px; + height: 22px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: $radio-border; + border-bottom: $radio-border; + transform: rotate(40deg); + backface-visibility: hidden; + transform-origin: 100% 100%; + } + + &:disabled + label:before { + border-right: 2px solid $input-disabled-color; + border-bottom: 2px solid $input-disabled-color; + } +} + +/* Indeterminate checkbox */ +[type="checkbox"]:indeterminate { + +label:before { + top: -11px; + left: -12px; + width: 10px; + height: 22px; + border-top: none; + border-left: none; + border-right: $radio-border; + border-bottom: none; + transform: rotate(90deg); + backface-visibility: hidden; + transform-origin: 100% 100%; + } + + // Disabled indeterminate + &:disabled + label:before { + border-right: 2px solid $input-disabled-color; + background-color: transparent; + } +} + +// Filled in Style +[type="checkbox"].filled-in { + // General + + label:after { + border-radius: 2px; + } + + + label:before, + + label:after { + content: ''; + left: 0; + position: absolute; + /* .1s delay is for check animation */ + transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + z-index: 1; + } + + // Unchecked style + &:not(:checked) + label:before { + width: 0; + height: 0; + border: 3px solid transparent; + left: 6px; + top: 10px; + transform: rotateZ(37deg); + transform-origin: 100% 100%; + } + + &:not(:checked) + label:after { + height: 20px; + width: 20px; + background-color: transparent; + border: 2px solid $radio-empty-color; + top: 0px; + z-index: 0; + } + + // Checked style + &:checked { + + label:before { + top: 0; + left: 1px; + width: 8px; + height: 13px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid $input-background; + border-bottom: 2px solid $input-background; + transform: rotateZ(37deg); + transform-origin: 100% 100%; + } + + + label:after { + top: 0; + width: 20px; + height: 20px; + border: 2px solid $secondary-color; + background-color: $secondary-color; + z-index: 0; + } + } + + // Focused styles + &.tabbed:focus + label:after { + border-radius: 2px; + border-color: $radio-empty-color; + background-color: rgba(0,0,0,.1); + } + + &.tabbed:checked:focus + label:after { + border-radius: 2px; + background-color: $secondary-color; + border-color: $secondary-color; + } + + // Disabled style + &:disabled:not(:checked) + label:before { + background-color: transparent; + border: 2px solid transparent; + } + + &:disabled:not(:checked) + label:after { + border-color: transparent; + background-color: $input-disabled-solid-color; + } + + &:disabled:checked + label:before { + background-color: transparent; + } + + &:disabled:checked + label:after { + background-color: $input-disabled-solid-color; + border-color: $input-disabled-solid-color; + } +} diff --git a/sass/components/forms/_file-input.scss b/sass/components/forms/_file-input.scss new file mode 100644 index 0000000000..e2becc9473 --- /dev/null +++ b/sass/components/forms/_file-input.scss @@ -0,0 +1,44 @@ +/* File Input + ========================================================================== */ + +.file-field { + position: relative; + + .file-path-wrapper { + overflow: hidden; + padding-left: 10px; + } + + input.file-path { width: 100%; } + + .btn { + float: left; + height: $input-height; + line-height: $input-height; + } + + span { + cursor: pointer; + } + + input[type=file] { + + // Needed to override webkit button + &::-webkit-file-upload-button { + display: none; + } + + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + width: 100%; + margin: 0; + padding: 0; + font-size: 20px; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0); + } +} diff --git a/sass/components/forms/_forms.scss b/sass/components/forms/_forms.scss new file mode 100644 index 0000000000..e9b65b43a3 --- /dev/null +++ b/sass/components/forms/_forms.scss @@ -0,0 +1,22 @@ +// Remove Focus Boxes +select:focus { + outline: $select-focus; +} + +button:focus { + outline: none; + background-color: $button-background-focus; +} + +label { + font-size: $label-font-size; + color: $input-border-color; +} + +@import 'input-fields'; +@import 'radio-buttons'; +@import 'checkboxes'; +@import 'switches'; +@import 'select'; +@import 'file-input'; +@import 'range'; diff --git a/sass/components/forms/_input-fields.scss b/sass/components/forms/_input-fields.scss new file mode 100644 index 0000000000..45689d4edc --- /dev/null +++ b/sass/components/forms/_input-fields.scss @@ -0,0 +1,333 @@ +/* Text Inputs + Textarea + ========================================================================== */ + +/* Style Placeholders */ + +::placeholder { + color: $placeholder-text-color; +} + +/* Text inputs */ + +input:not([type]), +input[type=text]:not(.browser-default), +input[type=password]:not(.browser-default), +input[type=email]:not(.browser-default), +input[type=url]:not(.browser-default), +input[type=time]:not(.browser-default), +input[type=date]:not(.browser-default), +input[type=datetime]:not(.browser-default), +input[type=datetime-local]:not(.browser-default), +input[type=tel]:not(.browser-default), +input[type=number]:not(.browser-default), +input[type=search]:not(.browser-default), +textarea.materialize-textarea { + + // General Styles + background-color: transparent; + border: none; + border-bottom: $input-border; + border-radius: 0; + outline: none; + height: $input-height; + width: 100%; + font-size: $input-font-size; + margin: $input-margin; + padding: $input-padding; + box-shadow: none; + box-sizing: content-box; + transition: $input-transition; + + // Disabled input style + &:disabled, + &[readonly="readonly"] { + color: $input-disabled-color; + border-bottom: $input-disabled-border; + } + + // Disabled label style + &:disabled+label, + &[readonly="readonly"]+label { + color: $input-disabled-color; + } + + // Focused input style + &:focus:not([readonly]) { + border-bottom: 1px solid $input-focus-color; + box-shadow: 0 1px 0 0 $input-focus-color; + } + + // Focused label style + &:focus:not([readonly])+label { + color: $input-focus-color; + } + + // Valid Input Style + &.valid, + &:focus.valid { + @extend %valid-input-style; + } + + // Custom Success Message + &.valid + label:after, + &:focus.valid + label:after { + @extend %custom-success-message; + } + + // Invalid Input Style + &.invalid, + &:focus.invalid { + @extend %invalid-input-style; + } + + // Custom Error message + &.invalid + label:after, + &:focus.invalid + label:after { + @extend %custom-error-message; + } + + // Full width label when using validate for error messages + &.validate + label { + width: 100%; + } + + // Form Message Shared Styles + & + label:after { + @extend %input-after-style; + } + + // TODO: Remove once input fields are reworked to support validation messages better + &.invalid + label:after, + &.valid + label:after{ + display: none; + } + + &.invalid + label.active:after, + &.valid + label.active:after{ + display: block; + } +} + + +/* Validation Sass Placeholders */ +%valid-input-style { + border-bottom: 1px solid $input-success-color; + box-shadow: 0 1px 0 0 $input-success-color; +} +%invalid-input-style { + border-bottom: $input-invalid-border; + box-shadow: 0 1px 0 0 $input-error-color; +} +%custom-success-message { + content: attr(data-success); + color: $input-success-color; + opacity: 1; + transform: translateY(9px); +} +%custom-error-message { + content: attr(data-error); + color: $input-error-color; + opacity: 1; + transform: translateY(9px); +} +%input-after-style { + display: block; + content: ""; + position: absolute; + top: 100%; + left: 0; + opacity: 0; + transition: .2s opacity ease-out, .2s color ease-out; +} + + +// Styling for input field wrapper +.input-field { + // Inline styles + &.inline { + display: inline-block; + vertical-align: middle; + margin-left: 5px; + + input, + .select-dropdown { + margin-bottom: 1rem; + } + } + + // Gutter spacing + &.col { + label { + left: $gutter-width / 2; + } + + .prefix ~ label, + .prefix ~ .validate ~ label { + width: calc(100% - 3rem - #{$gutter-width}); + } + } + + position: relative; + margin-top: 1rem; + + label { + color: $input-border-color; + position: absolute; + top: 0; + left: 0; + height: 100%; + font-size: 1rem; + cursor: text; + transition: transform .2s ease-out; + transform-origin: 0% 100%; + text-align: initial; + transform: translateY(12px); + pointer-events: none; + + &:not(.label-icon).active { + transform: translateY(-14px) scale(.8); + transform-origin: 0 0; + } + } + + // Prefix Icons + .prefix { + position: absolute; + width: $input-height; + font-size: 2rem; + transition: color .2s; + + &.active { color: $input-focus-color; } + } + + .prefix ~ input, + .prefix ~ textarea, + .prefix ~ label, + .prefix ~ .validate ~ label, + .prefix ~ .autocomplete-content { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); + } + + .prefix ~ label { margin-left: 3rem; } + + @media #{$medium-and-down} { + .prefix ~ input { + width: 86%; + width: calc(100% - 3rem); + } + } + + @media #{$small-and-down} { + .prefix ~ input { + width: 80%; + width: calc(100% - 3rem); + } + } +} + + +/* Search Field */ + +.input-field input[type=search] { + display: block; + line-height: inherit; + + .nav-wrapper & { + height: inherit; + padding-left: 4rem; + width: calc(100% - 4rem); + border: 0; + box-shadow: none; + } + + &:focus { + background-color: $input-background; + border: 0; + box-shadow: none; + color: #444; + + & + label i, + & ~ .mdi-navigation-close, + & ~ .material-icons { + color: #444; + } + } + + & + label { + left: 1rem; + } + + & ~ .mdi-navigation-close, + & ~ .material-icons { + position: absolute; + top: 0; + right: 1rem; + color: transparent; + cursor: pointer; + font-size: 2rem; + transition: .3s color; + } +} + + +/* Textarea */ + +// Default textarea +textarea { + width: 100%; + height: $input-height; + background-color: transparent; + + &.materialize-textarea { + // Fixes validation messages for dynamic textareas + &.validate + label { + &::after { + top: calc(100% - 12px); + } + &:not(.label-icon).active { + transform: translateY(-25px); + } + height: 100%; + } + + overflow-y: hidden; /* prevents scroll bar flash */ + padding: .8rem 0 1.6rem 0; /* prevents text jump on Enter keypress */ + resize: none; + min-height: $input-height; + } +} + +// For textarea autoresize +.hiddendiv { + display: none; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */ + padding-top: 1.2rem; /* prevents text jump on Enter keypress */ + + // Reduces repaints + position: absolute; + top: 0; +} + + +/* Autocomplete */ +.autocomplete-content { + margin-top: -1 * $input-margin-bottom; + margin-bottom: $input-margin-bottom; + display: block; + opacity: 1; + position: static; + + li { + .highlight { color: #444; } + + img { + height: $dropdown-item-height - 10; + width: $dropdown-item-height - 10; + margin: 5px 15px; + } + } +} diff --git a/sass/components/forms/_radio-buttons.scss b/sass/components/forms/_radio-buttons.scss new file mode 100644 index 0000000000..72842c88c6 --- /dev/null +++ b/sass/components/forms/_radio-buttons.scss @@ -0,0 +1,115 @@ +/* Radio Buttons + ========================================================================== */ + +// Remove default Radio Buttons +[type="radio"]:not(:checked), +[type="radio"]:checked { + position: absolute; + opacity: 0; + pointer-events: none; +} + +[type="radio"]:not(:checked) + label, +[type="radio"]:checked + label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + transition: .28s ease; + user-select: none; +} + +[type="radio"] + label:before, +[type="radio"] + label:after { + content: ''; + position: absolute; + left: 0; + top: 0; + margin: 4px; + width: 16px; + height: 16px; + z-index: 0; + transition: .28s ease; +} + +/* Unchecked styles */ +[type="radio"]:not(:checked) + label:before, +[type="radio"]:not(:checked) + label:after, +[type="radio"]:checked + label:before, +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { + border-radius: 50%; +} + +[type="radio"]:not(:checked) + label:before, +[type="radio"]:not(:checked) + label:after { + border: 2px solid $radio-empty-color; +} + +[type="radio"]:not(:checked) + label:after { + transform: scale(0); +} + +/* Checked styles */ +[type="radio"]:checked + label:before { + border: 2px solid transparent; +} + +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:before, +[type="radio"].with-gap:checked + label:after { + border: $radio-border; +} + +[type="radio"]:checked + label:after, +[type="radio"].with-gap:checked + label:after { + background-color: $radio-fill-color; +} + +[type="radio"]:checked + label:after { + transform: scale(1.02); +} + +/* Radio With gap */ +[type="radio"].with-gap:checked + label:after { + transform: scale(.5); +} + +/* Focused styles */ +[type="radio"].tabbed:focus + label:before { + box-shadow: 0 0 0 10px rgba(0,0,0,.1); +} + +/* Disabled Radio With gap */ +[type="radio"].with-gap:disabled:checked + label:before { + border: 2px solid $input-disabled-color; +} + +[type="radio"].with-gap:disabled:checked + label:after { + border: none; + background-color: $input-disabled-color; +} + +/* Disabled style */ +[type="radio"]:disabled:not(:checked) + label:before, +[type="radio"]:disabled:checked + label:before { + background-color: transparent; + border-color: $input-disabled-color; +} + +[type="radio"]:disabled + label { + color: $input-disabled-color; +} + +[type="radio"]:disabled:not(:checked) + label:before { + border-color: $input-disabled-color; +} + +[type="radio"]:disabled:checked + label:after { + background-color: $input-disabled-color; + border-color: $input-disabled-solid-color; +} diff --git a/sass/components/forms/_range.scss b/sass/components/forms/_range.scss new file mode 100644 index 0000000000..92cda2bf29 --- /dev/null +++ b/sass/components/forms/_range.scss @@ -0,0 +1,160 @@ +/* Range + ========================================================================== */ + +.range-field { + position: relative; +} + +input[type=range], +input[type=range] + .thumb { + @extend .no-select; + cursor: pointer; +} + +input[type=range] { + position: relative; + background-color: transparent; + border: none; + outline: none; + width: 100%; + margin: 15px 0; + padding: 0; + + &:focus { + outline: none; + } +} + +input[type=range] + .thumb { + position: absolute; + top: 10px; + left: 0; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: $radio-fill-color; + margin-left: 7px; + + transform-origin: 50% 50%; + transform: rotate(-45deg); + + .value { + display: block; + width: 30px; + text-align: center; + color: $radio-fill-color; + font-size: 0; + transform: rotate(45deg); + } + + &.active { + border-radius: 50% 50% 50% 0; + + .value { + color: $input-background; + margin-left: -1px; + margin-top: 8px; + font-size: 10px; + } + } +} + +// WebKit +input[type=range] { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-runnable-track { + height: $track-height; + background: #c2c0c2; + border: none; +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: $range-height; + width: $range-width; + border-radius: 50%; + background-color: $radio-fill-color; + transform-origin: 50% 50%; + margin: -5px 0 0 0; + transition: .3s; +} + +input[type=range]:focus::-webkit-slider-runnable-track { + background: #ccc; +} + +// FireFox +input[type=range] { + /* fix for FF unable to apply focus style bug */ + border: 1px solid white; + + /*required for proper track sizing in FF*/ +} + +input[type=range]::-moz-range-track { + height: $track-height; + background: #ddd; + border: none; +} + +input[type=range]::-moz-range-thumb { + border: none; + height: $range-height; + width: $range-width; + border-radius: 50%; + background: $radio-fill-color; + margin-top: -5px; +} + +// hide the outline behind the border +input[type=range]:-moz-focusring { + outline: 1px solid #fff; + outline-offset: -1px; +} + +input[type=range]:focus::-moz-range-track { + background: #ccc; +} + +// IE 10+ +input[type=range]::-ms-track { + height: $track-height; + + // remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead + background: transparent; + + // leave room for the larger thumb to overflow with a transparent border */ + border-color: transparent; + border-width: 6px 0; + + /*remove default tick marks*/ + color: transparent; +} + +input[type=range]::-ms-fill-lower { + background: #777; +} + +input[type=range]::-ms-fill-upper { + background: #ddd; +} + +input[type=range]::-ms-thumb { + border: none; + height: $range-height; + width: $range-width; + border-radius: 50%; + background: $radio-fill-color; +} + +input[type=range]:focus::-ms-fill-lower { + background: #888; +} + +input[type=range]:focus::-ms-fill-upper { + background: #ccc; +} diff --git a/sass/components/forms/_select.scss b/sass/components/forms/_select.scss new file mode 100644 index 0000000000..5ba283aa01 --- /dev/null +++ b/sass/components/forms/_select.scss @@ -0,0 +1,182 @@ +/* Select Field + ========================================================================== */ + +select { display: none; } +select.browser-default { display: block; } + +select { + background-color: $select-background; + width: 100%; + padding: $select-padding; + border: $select-border; + border-radius: $select-radius; + height: $input-height; +} + + +.input-field { + & > select { + display: block; + position: absolute; + width: 0; + pointer-events: none; + height: 0; + top: 0; + left: 0; + opacity: 0; + } +} + +.select-label { + position: absolute; +} + +.select-wrapper { + &.valid { + & > input.select-dropdown { + @extend %valid-input-style; + } + + & + label:after { + @extend %custom-success-message; + } + } + + &.invalid { + & > input.select-dropdown { + @extend %invalid-input-style; + } + + & + label:after { + @extend %custom-error-message; + } + } + + &.valid + label, + &.invalid + label { + width: 100%; + pointer-events: none; + } + + & + label:after { + @extend %input-after-style; + } + + position: relative; + + input.select-dropdown { + position: relative; + cursor: pointer; + background-color: transparent; + border: none; + border-bottom: $input-border; + outline: none; + height: $input-height; + line-height: $input-height; + width: 100%; + font-size: $input-font-size; + margin: $input-margin; + padding: 0; + display: block; + user-select:none; + } + + span.caret { + color: initial; + position: absolute; + right: 0; + top: 0; + bottom: 0; + height: 10px; + margin: auto 0; + font-size: 10px; + line-height: 10px; + } + + & + label { + position: absolute; + top: -26px; + font-size: $label-font-size; + } +} + +// Disabled styles +select:disabled { + color: $input-disabled-color; +} + +.select-wrapper.disabled { + span.caret, + & + label { + color: $input-disabled-color; + } +} + +.select-wrapper input.select-dropdown:disabled { + color: $input-disabled-color; + cursor: default; + user-select: none; +} + +.select-wrapper i { + color: $select-disabled-color; +} + +.select-dropdown li.disabled, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { + color: $select-disabled-color; + background-color: transparent; +} + +.select-dropdown.dropdown-content { + li { + &.active { + background-color: transparent; + } + + &:hover { + background-color: $select-option-hover; + } + + &.selected { + background-color: $select-option-focus; + } + } +} + +// Prefix Icons +.prefix ~ .select-wrapper { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.prefix ~ label { margin-left: 3rem; } + +// Icons +.select-dropdown li { + img { + height: $dropdown-item-height - 10; + width: $dropdown-item-height - 10; + margin: 5px 15px; + float: right; + } +} + +// Optgroup styles +.select-dropdown li.optgroup { + border-top: 1px solid $dropdown-hover-bg-color; + + &.selected > span { + color: rgba(0, 0, 0, .7); + } + + & > span { + color: rgba(0, 0, 0, .4); + } + + & ~ li.optgroup-option { + padding-left: 1rem; + } +} diff --git a/sass/components/forms/_switches.scss b/sass/components/forms/_switches.scss new file mode 100644 index 0000000000..597677972a --- /dev/null +++ b/sass/components/forms/_switches.scss @@ -0,0 +1,89 @@ +/* Switch + ========================================================================== */ + +.switch, +.switch * { + -webkit-tap-highlight-color: transparent; + user-select: none; +} + +.switch label { + cursor: pointer; +} + +.switch label input[type=checkbox] { + opacity: 0; + width: 0; + height: 0; + + &:checked + .lever { + background-color: $switch-checked-lever-bg; + + &:before, &:after { + left: 18px; + } + + &:after { + background-color: $switch-bg-color; + } + } +} + +.switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 36px; + height: 14px; + background-color: $switch-unchecked-lever-bg; + border-radius: $switch-radius; + margin-right: 10px; + transition: background 0.3s ease; + vertical-align: middle; + margin: 0 16px; + + &:before, &:after { + content: ""; + position: absolute; + display: inline-block; + width: 20px; + height: 20px; + border-radius: 50%; + left: 0; + top: -3px; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease; + } + + &:before { + background-color: transparentize($switch-bg-color, .85); + } + + &:after { + background-color: $switch-unchecked-bg; + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); + } +} + +// Switch active style +input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before { + transform: scale(2.4); + background-color: transparentize($switch-bg-color, .85); +} + +input[type=checkbox]:not(:disabled) ~ .lever:active:before, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before { + transform: scale(2.4); + background-color: rgba(0,0,0,.08); +} + +// Disabled Styles +.switch input[type=checkbox][disabled] + .lever { + cursor: default; + background-color: rgba(0,0,0,.12); +} + +.switch label input[type=checkbox][disabled] + .lever:after, +.switch label input[type=checkbox][disabled]:checked + .lever:after { + background-color: $input-disabled-solid-color; +} diff --git a/sass/ghpages-materialize.scss b/sass/ghpages-materialize.scss index 8c1e1d24ee..b7ac59f71b 100644 --- a/sass/ghpages-materialize.scss +++ b/sass/ghpages-materialize.scss @@ -4,4 +4,4 @@ @import "materialize"; // Custom style -@import "style.scss"; +@import "style"; diff --git a/sass/materialize.scss b/sass/materialize.scss index ce5899e6ad..f1fe3eca49 100644 --- a/sass/materialize.scss +++ b/sass/materialize.scss @@ -1,8 +1,6 @@ @charset "UTF-8"; -// Mixins -@import "components/prefixer"; -@import "components/mixins"; +// Colors @import "components/color"; // Variables; @@ -13,11 +11,13 @@ // components @import "components/global"; +@import "components/badges"; @import "components/icons-material-design"; @import "components/grid"; @import "components/navbar"; @import "components/roboto"; @import "components/typography"; +@import "components/transitions"; @import "components/cards"; @import "components/toast"; @import "components/tabs"; @@ -29,11 +29,14 @@ @import "components/collapsible"; @import "components/chips"; @import "components/materialbox"; -@import "components/form"; +@import "components/forms/forms"; @import "components/table_of_contents"; @import "components/sideNav"; @import "components/preloader"; @import "components/slider"; -@import "components/date_picker/default.scss"; -@import "components/date_picker/default.date.scss"; -@import "components/date_picker/default.time.scss"; \ No newline at end of file +@import "components/carousel"; +@import "components/tapTarget"; +@import "components/pulse"; +@import "components/date_picker/default"; +@import "components/date_picker/default.date"; +@import "components/date_picker/default.time"; diff --git a/scrollfire.html b/scrollfire.html deleted file mode 100644 index b1a6fa19ad..0000000000 --- a/scrollfire.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - - ScrollFire - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -

                        Introduction

                        -

                        ScrollFire is a jQuery Plugin that executes callback functions depending on how far into the page you've scrolled. We'll show you how you can use this plugin with many demos and examples.

                        -
                        - - -
                        -

                        jQuery Plugin Initialization

                        -
                        
                        -  var options = [
                        -    {selector: '.class', offset: 200, callback: 'globalFunction()' },
                        -    {selector: '.other-class', offset: 200, callback: 'globalFunction()' },
                        -  ];
                        -  Materialize.scrollFire(options);
                        -        
                        -
                        - -
                        -

                        jQuery Plugin Options

                        - - - - - - - - - - - - - - - - - - - - - - -
                        Option NameDescription
                        SelectorThe selector for the element that is being tracked.
                        OffsetIf this is 0, the callback will be fired when the selector element is at the very bottom of the user's window.
                        CallbackThis string is the function call that you want to make when the user scrolls to the threshold. It will only be called once.
                        -
                        - - -

                        ScrollFire Demo

                        -

                        Scroll through slowly to get sense of what ScrollFire can do for you. This is the ScrollFire code that we have used on this page.

                        -
                        -  
                        -  var options = [
                        -    {selector: '#staggered-test', offset: 50, callback: 'Materialize.toast("This is our ScrollFire Demo!", 1500 )' },
                        -    {selector: '#staggered-test', offset: 205, callback: 'Materialize.toast("Please continue scrolling!", 1500 )' },
                        -    {selector: '#staggered-test', offset: 400, callback: 'Materialize.showStaggeredList("#staggered-test")' },
                        -    {selector: '#image-test', offset: 500, callback: 'Materialize.fadeInImage("#image-test")' }
                        -  ];
                        -  Materialize.scrollFire(options);
                        -      
                        - - - - - -
                        - -
                        -
                        -
                        - - -
                        - -
                        -
                        - -
                        -
                        - - - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/scrollspy.html b/scrollspy.html deleted file mode 100644 index f808a920c4..0000000000 --- a/scrollspy.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - Scrollspy - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -

                        Introduction

                        -

                        Scrollspy is a jQuery plugin that tracks certain elements and which element the user's screen is currently centered on. Our main demo of this is our table of contents on every documentation page to the right. Clicking on these links will also scroll the page to that element.

                        -
                        - -
                        -

                        Table of Contents Structure

                        -
                        
                        -  <div class="row">
                        -    <div class="col s12 m9 l10">
                        -      <div id="introduction" class="section scrollspy">
                        -        <p>Content </p>
                        -      </div>
                        -
                        -      <div id="structure" class="section scrollspy">
                        -        <p>Content </p>
                        -      </div>
                        -
                        -      <div id="initialization" class="section scrollspy">
                        -        <p>Content </p>
                        -      </div>
                        -    </div>
                        -    <div class="col hide-on-small-only m3 l2">
                        -      <ul class="section table-of-contents">
                        -        <li><a href="#introduction">Introduction</a></li>
                        -        <li><a href="#structure">Structure</a></li>
                        -        <li><a href="#initialization">Intialization</a></li>
                        -      </ul>
                        -    </div>
                        -  </div>
                        -        
                        -
                        - - - -
                        -

                        jQuery Plugin Initialization

                        -
                        
                        -  $(document).ready(function(){
                        -    $('.scrollspy').scrollSpy();
                        -  });
                        -        
                        -
                        - -
                        - - -
                        -
                        -
                        - - -
                        - -
                        -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/shadow.html b/shadow.html deleted file mode 100644 index e0bb4a8f1e..0000000000 --- a/shadow.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - - Shadow - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -

                        In material design, everything should have a certain z-depth that determines how far raised or close to the page the element is.

                        -

                        You can easily apply this shadow effect by adding a class="z-depth-2" to an HTML tag. Alternatively you can extend any of these shadows with Sass using @extend .z-depth-2. A z-depth-0 can be used to remove shadows from elements that have z-depths by default.

                        -
                        -
                        -

                        -
                        -
                        -

                        -
                        -
                        -

                        -
                        -
                        -

                        -
                        -
                        -

                        -
                        -
                        -

                        -
                        -
                        -
                        
                        -    <div class="col s12 m2">
                        -      <p class="z-depth-1">z-depth-1</p>
                        -    </div>
                        -    <div class="col s12 m2">
                        -      <p class="z-depth-2">z-depth-2</p>
                        -    </div>
                        -    <div class="col s12 m2">
                        -      <p class="z-depth-3">z-depth-3</p>
                        -    </div>
                        -    <div class="col s12 m2">
                        -      <p class="z-depth-4">z-depth-4</p>
                        -    </div>
                        -    <div class="col s12 m2">
                        -      <p class="z-depth-5">z-depth-5</p>
                        -    </div>
                        -        
                        -
                        -
                        - -
                        -
                        -
                        - - -
                        -
                        - -
                        -
                        -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/showcase.html b/showcase.html deleted file mode 100644 index 7b7c5b4a7a..0000000000 --- a/showcase.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - - Showcase - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        -
                        -

                        - Submit your site -

                        - - -
                        -
                        - -
                        - -
                        -
                        - -
                        Close Heat
                        -
                        -
                        - -
                        Daniel Angel
                        -
                        -
                        - -
                        Stamplay
                        -
                        -
                        - -
                        - - -
                        - -
                        Straphq
                        -
                        -
                        - -
                        - - -
                        - -
                        Adbeus
                        -
                        -
                        - -
                        -
                        - -
                        Roboterwelt
                        -
                        -
                        - -
                        Joel Cox
                        -
                        - -
                        - -
                        -
                        - -
                        eadBox
                        -
                        -
                        - -
                        Webonise
                        -
                        -
                        - -
                        Kenya Apps
                        -
                        - -
                        - -
                        -
                        - -
                        DiskForYou
                        -
                        - -
                        - -
                        Lifeaweso.me
                        -
                        -
                        - -
                        -
                        - -
                        Mako
                        -
                        - -
                        - - - -
                        - - - - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/side-nav.html b/side-nav.html deleted file mode 100644 index b84f919fef..0000000000 --- a/side-nav.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - - SideNav - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -

                        Introduction

                        -

                        This is a slide out menu. You can add a dropdown to your sidebar by using our collapsible component. If you want to see a demo, our sidebar will use this on smaller screens. To use this in conjunction with a fullscreen navigation, you have to use two copies of the same UL.

                        -
                        - - -
                        -

                        HTML Structure

                        -
                        
                        -<nav>
                        -  <ul class="right hide-on-med-and-down">
                        -    <li><a href="#!">First Sidebar Link</a></li>
                        -    <li><a href="#!">Second Sidebar Link</a></li>
                        -  </ul>
                        -  <ul id="slide-out" class="side-nav">
                        -    <li><a href="#!">First Sidebar Link</a></li>
                        -    <li><a href="#!">Second Sidebar Link</a></li>
                        -  </ul>
                        -  <a href="#" data-activates="slide-out" class="button-collapse"><i class="mdi-navigation-menu"></i></a>
                        -</nav>
                        -        
                        - -
                        -

                        jQuery Plugin Initialization

                        -
                        
                        -  // Initialize collapse button
                        -  $(".button-collapse").sideNav();
                        -  // Initialize collapsible (uncomment the line below if you use the dropdown variation)
                        -  //$('.collapsible').collapsible();
                        -        
                        -
                        - - -
                        -

                        Options

                        -

                        You can customize the sideNav by setting your own width and the alignment of the menu.

                        -
                        
                        -  $('.button-collapse').sideNav({
                        -      menuWidth: 300, // Default is 240
                        -      edge: 'right', // Choose the horizontal origin
                        -      closeOnClick: true // Closes side-nav on <a> clicks, useful for Angular/Meteor
                        -    }
                        -  );
                        -      
                        -
                        - -
                        -

                        jQuery Plugin Methods

                        -

                        We have methods to show and hide your sidebar you can use to programmatically control your sidebar.

                        -
                        
                        -// Show sideNav
                        -$('.button-collapse').sideNav('show');
                        -// Hide sideNav
                        -$('.button-collapse').sideNav('hide');
                        -      
                        -
                        - - -
                        -

                        Variations

                        -

                        Dropdown HTML Structure

                        -
                        
                        -  <ul id="slide-out" class="side-nav">
                        -    <li><a href="#!">First Sidebar Link</a></li>
                        -    <li><a href="#!">Second Sidebar Link</a></li>
                        -    <li class="no-padding">
                        -      <ul class="collapsible collapsible-accordion">
                        -        <li>
                        -          <a class="collapsible-header">Dropdown<i class="mdi-navigation-arrow-drop-down"></i></a>
                        -          <div class="collapsible-body">
                        -            <ul>
                        -              <li><a href="#!">First</a></li>
                        -              <li><a href="#!">Second</a></li>
                        -              <li><a href="#!">Third</a></li>
                        -              <li><a href="#!">Fourth</a></li>
                        -            </ul>
                        -          </div>
                        -        </li>
                        -      </ul>
                        -    </li>
                        -  </ul>
                        -  <ul class="right hide-on-med-and-down">
                        -    <li><a href="#!">First Sidebar Link</a></li>
                        -    <li><a href="#!">Second Sidebar Link</a></li>
                        -    <li><a class="dropdown-button" href="#!" data-activates="dropdown1">Dropdown<i class="mdi-navigation-arrow-drop-down right"></i></a></li>
                        -    <ul id='dropdown1' class='dropdown-content'>
                        -      <li><a href="#!">First</a></li>
                        -      <li><a href="#!">Second</a></li>
                        -      <li><a href="#!">Third</a></li>
                        -      <li><a href="#!">Fourth</a></li>
                        -    </ul>
                        -  </ul>
                        -  <a href="#" data-activates="slide-out" class="button-collapse"><i class="mdi-navigation-menu"></i></a>
                        -        
                        - -

                        Fullscreen HTML Structure

                        -

                        If you want the menu to be accessible on all screensizes you just have to add a simple helper class show-on-large to the .button-collapse.

                        - -
                        
                        -  <ul id="slide-out" class="side-nav">
                        -    <li><a href="#!">First Sidebar Link</a></li>
                        -    <li><a href="#!">Second Sidebar Link</a></li>
                        -  </ul>
                        -  <a href="#" data-activates="slide-out" class="button-collapse show-on-large"><i class="mdi-navigation-menu"></i></a>
                        -        
                        - -

                        Fixed HTML Structure

                        -

                        Add the class fixed to have the sideNav be fixed and open on large screens and hides to the regular functionality on smaller screens. Our sideNav on the left is an example of this.

                        -
                        
                        -  <ul id="slide-out" class="side-nav fixed">
                        -    <li><a href="#!">First Sidebar Link</a></li>
                        -    <li><a href="#!">Second Sidebar Link</a></li>
                        -  </ul>
                        -  <a href="#" data-activates="slide-out" class="button-collapse"><i class="mdi-navigation-menu"></i></a>
                        -        
                        -

                        If you are planning on using this you will have to offset your content by the width of the side menu. Place the padding on where the offset content will be, which in our case is in header, main and footer.

                        -
                        
                        -  header, main, footer {
                        -    padding-left: 240px;
                        -  }
                        -
                        -  @media only screen and (max-width : 992px) {
                        -    header, main, footer {
                        -      padding-left: 0;
                        -    }
                        -  }
                        -        
                        -
                        -
                        - - -
                        - - - - - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/table.html b/table.html deleted file mode 100644 index aa4801d47f..0000000000 --- a/table.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - - - - Table - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - - -
                        -

                        Tables are a nice way to organize a lot of data. We provide a few utility classes to help you style your table as easily as possible. In addition, to improve mobile experience, all tables on mobile-screen widths are centered automatically.

                        -

                        Borderless Table

                        -
                        -
                        -

                        Tables are borderless by default.

                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        NameItem NameItem Price
                        AlvinEclair$0.87
                        AlanJellybean$3.76
                        JonathanLollipop$7.00
                        ShannonKitKat$9.99
                        -
                        -
                        -
                        
                        -      <table>
                        -        <thead>
                        -          <tr>
                        -              <th data-field="id">Name</th>
                        -              <th data-field="name">Item Name</th>
                        -              <th data-field="price">Item Price</th>
                        -          </tr>
                        -        </thead>
                        -
                        -        <tbody>
                        -          <tr>
                        -            <td>Alvin</td>
                        -            <td>Eclair</td>
                        -            <td>$0.87</td>
                        -          </tr>
                        -          <tr>
                        -            <td>Alan</td>
                        -            <td>Jellybean</td>
                        -            <td>$3.76</td>
                        -          </tr>
                        -          <tr>
                        -            <td>Jonathan</td>
                        -            <td>Lollipop</td>
                        -            <td>$7.00</td>
                        -          </tr>
                        -        </tbody>
                        -      </table>
                        -            
                        -
                        -
                        -
                        - -
                        -

                        Bordered Table

                        -
                        -
                        -

                        Add class="bordered" to the table tag for a bordered table

                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        NameItem NameItem Price
                        AlvinEclair$0.87
                        AlanJellybean$3.76
                        JonathanLollipop$7.00
                        ShannonKitKat$9.99
                        -
                        -
                        -
                        - -
                        -

                        Striped Table

                        -
                        -
                        -

                        Add class="striped" to the table tag for a striped table

                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        NameItem NameItem Price
                        AlvinEclair$0.87
                        AlanJellybean$3.76
                        JonathanLollipop$7.00
                        ShannonKitKat$9.99
                        -
                        -
                        -
                        - -
                        -

                        Highlight Table

                        -
                        -
                        -

                        Add class="highlight" to the table tag for a highlight table

                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        NameItem NameItem Price
                        AlvinEclair$0.87
                        AlanJellybean$3.76
                        JonathanLollipop$7.00
                        ShannonKitKat$9.99
                        -
                        -
                        -
                        - -
                        -

                        Centered Table

                        -
                        -
                        -

                        Add class="centered" to the table tag to center align all the text in the table

                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        NameItem NameItem Price
                        AlvinEclair$0.87
                        AlanJellybean$3.76
                        JonathanLollipop$7.00
                        ShannonKitKat$9.99
                        -
                        -
                        - -
                        - -
                        -

                        Responsive Table

                        -
                        -
                        -

                        Add class="responsive-table" to the table tag to make the table horizontally scrollable on smaller screen widths.

                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        NameItem NameItem Price
                        AlvinEclair$0.87
                        AlanJellybean$3.76
                        JonathanLollipop$7.00
                        ShannonKitKat$9.99
                        -
                        -
                        - -
                        - - -
                        - -
                        -
                        -
                        - - -
                        - -
                        -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tabs.html b/tabs.html deleted file mode 100644 index 83b4ed7b2a..0000000000 --- a/tabs.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - - - - Tabs - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -

                        Introduction

                        -

                        The tabs structure consists of an unordered list of tabs that have hashes corresponding to tab ids. Then when you click on each tab, only the container with the corresponding tab id will become visible. You can add the class .disabled to make a tab inaccessible.

                        - - -

                        Test 1

                        -

                        Test 2

                        -

                        Test 3

                        -

                        Test 4

                        -
                        -
                        - - -
                        -

                        Tabs HTML Structure

                        -
                        
                        -  <div class="row">
                        -    <div class="col s12">
                        -      <ul class="tabs">
                        -        <li class="tab col s3"><a href="#test1">Test 1</a></li>
                        -        <li class="tab col s3"><a class="active" href="#test2">Test 2</a></li>
                        -        <li class="tab col s3 disabled"><a href="#test3">Disabled Tab</a></li>
                        -        <li class="tab col s3"><a href="#test4">Test 4</a></li>
                        -      </ul>
                        -    </div>
                        -    <div id="test1" class="col s12">Test 1</div>
                        -    <div id="test2" class="col s12">Test 2</div>
                        -    <div id="test3" class="col s12">Test 3</div>
                        -    <div id="test4" class="col s12">Test 4</div>
                        -  </div>
                        -        
                        -
                        - - - -
                        -

                        jQuery Plugin Initialization

                        -

                        Tabs are initialized automatically, but if you add tabs dynamically you will have to initialize them like this.

                        -
                        
                        -  $(document).ready(function(){
                        -    $('ul.tabs').tabs();
                        -  });
                        -        
                        -
                        - -
                        -

                        jQuery Plugin Methods

                        -

                        You can programmatically trigger a tab change with our select_tab method. You have to input the id of the tab you want to switch to. In the case of our demo it would be either test1, test2, test3, or test4.

                        -
                        
                        -  $(document).ready(function(){
                        -    $('ul.tabs').tabs('select_tab', 'tab_id');
                        -  });
                        -        
                        -
                        - - - -
                        -

                        Preselecting a tab

                        -

                        By default, the first tab is selected. But if this is not what you want, you can preselect a tab by either passing in the hash in the url ex:#test2. Or you can add the class active to the a tag.

                        -
                        
                        -  <li class="tab col s2"><a class="active" href="#test3">Test 3</a></li>
                        -        
                        -
                        - -
                        - - -
                        - -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/masonry-template/index.html b/templates/masonry-template/index.html index 9434dc707a..930bb5e1bf 100644 --- a/templates/masonry-template/index.html +++ b/templates/masonry-template/index.html @@ -2,7 +2,7 @@ - + Parallax Template - Materialize @@ -156,7 +156,7 @@
                        Connect
                        - + diff --git a/templates/masonry-template/preview.html b/templates/masonry-template/preview.html index 127c87e5a4..6800eda15a 100644 --- a/templates/masonry-template/preview.html +++ b/templates/masonry-template/preview.html @@ -2,7 +2,7 @@ - + Parallax Template - Materialize diff --git a/templates/parallax-template.zip b/templates/parallax-template.zip index 23a7068e49..3795ddad5c 100644 Binary files a/templates/parallax-template.zip and b/templates/parallax-template.zip differ diff --git a/templates/parallax-template/index.html b/templates/parallax-template/index.html index 74afebaa2a..b20693c34e 100644 --- a/templates/parallax-template/index.html +++ b/templates/parallax-template/index.html @@ -1,9 +1,8 @@ - - + Parallax Template - Materialize @@ -158,7 +157,7 @@
                        Connect
                        - + diff --git a/templates/parallax-template/preview.html b/templates/parallax-template/preview.html index 1d6420925e..81c7d248ca 100644 --- a/templates/parallax-template/preview.html +++ b/templates/parallax-template/preview.html @@ -2,7 +2,7 @@ - + Parallax Template - Materialize diff --git a/templates/starter-template.zip b/templates/starter-template.zip index 9ed400248a..0bfe11714a 100644 Binary files a/templates/starter-template.zip and b/templates/starter-template.zip differ diff --git a/templates/starter-template/index.html b/templates/starter-template/index.html index 4286f3d7f2..5cfcb2ee29 100644 --- a/templates/starter-template/index.html +++ b/templates/starter-template/index.html @@ -74,10 +74,6 @@
                        Easy to work with


                        - -
                        - -
                        @@ -119,7 +115,7 @@
                        Connect
                        - + diff --git a/templates/starter-template/preview.html b/templates/starter-template/preview.html index d4852c5213..cfe27955a0 100644 --- a/templates/starter-template/preview.html +++ b/templates/starter-template/preview.html @@ -74,10 +74,6 @@
                        Easy to work with


                        - -
                        - -
                        diff --git a/test/html/badges.html b/test/html/badges.html new file mode 100644 index 0000000000..392287dbb4 --- /dev/null +++ b/test/html/badges.html @@ -0,0 +1,142 @@ + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + +
                        +

                        Badges

                        + +

                        Collection

                        + + +

                        Dropdown

                        + + +

                        Nav

                        + +
                        + + + +

                        Collapsible

                        +
                        +
                        +
                          +
                        • +
                          filter_dramaVery long title Very long title Very long title Very long title Very long title4
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          filter_dramaVery long title Very long title Very long title Very long title Very long title4
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          filter_dramaVery long title Very long title Very long title Very long title Very long title4
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          placeVery long title Very long title Very long title Very long title Very long title1
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          whatshotThird
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        +
                        +
                        + + + + + + + + + + + + + diff --git a/test/html/buttons.html b/test/html/buttons.html new file mode 100644 index 0000000000..87fa9957bc --- /dev/null +++ b/test/html/buttons.html @@ -0,0 +1,48 @@ + + + + + + Documentation - Materialize + + + + + +
                        +
                        +

                        + Anchors +

                        + + btn-flat waves-red + + + btn-flat btn-large waves-red + +

                        + Buttons +

                        + + +
                        +
                        + + + + + + + + \ No newline at end of file diff --git a/test/html/cards.html b/test/html/cards.html new file mode 100644 index 0000000000..3e1a6f819a --- /dev/null +++ b/test/html/cards.html @@ -0,0 +1,316 @@ + + + + + + Documentation - Materialize + + + + + + +
                        +
                        +
                        +
                        + +
                        +
                        + Card Titlemore_vert +
                        + + + +
                        + Card Titlemore_vert +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        This is the last content

                        +
                        +
                        +
                        + +
                        +
                        +
                        + +
                        +
                        + Card Titlemore_vert +
                        + +
                        + Card Titlemore_vert +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        There's content here

                        +

                        This is the last content

                        +
                        + + +
                        +
                        + +
                        + +
                        +

                        Card Sizes

                        +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively. + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis + nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. +

                        +
                        + +
                        +
                        +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively. + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis + nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. Ut enim ad minim veniam, quis + nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. +

                        +
                        +
                        +
                        +
                        + +
                        +

                        Horizontal Card

                        +
                        +
                        +
                        + +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        +
                        + +
                        +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        + +
                        +
                        +
                        + +
                        +
                        +
                        + +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        +
                        +
                        +
                        + +
                        +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        +
                        +
                        + +
                        +
                        +
                        + +
                        +
                        +
                        + +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        +
                        + +
                        +
                        +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        + +
                        +
                        +
                        +
                        + + +
                        +

                        Halfway FABs

                        +
                        +
                        +
                        + + Card Title + add +
                        +
                        +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        + +
                        +
                        +
                        + + add +
                        +
                        + Card Title +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        +
                        + + + + + + + + + + \ No newline at end of file diff --git a/test/html/carousel.html b/test/html/carousel.html new file mode 100644 index 0000000000..7a1e9f111e --- /dev/null +++ b/test/html/carousel.html @@ -0,0 +1,96 @@ + + + + + + Documentation - Materialize + + + + + + +

                        Carousel within collapsible

                        +
                          +
                        • +
                          filter_dramaFirst
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          placeSecond
                          +
                          + +
                          +
                        • +
                        • +
                          whatshotThird
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        + +

                        Full Width Carousels in tabs

                        + +
                        + +
                        +
                        + +
                        + + + + + + + + + + \ No newline at end of file diff --git a/test/html/chips.html b/test/html/chips.html new file mode 100644 index 0000000000..3cba8198fa --- /dev/null +++ b/test/html/chips.html @@ -0,0 +1,122 @@ + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + + + +
                        +
                        + +
                        +
                        +
                        Default:
                        +
                        +
                        +
                        + + +
                        +
                        +
                        + +
                        +
                        +
                        +
                        +
                        +
                        Modified proposal:
                        +
                        +
                        +
                        + phone + + +
                        +
                        + bookmark +
                        + +
                        +
                        + bookmark +
                        + +
                        +
                        +
                        +
                        + + + + + + + + + + + diff --git a/test/html/collapsible.html b/test/html/collapsible.html index 7c354940f3..cfd458ca25 100644 --- a/test/html/collapsible.html +++ b/test/html/collapsible.html @@ -8,18 +8,74 @@ +
                        +
                        +

                        Collapsible Header Text Wrap

                        +
                          +
                        • +
                          Second really long title that should overlap on most screens that aren't incredibly big and wide. Second really long title that should overlap on most screens that aren't incredibly big and wide. Second really long title that should overlap on most screens that aren't incredibly big and wide.
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          Second
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        + +
                        +
                        + +

                        Add dynamically to both expandable and collapsible

                        +
                          +
                        • +
                          First
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          Second
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        + +
                        +
                        + +
                        +

                        Active classes for initial open for both.

                        +
                        +
                          +
                        • +
                          First
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          Second ACTIVE
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          Third
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        +
                        +
                        +
                          +
                        • +
                          First ACTIVE
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          Second
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          Third ACTIVE
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        +
                        +
                        -

                        Collapsible Header Text Wrap

                        -
                          -
                        • -
                          Second really long title that should overlap on most screens that aren't incredibly big and wide. Second really long title that should overlap on most screens that aren't incredibly big and wide. Second really long title that should overlap on most screens that aren't incredibly big and wide.
                          -

                          Lorem ipsum dolor sit amet.

                          -
                        • -
                        • -
                          Third
                          -

                          Lorem ipsum dolor sit amet.

                          -
                        • -

                        Nested Collapsible

                        @@ -84,6 +140,20 @@

                        Nested Collapsible

                        Lorem ipsum dolor sit amet.

                        +
                        +

                        Collapsible Callbacks

                        +
                          +
                        • +
                          onOpen
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          onClose
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        + + @@ -97,7 +167,20 @@

                        Nested Collapsible

                        $('select').material_select(); + $('#callbacks').collapsible({ + accordion: false, // A setting that changes the collapsible behavior to expandable instead of the default accordion style + onOpen: function(el) { alert('Open'); }, // Callback for Collapsible open + onClose: function(el) { alert('Closed'); } // Callback for Collapsible close + }); + + + $('#add-li').click(function() { + $('#first').append('
                      • Third

                        Lorem ipsum dolor sit amet.

                      • '); + }); + $('#add-li2').click(function() { + $('#second').append('
                      • Third

                        Lorem ipsum dolor sit amet.

                      • '); + }); }); diff --git a/test/html/dropdown.html b/test/html/dropdown.html index 74d831aadb..8439254939 100644 --- a/test/html/dropdown.html +++ b/test/html/dropdown.html @@ -15,6 +15,8 @@ + + @@ -27,27 +29,54 @@ + + + + +

                        @@ -273,18 +337,10 @@ + + + + + + + + +
                        +Align left: ++ + +

                        +Align right: -------------------------------- ++ + +
                        +
                        + + + + +
                        + +
                        +

                        Scrolling in absolute container

                        + + +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        s +
                        + + - - - - + diff --git a/test/html/forms.html b/test/html/forms.html index 6d88dd9af6..786ecf8555 100644 --- a/test/html/forms.html +++ b/test/html/forms.html @@ -18,6 +18,7 @@ + @@ -29,6 +30,7 @@
                        + account_circle
                        @@ -38,9 +40,9 @@
                        @@ -60,10 +62,34 @@
                        + email
                        +
                        +

                        Make sure these textareas are aligned correctly.

                        +
                        + mode_edit + + +
                        +
                        + + +
                        +
                        +
                        +

                        Make sure error message and label don't overlap.

                        +
                        + + +
                        +
                        + + +
                        +
                        @@ -72,15 +98,243 @@
                        - - + + close
                        +
                        +
                        + +

                        Select

                        + +
                        +
                        + + +
                        + + + +
                        + + +
                        + + + +
                        + + +
                        +
                        + +
                        +
                        + + +
                        + + +
                        + + +
                        + + +
                        + + +
                        +
                        +
                        + +
                        + + +
                        + + +
                        + + +
                        + +
                        + + +
                        +
                        + +
                        +
                        + This is an inline select: +
                        + + +
                        +
                        +
                        + +
                        +

                        Select Icons

                        +
                        + + +
                        + +
                        + + +
                        +
                        + +

                        Range

                        +
                        +
                        +
                        +

                        + +

                        +
                        + +
                        +

                        + +

                        +
                        + +
                        +

                        + +

                        +
                        +
                        +
                        diff --git a/test/html/materialbox.html b/test/html/materialbox.html new file mode 100644 index 0000000000..53fcce78ac --- /dev/null +++ b/test/html/materialbox.html @@ -0,0 +1,100 @@ + + + + + + Documentation - Materialize + + + + + +
                        + +
                        +
                        +
                        + +
                        +
                        + Materialbox inside card image +
                        +
                        +
                        +
                        + +
                        +
                        +
                        +
                        + +
                        +
                        + Card Titlemore_vert + +

                        This is a link

                        +
                        + + + +
                        + Card Titleclose +

                        Here is some more information about this product that is only revealed once clicked on.

                        +
                        +
                        +
                        +
                        + +
                        +
                        +
                        +

                        Materialbox inside transformed parent

                        + +
                        +
                        +
                        + +
                        +
                        +

                        Materialbox with inline styles

                        + +
                        +
                        + +
                        +
                        +

                        Materialbox with empty data-caption

                        + +
                        +
                        + + +
                          +
                          +
                          Materialbox inside fixed navbar +
                        + + + + + + + + \ No newline at end of file diff --git a/test/html/multiple_modals.html b/test/html/multiple_modals.html index 87883fd125..f45ce4fdc9 100644 --- a/test/html/multiple_modals.html +++ b/test/html/multiple_modals.html @@ -112,10 +112,7 @@

                        Modal Header

                        diff --git a/test/html/multiple_sidenav.html b/test/html/multiple_sidenav.html index 33a68acccf..079e3dc024 100644 --- a/test/html/multiple_sidenav.html +++ b/test/html/multiple_sidenav.html @@ -16,6 +16,8 @@ + + @@ -32,7 +34,7 @@
                      • Left First Sidebar Link
                      • Left Second Sidebar Link
                      • - + menu - + menu @@ -52,7 +54,7 @@ diff --git a/test/html/overlayZindex.html b/test/html/overlayZindex.html new file mode 100644 index 0000000000..f88c3626f4 --- /dev/null +++ b/test/html/overlayZindex.html @@ -0,0 +1,70 @@ + + + + + + Documentation - Materialize + + + + + + + + + + + menu + + + Modal + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/html/pushpin.html b/test/html/pushpin.html new file mode 100644 index 0000000000..784cfe7c92 --- /dev/null +++ b/test/html/pushpin.html @@ -0,0 +1,121 @@ + + + + + + Documentation - Materialize + + + + +



                        + + + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + scroll
                        + +
                        + scrollTop: 0 +
                        + + + + + + + \ No newline at end of file diff --git a/test/html/scrollfire.html b/test/html/scrollfire.html new file mode 100644 index 0000000000..0a8d36fa20 --- /dev/null +++ b/test/html/scrollfire.html @@ -0,0 +1,99 @@ + + + + + + Documentation - Materialize + + + + + + +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        +
                        + + +
                        + scrollTop: 0 +
                        + + + + + + + \ No newline at end of file diff --git a/test/html/scrollspy.html b/test/html/scrollspy.html new file mode 100644 index 0000000000..16a466ace6 --- /dev/null +++ b/test/html/scrollspy.html @@ -0,0 +1,60 @@ + + + + + + Documentation - Materialize + + + + + + +
                        +
                        +
                        +
                        + + +
                        + scrollTop: 0 +
                        + + + + + + + + + \ No newline at end of file diff --git a/test/html/tabs.html b/test/html/tabs.html new file mode 100644 index 0000000000..7c1b4a6cc1 --- /dev/null +++ b/test/html/tabs.html @@ -0,0 +1,110 @@ + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + + +

                        Variable Width

                        + +
                        Test 1
                        +
                        Test 2
                        +
                        Test 3
                        +
                        Test 4
                        + + +

                        Fixed Width

                        + +
                        Test 1
                        +
                        Test 2
                        +
                        Test 3
                        +
                        Test 4
                        + +

                        Navbar in nav-extended

                        + + +
                        Test 1
                        +
                        Test 2
                        +
                        Test 3
                        +
                        Test 4
                        + + + + + + + + + + diff --git a/test/html/waves.html b/test/html/waves.html new file mode 100644 index 0000000000..e7db2f4fe2 --- /dev/null +++ b/test/html/waves.html @@ -0,0 +1,62 @@ + + + + + + Documentation - Materialize + + + + + +
                        + +
                        +

                        Image waves

                        +
                        + +
                        +
                        +
                        +

                        Card image waves

                        +
                        +
                        + +
                        +
                        + Card Titlemore_vert + +

                        This is a link

                        +
                        +
                        +
                        +
                        +

                        Card reveal image waves

                        +
                        +
                        + +
                        +
                        + Card Titlemore_vert +

                        This is a link

                        +
                        +
                        + Card Titleclose +

                        Here is some more information about this product that is only revealed once clicked on.

                        +
                        +
                        +
                        +
                        + + + + + + + \ No newline at end of file diff --git a/tests/collapsible-test.js b/tests/collapsible-test.js deleted file mode 100644 index ea9f266a62..0000000000 --- a/tests/collapsible-test.js +++ /dev/null @@ -1,29 +0,0 @@ -module('collapsible tests', { - setup: function() { - setupPage('collapsible'); - $('.collapsible').collapsible({ - accordion: false // A setting that changes the collapsible behavior to expandable instead of the default accordion style - }); - } -}); - -QUnit.test('basic collapsible test', function(assert) { - // Async mode - QUnit.stop(); - - // Starting condition - QUnit.equal($('.collapsible li:first-child .collapsible-body').css('display'), 'block', 'First accordion is displayed initially'); - - setTimeout(function() { - QUnit.start(); // Test is done once we reach end of this scope - - // Ensure the first accordion starts collapsed - QUnit.equal($('.collapsible li:first-child .collapsible-body').css('display'), 'none', 'First accordion is hidden after at least 350ms'); - - // Click the header - $('.collapsible li:first-child .collapsible-header').click(); - - // Now the first accordion should be opened - QUnit.equal($('.collapsible li:first-child .collapsible-header').css('display'), 'block', 'First accordion is displayed'); - }, 350); -}); \ No newline at end of file diff --git a/tests/css/testing-container-styles.css b/tests/css/testing-container-styles.css deleted file mode 100644 index de2851f73c..0000000000 --- a/tests/css/testing-container-styles.css +++ /dev/null @@ -1,21 +0,0 @@ -/** - * The MIT License (MIT) - * Copyright (c) 2015 ember-cli - * - * see: https://github.com/ember-cli/ember-cli-qunit/commit/2603576ee98933eecabae8f9454f397af3fd5a5f - */ -#materialize-testing-container { - position: relative; - background: white; - bottom: 0; - right: 0; - width: 640px; - height: 384px; - overflow: auto; - z-index: 9999; - border: 1px solid #ccc; - margin: 0 auto; -} -#materialize-testing { - zoom: 50%; -} \ No newline at end of file diff --git a/tests/helpers/helpers.js b/tests/helpers/helpers.js deleted file mode 100644 index ee41c285f9..0000000000 --- a/tests/helpers/helpers.js +++ /dev/null @@ -1,9 +0,0 @@ -function setupPage(pageName) { - return $.ajax('/tests/pages/' + pageName + '.html',{ - async: false - }).then(function (html) { - document.getElementById('materialize-testing-container').innerHTML = html; - }); -} - -window.setupPage = setupPage; \ No newline at end of file diff --git a/tests/index.mustache b/tests/index.mustache deleted file mode 100644 index 6d3e9406be..0000000000 --- a/tests/index.mustache +++ /dev/null @@ -1,17 +0,0 @@ - - - - - QUnit Example - {{#serve_files}} - - {{/serve_files}} - - - - -
                        -
                        -
                        - - \ No newline at end of file diff --git a/tests/pages/collapsible.html b/tests/pages/collapsible.html deleted file mode 100644 index 545c35243e..0000000000 --- a/tests/pages/collapsible.html +++ /dev/null @@ -1,14 +0,0 @@ -
                          -
                        • -
                          First
                          -

                          Lorem ipsum dolor sit amet.

                          -
                        • -
                        • -
                          Second
                          -

                          Lorem ipsum dolor sit amet.

                          -
                        • -
                        • -
                          Third
                          -

                          Lorem ipsum dolor sit amet.

                          -
                        • -
                        \ No newline at end of file diff --git a/tests/setup.js b/tests/setup.js deleted file mode 100644 index 428c817fbc..0000000000 --- a/tests/setup.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * The MIT License (MIT) - * Copyright (c) 2015 ember-cli - * - * see: https://github.com/ember-cli/ember-cli-qunit/blob/b46c5e7d1abfeadfd0309e6c4b4082ebe3b58896/vendor/ember-cli-qunit/qunit-configuration.js - */ - -QUnit.config.urlConfig.push({ id: 'nocontainer', label: 'Hide container'}); -QUnit.config.urlConfig.push({ id: 'dockcontainer', label: 'Dock container'}); -QUnit.config.testTimeout = 60000; //Default Test Timeout 60 Seconds - -function setupTestingContainer() { - var testContainer = document.getElementById('materialize-testing-container'); - var containerVisibility = QUnit.urlParams.nocontainer ? 'hidden' : 'visible'; - var containerPosition = QUnit.urlParams.dockcontainer ? 'absolute' : 'relative'; - - testContainer.style.visibility = containerVisibility; - testContainer.style.position = containerPosition; -} - -QUnit.begin(function() { - setupTestingContainer(); -}); - -QUnit.moduleDone(function () { - document.getElementById('materialize-testing-container').innerHTML = ''; -}); \ No newline at end of file diff --git a/tests/spec/autocomplete/autocompleteFixture.html b/tests/spec/autocomplete/autocompleteFixture.html new file mode 100644 index 0000000000..7b9ec832be --- /dev/null +++ b/tests/spec/autocomplete/autocompleteFixture.html @@ -0,0 +1,18 @@ +
                        +
                        +
                        +
                        + + +
                        +
                        +
                        +
                        +
                        +
                        + + +
                        +
                        +
                        +
                        \ No newline at end of file diff --git a/tests/spec/autocomplete/autocompleteSpec.js b/tests/spec/autocomplete/autocompleteSpec.js new file mode 100644 index 0000000000..c56d7ebd73 --- /dev/null +++ b/tests/spec/autocomplete/autocompleteSpec.js @@ -0,0 +1,73 @@ +describe("Autocomplete Plugin", function () { + beforeEach(function(done) { + loadFixtures('autocomplete/autocompleteFixture.html'); + setTimeout(function() { + $('input.autocomplete').autocomplete({ + data: { + "Apple": null, + "Microsoft": null, + "Google": 'http://placehold.it/250x250' + } + }); + done(); + }, 400); + }); + + describe("Autocomplete", function () { + // var browserSelect, normalInput, normalDropdown; + + // beforeEach(function() { + // browserSelect = $('select.normal'); + // }); + + it("should work with multiple initializations", function (done) { + var $normal = $('#normal-autocomplete'); + var $parent = $normal.parent(); + setTimeout(function() { + $normal.autocomplete({ data: {"hi": null} }); + $normal.autocomplete({ data: {"hi": null} }); + $normal.autocomplete({ data: {"hi": null} }); + $normal.autocomplete({ + data: { + "Apple": null, + "Microsoft": null, + "Google": 'http://placehold.it/250x250' + } + }); + + var $autocompleteEl = $parent.find('.autocomplete-content'); + var autocompleteEvents = $._data($normal[0], 'events'); + + expect($autocompleteEl.length).toEqual(1, 'Should dynamically generate autocomplete structure.'); + expect(autocompleteEvents.keyup.length).toEqual(1, 'Should only bind 1 keyup handler on input'); + done(); + }, 400); + }); + + it("should limit results if option is set", function (done) { + var $limited = $('#limited-autocomplete'); + var data = {}; + for (var i = 100; i >= 0; i--) { + var randString = 'a' + Math.random().toString(36).substring(20); + data[randString] = null; + } + + $limited.autocomplete({ + data: data, + limit: 20 + }); + + $limited.focus(); + $limited.val('a'); + $limited.trigger('keyup'); + + var $autocompleteEl = $limited.parent().find('.autocomplete-content'); + setTimeout(function() { + expect($autocompleteEl.children().length).toBeLessThan(21, 'Results should be at max the set limit'); + done(); + }, 200); + + }); + }); + +}); \ No newline at end of file diff --git a/tests/spec/cards/cardsFixture.html b/tests/spec/cards/cardsFixture.html new file mode 100644 index 0000000000..dac4f780f0 --- /dev/null +++ b/tests/spec/cards/cardsFixture.html @@ -0,0 +1,80 @@ +
                        +
                        +
                        +
                        + +
                        +
                        + Card Titlemore_vert +

                        This is a link

                        +
                        +
                        + Card Titleclose +

                        Here is some more information about this product that is only revealed once clicked on.

                        +
                        +
                        + +
                        +
                        +
                        + + Card Title +
                        +
                        +

                        I am a very simple card. I am good at containing small bits of information. + I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        +
                        + +
                        +
                        +
                        +
                        + + Card Title +
                        +
                        +

                        I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        +
                        +
                        +
                        + + Card Title +
                        +
                        +

                        I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        +
                        +
                        +
                        + + Card Title +
                        +
                        +

                        I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.

                        +
                        + +
                        +
                        +
                        \ No newline at end of file diff --git a/tests/spec/cards/cardsSpec.js b/tests/spec/cards/cardsSpec.js new file mode 100644 index 0000000000..85c7d7242c --- /dev/null +++ b/tests/spec/cards/cardsSpec.js @@ -0,0 +1,102 @@ +describe( "Cards", function () { + var reveal; + + beforeEach(function() { + loadFixtures('cards/cardsFixture.html'); + }); + + describe("reveal cards", function () { + var revealCard; + + beforeEach(function() { + revealCard = $('.card.reveal'); + }); + + it("should have a hidden card-reveal", function (done) { + var revealDiv = revealCard.find('.card-reveal'); + var activator = revealCard.find('.activator'); + + expect(revealDiv).toBeHidden('reveal div should be hidden initially'); + + setTimeout(function() { + activator.click(); + + setTimeout(function() { + expect(revealDiv).toBeVisible('reveal did not appear after activator was clicked.'); + + // Check revealDiv covers reveal card. + expect(revealDiv.outerWidth()).toEqual(revealCard.outerWidth(), 'activator was not as wide as reveal card.'); + expect(revealDiv.outerHeight()).toEqual(revealCard.outerHeight(), 'activator was not as high as reveal card.'); + expect(revealDiv.offset().top).toEqual(revealCard.offset().top, 'activator was not as in the same y as reveal card.'); + expect(revealDiv.offset().left).toEqual(revealCard.offset().left, 'activator was not as in the same x as reveal card.'); + + done(); + }, 400); + }, 400); + + }); + }); + + describe("image cards", function () { + var imageCard; + + beforeEach(function() { + imageCard = $('.card.image'); + }); + + it("should have an image that fills to full width of card", function () { + var image = imageCard.find('.card-image > img'); + + expect(image.outerWidth()).toEqual(imageCard.outerWidth(), 'image does not fill width of card'); + expect(image.offset().top).toEqual(imageCard.offset().top, 'image was not as in the same y as card.'); + }); + }); + + + describe("sized cards", function () { + var small, medium, large; + + beforeEach(function() { + small = $('.card.small'); + medium = $('.card.medium'); + large = $('.card.large'); + }); + + it("should have small card dimensions", function () { + var cardImage = small.find('.card-image'); + var cardContent = small.find('.card-content'); + var cardAction = small.find('.card-action'); + + expect(small.outerHeight()).toEqual(300, 'small card should be 300px high'); + expect(cardImage.outerHeight()).toBeLessThan(181, 'small image should be <= 180px or 60% high'); + expect(cardContent.outerHeight()).toBeLessThan(121, 'small content should be <= 120px or 40% high'); + expect(cardAction.offset().top + cardAction.outerHeight()) + .toEqual(small.offset().top + small.outerHeight(), 'small action should be at bottom of card'); + }); + + it("should have medium card dimensions", function () { + var cardImage = medium.find('.card-image'); + var cardContent = medium.find('.card-content'); + var cardAction = medium.find('.card-action'); + + expect(medium.outerHeight()).toEqual(400, 'medium card should be 400px high'); + expect(cardImage.outerHeight()).toBeLessThan(241, 'medium image should be <= 240 or 60% high'); + expect(cardContent.outerHeight()).toBeLessThan(161, 'medium content should be <= 160px or 40% high'); + expect(cardAction.offset().top + cardAction.outerHeight()) + .toEqual(medium.offset().top + medium.outerHeight(), 'medium action should be at bottom of card'); + }); + + it("should have large card dimensions", function () { + var cardImage = large.find('.card-image'); + var cardContent = large.find('.card-content'); + var cardAction = large.find('.card-action'); + + expect(large.outerHeight()).toEqual(500, 'large card should be 500px high'); + expect(cardImage.outerHeight()).toBeLessThan(301, 'large image should be <= 300 or 60% high'); + expect(cardContent.outerHeight()).toBeLessThan(201, 'large content should be <= 200 or 40% high'); + expect(cardAction.offset().top + cardAction.outerHeight()) + .toEqual(large.offset().top + large.outerHeight(), 'large action should be at bottom of card'); + }); + }); + +}); diff --git a/tests/spec/chips/chipsFixture.html b/tests/spec/chips/chipsFixture.html new file mode 100644 index 0000000000..61d00f3b82 --- /dev/null +++ b/tests/spec/chips/chipsFixture.html @@ -0,0 +1,4 @@ +
                        +
                        +
                        +
                        \ No newline at end of file diff --git a/tests/spec/chips/chipsSpec.js b/tests/spec/chips/chipsSpec.js new file mode 100644 index 0000000000..f72162b50d --- /dev/null +++ b/tests/spec/chips/chipsSpec.js @@ -0,0 +1,88 @@ +describe("Chips Plugin", function () { + + beforeEach(function() { + loadFixtures('chips/chipsFixture.html'); + $('.chips').material_chip(); + $('.chips-initial').material_chip({ + data: [{ tag: 'Apple' }, { tag: 'Microsoft' }, { tag: 'Google' }], + }); + $('.chips-placeholder').material_chip({ + placeholder: 'Enter a tag', + secondaryPlaceholder: '+Tag', + }); + $('.chips-autocomplete').material_chip({ + autocompleteData: { + 'Apple': null, + 'Microsoft': null, + 'Google': null + } + }); + }); + + describe("Chips", function () { + var $chips, $input; + + // beforeEach(function() { + // }); + + it("should work with multiple initializations", function () { + $chips = $('.chips').first(); + $chips.material_chip(); + $chips.material_chip(); + $chips.material_chip(); + $chips.material_chip(); + + $input = $chips.find('input'); + + expect($input.length).toEqual(1, 'Should dynamically generate chips structure.'); + }); + + it("should be able to add chip", function (done) { + $chips = $('.chips').first(); + $input = $chips.find('input'); + + $input.val('one'); + + var e = $.Event('keydown'); + e.which = 13; + $input.trigger(e); + + setTimeout(function() { + var numChips = $chips.find('.chip').length; + var $oneChip = $chips.find('.chip').first(); + + expect(numChips).toEqual(1, 'one chip should have been added'); + + $oneChip.children().remove() + expect($oneChip.text()).toEqual('one', 'the chip should have value "one"'); + + done(); + }, 400); + + }); + + it("should be able to delete chip", function (done) { + $chips = $('.chips.chips-initial').first(); + $input = $chips.find('input'); + var numChips = $chips.find('.chip').length + + expect(numChips).toEqual(3, '3 initial chips should have been added'); + + $chips.find('.chip .close').first().click(); + + setTimeout(function() { + numChips = $chips.find('.chip').length + + expect(numChips).toEqual(2, 'one chip should have been deleted'); + + done(); + }, 400); + + }); + }); + + // describe("Chips autocomplete", function () { + + // }); + +}); diff --git a/tests/spec/collapsible/collapsible.html b/tests/spec/collapsible/collapsible.html new file mode 100644 index 0000000000..3759886c9b --- /dev/null +++ b/tests/spec/collapsible/collapsible.html @@ -0,0 +1,59 @@ + +
                          +
                        • +
                          filter_dramaFirst
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          placeSecond
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          whatshotThird
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        + + +
                          +
                        • +
                          filter_dramaFirst
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          placeSecond
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          whatshotThird
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        + +
                          +
                        • +
                          filter_dramaFirst
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          placeSecond
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        • +
                          whatshotThird
                          +

                          Lorem ipsum dolor sit amet.

                          +
                        • +
                        \ No newline at end of file diff --git a/tests/spec/collapsible/collapsibleSpec.js b/tests/spec/collapsible/collapsibleSpec.js new file mode 100644 index 0000000000..207b4352c3 --- /dev/null +++ b/tests/spec/collapsible/collapsibleSpec.js @@ -0,0 +1,114 @@ +describe( "Collapsible Plugin", function () { + var collapsible, accordion, popout, expandable, expandablePreselect; + + beforeEach(function() { + loadFixtures('collapsible/collapsible.html'); + collapsible = $('.collapsible'); + expandable = $('.expandable'); + expandablePreselect = $('.expandable-preselected'); + accordion = $('.accordion'); + popout = $('.popout'); + collapsible.collapsible(); + }); + + describe( "collapsible", function () { + + it("should open all items, keeping all open", function (done) { + // Collapsible body height should be 0 on start when hidden. + var headers = expandable.find('.collapsible-header'); + var bodies = expandable.find('.collapsible-body'); + + bodies.each(function() { + expect($(this)).toBeHidden('because collapsible bodies should be hidden initially.'); + }); + + // Collapsible body height should be > 0 after being opened. + headers.each(function() { + $(this).click(); + }); + + setTimeout(function() { + bodies.each(function() { + expect($(this)).toBeVisible('because collapsible bodies not visible after being opened.'); + }); + done() + }, 400); + }); + + it("should allow preopened sections", function () { + var headers = expandablePreselect.find('.collapsible-header'); + var bodies = expandablePreselect.find('.collapsible-body'); + + bodies.each(function(i) { + var header = $(this).prev('.collapsible-header'); + + if (i === 1) { + expect(header).toHaveClass('active', 'because collapsible header should have active class to be preselected.'); + expect($(this)).toBeVisible('because collapsible bodies should be visible if preselected.'); + } else { + expect($(this)).toBeHidden('because collapsible bodies should be hidden initially.'); + } + }); + }); + }); + + describe( "accordion", function () { + + it("should open first and second items, keeping only second open", function (done) { + // Collapsible body height should be 0 on start when hidden. + var firstHeader = accordion.find('.collapsible-header').first(); + var firstBody = accordion.find('.collapsible-body').first(); + var secondHeader = accordion.find('.collapsible-header').eq(1); + var secondBody = accordion.find('.collapsible-body').eq(1); + expect(firstBody).toBeHidden('because accordion bodies should be hidden initially.'); + expect(secondBody).toBeHidden('because accordion bodies should be hidden initially.'); + + // Collapsible body height should be > 0 after being opened. + firstHeader.click(); + + setTimeout(function() { + expect(firstBody).toBeVisible('because accordion bodies not visible after being opened.'); + secondHeader.click(); + + setTimeout(function() { + expect(firstBody).toBeHidden('because accordion bodies should be hidden when another item is opened.'); + expect(secondBody).toBeVisible('because accordion bodies not visible after being opened.'); + done(); + }, 400); + }, 200); + + }); + }); + + describe( "popout", function () { + + it("should open first and popout", function (done) { + // Collapsible body height should be 0 on start when hidden. + var firstLi = popout.find('li').first(); + var firstHeader = popout.find('.collapsible-header').first(); + var firstBody = popout.find('.collapsible-body').first(); + expect(firstBody).toBeHidden('because accordion bodies should be hidden initially.'); + + // Expect margin to be > 0 because not popped out. + popout.find('li').each(function () { + var marginLeft = parseInt($(this).css('margin-left')); + var marginRight = parseInt($(this).css('margin-right')); + expect(marginLeft).toBeGreaterThan(0, 'because closed popout items should have horizontal margins.'); + expect(marginRight).toBeGreaterThan(0, 'because closed popout items should have horizontal margins.'); + }); + + // expect margin to be 0 because popped out. + firstHeader.click(); + setTimeout(function() { + var firstMarginLeft = parseInt(firstLi.css('margin-left')); + var firstMarginRight = parseInt(firstLi.css('margin-right')); + expect(firstMarginLeft).toEqual(0, 'because opened popout items should have no horizontal margins.'); + expect(firstMarginRight).toEqual(0, 'because opened popout items should have no horizontal margins.'); + expect(firstBody).toBeVisible('because accordion bodies not visible after being opened.'); + + done(); + }, 400); + + }); + }); +}); diff --git a/tests/spec/dropdown/dropdownFixture.html b/tests/spec/dropdown/dropdownFixture.html new file mode 100644 index 0000000000..2a52c3dc95 --- /dev/null +++ b/tests/spec/dropdown/dropdownFixture.html @@ -0,0 +1,28 @@ +
                        +
                        + + Drop Me! + + + + + + + arrow_drop_down + Event Bubble! + + + + +
                        +
                        \ No newline at end of file diff --git a/tests/spec/dropdown/dropdownSpec.js b/tests/spec/dropdown/dropdownSpec.js new file mode 100644 index 0000000000..a07ee92e0c --- /dev/null +++ b/tests/spec/dropdown/dropdownSpec.js @@ -0,0 +1,70 @@ +describe("Dropdown Plugin", function () { + beforeEach(function() { + loadFixtures('dropdown/dropdownFixture.html'); + $('.dropdown-button').dropdown(); + }); + + describe("Dropdown", function () { + var normalDropdown; + + beforeEach(function() { + // browserSelect = $('select.normal'); + }); + + it("should open and close programmatically", function (done) { + var dropdown1 = $('#dropdown1'); + normalDropdown = $('#dropdownActivator'); + + expect(dropdown1).toBeHidden('Should be hidden before dropdown is opened.'); + + normalDropdown.dropdown('open'); + + setTimeout(function() { + expect(dropdown1).toBeVisible('Should be shown after dropdown is opened.'); + normalDropdown.dropdown('close'); + + setTimeout(function() { + expect(dropdown1).toBeHidden('Should be hidden after dropdown is closed.'); + done(); + }, 400); + }, 400); + }); + + it("should close dropdown on document click if programmatically opened", function (done) { + normalDropdown = $('#dropdownActivator'); + + expect(dropdown1).toBeHidden('Should be hidden before dropdown is opened.'); + + normalDropdown.dropdown('open'); + + setTimeout(function() { + expect(dropdown1).toBeVisible('Should be shown after dropdown is opened.'); + $(document).click(); + + setTimeout(function() { + expect(dropdown1).toBeHidden('Should be hidden after dropdown is closed.'); + done(); + }, 400); + }, 400); + }); + + it("should bubble events correctly", function (done) { + var dropdown2 = $('#dropdown2'); + normalDropdown = $('#dropdownBubble'); + + expect(dropdown2).toBeHidden('Should be hidden before dropdown is opened.'); + + normalDropdown.find('i').click(); + + setTimeout(function() { + expect(dropdown2).toBeVisible('Should be shown after dropdown is opened.'); + $(document).click(); + + setTimeout(function() { + expect(dropdown2).toBeHidden('Should be hidden after dropdown is closed.'); + done(); + }, 400); + }, 400); + }); + }); +}); diff --git a/tests/spec/helper.js b/tests/spec/helper.js new file mode 100644 index 0000000000..d35a3934c7 --- /dev/null +++ b/tests/spec/helper.js @@ -0,0 +1,18 @@ +jasmine.getFixtures().fixturesPath = 'tests/spec'; + +beforeEach(function() { + + /** + * Creates standard click event on DOM element + */ + window.click = function(elem) { + var evt = document.createEvent('MouseEvent'); + evt.initMouseEvent('click', { + bubbles: true, + cancelable: true, + view: window + }); + + elem.dispatchEvent(evt); + }; +}); diff --git a/tests/spec/materialbox/materialboxFixture.html b/tests/spec/materialbox/materialboxFixture.html new file mode 100644 index 0000000000..ab4d933246 --- /dev/null +++ b/tests/spec/materialbox/materialboxFixture.html @@ -0,0 +1,3 @@ +
                        + +
                        \ No newline at end of file diff --git a/tests/spec/materialbox/materialboxSpec.js b/tests/spec/materialbox/materialboxSpec.js new file mode 100644 index 0000000000..0c6c1cffef --- /dev/null +++ b/tests/spec/materialbox/materialboxSpec.js @@ -0,0 +1,33 @@ +describe( 'Materialbox:', function() { + var transformMaterialbox; + + beforeEach(function() { + loadFixtures('materialbox/materialboxFixture.html'); + }); + + describe('Materialbox opens correctly with transformed ancestor', function() { + it('Opens a correctly placed overlay when clicked', function(done) { + transformMaterialbox = $('#transformTest'); + $('.materialboxed').materialbox(); + + // Mouse click + transformMaterialbox.find('.materialboxed').trigger('click'); + setTimeout(function() { + // Check overlay is attached + var overlay = transformMaterialbox.find('#materialbox-overlay'); + var overlayRect = overlay[0].getBoundingClientRect(); + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + expect(overlay).toExist('because it is generated on init'); + expect(overlay).toBeVisible('because materialbox was clicked'); + expect(overlayRect.top).toEqual(0); + expect(overlayRect.left).toEqual(0); + expect(overlayRect.width).toEqual(windowWidth); + expect(overlayRect.height).toEqual(windowHeight); + + done(); + }, 1000); + }); + }); + +}); diff --git a/tests/spec/modal/modalFixture.html b/tests/spec/modal/modalFixture.html new file mode 100644 index 0000000000..8fc3ddd047 --- /dev/null +++ b/tests/spec/modal/modalFixture.html @@ -0,0 +1,44 @@ + +Modal + + + + + + + +Modal + + + + + + +Modal + + + diff --git a/tests/spec/modal/modalSpec.js b/tests/spec/modal/modalSpec.js new file mode 100644 index 0000000000..2e627ab7fc --- /dev/null +++ b/tests/spec/modal/modalSpec.js @@ -0,0 +1,126 @@ +describe( 'Modal:', function() { + var transformMaterialbox; + var trigger1, modal1, trigger2, modal2, trigger3, modal3; + + beforeEach(function() { + loadFixtures('modal/modalFixture.html'); + trigger1 = $('.btn[href="#modal1"]'); + triggerIcon1 = $('.btn[data-target="modal1"] i'); + trigger2 = $('.btn[href="#modal2"]'); + trigger3 = $('.btn[href="#modal3"]'); + modal1 = $('#modal1'); + modal2 = $('#modal2'); + modal3 = $('#modal3'); + }); + + describe('Modals', function() { + it('Should open and close correctly', function(done) { + modal1.modal(); + expect(modal1).toBeHidden('Modal should be hidden'); + + click(trigger1[0]); + + setTimeout(function() { + expect(modal1).toBeVisible('Modal should be shown'); + expect(modal1.hasClass('open')).toEqual(true, 'Modal should have class open'); + + // Check overlay is attached + var overlay = modal1.modal('getInstance').$overlay; + var overlayInDOM = $.contains(document, overlay[0]); + expect(overlayInDOM).toEqual(true, 'Overlay should be attached on open'); + + click(overlay[0]); + setTimeout(function() { + expect(modal1.hasClass('open')).toEqual(false, 'Modal should have class open removed'); + + var overlayInDOM = $.contains(document, overlay[0]); + expect(overlayInDOM).toEqual(false, 'Overlay should be removed on close'); + + done(); + }, 500); + }, 500); + }); + + it('Should open and close correctly with children elements in trigger', function(done) { + modal1.modal(); + expect(modal1).toBeHidden('Modal should be hidden'); + + click(triggerIcon1[0]); + + setTimeout(function() { + expect(modal1).toBeVisible('Modal should be shown'); + expect(modal1.hasClass('open')).toEqual(true, 'Modal should have class open'); + + // Check overlay is attached + var overlay = modal1.modal('getInstance').$overlay; + var overlayInDOM = $.contains(document, overlay[0]); + expect(overlayInDOM).toEqual(true, 'Overlay should be attached on open'); + + click(overlay[0]); + setTimeout(function() { + expect(modal1.hasClass('open')).toEqual(false, 'Modal should have class open removed'); + + var overlayInDOM = $.contains(document, overlay[0]); + expect(overlayInDOM).toEqual(false, 'Overlay should be removed on close'); + + done(); + }, 500); + }, 500); + }); + + it('Should have a dismissible option', function(done) { + modal1.modal({ + dismissible: false + }); + + click(trigger1[0]); + setTimeout(function() { + expect(modal1).toBeVisible('Modal should be shown'); + var overlay = modal1.modal('getInstance').$overlay; + var overlayInDOM = $.contains(document, overlay[0]); + expect(overlayInDOM).toEqual(true, 'Overlay should be attached on open'); + + click(overlay[0]); + setTimeout(function() { + expect(modal1).toBeVisible('Modal should be shown'); + var overlayInDOM = $.contains(document, overlay[0]); + expect(overlayInDOM).toEqual(true, 'modal should not be dismissable'); + + done(); + }, 500); + }, 500); + }); + + it('Should have callbacks', function(done) { + var readyTest = false; + var completeTest = false; + modal1.modal({ + ready: function() { + readyTest = true; + }, + complete: function() { + completeTest = true; + } + }); + + expect(readyTest).toEqual(false, 'callback not yet fired'); + expect(completeTest).toEqual(false, 'callback not yet fired'); + + click(trigger1[0]); + setTimeout(function() { + expect(readyTest).toEqual(true, 'callback fired'); + expect(completeTest).toEqual(false, 'callback not yet fired'); + + var overlay = modal1.modal('getInstance').$overlay; + click(overlay[0]); + setTimeout(function() { + expect(readyTest).toEqual(true, 'callback fired'); + expect(completeTest).toEqual(true, 'callback fired'); + + done(); + }, 500); + }, 500); + }); + }); + +}); diff --git a/tests/spec/scrollFire/scrollFireFixture.html b/tests/spec/scrollFire/scrollFireFixture.html new file mode 100644 index 0000000000..900d4f204c --- /dev/null +++ b/tests/spec/scrollFire/scrollFireFixture.html @@ -0,0 +1,109 @@ +

                        + Filling up some content to enable scrolling +

                        +

                        + Lorem ipsum dolor sit amet, + consectetur adipisicing elit, + sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

                        +

                        + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

                        + + diff --git a/tests/spec/scrollFire/scrollFireSpec.js b/tests/spec/scrollFire/scrollFireSpec.js new file mode 100644 index 0000000000..6b42d126f7 --- /dev/null +++ b/tests/spec/scrollFire/scrollFireSpec.js @@ -0,0 +1,31 @@ +describe('ScrollFire Plugin', function() { + var options, testElement; + + beforeEach(function() { + options = [{ + selector: '#test', + offset: 50, + callback: 'Materialize.callbackFunc()' + }]; + Materialize.callbackFunc = function() { + return 'I have been called'; + }; + + loadFixtures('scrollFire/scrollFireFixture.html'); + spyOn(Materialize, 'callbackFunc').and.callThrough(); + testElement = $('#test'); + Materialize.scrollFire(options); + }); + + describe('ScrollFire', function() { + it('should fire the callback function', function(done) { + // Scroll to the test component + window.scrollTo(0, testElement.offset().top); + // The callback function should be fired after scrolling + setTimeout(function() { + expect(Materialize.callbackFunc).toHaveBeenCalled(); + done(); + }, 400); + }); + }); +}); diff --git a/tests/spec/select/selectFixture.html b/tests/spec/select/selectFixture.html new file mode 100644 index 0000000000..7a974fb3ba --- /dev/null +++ b/tests/spec/select/selectFixture.html @@ -0,0 +1,40 @@ +
                        +
                        + + +
                        +
                        + +
                        +
                        + + +
                        +
                        + +
                        +
                        + + +
                        +
                        diff --git a/tests/spec/select/selectSpec.js b/tests/spec/select/selectSpec.js new file mode 100644 index 0000000000..de06b6b7cc --- /dev/null +++ b/tests/spec/select/selectSpec.js @@ -0,0 +1,199 @@ +describe("Select Plugin", function () { + beforeEach(function() { + loadFixtures('select/selectFixture.html'); + $('select').not('.disabled').material_select(); + }); + + describe("Select", function () { + var browserSelect, normalInput, normalDropdown; + + beforeEach(function() { + browserSelect = $('select.normal'); + }); + + it("should open dropdown and select option", function (done) { + normalInput = browserSelect.parent().find('input.select-dropdown'); + normalDropdown = browserSelect.parent().find('ul.select-dropdown'); + + expect(normalInput).toExist('Should dynamically generate select dropdown structure.'); + expect(normalDropdown).toExist('Should dynamically generate select dropdown structure.'); + expect(normalInput).toBeVisible('Should be hidden before dropdown is opened.'); + expect(normalDropdown).toBeHidden('Should be hidden before dropdown is opened.'); + + normalInput.click(); + + setTimeout(function() { + expect(normalDropdown).toBeVisible('Should be visible after opening.'); + var firstOption = normalDropdown.find('li:not(.disabled)').first(); + firstOption.click(); + normalInput.blur(); + + setTimeout(function() { + expect(normalDropdown).toBeHidden('Should be hidden after choosing item.'); + expect(normalInput.val()).toEqual(firstOption[0].innerText, 'Value should equal chosen option.'); + done(); + }, 400); + }, 400); + }); + + it("should have pre-selected value", function () { + normalInput = browserSelect.parent().find('input.select-dropdown'); + normalDropdown = browserSelect.parent().find('ul.select-dropdown'); + + var firstOption = browserSelect.find('option[selected]'); + expect(normalInput.val()).toEqual(firstOption.text(), 'Value should be equal to preselected option.'); + }); + }); + + describe("Multiple Select", function () { + var browserSelect, multipleInput, multipleDropdown; + + beforeEach(function() { + browserSelect = $('select.multiple'); + }); + + it("should open dropdown and select multiple options", function(done) { + multipleInput = browserSelect.parent().find('input.select-dropdown'); + multipleDropdown = browserSelect.parent().find('ul.select-dropdown'); + + expect(multipleInput).toExist('Should dynamically generate select dropdown structure.'); + expect(multipleDropdown).toExist('Should dynamically generate select dropdown structure.'); + expect(multipleInput).toBeVisible('Should be hidden before dropdown is opened.'); + expect(multipleDropdown).toBeHidden('Should be hidden before dropdown is opened.'); + + multipleInput.click(); + + setTimeout(function() { + expect(multipleDropdown).toBeVisible('Should be visible after opening.'); + var firstOption = multipleDropdown.find('li:not(.disabled)').first(); + var secondOption = multipleDropdown.find('li:not(.disabled)').eq(1); + var thirdOption = multipleDropdown.find('li:not(.disabled)').eq(2); + firstOption.click(); + $('body').click(); + + setTimeout(function() { + expect(multipleDropdown).toBeHidden('Should be hidden after choosing item.'); + expect(browserSelect.val()).toEqual(['1', '2', '3'], 'Actual select should have correct selected values.'); + expect(multipleInput.val()).toEqual(secondOption[0].innerText + ', ' + thirdOption[0].innerText + ', ' + firstOption[0].innerText, 'Value should equal chosen multiple options.'); + done(); + }, 400); + }, 400); + }); + + it("should open dropdown and deselect multiple options", function(done) { + multipleInput = browserSelect.parent().find('input.select-dropdown'); + multipleDropdown = browserSelect.parent().find('ul.select-dropdown'); + + expect(multipleInput).toExist('Should dynamically generate select dropdown structure.'); + expect(multipleDropdown).toExist('Should dynamically generate select dropdown structure.'); + expect(multipleInput).toBeVisible('Should be hidden before dropdown is opened.'); + expect(multipleDropdown).toBeHidden('Should be hidden before dropdown is opened.'); + + multipleInput.click(); + + setTimeout(function() { + expect(multipleDropdown).toBeVisible('Should be visible after opening.'); + var disabledOption = multipleDropdown.find('li.disabled'); + var secondOption = multipleDropdown.find('li:not(.disabled)').eq(1); + var thirdOption = multipleDropdown.find('li:not(.disabled)').eq(2); + secondOption.click(); + thirdOption.click(); + $('body').click(); + + setTimeout(function() { + expect(multipleDropdown).toBeHidden('Should be hidden after choosing item.'); + expect(browserSelect.val()).toEqual([], 'Actual select element should be empty because none chosen.'); + expect(multipleInput.val()).toEqual(disabledOption[0].innerText, 'Value should equal default because none chosen.'); + done(); + }, 400); + }, 400); + }); + + it("should have multiple pre-selected values", function () { + multipleInput = browserSelect.parent().find('input.select-dropdown'); + multipleDropdown = browserSelect.parent().find('ul.select-dropdown'); + + var secondOption = browserSelect.find('option[selected]').eq(0); + var thirdOption = browserSelect.find('option[selected]').eq(1); + expect(multipleInput.val()).toEqual(secondOption.text() + ', ' + thirdOption.text(), 'Value should be equal to preselected option.'); + }); + }); + + describe("Optgroup Select", function () { + var browserSelect, optInput, optDropdown, optionInOptgroup, optionAfterOptGroup; + + beforeEach(function() { + browserSelect = $('select.optgroup'); + }); + + it("should open dropdown and select options", function(done) { + optInput = browserSelect.parent().find('input.select-dropdown'); + optDropdown = browserSelect.parent().find('ul.select-dropdown'); + + var optgroups = optDropdown.find('li.optgroup'); + browserSelect.find('optgroup').each(function(i) { + expect($(this).attr('label')).toEqual(optgroups.eq(i)[0].innerText, 'should generate optgroup structure.'); + }); + + expect(optInput).toExist('Should dynamically generate select dropdown structure.'); + expect(optDropdown).toExist('Should dynamically generate select dropdown structure.'); + expect(optInput).toBeVisible('Should be hidden before dropdown is opened.'); + expect(optDropdown).toBeHidden('Should be hidden before dropdown is opened.'); + + optInput.click(); + + setTimeout(function() { + expect(optDropdown).toBeVisible('Should be visible after opening.'); + var secondOption = optDropdown.find('li:not(.disabled):not(.optgroup)').eq(1); + secondOption.click(); + optInput.blur(); + + setTimeout(function() { + expect(optDropdown).toBeHidden('Should be hidden after choosing item.'); + expect(optInput.val()).toEqual(secondOption[0].innerText, 'Value should be equal to selected option.'); + done(); + }, 400); + }, 400); + }); + + it("should have options inside optgroup indented", function() { + optionInOptgroup = browserSelect.parent().find('li.optgroup + li'); + optionAfterOptGroup = browserSelect.parent().find('ul li:last-child'); + + expect(optionInOptgroup).toHaveClass('optgroup-option', 'Should have optgroup-option class'); + expect(optionAfterOptGroup).not.toHaveClass('optgroup-option', 'Should not have optgroup-option class'); + }); + + it("should not do anything when optgroup li clicked", function(done) { + optInput = browserSelect.parent().find('input.select-dropdown'); + optDropdown = browserSelect.parent().find('ul.select-dropdown'); + var originalVal = optInput.val(); + + var optgroups = optDropdown.find('li.optgroup'); + browserSelect.find('optgroup').each(function(i) { + expect($(this).attr('label')).toEqual(optgroups.eq(i)[0].innerText, 'should generate optgroup structure.'); + }); + + expect(optInput).toExist('Should dynamically generate select dropdown structure.'); + expect(optDropdown).toExist('Should dynamically generate select dropdown structure.'); + expect(optInput).toBeVisible('Should be hidden before dropdown is opened.'); + expect(optDropdown).toBeHidden('Should be hidden before dropdown is opened.'); + + optInput.click(); + + setTimeout(function() { + expect(optDropdown).toBeVisible('Should be visible after opening.'); + var optgroup = optDropdown.find('li.optgroup').first(); + optgroup.click(); + optInput.blur(); + + setTimeout(function() { + expect(optDropdown).toBeHidden('Should be hidden after choosing invalid item.'); + expect(optInput.val()).toEqual(originalVal, 'Value should be equal to original option.'); + done(); + }, 400); + }, 400); + }); + + }); +}); diff --git a/tests/spec/sideNav/sideNavFixture.html b/tests/spec/sideNav/sideNavFixture.html new file mode 100644 index 0000000000..2db65606ed --- /dev/null +++ b/tests/spec/sideNav/sideNavFixture.html @@ -0,0 +1,16 @@ + +menu \ No newline at end of file diff --git a/tests/spec/sideNav/sideNavSpec.js b/tests/spec/sideNav/sideNavSpec.js new file mode 100644 index 0000000000..b90ce899d4 --- /dev/null +++ b/tests/spec/sideNav/sideNavSpec.js @@ -0,0 +1,59 @@ +describe("SideNav Plugin", function () { + beforeEach(function() { + loadFixtures('sideNav/sideNavFixture.html'); + $(".button-collapse").sideNav(); + }); + + describe("SideNav", function () { + var normalActivator, normalSideNav; + + beforeEach(function() { + normalActivator = $('.button-collapse'); + normalSideNav = $('.side-nav'); + }); + + it("should not break from multiple initializations", function() { + $(".button-collapse").sideNav(); + $(".button-collapse").sideNav(); + $(".button-collapse").sideNav(); + + var dragTarget = $('.drag-target[data-sidenav="' + normalActivator.attr('data-activates') + '"]'); + var dragTargetEvents = $._data(dragTarget[0], 'events'); + expect(dragTarget.length).toEqual(1, 'Should generate only one dragTarget.'); + expect(dragTargetEvents.click.length).toEqual(1, 'Should only bind 1 click handler on activator'); + expect(dragTargetEvents.pan.length).toEqual(1, 'Should only bind 1 pan handler on activator'); + expect(dragTargetEvents.panend.length).toEqual(1, 'Should only bind 1 panend handler on activator'); + + var normalActivatorEvents = $._data(normalActivator[0], 'events'); + expect(normalActivatorEvents.click.length).toEqual(1, 'Should only bind 1 click handler on activator'); + }); + + it("should open sideNav from left", function (done) { + var sideNavRect = normalSideNav[0].getBoundingClientRect(); + var overlay = $('[id="sidenav-overlay"]'); + var dragTarget = $('.drag-target[data-sidenav="' + normalActivator.attr('data-activates') + '"]'); + + expect(dragTarget.length).toEqual(1, 'Should generate only one dragTarget.'); + expect(overlay.length).toEqual(0, 'Overlay should not be generated before sideNav is opened.'); + expect(sideNavRect.left).toEqual(-sideNavRect.width, 'Should be hidden before sideNav is opened.'); + + normalActivator.click(); + + setTimeout(function() { + sideNavRect = normalSideNav[0].getBoundingClientRect(); + overlay = $('[id="sidenav-overlay"]'); + expect(overlay.length).toEqual(1, 'Should generate only one overlay.'); + expect(sideNavRect.left).toEqual(0, 'Should be shown after sideNav is closed.'); + + overlay.click(); + + setTimeout(function() { + overlay = $('[id="sidenav-overlay"]'); + expect(overlay.length).toEqual(0, 'Overlay should be removed after sideNav is closed.'); + + done(); + }, 500); + }, 500); + }); + }); +}); diff --git a/tests/spec/tabs/tabsFixture.html b/tests/spec/tabs/tabsFixture.html new file mode 100644 index 0000000000..49dae37980 --- /dev/null +++ b/tests/spec/tabs/tabsFixture.html @@ -0,0 +1,22 @@ +
                        + +
                        Test 1
                        +
                        Test 2
                        +
                        Test 3
                        +
                        Test 4
                        +
                        Test 1
                        +
                        Test 2
                        +
                        Test 3
                        +
                        Test 4
                        +
                        \ No newline at end of file diff --git a/tests/spec/tabs/tabsSpec.js b/tests/spec/tabs/tabsSpec.js new file mode 100644 index 0000000000..e08f2f30c8 --- /dev/null +++ b/tests/spec/tabs/tabsSpec.js @@ -0,0 +1,92 @@ +describe("Tabs Plugin", function () { + beforeEach(function() { + loadFixtures('tabs/tabsFixture.html'); + $('ul.tabs').tabs(); + }); + + describe("Tabs", function () { + var normalTabs; + + beforeEach(function() { + normalTabs = $('.tabs.normal'); + }); + + it("should open to active tab", function () { + var activeTab = normalTabs.find('.active'); + var activeTabHash = activeTab.attr('href'); + normalTabs.find('.tab a').each(function() { + var tabHash = $(this).attr('href'); + if (tabHash === activeTabHash) { + expect($(tabHash)).toBeVisible('active tab content should be visible by default'); + } else { + expect($(tabHash)).toBeHidden('Tab content should be hidden by default'); + } + }); + + var indicator = normalTabs.find('.indicator'); + expect(indicator).toExist('Indicator should be generated'); + // expect(Math.abs(indicator.offset().left - activeTab.offset().left)).toBeLessThan(1, 'Indicator should be at active tab by default.'); + }); + + it("should switch to clicked tab", function (done) { + var activeTab = normalTabs.find('.active'); + var activeTabHash = activeTab.attr('href'); + var disabledTab = normalTabs.find('.disabled a'); + var disabledTabHash = disabledTab.attr('href'); + var firstTab = normalTabs.find('.tab a').first(); + var firstTabHash = firstTab.attr('href'); + var indicator = normalTabs.find('.indicator'); + + expect(indicator).toExist('Indicator should be generated'); + // expect(Math.abs(indicator.offset().left - activeTab.offset().left)).toBeLessThan(1, 'Indicator should be at active tab by default.'); + + disabledTab.click(); + + setTimeout(function() { + expect($(activeTabHash)).toBeVisible('Clicking disabled should not change tabs.'); + expect($(disabledTabHash)).toBeHidden('Clicking disabled should not change tabs.'); + + firstTab.click(); + + setTimeout(function() { + expect($(activeTabHash)).toBeHidden('Clicking tab should switch to that tab.'); + expect($(firstTabHash)).toBeVisible('Clicking tab should switch to that tab.'); + expect(indicator.offset().left).toEqual(firstTab.offset().left, 'Indicator should move to clicked tab.'); + done(); + }, 400); + }, 400); + }); + + it("shouldn't hide active tab if clicked while active", function (done) { + var activeTab = normalTabs.find('.active'); + var activeTabHash = activeTab.attr('href'); + var indicator = normalTabs.find('.indicator'); + + expect(indicator).toExist('Indicator should be generated'); + + activeTab.click(); + + setTimeout(function() { + expect($(activeTabHash)).toBeVisible('Clicking active tab while active should not hide it.'); + done(); + }, 400); + }); + + + it("should horizontally scroll when too many tabs", function (done) { + var tabsScrollWidth = 0; + normalTabs.parent().css('width', '400px'); + normalTabs.find('.tab').each(function() { + setTimeout(function() { + tabsScrollWidth += $(this).width(); + }, 0); + }); + + setTimeout(function() { + expect(tabsScrollWidth).toBeGreaterThan(normalTabs.width(), 'Scroll width should exceed tabs width'); + done(); + }, 400); + }); + + }); +}); diff --git a/tests/spec/toast/toastSpec.js b/tests/spec/toast/toastSpec.js new file mode 100644 index 0000000000..be9e0d8d6c --- /dev/null +++ b/tests/spec/toast/toastSpec.js @@ -0,0 +1,61 @@ +describe( 'Toasts:', function() { + var toastOutDuration = 375; + var toastInDuration = 300; + var toast; + + describe('Toast javascript functions', function() { + // Toast out animation duration does not count as part of its timer. + it('should display and remove a toast', function(done) { + Materialize.toast('Test toast', toastInDuration); + + setTimeout(function() { + toast = $('.toast'); + expect(toast.length).toBe(1); + expect(toast).toBeVisible(); + expect(toast.text()).toBe('Test toast'); + setTimeout(function() { + toast = $('.toast'); + expect(toast).toBeVisible(); + expect(toast.length).toBe(1, 'because toast duration still on going'); + setTimeout(function() { + toast = $('.toast'); + expect(toast.length).toBe(0, 'because toast should be removed by now'); + done(); + }, toastOutDuration + 90); // .1s leeway is given + }, 10); + }, toastInDuration); + }); + + it('Opens a toast with HTML content', function() { + var $toastContent = $('I am toast content'); + Materialize.toast($toastContent, 400); + toast = $('.toast'); + expect(toast.first('span').text()).toBe('I am toast content'); + expect(toast.first('span').text()).not.toBe('I am toast') + }); + + it('Toasts should call the callback function when dismissed', + function(done) { + var boolObj = {wasCalled: false}; + var callback = function() { + boolObj.wasCalled = true; + }; + Materialize.toast('I am a toast', 100, '', callback); + setTimeout(function() { + expect(boolObj.wasCalled).toBe(true, + 'because the callback set it to true'); + done(); + }, 500); + }); + + it('Apply two custom class to a toast', function() { + Materialize.toast('Hi', 400, 'round flat'); + toast = $('.toast'); + expect(toast.closest('.round.flat').length).toBe(1, + 'because the class parameter was passed with two classes'); + }); + + }); + + +}); diff --git a/tests/spec/tooltip/tooltipFixture.html b/tests/spec/tooltip/tooltipFixture.html new file mode 100644 index 0000000000..87bc87115d --- /dev/null +++ b/tests/spec/tooltip/tooltipFixture.html @@ -0,0 +1,17 @@ + + Hover me! + + + + Hover me! + diff --git a/tests/spec/tooltip/tooltipSpec.js b/tests/spec/tooltip/tooltipSpec.js new file mode 100644 index 0000000000..ff7f31d5a6 --- /dev/null +++ b/tests/spec/tooltip/tooltipSpec.js @@ -0,0 +1,107 @@ +describe( 'Tooltip:', function() { + var tooltippedBtn, tooltip; + + beforeEach(function() { + loadFixtures('tooltip/tooltipFixture.html'); + $('.tooltipped').tooltip(); + }); + + describe('Tooltip opens and closes properly', function() { + + + it('Opens a tooltip on mouse enter', function(done) { + tooltippedBtn = $('#test'); + tooltip = $('#' + tooltippedBtn.attr('data-tooltip-id')); + + // Mouse enter + tooltippedBtn.trigger('mouseenter'); + setTimeout(function() { + expect(tooltip).toBeVisible('because mouse entered tooltipped btn'); + expect(tooltip.children('span').text()).toBe('I am tooltip', + 'because that is the defined text in the html attribute'); + + // Mouse leave + tooltippedBtn.trigger('mouseleave'); + setTimeout(function() { + expect(tooltip).toBeVisible('because mouse left tooltipped btn'); + done(); + }, 300); + }, 200); + }); + + + it('Positions tooltips smartly on the bottom within the screen bounds', function(done) { + tooltippedBtn = $('#test1'); + tooltip = $('#' + tooltippedBtn.attr('data-tooltip-id')); + // Mouse enter + tooltippedBtn.trigger('mouseenter'); + setTimeout(function() { + var offset = tooltip.offset(); + // Check window bounds + expect(offset.top >= 0).toBeTruthy(); + expect(offset.top < 0).toBeFalsy(); + expect(offset.top + tooltip.height() <= + window.innerHeight).toBeTruthy(); + expect(offset.left >= 0).toBeTruthy(); + expect(offset.left < 0).toBeFalsy(); + expect(offset.left + tooltip.width() <= window.innerWidth).toBeTruthy(); + + // check if tooltip is under btn + expect(offset.top > tooltippedBtn.offset().top + tooltippedBtn.height()) + .toBeTruthy(); + expect(offset.top < tooltippedBtn.offset().top + tooltippedBtn.height()) + .toBeFalsy(); + done(); + }, 300); + }); + + + it('Removes tooltip event handlers and tooltip dom object', function() { + tooltippedBtn = $('#test1'); + tooltippedBtn.tooltip('remove'); + + // Check that event handlers are removed + var enterHandler = $._data(tooltippedBtn[0], 'events'); + expect(!!enterHandler).toBeFalsy('because all events should be removed'); + + // Check DOM element is removed + tooltip = $('#' + tooltippedBtn.attr('data-tooltip-id')); + expect(tooltip.length).toBe(0); + }); + + + it('Changes position attribute dynamically and positions tooltips on the right correctly', + function(done) { + tooltippedBtn = $('#test'); + tooltippedBtn.attr('data-position', 'right'); + tooltip = $('#' + tooltippedBtn.attr('data-tooltip-id')); + // Mouse enter + tooltippedBtn.trigger('mouseenter'); + setTimeout(function() { + var offset = tooltip.offset(); + expect(offset.left > tooltippedBtn.offset().left + tooltippedBtn.width()) + .toBeTruthy(); + done(); + }, 300); + }); + + + it('Accepts delay option from javascript initialization', function(done) { + tooltippedBtn = $('#test'); + tooltippedBtn.removeAttr('data-delay'); + tooltippedBtn.tooltip({delay: 200}); + tooltip = $('#' + tooltippedBtn.attr('data-tooltip-id')); + tooltippedBtn.trigger('mouseenter'); + setTimeout(function() { + expect(tooltip.css('visibility')).toBe('hidden', 'because the delay is 200 seconds'); + }, 150); + + setTimeout(function() { + expect(tooltip).toBeVisible('because 200 seconds has passed'); + done(); + }, 250); + + }); + }); + +}); diff --git a/transitions.html b/transitions.html deleted file mode 100644 index 18c6fc98db..0000000000 --- a/transitions.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - Transitions - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -

                        We've made some custom animation functions that will transition your content. It's recommended to use this with our ScrollFire Plugin to make your content transition in as you scroll.

                        - - -

                        showStaggeredList

                        -

                        Use this to create a staggered reveal effect for any UL Tag with list items. Just make sure the list items in the UL are opacity: 0; to ensure the animation works correctly.

                        - Click Me -
                        
                        -  <a href="#!" class="btn" onclick="Materialize.showStaggeredList('#staggered-test')">Click Me</a>
                        -        
                        - -
                        - -
                        -

                        fadeInImage

                        -

                        Use this to fade in images. It also animates grayscale and brightness to give it a unique effect.

                        - Click Me -
                        
                        -  <a href="#!" class="btn" onclick="Materialize.fadeInImage('#image-test')">Click Me</a>
                        -        
                        - -
                        -
                        - -
                        - -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/typography.html b/typography.html deleted file mode 100644 index 511d1d1ba5..0000000000 --- a/typography.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - Typography - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        -
                        -

                        Roboto 2.0

                        -

                        - The standard font Material Design uses is Roboto. We have included the font files with our framework. -

                        -
                        -

                        We bundle our framework with the latest iteration of Roboto Google has released. It comes with 5 different font weights you can use: 200, 300, 400, 500, 600.

                        Here is an image from Google's Roboto Specimen document displaying the different font weights.

                        - -
                        - -

                        Removing Roboto

                        -

                        In case you don't want to use Roboto on your webpage, fear not. Simply change the font stack by modifying the code below to your liking and add it to your custom css.

                        -
                        
                        -  html {
                        -    font-family: GillSans, Calibri, Trebuchet, sans-serif;
                        -  }
                        -        
                        -
                        - - -
                        -

                        Headers

                        -

                        We provide some basic styling on header tags. In the example, you can see the the 6 header tags' different sizes.

                        -
                        -

                        Heading h1

                        -

                        Heading h2

                        -

                        Heading h3

                        -

                        Heading h4

                        -
                        Heading h5
                        -
                        Heading h6
                        -
                        -
                        - -
                        -

                        Blockquotes

                        -

                        - Blockquotes are mainly used to give emphasis to a quote or citation. You can also use these for some extra text hierarchy and emphasis. -

                        -
                        - This is an example quotation that uses the blockquote tag. -
                        Here is another line to make it look bigger. -
                        -
                        
                        -    <blockquote>
                        -      This is an example quotation that uses the blockquote tag.
                        -    </blockquote>
                        -          
                        -
                        - -
                        -

                        Flow Text

                        - Toggle flow-text -
                        -

                        - One common flaw we've seen in many frameworks is a lack of support for truly responsive text. While elements on the page resize fluidly, text still resizes on a fixed basis. To ameliorate this problem, for text heavy pages, we've created a class that fluidly scales text size and line-height to optimize readability for the user. Line length stays between 45-80 characters and line height scales to be larger on smaller screens.

                        -

                        To see Flow Text in action, slowly resize your browser and watch the size of this text body change! Use the button above to toggle off/on flow-text to see the difference!

                        -
                        - -
                        - -

                        To use flow-text on a body of text, simply just add the class flow-text to a tag, see the code blow.

                        -
                        -
                        
                        -    <p class="flow-text">I am Flow Text</p>
                        -          
                        -
                        -
                        - -
                        - -
                        -
                        -
                        -
                        - - -
                        - -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/waves.html b/waves.html deleted file mode 100644 index 3f37bd2188..0000000000 --- a/waves.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - Waves - Materialize - - - - - - - - - - - - - - - - -
                        - -
                        - -
                        -
                        -
                        - -
                        - -
                        - -

                        Introduction

                        -

                        Waves is an external library that we've included in Materialize to allow us to create the ink effect outlined in Material Design

                        - Wave -
                        - - - -
                        -

                        Applying Waves

                        -

                        To put the waves effect on buttons, you just have to put the class waves-effect on to the buttons. If you want the waves effect to be white instead, add both waves-effect waves-light as classes.

                        -
                        
                        -  <a class="waves-effect waves-light btn-large" href="#">Wave</a>
                        -      
                        -
                        - - - -
                        - -

                        Customization

                        -

                        There are several ways to customize waves, you can either use pre-created classes, or you can define your own color by creating a new class

                        -
                        -
                        -
                        Available Colors
                        -

                        To use these, just add the corresponding class to your button. Play around with changing the background color of butons and the waves effect to create something cool!

                        -
                        
                        -    <a href="#!" class="btn waves-effect waves-teal">Send</a>
                        -          
                        -
                        -
                        DefaultSend
                        -
                        waves-lightSend
                        -
                        waves-redSend
                        -
                        waves-yellowSend
                        -
                        waves-orangeSend
                        -
                        waves-purpleSend
                        -
                        waves-greenSend
                        -
                        waves-tealSend
                        -
                        -
                        - -
                        -
                        Custom Colors
                        -

                        If the color you want is not already available, you can easily make your own waves color by creating a custom CSS class. Take a look at the example below where we add a waves-brown effect

                        - -
                        
                        -    /*
                        -    When creating your CSS selector,
                        -    change "brown" to something of your choosing
                        -    */
                        -    .waves-effect.waves-brown .waves-ripple {
                        -     /* The alpha value allows the text and background color
                        -     of the button to still show through. */
                        -      background-color: rgba(121, 85, 72, 0.65);
                        -    }
                        -          
                        -
                        -
                        -
                        - -
                        - -

                        Circle

                        -

                        If you want waves to form to a non rectangular shape, there is an option for circular waves. Just add the waves-circle in addition to waves-effect

                        -
                        -
                        -
                        HTML Markup
                        -
                        
                        -  <a href="#!" class="waves-effect waves-circle waves-light btn-floating secondary-content">
                        -    <i class="material-icons">add</i>
                        -  </a>
                        -          
                        -
                        -
                        Defaultadd
                        -
                        waves-lightadd
                        -
                        -
                        -
                        -
                        - -
                        - - - -
                        - -
                        - -
                        -
                        - - -
                        -
                        -
                        -
                        -
                        Help Materialize Grow
                        -

                        We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.

                        -
                        - - - -
                        - -
                        -
                        -
                        Join the Discussion
                        -

                        We have a Gitter chat room set up where you can talk directly with us. Come in and discuss new features, future goals, general problems or questions, or anything else you can think of.

                        - Chat -
                        -
                        -
                        Connect
                        - -
                        - -
                        -
                        -
                        -
                        -
                        - -
                        - - - - - - - - - - - - - - - - - \ No newline at end of file