diff --git a/node_modules/materialize-css/.editorconfig b/node_modules/materialize-css/.editorconfig new file mode 100644 index 0000000..852ab6e --- /dev/null +++ b/node_modules/materialize-css/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.{js,scss}] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/node_modules/materialize-css/.gitattributes b/node_modules/materialize-css/.gitattributes new file mode 100644 index 0000000..a6dfb1d --- /dev/null +++ b/node_modules/materialize-css/.gitattributes @@ -0,0 +1,6 @@ +* text=auto +**/*.html linguist-documentation +js/velocity.min.js linguist-vendored +js/hammer.min.js linguist-vendored +js/jquery.easing.1.3.js linguist-vendored +js/jquery.timeago.min.js linguist-vendored \ No newline at end of file diff --git a/node_modules/materialize-css/.npmignore b/node_modules/materialize-css/.npmignore new file mode 100644 index 0000000..25c6c2f --- /dev/null +++ b/node_modules/materialize-css/.npmignore @@ -0,0 +1,8 @@ +images/ +.sass-cache/ +.grunt/ +.DS_Store +prepros.cfg +Thumbs.db +.projectile +**/*.log diff --git a/node_modules/materialize-css/.travis.yml b/node_modules/materialize-css/.travis.yml new file mode 100644 index 0000000..0f4169e --- /dev/null +++ b/node_modules/materialize-css/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - "0.12" +before_install: + - npm install -g grunt-cli +git: + depth: 10 diff --git a/node_modules/materialize-css/404.html b/node_modules/materialize-css/404.html new file mode 100644 index 0000000..810556f --- /dev/null +++ b/node_modules/materialize-css/404.html @@ -0,0 +1,208 @@ + + + + + + + + + 404 - Materialize + + + + + + + + + + + + + + + + +
+
menu
+ +
+
+
+
+
+

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/node_modules/materialize-css/CHANGELOG.md b/node_modules/materialize-css/CHANGELOG.md index 857fefb..9c7c172 100644 --- a/node_modules/materialize-css/CHANGELOG.md +++ b/node_modules/materialize-css/CHANGELOG.md @@ -1,3 +1,51 @@ +## 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 diff --git a/node_modules/materialize-css/CNAME b/node_modules/materialize-css/CNAME new file mode 100644 index 0000000..32e446b --- /dev/null +++ b/node_modules/materialize-css/CNAME @@ -0,0 +1 @@ +materializecss.com diff --git a/node_modules/materialize-css/CONTRIBUTING.md b/node_modules/materialize-css/CONTRIBUTING.md new file mode 100644 index 0000000..e5bcdc8 --- /dev/null +++ b/node_modules/materialize-css/CONTRIBUTING.md @@ -0,0 +1,94 @@ +## 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 +- Make sure you are altering the correct source files (Never alter compiled / dist files) + +## 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. + +### Submitting Your Pull Request + +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! + + +### 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: + ``` + `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. diff --git a/node_modules/materialize-css/Gruntfile.js b/node_modules/materialize-css/Gruntfile.js new file mode 100644 index 0000000..6d445fb --- /dev/null +++ b/node_modules/materialize-css/Gruntfile.js @@ -0,0 +1,604 @@ +module.exports = function(grunt) { + + // configure the tasks + grunt.initConfig({ + // Copy + copy: { + 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: { // Task + expanded: { // Target + options: { // Target options + outputStyle: 'expanded', + sourcemap: false, + }, + files: { + 'dist/css/materialize.css': 'sass/materialize.scss', + } + }, + + min: { + options: { + outputStyle: 'compressed', + sourcemap: false + }, + files: { + 'dist/css/materialize.min.css': 'sass/materialize.scss', + } + }, + + // Compile ghpages css + gh: { + options: { + outputStyle: 'compressed', + sourcemap: false + }, + files: { + 'css/ghpages-materialize.css': 'sass/ghpages-materialize.scss', + } + }, + + // Compile bin css + bin: { + options: { + outputStyle: 'expanded', + sourcemap: false + }, + files: { + 'bin/materialize.css': 'sass/materialize.scss', + } + } + }, + + // PostCss Autoprefixer + postcss: { + options: { + processors: [ + require('autoprefixer')({ + browsers: [ + 'last 2 versions', + 'Chrome >= 30', + 'Firefox >= 30', + 'ie >= 10', + 'Safari >= 8'] + }) + ] + }, + expended: { + src: 'dist/css/materialize.css' + }, + min: { + src: 'dist/css/materialize.min.css' + }, + gh: { + src: 'css/ghpages-materialize.css' + }, + bin: { + src: 'bin/materialize.css' + } + }, + + // Browser Sync integration + browserSync: { + bsFiles: ["bin/*.js", "bin/*.css", "!**/node_modules/**/*"], + options: { + server: { + baseDir: "./" // make server from root dir + }, + port: 8000, + ui: { + port: 8080, + weinre: { + port: 9090 + } + }, + open: false + } + }, + + // Concat + concat: { + options: { + separator: ';' + }, + dist: { + // the files to concatenate + src: [ + "js/initial.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/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/character_counter.js", + "js/carousel.js", + ], + // the location of the resulting JS file + dest: 'dist/js/materialize.js' + }, + temp: { + // the files to concatenate + src: [ + "js/initial.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/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/character_counter.js", + "js/carousel.js", + ], + // the location of the resulting JS file + dest: 'temp/js/materialize.js' + }, + }, + + // Uglify + uglify: { + options: { + // Use these options when debugging + // mangle: false, + // compress: false, + // beautify: true + + }, + dist: { + files: { + 'dist/js/materialize.min.js': ['dist/js/materialize.js'] + } + }, + bin: { + files: { + 'bin/materialize.js': ['temp/js/materialize.js'] + } + }, + extras: { + files: { + 'extras/noUiSlider/nouislider.min.js': ['extras/noUiSlider/nouislider.js'] + } + } + }, + + + // Compress + compress: { + main: { + options: { + archive: 'bin/materialize.zip', + level: 6 + }, + files:[ + { expand: true, cwd: 'dist/', src: ['**/*'], dest: 'materialize/'}, + { expand: true, cwd: './', src: ['LICENSE', 'README.md'], dest: 'materialize/'}, + ] + }, + + src: { + options: { + archive: 'bin/materialize-src.zip', + level: 6 + }, + files:[ + {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: [ + "initial.js", + "jquery.easing.1.3.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", + "character_counter.js", + "carousel.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/'} + + ] + }, + + starter_template: { + options: { + archive: 'templates/starter-template.zip', + level: 6 + }, + files:[ + { expand: true, cwd: 'dist/', src: ['**/*'], dest: 'starter-template/'}, + { expand: true, cwd: 'templates/starter-template/', src: ['index.html', 'LICENSE'], dest: 'starter-template/'}, + { expand: true, cwd: 'templates/starter-template/css', src: ['style.css'], dest: 'starter-template/css'}, + { expand: true, cwd: 'templates/starter-template/js', src: ['init.js'], dest: 'starter-template/js'} + + ] + }, + + parallax_template: { + options: { + archive: 'templates/parallax-template.zip', + level: 6 + }, + files:[ + { expand: true, cwd: 'dist/', src: ['**/*'], dest: 'parallax-template/'}, + { expand: true, cwd: 'templates/parallax-template/', src: ['index.html', 'LICENSE', 'background1.jpg', 'background2.jpg', 'background3.jpg'], dest: 'parallax-template/'}, + { expand: true, cwd: 'templates/parallax-template/css', src: ['style.css'], dest: 'parallax-template/css'}, + { expand: true, cwd: 'templates/parallax-template/js', src: ['init.js'], dest: 'parallax-template/js'} + + ] + } + + }, + + + // Clean + clean: { + temp: { + src: [ 'temp/' ] + }, + }, + + // Jade + jade: { + compile: { + options: { + pretty: true, + data: { + debug: false + } + }, + files: { + "index.html": "jade/index.jade", + "icons.html": "jade/icons.jade", + "about.html": "jade/about.jade", + "sass.html": "jade/sass.jade", + "getting-started.html": "jade/getting-started.jade", + "mobile.html": "jade/mobile.jade", + "showcase.html": "jade/showcase.jade", + "parallax.html": "jade/parallax.jade", + "parallax-demo.html": "jade/parallax-demo.jade", + "typography.html": "jade/typography.jade", + "color.html": "jade/color.jade", + "shadow.html": "jade/shadow.jade", + "grid.html": "jade/grid.jade", + "media-css.html": "jade/media-css.jade", + "table.html": "jade/table.jade", + "helpers.html": "jade/helpers.jade", + "forms.html": "jade/forms.jade", + "buttons.html": "jade/buttons.jade", + "navbar.html": "jade/navbar.jade", + "cards.html": "jade/cards.jade", + "preloader.html": "jade/preloader.jade", + "collections.html": "jade/collections.jade", + "badges.html": "jade/badges.jade", + "footer.html": "jade/footer.jade", + "dialogs.html": "jade/dialogs.jade", + "modals.html": "jade/modals.jade", + "dropdown.html": "jade/dropdown.jade", + "tabs.html": "jade/tabs.jade", + "side-nav.html": "jade/sideNav.jade", + "pushpin.html": "jade/pushpin.jade", + "waves.html": "jade/waves.jade", + "media.html": "jade/media.jade", + "collapsible.html": "jade/collapsible.jade", + "chips.html": "jade/chips.jade", + "scrollfire.html": "jade/scrollFire.jade", + "scrollspy.html": "jade/scrollspy.jade", + "transitions.html": "jade/transitions.jade", + "fullscreen-slider-demo.html": "jade/fullscreen-slider-demo.jade", + "pagination.html": "jade/pagination.jade", + "breadcrumbs.html": "jade/breadcrumbs.jade", + "carousel.html": "jade/carousel.jade", + "pushpin-demo.html": "jade/pushpin-demo.jade", + "css-transitions.html": "jade/css-transitions.jade", + "404.html": "jade/404.jade", + + } + } + }, + + // Watch Files + watch: { + jade: { + files: ['jade/**/*'], + tasks: ['jade_compile'], + options: { + interrupt: false, + spawn: false, + }, + }, + + js: { + files: [ "js/**/*", "!js/init.js"], + tasks: ['js_compile'], + options: { + interrupt: false, + spawn: false, + }, + }, + + sass: { + files: ['sass/**/*'], + tasks: ['sass_compile'], + options: { + interrupt: false, + spawn: false, + }, + } + }, + + + // Concurrent + concurrent: { + options: { + logConcurrentOutput: true, + limit: 10, + }, + monitor: { + tasks: ["watch:jade", "watch:js", "watch:sass", "notify:watching", 'server'] + }, + }, + + + // Notifications + notify: { + watching: { + options: { + enabled: true, + message: 'Watching Files!', + title: "Materialize", // defaults to the name in package.json, or will use project directory's name + success: true, // whether successful grunt executions should be notified automatically + duration: 1 // the duration of notification in seconds, for `notify-send only + } + }, + + sass_compile: { + options: { + enabled: true, + message: 'Sass Compiled!', + title: "Materialize", + success: true, + duration: 1 + } + }, + + js_compile: { + options: { + enabled: true, + message: 'JS Compiled!', + title: "Materialize", + success: true, + duration: 1 + } + }, + + jade_compile: { + options: { + enabled: true, + message: 'Jade Compiled!', + title: "Materialize", + success: true, + duration: 1 + } + }, + + server: { + options: { + enabled: true, + message: 'Server Running!', + title: "Materialize", + success: true, + duration: 1 + } + } + }, + + // Text Replace + replace: { + version: { // Does not edit README.md + src: [ + 'bower.json', + 'package.json', + 'package.js', + 'jade/**/*.html' + ], + overwrite: true, + replacements: [{ + from: grunt.option( "oldver" ), + to: grunt.option( "newver" ) + }] + }, + readme: { // Changes README.md + src: [ + 'README.md' + ], + overwrite: true, + replacements: [{ + from: 'Current Version : v'+grunt.option( "oldver" ), + to: 'Current Version : v'+grunt.option( "newver" ) + }] + }, + }, + + // 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'] + } + } + }, + + // 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 + } + }, + }, + + // Removes console logs + removelogging: { + source: { + src: ["js/**/*.js", "!js/velocity.min.js"], + options: { + // see below for options. this is optional. + } + } + }, + }); + + // load the tasks + // grunt.loadNpmTasks('grunt-gitinfo'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-sass'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-compress'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-jade'); + grunt.loadNpmTasks('grunt-concurrent'); + 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-browser-sync'); + grunt.loadNpmTasks('grunt-contrib-jasmine'); + grunt.loadNpmTasks('grunt-postcss'); + // define the tasks + grunt.registerTask( + 'release',[ + 'lint', + 'copy', + 'sass:expanded', + 'sass:min', + 'postcss:expended', + 'postcss:min', + 'concat:dist', + 'uglify:dist', + 'uglify:extras', + 'usebanner:release', + 'compress:main', + 'compress:src', + 'compress:starter_template', + 'compress:parallax_template', + 'replace:version', + 'replace:readme', + 'rename:rename_src', + 'rename:rename_compiled' + ] + ); + + 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', '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('travis', ['jasmine']); +}; diff --git a/node_modules/materialize-css/ISSUE_TEMPLATE.md b/node_modules/materialize-css/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..b107e95 --- /dev/null +++ b/node_modules/materialize-css/ISSUE_TEMPLATE.md @@ -0,0 +1,8 @@ +### Description +Add a detailed description of your issue. + +### Repro Steps +Layout the steps to reproduce your issue. + +### Screenshots / Codepen +Add supplemental screenshots or code examples. Look for a codepen template in our Contributing Guidelines. diff --git a/node_modules/materialize-css/LICENSE b/node_modules/materialize-css/LICENSE index dffae43..44bd03e 100644 --- a/node_modules/materialize-css/LICENSE +++ b/node_modules/materialize-css/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/node_modules/materialize-css/README.md b/node_modules/materialize-css/README.md index dbc4f93..e535628 100755 --- a/node_modules/materialize-css/README.md +++ b/node_modules/materialize-css/README.md @@ -1,10 +1,11 @@ ![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 +[![Travis CI](https://travis-ci.org/Dogfalo/materialize.svg?branch=master)](https://travis-ci.org/Dogfalo/materialize)[![devDependency Status](https://david-dm.org/Dogfalo/materialize/dev-status.svg)](https://david-dm.org/Dogfalo/materialize#info=devDependencies)[![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) -### Current Version : v0.97.3 +[Materialize](http://materializecss.com/), a CSS Framework based on material design + +### Current Version : v0.98.0 ## Sass Requirements: - Ruby Sass 3.3+, LibSass 0.6+ @@ -13,63 +14,48 @@ Materialize, a CSS Framework based on material design Chrome 35+, Firefox 31+, Safari 7+, IE 10+ ## Changelog -- 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.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 +Bolded styling surrounded by emojis indicates a breaking change. + +- v0.98.0 (January 25th) + - :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.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 ## Contributing [Please read CONTRIBUTING.md for more information](CONTRIBUTING.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](https://docs.google.com/document/d/1dVM6qGt_b_y9RRhr9X7oZfFydaJIEqB9CT7yekv-4XE/edit?usp=sharing) diff --git a/node_modules/materialize-css/_SpecRunner.html b/node_modules/materialize-css/_SpecRunner.html new file mode 100644 index 0000000..bd0b4a0 --- /dev/null +++ b/node_modules/materialize-css/_SpecRunner.html @@ -0,0 +1,63 @@ + + + + + Jasmine Spec Runner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/materialize-css/about.html b/node_modules/materialize-css/about.html new file mode 100644 index 0000000..3e5681e --- /dev/null +++ b/node_modules/materialize-css/about.html @@ -0,0 +1,307 @@ + + + + + + + + + About - Materialize + + + + + + + + + + + + + + + + +
+
menu
+ +
+
+
+
+
+

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.

+
+
+
+ +
+ +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/badges.html b/node_modules/materialize-css/badges.html new file mode 100644 index 0000000..c51acbf --- /dev/null +++ b/node_modules/materialize-css/badges.html @@ -0,0 +1,377 @@ + + + + + + + + + Badges - Materialize + + + + + + + + + + + + + + + + +
+ +
menu
+ +
+
+
+ +
+ + +
+ +
+
+

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

+ +
+ 1Alan + 4Alan + Alan + 14Alan +
+

+  <div class="collection">
+    <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"><span class="badge">14</span>Alan</a>
+  </div>
+            
+
+
+
+ + + + + +
+
+
+ +

Badges in Collapsibles

+ +
    +
  • +
    4filter_dramaFirst
    +

    Lorem ipsum dolor sit amet.

    +
  • +
  • +
    1placeSecond
    +

    Lorem ipsum dolor sit amet.

    +
  • +
+
+ +

+<ul class="collapsible" data-collapsible="accordion">
+  <li>
+    <div class="collapsible-header"><span class="new badge">4</span><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"><span class="badge">1</span><i class="material-icons">place</i>Second</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>
+            
+
+
+ +
+ + + +
+ +
+
+
+ + +
+ +
+
+ +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/bin/jquery-2.1.1.min.js b/node_modules/materialize-css/bin/jquery-2.1.1.min.js new file mode 100644 index 0000000..c4643af --- /dev/null +++ b/node_modules/materialize-css/bin/jquery-2.1.1.min.js @@ -0,0 +1,5 @@ +/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) +},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n(" +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/buttons.html b/node_modules/materialize-css/buttons.html new file mode 100644 index 0000000..d91362f --- /dev/null +++ b/node_modules/materialize-css/buttons.html @@ -0,0 +1,388 @@ + + + + + + + + + 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">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>
+        
+
+
+

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">
+    <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>
+        
+ +

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

+

+  $('.fixed-action-btn').openFAB();
+  $('.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>
+        
+ + +
+ +

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>
+        
+
+
+

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/node_modules/materialize-css/cards.html b/node_modules/materialize-css/cards.html new file mode 100644 index 0000000..cddc24b --- /dev/null +++ b/node_modules/materialize-css/cards.html @@ -0,0 +1,747 @@ + + + + + + + + + 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>
+            
+
+
+
+
+ +
+
+ +
+

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="http://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>
+            
+
+
+
+
+ +
+
+ +
+

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 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. +

+
+
+
+ + +
+
+ +
+

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/node_modules/materialize-css/carousel.html b/node_modules/materialize-css/carousel.html new file mode 100644 index 0000000..69dd87d --- /dev/null +++ b/node_modules/materialize-css/carousel.html @@ -0,0 +1,384 @@ + + + + + + + + + Carousel - Materialize + + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ + +
+

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="http://lorempixel.com/250/250/nature/1"></a>
+    <a class="carousel-item" href="#two!"><img src="http://lorempixel.com/250/250/nature/2"></a>
+    <a class="carousel-item" href="#three!"><img src="http://lorempixel.com/250/250/nature/3"></a>
+    <a class="carousel-item" href="#four!"><img src="http://lorempixel.com/250/250/nature/4"></a>
+    <a class="carousel-item" href="#five!"><img src="http://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);
+      
+
+ + +
+

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="http://lorempixel.com/800/400/food/1"></a>
+    <a class="carousel-item" href="#two!"><img src="http://lorempixel.com/800/400/food/2"></a>
+    <a class="carousel-item" href="#three!"><img src="http://lorempixel.com/800/400/food/3"></a>
+    <a class="carousel-item" href="#four!"><img src="http://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});
+        
+
+ +
+ + + + + +
+ +
+ +
+
+ +
+
+
+
+
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/node_modules/materialize-css/chips.html b/node_modules/materialize-css/chips.html new file mode 100644 index 0000000..6e3a451 --- /dev/null +++ b/node_modules/materialize-css/chips.html @@ -0,0 +1,419 @@ + + + + + + + + + Chips - Materialize + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Introduction

+

+ Chips 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 with the class close. +

+

+  <div class="chip">
+    Tag
+    <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({
+    autocompleteData: {
+      'Apple': null,
+      'Microsoft': null,
+      'Google': null
+    }
+  });
+        
+

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
chips.addthis method is triggered when a chip is added.
chips.deletethis method is triggered when a chip is deleted.
chips.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');
+        
+ +
+
+ + +
+
+
+ + +
+ +
+
+ +
+
+
+
+
+
+
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/node_modules/materialize-css/collapsible.html b/node_modules/materialize-css/collapsible.html new file mode 100644 index 0000000..bb3be70 --- /dev/null +++ b/node_modules/materialize-css/collapsible.html @@ -0,0 +1,379 @@ + + + + + + + + + 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"><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"><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"><span>Lorem ipsum dolor sit amet.</span></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();
+  });
+        
+ +

+
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

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

+ +

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
+
+
    +
  • +
    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/node_modules/materialize-css/collections.html b/node_modules/materialize-css/collections.html new file mode 100644 index 0000000..90337dc --- /dev/null +++ b/node_modules/materialize-css/collections.html @@ -0,0 +1,413 @@ + + + + + + + + + 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/node_modules/materialize-css/color.html b/node_modules/materialize-css/color.html new file mode 100644 index 0000000..6b19b69 --- /dev/null +++ b/node_modules/materialize-css/color.html @@ -0,0 +1,562 @@ + + + + + + + + + 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/node_modules/materialize-css/css-transitions.html b/node_modules/materialize-css/css-transitions.html new file mode 100644 index 0000000..726704e --- /dev/null +++ b/node_modules/materialize-css/css-transitions.html @@ -0,0 +1,228 @@ + + + + + + + + + CSS Transitions - Materialize + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

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>
+  
+
+ +
+ +
+
+
+ + +
+
+ +
+
+
+ +
+
+ + +
+
+
+
+
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/node_modules/materialize-css/css/ghpages-materialize.css b/node_modules/materialize-css/css/ghpages-materialize.css index 7f42ea7..e411bea 100644 --- a/node_modules/materialize-css/css/ghpages-materialize.css +++ b/node_modules/materialize-css/css/ghpages-materialize.css @@ -1,11 +1,11 @@ -.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{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"]{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;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: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-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.valign-wrapper .valign{display:block}.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 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 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 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 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 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 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{transition:box-shadow .25s;box-shadow:0}.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;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{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);-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,.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: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}}footer.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)}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{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: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;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}span.badge{min-width:3rem;padding:0 6px;margin-left:14px;text-align:center;font-size:1rem;line-height:inherit;color:#757575;float:right;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}.side-nav span.badge.new,.collapsible span.badge.new{position:relative;background-color:transparent}.side-nav span.badge.new::before,.collapsible span.badge.new::before{content:'';position:absolute;top:10px;right:0;bottom:10px;left:0;background-color:#26a69a;border-radius:2px;z-index:-1}.collapsible span.badge.new{z-index:1}.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:0.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#26a69a;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-touch-callout:none;-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}.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:-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;box-sizing:border-box;padding:0 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%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav.nav-extended{height:auto}nav.nav-extended .nav-wrapper{height:auto}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;white-space:nowrap}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 ul{margin:0}nav ul li{transition:background-color .3s;float:left;padding:0}nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{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: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;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);transition:color .3s}nav .input-field label.active i{color:#fff}nav .input-field label.active{-webkit-transform:translateY(0);transform:translateY(0)}.navbar-fixed{position:relative;height:56px;z-index:997}.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("../fonts/roboto/Roboto-Thin.eot");src:url("../fonts/roboto/Roboto-Thin.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"),url("../fonts/roboto/Roboto-Thin.woff") format("woff"),url("../fonts/roboto/Roboto-Thin.ttf") format("truetype");font-weight:200}@font-face{font-family:"Roboto";src:local(Roboto Light),url("../fonts/roboto/Roboto-Light.eot");src:url("../fonts/roboto/Roboto-Light.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Light.woff2") format("woff2"),url("../fonts/roboto/Roboto-Light.woff") format("woff"),url("../fonts/roboto/Roboto-Light.ttf") format("truetype");font-weight:300}@font-face{font-family:"Roboto";src:local(Roboto Regular),url("../fonts/roboto/Roboto-Regular.eot");src:url("../fonts/roboto/Roboto-Regular.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"),url("../fonts/roboto/Roboto-Regular.woff") format("woff"),url("../fonts/roboto/Roboto-Regular.ttf") format("truetype");font-weight:400}@font-face{font-family:"Roboto";src:url("../fonts/roboto/Roboto-Medium.eot");src:url("../fonts/roboto/Roboto-Medium.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"),url("../fonts/roboto/Roboto-Medium.woff") format("woff"),url("../fonts/roboto/Roboto-Medium.ttf") format("truetype");font-weight:500}@font-face{font-family:"Roboto";src:url("../fonts/roboto/Roboto-Bold.eot");src:url("../fonts/roboto/Roboto-Bold.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"),url("../fonts/roboto/Roboto-Bold.woff") format("woff"),url("../fonts/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;margin:0.5rem 0 1rem 0;background-color:#fff;transition: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-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-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.card.horizontal .card-stacked .card-content{-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;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{position:relative;background-color:inherit;border-top:1px solid rgba(160,160,160,0.2);padding:20px}.card .card-action a:not(.btn):not(.btn-large):not(.btn-floating){color:#ffab40;margin-right:20px;transition:color .3s ease;text-transform:uppercase}.card .card-action a:not(.btn):not(.btn-large):not(.btn-floating):hover{color:#ffd8a6}.card .card-reveal{padding:20px;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:0;width:auto;clear:both;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-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-between;-ms-flex-pack:justify;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;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-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;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-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;display:none;position:absolute;text-align:center;max-width:calc(100% - 4px);overflow:hidden;left:0;top:0;pointer-events:none}.backdrop{position:absolute;opacity:0;display:none;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%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.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;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{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;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%;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:40px}.btn-floating:hover{background-color:#26a69a}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:56px;height:56px}.btn-floating.btn-large i{line-height:56px}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.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-flex;display:-ms-flexbox;display:flex;top:0;bottom:0}.fixed-action-btn.toolbar ul li{-webkit-flex:1;-ms-flex:1;flex:1;display:inline-block;margin:0;height:100%;transition:none}.fixed-action-btn.toolbar ul li a{display:block;overflow:hidden;position:relative;width:100%;height:100%;background-color:transparent;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;background-color:transparent;color:#343434;cursor:pointer;transition:background-color .2s}.btn-flat:focus,.btn-flat:active{background-color:transparent}.btn-flat:focus,.btn-flat:hover{background-color:rgba(0,0,0,0.1);box-shadow:none}.btn-flat:active{background-color:rgba(0,0,0,0.2)}.btn-flat.disabled{background-color:transparent !important;color:#b3b3b3 !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}.input-field.col .dropdown-content [type="checkbox"]+label{top:1px;left:0;height:18px}/*! +.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{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"]{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;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: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-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.valign-wrapper .valign{display:block}.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 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 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 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 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 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 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{transition:box-shadow .25s;box-shadow:0}.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;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{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);-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,.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: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}}footer.page-footer{padding-top:20px;background-color:#ee6e73}footer.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:-webkit-flex;display:-ms-flexbox;display:flex;-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{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 .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;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;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-touch-callout:none;-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;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}.collection-item span.badge{margin-top:calc(.75rem - 11px)}.collapsible span.badge{margin-top:calc(1.5rem - 11px)}.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;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%}}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;white-space:nowrap}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{transition:background-color .3s;float:left;padding:0}nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{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;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);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.eot");src:url("../fonts/roboto/Roboto-Thin.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"),url("../fonts/roboto/Roboto-Thin.woff") format("woff"),url("../fonts/roboto/Roboto-Thin.ttf") format("truetype");font-weight:200}@font-face{font-family:"Roboto";src:local(Roboto Light),url("../fonts/roboto/Roboto-Light.eot");src:url("../fonts/roboto/Roboto-Light.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Light.woff2") format("woff2"),url("../fonts/roboto/Roboto-Light.woff") format("woff"),url("../fonts/roboto/Roboto-Light.ttf") format("truetype");font-weight:300}@font-face{font-family:"Roboto";src:local(Roboto Regular),url("../fonts/roboto/Roboto-Regular.eot");src:url("../fonts/roboto/Roboto-Regular.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"),url("../fonts/roboto/Roboto-Regular.woff") format("woff"),url("../fonts/roboto/Roboto-Regular.ttf") format("truetype");font-weight:400}@font-face{font-family:"Roboto";src:url("../fonts/roboto/Roboto-Medium.eot");src:url("../fonts/roboto/Roboto-Medium.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"),url("../fonts/roboto/Roboto-Medium.woff") format("woff"),url("../fonts/roboto/Roboto-Medium.ttf") format("truetype");font-weight:500}@font-face{font-family:"Roboto";src:url("../fonts/roboto/Roboto-Bold.eot");src:url("../fonts/roboto/Roboto-Bold.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"),url("../fonts/roboto/Roboto-Bold.woff") format("woff"),url("../fonts/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 .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,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}}.scale-transition{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);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{transition: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;transition: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-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-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.card.horizontal .card-stacked .card-content{-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 a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating){color:#ffab40;margin-right:24px;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;clear:both;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-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-between;-ms-flex-pack:justify;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;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-flex;display:-ms-flexbox;display:flex}.tabs.tabs-fixed-width .tab{-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;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-flex;display:-ms-flexbox;display:flex}.tabs .tab{-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;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{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;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%;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 i{line-height:56px}.btn-floating.halfway-fab{position:absolute;right:24px;bottom:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.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:998}.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-flex;display:-ms-flexbox;display:flex;top:0;bottom:0}.fixed-action-btn.toolbar ul li{-webkit-flex:1;-ms-flex:1;flex:1;display:inline-block;margin:0;height:100%;transition:none}.fixed-action-btn.toolbar ul li a{display:block;overflow:hidden;position:relative;width:100%;height:100%;background-color:transparent;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;background-color:transparent;color:#343434;cursor:pointer;transition:background-color .2s}.btn-flat:focus,.btn-flat:active{background-color:transparent}.btn-flat:focus,.btn-flat:hover{background-color:rgba(0,0,0,0.1);box-shadow:none}.btn-flat:active{background-color:rgba(0,0,0,0.2)}.btn-flat.disabled{background-color:transparent !important;color:#b3b3b3 !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}.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;will-change:opacity, transform;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);transition:all 0.7s ease-out;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{transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, #fff 100%, #000 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%}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-flat{float:right;margin:6px 0}.modal-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;box-sizing:border-box}.collapsible-body p{margin:0;padding:2rem}.side-nav .collapsible,.side-nav.fixed .collapsible{border: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;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 0.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;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;box-shadow:none;margin:0 0 20px 0;min-height:45px;outline:none;transition:all .3s}.chips.focus{border-bottom:1px solid #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;box-shadow:none !important}.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;transition:opacity .4s}.materialboxed:hover{will-change:left, top, width, height}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:-webkit-zoom-out;cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#292929;z-index:1000;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:not([type]),input[type=text],input[type=password],input[type=email],input[type=url],input[type=time],input[type=date],input[type=datetime],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 20px 0;padding:0;box-shadow:none;box-sizing:content-box;transition:all 0.3s}input:not([type]):disabled,input:not([type])[readonly="readonly"],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]:disabled,input[type=datetime][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:not([type]):disabled+label,input:not([type])[readonly="readonly"]+label,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]:disabled+label,input[type=datetime][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:not([type]):focus:not([readonly]),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]: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:not([type]):focus:not([readonly])+label,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]: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:not([type]).valid,input:not([type]):focus.valid,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].valid,input[type=datetime]: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:not([type]).valid+label:after,input:not([type]):focus.valid+label:after,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].valid+label:after,input[type=datetime]: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:not([type]).invalid,input:not([type]):focus.invalid,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].invalid,input[type=datetime]: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:not([type]).invalid+label:after,input:not([type]):focus.invalid+label:after,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].invalid+label:after,input[type=datetime]: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:not([type]).validate+label,input[type=text].validate+label,input[type=password].validate+label,input[type=email].validate+label,input[type=url].validate+label,input[type=time].validate+label,input[type=date].validate+label,input[type=datetime].validate+label,input[type=datetime-local].validate+label,input[type=tel].validate+label,input[type=number].validate+label,input[type=search].validate+label,textarea.materialize-textarea.validate+label{width:100%;pointer-events:none}input:not([type])+label:after,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]+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:60px;opacity:0;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: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.8rem;left:0;font-size:1rem;cursor:text;transition:.2s ease-out}.input-field label.active{font-size:0.8rem;-webkit-transform:translateY(-140%);transform:translateY(-140%)}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;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;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;padding:.8rem 0 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}.autocomplete-content{margin-top:-15px;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;left:-9999px;opacity:0}[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;-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;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{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.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;opacity:0}[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,[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;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.26)}[type="checkbox"].tabbed:focus+label:after{-webkit-transform:scale(1);transform:scale(1);border:0;border-radius:50%;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.26);border-bottom:2px solid rgba(0,0,0,0.26)}[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.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 .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: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: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:#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;left:24px}.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,input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::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,input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,0,0,0.08)}.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{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}.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 20px 0;padding:0;display:block}.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 span.caret.disabled{color:rgba(0,0,0,0.26)}.select-wrapper+label{position:absolute;top:-14px;font-size:0.8rem}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,.select-dropdown li.disabled>span,.select-dropdown li.optgroup{color:rgba(0,0,0,0.3);background-color:transparent}.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)}.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;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;top:10px;margin-left:-6px;-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;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 #ea4a4f}.table-of-contents a.active{font-weight:500;padding-left:18px;border-left:2px solid #ea4a4f}.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 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 a:hover{background-color:rgba(0,0,0,0.05)}.side-nav a.btn,.side-nav a.btn-large,.side-nav a.btn-large,.side-nav a.btn-flat,.side-nav a.btn-floating{margin:10px 15px}.side-nav a.btn,.side-nav a.btn-large,.side-nav a.btn-large,.side-nav a.btn-floating{color:#fff}.side-nav a.btn-flat{color:#343434}.side-nav a.btn:hover,.side-nav a.btn-large:hover,.side-nav a.btn-large:hover{background-color:#2bbbad}.side-nav a.btn-floating:hover{background-color:#26a69a}.side-nav li>a>i,.side-nav li>a>[class^="mdi-"],.side-nav 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 .userView{position:relative;padding:32px 32px 0;margin-bottom:8px}.side-nav .userView>a{height:auto;padding:0}.side-nav .userView>a:hover{background-color:transparent}.side-nav .userView .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.side-nav .userView .circle,.side-nav .userView .name,.side-nav .userView .email{display:block}.side-nav .userView .circle{height:64px;width:64px}.side-nav .userView .name,.side-nav .userView .email{font-size:14px;line-height:24px}.side-nav .userView .name{margin-top:16px;font-weight:500}.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 .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}#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{-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;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;height: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:400px;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);transition:background-color .3s;border-radius:50%}.carousel .indicators .indicator-item.active{background-color:#fff}.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}/*! + */.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;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);transition:all 0.7s ease-out;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{transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, #fff 100%, #000 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%}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-flat{float:right;margin:6px 0}.modal-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:.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;box-sizing:border-box;padding:2rem}.side-nav .collapsible,.side-nav.fixed .collapsible{border: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;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 0.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;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;box-shadow:none;margin:0 0 20px 0;min-height:45px;outline:none;transition:all .3s}.chips.focus{border-bottom:1px solid #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;box-shadow:none !important}.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;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}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}input:not([type]),input[type=text],input[type=password],input[type=email],input[type=url],input[type=time],input[type=date],input[type=datetime],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 20px 0;padding:0;box-shadow:none;box-sizing:content-box;transition:all 0.3s}input:not([type]):disabled,input:not([type])[readonly="readonly"],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]:disabled,input[type=datetime][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:not([type]):disabled+label,input:not([type])[readonly="readonly"]+label,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]:disabled+label,input[type=datetime][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:not([type]):focus:not([readonly]),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]: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:not([type]):focus:not([readonly])+label,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]: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:not([type]).valid,input:not([type]):focus.valid,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].valid,input[type=datetime]: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:not([type]).valid+label:after,input:not([type]):focus.valid+label:after,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].valid+label:after,input[type=datetime]: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:not([type]).invalid,input:not([type]):focus.invalid,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].invalid,input[type=datetime]: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:not([type]).invalid+label:after,input:not([type]):focus.invalid+label:after,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].invalid+label:after,input[type=datetime]: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:not([type]).validate+label,input[type=text].validate+label,input[type=password].validate+label,input[type=email].validate+label,input[type=url].validate+label,input[type=time].validate+label,input[type=date].validate+label,input[type=datetime].validate+label,input[type=datetime-local].validate+label,input[type=tel].validate+label,input[type=number].validate+label,input[type=search].validate+label,textarea.materialize-textarea.validate+label{width:100%;pointer-events:none}input:not([type])+label:after,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]+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:60px;opacity:0;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.8rem;left:0;font-size:1rem;cursor:text;transition:.2s ease-out}.input-field label:not(.label-icon).active{font-size:.8rem;-webkit-transform:translateY(-140%);transform:translateY(-140%)}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;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;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;padding:.8rem 0 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}.autocomplete-content{margin-top:-15px;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;left:-9999px;opacity:0}[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;-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;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{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.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;opacity:0}[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,[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;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.26)}[type="checkbox"].tabbed:focus+label:after{-webkit-transform:scale(1);transform:scale(1);border:0;border-radius:50%;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.26);border-bottom:2px solid rgba(0,0,0,0.26)}[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.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 .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: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: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:#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;left:24px}.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,input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::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,input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,0,0,0.08)}.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{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}.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 20px 0;padding:0;display:block}.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 span.caret.disabled{color:rgba(0,0,0,0.26)}.select-wrapper+label{position:absolute;top:-14px;font-size:.8rem}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,.select-dropdown li.disabled>span,.select-dropdown li.optgroup{color:rgba(0,0,0,0.3);background-color:transparent}.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)}.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;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;top:10px;margin-left:-6px;-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;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 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 a:hover{background-color:rgba(0,0,0,0.05)}.side-nav a.btn,.side-nav a.btn-large,.side-nav a.btn-large,.side-nav a.btn-flat,.side-nav a.btn-floating{margin:10px 15px}.side-nav a.btn,.side-nav a.btn-large,.side-nav a.btn-large,.side-nav a.btn-floating{color:#fff}.side-nav a.btn-flat{color:#343434}.side-nav a.btn:hover,.side-nav a.btn-large:hover,.side-nav a.btn-large:hover{background-color:#2bbbad}.side-nav a.btn-floating:hover{background-color:#26a69a}.side-nav li>a>i,.side-nav li>a>[class^="mdi-"],.side-nav 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 .userView{position:relative;padding:32px 32px 0;margin-bottom:8px}.side-nav .userView>a{height:auto;padding:0}.side-nav .userView>a:hover{background-color:transparent}.side-nav .userView .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.side-nav .userView .circle,.side-nav .userView .name,.side-nav .userView .email{display:block}.side-nav .userView .circle{height:64px;width:64px}.side-nav .userView .name,.side-nav .userView .email{font-size:14px;line-height:24px}.side-nav .userView .name{margin-top:16px;font-weight:500}.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 .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}#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{-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;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;height: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);transition:background-color .3s;border-radius:50%}.carousel .indicators .indicator-item.active{background-color:#fff}.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;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;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;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);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}}.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: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;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:center;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-between;-ms-flex-pack:justify;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(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{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}}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}h5>span{font-size:14px;margin-left:15px;color:#777}nav a{-webkit-font-smoothing:antialiased}nav ul li a: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:300px}.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}h5>span{display:block;margin:0 0 15px 0}}ul.side-nav.fixed li.logo{text-align:center;margin-top:32px;margin-bottom:80px}ul.side-nav.fixed li.logo:hover,ul.side-nav.fixed li.logo #logo-container:hover{background-color:transparent}ul.side-nav.fixed{overflow:hidden}ul.side-nav.fixed li{line-height:44px}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;padding:0 30px}ul.side-nav.fixed ul.collapsible-accordion{background-color:#FFF}ul.side-nav.fixed ul.collapsible-accordion a.collapsible-header{padding:0 30px}ul.side-nav.fixed ul.collapsible-accordion .collapsible-body li a{font-weight:400;padding:0 37.5px 0 45px}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:36px;z-index:2}a.button-collapse.top-nav.full{line-height:122px}a.button-collapse.top-nav i{font-size:32px}@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;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%}.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}#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%}.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:#fff;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;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}.toc-wrapper.pin-bottom{margin-top:84px}#carbonads{max-width:150px;display:inline-block;position:relative;text-align:left;-webkit-font-smoothing:antialiased}#carbonads>span,#carbonads span.carbon-wrap{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-homepage #carbonads{display:block;overflow:hidden;margin:4em auto 0;padding:1em;max-width:360px;border-radius:2px;background-color:rgba(255,255,255,0.13)}.buysellads-homepage #carbonads span{position:relative;display:block;overflow:hidden}.buysellads-homepage #carbonads .carbon-img{float:left;margin-right:1em}.buysellads-homepage #carbonads .carbon-text{max-width:calc(100% - 135px - 1em);width:auto}.buysellads-homepage #carbonads .carbon-poweredby{position:absolute;left:auto;right:0;bottom:-4px}.buysellads{-webkit-font-smoothing:antialiased;position:relative}.buysellads.buysellads-demo{bottom:20px;right:20px;position:fixed;padding:10px;background-color:rgba(255,255,255,0.9);z-index:1000}.buysellads.buysellads-demo #carbonads a.carbon-img{margin-right:0}.buysellads.buysellads-demo #carbonads a.carbon-text{top:0}.buysellads.buysellads-demo a.close{text-align:center;background-color:#fff;border-radius:50%;box-shadow:0 2px 4px 0 rgba(0,0,0,0.1);height:24px;width:24px;position:absolute;top:-6px;right:-6px;z-index:1;transition:background-color .2s}.buysellads.buysellads-demo a.close:hover{background-color:#ddd}.buysellads.buysellads-demo a.close .material-icons{font-size:18px;line-height:24px}.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:#fff;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}#nav-mobile li.search{position:absolute;left:0;right:0;top:120px;margin-top:1px;padding:1px 0 0 0;z-index:2}#nav-mobile li.search:hover{background-color:#fff}#nav-mobile li.search .search-wrapper{margin:0 12px;transition:margin .25s ease}#nav-mobile li.search .search-wrapper.focused{margin:0}#nav-mobile li.search .search-wrapper input#search{display:block;font-size:16px;font-weight:300;width:100%;height:45px;margin:0;padding:0 45px 0 15px;border:0}#nav-mobile li.search .search-wrapper input#search:focus{outline:none}#nav-mobile li.search .search-wrapper i.material-icons{position:absolute;top:10px;right:10px;cursor:pointer}#nav-mobile li.search .search-results{margin:0;border-top:1px solid #e9e9e9;background-color:#fff}#nav-mobile li.search .search-results a{font-size:12px;white-space:nowrap}#nav-mobile li.search .search-results a:hover,#nav-mobile li.search .search-results a.focused{background-color:#eee;outline:none} + */.picker__holder,.picker__frame{bottom:0;left:0;right:0;top:100%}.picker__holder{position:fixed;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;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;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);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}}.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: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;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:center;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-between;-ms-flex-pack:justify;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(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{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}}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}h5>span{font-size:14px;margin-left:15px;color:#777}nav a{-webkit-font-smoothing:antialiased}nav ul li a: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:300px}.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}h5>span{display:block;margin:0 0 15px 0}}ul.side-nav.fixed li.logo{text-align:center;margin-top:32px;margin-bottom:80px}ul.side-nav.fixed li.logo:hover,ul.side-nav.fixed li.logo #logo-container:hover{background-color:transparent}ul.side-nav.fixed{overflow:hidden}ul.side-nav.fixed li{line-height:44px}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;padding:0 30px}ul.side-nav.fixed ul.collapsible-accordion{background-color:#FFF}ul.side-nav.fixed ul.collapsible-accordion a.collapsible-header{padding:0 30px}ul.side-nav.fixed ul.collapsible-accordion .collapsible-body li a{font-weight:400;padding:0 37.5px 0 45px}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:36px;z-index:2}a.button-collapse.top-nav.full{line-height:122px}a.button-collapse.top-nav i{font-size:32px}@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;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%}.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}#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%}.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:#fff;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;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}.toc-wrapper.pin-bottom{margin-top:84px}#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-homepage #carbonads{display:block;overflow:hidden;margin:4em auto 0;padding:1em;max-width:360px;border-radius:2px;background-color:rgba(255,255,255,0.13)}.buysellads-homepage #carbonads span{position:relative;display:block;overflow:hidden}.buysellads-homepage #carbonads .carbon-img{float:left;margin-right:1em}.buysellads-homepage #carbonads .carbon-text{max-width:calc(100% - 135px - 1em);width:auto}.buysellads-homepage #carbonads .carbon-poweredby{position:absolute;left:auto;right:0;bottom:-4px}.buysellads{-webkit-font-smoothing:antialiased;position:relative}.buysellads.buysellads-demo{bottom:20px;right:20px;position:fixed;padding:10px;background-color:rgba(255,255,255,0.9);z-index:1000}.buysellads.buysellads-demo #carbonads a.carbon-img{margin-right:0}.buysellads.buysellads-demo #carbonads a.carbon-text{top:0}.buysellads.buysellads-demo a.close{text-align:center;background-color:#fff;border-radius:50%;box-shadow:0 2px 4px 0 rgba(0,0,0,0.1);height:24px;width:24px;position:absolute;top:-6px;right:-6px;z-index:1;transition:background-color .2s}.buysellads.buysellads-demo a.close:hover{background-color:#ddd}.buysellads.buysellads-demo a.close .material-icons{font-size:18px;line-height:24px}.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:37px;line-height:37px;box-sizing:content-box}.waves-color-demo .collection-item code{line-height:37px}.waves-color-demo .btn:not(.waves-light),.waves-color-demo .btn-large:not(.waves-light){background-color:#fff;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:300px !important}#nav-mobile li.search{position:absolute;left:0;right:0;top:120px;margin-top:1px;padding:1px 0 0 0;z-index:2}#nav-mobile li.search:hover{background-color:#fff}#nav-mobile li.search .search-wrapper{margin:0 12px;transition:margin .25s ease}#nav-mobile li.search .search-wrapper.focused{margin:0}#nav-mobile li.search .search-wrapper input#search{display:block;font-size:16px;font-weight:300;width:100%;height:45px;margin:0;padding:0 45px 0 15px;border:0}#nav-mobile li.search .search-wrapper input#search:focus{outline:none}#nav-mobile li.search .search-wrapper i.material-icons{position:absolute;top:10px;right:10px;cursor:pointer}#nav-mobile li.search .search-results{margin:0;border-top:1px solid #e9e9e9;background-color:#fff}#nav-mobile li.search .search-results a{font-size:12px;white-space:nowrap}#nav-mobile li.search .search-results a:hover,#nav-mobile li.search .search-results a.focused{background-color:#eee;outline:none} diff --git a/node_modules/materialize-css/dialogs.html b/node_modules/materialize-css/dialogs.html new file mode 100644 index 0000000..0b99596 --- /dev/null +++ b/node_modules/materialize-css/dialogs.html @@ -0,0 +1,320 @@ + + + + + + + + + Dialogs - Materialize + + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ +
+

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! +

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 = $('<span>I am toast content</span>');
+  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});
+  });
+        

+ +

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

+

+  // 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/node_modules/materialize-css/dist/css/materialize.css b/node_modules/materialize-css/dist/css/materialize.css new file mode 100644 index 0000000..27de210 --- /dev/null +++ b/node_modules/materialize-css/dist/css/materialize.css @@ -0,0 +1,8582 @@ +/*! + * Materialize v0.98.0 (http://materializecss.com) + * Copyright 2014-2015 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: #aa00ff !important; +} + +.purple-text.text-accent-4 { + color: #aa00ff !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: #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 { + 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: #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.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: #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.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; + /* 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/10/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 of focused elements when they are also in an + * active/hover state. + */ +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 { + 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. + */ +button, +html input[type="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. + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + box-sizing: content-box; + /* 2 */ +} + +/** + * 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: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-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.valign-wrapper .valign { + display: block; +} + +.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 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 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 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 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 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 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 { + transition: box-shadow .25s; + box-shadow: 0; +} + +.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; + 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 { + 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); + -webkit-transform: translateX(-50%); + 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; + -webkit-transform-origin: 0 50%; + 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: 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; + } +} + +footer.page-footer { + padding-top: 20px; + background-color: #ee6e73; +} + +footer.page-footer .footer-copyright { + overflow: hidden; + min-height: 50px; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -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 { + 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 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 .collection-item.active .secondary-content { + color: #fff; +} + +.collection a.collection-item { + display: block; + 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: 0.5rem 0 1rem 0; + overflow: hidden; +} + +.progress .determinate { + position: absolute; + top: 0; + left: 0; + bottom: 0; + background-color: #26a69a; + 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%; + } +} + +/******************* + 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; + -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; + 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; +} + +.collection-item span.badge { + margin-top: calc(0.75rem - 11px); +} + +.collapsible span.badge { + margin-top: calc(1.5rem - 11px); +} + +.side-nav span.badge { + margin-top: calc(24px - 11px); +} + +/* 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'; +} + +.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; + box-sizing: border-box; + padding: 0 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%; + } +} + +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; + white-space: nowrap; +} + +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 { + transition: background-color .3s; + float: left; + padding: 0; +} + +nav ul li.active { + background-color: rgba(0, 0, 0, 0.1); +} + +nav ul a { + 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; + box-shadow: none; +} + +nav .input-field label { + top: 0; + left: 0; +} + +nav .input-field label i { + color: rgba(255, 255, 255, 0.7); + 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.eot"); + src: url("../fonts/roboto/Roboto-Thin.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"), url("../fonts/roboto/Roboto-Thin.woff") format("woff"), url("../fonts/roboto/Roboto-Thin.ttf") format("truetype"); + font-weight: 200; +} + +@font-face { + font-family: "Roboto"; + src: local(Roboto Light), url("../fonts/roboto/Roboto-Light.eot"); + src: url("../fonts/roboto/Roboto-Light.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Light.woff2") format("woff2"), url("../fonts/roboto/Roboto-Light.woff") format("woff"), url("../fonts/roboto/Roboto-Light.ttf") format("truetype"); + font-weight: 300; +} + +@font-face { + font-family: "Roboto"; + src: local(Roboto Regular), url("../fonts/roboto/Roboto-Regular.eot"); + src: url("../fonts/roboto/Roboto-Regular.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"), url("../fonts/roboto/Roboto-Regular.woff") format("woff"), url("../fonts/roboto/Roboto-Regular.ttf") format("truetype"); + font-weight: 400; +} + +@font-face { + font-family: "Roboto"; + src: url("../fonts/roboto/Roboto-Medium.eot"); + src: url("../fonts/roboto/Roboto-Medium.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"), url("../fonts/roboto/Roboto-Medium.woff") format("woff"), url("../fonts/roboto/Roboto-Medium.ttf") format("truetype"); + font-weight: 500; +} + +@font-face { + font-family: "Roboto"; + src: url("../fonts/roboto/Roboto-Bold.eot"); + src: url("../fonts/roboto/Roboto-Bold.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"), url("../fonts/roboto/Roboto-Bold.woff") format("woff"), url("../fonts/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; + } +} + +.scale-transition { + 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); + 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 { + transition: box-shadow .25s; + padding: 24px; + margin: 0.5rem 0 1rem 0; + border-radius: 2px; + background-color: #fff; +} + +.card { + position: relative; + margin: 0.5rem 0 1rem 0; + background-color: #fff; + transition: 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-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-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + position: relative; +} + +.card.horizontal .card-stacked .card-content { + -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 a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating) { + color: #ffab40; + margin-right: 24px; + 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; + clear: both; + 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-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + 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; + 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-flex; + display: -ms-flexbox; + display: flex; +} + +.tabs.tabs-fixed-width .tab { + -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; + 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-flex; + display: -ms-flexbox; + display: flex; + } + .tabs .tab { + -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; + 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 { + 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; + 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%; + 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 i { + line-height: 56px; +} + +.btn-floating.halfway-fab { + position: absolute; + right: 24px; + bottom: 0; + -webkit-transform: translateY(50%); + transform: translateY(50%); +} + +.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: 998; +} + +.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-flex; + display: -ms-flexbox; + display: flex; + top: 0; + bottom: 0; +} + +.fixed-action-btn.toolbar ul li { + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + display: inline-block; + margin: 0; + height: 100%; + transition: none; +} + +.fixed-action-btn.toolbar ul li a { + display: block; + overflow: hidden; + position: relative; + width: 100%; + height: 100%; + background-color: transparent; + 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; + background-color: transparent; + color: #343434; + cursor: pointer; + transition: background-color .2s; +} + +.btn-flat:focus, .btn-flat:active { + background-color: transparent; +} + +.btn-flat:focus, .btn-flat:hover { + background-color: rgba(0, 0, 0, 0.1); + box-shadow: none; +} + +.btn-flat:active { + background-color: rgba(0, 0, 0, 0.2); +} + +.btn-flat.disabled { + background-color: transparent !important; + color: #b3b3b3 !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; +} + +.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; + 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); + transition: all 0.7s ease-out; + 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 { + 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; +} + +/* Firefox Bug: link not triggered */ +.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; +} + +.modal-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; + box-sizing: border-box; + padding: 2rem; +} + +.side-nav .collapsible, +.side-nav.fixed .collapsible { + border: 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; + 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 0.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; + 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; + box-shadow: none; + margin: 0 0 20px 0; + min-height: 45px; + outline: none; + transition: all .3s; +} + +.chips.focus { + border-bottom: 1px solid #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; + box-shadow: none !important; +} + +.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; + 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: 0.8rem; + color: #9e9e9e; +} + +/* Text Inputs + Textarea + ========================================================================== */ +/* Style Placeholders */ +::-webkit-input-placeholder { + color: #d1d1d1; +} + +:-moz-placeholder { + /* Firefox 18- */ + color: #d1d1d1; +} + +::-moz-placeholder { + /* Firefox 19+ */ + color: #d1d1d1; +} + +:-ms-input-placeholder { + color: #d1d1d1; +} + +/* Text inputs */ +input:not([type]), +input[type=text], +input[type=password], +input[type=email], +input[type=url], +input[type=time], +input[type=date], +input[type=datetime], +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 20px 0; + padding: 0; + box-shadow: none; + box-sizing: content-box; + transition: all 0.3s; +} + +input:not([type]):disabled, input:not([type])[readonly="readonly"], +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]:disabled, +input[type=datetime][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:not([type]):disabled + label, +input:not([type])[readonly="readonly"] + label, +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]:disabled + label, +input[type=datetime][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:not([type]):focus:not([readonly]), +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]: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:not([type]):focus:not([readonly]) + label, +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]: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:not([type]).valid, input:not([type]):focus.valid, +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].valid, +input[type=datetime]: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:not([type]).valid + label:after, +input:not([type]):focus.valid + label:after, +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].valid + label:after, +input[type=datetime]: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:not([type]).invalid, input:not([type]):focus.invalid, +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].invalid, +input[type=datetime]: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:not([type]).invalid + label:after, +input:not([type]):focus.invalid + label:after, +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].invalid + label:after, +input[type=datetime]: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:not([type]).validate + label, +input[type=text].validate + label, +input[type=password].validate + label, +input[type=email].validate + label, +input[type=url].validate + label, +input[type=time].validate + label, +input[type=date].validate + label, +input[type=datetime].validate + label, +input[type=datetime-local].validate + label, +input[type=tel].validate + label, +input[type=number].validate + label, +input[type=search].validate + label, +textarea.materialize-textarea.validate + label { + width: 100%; + pointer-events: none; +} + +input:not([type]) + label:after, +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] + 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: 60px; + opacity: 0; + 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: 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.8rem; + left: 0; + font-size: 1rem; + cursor: text; + transition: .2s ease-out; +} + +.input-field label:not(.label-icon).active { + font-size: 0.8rem; + -webkit-transform: translateY(-140%); + transform: translateY(-140%); +} + +.input-field .prefix { + position: absolute; + width: 3rem; + font-size: 2rem; + 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; + 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 */ +textarea { + width: 100%; + 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; +} + +.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 */ +} + +/* Autocomplete */ +.autocomplete-content { + margin-top: -15px; + 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; + opacity: 0; +} + +[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; + /* webkit (konqueror) browsers */ + -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; + 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 #5a5a5a; +} + +[type="radio"]:not(:checked) + label:after { + -webkit-transform: scale(0); + 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: 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); +} + +/* Radio With gap */ +[type="radio"].with-gap:checked + label:after { + -webkit-transform: scale(0.5); + transform: scale(0.5); +} + +/* Focused styles */ +[type="radio"].tabbed:focus + label:before { + 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); +} + +[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; + opacity: 0; +} + +[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, +[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; + 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.26); +} + +[type="checkbox"].tabbed:focus + label:after { + -webkit-transform: scale(1); + transform: scale(1); + border: 0; + border-radius: 50%; + 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.26); + border-bottom: 2px solid rgba(0, 0, 0, 0.26); +} + +/* Indeterminate checkbox */ +[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.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 .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: 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: 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: #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; + left: 24px; +} + +.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, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::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, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::after { + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08); +} + +.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 { + 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; +} + +.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 20px 0; + padding: 0; + display: block; +} + +.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 span.caret.disabled { + color: rgba(0, 0, 0, 0.26); +} + +.select-wrapper + label { + position: absolute; + top: -14px; + font-size: 0.8rem; +} + +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, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { + color: rgba(0, 0, 0, 0.3); + background-color: transparent; +} + +.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); +} + +/* 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 0; + padding: 0; +} + +input[type=range]:focus { + outline: none; +} + +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%; + 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; + transition: .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; +} + +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; + /*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; +} + +/*************** + 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 #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 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 a:hover { + background-color: rgba(0, 0, 0, 0.05); +} + +.side-nav a.btn, .side-nav a.btn-large, .side-nav a.btn-large, .side-nav a.btn-flat, .side-nav a.btn-floating { + margin: 10px 15px; +} + +.side-nav a.btn, .side-nav a.btn-large, .side-nav a.btn-large, .side-nav a.btn-floating { + color: #fff; +} + +.side-nav a.btn-flat { + color: #343434; +} + +.side-nav a.btn:hover, .side-nav a.btn-large:hover, .side-nav a.btn-large:hover { + background-color: #2bbbad; +} + +.side-nav a.btn-floating:hover { + background-color: #26a69a; +} + +.side-nav li > a > i, +.side-nav li > a > [class^="mdi-"], .side-nav 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 .userView { + position: relative; + padding: 32px 32px 0; + margin-bottom: 8px; +} + +.side-nav .userView > a { + height: auto; + padding: 0; +} + +.side-nav .userView > a:hover { + background-color: transparent; +} + +.side-nav .userView .background { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; +} + +.side-nav .userView .circle, .side-nav .userView .name, .side-nav .userView .email { + display: block; +} + +.side-nav .userView .circle { + height: 64px; + width: 64px; +} + +.side-nav .userView .name, +.side-nav .userView .email { + font-size: 14px; + line-height: 24px; +} + +.side-nav .userView .name { + margin-top: 16px; + font-weight: 500; +} + +.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 .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; +} + +#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 { + -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; +} + +/** + * 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, +.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 { + 12.5% { + -webkit-transform: rotate(135deg); + } + /* 0.5 * ARCSIZE */ + 25% { + -webkit-transform: rotate(270deg); + } + /* 1 * ARCSIZE */ + 37.5% { + -webkit-transform: rotate(405deg); + } + /* 1.5 * ARCSIZE */ + 50% { + -webkit-transform: rotate(540deg); + } + /* 2 * ARCSIZE */ + 62.5% { + -webkit-transform: rotate(675deg); + } + /* 2.5 * ARCSIZE */ + 75% { + -webkit-transform: rotate(810deg); + } + /* 3 * ARCSIZE */ + 87.5% { + -webkit-transform: rotate(945deg); + } + /* 3.5 * ARCSIZE */ + to { + -webkit-transform: rotate(1080deg); + } + /* 4 * ARCSIZE */ +} + +@keyframes fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); + } + /* 0.5 * ARCSIZE */ + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); + } + /* 1 * ARCSIZE */ + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); + } + /* 1.5 * ARCSIZE */ + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); + } + /* 2 * ARCSIZE */ + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); + } + /* 2.5 * ARCSIZE */ + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); + } + /* 3 * ARCSIZE */ + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); + } + /* 3.5 * ARCSIZE */ + to { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); + } + /* 4 * ARCSIZE */ +} + +@-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 { + -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; + 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; + height: 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); + transition: background-color .3s; + border-radius: 50%; +} + +.carousel .indicators .indicator-item.active { + background-color: #fff; +} + +/* ========================================================================== + $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; + 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; + 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; + border-radius: 5px 5px 0 0; + 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); + 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; + } +} + +/** + * 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: 26%; +} + +.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(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; +} + +/** + * The footer containing the "today", "clear", and "close" buttons. + */ +.picker__footer { + text-align: center; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + 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(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 { + 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/node_modules/materialize-css/dist/css/materialize.min.css b/node_modules/materialize-css/dist/css/materialize.min.css new file mode 100644 index 0000000..9104745 --- /dev/null +++ b/node_modules/materialize-css/dist/css/materialize.min.css @@ -0,0 +1,16 @@ +/*! + * Materialize v0.98.0 (http://materializecss.com) + * Copyright 2014-2015 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{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"]{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;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: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-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.valign-wrapper .valign{display:block}.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 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 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 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 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 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 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{transition:box-shadow .25s;box-shadow:0}.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;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{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);-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}}footer.page-footer{padding-top:20px;background-color:#ee6e73}footer.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:-webkit-flex;display:-ms-flexbox;display:flex;-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{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 .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;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;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-touch-callout:none;-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;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}.collection-item span.badge{margin-top:calc(.75rem - 11px)}.collapsible span.badge{margin-top:calc(1.5rem - 11px)}.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;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%}}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;white-space:nowrap}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{transition:background-color .3s;float:left;padding:0}nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{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;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);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.eot");src:url("../fonts/roboto/Roboto-Thin.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"),url("../fonts/roboto/Roboto-Thin.woff") format("woff"),url("../fonts/roboto/Roboto-Thin.ttf") format("truetype");font-weight:200}@font-face{font-family:"Roboto";src:local(Roboto Light),url("../fonts/roboto/Roboto-Light.eot");src:url("../fonts/roboto/Roboto-Light.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Light.woff2") format("woff2"),url("../fonts/roboto/Roboto-Light.woff") format("woff"),url("../fonts/roboto/Roboto-Light.ttf") format("truetype");font-weight:300}@font-face{font-family:"Roboto";src:local(Roboto Regular),url("../fonts/roboto/Roboto-Regular.eot");src:url("../fonts/roboto/Roboto-Regular.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"),url("../fonts/roboto/Roboto-Regular.woff") format("woff"),url("../fonts/roboto/Roboto-Regular.ttf") format("truetype");font-weight:400}@font-face{font-family:"Roboto";src:url("../fonts/roboto/Roboto-Medium.eot");src:url("../fonts/roboto/Roboto-Medium.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"),url("../fonts/roboto/Roboto-Medium.woff") format("woff"),url("../fonts/roboto/Roboto-Medium.ttf") format("truetype");font-weight:500}@font-face{font-family:"Roboto";src:url("../fonts/roboto/Roboto-Bold.eot");src:url("../fonts/roboto/Roboto-Bold.eot?#iefix") format("embedded-opentype"),url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"),url("../fonts/roboto/Roboto-Bold.woff") format("woff"),url("../fonts/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 .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,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}}.scale-transition{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);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{transition: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;transition: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-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-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.card.horizontal .card-stacked .card-content{-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 a:not(.btn):not(.btn-large):not(.btn-large):not(.btn-floating){color:#ffab40;margin-right:24px;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;clear:both;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-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-between;-ms-flex-pack:justify;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;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-flex;display:-ms-flexbox;display:flex}.tabs.tabs-fixed-width .tab{-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;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-flex;display:-ms-flexbox;display:flex}.tabs .tab{-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;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{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;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%;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 i{line-height:56px}.btn-floating.halfway-fab{position:absolute;right:24px;bottom:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.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:998}.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-flex;display:-ms-flexbox;display:flex;top:0;bottom:0}.fixed-action-btn.toolbar ul li{-webkit-flex:1;-ms-flex:1;flex:1;display:inline-block;margin:0;height:100%;transition:none}.fixed-action-btn.toolbar ul li a{display:block;overflow:hidden;position:relative;width:100%;height:100%;background-color:transparent;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;background-color:transparent;color:#343434;cursor:pointer;transition:background-color .2s}.btn-flat:focus,.btn-flat:active{background-color:transparent}.btn-flat:focus,.btn-flat:hover{background-color:rgba(0,0,0,0.1);box-shadow:none}.btn-flat:active{background-color:rgba(0,0,0,0.2)}.btn-flat.disabled{background-color:transparent !important;color:#b3b3b3 !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}.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;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);transition:all 0.7s ease-out;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{transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, #fff 100%, #000 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%}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-flat{float:right;margin:6px 0}.modal-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:.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;box-sizing:border-box;padding:2rem}.side-nav .collapsible,.side-nav.fixed .collapsible{border: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;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 0.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;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;box-shadow:none;margin:0 0 20px 0;min-height:45px;outline:none;transition:all .3s}.chips.focus{border-bottom:1px solid #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;box-shadow:none !important}.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;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}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}input:not([type]),input[type=text],input[type=password],input[type=email],input[type=url],input[type=time],input[type=date],input[type=datetime],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 20px 0;padding:0;box-shadow:none;box-sizing:content-box;transition:all 0.3s}input:not([type]):disabled,input:not([type])[readonly="readonly"],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]:disabled,input[type=datetime][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:not([type]):disabled+label,input:not([type])[readonly="readonly"]+label,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]:disabled+label,input[type=datetime][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:not([type]):focus:not([readonly]),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]: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:not([type]):focus:not([readonly])+label,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]: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:not([type]).valid,input:not([type]):focus.valid,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].valid,input[type=datetime]: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:not([type]).valid+label:after,input:not([type]):focus.valid+label:after,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].valid+label:after,input[type=datetime]: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:not([type]).invalid,input:not([type]):focus.invalid,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].invalid,input[type=datetime]: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:not([type]).invalid+label:after,input:not([type]):focus.invalid+label:after,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].invalid+label:after,input[type=datetime]: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:not([type]).validate+label,input[type=text].validate+label,input[type=password].validate+label,input[type=email].validate+label,input[type=url].validate+label,input[type=time].validate+label,input[type=date].validate+label,input[type=datetime].validate+label,input[type=datetime-local].validate+label,input[type=tel].validate+label,input[type=number].validate+label,input[type=search].validate+label,textarea.materialize-textarea.validate+label{width:100%;pointer-events:none}input:not([type])+label:after,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]+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:60px;opacity:0;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.8rem;left:0;font-size:1rem;cursor:text;transition:.2s ease-out}.input-field label:not(.label-icon).active{font-size:.8rem;-webkit-transform:translateY(-140%);transform:translateY(-140%)}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;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;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;padding:.8rem 0 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}.autocomplete-content{margin-top:-15px;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;left:-9999px;opacity:0}[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;-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;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{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.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;opacity:0}[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,[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;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.26)}[type="checkbox"].tabbed:focus+label:after{-webkit-transform:scale(1);transform:scale(1);border:0;border-radius:50%;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.26);border-bottom:2px solid rgba(0,0,0,0.26)}[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.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 .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: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: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:#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;left:24px}.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,input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::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,input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,0,0,0.08)}.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{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}.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 20px 0;padding:0;display:block}.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 span.caret.disabled{color:rgba(0,0,0,0.26)}.select-wrapper+label{position:absolute;top:-14px;font-size:.8rem}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,.select-dropdown li.disabled>span,.select-dropdown li.optgroup{color:rgba(0,0,0,0.3);background-color:transparent}.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)}.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;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;top:10px;margin-left:-6px;-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;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 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 a:hover{background-color:rgba(0,0,0,0.05)}.side-nav a.btn,.side-nav a.btn-large,.side-nav a.btn-large,.side-nav a.btn-flat,.side-nav a.btn-floating{margin:10px 15px}.side-nav a.btn,.side-nav a.btn-large,.side-nav a.btn-large,.side-nav a.btn-floating{color:#fff}.side-nav a.btn-flat{color:#343434}.side-nav a.btn:hover,.side-nav a.btn-large:hover,.side-nav a.btn-large:hover{background-color:#2bbbad}.side-nav a.btn-floating:hover{background-color:#26a69a}.side-nav li>a>i,.side-nav li>a>[class^="mdi-"],.side-nav 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 .userView{position:relative;padding:32px 32px 0;margin-bottom:8px}.side-nav .userView>a{height:auto;padding:0}.side-nav .userView>a:hover{background-color:transparent}.side-nav .userView .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.side-nav .userView .circle,.side-nav .userView .name,.side-nav .userView .email{display:block}.side-nav .userView .circle{height:64px;width:64px}.side-nav .userView .name,.side-nav .userView .email{font-size:14px;line-height:24px}.side-nav .userView .name{margin-top:16px;font-weight:500}.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 .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}#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{-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;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;height: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);transition:background-color .3s;border-radius:50%}.carousel .indicators .indicator-item.active{background-color:#fff}.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;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;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;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);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}}.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: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;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:center;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-between;-ms-flex-pack:justify;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(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{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}} diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.eot b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.eot new file mode 100644 index 0000000..b73776e Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.eot differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.ttf b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.ttf new file mode 100644 index 0000000..68822ca Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.ttf differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.woff b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.woff new file mode 100644 index 0000000..1f75afd Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.woff differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.woff2 b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.woff2 new file mode 100644 index 0000000..350d1c3 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Bold.woff2 differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.eot b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.eot new file mode 100644 index 0000000..072cdc4 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.eot differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.ttf b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.ttf new file mode 100644 index 0000000..aa45340 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.ttf differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.woff b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.woff new file mode 100644 index 0000000..3480c6c Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.woff differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.woff2 b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.woff2 new file mode 100644 index 0000000..9a4d98c Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Light.woff2 differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.eot b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.eot new file mode 100644 index 0000000..f9ad995 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.eot differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.ttf b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.ttf new file mode 100644 index 0000000..a3c1a1f Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.ttf differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.woff b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.woff new file mode 100644 index 0000000..1186773 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.woff differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.woff2 b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.woff2 new file mode 100644 index 0000000..d10a592 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Medium.woff2 differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.eot b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.eot new file mode 100644 index 0000000..9b5e8e4 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.eot differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.ttf b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.ttf new file mode 100644 index 0000000..0e58508 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.ttf differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.woff b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.woff new file mode 100644 index 0000000..f823258 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.woff differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.woff2 b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.woff2 new file mode 100644 index 0000000..b7082ef Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Regular.woff2 differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.eot b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.eot new file mode 100644 index 0000000..2284a3b Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.eot differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.ttf b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.ttf new file mode 100644 index 0000000..8779333 Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.ttf differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.woff b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.woff new file mode 100644 index 0000000..2a98c1e Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.woff differ diff --git a/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.woff2 b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.woff2 new file mode 100644 index 0000000..a38025a Binary files /dev/null and b/node_modules/materialize-css/dist/fonts/roboto/Roboto-Thin.woff2 differ diff --git a/node_modules/materialize-css/dist/js/materialize.js b/node_modules/materialize-css/dist/js/materialize.js new file mode 100644 index 0000000..8c994c4 --- /dev/null +++ b/node_modules/materialize-css/dist/js/materialize.js @@ -0,0 +1,8031 @@ +/*! + * Materialize v0.98.0 (http://materializecss.com) + * Copyright 2014-2015 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +// Check for jQuery. +if (typeof(jQuery) === 'undefined') { + var jQuery; + // 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.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; + } +});;/*! 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. */ +/*! 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)})); +;!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 && !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)); + + +// Unique ID +Materialize.guid = (function() { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + 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; + }; +}; + + +// Velocity has conflicts when loaded with jQuery, this will check for it +// First, check if in noConflict mode +var Vel; +if (jQuery) { + Vel = jQuery.Velocity; +} else if ($) { + Vel = $.Velocity; +} else { + Vel = Velocity; +} +;(function ($) { + $.fn.collapsible = function(options) { + var defaults = { + accordion: undefined, + onOpen: undefined, + onClose: undefined + }; + + options = $.extend(defaults, options); + + + return this.each(function() { + + var $this = $(this); + + var $panel_headers = $(this).find('> li > .collapsible-header'); + + var collapsible_type = $this.data("collapsible"); + + // Turn off any existing event handlers + $this.off('click.collapse', '> li > .collapsible-header'); + $panel_headers.off('click.collapse'); + + + /**************** + 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'); + } + 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'); + + // 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'); + } + 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) { + 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 + * @return {Boolean} true if it is children + */ + function isChildrenOfPanelHeader(object) { + + var panelHeader = getPanelHeader(object); + + return panelHeader.length > 0; + } + + /** + * Get panel header from a children element + * @param {Object} object Jquery object + * @return {Object} panel header object + */ + function getPanelHeader(object) { + + return object.closest('li > .collapsible-header'); + } + + /***** End Helper Functions *****/ + + + + // 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); + } + + element.toggleClass('active'); + + collapsibleOpen(element); + }); + + + // Open first active + if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion + collapsibleOpen($panel_headers.filter('.active').first()); + + } else { // Handle Expandables + $panel_headers.filter('.active').each(function() { + collapsibleOpen($(this)); + }); + } + + }); + }; + + $(document).ready(function(){ + $('.collapsible').collapsible(); + }); +}( jQuery ));;(function ($) { + + // Add posibility to scroll to selected option + // usefull for select for example + $.fn.scrollTo = function(elem) { + $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top); + return this; + }; + + $.fn.dropdown = function (options) { + var defaults = { + inDuration: 300, + outDuration: 225, + constrainWidth: true, // Constrains width of dropdown to the activator + hover: false, + gutter: 0, // Spacing from edge + belowOrigin: false, + alignment: 'left', + stopPropagation: false + }; + + // 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; + } + + 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'); + } + + updateOptions(); + + // Attach dropdown to its activator + origin.after(activates); + + /* + 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; + } + + // Check html data attributes + updateOptions(); + + // Set Dropdown state + activates.addClass('active'); + origin.addClass('active'); + + // Constrain width + if (curr_options.constrainWidth === true) { + activates.css('width', origin.outerWidth()); + + } 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; + + // Below Origin + var verticalOffset = 0; + if (curr_options.belowOrigin === true) { + verticalOffset = originHeight; + } + + // 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'; + + } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) { + // Dropdown goes past screen on left, force left alignment + currAlignment = 'left'; + } + // 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(); + } + } + + // Handle edge alignment + if (currAlignment === 'left') { + gutterSpacing = curr_options.gutter; + leftPosition = origin.position().left + gutterSpacing; + } + else if (currAlignment === 'right') { + var offsetRight = origin.position().left + origin.outerWidth() - activates.outerWidth(); + gutterSpacing = -curr_options.gutter; + leftPosition = offsetRight + gutterSpacing; + } + + // Position dropdown + activates.css({ + position: 'absolute', + top: origin.position().top + verticalOffset + scrollYOffset, + left: leftPosition + scrollXOffset + }); + + + // Show dropdown + activates.stop(true, true).css('opacity', 0) + .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'}); + + // Add click close handler to document + $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) { + if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) { + hideDropdown(); + $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id')); + } + }); + } + + function hideDropdown() { + // Check for simultaneous focus and click events. + isFocused = false; + activates.fadeOut(curr_options.outDuration); + activates.removeClass('active'); + origin.removeClass('active'); + $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id')); + setTimeout(function() { activates.css('max-height', ''); }, curr_options.outDuration); + } + + // Hover + if (curr_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; + } + }); + + 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.unbind('click.' + origin.attr('id')); + origin.bind('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') + ' touchstart.' + 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($) { + var _stack = 0, + _lastID = 0, + _generateID = function() { + _lastID++; + return 'materialize-modal-overlay-' + _lastID; + }; + + var methods = { + init : function(options) { + var defaults = { + opacity: 0.5, + inDuration: 350, + outDuration: 250, + ready: undefined, + complete: undefined, + dismissible: true, + startingTop: '4%', + endingTop: '10%' + }; + + // Override defaults + options = $.extend(defaults, options); + + return this.each(function() { + var $modal = $(this); + var modal_id = $(this).attr("id") || '#' + $(this).data('target'); + + var closeModal = function() { + var overlayID = $modal.data('overlay-id'); + var $overlay = $('#' + overlayID); + $modal.removeClass('open'); + + // Enable scrolling + $('body').css({ + overflow: '', + width: '' + }); + + $modal.find('.modal-close').off('click.close'); + $(document).off('keyup.modal' + overlayID); + + $overlay.velocity( { opacity: 0}, {duration: options.outDuration, queue: false, ease: "easeOutQuart"}); + + + // Define Bottom Sheet animation + var exitVelocityOptions = { + duration: options.outDuration, + queue: false, + ease: "easeOutCubic", + // Handle modal ready callback + complete: function() { + $(this).css({display:"none"}); + + // Call complete callback + if (typeof(options.complete) === "function") { + options.complete.call(this, $modal); + } + $overlay.remove(); + _stack--; + } + }; + if ($modal.hasClass('bottom-sheet')) { + $modal.velocity({bottom: "-100%", opacity: 0}, exitVelocityOptions); + } + else { + $modal.velocity( + { top: options.startingTop, opacity: 0, scaleX: 0.7}, + exitVelocityOptions + ); + } + }; + + var openModal = function($trigger) { + var $body = $('body'); + var oldWidth = $body.innerWidth(); + $body.css('overflow', 'hidden'); + $body.width(oldWidth); + + if ($modal.hasClass('open')) { + return; + } + + var overlayID = _generateID(); + var $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); + $modal.addClass('open'); + + $("body").append($overlay); + + if (options.dismissible) { + $overlay.click(function() { + closeModal(); + }); + // Return on ESC + $(document).on('keyup.modal' + overlayID, function(e) { + if (e.keyCode === 27) { // ESC key + closeModal(); + } + }); + } + + $modal.find(".modal-close").on('click.close', function(e) { + closeModal(); + }); + + $overlay.css({ display : "block", opacity : 0 }); + + $modal.css({ + display : "block", + opacity: 0 + }); + + $overlay.velocity({opacity: options.opacity}, {duration: options.inDuration, queue: false, ease: "easeOutCubic"}); + $modal.data('associated-overlay', $overlay[0]); + + // Define Bottom Sheet animation + var enterVelocityOptions = { + duration: options.inDuration, + queue: false, + ease: "easeOutCubic", + // Handle modal ready callback + complete: function() { + if (typeof(options.ready) === "function") { + options.ready.call(this, $modal, $trigger); + } + } + }; + if ($modal.hasClass('bottom-sheet')) { + $modal.velocity({bottom: "0", opacity: 1}, enterVelocityOptions); + } + else { + $.Velocity.hook($modal, "scaleX", 0.7); + $modal.css({ top: options.startingTop }); + $modal.velocity({top: options.endingTop, opacity: 1, scaleX: '1'}, enterVelocityOptions); + } + + }; + + // Reset handlers + $(document).off('click.modalTrigger', 'a[href="#' + modal_id + '"], [data-target="' + modal_id + '"]'); + $(this).off('openModal'); + $(this).off('closeModal'); + + // Close Handlers + $(document).on('click.modalTrigger', 'a[href="#' + modal_id + '"], [data-target="' + modal_id + '"]', function(e) { + options.startingTop = ($(this).offset().top - $(window).scrollTop()) /1.15; + openModal($(this)); + e.preventDefault(); + }); // done set on click + + $(this).on('openModal', function() { + var modal_id = $(this).attr("href") || '#' + $(this).data('target'); + openModal(); + }); + + $(this).on('closeModal', function() { + closeModal(); + }); + }); // done return + }, + open : function() { + $(this).trigger('openModal'); + }, + close : function() { + $(this).trigger('closeModal'); + } + }; + + $.fn.modal = 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.modal' ); + } + }; +})(jQuery); +;(function ($) { + + $.fn.materialbox = function () { + + return this.each(function() { + + if ($(this).hasClass('initialized')) { + return; + } + + $(this).addClass('initialized'); + + var overlayActive = false; + var doneAnimating = true; + var inDuration = 275; + var outDuration = 200; + var origin = $(this); + var placeholder = $('
').addClass('material-placeholder'); + var originalWidth = 0; + var originalHeight = 0; + var ancestorsChanged; + var ancestor; + origin.wrap(placeholder); + + + 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) { + 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, + position: 'relative', + top: 0, + 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, + '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(); + }); + + // 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') !== "") { + var $photo_caption = $('
'); + $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'}); + } + + // Resize Image + var ratio = 0; + var widthPercent = originalWidth / windowWidth; + var heightPercent = originalHeight / windowHeight; + var newWidth = 0; + var newHeight = 0; + + if (widthPercent > heightPercent) { + ratio = originalHeight / originalWidth; + newWidth = windowWidth * 0.9; + newHeight = windowWidth * 0.9 * ratio; + } + else { + ratio = originalWidth / originalHeight; + 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;} + } + ); + } // 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;} + } + ); // 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 + if (overlayActive) { + returnToOriginal(); + } + } + }); + + + // This function returns the modaled image to the original spot + function returnToOriginal() { + + 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'); + + origin.velocity("stop", true); + $('#materialbox-overlay').velocity("stop", true); + $('.materialbox-caption').velocity("stop", true); + + + $('#materialbox-overlay').velocity({opacity: 0}, { + duration: outDuration, // Delay prevents animation overlapping + queue: false, easing: 'easeOutQuad', + complete: function(){ + // Remove Overlay + overlayActive = false; + $(this).remove(); + } + }); + + // Resize Image + origin.velocity( + { + width: originalWidth, + height: originalHeight, + left: 0, + top: 0 + }, + { + duration: outDuration, + queue: false, easing: 'easeOutQuad' + } + ); + + // 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: '' + }); + + origin.css({ + height: '', + top: '', + left: '', + width: '', + 'max-width': '', + position: '', + 'z-index': '', + 'will-change': '' + }); + + // Remove class + origin.removeClass('active'); + doneAnimating = true; + $(this).remove(); + + // Remove overflow overrides on ancestors + if (ancestorsChanged) { + ancestorsChanged.css('overflow', ''); + } + } + }); + + } + }); + }; + + $(document).ready(function(){ + $('.materialboxed').materialbox(); + }); + +}( jQuery )); +;(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)"); + } + + } + + // Wait for image load + $this.children("img").one("load", function() { + updateParallax(true); + }).each(function() { + if (this.complete) $(this).trigger("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(options) { + var defaults = { + onShow: null, + swipeable: false, + responsiveThreshold: Infinity, // breakpoint for swipeable + }; + options = $.extend(defaults, options); + + 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(); + + 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 = 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 $tabs_width - el.position().left - el.outerWidth() - $this.scrollLeft(); + }; + + // Finds left attribute for indicator based on active tab. + // el: jQuery Object + var calcLeftPos = function(el) { + return 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(); + } + if ($active.length === 0) { + $active = $(this).find('li.tab a').first(); + } + + $active.addClass('active'); + index = $links.index($active); + if (index < 0) { + index = 0; + } + + if ($active[0] !== undefined) { + $content = $($active[0].hash); + $content.addClass('active'); + } + + // 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).resize(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) }); + } + }); + + // 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 = $links.eq(index); + animateIndicator(prev_index); + } + }, + }); + } 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) { + 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 = 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); + } + } 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'); + } + } + + // Reset clicked state + clickedTimeout = setTimeout(function(){ clicked = false; }, transition); + + // Update indicator + animateIndicator(prev_index); + + // Prevent the anchor's default click action + e.preventDefault(); + }); + }); + + }, + 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 ) { + // Default to "init" + return methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tabs' ); + } + }; + + $(document).ready(function(){ + $('ul.tabs').tabs(); + }); +}( jQuery )); +;(function ($) { + $.fn.tooltip = function (options) { + var timeout = null, + margin = 5; + + // 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).off('mouseenter.tooltip mouseleave.tooltip'); + }); + return false; + } + + options = $.extend(defaults, options); + + return this.each(function() { + var tooltipId = Materialize.guid(); + var origin = $(this); + + // Destroy old tooltip + if (origin.attr('data-tooltip-id')) { + $('#' + origin.attr('data-tooltip-id')).remove(); + } + + 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(); + + 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 + 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 + 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% 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 + 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 + 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); + } + }); + }); + }; + + 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(); + }); +}( 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; + } + + function getWindow(elem) { + return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + function offset(elem) { + var docElem, win, + box = {top: 0, left: 0}, + doc = elem && elem.ownerDocument; + + docElem = doc.documentElement; + + 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 convertStyle(obj) { + var style = ''; + + for (var a in obj) { + if (obj.hasOwnProperty(a)) { + style += (a + ':' + obj[a] + ';'); + } + } + + return style; + } + + var Effect = { + + // Effect delay + duration: 750, + + show: function(e, element) { + + // Disable right click + if (e.button === 2) { + return false; + } + + var el = element || this; + + // Create ripple + var ripple = document.createElement('div'); + ripple.className = 'waves-ripple'; + el.appendChild(ripple); + + // 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)+')'; + + // Support for touch devices + if ('touches' in e) { + relativeY = (e.touches[0].pageY - pos.top); + relativeX = (e.touches[0].pageX - pos.left); + } + + // 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)); + }, + + hide: function(e) { + TouchHandler.touchup(e); + + var el = this; + var width = el.clientWidth * 1.4; + + // Get first ripple + var ripple = null; + var ripples = el.getElementsByClassName('waves-ripple'); + if (ripples.length > 0) { + ripple = ripples[ripples.length - 1]; + } else { + return false; + } + + var relativeX = ripple.getAttribute('data-x'); + var relativeY = ripple.getAttribute('data-y'); + var scale = ripple.getAttribute('data-scale'); + + // Get delay beetween mousedown and mouse leave + var diff = Date.now() - Number(ripple.getAttribute('data-hold')); + var delay = 350 - diff; + + if (delay < 0) { + delay = 0; + } + + // 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); + }, + + // Little hack to make can perform waves effect + wrapInput: function(elements) { + for (var a = 0; a < elements.length; a++) { + var el = elements[a]; + + 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; + } + + // Put element class and style to the specified parent + var wrapper = document.createElement('i'); + wrapper.className = el.className + ' waves-input-wrapper'; + + var elementStyle = el.getAttribute('style'); + + if (!elementStyle) { + elementStyle = ''; + } + + wrapper.setAttribute('style', elementStyle); + + el.className = 'waves-button-input'; + el.removeAttribute('style'); + + // Put element as child + parent.replaceChild(wrapper, el); + wrapper.appendChild(el); + } + } + } + }; + + + /** + * 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; + } + + return allow; + }, + touchup: function(e) { + TouchHandler.allowEvent(e); + } + }; + + + /** + * 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; + } + + var element = null; + var target = e.target || e.srcElement; + + 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; + } + + 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); + + if ('ontouchstart' in window) { + element.addEventListener('touchend', Effect.hide, false); + element.addEventListener('touchcancel', Effect.hide, false); + } + + element.addEventListener('mouseup', Effect.hide, false); + element.addEventListener('mouseleave', Effect.hide, false); + } + } + + Waves.displayEffect = function(options) { + options = options || {}; + + if ('duration' in options) { + Effect.duration = options.duration; + } + + //Wrap input inside tag + Effect.wrapInput($$('.waves-effect')); + + if ('ontouchstart' in window) { + document.body.addEventListener('touchstart', showEffect, false); + } + + document.body.addEventListener('mousedown', showEffect, 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; + } + + if ('ontouchstart' in window) { + element.addEventListener('touchstart', showEffect, false); + } + + element.addEventListener('mousedown', showEffect, false); + }; + + window.Waves = Waves; + + document.addEventListener('DOMContentLoaded', function() { + Waves.displayEffect(); + }, false); + +})(window); +;Materialize.toast = function (message, displayLength, className, completeCallback) { + className = className || ""; + + var container = document.getElementById('toast-container'); + + // 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); + } + + // Select and append toast + var newToast = createToast(message); + + // only append toast if message is not undefined + if(message){ + container.appendChild(newToast); + } + + newToast.style.opacity = 0; + + // Animate toast in + Vel(newToast, {translateY: '-35px', opacity: 1 }, {duration: 300, + easing: 'easeOutCubic', + queue: false}); + + // Allows timer to be pause while being panned + var timeLeft = displayLength; + var counterInterval; + if (timeLeft != null) { + counterInterval = setInterval (function(){ + if (newToast.parentNode === null) + window.clearInterval(counterInterval); + + // If toast is not being dragged, decrease its time remaining + if (!newToast.classList.contains('panning')) { + timeLeft -= 20; + } + + 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); + } + }, 20); + } + + + + function createToast(html) { + + // Create toast + 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]); + } + } + // 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]); + } + else { + // Insert as text; + 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; + + // Change toast state + if (!toast.classList.contains('panning')){ + toast.classList.add('panning'); + } + + 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 + }); + + } + }); + + return toast; + } +}; +;(function ($) { + + var methods = { + init : function(options) { + var defaults = { + menuWidth: 300, + edge: 'left', + closeOnClick: false, + draggable: true + }; + options = $.extend(defaults, options); + + $(this).each(function(){ + var $this = $(this); + var menuId = $this.attr('data-activates'); + var menu = $("#"+ menuId); + + // Set to width + if (options.menuWidth != 300) { + menu.css('width', options.menuWidth); + } + + // Add Touch Area + 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.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.hasClass('fixed')) { + if (window.innerWidth > 992) { + menu.css('transform', 'translateX(0)'); + } + } + + // Window resize to reset on large screens 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').length !== 0 && menuOut) { + removeMenu(true); + } + else { + // menu.removeAttr('style'); + menu.css('transform', 'translateX(0%)'); + // menu.css('width', options.menuWidth); + } + } + else if (menuOut === false){ + if (options.edge === 'left') { + menu.css('transform', 'translateX(-100%)'); + } else { + menu.css('transform', 'translateX(100%)'); + } + + } + + }); + } + + // if closeOnClick, then add close event for all a tags in side sideNav + if (options.closeOnClick === true) { + menu.on("click.itemclick", "a:not(.collapsible-header)", function(){ + removeMenu(); + }); + } + + var removeMenu = function(restoreNav) { + panning = false; + menuOut = false; + // Reenable scrolling + $('body').css({ + overflow: '', + width: '' + }); + + $('#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.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 { + // Reset phantom div + $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); + } + } + }); + } + }; + + + + // Touch Event + var panning = false; + var menuOut = false; + + if (options.draggable) { + $dragTarget.on('click', function(){ + if (menuOut) { + removeMenu(); + } + }); + + $dragTarget.hammer({ + prevent_default: false + }).bind('pan', function(e) { + + 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; + + // 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(); + }); + $('body').append($overlay); + } + + // 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; + $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) { + + if (e.gesture.pointerType == "touch") { + var $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 () { + $(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: '' + }); + + // 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 () { + $(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 { + + // 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'}); + } + + $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', + complete: function () { + menuOut = true; + panning = 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'); + }, + 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, + } + + /** + * 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 + * @returns {jQuery} + */ + $.scrollSpy = function(selector, options) { + var defaults = { + throttle: 100, + scrollOffset: 200 // offset - 200 allows elements near bottom of page to scroll + }; + 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]) { + $('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', 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() { + 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) { + var $this = $(this); + if ($(element).val().length > 0 || 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'); + } + }); + }; + + // 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'; + + // Add active if form auto complete + $(document).on('change', input_selector, function () { + 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() { + Materialize.updateTextFields(); + }); + + // HTML DOM FORM RESET handling + $(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').removeClass('active'); + } + }); + + // Reset select + formReset.find('select.initialized').each(function () { + var reset_text = formReset.find('option[selected]').text(); + formReset.siblings('input.select-dropdown').val(reset_text); + }); + } + }); + + // Add active when element has focus + $(document).on('focus', input_selector, function () { + $(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) { + selector += ", label"; + } + + $inputElement.siblings(selector).removeClass('active'); + + validate_field($inputElement); + }); + + 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.hasClass('validate')) { + object.removeClass('valid'); + object.removeClass('invalid'); + } + } + else { + if (object.hasClass('validate')) { + // Check for character counter attributes + if ((object.is(':valid') && hasLength && (len <= lenAttr)) || (object.is(':valid') && !hasLength)) { + object.removeClass('invalid'); + object.addClass('valid'); + } + else { + object.removeClass('valid'); + object.addClass('invalid'); + } + } + } + }; + + // 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(); + if (!hiddenDiv.length) { + hiddenDiv = $('
'); + $('body').append(hiddenDiv); + } + var text_area_selector = '.materialize-textarea'; + + function textareaAutoResize($textarea) { + // Set font properties of hiddenDiv + + var fontFamily = $textarea.css('font-family'); + var fontSize = $textarea.css('font-size'); + var lineHeight = $textarea.css('line-height'); + + if (fontSize) { hiddenDiv.css('font-size', fontSize); } + if (fontFamily) { hiddenDiv.css('font-family', fontFamily); } + if (lineHeight) { hiddenDiv.css('line-height', lineHeight); } + + 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); + } + + $textarea.css('height', hiddenDiv.height()); + } + + $(text_area_selector).each(function () { + var $textarea = $(this); + if ($textarea.val().length) { + textareaAutoResize($textarea); + } + }); + + $('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'); + 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 * + ****************/ + + var range_type = 'input[type=range]'; + var range_mousedown = false; + var left; + + $(range_type).each(function () { + var thumb = $(''); + $(this).after(thumb); + }); + + var range_wrapper = '.range-field'; + $(document).on('change', range_type, function(e) { + var thumb = $(this).siblings('.thumb'); + thumb.find('.value').html($(this).val()); + }); + + $(document).on('input mousedown touchstart', range_type, function(e) { + var thumb = $(this).siblings('.thumb'); + var width = $(this).outerWidth(); + + // If thumb indicator does not exist yet, create it + if (thumb.length <= 0) { + thumb = $(''); + $(this).after(thumb); + } + + // Set indicator value + thumb.find('.value').html($(this).val()); + + range_mousedown = true; + $(this).addClass('active'); + + if (!thumb.hasClass('active')) { + thumb.velocity({ height: "30px", width: "30px", top: "-20px", marginLeft: "-15px"}, { duration: 300, easing: 'easeOutExpo' }); + } + + if (e.type !== 'input') { + 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 (left < 0) { + left = 0; + } + 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() { + range_mousedown = false; + $(this).removeClass('active'); + }); + + $(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(); + + if (left < 0) { + left = 0; + } + else if (left > width) { + left = width; + } + thumb.addClass('active').css('left', left); + thumb.find('.value').html(thumb.siblings(range_type).val()); + } + }); + + $(document).on('mouseout touchleave', range_wrapper, function() { + if (!range_mousedown) { + + var thumb = $(this).children('.thumb'); + + if (thumb.hasClass('active')) { + thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: '-6px'}, { duration: 100 }); + } + thumb.removeClass('active'); + } + }); + + /************************** + * Auto complete plugin * + *************************/ + $.fn.autocomplete = function (options) { + // Defaults + var defaults = { + data: {}, + limit: Infinity, + onAutocomplete: null + }; + + options = $.extend(defaults, options); + + return this.each(function() { + var $input = $(this); + var data = options.data, + count = 0, + activeIndex = 0, + 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 = 0; + $autocomplete.find('.active').removeClass('active'); + } + + // Perform search + $input.off('keyup.autocomplete').on('keyup.autocomplete', function (e) { + // Reset count. + count = 0; + + // Don't capture enter or arrow key usage. + if (e.which === 13 || + e.which === 38 || + e.which === 40) { + return; + } + + var val = $input.val().toLowerCase(); + + // Check if the input isn't empty + if (oldVal !== val) { + $autocomplete.empty(); + resetCurrentElement(); + + if (val !== '') { + for(var key in data) { + if (data.hasOwnProperty(key) && + key.toLowerCase().indexOf(val) !== -1 && + key.toLowerCase() !== val) { + // 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) { + liElement = $autocomplete.children('li').eq(activeIndex); + if (liElement.length) { + liElement.click(); + 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) && + $active.length) { + activeIndex++; + } + + $active.removeClass('active'); + $autocomplete.children('li').eq(activeIndex).addClass('active'); + } + }); + + // Set input value + $autocomplete.on('click', 'li', function () { + var text = $(this).text().trim(); + $input.val(text); + $input.trigger('change'); + $autocomplete.empty(); + resetCurrentElement(); + + // Handle onAutocomplete callback. + if (typeof(options.onAutocomplete) === "function") { + options.onAutocomplete.call(this, text); + } + }); + } + }); + }; + + }); // End of $(document).ready + + /******************* + * Select Plugin * + ******************/ + $.fn.material_select = function (callback) { + $(this).each(function(){ + var $select = $(this); + + if ($select.hasClass('browser-default')) { + return; // Continue to next (return false breaks out of entire loop) + } + + var multiple = $select.attr('multiple') ? true : false, + lastID = $select.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(); + + $select.unwrap(); + $('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; + } + + var uniqueID = Materialize.guid(); + $select.data('select-id', uniqueID); + var wrapper = $('
    '); + wrapper.addClass($select.attr('class')); + 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 + var disabledClass = (option.is(':disabled')) ? 'disabled ' : ''; + var optgroupClass = (type === 'optgroup-option') ? 'optgroup-option ' : ''; + + // 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. + if (type === 'multiple') { + options.append($('
  • ' + option.html() + '
  • ')); + } else { + options.append($('
  • ' + option.html() + '
  • ')); + } + return true; + } + + // Check for multiple type. + if (type === 'multiple') { + options.append($('
  • ' + option.html() + '
  • ')); + } else { + options.append($('
  • ' + 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:not(.optgroup)').each(function (i) { + $(this).click(function (e) { + // Check if option element is disabled + 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, $(this).index(), $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 + $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.replace(/"/g, '"'); + + var $newSelect = $(''); + $select.before($newSelect); + $newSelect.before(dropdownIcon); + + $newSelect.after(options); + // Check if section element is disabled + if (!$select.is(':disabled')) { + $newSelect.dropdown({'hover': false, 'closeOnClick': false}); + } + + // Copy tabindex + if ($select.attr('tabindex')) { + $($newSelect[0]).attr('tabindex', $select.attr('tabindex')); + } + + $select.addClass('initialized'); + + $newSelect.on({ + 'focus': function (){ + if ($('ul.select-dropdown').not(options[0]).is(':visible')) { + $('input.select-dropdown').trigger('close'); + } + 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); + } + }, + 'click': function (e){ + e.stopPropagation(); + } + }); + + $newSelect.on('blur', function() { + if (!multiple) { + $(this).trigger('close'); + } + options.find('li.selected').removeClass('selected'); + }); + + options.hover(function() { + optionsHover = true; + }, function () { + optionsHover = false; + }); + + $(window).on({ + 'click': function () { + multiple && (optionsHover || $newSelect.trigger('close')); + } + }); + + // 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").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 + 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); + }; + + $newSelect.on('keydown', onKeyDown); + }); + + 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').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) { + var defaults = { + indicators: true, + height: 400, + transition: 500, + interval: 6000 + }; + options = $.extend(defaults, options); + + 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 $active_index = $slider.find('.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}); + } + } + + // 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; + + $active_index = $slider.find('.active').index(); + + // Only do if index changes + if ($active_index != index) { + $active = $slides.eq($active_index); + $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}); + } }); + 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).addClass('active'); + + + // Update indicators + if (options.indicators) { + $indicators.eq(index).addClass('active'); + } + } + } + + // Set height of slider + // If fullscreen, do nothing + if (!$this.hasClass('fullscreen')) { + if (options.indicators) { + // Add height if indicators are present + $this.height(options.height + 40); + } + else { + $this.height(options.height); + } + $slider.height(options.height); + } + + + // Set initial positions of captions + $slides.find('.caption').each(function () { + captionTransition($(this), 0); + }); + + // Move img src into background-image + $slides.find('img').each(function () { + 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) { + $indicators = $('
      '); + $slides.each(function( index ) { + var $indicator = $('
    • '); + + // Handle clicks on indicators + $indicator.click(function () { + var $parent = $slider.parent(); + var curr_index = $parent.find($(this)).index(); + moveToSlide(curr_index); + + // 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); + + }, options.transition + options.interval + ); + }); + $indicators.append($indicator); + }); + $this.append($indicators); + $indicators = $this.find('ul.indicators').find('li.indicator-item'); + } + + if ($active) { + $active.show(); + } + else { + $slides.first().addClass('active').velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'}); + + $active_index = 0; + $active = $slides.eq($active_index); + + // Update indicators + if (options.indicators) { + $indicators.eq($active_index).addClass('active'); + } + } + + // 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'}); + }); + + // auto scroll + $interval = setInterval( + function(){ + $active_index = $slider.find('.active').index(); + moveToSlide($active_index + 1); + + }, options.transition + options.interval + ); + + + // HammerJS, Swipe navigation + + // Touch Event + var panning = false; + var swipeLeft = false; + var swipeRight = false; + + $this.hammer({ + prevent_default: false + }).bind('pan', function(e) { + if (e.gesture.pointerType === "touch") { + + // reset interval + clearInterval($interval); + + 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'); + 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)) { + swipeRight = true; + } + // Swipe Right + else if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.65)) { + swipeLeft = true; + } + + // Make Slide Behind active slide visible + var next_slide; + if (swipeLeft) { + next_slide = $curr_slide.next(); + if (next_slide.length === 0) { + next_slide = $slides.first(); + } + next_slide.velocity({ opacity: 1 + }, {duration: 300, queue: false, easing: 'easeOutQuad'}); + } + if (swipeRight) { + next_slide = $curr_slide.prev(); + if (next_slide.length === 0) { + next_slide = $slides.last(); + } + next_slide.velocity({ opacity: 1 + }, {duration: 300, queue: false, easing: 'easeOutQuad'}); + } + + + } + + }).bind('panend', function(e) { + if (e.gesture.pointerType === "touch") { + + $curr_slide = $slider.find('.active'); + panning = false; + curr_index = $slider.find('.active').index(); + + if (!swipeRight && !swipeLeft || $slides.length <=1) { + // Return to original spot + $curr_slide.velocity({ translateX: 0 + }, {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) { + 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}); + } }); + } + 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); + + }, options.transition + options.interval + ); + } + }); + + $this.on('sliderPause', function() { + clearInterval($interval); + }); + + $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; + + 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) { + 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')) ) { + $(e.target).closest('.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: '', + autocompleteData: {}, + autocompleteLimit: Infinity, + }; + + $(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.autocompleteData); + + // 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').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) { + var html = ''; + $chips.data('chips').forEach(function(elem){ + html += self.renderChip(elem); + }); + html += ''; + $chips.html(html); + self.setPlaceholder($chips); + + // Set for attribute for label + var label = $chips.next('label'); + if (label.length) { + label.attr('for', chipId); + + if ($chips.data('chips').length) { + label.addClass('active'); + } + } + + // Setup autocomplete if needed. + var input = $('#' + chipId); + if (self.hasAutocomplete) { + input.autocomplete({ + data: curr_options.autocompleteData, + limit: curr_options.autocompleteLimit, + onAutocomplete: function(val) { + self.addChip({tag: val}, $chips); + input.val(''); + input.focus(); + }, + }) + } + }; + + this.renderChip = function(elem) { + if (!elem.tag) return; + + var html = '
      ' + elem.tag; + if (elem.image) { + html += ' '; + } + html += 'close'; + html += '
      '; + return html; + }; + + this.setPlaceholder = function($chips) { + if ($chips.data('chips').length && curr_options.placeholder) { + $chips.find('input').prop('placeholder', curr_options.placeholder); + + } else if (!$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 chipHtml = 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); + $(chipHtml).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 )); +;(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); + + + $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); + } + }); + } + + $(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; + + // 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); + } + }); + + // 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() { + openFABMenu($(this)); + }, + closeFAB: function() { + closeFABMenu($(this)); + }, + openToolbar: function() { + FABtoToolbar($(this)); + }, + closeToolbar: function() { + toolbarToFAB($(this)); + } + }); + + + var openFABMenu = function (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: 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", translateX: '0'}, + { duration: 80, delay: time }); + time += 40; + }); + } + }; + + var closeFABMenu = function (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: 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 )); +;(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(selectorOrEl) { + var element; + if (typeof(selectorOrEl) === 'string') { + element = $(selectorOrEl); + } else if (typeof(selectorOrEl) === 'object') { + element = selectorOrEl; + } else { + return; + } + var time = 0; + 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() { + // Hardcoded .staggered-list scrollFire + // var staggeredListOptions = []; + // $('ul.staggered-list').each(function (i) { + + // var label = 'scrollFire-' + i; + // $(this).addClass(label); + // staggeredListOptions.push( + // {selector: 'ul.staggered-list.' + label, + // offset: 200, + // callback: 'showStaggeredList("ul.staggered-list.' + label + '")'}); + // }); + // scrollFire(staggeredListOptions); + + // HammerJS, Swipe navigation + + // Touch Event + var swipeLeft = false; + var swipeRight = false; + + + // Dismissible Collections + $('.dismissable').each(function() { + $(this).hammer({ + prevent_default: false + }).bind('pan', function(e) { + if (e.gesture.pointerType === "touch") { + var $this = $(this); + var direction = e.gesture.direction; + var x = e.gesture.deltaX; + var velocityX = e.gesture.velocityX; + + $this.velocity({ translateX: x + }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + + // Swipe Left + 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)) { + swipeRight = true; + } + } + }).bind('panend', function(e) { + // Reset if collection is moved back into original position + if (Math.abs(e.gesture.deltaX) < ($(this).innerWidth() / 2)) { + swipeRight = false; + swipeLeft = false; + } + + if (e.gesture.pointerType === "touch") { + var $this = $(this); + if (swipeLeft || swipeRight) { + var fullWidth; + if (swipeLeft) { fullWidth = $this.innerWidth(); } + else { fullWidth = -1 * $this.innerWidth(); } + + $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(); } + }); + } + }); + } + 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( + // { translateY: "100px"}, + // { duration: 0 }); + + // $('ul.staggered-list.vertical li').each(function() { + // $(this).velocity( + // { opacity: "1", translateY: "0"}, + // { duration: 800, delay: time, easing: [60, 25] }); + // time += 120; + // }); + + // // Fade in and Scale + // $('.fade-in.scale').velocity( + // { scaleX: .4, scaleY: .4, translateX: -600}, + // { duration: 0}); + // $('.fade-in').each(function() { + // $(this).velocity( + // { opacity: "1", scaleX: 1, scaleY: 1, translateX: 0}, + // { duration: 800, easing: [60, 10] }); + // }); + }); +}( 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 ) { + + // 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 ) + +}(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.after( 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 ) { + + var + // Get the keycode. + keycode = event.keyCode, + + // Translate that to a selection change. + keycodeToMove = P.component.key[ keycode ], + + // Grab the target. + target = event.target + + + // On escape, close the picker and give focus. + if ( keycode == 27 ) { + P.close( true ) + } + + + // Check if there is a key movement or “enter” keypress on the element. + else if ( target == P.$root[0] && ( keycodeToMove || keycode == 13 ) ) { + + // Prevent the default action to stop page movement. + event.preventDefault() + + // 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() + } + } + + + // 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() + } + }) + } + + // 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' ).eq(0).focus() + setTimeout( function() { + P.$root.on( 'focus.toOpen', handleFocusToOpenEvent ) + }, 0 ) + } + + // 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() { + + // 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 + + // Set it as closed. + STATE.open = false + + // Allow the page to scroll. + if ( IS_DEFAULT_THEME ) { + $html. + css( 'overflow', '' ). + css( 'padding-right', '-=' + getScrollbarWidth() ) + } + + // Unbind the document events. + $document.off( '.' + STATE.id ) + + // Trigger the queued “close” events. + return P.trigger( 'close' ) + }, //close + + + /** + * Clear the values + */ + clear: function( options ) { + return P.set( 'clear', null, options ) + }, //clear + + + /** + * Set something + */ + set: function( thing, value, options ) { + + var thingItem, thingValue, + thingIsObject = $.isPlainObject( thing ), + thingObject = thingIsObject ? thing : {} + + // Make sure we have usable options. + options = thingIsObject && $.isPlainObject( value ) ? value : options || {} + + if ( thing ) { + + // If the thing isn’t an object, make it one. + if ( !thingIsObject ) { + thingObject[ thing ] = value + } + + // Go through the things of items to set. + for ( thingItem in thingObject ) { + + // Grab the value of the thing. + thingValue = thingObject[ thingItem ] + + // 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 ) + } + + // 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() + } + + // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`. + return options.muted ? P : P.trigger( 'set', thingObject ) + }, //set + + + /** + * Get something + */ + get: function( thing, format ) { + + // Make sure there’s something to get. + thing = thing || 'value' + + // 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' + } + + // 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 + + + + /** + * Bind events on the things. + */ + on: function( thing, method, internal ) { + + var thingName, thingMethod, + thingIsObject = $.isPlainObject( thing ), + thingObject = thingIsObject ? thing : {} + + if ( thing ) { + + // 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 ) { + + // Grab the method of the thing. + thingMethod = thingObject[ thingName ] + + // If it was an internal binding, prefix it. + if ( internal ) { + thingName = '_' + thingName + } + + // 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 ) + } + } + + return P + }, //on + + + + /** + * 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 + + + /** + * Wrap the picker holder components together. + */ + function createWrappedComponent() { + + // Create a picker wrapper holder + return PickerConstructor._.node( 'div', + + // Create a picker wrapper node + PickerConstructor._.node( 'div', + + // Create a picker frame + PickerConstructor._.node( 'div', + + // Create a picker box node + PickerConstructor._.node( 'div', + + // Create the components nodes. + P.component.nodes( STATE.open ), + + // The picker box class + CLASSES.box + ), + + // Picker wrap class + CLASSES.wrap + ), + + // Picker frame class + CLASSES.frame + ), + + // Picker holder class + CLASSES.holder + ) //endreturn + } //createWrappedComponent + + + + /** + * Prepare the input element with all bindings. + */ + 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 + ) + + + // Only bind keydown events if the element isn’t editable. + if ( !SETTINGS.editable ) { + + $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.eq(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, + expanded: false, + readonly: false, + owns: ELEMENT.id + '_root' + }) + } + + + /** + * Prepare the root picker element with all bindings. + */ + function prepareElementRoot() { + + P.$root. + + on({ + + // For iOS8. + keydown: handleKeydownEvent, + + // 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 ) { + + var target = event.target + + // Make sure the target isn’t the root holder so it can bubble up. + if ( target != P.$root.children()[ 0 ] ) { + + event.stopPropagation() + + // * 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' )) { + + event.preventDefault() + + // Re-focus onto the root so that users can click away + // from elements focused within the picker. + P.$root.eq(0).focus() + } + } + } + }). + + // 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 ). + + // If there’s a click on an actionable element, carry out the actions. + on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() { + + var $target = $( this ), + targetData = $target.data(), + targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ), + + // * For IE, non-focusable elements can be active elements as well + // (http://stackoverflow.com/a/2684561). + activeElement = getActiveElement() + activeElement = activeElement && ( activeElement.type || activeElement.href ) + + // 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 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 } ) + } + + // If something is picked, set `select` then close with focus. + else if ( !targetDisabled && 'pick' in targetData ) { + P.set( 'select', targetData.pick ) + } + + // If a “clear” button is pressed, empty the values and close with focus. + else if ( targetData.clear ) { + P.clear().close( true ) + } + + else if ( targetData.close ) { + P.close( true ) + } + + }) //P.$root + + aria( P.$root[0], 'hidden', true ) + } + + + /** + * Prepare the hidden input element along with all bindings. + */ + function prepareElementHidden() { + + var name + + 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] + } + + P._hidden = $( + '' + )[0] + + $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) : + '' + }) + + + // Insert the hidden input as specified in the settings. + if ( SETTINGS.container ) $( SETTINGS.container ).append( P._hidden ) + else $ELEMENT.after( P._hidden ) + } + + + // For iOS8. + function handleKeydownEvent( event ) { + + var keycode = event.keyCode, + + // 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 + } + + // 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] ) { + + // 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() } + } + } + + + // 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 ) + } + + // And then finally open the picker. + P.open() + } + + + // Return a new picker instance. + return new PickerInstance() +} //PickerConstructor + + + +/** + * The default classes and prefix to use for the HTML classes. + */ +PickerConstructor.klasses = function( prefix ) { + prefix = prefix || 'picker' + return { + + picker: prefix, + opened: prefix + '--opened', + focused: prefix + '--focused', + + input: prefix + '__input', + active: prefix + '__input--active', + target: prefix + '__input--target', + + holder: prefix + '__holder', + + frame: prefix + '__frame', + wrap: prefix + '__wrap', + + box: prefix + '__box' + } +} //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] + } + + // For normal browsers. + else if ( window.getComputedStyle ) { + theme = getComputedStyle( element )[prop] + } + + return theme == 'fixed' +} + + + +/** + * Get the width of the browser’s scrollbar. + * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js + */ +function getScrollbarWidth() { + + if ( $html.height() <= $window.height() ) { + return 0 + } + + var $outer = $( '
      ' ). + appendTo( 'body' ) + + // Get the width without scrollbars. + var widthWithoutScroll = $outer[0].offsetWidth + + // Force adding scrollbars. + $outer.css( 'overflow', 'scroll' ) + + // Add the inner div. + var $inner = $( '
      ' ).appendTo( $outer ) + + // Get the width with scrollbars. + var widthWithScroll = $inner[0].offsetWidth + + // Remove the divs. + $outer.remove() + + // Return the difference between the widths. + return widthWithoutScroll - widthWithScroll +} + + + +/** + * PickerConstructor helper methods. + */ +PickerConstructor._ = { + + /** + * Create a group of nodes. Expects: + * ` + { + min: {Integer}, + max: {Integer}, + i: {Integer}, + node: {String}, + item: {Function} + } + * ` + */ + group: function( groupObject ) { + + var + // Scope for the looped object + loopObjectScope, + + // Create the nodes list + nodesList = '', + + // The counter starts from the `min` + counter = PickerConstructor._.trigger( groupObject.min, groupObject ) + + + // Loop from the `min` to `max`, incrementing by `i` + for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) { + + // Trigger the `item` function within scope of the object + loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] ) + + // 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 + + + /** + * 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 '' + + // If the item is an array, do a join + item = $.isArray( item ) ? item.join( '' ) : item + + // Check for the class + klass = klass ? ' class="' + klass + '"' : '' + + // Check for any attributes + attribute = attribute ? ' ' + attribute : '' + + // Return the wrapped item + return '<' + wrapper + klass + attribute + '>' + item + '' + }, //node + + + /** + * 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 + }, + + + /** + * If the second character is a digit, length is 2 otherwise 1. + */ + digits: function( string ) { + return ( /\d/ ).test( string[ 1 ] ) ? 2 : 1 + }, + + + /** + * Tell if something is a date object. + */ + isDate: function( value ) { + return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() ) + }, + + + /** + * Tell if something is an integer. + */ + isInteger: function( value ) { + return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0 + }, + + + /** + * Create ARIA attribute strings. + */ + ariaAttr: ariaAttr +} //PickerConstructor._ + + + +/** + * Extend the picker with a component and defaults. + */ +PickerConstructor.extend = function( name, Component ) { + + // Extend jQuery. + $.fn[ name ] = function( options, action ) { + + // Grab the component data. + var componentData = this.data( name ) + + // If the picker is requested, return the data object. + if ( options == 'picker' ) { + return componentData + } + + // 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 ] ) + } + + // 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]) + } + } + 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 + + +})); + + +;/*! + * Date picker for pickadate.js v3.5.0 + * http://amsul.github.io/pickadate.js/date.htm + */ + +(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 ) + +}(function( Picker, $ ) { + + +/** + * Globals and constants + */ +var DAYS_IN_WEEK = 7, + WEEKS_IN_CALENDAR = 6, + _ = Picker._ + + + +/** + * The date picker constructor + */ +function DatePicker( picker, settings ) { + + 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 ? + + // For IE. + element.currentStyle.direction == 'rtl' : + + // For normal browsers. + getComputedStyle( picker.$root[0] ).direction == 'rtl' + } + + calendar.settings = settings + calendar.$node = picker.$node + + // 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' ) + + // 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 ) + } + + + // 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() + } + } + + + // 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 ) + +} //DatePicker + + +/** + * Set a datepicker item object. + */ +DatePicker.prototype.set = function( type, value, options ) { + + var calendar = this, + calendarItem = calendar.item + + // 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() + + // 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 + + +/** + * Get a datepicker item object. + */ +DatePicker.prototype.get = function( type ) { + return this.item[ type ] +} //DatePicker.prototype.get + + +/** + * Create a picker date object. + */ +DatePicker.prototype.create = function( type, value, options ) { + + var isInfiniteValue, + calendar = this + + // If there’s no value, use the type as the value. + value = value === undefined ? type : value + + + // 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 + } + + // 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 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 ) + } + + // 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 + + +/** + * Create a range limit object using an array, date object, + * literal “true”, or integer relative to another time. + */ +DatePicker.prototype.createRange = function( from, to ) { + + var calendar = this, + createDate = function( date ) { + if ( date === true || $.isArray( date ) || _.isDate( date ) ) { + return calendar.create( date ) + } + return date + } + + // Create objects if possible. + if ( !_.isInteger( from ) ) { + from = createDate( from ) + } + if ( !_.isInteger( to ) ) { + to = createDate( to ) + } + + // 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 { + 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 +} + + +/** + * Check if two date range objects overlap. + */ +DatePicker.prototype.overlapRanges = function( one, two ) { + + var calendar = this + + // Convert the ranges into comparable dates. + one = calendar.createRange( one.from, one.to ) + two = calendar.createRange( two.from, two.to ) + + return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) || + calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to ) +} + + +/** + * 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 ) +} + + +/** + * Navigate to next/prev month. + */ +DatePicker.prototype.navigate = function( type, value, options ) { + + var targetDateObject, + targetYear, + targetMonth, + targetDate, + isTargetArray = $.isArray( value ), + isTargetObject = $.isPlainObject( value ), + viewsetObject = this.item.view/*, + safety = 100*/ + + + if ( isTargetArray || isTargetObject ) { + + 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 ) + '.' + }*/ + } + + value = [ targetYear, targetMonth, targetDate ] + } + + return value +} //DatePicker.prototype.navigate + + +/** + * Normalize a date by setting the hours to midnight. + */ +DatePicker.prototype.normalize = function( value/*, options*/ ) { + value.setHours( 0, 0, 0, 0 ) + return value +} + + +/** + * Measure the range of dates. + */ +DatePicker.prototype.measure = function( type, value/*, options*/ ) { + + var calendar = this + + // If it’s anything false-y, remove the limits. + if ( !value ) { + value = type == 'min' ? -Infinity : Infinity + } + + // If it’s a string, parse it. + else if ( typeof value == 'string' ) { + value = calendar.parse( type, value ) + } + + // If it's an integer, get a date relative to today. + else if ( _.isInteger( value ) ) { + value = calendar.now( type, value, { rel: value } ) + } + + return value +} ///DatePicker.prototype.measure + + +/** + * Create a viewset object based on navigation. + */ +DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) { + return this.create([ dateObject.year, dateObject.month, 1 ]) +} + + +/** + * Validate a date as enabled and shift if needed. + */ +DatePicker.prototype.validate = function( type, dateObject, options ) { + + var calendar = this, + + // Keep a reference to the original date. + originalDateObject = dateObject, + + // Make sure we have an interval. + interval = options && options.interval ? options.interval : 1, + + // Check if the calendar enabled dates are inverted. + isFlippedBase = calendar.item.enable === -1, + + // Check if we have any enabled dates after/before now. + hasEnabledBeforeTarget, hasEnabledAfterTarget, + + // The min & max limits. + minLimitObject = calendar.item.min, + maxLimitObject = calendar.item.max, + + // 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 ) { + + // 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*/ + + + + // 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 + } + + + // Keep looping until we reach an enabled date. + while ( /*safety &&*/ calendar.disabled( dateObject ) ) { + + /*safety -= 1 + if ( !safety ) { + throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.' + }*/ + + + // 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 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) + ]) + } + + + // If we’ve reached both limits, just break out of the loop. + if ( reachedMin && reachedMax ) { + break + } + + + // 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 + + +/** + * Check if a date is disabled. + */ +DatePicker.prototype.disabled = function( dateToVerify ) { + + var + calendar = this, + + // Filter through the disabled dates to check if this is one. + isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) { + + // 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 + } + + // 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 ) + } + }) + + // 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 + + +/** + * Parse a string into a usable type. + */ +DatePicker.prototype.parse = function( type, value, options ) { + + var calendar = this, + parsingObject = {} + + // If it’s already parsed, we’re good. + if ( !value || typeof value != 'string' ) { + return value + } + + // We need a `.format` to parse the value with. + if ( !( options && options.format ) ) { + options = options || {} + options.format = calendar.settings.format + } + + // 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 ], + + // 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 ) + } + + // Update the value as the substring from format length to end. + value = value.substr( formatLength ) + }) + + // Compensate for month 0index. + return [ + parsingObject.yyyy || parsingObject.yy, + +( parsingObject.mm || parsingObject.m ) - 1, + parsingObject.dd || parsingObject.d + ] +} //DatePicker.prototype.parse + + +/** + * Various formats to display the object in. + */ +DatePicker.prototype.formats = (function() { + + // 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 ] + + // If there's no month index, add it to the date object + if ( !dateObject.mm && !dateObject.m ) { + dateObject.m = collection.indexOf( word ) + 1 + } + + // Return the length of the word. + return word.length + } + + // Get the length of the first word in a string. + function getFirstWordLength( string ) { + return string.match( /\w+/ )[ 0 ].length + } + + return { + + d: function( string, dateObject ) { + + // 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 ) { + + // 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 ) { + + // 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 ) { + + // 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 ) { + + 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 ) { + + var collection = this.settings.monthsFull + + // 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 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 there's a string, then the length is always 4. + // Otherwise return the selected year. + return string ? 4 : dateObject.year + }, + + // 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 ) }, + + // 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 + + + + +/** + * Check if two date units are the exact. + */ +DatePicker.prototype.isDateExact = function( one, two ) { + + var calendar = this + + // When we’re working with weekdays, do a direct comparison. + if ( + ( _.isInteger( one ) && _.isInteger( two ) ) || + ( typeof one == 'boolean' && typeof two == 'boolean' ) + ) { + return one === two + } + + // 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 + } + + // 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 ) + } + + return false +} + + +/** + * Check if two date units overlap. + */ +DatePicker.prototype.isDateOverlap = function( one, two ) { + + var calendar = this, + firstDay = calendar.settings.firstDay ? 1 : 0 + + // 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 + } + + // When we’re working with range objects, check if the ranges overlap. + if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) { + return calendar.overlapRanges( one, two ) + } + + return false +} + + +/** + * 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 ) { + + 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 = [] + } + + // Otherwise go through the dates to disable. + else { + + datesToDisable.map(function( unitToDisable ) { + + 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 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 ) + } + } + }) + } + + // Return the updated collection. + return disabledItems +} //DatePicker.prototype.deactivate + + +/** + * Mark a collection of dates as “enabled”. + */ +DatePicker.prototype.activate = function( type, datesToEnable ) { + + var calendar = this, + disabledItems = calendar.item.disable, + disabledItemsCount = disabledItems.length + + // 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 = [] + } + + // Otherwise go through the disabled dates. + else { + + datesToEnable.map(function( unitToEnable ) { + + var matchFound, + disabledUnit, + index, + isExactRange + + // Go through the disabled items and try to find a match. + for ( index = 0; index < disabledItemsCount; index += 1 ) { + + disabledUnit = disabledItems[index] + + // When an exact match is found, remove it from the collection. + if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) { + matchFound = disabledItems[index] = null + isExactRange = true + break + } + + // 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 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 + } + } + + // 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 ) + } + }) + } + + // Return the updated collection. + return disabledItems.filter(function( val ) { return val != null }) +} //DatePicker.prototype.activate + + +/** + * 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, + + + // 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 ) { + + // If the first day should be Monday, move Sunday to the end. + if ( settings.firstDay ) { + collection.push( collection.shift() ) + fullCollection.push( fullCollection.shift() ) + } + + // 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 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 + '"' + ) + } + + // Materialize modified + if (override == "short_months") + if (selectedObject != null) + return _.node( 'div', monthsCollection[ selectedObject.month ] ); + else return _.node( 'div', monthsCollection[ viewsetObject.month ] ); + + // If there's a need for a month selector + return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month ) + }, //createMonthLabel + + + // Create the year label. + // Materialize modified + createYearLabel = function(override) { + + var focusedYear = viewsetObject.year, + + // 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 ) + + // If there are years to select, add a dropdown menu. + if ( numberYears ) { + + 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 + } + + // 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 + + lowestYear -= availableYears > neededYears ? neededYears : availableYears + highestYear = maxYear + } + + 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 + '"' + ) + } + } + + // Materialize modified + if (override == "raw") + return _.node( 'div', focusedYear ) + + // Otherwise just return the year focused + return _.node( 'div', focusedYear, settings.klass.year ) + } //createYearLabel + + + // Materialize modified + createDayLabel = function() { + if (selectedObject != null) + return _.node( 'div', selectedObject.date) + else return _.node( 'div', nowObject.date) + } + createWeekdayLabel = function() { + var display_day; + + if (selectedObject != null) + display_day = selectedObject.day; + else + display_day = nowObject.day; + var weekday = settings.weekdaysFull[ display_day ] + return weekday + } + + + // 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 + + + + + // * 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 + + + + +/** + * The date picker defaults. + */ +DatePicker.defaults = (function( prefix ) { + + return { + + // 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', + + // 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' ], + + // Materialize modified + weekdaysLetter: [ 'S', 'M', 'T', 'W', 'T', 'F', 'S' ], + + // Today and clear + today: 'Today', + clear: 'Clear', + close: 'Close', + + // The format to show on the `input` element + format: 'd mmmm, yyyy', + + // Classes + klass: { + + table: prefix + 'table', + + header: prefix + 'header', + + + // 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 + + + + navPrev: prefix + 'nav--prev', + navNext: prefix + 'nav--next', + navDisabled: prefix + 'nav--disabled', + + month: prefix + 'month', + year: prefix + 'year', + + selectMonth: prefix + 'select--month', + selectYear: prefix + 'select--year', + + weekdays: prefix + 'weekday', + + 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', + + footer: prefix + 'footer', + + buttonClear: prefix + 'button--clear', + buttonToday: prefix + 'button--today', + buttonClose: prefix + 'button--close' + } + } +})( Picker.klasses().picker + '__' ) + + + + + +/** + * Extend the picker to add the date picker. + */ +Picker.extend( 'pickadate', DatePicker ) + + +})); + + +;(function ($) { + + $.fn.characterCounter = function(){ + return this.each(function(){ + var $input = $(this); + var $counterElement = $input.parent().find('span[class="character-counter"]'); + + // character counter has already been added appended to the parent container + if ($counterElement.length) { + return; + } + + var itHasLengthAttribute = $input.attr('data-length') !== undefined; + + if(itHasLengthAttribute){ + $input.on('input', updateCounter); + $input.on('focus', updateCounter); + $input.on('blur', removeCounterElement); + + addCounterElement($input); + } + + }); + }; + + function updateCounter(){ + var maxLength = +$(this).attr('data-length'), + actualLength = +$(this).val().length, + isValidLength = actualLength <= maxLength; + + $(this).parent().find('span[class="character-counter"]') + .html( actualLength + '/' + maxLength); + + addInputStyle(isValidLength, $(this)); + } + + 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') + .css('height', 1); + + $input.parent().append($counterElement); + } + + function removeCounterElement(){ + $(this).parent().find('span[class="character-counter"]').html(''); + } + + 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 ($) { + + 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); + + return this.each(function() { + + var images, item_width, item_height, offset, center, pressed, dim, count, + reference, referenceY, amplitude, target, velocity, + xform, frame, timestamp, ticker, dragged, vertical_dragged; + var $indicators = $('
        '); + + + // Initialize + var view = $(this); + var showIndicators = view.attr('data-indicators') || options.indicators; + + // Don't double initialize. + if (view.hasClass('initialized')) { + // Redraw carousel. + $(this).trigger('carouselNext', [0.000001]); + return true; + } + + + // Options + if (options.fullWidth) { + options.dist = 0; + var firstImage = view.find('.carousel-item img').first(); + if (firstImage.length) { + imageHeight = firstImage.on('load', function(){ + view.css('height', $(this).height()); + }); + } else { + imageHeight = view.find('.carousel-item').first().height(); + view.css('height', imageHeight); + } + + // Offset fixed items when indicators. + if (showIndicators) { + view.find('.carousel-fixed-item').addClass('with-indicators'); + } + } + + + 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[0].addEventListener('touchstart', tap); + view[0].addEventListener('touchmove', drag); + view[0].addEventListener('touchend', release); + } + view[0].addEventListener('mousedown', tap); + view[0].addEventListener('mousemove', drag); + view[0].addEventListener('mouseup', release); + view[0].addEventListener('mouseleave', release); + view[0].addEventListener('click', 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) { + 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 (!options.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 (!options.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 (!options.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 (!options.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); + } + } + + 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 = (center % count) - 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 (!options.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) { + 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 (options.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; + }); + + + $(window).on('resize.carousel', function() { + if (options.fullWidth) { + item_width = view.find('.carousel-item').first().innerWidth(); + item_height = view.find('.carousel-item').first().innerHeight(); + dim = item_width * 2 + options.padding; + offset = center * 2 * item_width; + target = offset; + } else { + scroll(); + } + }); + + setupEvents(); + scroll(offset); + + $(this).on('carouselNext', function(e, n) { + if (n === undefined) { + n = 1; + } + 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) { + if (n === undefined) { + n = 1; + } + 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) { + if (n === undefined) { + n = 0; + } + cycleTo(n); + }); + + }); + + + + }, + next : function(n) { + $(this).trigger('carouselNext', [n]); + }, + prev : function(n) { + $(this).trigger('carouselPrev', [n]); + }, + set : function(n) { + $(this).trigger('carouselSet', [n]); + } + }; + + + $.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 )); \ No newline at end of file diff --git a/node_modules/materialize-css/dist/js/materialize.min.js b/node_modules/materialize-css/dist/js/materialize.min.js new file mode 100644 index 0000000..00c0d5f --- /dev/null +++ b/node_modules/materialize-css/dist/js/materialize.min.js @@ -0,0 +1,10 @@ +/*! + * Materialize v0.98.0 (http://materializecss.com) + * Copyright 2014-2015 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +if("undefined"==typeof jQuery){var jQuery;jQuery="function"==typeof require?$=require("jquery"):$}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),h0&&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),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(a){function l(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 n(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 r(){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(u){setTimeout(function(){throw u},1)}if("scroll"===C){var w,z,A,D=/^x$/i.test(h.axis)?"Left":"Top",E=parseFloat(h.offset)||0;h.container?p.isWrapped(h.container)||p.isNode(h.container)?(h.container=h.container[0]||h.container,w=h.container["scroll"+D],A=w+m(f).position()[D.toLowerCase()]+E):h.container=null:(w=t.State.scrollAnchor[t.State["scrollProperty"+D]],z=t.State.scrollAnchor[t.State["scrollProperty"+("Left"===D?"Top":"Left")]],A=m(f).offset()[D.toLowerCase()]+E),i={scroll:{rootPropertyValue:!1,startValue:w,currentValue:w,endValue:A,unitType:"",easing:h.easing,scrollData:{container:h.container,direction:D,alternateValue:z}},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 F=m.extend(!0,{},g(f).tweensContainer);for(var G in F)if("element"!==G){var H=F[G].startValue;F[G].startValue=F[G].currentValue=F[G].endValue,F[G].endValue=H,p.isEmptyObject(s)||(F[G].easing=h.easing),t.debug&&console.log("reverse tweensContainer ("+G+"): "+JSON.stringify(F[G]),f)}i=F}else if("start"===C){var F;g(f).tweensContainer&&g(f).isAnimating===!0&&(F=g(f).tweensContainer),m.each(q,function(a,b){if(RegExp("^"+v.Lists.colors.join("$|^")+"$").test(a)){var c=l(b,!0),e=c[0],f=c[1],g=c[2];if(v.RegEx.isHex.test(e)){for(var h=["Red","Green","Blue"],i=v.Values.hexToRgb(e),j=g?v.Values.hexToRgb(g):d,k=0;kL;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)}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=0&&!d;)d=a[c[f]+"RequestAnimationFrame"],e=a[c[f]+"CancelRequestAnimationFrame"];d&&e||(d=function(a){var c=+Date.now(),d=Math.max(b+16,c);return setTimeout(function(){a(b=d)},d-c)},e=clearTimeout),a.requestAnimationFrame=d,a.cancelAnimationFrame=e}(window),Materialize.guid=function(){function a(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}}(),Materialize.escapeHash=function(a){return a.replace(/(:|\.|\[|\]|,|=)/g,"\\$1")},Materialize.elementOrParentIsFixed=function(a){var b=$(a),c=b.add(b.parents()),d=!1;return c.each(function(){if("fixed"===$(this).css("position"))return d=!0,!1}),d};var getTime=Date.now||function(){return(new Date).getTime()};Materialize.throttle=function(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:getTime(),g=null,f=a.apply(d,e),d=e=null};return function(){var j=getTime();h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,k<=0?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}};var Vel;Vel=jQuery?jQuery.Velocity:$?$.Velocity:Velocity,function(a){a.fn.collapsible=function(b){var c={accordion:void 0,onOpen:void 0,onClose:void 0};return b=a.extend(c,b),this.each(function(){function c(b){j=i.find("> 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","")}}),j.not(b).removeClass("active").parent().removeClass("active"),j.not(b).parent().children(".collapsible-body").stop(!0,!1).each(function(){a(this).is(":visible")&&a(this).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height",""),f(a(this).siblings(".collapsible-header"))}})})}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){b.accordion||"accordion"===k||void 0===k?c(a):d(a),f(a)}function f(a){a.hasClass("active")?"function"==typeof b.onOpen&&b.onOpen.call(this,a.parent()):"function"==typeof b.onClose&&b.onClose.call(this,a.parent())}function g(a){var b=h(a);return b.length>0}function h(a){return a.closest("li > .collapsible-header")}var i=a(this),j=a(this).find("> li > .collapsible-header"),k=i.data("collapsible");i.off("click.collapse","> li > .collapsible-header"),j.off("click.collapse"),i.on("click.collapse","> li > .collapsible-header",function(b){var c=a(b.target);g(c)&&(c=h(c)),c.toggleClass("active"),e(c)}),b.accordion||"accordion"===k||void 0===k?e(j.filter(".active").first()):j.filter(".active").each(function(){e(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,constrainWidth:!0,hover:!1,gutter:0,belowOrigin:!1,alignment:"left",stopPropagation:!1};return"open"===b?(this.each(function(){a(this).trigger("open")}),!1):"close"===b?(this.each(function(){a(this).trigger("close")}),!1):void 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.constrainWidth=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")),void 0!==g.data("alignment")&&(h.alignment=g.data("alignment")),void 0!==g.data("stoppropagation")&&(h.stopPropagation=g.data("stoppropagation"))}function e(b){"focus"===b&&(i=!0),d(),j.addClass("active"),g.addClass("active"),h.constrainWidth===!0?j.css("width",g.outerWidth()):j.css("white-space","nowrap");var c=window.innerHeight,e=g.innerHeight(),k=g.offset().left,l=g.offset().top-a(window).scrollTop(),m=h.alignment,n=0,o=0,p=0;h.belowOrigin===!0&&(p=e);var q=0,r=0,s=g.parent();if(s.is("body")||(s[0].scrollHeight>s[0].clientHeight&&(q=s[0].scrollTop),s[0].scrollWidth>s[0].clientWidth&&(r=s[0].scrollLeft)),k+j.innerWidth()>a(window).width()?m="right":k-j.innerWidth()+g.innerWidth()<0&&(m="left"),l+j.innerHeight()>c)if(l+e-j.innerHeight()<0){var t=c-l-p;j.css("max-height",t)}else p||(p+=e),p-=j.innerHeight();if("left"===m)n=h.gutter,o=g.position().left+n;else if("right"===m){var u=g.position().left+g.outerWidth()-j.outerWidth();n=-h.gutter,o=u+n}j.css({position:"absolute",top:g.position().top+p+q,left:o+r}),j.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"}),a(document).bind("click."+j.attr("id")+" touchstart."+j.attr("id"),function(b){j.is(b.target)||g.is(b.target)||g.find(b.target).length||(f(),a(document).unbind("click."+j.attr("id")+" touchstart."+j.attr("id")))})}function f(){i=!1,j.fadeOut(h.outDuration),j.removeClass("active"),g.removeClass("active"),a(document).unbind("click."+j.attr("id")+" touchstart."+j.attr("id")),setTimeout(function(){j.css("max-height","")},h.outDuration)}var g=a(this),h=a.extend({},c,b),i=!1,j=a("#"+g.attr("data-activates"));if(d(),g.after(j),h.hover){var k=!1;g.unbind("click."+g.attr("id")),g.on("mouseenter",function(a){k===!1&&(e(),k=!0)}),g.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-content").is(j)||(j.stop(!0,!0),f(),k=!1)}),j.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-button").is(g)||(j.stop(!0,!0),f(),k=!1)})}else g.unbind("click."+g.attr("id")),g.bind("click."+g.attr("id"),function(b){i||(g[0]!=b.currentTarget||g.hasClass("active")||0!==a(b.target).closest(".dropdown-content").length?g.hasClass("active")&&(f(),a(document).unbind("click."+j.attr("id")+" touchstart."+j.attr("id"))):(b.preventDefault(),h.stopPropagation&&b.stopPropagation(),e("click")))});g.on("open",function(a,b){e(b)}),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-modal-overlay-"+c},e={init:function(c){var e={opacity:.5,inDuration:350,outDuration:250,ready:void 0, +complete:void 0,dismissible:!0,startingTop:"4%",endingTop:"10%"};return c=a.extend(e,c),this.each(function(){var e=a(this),f=a(this).attr("id")||"#"+a(this).data("target"),g=function(){var d=e.data("overlay-id"),f=a("#"+d);e.removeClass("open"),a("body").css({overflow:"",width:""}),e.find(".modal-close").off("click.close"),a(document).off("keyup.modal"+d),f.velocity({opacity:0},{duration:c.outDuration,queue:!1,ease:"easeOutQuart"});var g={duration:c.outDuration,queue:!1,ease:"easeOutCubic",complete:function(){a(this).css({display:"none"}),"function"==typeof c.complete&&c.complete.call(this,e),f.remove(),b--}};e.hasClass("bottom-sheet")?e.velocity({bottom:"-100%",opacity:0},g):e.velocity({top:c.startingTop,opacity:0,scaleX:.7},g)},h=function(f){var h=a("body"),i=h.innerWidth();if(h.css("overflow","hidden"),h.width(i),!e.hasClass("open")){var j=d(),k=a('');lStack=++b,k.attr("id",j).css("z-index",1e3+2*lStack),e.data("overlay-id",j).css("z-index",1e3+2*lStack+1),e.addClass("open"),a("body").append(k),c.dismissible&&(k.click(function(){g()}),a(document).on("keyup.modal"+j,function(a){27===a.keyCode&&g()})),e.find(".modal-close").on("click.close",function(a){g()}),k.css({display:"block",opacity:0}),e.css({display:"block",opacity:0}),k.velocity({opacity:c.opacity},{duration:c.inDuration,queue:!1,ease:"easeOutCubic"}),e.data("associated-overlay",k[0]);var l={duration:c.inDuration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready.call(this,e,f)}};e.hasClass("bottom-sheet")?e.velocity({bottom:"0",opacity:1},l):(a.Velocity.hook(e,"scaleX",.7),e.css({top:c.startingTop}),e.velocity({top:c.endingTop,opacity:1,scaleX:"1"},l))}};a(document).off("click.modalTrigger",'a[href="#'+f+'"], [data-target="'+f+'"]'),a(this).off("openModal"),a(this).off("closeModal"),a(document).on("click.modalTrigger",'a[href="#'+f+'"], [data-target="'+f+'"]',function(b){c.startingTop=(a(this).offset().top-a(window).scrollTop())/1.15,h(a(this)),b.preventDefault()}),a(this).on("openModal",function(){a(this).attr("href")||"#"+a(this).data("target");h()}),a(this).on("closeModal",function(){g()})})},open:function(){a(this).trigger("openModal")},close:function(){a(this).trigger("closeModal")}};a.fn.modal=function(b){return e[b]?e[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exist on jQuery.modal"):e.init.apply(this,arguments)}}(jQuery),function(a){a.fn.materialbox=function(){return this.each(function(){function b(){f=!1;var b=i.parent(".material-placeholder"),d=(window.innerWidth,window.innerHeight,i.data("width")),g=i.data("height");i.velocity("stop",!0),a("#materialbox-overlay").velocity("stop",!0),a(".materialbox-caption").velocity("stop",!0),a("#materialbox-overlay").velocity({opacity:0},{duration:h,queue:!1,easing:"easeOutQuad",complete:function(){e=!1,a(this).remove()}}),i.velocity({width:d,height:g,left:0,top:0},{duration:h,queue:!1,easing:"easeOutQuad"}),a(".materialbox-caption").velocity({opacity:0},{duration:h,queue:!1,easing:"easeOutQuad",complete:function(){b.css({height:"",width:"",position:"",top:"",left:""}),i.css({height:"",top:"",left:"",width:"","max-width":"",position:"","z-index":"","will-change":""}),i.removeClass("active"),f=!0,a(this).remove(),c&&c.css("overflow","")}})}if(!a(this).hasClass("initialized")){a(this).addClass("initialized");var c,d,e=!1,f=!0,g=275,h=200,i=a(this),j=a("
        ").addClass("material-placeholder");i.wrap(j),i.on("click",function(){var h=i.parent(".material-placeholder"),j=window.innerWidth,k=window.innerHeight,l=i.width(),m=i.height();if(f===!1)return b(),!1;if(e&&f===!0)return b(),!1;f=!1,i.addClass("active"),e=!0,h.css({width:h[0].getBoundingClientRect().width,height:h[0].getBoundingClientRect().height,position:"relative",top:0,left:0}),c=void 0,d=h[0].parentNode;for(;null!==d&&!a(d).is(document);){var n=a(d);"visible"!==n.css("overflow")&&(n.css("overflow","visible"),c=void 0===c?n:c.add(n)),d=d.parentNode}i.css({position:"absolute","z-index":1e3,"will-change":"left, top, width, height"}).data("width",l).data("height",m);var o=a('
        ').css({opacity:0}).click(function(){f===!0&&b()});i.before(o);var p=o[0].getBoundingClientRect();if(o.css({width:j,height:k,left:-1*p.left,top:-1*p.top}),o.velocity({opacity:1},{duration:g,queue:!1,easing:"easeOutQuad"}),""!==i.data("caption")){var q=a('
        ');q.text(i.data("caption")),a("body").append(q),q.css({display:"inline"}),q.velocity({opacity:1},{duration:g,queue:!1,easing:"easeOutQuad"})}var r=0,s=l/j,t=m/k,u=0,v=0;s>t?(r=m/l,u=.9*j,v=.9*j*r):(r=l/m,u=.9*k*r,v=.9*k),i.hasClass("responsive-img")?i.velocity({"max-width":u,width:l},{duration:0,queue:!1,complete:function(){i.css({left:0,top:0}).velocity({height:v,width:u,left:a(document).scrollLeft()+j/2-i.parent(".material-placeholder").offset().left-u/2,top:a(document).scrollTop()+k/2-i.parent(".material-placeholder").offset().top-v/2},{duration:g,queue:!1,easing:"easeOutQuad",complete:function(){f=!0}})}}):i.css("left",0).css("top",0).velocity({height:v,width:u,left:a(document).scrollLeft()+j/2-i.parent(".material-placeholder").offset().left-u/2,top:a(document).scrollTop()+k/2-i.parent(".material-placeholder").offset().top-v/2},{duration:g,queue:!1,easing:"easeOutQuad",complete:function(){f=!0}})}),a(window).scroll(function(){e&&b()}),a(document).keyup(function(a){27===a.keyCode&&f===!0&&e&&b()})}})},a(document).ready(function(){a(".materialboxed").materialbox()})}(jQuery),function(a){a.fn.parallax=function(){var b=a(window).width();return this.each(function(c){function d(c){var d;d=b<601?e.height()>0?e.height():e.children("img").height():e.height()>0?e.height():500;var f=e.children("img").first(),g=f.height(),h=g-d,i=e.offset().top+d,j=e.offset().top,k=a(window).scrollTop(),l=window.innerHeight,m=k+l,n=(m-j)/(d+l),o=Math.round(h*n);c&&f.css("display","block"),i>k&&j=0?(f.velocity({right:q(c)},{duration:p,queue:!1,easing:"easeOutQuad"}),f.velocity({left:r(c)},{duration:p,queue:!1,easing:"easeOutQuad",delay:90})):(f.velocity({left:r(c)},{duration:p,queue:!1,easing:"easeOutQuad"}),f.velocity({right:q(c)},{duration:p,queue:!1,easing:"easeOutQuad",delay:90}))};b.swipeable&&i>b.responsiveThreshold&&(b.swipeable=!1),c=a(j.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"),n=j.index(c),n<0&&(n=0),void 0!==c[0]&&(d=a(c[0].hash),d.addClass("active")),h.find(".indicator").length||h.append('
        '),f=h.find(".indicator"),h.append(f),h.is(":visible")&&setTimeout(function(){f.css({right:q(c)}),f.css({left:r(c)})},0),a(window).resize(function(){k=h.width(),m=Math.max(k,h[0].scrollWidth)/j.length,n<0&&(n=0),0!==m&&0!==k&&(f.css({right:q(c)}),f.css({left:r(c)}))}),b.swipeable?(j.each(function(){var b=a(Materialize.escapeHash(this.hash));b.addClass("carousel-item"),l=l.add(b)}),e=l.wrapAll(''),l.css("display",""),a(".tabs-content.carousel").carousel({fullWidth:!0,noWrap:!0,onCycleTo:function(a){if(!o){var b=n;n=e.index(a),c=j.eq(n),s(b)}}})):j.not(c).each(function(){a(Materialize.escapeHash(this.hash)).hide()}),h.on("click","a",function(e){if(a(this).parent().hasClass("disabled"))return void e.preventDefault();if(!a(this).attr("target")){o=!0,k=h.width(),m=Math.max(k,h[0].scrollWidth)/j.length,c.removeClass("active");var f=d;c=a(this),d=a(Materialize.escapeHash(this.hash)),j=h.find("li.tab a");c.position();c.addClass("active"),prev_index=n,n=j.index(a(this)),n<0&&(n=0),b.swipeable?l.length&&l.carousel("set",n):(void 0!==d&&(d.show(),d.addClass("active"),"function"==typeof b.onShow&&b.onShow.call(this,d)),void 0===f||f.is(d)||(f.hide(),f.removeClass("active"))),g=setTimeout(function(){o=!1},p),s(prev_index),e.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.tabs"):b.init.apply(this,arguments)},a(document).ready(function(){a("ul.tabs").tabs()})}(jQuery),function(a){a.fn.tooltip=function(c){var d=5,e={delay:350,tooltip:"",position:"bottom",html:!1};return"remove"===c?(this.each(function(){a("#"+a(this).attr("data-tooltip-id")).remove(),a(this).off("mouseenter.tooltip mouseleave.tooltip")}),!1):(c=a.extend(e,c),this.each(function(){var e=Materialize.guid(),f=a(this);f.attr("data-tooltip-id")&&a("#"+f.attr("data-tooltip-id")).remove(),f.attr("data-tooltip-id",e);var g,h,i,j,k,l,m=function(){g=f.attr("data-html")?"true"===f.attr("data-html"):c.html,h=f.attr("data-delay"),h=void 0===h||""===h?c.delay:h,i=f.attr("data-position"),i=void 0===i||""===i?c.position:i,j=f.attr("data-tooltip"),j=void 0===j||""===j?c.tooltip:j};m();var n=function(){var b=a('
        ');return j=g?a("").html(j):a("").text(j),b.append(j).appendTo(a("body")).attr("id",e),l=a('
        '),l.appendTo(b),b};k=n(),f.off("mouseenter.tooltip mouseleave.tooltip");var o,p=!1;f.on({"mouseenter.tooltip":function(a){var c=function(){m(),p=!0,k.velocity("stop"),l.velocity("stop"),k.css({visibility:"visible",left:"0px",top:"0px"});var a,c,e,g=f.outerWidth(),h=f.outerHeight(),j=k.outerHeight(),n=k.outerWidth(),o="0px",q="0px",r=l[0].offsetWidth,s=l[0].offsetHeight,t=8,u=8,v=0;"top"===i?(a=f.offset().top-j-d,c=f.offset().left+g/2-n/2,e=b(c,a,n,j),o="-10px",l.css({bottom:0,left:0,borderRadius:"14px 14px 0 0",transformOrigin:"50% 100%",marginTop:j,marginLeft:n/2-r/2})):"left"===i?(a=f.offset().top+h/2-j/2,c=f.offset().left-n-d,e=b(c,a,n,j),q="-10px",l.css({top:"-7px",right:0,width:"14px",height:"14px",borderRadius:"14px 0 0 14px",transformOrigin:"95% 50%",marginTop:j/2,marginLeft:n})):"right"===i?(a=f.offset().top+h/2-j/2,c=f.offset().left+g+d,e=b(c,a,n,j),q="+10px",l.css({top:"-7px",left:0,width:"14px",height:"14px",borderRadius:"0 14px 14px 0",transformOrigin:"5% 50%",marginTop:j/2,marginLeft:"0px"})):(a=f.offset().top+f.outerHeight()+d,c=f.offset().left+g/2-n/2,e=b(c,a,n,j),o="+10px",l.css({top:0,left:0,marginLeft:n/2-r/2})),k.css({top:e.y,left:e.x}),t=Math.SQRT2*n/parseInt(r),u=Math.SQRT2*j/parseInt(s),v=Math.max(t,u),k.velocity({translateY:o,translateX:q},{duration:350,queue:!1}).velocity({opacity:1},{duration:300,delay:50,queue:!1}),l.css({visibility:"visible"}).velocity({opacity:1},{duration:55,delay:0,queue:!1}).velocity({scaleX:v,scaleY:v},{duration:300,delay:0,queue:!1,easing:"easeInOutQuad"})};o=setTimeout(c,h)},"mouseleave.tooltip":function(){p=!1,clearTimeout(o),setTimeout(function(){p!==!0&&(k.velocity({opacity:0,translateY:0,translateX:0},{duration:225,queue:!1}),l.velocity({opacity:0,scaleX:1,scaleY:1},{duration:225,queue:!1,complete:function(){l.css({visibility:"hidden"}),k.css({visibility:"hidden"}),p=!1}}))},225)}})}))};var b=function(b,c,d,e){var f=b,g=c;return f<0?f=4:f+d>window.innerWidth&&(f-=f+d-window.innerWidth),g<0?g=4:g+e>window.innerHeight+a(window).scrollTop&&(g-=g+e-window.innerHeight),{x:f,y:g}};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||c.className.indexOf("waves-effect")===-1)){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;l<0&&(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;fe?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.opacity=0,Vel(g,{translateY:"-35px",opacity:1},{duration:300,easing:"easeOutCubic",queue:!1});var h,i=b;null!=i&&(h=setInterval(function(){null===g.parentNode&&window.clearInterval(h),g.classList.contains("panning")||(i-=20),i<=0&&(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(h))},20))},function(a){var b={init:function(b){var c={menuWidth:300,edge:"left",closeOnClick:!1,draggable:!0};b=a.extend(c,b),a(this).each(function(){var c=a(this),d=c.attr("data-activates"),e=a("#"+d);300!=b.menuWidth&&e.css("width",b.menuWidth);var f=a('.drag-target[data-sidenav="'+d+'"]');b.draggable?(f.length&&f.remove(),f=a('
        ').attr("data-sidenav",d),a("body").append(f)):f=a(),"left"==b.edge?(e.css("transform","translateX(-100%)"),f.css({left:0})):(e.addClass("right-aligned").css("transform","translateX(100%)"),f.css({right:0})),e.hasClass("fixed")&&window.innerWidth>992&&e.css("transform","translateX(0)"),e.hasClass("fixed")&&a(window).resize(function(){window.innerWidth>992?0!==a("#sidenav-overlay").length&&i?g(!0):e.css("transform","translateX(0%)"):i===!1&&("left"===b.edge?e.css("transform","translateX(-100%)"):e.css("transform","translateX(100%)"))}),b.closeOnClick===!0&&e.on("click.itemclick","a:not(.collapsible-header)",function(){g()});var g=function(c){h=!1,i=!1,a("body").css({overflow:"",width:""}),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({translateX:"-100%"},{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({translateX:"100%"},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(e.removeAttr("style"),e.css("width",b.menuWidth))}}))},h=!1,i=!1;b.draggable&&(f.on("click",function(){i&&g()}),f.hammer({prevent_default:!1}).bind("pan",function(c){if("touch"==c.gesture.pointerType){var d=(c.gesture.direction,c.gesture.center.x),f=(c.gesture.center.y,c.gesture.velocityX,a("body")),h=a("#sidenav-overlay"),j=f.innerWidth();if(f.css("overflow","hidden"),f.width(j),0===h.length&&(h=a('
        '),h.css("opacity",0).click(function(){g()}),a("body").append(h)),"left"===b.edge&&(d>b.menuWidth?d=b.menuWidth:d<0&&(d=0)),"left"===b.edge)d=b.menuWidth/2&&(i=!0),e.css("transform","translateX("+(d-b.menuWidth)+"px)");else{d=window.innerWidth-b.menuWidth/2&&(i=!1);var k=d-b.menuWidth/2;k<0&&(k=0),e.css("transform","translateX("+k+"px)")}var l;"left"===b.edge?(l=d/b.menuWidth,h.velocity({opacity:l},{duration:10,queue:!1,easing:"easeOutQuad"})):(l=Math.abs((d-window.innerWidth)/b.menuWidth),h.velocity({opacity:l},{duration:10,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(c){if("touch"==c.gesture.pointerType){var d=a('
        '),g=c.gesture.velocityX,j=c.gesture.center.x,k=j-b.menuWidth,l=j-b.menuWidth/2;k>0&&(k=0),l<0&&(l=0),h=!1,"left"===b.edge?i&&g<=.3||g<-.5?(0!==k&&e.velocity({translateX:[0,k]},{duration:300,queue:!1,easing:"easeOutQuad"}),d.velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),f.css({width:"50%",right:0,left:""}),i=!0):(!i||g>.3)&&(a("body").css({overflow:"",width:""}),e.velocity({translateX:[-1*b.menuWidth-10,k]},{duration:200,queue:!1,easing:"easeOutQuad"}),d.velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),f.css({width:"10px",right:"",left:0})):i&&g>=-.3||g>.5?(0!==l&&e.velocity({translateX:[0,l]},{duration:300,queue:!1,easing:"easeOutQuad"}),d.velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),f.css({width:"50%",right:"",left:0}),i=!0):(!i||g<-.3)&&(a("body").css({overflow:"",width:""}),e.velocity({translateX:[b.menuWidth+10,l]},{duration:200,queue:!1,easing:"easeOutQuad"}),d.velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),f.css({width:"10px",right:0,left:""}))}})),c.off("click.sidenav").on("click.sidenav",function(){if(i===!0)i=!1,h=!1,g();else{var c=a("body"),d=a('
        '),j=c.innerWidth();c.css("overflow","hidden"),c.width(j),a("body").append(f),"left"===b.edge?(f.css({width:"50%",right:0,left:""}),e.velocity({translateX:[0,-1*b.menuWidth]},{duration:300,queue:!1,easing:"easeOutQuad"})):(f.css({width:"50%",right:"",left:0}),e.velocity({translateX:[0,b.menuWidth]},{duration:300,queue:!1,easing:"easeOutQuad"})),d.css("opacity",0).click(function(){i=!1,h=!1,g(),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(){i=!0,h=!1}})}return!1})})},destroy:function(){var b=a("#sidenav-overlay"),c=a('.drag-target[data-sidenav="'+a(this).attr("data-activates")+'"]');b.trigger("click"),c.remove(),a(this).off("click"),b.remove()},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 g=a();return a.each(f,function(a,f){if(f.height()>0){var h=f.offset().top,i=f.offset().left,j=i+f.width(),k=h+f.height(),l=!(i>c||jd||k");e.html(g),b.is(":visible")?e.css("width",b.width()):e.css("width",a(window).width()/2),b.css("height",e.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){var d=a(this);a(c).val().length>0||c.autofocus||void 0!==d.attr("placeholder")?d.siblings("label").addClass("active"):a(c)[0].validity?d.siblings("label").toggleClass("active",a(c)[0].validity.badInput===!0):d.siblings("label").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(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").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, .prefix").addClass("active")}),a(document).on("blur",c,function(){var b=a(this),c=".prefix";0===b.val().length&&b[0].validity.badInput!==!0&&void 0===b.attr("placeholder")&&(c+=", label"),b.siblings(c).removeClass("active"),validate_field(b)}),window.validate_field=function(a){var b=void 0!==a.attr("data-length"),c=parseInt(a.attr("data-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&&d<=c||a.is(":valid")&&!b?(a.removeClass("invalid"),a.addClass("valid")):(a.removeClass("valid"),a.addClass("invalid")))};var d="input[type=radio], input[type=checkbox]";a(document).on("keyup.radio",d,function(b){if(9===b.which){a(this).addClass("tabbed");var c=a(this);return void c.one("blur",function(b){a(this).removeClass("tabbed")})}});var e=a(".hiddendiv").first();e.length||(e=a('
        '),a("body").append(e));var f=".materialize-textarea";a(f).each(function(){var c=a(this);c.val().length&&b(c)}),a("body").on("keyup keydown autoresize",f,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 j=".range-field";a(document).on("change",h,function(b){var c=a(this).siblings(".thumb");c.find(".value").html(a(this).val())}),a(document).on("input mousedown touchstart",h,function(b){var c=a(this).siblings(".thumb"),d=a(this).outerWidth();c.length<=0&&(c=a(''),a(this).after(c)),c.find(".value").html(a(this).val()),i=!0,a(this).addClass("active"),c.hasClass("active")||c.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),"input"!==b.type&&(g=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left,g<0?g=0:g>d&&(g=d),c.addClass("active").css("left",g)),c.find(".value").html(a(this).val())}),a(document).on("mouseup touchend",j,function(){i=!1,a(this).removeClass("active")}),a(document).on("mousemove touchmove",j,function(b){var c,d=a(this).children(".thumb");if(i){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();c<0?c=0:c>e&&(c=e),d.addClass("active").css("left",c),d.find(".value").html(d.siblings(h).val())}}),a(document).on("mouseout touchleave",j,function(){if(!i){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.autocomplete=function(b){var c={data:{},limit:1/0,onAutocomplete:null};return b=a.extend(c,b),this.each(function(){var c,d=a(this),e=b.data,f=0,g=0,h=d.closest(".input-field");if(!a.isEmptyObject(e)){var i,j=a('');h.length?(i=h.children(".autocomplete-content.dropdown-content").first(),i.length||h.append(j)):(i=d.next(".autocomplete-content.dropdown-content"),i.length||d.after(j)),i.length&&(j=i);var k=function(a,b){var c=b.find("img"),d=b.text().toLowerCase().indexOf(""+a.toLowerCase()),e=d+a.length-1,f=b.text().slice(0,d),g=b.text().slice(d,e+1),h=b.text().slice(e+1);b.html(""+f+""+g+""+h+""),c.length&&b.prepend(c)},l=function(){g=0,j.find(".active").removeClass("active")};d.off("keyup.autocomplete").on("keyup.autocomplete",function(g){if(f=0,13!==g.which&&38!==g.which&&40!==g.which){var h=d.val().toLowerCase();if(c!==h&&(j.empty(),l(),""!==h))for(var i in e)if(e.hasOwnProperty(i)&&i.toLowerCase().indexOf(h)!==-1&&i.toLowerCase()!==h){if(f>=b.limit)break;var m=a("
      • ");e[i]?m.append(''+i+""):m.append(""+i+""),j.append(m),k(h,m),f++}c=h}}),d.off("keydown.autocomplete").on("keydown.autocomplete",function(a){var b,c=a.which,d=j.children("li").length,e=j.children(".active").first();return 13===c?(b=j.children("li").eq(g),void(b.length&&(b.click(),a.preventDefault()))):void(38!==c&&40!==c||(a.preventDefault(),38===c&&g>0&&g--,40===c&&g
        ');h.addClass(d.attr("class"));var i=a(''),j=d.children("option, optgroup"),k=[],l=!1,m=d.find("option:selected").html()||d.find("option:first").html()||"",n=function(b,c,d){var e=c.is(":disabled")?"disabled ":"",f="optgroup-option"===d?"optgroup-option ":"",g=c.data("icon"),h=c.attr("class");if(g){var j="";return h&&(j=' class="'+h+'"'),"multiple"===d?i.append(a('
      • "+c.html()+"
      • ")):i.append(a('
      • "+c.html()+"
      • ")),!0}"multiple"===d?i.append(a('
      • "+c.html()+"
      • ")):i.append(a('
      • '+c.html()+"
      • "))};j.length&&j.each(function(){if(a(this).is("option"))e?n(d,a(this),"multiple"):n(d,a(this));else if(a(this).is("optgroup")){var b=a(this).children("option");i.append(a('
      • '+a(this).attr("label")+"
      • ")),b.each(function(){n(d,a(this),"optgroup-option")})}}),i.find("li:not(.optgroup)").each(function(f){a(this).click(function(g){if(!a(this).hasClass("disabled")&&!a(this).hasClass("optgroup")){var h=!0;e?(a('input[type="checkbox"]',this).prop("checked",function(a,b){return!b}),h=c(k,a(this).index(),d),q.trigger("focus")):(i.find("li").removeClass("active"),a(this).toggleClass("active"),q.val(a(this).text())),r(i,a(this)),d.find("option").eq(f).prop("selected",h),d.trigger("change"),"undefined"!=typeof b&&b()}g.stopPropagation()})}),d.wrap(h);var o=a('');d.is(":disabled")&&o.addClass("disabled");var p=m.replace(/"/g,"""),q=a('');d.before(q),q.before(o),q.after(i),d.is(":disabled")||q.dropdown({hover:!1,closeOnClick:!1}),d.attr("tabindex")&&a(q[0]).attr("tabindex",d.attr("tabindex")),d.addClass("initialized"),q.on({focus:function(){if(a("ul.select-dropdown").not(i[0]).is(":visible")&&a("input.select-dropdown").trigger("close"),!i.is(":visible")){a(this).trigger("open",["focus"]);var b=a(this).val();e&&b.indexOf(",")>=0&&(b=b.split(",")[0]);var c=i.find("li").filter(function(){return a(this).text().toLowerCase()===b.toLowerCase()})[0];r(i,c,!0)}},click:function(a){a.stopPropagation()}}),q.on("blur",function(){e||a(this).trigger("close"),i.find("li.selected").removeClass("selected")}),i.hover(function(){l=!0},function(){l=!1}),a(window).on({click:function(){e&&(l||q.trigger("close"))}}),e&&d.find("option:selected:not(:disabled)").each(function(){var b=a(this).index();c(k,b,d),i.find("li").eq(b).find(":checkbox").prop("checked",!0)});var r=function(b,c,d){if(c){b.find("li.selected").removeClass("selected");var f=a(c);f.addClass("selected"),e&&!d||i.scrollTo(f)}},s=[],t=function(b){if(9==b.which)return void q.trigger("close");if(40==b.which&&!i.is(":visible"))return void q.trigger("open");if(13!=b.which||i.is(":visible")){b.preventDefault();var c=String.fromCharCode(b.which).toLowerCase(),d=[9,13,27,38,40];if(c&&d.indexOf(b.which)===-1){s.push(c);var f=s.join(""),g=i.find("li").filter(function(){return 0===a(this).text().toLowerCase().indexOf(f)})[0];g&&r(i,g)}if(13==b.which){var h=i.find("li.selected:not(.disabled)")[0];h&&(a(h).trigger("click"),e||q.trigger("close"))}40==b.which&&(g=i.find("li.selected").length?i.find("li.selected").next("li:not(.disabled)")[0]:i.find("li:not(.disabled)")[0],r(i,g)),27==b.which&&q.trigger("close"),38==b.which&&(g=i.find("li.selected").prev("li:not(.disabled)")[0],g&&r(i,g)),setTimeout(function(){s=[]},1e3)}};q.on("keydown",t)}})}}(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>=j.length?a=0:a<0&&(a=j.length-1),k=i.find(".active").index(),k!=a&&(e=j.eq(k),$caption=e.find(".caption"),e.removeClass("active"),e.velocity({opacity:0},{duration:b.transition,queue:!1,easing:"easeOutQuad",complete:function(){j.not(".active").velocity({opacity:0,translateX:0,translateY:0},{duration:0,queue:!1})}}),c($caption,b.transition),b.indicators&&f.eq(k).removeClass("active"),j.eq(a).velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),j.eq(a).find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,delay:b.transition,queue:!1,easing:"easeOutQuad"}),j.eq(a).addClass("active"),b.indicators&&f.eq(a).addClass("active"))}var e,f,g,h=a(this),i=h.find("ul.slides").first(),j=i.find("> li"),k=i.find(".active").index();k!=-1&&(e=j.eq(k)),h.hasClass("fullscreen")||(b.indicators?h.height(b.height+40):h.height(b.height),i.height(b.height)),j.find(".caption").each(function(){c(a(this),0)}),j.find("img").each(function(){var b="data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";a(this).attr("src")!==b&&(a(this).css("background-image","url("+a(this).attr("src")+")"),a(this).attr("src",b))}),b.indicators&&(f=a('
          '),j.each(function(c){var e=a('
        • ');e.click(function(){var c=i.parent(),e=c.find(a(this)).index();d(e),clearInterval(g),g=setInterval(function(){k=i.find(".active").index(),j.length==k+1?k=0:k+=1,d(k)},b.transition+b.interval)}),f.append(e)}),h.append(f),f=h.find("ul.indicators").find("li.indicator-item")),e?e.show():(j.first().addClass("active").velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),k=0,e=j.eq(k),b.indicators&&f.eq(k).addClass("active")),e.find("img").each(function(){e.find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,queue:!1,easing:"easeOutQuad"})}),g=setInterval(function(){k=i.find(".active").index(),d(k+1)},b.transition+b.interval);var l=!1,m=!1,n=!1;h.hammer({prevent_default:!1}).bind("pan",function(a){if("touch"===a.gesture.pointerType){clearInterval(g);var b=a.gesture.direction,c=a.gesture.deltaX,d=a.gesture.velocityX,e=a.gesture.velocityY;$curr_slide=i.find(".active"),Math.abs(d)>Math.abs(e)&&$curr_slide.velocity({translateX:c},{duration:50,queue:!1,easing:"easeOutQuad"}),4===b&&(c>h.innerWidth()/2||d<-.65)?n=!0:2===b&&(c<-1*h.innerWidth()/2||d>.65)&&(m=!0);var f;m&&(f=$curr_slide.next(),0===f.length&&(f=j.first()),f.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"})),n&&(f=$curr_slide.prev(),0===f.length&&(f=j.last()),f.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(a){"touch"===a.gesture.pointerType&&($curr_slide=i.find(".active"),l=!1,curr_index=i.find(".active").index(),!n&&!m||j.length<=1?$curr_slide.velocity({translateX:0},{duration:300,queue:!1,easing:"easeOutQuad"}):m?(d(curr_index+1),$curr_slide.velocity({translateX:-1*h.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):n&&(d(curr_index-1),$curr_slide.velocity({translateX:h.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})),m=!1,n=!1,clearInterval(g),g=setInterval(function(){k=i.find(".active").index(),j.length==k+1?k=0:k+=1,d(k)},b.transition+b.interval))}),h.on("sliderPause",function(){clearInterval(g)}),h.on("sliderStart",function(){clearInterval(g),g=setInterval(function(){k=i.find(".active").index(),j.length==k+1?k=0:k+=1,d(k)},b.transition+b.interval)}),h.on("sliderNext",function(){k=i.find(".active").index(),d(k+1)}),h.on("sliderPrev",function(){k=i.find(".active").index(),d(k-1)})})},pause:function(){a(this).trigger("sliderPause")},start:function(){a(this).trigger("sliderStart")},next:function(){a(this).trigger("sliderNext")},prev:function(){a(this).trigger("sliderPrev")}};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(b.target).closest(".card").css("overflow","hidden"),a(this).find(".card-reveal").css({display:"block"}).velocity("stop",!1).velocity({translateY:"-100%"},{duration:300,queue:!1,easing:"easeInOutQuad"})))})})}(jQuery),function(a){var b={data:[],placeholder:"",secondaryPlaceholder:"",autocompleteData:{},autocompleteLimit:1/0};a(document).ready(function(){a(document).on("click",".chip .close",function(b){var c=a(this).closest(".chips");c.attr("data-initialized")||a(this).closest(".chip").remove()})}),a.fn.material_chip=function(c){var d=this;if(this.$el=a(this),this.$document=a(document),this.SELS={CHIPS:".chips",CHIP:".chip",INPUT:"input",DELETE:".material-icons",SELECTED_CHIP:".selected"},"data"===c)return this.$el.data("chips");var e=a.extend({},b,c);d.hasAutocomplete=!a.isEmptyObject(e.autocompleteData),this.init=function(){var b=0;d.$el.each(function(){var c=a(this),f=Materialize.guid();d.chipId=f,e.data&&e.data instanceof Array||(e.data=[]),c.data("chips",e.data),c.attr("data-index",b),c.attr("data-initialized",!0),c.hasClass(d.SELS.CHIPS)||c.addClass("chips"),d.chips(c,f),b++})},this.handleEvents=function(){var b=d.SELS;d.$document.off("click.chips-focus",b.CHIPS).on("click.chips-focus",b.CHIPS,function(c){a(c.target).find(b.INPUT).focus()}),d.$document.off("click.chips-select",b.CHIP).on("click.chips-select",b.CHIP,function(c){var e=a(c.target);if(e.length){var f=e.hasClass("selected"),g=e.closest(b.CHIPS);a(b.CHIP).removeClass("selected"),f||d.selectChip(e.index(),g)}}),d.$document.off("keydown.chips").on("keydown.chips",function(c){if(!a(c.target).is("input, textarea")){var e,f=d.$document.find(b.CHIP+b.SELECTED_CHIP),g=f.closest(b.CHIPS),h=f.siblings(b.CHIP).length;if(f.length)if(8===c.which||46===c.which){c.preventDefault(),e=f.index(),d.deleteChip(e,g);var i=null;e+1h)return void g.find("input").focus();d.selectChip(e,g)}}}),d.$document.off("focusin.chips",b.CHIPS+" "+b.INPUT).on("focusin.chips",b.CHIPS+" "+b.INPUT,function(c){var d=a(c.target).closest(b.CHIPS);d.addClass("focus"),d.siblings("label, .prefix").addClass("active"),a(b.CHIP).removeClass("selected")}),d.$document.off("focusout.chips",b.CHIPS+" "+b.INPUT).on("focusout.chips",b.CHIPS+" "+b.INPUT,function(c){var d=a(c.target).closest(b.CHIPS);d.removeClass("focus"),d.data("chips").length||d.siblings("label").removeClass("active"),d.siblings(".prefix").removeClass("active")}),d.$document.off("keydown.chips-add",b.CHIPS+" "+b.INPUT).on("keydown.chips-add",b.CHIPS+" "+b.INPUT,function(c){var e=a(c.target),f=e.closest(b.CHIPS),g=f.children(b.CHIP).length;if(13===c.which){if(d.hasAutocomplete&&f.find(".autocomplete-content.dropdown-content").length&&f.find(".autocomplete-content.dropdown-content").children().length)return;return c.preventDefault(),d.addChip({tag:e.val()},f),void e.val("")}if((8===c.keyCode||37===c.keyCode)&&""===e.val()&&g)return c.preventDefault(),d.selectChip(g-1,f),void e.blur()}),d.$document.off("click.chips-delete",b.CHIPS+" "+b.DELETE).on("click.chips-delete",b.CHIPS+" "+b.DELETE,function(c){var e=a(c.target),f=e.closest(b.CHIPS),g=e.closest(b.CHIP);c.stopPropagation(),d.deleteChip(g.index(),f),f.find("input").focus()})},this.chips=function(b,c){var f="";b.data("chips").forEach(function(a){f+=d.renderChip(a)}),f+='',b.html(f),d.setPlaceholder(b);var g=b.next("label");g.length&&(g.attr("for",c),b.data("chips").length&&g.addClass("active"));var h=a("#"+c);d.hasAutocomplete&&h.autocomplete({data:e.autocompleteData,limit:e.autocompleteLimit,onAutocomplete:function(a){d.addChip({tag:a},b),h.val(""),h.focus()}})},this.renderChip=function(a){if(a.tag){var b='
          '+a.tag;return a.image&&(b+=' '),b+='close',b+="
          "}},this.setPlaceholder=function(a){a.data("chips").length&&e.placeholder?a.find("input").prop("placeholder",e.placeholder):!a.data("chips").length&&e.secondaryPlaceholder&&a.find("input").prop("placeholder",e.secondaryPlaceholder)},this.isValid=function(a,b){for(var c=a.data("chips"),d=!1,e=0;e=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;a(this).data("pushpin-id",e),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:not(.click-to-toggle):not(.toolbar)",function(c){var d=a(this);b(d)}),a(document).on("mouseleave.fixedActionBtn",".fixed-action-btn:not(.click-to-toggle):not(.toolbar)",function(b){var d=a(this);c(d)}),a(document).on("click.fabClickToggle",".fixed-action-btn.click-to-toggle > a",function(d){var e=a(this),f=e.parent();f.hasClass("active")?c(f):b(f)}),a(document).on("click.fabToolbar",".fixed-action-btn.toolbar > a",function(b){var c=a(this),e=c.parent();d(e)})}),a.fn.extend({openFAB:function(){b(a(this))},closeFAB:function(){c(a(this))},openToolbar:function(){d(a(this))},closeToolbar:function(){e(a(this))}});var b=function(b){var c=b;if(c.hasClass("active")===!1){var d,e,f=c.hasClass("horizontal");f===!0?e=40:d=40,c.addClass("active"),c.find("ul .btn-floating").velocity({scaleY:".4",scaleX:".4",translateY:d+"px",translateX:e+"px"},{duration:0});var g=0;c.find("ul .btn-floating").reverse().each(function(){a(this).velocity({opacity:"1",scaleX:"1",scaleY:"1",translateY:"0",translateX:"0"},{duration:80,delay:g}),g+=40})}},c=function(a){var b,c,d=a,e=d.hasClass("horizontal");e===!0?c=40:b=40,d.removeClass("active");d.find("ul .btn-floating").velocity("stop",!0),d.find("ul .btn-floating").velocity({opacity:"0",scaleX:".4",scaleY:".4",translateY:b+"px",translateX:c+"px"},{duration:80})},d=function(b){if("true"!==b.attr("data-open")){var c,d,f,g=window.innerWidth,h=window.innerHeight,i=b[0].getBoundingClientRect(),j=b.find("> a").first(),k=b.find("> ul").first(),l=a('
          '),m=j.css("background-color");j.append(l),c=i.left-g/2+i.width/2,d=h-i.bottom,f=g/l.width(),b.attr("data-origin-bottom",i.bottom),b.attr("data-origin-left",i.left),b.attr("data-origin-width",i.width),b.addClass("active"),b.attr("data-open",!0),b.css({"text-align":"center",width:"100%",bottom:0,left:0,transform:"translateX("+c+"px)",transition:"none"}),j.css({transform:"translateY("+-d+"px)",transition:"none"}),l.css({"background-color":m}),setTimeout(function(){b.css({transform:"",transition:"transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s"}),j.css({overflow:"visible",transform:"",transition:"transform .2s"}),setTimeout(function(){b.css({overflow:"hidden","background-color":m}),l.css({transform:"scale("+f+")",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"}),k.find("> li > a").css({opacity:1}),a(window).on("scroll.fabToolbarClose",function(){e(b),a(window).off("scroll.fabToolbarClose"),a(document).off("click.fabToolbarClose")}),a(document).on("click.fabToolbarClose",function(c){a(c.target).closest(k).length||(e(b),a(window).off("scroll.fabToolbarClose"),a(document).off("click.fabToolbarClose"))})},100)},0)}},e=function(a){if("true"===a.attr("data-open")){var b,c,d,e=window.innerWidth,f=window.innerHeight,g=a.attr("data-origin-width"),h=a.attr("data-origin-bottom"),i=a.attr("data-origin-left"),j=a.find("> .btn-floating").first(),k=a.find("> ul").first(),l=a.find(".fab-backdrop"),m=j.css("background-color");b=i-e/2+g/2,c=f-h,d=e/l.width(),a.removeClass("active"),a.attr("data-open",!1),a.css({"background-color":"transparent",transition:"none"}),j.css({transition:"none"}),l.css({transform:"scale(0)","background-color":m}),k.find("> li > a").css({opacity:""}),setTimeout(function(){l.remove(),a.css({"text-align":"",width:"",bottom:"",left:"",overflow:"","background-color":"",transform:"translate3d("+-b+"px,0,0)"}),j.css({overflow:"",transform:"translate3d(0,"+c+"px,0)"}),setTimeout(function(){a.css({transform:"translate3d(0,0,0)",transition:"transform .2s"}),j.css({transform:"translate3d(0,0,0)",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"})},20)},200)}}}(jQuery),function(a){Materialize.fadeInImage=function(b){var c;if("string"==typeof b)c=a(b);else{if("object"!=typeof b)return;c=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;e<100&&(e=100),b>=0&&a(this).css({"-webkit-filter":"grayscale("+d+")brightness("+e+"%)",filter:"grayscale("+d+")brightness("+e+"%)"})}})},Materialize.showStaggeredList=function(b){var c;if("string"==typeof b)c=a(b);else{if("object"!=typeof b)return;c=b}var d=0;c.find("li").velocity({translateX:"-100px"},{duration:0}),c.find("li").each(function(){a(this).velocity({opacity:"1",translateX:"0"},{duration:800,delay:d,easing:[60,10]}),d+=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||h<-.75)&&(b=!0),2===f&&(g<-1*e.innerWidth()/2||h>.75)&&(c=!0)}}).bind("panend",function(d){if(Math.abs(d.gesture.deltaX)i+f&&d.done!==!0){if("function"==typeof g)g.call(this,h);else if("string"==typeof g){var j=new Function(g);j(h)}d.done=!0}}}},d=Materialize.throttle(function(){c()},a.throttle||100);b||(window.addEventListener("scroll",d),window.addEventListener("resize",d),b=!0),setTimeout(d,0)}}(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.eq(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.eq(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.eq(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.eq(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").eq(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(a<10?"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=j.item.enable===-1,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&&l<0)&&(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,c.item.enable===-1?!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))},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)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(b.enable==-1?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;g=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),ip?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)||null,activedescendant:!!e||null,disabled:!!g||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("data-length"),c=+a(this).val().length,d=c<=b;a(this).parent().find('span[class="character-counter"]').html(c+"/"+b),e(d,a(this))}function c(b){var c=b.parent().find('span[class="character-counter"]');c.length||(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=a(this),f=e.parent().find('span[class="character-counter"]');if(!f.length){var g=void 0!==e.attr("data-length");g&&(e.on("input",b),e.on("focus",b),e.on("blur",d),c(e))}})},a(document).ready(function(){a("input, textarea").characterCounter()})}(jQuery),function(a){var b={init:function(b){var c={duration:200,dist:-100,shift:0,padding:0,fullWidth:!1,indicators:!1,noWrap:!1,onCycleTo:null};return b=a.extend(c,b),this.each(function(){function c(){"undefined"!=typeof window.ontouchstart&&(J[0].addEventListener("touchstart",l),J[0].addEventListener("touchmove",m),J[0].addEventListener("touchend",n)),J[0].addEventListener("mousedown",l),J[0].addEventListener("mousemove",m),J[0].addEventListener("mouseup",n),J[0].addEventListener("mouseleave",n),J[0].addEventListener("click",j)}function d(a){return a.targetTouches&&a.targetTouches.length>=1?a.targetTouches[0].clientX:a.clientX}function e(a){return a.targetTouches&&a.targetTouches.length>=1?a.targetTouches[0].clientY:a.clientY}function f(a){return a>=v?a%v:a<0?f(v+a%v):a}function g(c){var d,e,g,h,i,j,k,l=s;if(r="number"==typeof c?c:r,s=Math.floor((r+u/2)/u),g=r-s*u,h=g<0?1:-1,i=-h*g*2/u,e=v>>1,b.fullWidth?k="translateX(0)":(k="translateX("+(J[0].clientWidth-p)/2+"px) ",k+="translateY("+(J[0].clientHeight-q)/2+"px)"),K){var m=s%v,n=I.find(".indicator-item.active");n.index()!==m&&(n.removeClass("active"),I.find(".indicator-item").eq(m).addClass("active"))}for((!b.noWrap||s>=0&&s0?1-i:1):(zTranslation=b.dist*(2*d-i*h),tweenedOpacity=1-.2*(2*d-i*h)),(!b.noWrap||s-d>=0)&&(j=o[f(s-d)],j.style[C]=k+" translateX("+(-b.shift+(-u*d-g)/2)+"px) translateZ("+zTranslation+"px)",j.style.zIndex=-d,j.style.opacity=tweenedOpacity,j.style.display="block");if((!b.noWrap||s>=0&&s2||c<-2?(g(A-c),requestAnimationFrame(i)):g(A))}function j(c){if(G)return c.preventDefault(),c.stopPropagation(),!1;if(!b.fullWidth){var d=a(c.target).closest(".carousel-item").index(),e=s%v-d;0!==e&&(c.preventDefault(),c.stopPropagation()),k(d)}}function k(a){var c=s%v-a;b.noWrap||(c<0?Math.abs(c+v)0&&Math.abs(c-v)0&&J.trigger("carouselPrev",[c])}function l(a){t=!0,G=!1,H=!1,w=d(a),x=e(a),B=z=0,D=r,E=Date.now(),clearInterval(F),F=setInterval(h,100)}function m(a){var b,c,f;if(t)if(b=d(a),y=e(a),c=w-b,f=Math.abs(x-y),f<30&&!H)(c>2||c<-2)&&(G=!0,w=b,g(r+c));else{if(G)return a.preventDefault(),a.stopPropagation(),!1;H=!0}if(G)return a.preventDefault(),a.stopPropagation(),!1}function n(a){if(t)return t=!1,clearInterval(F),A=r,(B>10||B<-10)&&(z=.9*B,A=r+z),A=Math.round(A/u)*u,b.noWrap&&(A>=u*(v-1)?A=u*(v-1):A<0&&(A=0)),z=A-r,E=Date.now(),requestAnimationFrame(i),G&&(a.preventDefault(),a.stopPropagation()),!1}var o,p,q,r,s,t,u,v,w,x,z,A,B,C,D,E,F,G,H,I=a('
            '),J=a(this),K=J.attr("data-indicators")||b.indicators;if(J.hasClass("initialized"))return a(this).trigger("carouselNext",[1e-6]),!0;if(b.fullWidth){b.dist=0;var L=J.find(".carousel-item img").first();L.length?imageHeight=L.on("load",function(){J.css("height",a(this).height())}):(imageHeight=J.find(".carousel-item").first().height(),J.css("height",imageHeight)),K&&J.find(".carousel-fixed-item").addClass("with-indicators")}J.addClass("initialized"),t=!1,r=A=0,o=[],p=J.find(".carousel-item").first().innerWidth(),q=J.find(".carousel-item").first().innerHeight(),u=2*p+b.padding,J.find(".carousel-item").each(function(b){if(o.push(a(this)[0]),K){var c=a('
          • ');0===b&&c.addClass("active"),c.click(function(b){b.stopPropagation();var c=a(this).index();k(c)}),I.append(c)}}),K&&J.append(I),v=o.length,C="transform",["webkit","Moz","O","ms"].every(function(a){var b=a+"Transform";return"undefined"==typeof document.body.style[b]||(C=b,!1)}),a(window).on("resize.carousel",function(){b.fullWidth?(p=J.find(".carousel-item").first().innerWidth(),q=J.find(".carousel-item").first().innerHeight(),u=2*p+b.padding,r=2*s*p,A=r):g()}),c(),g(r),a(this).on("carouselNext",function(a,b){void 0===b&&(b=1),A=u*Math.round(r/u)+u*b,r!==A&&(z=A-r,E=Date.now(),requestAnimationFrame(i))}),a(this).on("carouselPrev",function(a,b){void 0===b&&(b=1),A=u*Math.round(r/u)-u*b,r!==A&&(z=A-r,E=Date.now(),requestAnimationFrame(i))}),a(this).on("carouselSet",function(a,b){void 0===b&&(b=0),k(b)})})},next:function(b){a(this).trigger("carouselNext",[b])},prev:function(b){a(this).trigger("carouselPrev",[b])},set:function(b){a(this).trigger("carouselSet",[b])}};a.fn.carousel=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.carousel"):b.init.apply(this,arguments)}}(jQuery); \ No newline at end of file diff --git a/node_modules/materialize-css/dropdown.html b/node_modules/materialize-css/dropdown.html new file mode 100644 index 0000000..ccd8417 --- /dev/null +++ b/node_modules/materialize-css/dropdown.html @@ -0,0 +1,319 @@ + + + + + + + + + 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
            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.

            +
            
            +  <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,
            +      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
            +      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');
            +        
            +
            + + +
            + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            + +
            +
            +
            +
            +
            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/node_modules/materialize-css/extras/noUiSlider/nouislider.css b/node_modules/materialize-css/extras/noUiSlider/nouislider.css new file mode 100644 index 0000000..c8f3177 --- /dev/null +++ b/node_modules/materialize-css/extras/noUiSlider/nouislider.css @@ -0,0 +1,399 @@ +/*! + * Materialize v0.98.0 (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. + * You don't need to change these rules to apply your design. + */ +.noUi-target, +.noUi-target * { + -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; +} +.noUi-base { + 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; + height: 0; + width: 0; +} +.noUi-handle { + position: relative; + z-index: 1; +} +.noUi-state-tap .noUi-connect, +.noUi-state-tap .noUi-origin { + -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; +} + +/* Painting and performance; + * Browsers can paint handles in their own layer. + */ +.noUi-base, +.noUi-handle { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); +} + +/* Slider size and handle placement; + */ +.noUi-horizontal { + height: 18px; +} +.noUi-horizontal .noUi-handle { + width: 34px; + height: 28px; + left: -17px; + top: -6px; +} +.noUi-vertical { + width: 18px; +} +.noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + left: -6px; + top: -17px; +} + +/* Styling; + */ +.noUi-target { + background: #cdcdcd; + border-radius: 4px; + border: 1px solid transparent; +} +.noUi-connect { + background: #26A69A; + -webkit-transition: background 450ms; + transition: background 450ms; +} + +/* Handles and cursors; + */ +.noUi-draggable { + cursor: ew-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; +} +.noUi-active { + box-shadow: inset 0 0 1px #FFF, + inset 0 1px 7px #DDD, + 0 3px 6px -3px #BBB; +} + +/* Handle stripes + */ +.noUi-handle:before, +.noUi-handle:after { + content: ""; + display: block; + position: absolute; + height: 14px; + width: 1px; + background: #E8E7E6; + left: 14px; + top: 6px; +} +.noUi-handle:after { + left: 17px; +} +.noUi-vertical .noUi-handle:before, +.noUi-vertical .noUi-handle:after { + width: 14px; + height: 1px; + left: 6px; + top: 14px; +} +.noUi-vertical .noUi-handle:after { + top: 17px; +} + +/* Disabled state; + */ + +[disabled] .noUi-connect { + background: #B8B8B8; +} +[disabled].noUi-target, +[disabled].noUi-handle, +[disabled] .noUi-handle { + cursor: not-allowed; +} + + +/* Base; + * + */ +.noUi-pips, +.noUi-pips * { + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-pips { + position: absolute; + color: #999; +} + +/* Values; + * + */ +.noUi-value { + position: absolute; + text-align: center; +} +.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; +} + +/* 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-vertical { + height: 100%; + width: 3px; +} + +.noUi-horizontal .noUi-handle, +.noUi-vertical .noUi-handle { + width: 15px; + height: 15px; + border-radius: 50%; + box-shadow: none; + background-color: #26A69A; + border: none; + 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); +} +.noUi-handle:before { + content: none; +} +.noUi-handle:after { + content: none; +} + +.noUi-target .noUi-active.noUi-handle { + width: 3px; + height: 3px; + left: 0; + top: 0; +} + +.noUi-target.noUi-horizontal .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-horizontal .noUi-active .noUi-tooltip { + border-radius: 15px 15px 15px 0; + transform: rotate(-45deg) translate(23px, -25px); +} + +.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-horizontal .noUi-active .noUi-tooltip span, +.noUi-vertical .noUi-active .noUi-tooltip span { + opacity: 1; +} diff --git a/node_modules/materialize-css/extras/noUiSlider/nouislider.js b/node_modules/materialize-css/extras/noUiSlider/nouislider.js new file mode 100644 index 0000000..b03f2bd --- /dev/null +++ b/node_modules/materialize-css/extras/noUiSlider/nouislider.js @@ -0,0 +1,2145 @@ +/*! + * Materialize v0.98.0 (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"=== +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 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)); + } + + // (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] ); + } + + // (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 ) { + + var j = 1; + + while ( value >= arr[j] ){ + j += 1; + } + + return j; + } + + // (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; + } + + var j = getJ( value, xVal ), va, vb, pa, pb; + + va = xVal[j-1]; + vb = xVal[j]; + pa = xPct[j-1]; + pb = xPct[j]; + + 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 ) { + + // 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; + + va = xVal[j-1]; + vb = xVal[j]; + pa = xPct[j-1]; + pb = xPct[j]; + + 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 ) { + + if ( value === 100 ) { + return value; + } + + var j = getJ( value, xPct ), a, b; + + // If 'snap' is set, steps are used as fixed points on the slider. + if ( snap ) { + + a = xPct[j-1]; + b = xPct[j]; + + // Find the closest position, a or b. + if ((value - a) > ((b-a)/2)){ + return b; + } + + return a; + } + + if ( !xSteps[j-1] ){ + return value; + } + + 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] ); + } + + 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. + + function Spectrum ( entry, snap, direction, singleStep ) { + + this.xPct = []; + this.xVal = []; + this.xSteps = [ singleStep || false ]; + this.xNumSteps = [ false ]; + this.xHighestCompleteStep = []; + + this.snap = snap; + this.direction = direction; + + 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]); + } + } + + // 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 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.getMargin = function ( value ) { + + var step = this.xNumSteps[0]; + + if ( step && ((value / step) % 1) !== 0 ) { + throw new Error("noUiSlider: 'limit', 'margin' and 'padding' must be divisible by step."); + } + + return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false; + }; + + Spectrum.prototype.toStepping = function ( value ) { + + value = toStepping( this.xVal, this.xPct, value ); + + return value; + }; + + Spectrum.prototype.fromStepping = function ( value ) { + + return fromStepping( this.xVal, this.xPct, value ); + }; + + Spectrum.prototype.getStep = function ( value ) { + + value = getStep(this.xPct, this.xSteps, this.snap, value ); + + return value; + }; + + Spectrum.prototype.getNearbySteps = function ( value ) { + + var j = getJ(value, this.xPct); + + 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; + } + + function testRange ( parsed, entry ) { + + // 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 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); + } + + function testStart ( parsed, 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 ) { + 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 testAnimationDuration ( parsed, entry ) { + + parsed.animationDuration = entry; + + if ( typeof entry !== 'number' ){ + throw new Error("noUiSlider: 'animationDuration' option must be a number."); + } + } + + function testConnect ( parsed, entry ) { + + var connect = [false]; + var i; + + // Map legacy options + if ( entry === 'lower' ) { + entry = [true, false]; + } + + else if ( entry === 'upper' ) { + entry = [false, true]; + } + + // Handle boolean options + if ( entry === true || entry === false ) { + + for ( i = 1; i < parsed.handles; i++ ) { + connect.push(entry); + } + + connect.push(false); + } + + // 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; + } + + parsed.connect = connect; + } + + 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."); + } + + // Issue #582 + if ( entry === 0 ) { + return; + } + + 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 || parsed.handles < 2 ) { + throw new Error("noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles."); + } + } + + function testPadding ( parsed, entry ) { + + if ( !isNumeric(entry) ){ + throw new Error("noUiSlider: 'padding' option must be numeric."); + } + + if ( entry === 0 ) { + return; + } + + parsed.padding = parsed.spectrum.getMargin(entry); + + if ( !parsed.padding ) { + throw new Error("noUiSlider: 'padding' option is only supported on linear sliders."); + } + + if ( parsed.padding < 0 ) { + throw new Error("noUiSlider: 'padding' option must be a positive number."); + } + + if ( parsed.padding >= 50 ) { + throw new Error("noUiSlider: 'padding' option must be less than half the range."); + } + } + + 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."); + } + } + + 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 + }; + } + + function testTooltips ( parsed, entry ) { + + if ( entry === false ) { + return; + } + + else if ( entry === true ) { + + parsed.tooltips = []; + + for ( var i = 0; i < parsed.handles; i++ ) { + parsed.tooltips.push(true); + } + } + + else { + + parsed.tooltips = asArray(entry); + + if ( parsed.tooltips.length !== parsed.handles ) { + throw new Error("noUiSlider: must pass a formatter for all handles."); + } + + 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'."); + } + }); + } + } + + 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."); + } + + function testCssPrefix ( parsed, entry ) { + + if ( entry !== undefined && typeof entry !== 'string' && entry !== false ) { + throw new Error("noUiSlider: 'cssPrefix' must be a string or `false`."); + } + + parsed.cssPrefix = entry; + } + + function testCssClasses ( parsed, entry ) { + + if ( entry !== undefined && typeof entry !== 'object' ) { + throw new Error("noUiSlider: 'cssClasses' must be an object."); + } + + if ( typeof parsed.cssPrefix === 'string' ) { + parsed.cssClasses = {}; + + for ( var key in entry ) { + if ( !entry.hasOwnProperty(key) ) { continue; } + + parsed.cssClasses[key] = parsed.cssPrefix + entry[key]; + } + } else { + parsed.cssClasses = entry; + } + } + + 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."); + } + } + + // Test all developer settings and parse to assumption-safe values. + function testOptions ( options ) { + + // To prove a fix for #537, freeze options here. + // If the object is modified, an error will be thrown. + // Object.freeze(options); + + 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', + 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 + }; + + // 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 ){ + + // If the option isn't set, but it is required, throw an error. + if ( options[name] === undefined && defaults[name] === undefined ) { + + if ( tests[name].r ) { + throw new Error("noUiSlider: '" + name + "' is required."); + } + + return true; + } + + 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; + } + + + function closure ( target, options, originalOptions ){ + + 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; + + + // Append a origin to the base + function addOrigin ( base, handleNumber ) { + + var origin = addNodeTo(base, options.cssClasses.origin); + var handle = addNodeTo(origin, options.cssClasses.handle); + + handle.setAttribute('data-handle', handleNumber); + + if ( handleNumber === 0 ) { + addClass(handle, options.cssClasses.handleLower); + } + + else if ( handleNumber === options.handles - 1 ) { + addClass(handle, options.cssClasses.handleUpper); + } + + return origin; + } + + // Insert nodes for connect elements + function addConnect ( base, add ) { + + if ( !add ) { + return false; + } + + return addNodeTo(base, options.cssClasses.connect); + } + + // Add handles to the slider base. + function addElements ( connectOptions, base ) { + + scope_Handles = []; + scope_Connects = []; + + scope_Connects.push(addConnect(base, connectOptions[0])); + + // [::::O====O====O====] + // connectOptions = [0, 1, 1, 1] + + 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])); + } + } + + // Initialize a single slider. + function addSlider ( target ) { + + // Apply classes and data to the target. + addClass(target, options.cssClasses.target); + + if ( options.dir === 0 ) { + addClass(target, options.cssClasses.ltr); + } else { + addClass(target, options.cssClasses.rtl); + } + + if ( options.ort === 0 ) { + addClass(target, options.cssClasses.horizontal); + } else { + addClass(target, options.cssClasses.vertical); + } + + scope_Base = addNodeTo(target, options.cssClasses.base); + } + + + function addTooltip ( handle, handleNumber ) { + + if ( !options.tooltips[handleNumber] ) { + return false; + } + + return addNodeTo(handle.firstChild, options.cssClasses.tooltip); + } + + // The tooltips option is a shorthand for using the 'update' event. + function tooltips ( ) { + + // Tooltips are added with options.tooltips in original order. + var tips = scope_Handles.map(addTooltip); + + bindEvent('update', function(values, handleNumber, unencoded) { + + if ( !tips[handleNumber] ) { + return; + } + + var formattedValue = values[handleNumber]; + + if ( options.tooltips[handleNumber] !== true ) { + formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]); + } + + tips[handleNumber].innerHTML = '' + formattedValue + ''; + }); + } + + + function getGroup ( mode, values, stepped ) { + + // Use the range. + if ( mode === 'range' || mode === 'steps' ) { + return scope_Spectrum.xVal; + } + + 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 ) { + + 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 + }; + +})); \ No newline at end of file diff --git a/node_modules/materialize-css/extras/noUiSlider/nouislider.min.js b/node_modules/materialize-css/extras/noUiSlider/nouislider.min.js new file mode 100644 index 0000000..b48574c --- /dev/null +++ b/node_modules/materialize-css/extras/noUiSlider/nouislider.min.js @@ -0,0 +1 @@ +!function(){function a(a){return a.split("").reverse().join("")}function b(a,b,c){if((a[b]||a[c])&&a[b]===a[c])throw Error(b)}function c(b,c,d,e,f,g,h,i,j,k,l,m){h=m;var n,o=l="";return g&&(m=g(m)),!("number"!=typeof m||!isFinite(m))&&(b&&0===parseFloat(m.toFixed(b))&&(m=0),0>m&&(n=!0,m=Math.abs(m)),b&&(g=Math.pow(10,b),m=(Math.round(m*g)/g).toFixed(b)),m=m.toString(),-1!==m.indexOf(".")&&(b=m.split("."),m=b[0],d&&(l=d+b[1])),c&&(m=a(m).match(/.{1,3}/g),m=a(m.join(a(c)))),n&&i&&(o+=i),e&&(o+=e),n&&j&&(o+=j),o=o+m+l,f&&(o+=f),k&&(o=k(o,h)),o)}function d(a,b,c,d,e,f,g,h,i,j,k,l){var m;return a="",k&&(l=k(l)),!(!l||"string"!=typeof l)&&(h&&l.substring(0,h.length)===h&&(l=l.replace(h,""),m=!0),d&&l.substring(0,d.length)===d&&(l=l.replace(d,"")),i&&l.substring(0,i.length)===i&&(l=l.replace(i,""),m=!0),e&&l.slice(-1*e.length)===e&&(l=l.slice(0,-1*e.length)),b&&(l=l.split(b).join("")),c&&(l=l.replace(c,".")),m&&(a+="-"),a=Number((a+l).replace(/[^0-9\.\-.]/g,"")),g&&(a=g(a)),!("number"!=typeof a||!isFinite(a))&&a)}function e(a){var c,d,e,f={};for(c=0;ce&&(f[d]=e):"encoder"===d||"decoder"===d||"edit"===d||"undo"===d?"function"==typeof e&&(f[d]=e):"string"==typeof e&&(f[d]=e);return b(f,"mark","thousand"),b(f,"prefix","negative"),b(f,"prefix","negativeBefore"),f}function f(a,b,c){var d,e=[];for(d=0;d0&&(j(a,b),setTimeout(function(){k(a,b)},c))}function g(a){return Math.max(Math.min(a,100),0)}function h(a){return Array.isArray(a)?a:[a]}function i(a){a=String(a);var b=a.split(".");return b.length>1?b[1].length:0}function j(a,b){a.classList?a.classList.add(b):a.className+=" "+b}function k(a,b){a.classList?a.classList.remove(b):a.className=a.className.replace(new RegExp("(^|\\b)"+b.split(" ").join("|")+"(\\b|$)","gi")," ")}function l(a,b){return a.classList?a.classList.contains(b):new RegExp("\\b"+b+"\\b").test(a.className)}function m(){var a=void 0!==window.pageXOffset,b="CSS1Compat"===(document.compatMode||""),c=a?window.pageXOffset:b?document.documentElement.scrollLeft:document.body.scrollLeft,d=a?window.pageYOffset:b?document.documentElement.scrollTop:document.body.scrollTop;return{x:c,y:d}}function n(){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 o(a,b){return 100/(b-a)}function p(a,b){return 100*b/(a[1]-a[0])}function q(a,b){return p(a,a[0]<0?b+Math.abs(a[0]):b-a[0])}function r(a,b){return b*(a[1]-a[0])/100+a[0]}function s(a,b){for(var c=1;a>=b[c];)c+=1;return c}function t(a,b,c){if(c>=a.slice(-1)[0])return 100;var d,e,f,g,h=s(c,a);return d=a[h-1],e=a[h],f=b[h-1],g=b[h],f+q([d,e],c)/o(f,g)}function u(a,b,c){if(c>=100)return a.slice(-1)[0];var d,e,f,g,h=s(c,b);return d=a[h-1],e=a[h],f=b[h-1],g=b[h],r([d,e],(c-f)*o(f,g))}function v(a,b,d,e){if(100===e)return e;var f,g,h=s(e,a);return d?(f=a[h-1],g=a[h],e-f>(g-f)/2?g:f):b[h-1]?a[h-1]+c(e-a[h-1],b[h-1]):e}function w(a,b,c){var d;if("number"==typeof b&&(b=[b]),"[object Array]"!==Object.prototype.toString.call(b))throw new Error("noUiSlider: 'range' contains invalid value.");if(d="min"===a?0:"max"===a?100:parseFloat(a),!e(d)||!e(b[0]))throw new Error("noUiSlider: 'range' value isn't numeric.");c.xPct.push(d),c.xVal.push(b[0]),d?c.xSteps.push(!isNaN(b[1])&&b[1]):isNaN(b[1])||(c.xSteps[0]=b[1]),c.xHighestCompleteStep.push(0)}function x(a,b,c){if(!b)return!0;c.xSteps[a]=p([c.xVal[a],c.xVal[a+1]],b)/o(c.xPct[a],c.xPct[a+1]);var d=(c.xVal[a+1]-c.xVal[a])/c.xNumSteps[a],e=Math.ceil(Number(d.toFixed(3))-1),f=c.xVal[a]+c.xNumSteps[a]*e;c.xHighestCompleteStep[a]=f}function y(a,b,c,d){this.xPct=[],this.xVal=[],this.xSteps=[d||!1],this.xNumSteps=[!1],this.xHighestCompleteStep=[],this.snap=b,this.direction=c;var e,f=[];for(e in a)a.hasOwnProperty(e)&&f.push([a[e],e]);for(f.length&&"object"==typeof f[0][0]?f.sort(function(a,b){return a[0][0]-b[0][0]}):f.sort(function(a,b){return a[0]-b[0]}),e=0;e=50)throw new Error("noUiSlider: 'padding' option must be less than half the range.")}}function K(a,b){switch(b){case"ltr":a.dir=0;break;case"rtl":a.dir=1;break;default:throw new Error("noUiSlider: 'direction' option was not recognized.")}}function L(a,b){if("string"!=typeof b)throw new Error("noUiSlider: 'behaviour' must be a string containing options.");var c=b.indexOf("tap")>=0,d=b.indexOf("drag")>=0,e=b.indexOf("fixed")>=0,f=b.indexOf("snap")>=0,g=b.indexOf("hover")>=0;if(e){if(2!==a.handles)throw new Error("noUiSlider: 'fixed' behaviour must be used with 2 handles");H(a,a.start[1]-a.start[0])}a.events={tap:c||f,drag:d,fixed:e,snap:f,hover:g}}function M(a,b){if(b!==!1)if(b===!0){a.tooltips=[];for(var c=0;c"+f+"
            "}})}function u(a,b,c){if("range"===a||"steps"===a)return ja.xVal;if("count"===a){var d,e=100/(b-1),f=0;for(b=[];(d=f++*e)<=100;)b.push(d);a="positions"}return"positions"===a?b.map(function(a){return ja.fromStepping(c?ja.getStep(a):a)}):"values"===a?c?b.map(function(a){return ja.fromStepping(ja.getStep(ja.toStepping(a)))}):b:void 0}function v(a,c,d){function e(a,b){return(a+b).toFixed(7)/1}var f={},g=ja.xVal[0],h=ja.xVal[ja.xVal.length-1],i=!1,j=!1,k=0;return d=b(d.slice().sort(function(a,b){return a-b})),d[0]!==g&&(d.unshift(g),i=!0),d[d.length-1]!==h&&(d.push(h),j=!0),d.forEach(function(b,g){var h,l,m,n,o,p,q,r,s,t,u=b,v=d[g+1];if("steps"===c&&(h=ja.xNumSteps[g]),h||(h=v-u),u!==!1&&void 0!==v)for(h=Math.max(h,1e-7),l=u;l<=v;l=e(l,h)){for(n=ja.toStepping(l),o=n-k,r=o/a,s=Math.round(r),t=o/s,m=1;m<=s;m+=1)p=k+m*t,f[p.toFixed(5)]=["x",0];q=d.indexOf(l)>-1?1:"steps"===c?2:0,!g&&i&&(q=0),l===v&&j||(f[n.toFixed(5)]=[l,q]),k=n}}),f}function w(a,b,c){function d(a,b){var c=b===e.cssClasses.value,d=c?m:n,f=c?k:l;return b+" "+d[e.ort]+" "+f[a]}function f(a,b,c){return'class="'+d(c[1],b)+'" style="'+e.style+": "+a+'%"'}function g(a,d){d[1]=d[1]&&b?b(d[0],d[1]):d[1],i+="
            ",d[1]&&(i+="
            "+c.to(d[0])+"
            ")}var h=document.createElement("div"),i="",k=[e.cssClasses.valueNormal,e.cssClasses.valueLarge,e.cssClasses.valueSub],l=[e.cssClasses.markerNormal,e.cssClasses.markerLarge,e.cssClasses.markerSub],m=[e.cssClasses.valueHorizontal,e.cssClasses.valueVertical],n=[e.cssClasses.markerHorizontal,e.cssClasses.markerVertical];return j(h,e.cssClasses.pips),j(h,0===e.ort?e.cssClasses.pipsHorizontal:e.cssClasses.pipsVertical),Object.keys(a).forEach(function(b){g(b,a[b])}),h.innerHTML=i,h}function x(a){var b=a.mode,c=a.density||1,d=a.filter||!1,e=a.values||!1,f=a.stepped||!1,g=u(b,e,f),h=v(c,b,g),i=a.format||{to:Math.round};return fa.appendChild(w(h,d,i))}function y(){var a=aa.getBoundingClientRect(),b="offset"+["Width","Height"][e.ort];return 0===e.ort?a.width||aa[b]:a.height||aa[b]}function z(a,b,c,d){var f=function(b){return!fa.hasAttribute("disabled")&&(!l(fa,e.cssClasses.tap)&&(!!(b=A(b,d.pageOffset))&&(!(a===ea.start&&void 0!==b.buttons&&b.buttons>1)&&((!d.hover||!b.buttons)&&(b.calcPoint=b.points[e.ort],void c(b,d))))))},g=[];return a.split(" ").forEach(function(a){b.addEventListener(a,f,!1),g.push([a,f])}),g}function A(a,b){a.preventDefault();var c,d,e=0===a.type.indexOf("touch"),f=0===a.type.indexOf("mouse"),g=0===a.type.indexOf("pointer");if(0===a.type.indexOf("MSPointer")&&(g=!0),e){if(a.touches.length>1)return!1;c=a.changedTouches[0].pageX,d=a.changedTouches[0].pageY}return b=b||m(),(f||g)&&(c=a.clientX+b.x,d=a.clientY+b.y),a.pageOffset=b,a.points=[c,d],a.cursor=f||g,a}function B(a){var b=a-d(aa,e.ort),c=100*b/y();return e.dir?100-c:c}function C(a){var b=100,c=!1;return ba.forEach(function(d,e){if(!d.hasAttribute("disabled")){var f=Math.abs(ga[e]-a);f1?d.forEach(function(a,c){var d=M(e,a,e[a]+b,f[c],g[c]);d===!1?b=0:(b=d-e[a],e[a]=d)}):f=g=[!0];var h=!1;d.forEach(function(a,d){h=Q(a,c[a]+b,f[d],g[d])||h}),h&&d.forEach(function(a){E("update",a),E("slide",a)})}function E(a,b,c){Object.keys(la).forEach(function(d){var f=d.split(".")[0];a===f&&la[d].forEach(function(a){a.call(da,ka.map(e.format.to),b,ka.slice(),c||!1,ga.slice())})})}function F(a,b){"mouseout"===a.type&&"HTML"===a.target.nodeName&&null===a.relatedTarget&&H(a,b)}function G(a,b){if(navigator.appVersion.indexOf("MSIE 9")===-1&&0===a.buttons&&0!==b.buttonsProperty)return H(a,b);var c=(e.dir?-1:1)*(a.calcPoint-b.startCalcPoint),d=100*c/b.baseSize;D(c>0,d,b.locations,b.handleNumbers)}function H(a,b){ia&&(k(ia,e.cssClasses.active),ia=!1),a.cursor&&(document.body.style.cursor="",document.body.removeEventListener("selectstart",document.body.noUiListener)),document.documentElement.noUiListeners.forEach(function(a){document.documentElement.removeEventListener(a[0],a[1])}),k(fa,e.cssClasses.drag),P(),b.handleNumbers.forEach(function(a){E("set",a),E("change",a),E("end",a)})}function I(a,b){if(1===b.handleNumbers.length){var c=ba[b.handleNumbers[0]];if(c.hasAttribute("disabled"))return!1;ia=c.children[0],j(ia,e.cssClasses.active)}a.preventDefault(),a.stopPropagation();var d=z(ea.move,document.documentElement,G,{startCalcPoint:a.calcPoint,baseSize:y(),pageOffset:a.pageOffset,handleNumbers:b.handleNumbers,buttonsProperty:a.buttons,locations:ga.slice()}),f=z(ea.end,document.documentElement,H,{handleNumbers:b.handleNumbers}),g=z("mouseout",document.documentElement,F,{handleNumbers:b.handleNumbers});if(document.documentElement.noUiListeners=d.concat(f,g),a.cursor){document.body.style.cursor=getComputedStyle(a.target).cursor,ba.length>1&&j(fa,e.cssClasses.drag);var h=function(){return!1};document.body.noUiListener=h,document.body.addEventListener("selectstart",h,!1)}b.handleNumbers.forEach(function(a){E("start",a)})}function J(a){a.stopPropagation();var b=B(a.calcPoint),c=C(b);return c!==!1&&(e.events.snap||f(fa,e.cssClasses.tap,e.animationDuration),Q(c,b,!0,!0),P(),E("slide",c,!0),E("set",c,!0),E("change",c,!0),E("update",c,!0),void(e.events.snap&&I(a,{handleNumbers:[c]})))}function K(a){var b=B(a.calcPoint),c=ja.getStep(b),d=ja.fromStepping(c);Object.keys(la).forEach(function(a){"hover"===a.split(".")[0]&&la[a].forEach(function(a){a.call(da,d)})})}function L(a){a.fixed||ba.forEach(function(a,b){z(ea.start,a.children[0],I,{handleNumbers:[b]})}),a.tap&&z(ea.start,aa,J,{}),a.hover&&z(ea.move,aa,K,{hover:!0}),a.drag&&ca.forEach(function(b,c){if(b!==!1&&0!==c&&c!==ca.length-1){var d=ba[c-1],f=ba[c],g=[b];j(b,e.cssClasses.draggable),a.fixed&&(g.push(d.children[0]),g.push(f.children[0])),g.forEach(function(a){z(ea.start,a,I,{handles:[d,f],handleNumbers:[c-1,c]})})}})}function M(a,b,c,d,f){return ba.length>1&&(d&&b>0&&(c=Math.max(c,a[b-1]+e.margin)),f&&b1&&e.limit&&(d&&b>0&&(c=Math.min(c,a[b-1]+e.limit)),f&&b50?-1:1,c=3+(ba.length+b*a);ba[a].childNodes[0].style.zIndex=c})}function Q(a,b,c,d){return b=M(ga,a,b,c,d),b!==!1&&(O(a,b),!0)}function S(a){if(ca[a]){var b=0,c=100;0!==a&&(b=ga[a-1]),a!==ca.length-1&&(c=ga[a]),ca[a].style[e.style]=N(b),ca[a].style[e.styleOposite]=N(100-c)}}function T(a,b){null!==a&&a!==!1&&("number"==typeof a&&(a=String(a)),a=e.format.from(a),a===!1||isNaN(a)||Q(b,ja.toStepping(a),!1,!1))}function U(a,b){var c=h(a),d=void 0===ga[0];b=void 0===b||!!b,c.forEach(T),e.animate&&!d&&f(fa,e.cssClasses.tap,e.animationDuration),ha.forEach(function(a){Q(a,ga[a],!0,!1)}),P(),ha.forEach(function(a){E("update",a),null!==c[a]&&b&&E("set",a)})}function V(a){U(e.start,a)}function W(){var a=ka.map(e.format.to);return 1===a.length?a[0]:a}function X(){for(var a in e.cssClasses)e.cssClasses.hasOwnProperty(a)&&k(fa,e.cssClasses[a]);for(;fa.firstChild;)fa.removeChild(fa.firstChild);delete fa.noUiSlider}function Y(){return ga.map(function(a,b){var c=ja.getNearbySteps(a),d=ka[b],e=c.thisStep.step,f=null;e!==!1&&d+e>c.stepAfter.startValue&&(e=c.stepAfter.startValue-d),f=d>c.thisStep.startValue?c.thisStep.step:c.stepBefore.step!==!1&&d-c.stepBefore.highestStep,100===a?e=null:0===a&&(f=null);var g=ja.countStepDecimals();return null!==e&&e!==!1&&(e=Number(e.toFixed(g))),null!==f&&f!==!1&&(f=Number(f.toFixed(g))),[f,e]})}function Z(a,b){la[a]=la[a]||[],la[a].push(b),"update"===a.split(".")[0]&&ba.forEach(function(a,b){E("update",b)})}function $(a){var b=a&&a.split(".")[0],c=b&&a.substring(b.length);Object.keys(la).forEach(function(a){var d=a.split(".")[0],e=a.substring(d.length);b&&b!==d||c&&c!==e||delete la[a]})}function _(a,b){var c=W(),d=["margin","limit","padding","range","animate","snap","step","format"];d.forEach(function(b){void 0!==a[b]&&(i[b]=a[b])});var f=R(i);d.forEach(function(b){void 0!==a[b]&&(e[b]=f[b])}),f.spectrum.direction=ja.direction,ja=f.spectrum,e.margin=f.margin,e.limit=f.limit,e.padding=f.padding,ga=[],U(a.start||c,b)}var aa,ba,ca,da,ea=n(),fa=c,ga=[],ha=[],ia=!1,ja=e.spectrum,ka=[],la={};if(fa.noUiSlider)throw new Error("Slider was already initialized.");return r(fa),q(e.connect,aa),da={destroy:X,steps:Y,on:Z,off:$,get:W,set:U,reset:V,__moveHandles:function(a,b,c){D(a,b,ga,c)},options:i,updateOptions:_,target:fa,pips:x},L(e.events),U(e.start),e.pips&&x(e.pips),e.tooltips&&t(),da}function T(a,b){if(!a.nodeName)throw new Error("noUiSlider.create requires a single element.");void 0===b.tooltips&&(b.tooltips=!0);var c=R(b,a),d=S(a,c,b);return a.noUiSlider=d,d}y.prototype.getMargin=function(a){var b=this.xNumSteps[0];if(b&&a/b%1!==0)throw new Error("noUiSlider: 'limit', 'margin' and 'padding' must be divisible by step.");return 2===this.xPct.length&&p(this.xVal,a)},y.prototype.toStepping=function(a){return a=t(this.xVal,this.xPct,a)},y.prototype.fromStepping=function(a){return u(this.xVal,this.xPct,a)},y.prototype.getStep=function(a){return a=v(this.xPct,this.xSteps,this.snap,a)},y.prototype.getNearbySteps=function(a){var b=s(a,this.xPct);return{stepBefore:{startValue:this.xVal[b-2],step:this.xNumSteps[b-2],highestStep:this.xHighestCompleteStep[b-2]},thisStep:{startValue:this.xVal[b-1],step:this.xNumSteps[b-1],highestStep:this.xHighestCompleteStep[b-1]},stepAfter:{startValue:this.xVal[b-0],step:this.xNumSteps[b-0],highestStep:this.xHighestCompleteStep[b-0]}}},y.prototype.countStepDecimals=function(){var a=this.xNumSteps.map(i);return Math.max.apply(null,a)},y.prototype.convert=function(a){return this.getStep(this.toStepping(a))};var U={to:function(a){return void 0!==a&&a.toFixed(2)},from:Number};return{create:T}}); \ No newline at end of file diff --git a/node_modules/materialize-css/fab-toolbar-demo.html b/node_modules/materialize-css/fab-toolbar-demo.html new file mode 100644 index 0000000..a61f205 --- /dev/null +++ b/node_modules/materialize-css/fab-toolbar-demo.html @@ -0,0 +1,43 @@ + + + + + + + + + Floating Action Button - Materialize + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/footer.html b/node_modules/materialize-css/footer.html new file mode 100644 index 0000000..1a53d85 --- /dev/null +++ b/node_modules/materialize-css/footer.html @@ -0,0 +1,289 @@ + + + + + + + + + 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/node_modules/materialize-css/forms.html b/node_modules/materialize-css/forms.html new file mode 100644 index 0000000..e46700c --- /dev/null +++ b/node_modules/materialize-css/forms.html @@ -0,0 +1,1098 @@ + + + + + + + + + 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.

            +

            The validate class leverages HTML5 validation and will add a valid and invalid class accordingly. If you don't want the Green and Red validation states, just remove the validate class from your inputs.

            +
            +
            +
            +
            +
            + + +
            +
            + + +
            +
            +
            +
            + + +
            +
            +
            +
            + + +
            +
            +
            +
            + + +
            +
            +
            +
            + This is an inline input field: +
            + + +
            +
            +
            +
            +
            +
            
            +  <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>
            +      <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.
            You can also call the function Materialize.updateTextFields(); to reinitialize all the Materialize labels on the page if you are dynamically adding inputs.

            +
            +
            + + +
            +
            + +
            
            +  <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>
            +        
            + +
            
            +  $(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.


            +
            +
            +
            +
            + 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. 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.

            +
            +
            + + +
            +
            +
            +
            +
            
            +  <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>
            +
            +  <div class="input-field col s12">
            +    <select multiple>
            +      <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 Multiple Select</label>
            +  </div>
            +
            +  <div class="input-field col s12">
            +    <select multiple>
            +      <optgroup label="team 1">
            +        <option value="1">Option 1</option>
            +        <option value="2">Option 2</option>
            +      </optgroup>
            +      <optgroup label="team 2">
            +        <option value="3">Option 3</option>
            +        <option value="4">Option 4</option>
            +      </optgroup>
            +    </select>
            +    <label>Optgroups</label>
            +  </div>
            +
            +  <div class="input-field col s12 m6">
            +    <select class="icons">
            +      <option value="" disabled selected>Choose your option</option>
            +      <option value="" data-icon="images/sample-1.jpg" class="circle">example 1</option>
            +      <option value="" data-icon="images/office.jpg" class="circle">example 2</option>
            +      <option value="" data-icon="images/yuna.jpg" class="circle">example 1</option>
            +    </select>
            +    <label>Images in select</label>
            +  </div>
            +  <div class="input-field col s12 m6">
            +    <select class="icons">
            +      <option value="" disabled selected>Choose your option</option>
            +      <option value="" data-icon="images/sample-1.jpg" class="left circle">example 1</option>
            +      <option value="" data-icon="images/office.jpg" class="left circle">example 2</option>
            +      <option value="" data-icon="images/yuna.jpg" class="left circle">example 3</option>
            +    </select>
            +    <label>Images in 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 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="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>
            +  </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. 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

            +
            +

             

            +
            
            +  var slider = document.getElementById('test5');
            +  noUiSlider.create(slider, {
            +   start: [20, 80],
            +   connect: true,
            +   step: 1,
            +   range: {
            +     'min': 0,
            +     'max': 100
            +   },
            +   format: wNumb({
            +     decimals: 0
            +   })
            +  });
            +        
            +

            HTML5 Range

            +
            +

            + +

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

            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": 'http://placehold.it/250x250'
            +    },
            +    limit: 20, // The max amount of results that can be shown at once. Default: Infinity.
            +  });
            +        
            +
            + + + +
            + + +
            +
            + +
            +
            +
            +
            +
            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/node_modules/materialize-css/fullscreen-slider-demo.html b/node_modules/materialize-css/fullscreen-slider-demo.html new file mode 100644 index 0000000..316f2fc --- /dev/null +++ b/node_modules/materialize-css/fullscreen-slider-demo.html @@ -0,0 +1,83 @@ + + + + + + + + + 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.
              +
              +
            • +
            +
            + +
            + close + + +
            + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/getting-started.html b/node_modules/materialize-css/getting-started.html new file mode 100644 index 0000000..e3d01d5 --- /dev/null +++ b/node_modules/materialize-css/getting-started.html @@ -0,0 +1,426 @@ + + + + + + + + + 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.98.0/css/materialize.min.css">
            +
            +  <!-- Compiled and minified JavaScript -->
            +  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.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
            +  |
            +  |--fonts/
            +  |  |--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.

            + Demosearch + Downloadfile_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
            +  |
            +  |--fonts/
            +  |  |--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/node_modules/materialize-css/grid.html b/node_modules/materialize-css/grid.html new file mode 100644 index 0000000..fb74d01 --- /dev/null +++ b/node_modules/materialize-css/grid.html @@ -0,0 +1,660 @@ + + + + + + + + + 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"><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>
            +          
            +
            + +
            + + +
            +

            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/node_modules/materialize-css/helpers.html b/node_modules/materialize-css/helpers.html new file mode 100644 index 0000000..6452ae2 --- /dev/null +++ b/node_modules/materialize-css/helpers.html @@ -0,0 +1,375 @@ + + + + + + + + + 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>
            +        
            + +
            + + +
            +

            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
            +
            + + +
            + +
            + +
            + +
            +
            + +
            +
            +
            +
            +
            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/node_modules/materialize-css/icons.html b/node_modules/materialize-css/icons.html new file mode 100644 index 0000000..c8778f6 --- /dev/null +++ b/node_modules/materialize-css/icons.html @@ -0,0 +1,486 @@ + + + + + + + + + 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
            +
            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
            +
            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
            +
            starstar
            +
            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
            +
            infoinfo
            +
            httpshttps
            +
            aspect_ratioaspect_ratio
            +
            assessmentassessment
            +
            assignmentassignment
            +
            assignment_indassignment_ind
            +
            assignment_lateassignment_late
            +
            mode_editmode_edit
            + + +
            +
            + +
            + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            + +
            +
            +
            +
            +
            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/node_modules/materialize-css/index.html b/node_modules/materialize-css/index.html new file mode 100644 index 0000000..3c9fff0 --- /dev/null +++ b/node_modules/materialize-css/index.html @@ -0,0 +1,260 @@ + + + + + + + + + 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/node_modules/materialize-css/jade/404.jade b/node_modules/materialize-css/jade/404.jade new file mode 100644 index 0000000..3a31640 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/jade/_footer.html b/node_modules/materialize-css/jade/_footer.html new file mode 100644 index 0000000..32159d9 --- /dev/null +++ b/node_modules/materialize-css/jade/_footer.html @@ -0,0 +1,37 @@ +
            +
            +
            +
            +
            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
            + +
            + +
            +
            +
            +
            +
            + +
            diff --git a/node_modules/materialize-css/jade/_head.jade b/node_modules/materialize-css/jade/_head.jade new file mode 100644 index 0000000..30e82bc --- /dev/null +++ b/node_modules/materialize-css/jade/_head.jade @@ -0,0 +1,40 @@ +meta(http-equiv='Content-Type', content='text/html; charset=UTF-8') +meta(name='viewport', content='width=device-width, initial-scale=1') +meta(http-equiv='X-UA-Compatible', content='IE=edge') +meta(name='msapplication-tap-highlight', content='no') + +if meta_descript + meta(name='description', content='#{meta_descript}') +else + meta(name='description', content='Materialize is a modern responsive CSS framework based on Material Design by Google. ') + +if page + title #{page} - Materialize +else + title Documentation - Materialize + + +// Favicons +link(rel='apple-touch-icon-precomposed', href='images/favicon/apple-touch-icon-152x152.png') +meta(name='msapplication-TileColor', content='#FFFFFF') +meta(name='msapplication-TileImage', content='images/favicon/mstile-144x144.png') +link(rel='icon', href='images/favicon/favicon-32x32.png', sizes='32x32') + +// Android 5 Chrome Color +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') + +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/node_modules/materialize-css/jade/_navbar.jade b/node_modules/materialize-css/jade/_navbar.jade new file mode 100644 index 0000000..6c61916 --- /dev/null +++ b/node_modules/materialize-css/jade/_navbar.jade @@ -0,0 +1,115 @@ +header + if no_nav == false + nav.top-nav + .container + .nav-wrapper + 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.material-icons menu + ul#nav-mobile.side-nav.fixed + li(class="logo") + a#logo-container.brand-logo(href='http://materializecss.com/') + object#front-page-logo(type='image/svg+xml', data='res/materialize.svg') Your browser does not support SVG + 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" : "")) + a.waves-effect.waves-teal(href='getting-started.html') Getting Started + + 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 == "CSS Transitions" || page == "Helpers" ? "active" : "")+" waves-effect waves-teal") + | CSS + .collapsible-body + ul + li(class=(page == "Color" ? "active" : "")) + a(href='color.html') Color + li(class=(page == "Grid" ? "active" : "")) + a(href='grid.html') Grid + li(class=(page == "Helpers" ? "active" : "")) + a(href='helpers.html') Helpers + li(class=(page == "Media CSS" ? "active" : "")) + a(href='media-css.html') Media + 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 == "Breadcrumbs" || page == "Footer" ? "active" : "" || page == "Icons" ? "active" : "")+" waves-effect waves-teal") + | Components + .collapsible-body + ul + li(class=(page == "Badges" ? "active" : "")) + 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" : "")) + a(href='chips.html') Chips + li(class=(page == "Collections" ? "active" : "")) + a(href='collections.html') Collections + li(class=(page == "Footer" ? "active" : "")) + a(href='footer.html') Footer + li(class=(page == "Forms" ? "active" : "")) + a(href='forms.html') Forms + li(class=(page == "Icons" ? "active" : "")) + a(href='icons.html') Icons + li(class=(page == "Navbar" ? "active" : "")) + a(href='navbar.html') Navbar + li(class=(page == "Pagination" ? "active" : "")) + a(href='pagination.html') Pagination + 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" : "" || 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 == "Media" ? "active" : "")) + a(href='media.html') Media + li(class=(page == "Modals" ? "active" : "")) + a(href='modals.html') Modals + li(class=(page == "Parallax" ? "active" : "")) + a(href='parallax.html') Parallax + li(class=(page == "Pushpin" ? "active" : "")) + a(href='pushpin.html') Pushpin + li(class=(page == "ScrollFire" ? "active" : "")) + a(href='scrollfire.html') ScrollFire + li(class=(page == "Scrollspy" ? "active" : "")) + a(href='scrollspy.html') Scrollspy + li(class=(page == "SideNav" ? "active" : "")) + a(href='side-nav.html') SideNav + li(class=(page == "Tabs" ? "active" : "")) + a(href='tabs.html') Tabs + li(class=(page == "Transitions" ? "active" : "")) + a(href='transitions.html') Transitions + li(class=(page == "Waves" ? "active" : "")) + a(href='waves.html') Waves + + li.bold(class=(page == "Mobile" ? "active" : "")) + a.waves-effect.waves-teal(href='http://materializecss.com/mobile.html') Mobile + li.bold(class=(page == "Showcase" ? "active" : "")) + a.waves-effect.waves-teal(href='showcase.html') Showcase diff --git a/node_modules/materialize-css/jade/_scripts.html b/node_modules/materialize-css/jade/_scripts.html new file mode 100644 index 0000000..69b338c --- /dev/null +++ b/node_modules/materialize-css/jade/_scripts.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + diff --git a/node_modules/materialize-css/jade/about.jade b/node_modules/materialize-css/jade/about.jade new file mode 100644 index 0000000..f9eb4ce --- /dev/null +++ b/node_modules/materialize-css/jade/about.jade @@ -0,0 +1,13 @@ +- var white_nav = true +- var page = "About" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include about/about_content.html + include _footer.html + include _scripts.html diff --git a/node_modules/materialize-css/jade/about/about_content.html b/node_modules/materialize-css/jade/about/about_content.html new file mode 100644 index 0000000..0c2640b --- /dev/null +++ b/node_modules/materialize-css/jade/about/about_content.html @@ -0,0 +1,132 @@ +
            +
            +
            +
            +

            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.

            +
            +
            +
            + +
            + +
            + +
            + +
            +
            \ No newline at end of file diff --git a/node_modules/materialize-css/jade/badges.jade b/node_modules/materialize-css/jade/badges.jade new file mode 100644 index 0000000..184ec19 --- /dev/null +++ b/node_modules/materialize-css/jade/badges.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Badges" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/badges_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/breadcrumbs.jade b/node_modules/materialize-css/jade/breadcrumbs.jade new file mode 100644 index 0000000..0d4196a --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/jade/buttons.jade b/node_modules/materialize-css/jade/buttons.jade new file mode 100644 index 0000000..b169b07 --- /dev/null +++ b/node_modules/materialize-css/jade/buttons.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Buttons" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/buttons_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/cards.jade b/node_modules/materialize-css/jade/cards.jade new file mode 100644 index 0000000..3414188 --- /dev/null +++ b/node_modules/materialize-css/jade/cards.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Cards" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/cards_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/carousel.jade b/node_modules/materialize-css/jade/carousel.jade new file mode 100644 index 0000000..00e5945 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/jade/chips.jade b/node_modules/materialize-css/jade/chips.jade new file mode 100644 index 0000000..8ca245b --- /dev/null +++ b/node_modules/materialize-css/jade/chips.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Chips" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/chips_content.html + include _footer.html + include _scripts.html diff --git a/node_modules/materialize-css/jade/collapsible.jade b/node_modules/materialize-css/jade/collapsible.jade new file mode 100644 index 0000000..bee01c4 --- /dev/null +++ b/node_modules/materialize-css/jade/collapsible.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Collapsible" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/collapsible_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/collections.jade b/node_modules/materialize-css/jade/collections.jade new file mode 100644 index 0000000..5933892 --- /dev/null +++ b/node_modules/materialize-css/jade/collections.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Collections" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/collections_content.html + include _footer.html + include _scripts.html diff --git a/node_modules/materialize-css/jade/color.jade b/node_modules/materialize-css/jade/color.jade new file mode 100644 index 0000000..2b44b3e --- /dev/null +++ b/node_modules/materialize-css/jade/color.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Color" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/color_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/css-transitions.jade b/node_modules/materialize-css/jade/css-transitions.jade new file mode 100644 index 0000000..569fdda --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/jade/dialogs.jade b/node_modules/materialize-css/jade/dialogs.jade new file mode 100644 index 0000000..6ecbc69 --- /dev/null +++ b/node_modules/materialize-css/jade/dialogs.jade @@ -0,0 +1,18 @@ +- var no_nav = false +- var page = "Dialogs" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/dialogs_content.html + include _footer.html + include _scripts.html + script(type='text/javascript'). + var displayCustomHTMLToast = function () { + var $toastContent = $('I am toast content'); + Materialize.toast($toastContent, 5000); + } diff --git a/node_modules/materialize-css/jade/dropdown.jade b/node_modules/materialize-css/jade/dropdown.jade new file mode 100644 index 0000000..6bec7e4 --- /dev/null +++ b/node_modules/materialize-css/jade/dropdown.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Dropdown" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/dropdown_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/footer.jade b/node_modules/materialize-css/jade/footer.jade new file mode 100644 index 0000000..049b671 --- /dev/null +++ b/node_modules/materialize-css/jade/footer.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Footer" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/footer_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/forms.jade b/node_modules/materialize-css/jade/forms.jade new file mode 100644 index 0000000..bbdcc14 --- /dev/null +++ b/node_modules/materialize-css/jade/forms.jade @@ -0,0 +1,29 @@ +- var no_nav = false +- var page = "Forms" + +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 + 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, + range: { + 'min': 0, + 'max': 100 + }, + format: wNumb({ + decimals: 0 + }) + }); \ No newline at end of file diff --git a/node_modules/materialize-css/jade/fullscreen-slider-demo.jade b/node_modules/materialize-css/jade/fullscreen-slider-demo.jade new file mode 100644 index 0000000..bb995f4 --- /dev/null +++ b/node_modules/materialize-css/jade/fullscreen-slider-demo.jade @@ -0,0 +1,10 @@ +- var page = "Fullscreen Slider" +- var isDemo = true + +doctype html +html(lang="en") + head + include _head.jade + body + include page-contents/fullscreen_slider_demo_content.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/getting-started.jade b/node_modules/materialize-css/jade/getting-started.jade new file mode 100644 index 0000000..386b602 --- /dev/null +++ b/node_modules/materialize-css/jade/getting-started.jade @@ -0,0 +1,26 @@ +- var white_nav = true +- var page = "Getting Started" +- var meta_descript = "Learn how to quickly get started using our CSS framework. We have guides for a variety of skill levels." + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include getting_started/getting_started_content.html + include _footer.html + include _scripts.html + script. + $('#download-source, #download-sass').on('click', function () { + $('#download').slideUp( + { duration: 500, + easing: "easeOutQuart", + queue: false, + complete: function() + { $('#download-thanks').slideDown({ duration: 300, + easing: "easeOutQuart"}); } + }); + + }); \ No newline at end of file diff --git a/node_modules/materialize-css/jade/getting_started/getting_started_content.html b/node_modules/materialize-css/jade/getting_started/getting_started_content.html new file mode 100644 index 0000000..858ff5d --- /dev/null +++ b/node_modules/materialize-css/jade/getting_started/getting_started_content.html @@ -0,0 +1,237 @@ +
            +
            +
            +
            +

            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.98.0/css/materialize.min.css">
            +
            +  <!-- Compiled and minified JavaScript -->
            +  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.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
            +  |
            +  |--fonts/
            +  |  |--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.

            + Demosearch + Downloadfile_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
            +  |
            +  |--fonts/
            +  |  |--roboto/
            +  |
            +  |--js/
            +  |  |--materialize.js
            +  |
            +  |--scss/
            +  |  |--materialize.scss
            +  |  |--components/
            +  |
            +  |--index.html
            +        
            +
            +
            + +
            + +
            + +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/grid.jade b/node_modules/materialize-css/jade/grid.jade new file mode 100644 index 0000000..72c9700 --- /dev/null +++ b/node_modules/materialize-css/jade/grid.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Grid" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/grid_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/helpers.jade b/node_modules/materialize-css/jade/helpers.jade new file mode 100644 index 0000000..907b022 --- /dev/null +++ b/node_modules/materialize-css/jade/helpers.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Helpers" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/helpers_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/icons.jade b/node_modules/materialize-css/jade/icons.jade new file mode 100644 index 0000000..8308b5b --- /dev/null +++ b/node_modules/materialize-css/jade/icons.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Icons" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/icons_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/index.jade b/node_modules/materialize-css/jade/index.jade new file mode 100644 index 0000000..50dfc27 --- /dev/null +++ b/node_modules/materialize-css/jade/index.jade @@ -0,0 +1,12 @@ +- var no_nav = true + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include index/index_content.html + include _footer.html + include _scripts.html diff --git a/node_modules/materialize-css/jade/index/index_content.html b/node_modules/materialize-css/jade/index/index_content.html new file mode 100644 index 0000000..379a892 --- /dev/null +++ b/node_modules/materialize-css/jade/index/index_content.html @@ -0,0 +1,84 @@ +
            +
            +

            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 +
            +
            +
            + diff --git a/node_modules/materialize-css/jade/lunr.min.js b/node_modules/materialize-css/jade/lunr.min.js new file mode 100644 index 0000000..6aa6bc7 --- /dev/null +++ b/node_modules/materialize-css/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 +
            +
            + + + + + +
            +

            Toast

            +

            Swipe to Dismiss

            +

            On all devices, you can swipe to dismiss toasts.

            + + +
            +
            +
            +
            +
            + + +
            +
            + +
            +
            +
            +
            diff --git a/node_modules/materialize-css/jade/modals.jade b/node_modules/materialize-css/jade/modals.jade new file mode 100644 index 0000000..21d7d07 --- /dev/null +++ b/node_modules/materialize-css/jade/modals.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Modals" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/modals_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/navbar.jade b/node_modules/materialize-css/jade/navbar.jade new file mode 100644 index 0000000..ce17736 --- /dev/null +++ b/node_modules/materialize-css/jade/navbar.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Navbar" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/navbar_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/page-contents/404_content.html b/node_modules/materialize-css/jade/page-contents/404_content.html new file mode 100644 index 0000000..cf3b410 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/404_content.html @@ -0,0 +1,33 @@ +
            +
            +
            +
            +

            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/node_modules/materialize-css/jade/page-contents/badges_content.html b/node_modules/materialize-css/jade/page-contents/badges_content.html new file mode 100644 index 0000000..4e3c7f9 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/badges_content.html @@ -0,0 +1,196 @@ +
            +
            + +
            + + +
            + +
            +
            +

            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

            + +
            + 1Alan + 4Alan + Alan + 14Alan +
            +
            
            +  <div class="collection">
            +    <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"><span class="badge">14</span>Alan</a>
            +  </div>
            +            
            +
            +
            +
            + + + + + +
            +
            +
            + +

            Badges in Collapsibles

            + +
              +
            • +
              4filter_dramaFirst
              +

              Lorem ipsum dolor sit amet.

              +
            • +
            • +
              1placeSecond
              +

              Lorem ipsum dolor sit amet.

              +
            • +
            +
            + +
            
            +<ul class="collapsible" data-collapsible="accordion">
            +  <li>
            +    <div class="collapsible-header"><span class="new badge">4</span><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"><span class="badge">1</span><i class="material-icons">place</i>Second</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>
            +            
            +
            +
            + +
            + + + +
            + +
            +
            +
            + + +
            + +
            +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/breadcrumbs_content.html b/node_modules/materialize-css/jade/page-contents/breadcrumbs_content.html new file mode 100644 index 0000000..7553c21 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/jade/page-contents/buttons_content.html b/node_modules/materialize-css/jade/page-contents/buttons_content.html new file mode 100644 index 0000000..e18f381 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/buttons_content.html @@ -0,0 +1,207 @@ +
            +
            + +
            +
            +

            + 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">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>
            +        
            +
            +
            +

            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">
            +    <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>
            +        
            + +

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

            +
            
            +  $('.fixed-action-btn').openFAB();
            +  $('.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>
            +        
            + + +
            + +

            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>
            +        
            +
            +
            +

            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>
            +        
            +
            + +
            + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/cards_content.html b/node_modules/materialize-css/jade/page-contents/cards_content.html new file mode 100644 index 0000000..c212d98 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/cards_content.html @@ -0,0 +1,566 @@ +
            +
            + +
            + + +
            +

            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>
            +            
            +
            +
            +
            +
            + +
            +
            + +
            +

            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="http://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>
            +            
            +
            +
            +
            +
            + +
            +
            + +
            +

            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 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. +

            +
            +
            +
            + + +
            +
            + +
            +

            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>
            +            
            +
            +
            +
            + + +
            + + + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/carousel_content.html b/node_modules/materialize-css/jade/page-contents/carousel_content.html new file mode 100644 index 0000000..7d4be4d --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/carousel_content.html @@ -0,0 +1,203 @@ +
            +
            +
            + + +
            +

            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="http://lorempixel.com/250/250/nature/1"></a>
            +    <a class="carousel-item" href="#two!"><img src="http://lorempixel.com/250/250/nature/2"></a>
            +    <a class="carousel-item" href="#three!"><img src="http://lorempixel.com/250/250/nature/3"></a>
            +    <a class="carousel-item" href="#four!"><img src="http://lorempixel.com/250/250/nature/4"></a>
            +    <a class="carousel-item" href="#five!"><img src="http://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);
            +      
            +
            + + +
            +

            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="http://lorempixel.com/800/400/food/1"></a>
            +    <a class="carousel-item" href="#two!"><img src="http://lorempixel.com/800/400/food/2"></a>
            +    <a class="carousel-item" href="#three!"><img src="http://lorempixel.com/800/400/food/3"></a>
            +    <a class="carousel-item" href="#four!"><img src="http://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/node_modules/materialize-css/jade/page-contents/chips_content.html b/node_modules/materialize-css/jade/page-contents/chips_content.html new file mode 100644 index 0000000..dd64e3f --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/chips_content.html @@ -0,0 +1,239 @@ +
            +
            + +
            + +
            +

            Introduction

            +

            + Chips 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 with the class close. +

            +
            
            +  <div class="chip">
            +    Tag
            +    <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({
            +    autocompleteData: {
            +      'Apple': null,
            +      'Microsoft': null,
            +      'Google': null
            +    }
            +  });
            +        
            +

            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
            chips.addthis method is triggered when a chip is added.
            chips.deletethis method is triggered when a chip is deleted.
            chips.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');
            +        
            + +
            +
            + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            \ No newline at end of file diff --git a/node_modules/materialize-css/jade/page-contents/collapsible_content.html b/node_modules/materialize-css/jade/page-contents/collapsible_content.html new file mode 100644 index 0000000..aacbe95 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/collapsible_content.html @@ -0,0 +1,198 @@ +
            +
            + +
            + +
            +

            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"><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"><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"><span>Lorem ipsum dolor sit amet.</span></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();
            +  });
            +        
            + +

            +
            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

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

            + +

            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
            +
            +
              +
            • +
              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">
            +            
            +
            +
            +
            + +
            + + + + + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/collections_content.html b/node_modules/materialize-css/jade/page-contents/collections_content.html new file mode 100644 index 0000000..c0ee638 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/collections_content.html @@ -0,0 +1,232 @@ +
            +
            + +
            + + +
            + +
            +
            +

            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>
            +            
            +
            + +
            +
            + + + +
            + + + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/color_content.html b/node_modules/materialize-css/jade/page-contents/color_content.html new file mode 100644 index 0000000..b5a7e62 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/color_content.html @@ -0,0 +1,381 @@ +
            +
            + +
            + +
            +

            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

            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            + +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/css-transitions_content.html b/node_modules/materialize-css/jade/page-contents/css-transitions_content.html new file mode 100644 index 0000000..bddb37f --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/jade/page-contents/dialogs_content.html b/node_modules/materialize-css/jade/page-contents/dialogs_content.html new file mode 100644 index 0000000..c314d40 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/dialogs_content.html @@ -0,0 +1,133 @@ +
            +
            +
            + +
            +

            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! +

            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 = $('<span>I am toast content</span>');
            +  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});
            +  });
            +        

            + +

            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

            +
            
            +  // This will remove the tooltip functionality for the buttons on this page
            +  $('.tooltipped').tooltip('remove');
            +        
            +
            + +
            + + + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/dropdown_content.html b/node_modules/materialize-css/jade/page-contents/dropdown_content.html new file mode 100644 index 0000000..192f1e8 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/dropdown_content.html @@ -0,0 +1,138 @@ +
            +
            +
            + +
            +

            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
            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.

            +
            
            +  <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,
            +      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
            +      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');
            +        
            +
            + + +
            + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/footer_content.html b/node_modules/materialize-css/jade/page-contents/footer_content.html new file mode 100644 index 0000000..711a0a1 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/footer_content.html @@ -0,0 +1,108 @@ +
            +
            + +
            + + + + + + +
            
            +  body {
            +    display: flex;
            +    min-height: 100vh;
            +    flex-direction: column;
            +  }
            +
            +  main {
            +    flex: 1 0 auto;
            +  }
            +      
            + +
            + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/forms_content.html b/node_modules/materialize-css/jade/page-contents/forms_content.html new file mode 100644 index 0000000..a7a554b --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/forms_content.html @@ -0,0 +1,900 @@ +
            +
            + +
            + +
            +

            + 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.

            +

            The validate class leverages HTML5 validation and will add a valid and invalid class accordingly. If you don't want the Green and Red validation states, just remove the validate class from your inputs.

            +
            +
            +
            +
            +
            + + +
            +
            + + +
            +
            +
            +
            + + +
            +
            +
            +
            + + +
            +
            +
            +
            + + +
            +
            +
            +
            + This is an inline input field: +
            + + +
            +
            +
            +
            +
            +
            
            +  <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>
            +      <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.
            You can also call the function Materialize.updateTextFields(); to reinitialize all the Materialize labels on the page if you are dynamically adding inputs.

            +
            +
            + + +
            +
            + +
            
            +  <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>
            +        
            + +
            
            +  $(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.


            +
            +
            +
            +
            + 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. 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.

            +
            +
            + + +
            +
            +
            +
            +
            
            +  <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>
            +
            +  <div class="input-field col s12">
            +    <select multiple>
            +      <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 Multiple Select</label>
            +  </div>
            +
            +  <div class="input-field col s12">
            +    <select multiple>
            +      <optgroup label="team 1">
            +        <option value="1">Option 1</option>
            +        <option value="2">Option 2</option>
            +      </optgroup>
            +      <optgroup label="team 2">
            +        <option value="3">Option 3</option>
            +        <option value="4">Option 4</option>
            +      </optgroup>
            +    </select>
            +    <label>Optgroups</label>
            +  </div>
            +
            +  <div class="input-field col s12 m6">
            +    <select class="icons">
            +      <option value="" disabled selected>Choose your option</option>
            +      <option value="" data-icon="images/sample-1.jpg" class="circle">example 1</option>
            +      <option value="" data-icon="images/office.jpg" class="circle">example 2</option>
            +      <option value="" data-icon="images/yuna.jpg" class="circle">example 1</option>
            +    </select>
            +    <label>Images in select</label>
            +  </div>
            +  <div class="input-field col s12 m6">
            +    <select class="icons">
            +      <option value="" disabled selected>Choose your option</option>
            +      <option value="" data-icon="images/sample-1.jpg" class="left circle">example 1</option>
            +      <option value="" data-icon="images/office.jpg" class="left circle">example 2</option>
            +      <option value="" data-icon="images/yuna.jpg" class="left circle">example 3</option>
            +    </select>
            +    <label>Images in 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 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="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>
            +  </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. 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

            +
            +

             

            +
            
            +  var slider = document.getElementById('test5');
            +  noUiSlider.create(slider, {
            +   start: [20, 80],
            +   connect: true,
            +   step: 1,
            +   range: {
            +     'min': 0,
            +     'max': 100
            +   },
            +   format: wNumb({
            +     decimals: 0
            +   })
            +  });
            +        
            +

            HTML5 Range

            +
            +

            + +

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

            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": 'http://placehold.it/250x250'
            +    },
            +    limit: 20, // The max amount of results that can be shown at once. Default: Infinity.
            +  });
            +        
            +
            + + + +
            + + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/fullscreen_slider_demo_content.html b/node_modules/materialize-css/jade/page-contents/fullscreen_slider_demo_content.html new file mode 100644 index 0000000..c63635f --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/fullscreen_slider_demo_content.html @@ -0,0 +1,31 @@ +
            +
              +
            • + +
              +

              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.
              +
              +
            • +
            +
            + +
            + close + + +
            \ No newline at end of file diff --git a/node_modules/materialize-css/jade/page-contents/grid_content.html b/node_modules/materialize-css/jade/page-contents/grid_content.html new file mode 100644 index 0000000..bdea5fe --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/grid_content.html @@ -0,0 +1,479 @@ +
            +
            + +
            + + +
            +
            +

            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"><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>
            +          
            +
            + +
            + + +
            +

            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>
            +            
            +
            +
            +
            + + +
            + + + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/helpers_content.html b/node_modules/materialize-css/jade/page-contents/helpers_content.html new file mode 100644 index 0000000..aa44f9b --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/helpers_content.html @@ -0,0 +1,194 @@ +
            +
            + +
            + + +
            +

            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>
            +        
            + +
            + + +
            +

            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
            +
            + + +
            + +
            + +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/icons_content.html b/node_modules/materialize-css/jade/page-contents/icons_content.html new file mode 100644 index 0000000..8c3bb0d --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/icons_content.html @@ -0,0 +1,305 @@ +
            +
            +
            + +
            +

            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
            +
            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
            +
            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
            +
            starstar
            +
            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
            +
            infoinfo
            +
            httpshttps
            +
            aspect_ratioaspect_ratio
            +
            assessmentassessment
            +
            assignmentassignment
            +
            assignment_indassignment_ind
            +
            assignment_lateassignment_late
            +
            mode_editmode_edit
            + + +
            +
            + +
            + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/media-css_content.html b/node_modules/materialize-css/jade/page-contents/media-css_content.html new file mode 100644 index 0000000..806c106 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/media-css_content.html @@ -0,0 +1,103 @@ +
            +
            + +
            + + +
            +

            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>
            +        
            +

            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>
            +        
            + +
            + + +
            + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/media_content.html b/node_modules/materialize-css/jade/page-contents/media_content.html new file mode 100644 index 0000000..307f1bb --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/media_content.html @@ -0,0 +1,188 @@ +
            +
            +
            +

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

            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 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');
            +      
            +
            + +
            + + + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/modals_content.html b/node_modules/materialize-css/jade/page-contents/modals_content.html new file mode 100644 index 0000000..9a8f0a9 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/modals_content.html @@ -0,0 +1,213 @@ +
            +
            +
            + +
            +

            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" 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" 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 than the href attribute.

            + +
            
            +  <!-- Modal Trigger -->
            +  <button data-target="modal1" class="btn">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').modal();
            +  });
            +          
            +

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

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

            You can also close them programatically:

            +
            
            +  $('#modal1').modal('close');
            +        
            +
            + + + +
            +

            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').modal({
            +      dismissible: true, // Modal can be dismissed by clicking outside of the modal
            +      opacity: .5, // Opacity of modal background
            +      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
            +    }
            +  );
            +      
            +
            + +
            + + + + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/navbar_content.html b/node_modules/materialize-css/jade/page-contents/navbar_content.html new file mode 100644 index 0000000..ad08fb1 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/navbar_content.html @@ -0,0 +1,520 @@ +
            +
            + +
            + + + +
            +

            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. +

            + +
            + +
            
            +  <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>
            +        
            +
            + + + + + + + +
            +

            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"><i class="material-icons">cloud</i>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>
            +
            +
            + +
            +

            Buttons

            + + + +
            + +

            You can add buttons into links. For buttons you don't need any additional class. Just pop the .btn class on the a tag.

            +
            
            +  <nav>
            +    <div class="nav-wrapper">
            +      <a href="#!" class="brand-logo">Logo</a>
            +      <ul class="right hide-on-med-and-down">
            +        <li><a class="waves-effect waves-light btn">Button</a></li>
            +        <li><a class="waves-effect waves-light btn">Button <i class="material-icons right">cloud</i></a></li>
            +        <li><a class="waves-effect waves-light btn-large">Large Button</a></li>
            +      </ul>
            +    </div>
            +  </nav>
            +
            + +
            Halfway FAB in Extended Navbar
            +

            Add a halfway FAB to your extended navbar.

            + + +

            +
            
            +  <nav class="nav-extended">
            +    <div class="nav-wrapper">
            +      <a href="#!" class="brand-logo">Logo</a>
            +      <ul class="right hide-on-med-and-down">
            +        <li><a>A link</a></li>
            +        <li><a>A second link</a></li>
            +        <li><a>A third link</a></li>
            +      </ul>
            +    </div>
            +    <div class="nav-content">
            +      <span class="nav-title">Title</span>
            +      <a class="btn-floating btn-large halfway-fab waves-effect waves-light teal">
            +        <i class="material-icons">add</i>
            +      </a>
            +    </div>
            +  </nav>
            +
            +
            + +
            +

            Search Bar

            + + + +
            + +

            You can add a search form in the navbar.

            +
            
            +  <nav>
            +    <div class="nav-wrapper">
            +      <form>
            +        <div class="input-field">
            +          <input id="search" type="search" required>
            +          <label class="label-icon" for="search"><i class="material-icons">search</i></label>
            +          <i class="material-icons">close</i>
            +        </div>
            +      </form>
            +    </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();
            +        
            +
            + +
            + + + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/pagination_content.html b/node_modules/materialize-css/jade/page-contents/pagination_content.html new file mode 100644 index 0000000..088eac6 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/pagination_content.html @@ -0,0 +1,63 @@ +
            +
            + +
            + + +
            + +
            +
            +

            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>
            +            
            +
            +
            +
            +
            + + + +
            + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/parallax_content.html b/node_modules/materialize-css/jade/page-contents/parallax_content.html new file mode 100644 index 0000000..89b783c --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/parallax_content.html @@ -0,0 +1,70 @@ +
            +
            + +
            + + +
            +

            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";
            +    }
            +        
            +
            + +
            + + + +
            + +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/parallax_demo_content.html b/node_modules/materialize-css/jade/page-contents/parallax_demo_content.html new file mode 100644 index 0000000..967ce21 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/parallax_demo_content.html @@ -0,0 +1,51 @@ +
            + +
            + +
            + +
            +
            +
            +
            +
            +

            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>
            +      
            +
            +
            +
            +
            +
            + +
            + close + + +
            \ No newline at end of file diff --git a/node_modules/materialize-css/jade/page-contents/preloader_content.html b/node_modules/materialize-css/jade/page-contents/preloader_content.html new file mode 100644 index 0000000..5b19388 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/preloader_content.html @@ -0,0 +1,333 @@ +
            +
            + +
            +

            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

            +

            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

            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            + +
            + +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            + +
            +
            + +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            + +
            +
            +
            
            +  <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>
            +
            +  <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>
            +        
            +
            + +
            +

            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>
            +        
            +
            + + +
            + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/pushpin_content.html b/node_modules/materialize-css/jade/page-contents/pushpin_content.html new file mode 100644 index 0000000..ede15c8 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/pushpin_content.html @@ -0,0 +1,126 @@ +
            +
            + +
            + +
            +

            Introduction

            +

            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(){
            +    $('.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 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)
            + +
            +

            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');
            +        
            + +
            +
            + + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/pushpin_demo_content.html b/node_modules/materialize-css/jade/page-contents/pushpin_demo_content.html new file mode 100644 index 0000000..13f7ddb --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/pushpin_demo_content.html @@ -0,0 +1,50 @@ +
            + +
            + +
            + +
            + +
            + +
            + +
            + close + + +
            diff --git a/node_modules/materialize-css/jade/page-contents/sass_content.html b/node_modules/materialize-css/jade/page-contents/sass_content.html new file mode 100644 index 0000000..f63480a --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/sass_content.html @@ -0,0 +1,159 @@ +
            +
            + +
            + + +
            +

            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)
            +        
            +
            +
            +
            +
            +
            + + +
            + +
            +
            + +
            + +
            diff --git a/node_modules/materialize-css/jade/page-contents/scrollfire_content.html b/node_modules/materialize-css/jade/page-contents/scrollfire_content.html new file mode 100644 index 0000000..5fa8692 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/scrollfire_content.html @@ -0,0 +1,124 @@ +
            +
            + +
            + +
            +

            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: customCallbackFunc } },
            +    {selector: '.other-class', offset: 200, callback: function() {
            +      customCallbackFunc();
            +    } },
            +  ];
            +  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.
            callbackExecute 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);
            +        
            + + + +
            + + + +
            + +
            +
            +
            + + +
            + +
            +
            + +
            +
            + + + diff --git a/node_modules/materialize-css/jade/page-contents/scrollspy_content.html b/node_modules/materialize-css/jade/page-contents/scrollspy_content.html new file mode 100644 index 0000000..0aeddfc --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/scrollspy_content.html @@ -0,0 +1,92 @@ +
            +
            + +
            + +
            +

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

            jQuery Plugin Options

            + + + + + + + + + + + + + + +
            Option NameDescription
            scrollOffsetOffset for centering element when scrolled to. Default: 200
            +
            + +
            + + +
            +
            +
            + + +
            + +
            +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/shadow_content.html b/node_modules/materialize-css/jade/page-contents/shadow_content.html new file mode 100644 index 0000000..db9eb8e --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/shadow_content.html @@ -0,0 +1,64 @@ +
            +
            + +
            + +
            +

            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>
            +        
            +
            +
            + +
            +
            +
            + + +
            +
            + +
            +
            +
            + +
            +
            \ No newline at end of file diff --git a/node_modules/materialize-css/jade/page-contents/sideNav_content.html b/node_modules/materialize-css/jade/page-contents/sideNav_content.html new file mode 100644 index 0000000..e7f3d15 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/sideNav_content.html @@ -0,0 +1,184 @@ +
            +
            + +
            + +
            +

            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.

            + + Side nav demo + + + +

            HTML Structure

            +
            
            +  <ul id="slide-out" class="side-nav">
            +    <li><div class="userView">
            +      <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="material-icons">menu</i></a>
            +        
            +
            + +
            +

            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 300
            +      edge: 'right', // Choose the horizontal origin
            +      closeOnClick: true, // Closes side-nav on <a> clicks, useful for Angular/Meteor
            +      draggable: true // Choose whether you can drag to open on touch screens
            +    }
            +  );
            +        
            +
            + +
            +

            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

            +

            + 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>
            +    </ul>
            +    <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.

            + +
            
            +    <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: 300px;
            +    }
            +
            +    @media only screen and (max-width : 992px) {
            +      header, main, footer {
            +        padding-left: 0;
            +      }
            +    }
            +          
            +
            +
            + + +
            + +
            + +
            +
            diff --git a/node_modules/materialize-css/jade/page-contents/table_content.html b/node_modules/materialize-css/jade/page-contents/table_content.html new file mode 100644 index 0000000..041597c --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/table_content.html @@ -0,0 +1,307 @@ +
            +
            + +
            + + +
            +

            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
            +
            +
            + +
            + + +
            + +
            +
            +
            + + +
            + +
            +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/tabs_content.html b/node_modules/materialize-css/jade/page-contents/tabs_content.html new file mode 100644 index 0000000..5f2b8e5 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/tabs_content.html @@ -0,0 +1,210 @@ +
            +
            + +
            + +
            +

            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.

            + +
            +
            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

            +
            + + +
            +

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

            jQuery Plugin Options

            + + + + + + + + + + + + + + + + + + + + + + +
            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

            +

            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>
            +        
            +
            + + +
            +

            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>
            +        
            +
            + +
            + + + + +
            +
            + diff --git a/node_modules/materialize-css/jade/page-contents/transitions_content.html b/node_modules/materialize-css/jade/page-contents/transitions_content.html new file mode 100644 index 0000000..bfd0047 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/transitions_content.html @@ -0,0 +1,103 @@ +
            +
            + +
            + +
            +

            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>
            +        
            + +
            + +
            +

            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/node_modules/materialize-css/jade/page-contents/typography_content.html b/node_modules/materialize-css/jade/page-contents/typography_content.html new file mode 100644 index 0000000..b351b38 --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/typography_content.html @@ -0,0 +1,95 @@ +
            +
            + +
            + +
            +
            +

            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>
            +          
            +
            +
            + +
            + +
            +
            +
            +
            + + +
            + +
            +
            +
            +
            \ No newline at end of file diff --git a/node_modules/materialize-css/jade/page-contents/waves_content.html b/node_modules/materialize-css/jade/page-contents/waves_content.html new file mode 100644 index 0000000..e6910dd --- /dev/null +++ b/node_modules/materialize-css/jade/page-contents/waves_content.html @@ -0,0 +1,110 @@ +
            +
            + +
            + +
            + +

            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
            +
            +
            +
            +
            + +
            + + + +
            + +
            + +
            +
            + diff --git a/node_modules/materialize-css/jade/pagination.jade b/node_modules/materialize-css/jade/pagination.jade new file mode 100644 index 0000000..395c4ef --- /dev/null +++ b/node_modules/materialize-css/jade/pagination.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Pagination" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/pagination_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/parallax-demo.jade b/node_modules/materialize-css/jade/parallax-demo.jade new file mode 100644 index 0000000..1303858 --- /dev/null +++ b/node_modules/materialize-css/jade/parallax-demo.jade @@ -0,0 +1,11 @@ +- var page = "Parallax" +- var isDemo = true + +doctype html +html(lang="en") + head + include _head.jade + body(class="parallax-demo") + include page-contents/parallax_demo_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/parallax.jade b/node_modules/materialize-css/jade/parallax.jade new file mode 100644 index 0000000..0682abe --- /dev/null +++ b/node_modules/materialize-css/jade/parallax.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Parallax" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/parallax_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/parallax/parallax_content.html b/node_modules/materialize-css/jade/parallax/parallax_content.html new file mode 100644 index 0000000..6f0cec1 --- /dev/null +++ b/node_modules/materialize-css/jade/parallax/parallax_content.html @@ -0,0 +1,51 @@ +
            + +
            + +
            + +
            +
            +
            +
            +
            +

            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>
            +      
            +
            +
            +
            +
            +
            + \ No newline at end of file diff --git a/node_modules/materialize-css/jade/preloader.jade b/node_modules/materialize-css/jade/preloader.jade new file mode 100644 index 0000000..bd9c64c --- /dev/null +++ b/node_modules/materialize-css/jade/preloader.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Preloader" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/preloader_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/pushpin-demo.jade b/node_modules/materialize-css/jade/pushpin-demo.jade new file mode 100644 index 0000000..0cfefed --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/jade/pushpin.jade b/node_modules/materialize-css/jade/pushpin.jade new file mode 100644 index 0000000..9133412 --- /dev/null +++ b/node_modules/materialize-css/jade/pushpin.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Pushpin" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/pushpin_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/sass.jade b/node_modules/materialize-css/jade/sass.jade new file mode 100644 index 0000000..5bb19dd --- /dev/null +++ b/node_modules/materialize-css/jade/sass.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Sass" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/sass_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/scrollFire.jade b/node_modules/materialize-css/jade/scrollFire.jade new file mode 100644 index 0000000..11d76c9 --- /dev/null +++ b/node_modules/materialize-css/jade/scrollFire.jade @@ -0,0 +1,34 @@ +- var no_nav = false +- var page = "ScrollFire" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/scrollfire_content.html + include _footer.html + include _scripts.html + //- Scrollfire Script + script(type='text/javascript'). + var options = [ + {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/node_modules/materialize-css/jade/scrollspy.jade b/node_modules/materialize-css/jade/scrollspy.jade new file mode 100644 index 0000000..162770b --- /dev/null +++ b/node_modules/materialize-css/jade/scrollspy.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Scrollspy" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/scrollspy_content.html + include _footer.html + include _scripts.html diff --git a/node_modules/materialize-css/jade/search.js b/node_modules/materialize-css/jade/search.js new file mode 100644 index 0000000..965648f --- /dev/null +++ b/node_modules/materialize-css/jade/search.js @@ -0,0 +1,348 @@ +(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/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/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').bind('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').bind('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/node_modules/materialize-css/jade/shadow.jade b/node_modules/materialize-css/jade/shadow.jade new file mode 100644 index 0000000..bc03f2d --- /dev/null +++ b/node_modules/materialize-css/jade/shadow.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Shadow" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/shadow_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/showcase.jade b/node_modules/materialize-css/jade/showcase.jade new file mode 100644 index 0000000..af51141 --- /dev/null +++ b/node_modules/materialize-css/jade/showcase.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Showcase" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include showcase/showcase_content.html + include _footer.html + include _scripts.html diff --git a/node_modules/materialize-css/jade/showcase/showcase_content.html b/node_modules/materialize-css/jade/showcase/showcase_content.html new file mode 100644 index 0000000..bfc3139 --- /dev/null +++ b/node_modules/materialize-css/jade/showcase/showcase_content.html @@ -0,0 +1,118 @@ +
            +
            +
            +

            + Submit your site +

            + + +
            +
            + +
            + + +
            + +
            + +
            Emerald
            +
            +
            + +
            Caliber
            +
            +
            + +
            +
            + +
            Close Heat
            +
            +
            + +
            Stamplay
            +
            +
            + +
            RDX Sports
            +
            +
            + +
            + +
            + +
            Mako
            +
            +
            + +
            Straphq
            +
            +
            + +
            + + +
            + +
            Adbeus
            +
            +
            + +
            +
            + +
            Roboterwelt
            +
            +
            + +
            Joel Cox
            +
            + +
            + +
            +
            + +
            eadBox
            +
            +
            + +
            Webonise
            +
            +
            + +
            Kenya Apps
            +
            + +
            + +
            + +
            + + +
            + + + + diff --git a/node_modules/materialize-css/jade/sideNav.jade b/node_modules/materialize-css/jade/sideNav.jade new file mode 100644 index 0000000..58c7f2d --- /dev/null +++ b/node_modules/materialize-css/jade/sideNav.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "SideNav" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/sideNav_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/table.jade b/node_modules/materialize-css/jade/table.jade new file mode 100644 index 0000000..3435fc4 --- /dev/null +++ b/node_modules/materialize-css/jade/table.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Table" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/table_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/tabs.jade b/node_modules/materialize-css/jade/tabs.jade new file mode 100644 index 0000000..5700bf3 --- /dev/null +++ b/node_modules/materialize-css/jade/tabs.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Tabs" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/tabs_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/transitions.jade b/node_modules/materialize-css/jade/transitions.jade new file mode 100644 index 0000000..1b1886e --- /dev/null +++ b/node_modules/materialize-css/jade/transitions.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Transitions" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/transitions_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/typography.jade b/node_modules/materialize-css/jade/typography.jade new file mode 100644 index 0000000..f51717a --- /dev/null +++ b/node_modules/materialize-css/jade/typography.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Typography" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/typography_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/jade/waves.jade b/node_modules/materialize-css/jade/waves.jade new file mode 100644 index 0000000..64bd904 --- /dev/null +++ b/node_modules/materialize-css/jade/waves.jade @@ -0,0 +1,13 @@ +- var no_nav = false +- var page = "Waves" + +doctype html +html(lang="en") + head + include _head.jade + body + include _navbar.jade + main + include page-contents/waves_content.html + include _footer.html + include _scripts.html \ No newline at end of file diff --git a/node_modules/materialize-css/js/animation.js b/node_modules/materialize-css/js/animation.js new file mode 100644 index 0000000..f9e6cf3 --- /dev/null +++ b/node_modules/materialize-css/js/animation.js @@ -0,0 +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; + } +}); \ No newline at end of file diff --git a/node_modules/materialize-css/js/buttons.js b/node_modules/materialize-css/js/buttons.js new file mode 100644 index 0000000..b15a04c --- /dev/null +++ b/node_modules/materialize-css/js/buttons.js @@ -0,0 +1,267 @@ +(function ($) { + $(document).ready(function() { + + // jQuery reverse + $.fn.reverse = [].reverse; + + // 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); + } + }); + + // 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() { + openFABMenu($(this)); + }, + closeFAB: function() { + closeFABMenu($(this)); + }, + openToolbar: function() { + FABtoToolbar($(this)); + }, + closeToolbar: function() { + toolbarToFAB($(this)); + } + }); + + + var openFABMenu = function (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: 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", translateX: '0'}, + { duration: 80, delay: time }); + time += 40; + }); + } + }; + + var closeFABMenu = function (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: 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/node_modules/materialize-css/js/cards.js b/node_modules/materialize-css/js/cards.js new file mode 100644 index 0000000..ccd6610 --- /dev/null +++ b/node_modules/materialize-css/js/cards.js @@ -0,0 +1,26 @@ +(function ($) { + $(document).ready(function() { + + $(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')) ) { + $(e.target).closest('.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 diff --git a/node_modules/materialize-css/js/carousel.js b/node_modules/materialize-css/js/carousel.js new file mode 100644 index 0000000..6a8b8fe --- /dev/null +++ b/node_modules/materialize-css/js/carousel.js @@ -0,0 +1,481 @@ +(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); + + return this.each(function() { + + var images, item_width, item_height, offset, center, pressed, dim, count, + reference, referenceY, amplitude, target, velocity, + xform, frame, timestamp, ticker, dragged, vertical_dragged; + var $indicators = $('
              '); + + + // Initialize + var view = $(this); + var showIndicators = view.attr('data-indicators') || options.indicators; + + // Don't double initialize. + if (view.hasClass('initialized')) { + // Redraw carousel. + $(this).trigger('carouselNext', [0.000001]); + return true; + } + + + // Options + if (options.fullWidth) { + options.dist = 0; + var firstImage = view.find('.carousel-item img').first(); + if (firstImage.length) { + imageHeight = firstImage.on('load', function(){ + view.css('height', $(this).height()); + }); + } else { + imageHeight = view.find('.carousel-item').first().height(); + view.css('height', imageHeight); + } + + // Offset fixed items when indicators. + if (showIndicators) { + view.find('.carousel-fixed-item').addClass('with-indicators'); + } + } + + + 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[0].addEventListener('touchstart', tap); + view[0].addEventListener('touchmove', drag); + view[0].addEventListener('touchend', release); + } + view[0].addEventListener('mousedown', tap); + view[0].addEventListener('mousemove', drag); + view[0].addEventListener('mouseup', release); + view[0].addEventListener('mouseleave', release); + view[0].addEventListener('click', 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) { + 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 (!options.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 (!options.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 (!options.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 (!options.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); + } + } + + 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 = (center % count) - 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 (!options.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) { + 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 (options.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; + }); + + + $(window).on('resize.carousel', function() { + if (options.fullWidth) { + item_width = view.find('.carousel-item').first().innerWidth(); + item_height = view.find('.carousel-item').first().innerHeight(); + dim = item_width * 2 + options.padding; + offset = center * 2 * item_width; + target = offset; + } else { + scroll(); + } + }); + + setupEvents(); + scroll(offset); + + $(this).on('carouselNext', function(e, n) { + if (n === undefined) { + n = 1; + } + 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) { + if (n === undefined) { + n = 1; + } + 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) { + if (n === undefined) { + n = 0; + } + cycleTo(n); + }); + + }); + + + + }, + next : function(n) { + $(this).trigger('carouselNext', [n]); + }, + prev : function(n) { + $(this).trigger('carouselPrev', [n]); + }, + set : function(n) { + $(this).trigger('carouselSet', [n]); + } + }; + + + $.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 )); \ No newline at end of file diff --git a/node_modules/materialize-css/js/character_counter.js b/node_modules/materialize-css/js/character_counter.js new file mode 100644 index 0000000..f85bf91 --- /dev/null +++ b/node_modules/materialize-css/js/character_counter.js @@ -0,0 +1,72 @@ +(function ($) { + + $.fn.characterCounter = function(){ + return this.each(function(){ + var $input = $(this); + var $counterElement = $input.parent().find('span[class="character-counter"]'); + + // character counter has already been added appended to the parent container + if ($counterElement.length) { + return; + } + + var itHasLengthAttribute = $input.attr('data-length') !== undefined; + + if(itHasLengthAttribute){ + $input.on('input', updateCounter); + $input.on('focus', updateCounter); + $input.on('blur', removeCounterElement); + + addCounterElement($input); + } + + }); + }; + + function updateCounter(){ + var maxLength = +$(this).attr('data-length'), + actualLength = +$(this).val().length, + isValidLength = actualLength <= maxLength; + + $(this).parent().find('span[class="character-counter"]') + .html( actualLength + '/' + maxLength); + + addInputStyle(isValidLength, $(this)); + } + + 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') + .css('height', 1); + + $input.parent().append($counterElement); + } + + function removeCounterElement(){ + $(this).parent().find('span[class="character-counter"]').html(''); + } + + 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 )); diff --git a/node_modules/materialize-css/js/chips.js b/node_modules/materialize-css/js/chips.js new file mode 100644 index 0000000..3238cd8 --- /dev/null +++ b/node_modules/materialize-css/js/chips.js @@ -0,0 +1,318 @@ +(function ($) { + var materialChipsDefaults = { + data: [], + placeholder: '', + secondaryPlaceholder: '', + autocompleteData: {}, + autocompleteLimit: Infinity, + }; + + $(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.autocompleteData); + + // 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').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) { + var html = ''; + $chips.data('chips').forEach(function(elem){ + html += self.renderChip(elem); + }); + html += ''; + $chips.html(html); + self.setPlaceholder($chips); + + // Set for attribute for label + var label = $chips.next('label'); + if (label.length) { + label.attr('for', chipId); + + if ($chips.data('chips').length) { + label.addClass('active'); + } + } + + // Setup autocomplete if needed. + var input = $('#' + chipId); + if (self.hasAutocomplete) { + input.autocomplete({ + data: curr_options.autocompleteData, + limit: curr_options.autocompleteLimit, + onAutocomplete: function(val) { + self.addChip({tag: val}, $chips); + input.val(''); + input.focus(); + }, + }) + } + }; + + this.renderChip = function(elem) { + if (!elem.tag) return; + + var html = '
              ' + elem.tag; + if (elem.image) { + html += ' '; + } + html += 'close'; + html += '
              '; + return html; + }; + + this.setPlaceholder = function($chips) { + if ($chips.data('chips').length && curr_options.placeholder) { + $chips.find('input').prop('placeholder', curr_options.placeholder); + + } else if (!$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 chipHtml = 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); + $(chipHtml).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/node_modules/materialize-css/js/collapsible.js b/node_modules/materialize-css/js/collapsible.js new file mode 100644 index 0000000..650c702 --- /dev/null +++ b/node_modules/materialize-css/js/collapsible.js @@ -0,0 +1,160 @@ +(function ($) { + $.fn.collapsible = function(options) { + var defaults = { + accordion: undefined, + onOpen: undefined, + onClose: undefined + }; + + options = $.extend(defaults, options); + + + return this.each(function() { + + var $this = $(this); + + var $panel_headers = $(this).find('> li > .collapsible-header'); + + var collapsible_type = $this.data("collapsible"); + + // Turn off any existing event handlers + $this.off('click.collapse', '> li > .collapsible-header'); + $panel_headers.off('click.collapse'); + + + /**************** + 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'); + } + 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'); + + // 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'); + } + 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) { + 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 + * @return {Boolean} true if it is children + */ + function isChildrenOfPanelHeader(object) { + + var panelHeader = getPanelHeader(object); + + return panelHeader.length > 0; + } + + /** + * Get panel header from a children element + * @param {Object} object Jquery object + * @return {Object} panel header object + */ + function getPanelHeader(object) { + + return object.closest('li > .collapsible-header'); + } + + /***** End Helper Functions *****/ + + + + // 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); + } + + element.toggleClass('active'); + + collapsibleOpen(element); + }); + + + // Open first active + if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion + collapsibleOpen($panel_headers.filter('.active').first()); + + } else { // Handle Expandables + $panel_headers.filter('.active').each(function() { + collapsibleOpen($(this)); + }); + } + + }); + }; + + $(document).ready(function(){ + $('.collapsible').collapsible(); + }); +}( jQuery )); \ No newline at end of file diff --git a/node_modules/materialize-css/js/date_picker/picker.date.js b/node_modules/materialize-css/js/date_picker/picker.date.js new file mode 100644 index 0000000..fb264d0 --- /dev/null +++ b/node_modules/materialize-css/js/date_picker/picker.date.js @@ -0,0 +1,1430 @@ +/*! + * Date picker for pickadate.js v3.5.0 + * http://amsul.github.io/pickadate.js/date.htm + */ + +(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 ) + +}(function( Picker, $ ) { + + +/** + * Globals and constants + */ +var DAYS_IN_WEEK = 7, + WEEKS_IN_CALENDAR = 6, + _ = Picker._ + + + +/** + * The date picker constructor + */ +function DatePicker( picker, settings ) { + + 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 ? + + // For IE. + element.currentStyle.direction == 'rtl' : + + // For normal browsers. + getComputedStyle( picker.$root[0] ).direction == 'rtl' + } + + calendar.settings = settings + calendar.$node = picker.$node + + // 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' ) + + // 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 ) + } + + + // 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() + } + } + + + // 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 ) + +} //DatePicker + + +/** + * Set a datepicker item object. + */ +DatePicker.prototype.set = function( type, value, options ) { + + var calendar = this, + calendarItem = calendar.item + + // 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() + + // 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 + + +/** + * Get a datepicker item object. + */ +DatePicker.prototype.get = function( type ) { + return this.item[ type ] +} //DatePicker.prototype.get + + +/** + * Create a picker date object. + */ +DatePicker.prototype.create = function( type, value, options ) { + + var isInfiniteValue, + calendar = this + + // If there’s no value, use the type as the value. + value = value === undefined ? type : value + + + // 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 + } + + // 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 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 ) + } + + // 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 + + +/** + * Create a range limit object using an array, date object, + * literal “true”, or integer relative to another time. + */ +DatePicker.prototype.createRange = function( from, to ) { + + var calendar = this, + createDate = function( date ) { + if ( date === true || $.isArray( date ) || _.isDate( date ) ) { + return calendar.create( date ) + } + return date + } + + // Create objects if possible. + if ( !_.isInteger( from ) ) { + from = createDate( from ) + } + if ( !_.isInteger( to ) ) { + to = createDate( to ) + } + + // 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 { + 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 +} + + +/** + * Check if two date range objects overlap. + */ +DatePicker.prototype.overlapRanges = function( one, two ) { + + var calendar = this + + // Convert the ranges into comparable dates. + one = calendar.createRange( one.from, one.to ) + two = calendar.createRange( two.from, two.to ) + + return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) || + calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to ) +} + + +/** + * 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 ) +} + + +/** + * Navigate to next/prev month. + */ +DatePicker.prototype.navigate = function( type, value, options ) { + + var targetDateObject, + targetYear, + targetMonth, + targetDate, + isTargetArray = $.isArray( value ), + isTargetObject = $.isPlainObject( value ), + viewsetObject = this.item.view/*, + safety = 100*/ + + + if ( isTargetArray || isTargetObject ) { + + 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 ) + '.' + }*/ + } + + value = [ targetYear, targetMonth, targetDate ] + } + + return value +} //DatePicker.prototype.navigate + + +/** + * Normalize a date by setting the hours to midnight. + */ +DatePicker.prototype.normalize = function( value/*, options*/ ) { + value.setHours( 0, 0, 0, 0 ) + return value +} + + +/** + * Measure the range of dates. + */ +DatePicker.prototype.measure = function( type, value/*, options*/ ) { + + var calendar = this + + // If it’s anything false-y, remove the limits. + if ( !value ) { + value = type == 'min' ? -Infinity : Infinity + } + + // If it’s a string, parse it. + else if ( typeof value == 'string' ) { + value = calendar.parse( type, value ) + } + + // If it's an integer, get a date relative to today. + else if ( _.isInteger( value ) ) { + value = calendar.now( type, value, { rel: value } ) + } + + return value +} ///DatePicker.prototype.measure + + +/** + * Create a viewset object based on navigation. + */ +DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) { + return this.create([ dateObject.year, dateObject.month, 1 ]) +} + + +/** + * Validate a date as enabled and shift if needed. + */ +DatePicker.prototype.validate = function( type, dateObject, options ) { + + var calendar = this, + + // Keep a reference to the original date. + originalDateObject = dateObject, + + // Make sure we have an interval. + interval = options && options.interval ? options.interval : 1, + + // Check if the calendar enabled dates are inverted. + isFlippedBase = calendar.item.enable === -1, + + // Check if we have any enabled dates after/before now. + hasEnabledBeforeTarget, hasEnabledAfterTarget, + + // The min & max limits. + minLimitObject = calendar.item.min, + maxLimitObject = calendar.item.max, + + // 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 ) { + + // 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*/ + + + + // 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 + } + + + // Keep looping until we reach an enabled date. + while ( /*safety &&*/ calendar.disabled( dateObject ) ) { + + /*safety -= 1 + if ( !safety ) { + throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.' + }*/ + + + // 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 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) + ]) + } + + + // If we’ve reached both limits, just break out of the loop. + if ( reachedMin && reachedMax ) { + break + } + + + // 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 + + +/** + * Check if a date is disabled. + */ +DatePicker.prototype.disabled = function( dateToVerify ) { + + var + calendar = this, + + // Filter through the disabled dates to check if this is one. + isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) { + + // 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 + } + + // 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 ) + } + }) + + // 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 + + +/** + * Parse a string into a usable type. + */ +DatePicker.prototype.parse = function( type, value, options ) { + + var calendar = this, + parsingObject = {} + + // If it’s already parsed, we’re good. + if ( !value || typeof value != 'string' ) { + return value + } + + // We need a `.format` to parse the value with. + if ( !( options && options.format ) ) { + options = options || {} + options.format = calendar.settings.format + } + + // 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 ], + + // 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 ) + } + + // Update the value as the substring from format length to end. + value = value.substr( formatLength ) + }) + + // Compensate for month 0index. + return [ + parsingObject.yyyy || parsingObject.yy, + +( parsingObject.mm || parsingObject.m ) - 1, + parsingObject.dd || parsingObject.d + ] +} //DatePicker.prototype.parse + + +/** + * Various formats to display the object in. + */ +DatePicker.prototype.formats = (function() { + + // 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 ] + + // If there's no month index, add it to the date object + if ( !dateObject.mm && !dateObject.m ) { + dateObject.m = collection.indexOf( word ) + 1 + } + + // Return the length of the word. + return word.length + } + + // Get the length of the first word in a string. + function getFirstWordLength( string ) { + return string.match( /\w+/ )[ 0 ].length + } + + return { + + d: function( string, dateObject ) { + + // 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 ) { + + // 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 ) { + + // 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 ) { + + // 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 ) { + + 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 ) { + + var collection = this.settings.monthsFull + + // 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 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 there's a string, then the length is always 4. + // Otherwise return the selected year. + return string ? 4 : dateObject.year + }, + + // 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 ) }, + + // 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 + + + + +/** + * Check if two date units are the exact. + */ +DatePicker.prototype.isDateExact = function( one, two ) { + + var calendar = this + + // When we’re working with weekdays, do a direct comparison. + if ( + ( _.isInteger( one ) && _.isInteger( two ) ) || + ( typeof one == 'boolean' && typeof two == 'boolean' ) + ) { + return one === two + } + + // 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 + } + + // 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 ) + } + + return false +} + + +/** + * Check if two date units overlap. + */ +DatePicker.prototype.isDateOverlap = function( one, two ) { + + var calendar = this, + firstDay = calendar.settings.firstDay ? 1 : 0 + + // 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 + } + + // When we’re working with range objects, check if the ranges overlap. + if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) { + return calendar.overlapRanges( one, two ) + } + + return false +} + + +/** + * 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 ) { + + 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 = [] + } + + // Otherwise go through the dates to disable. + else { + + datesToDisable.map(function( unitToDisable ) { + + 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 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 ) + } + } + }) + } + + // Return the updated collection. + return disabledItems +} //DatePicker.prototype.deactivate + + +/** + * Mark a collection of dates as “enabled”. + */ +DatePicker.prototype.activate = function( type, datesToEnable ) { + + var calendar = this, + disabledItems = calendar.item.disable, + disabledItemsCount = disabledItems.length + + // 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 = [] + } + + // Otherwise go through the disabled dates. + else { + + datesToEnable.map(function( unitToEnable ) { + + var matchFound, + disabledUnit, + index, + isExactRange + + // Go through the disabled items and try to find a match. + for ( index = 0; index < disabledItemsCount; index += 1 ) { + + disabledUnit = disabledItems[index] + + // When an exact match is found, remove it from the collection. + if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) { + matchFound = disabledItems[index] = null + isExactRange = true + break + } + + // 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 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 + } + } + + // 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 ) + } + }) + } + + // Return the updated collection. + return disabledItems.filter(function( val ) { return val != null }) +} //DatePicker.prototype.activate + + +/** + * 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, + + + // 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 ) { + + // If the first day should be Monday, move Sunday to the end. + if ( settings.firstDay ) { + collection.push( collection.shift() ) + fullCollection.push( fullCollection.shift() ) + } + + // 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 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 + '"' + ) + } + + // Materialize modified + if (override == "short_months") + if (selectedObject != null) + return _.node( 'div', monthsCollection[ selectedObject.month ] ); + else return _.node( 'div', monthsCollection[ viewsetObject.month ] ); + + // If there's a need for a month selector + return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month ) + }, //createMonthLabel + + + // Create the year label. + // Materialize modified + createYearLabel = function(override) { + + var focusedYear = viewsetObject.year, + + // 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 ) + + // If there are years to select, add a dropdown menu. + if ( numberYears ) { + + 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 + } + + // 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 + + lowestYear -= availableYears > neededYears ? neededYears : availableYears + highestYear = maxYear + } + + 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 + '"' + ) + } + } + + // Materialize modified + if (override == "raw") + return _.node( 'div', focusedYear ) + + // Otherwise just return the year focused + return _.node( 'div', focusedYear, settings.klass.year ) + } //createYearLabel + + + // Materialize modified + createDayLabel = function() { + if (selectedObject != null) + return _.node( 'div', selectedObject.date) + else return _.node( 'div', nowObject.date) + } + createWeekdayLabel = function() { + var display_day; + + if (selectedObject != null) + display_day = selectedObject.day; + else + display_day = nowObject.day; + var weekday = settings.weekdaysFull[ display_day ] + return weekday + } + + + // 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 + + + + + // * 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 + + + + +/** + * The date picker defaults. + */ +DatePicker.defaults = (function( prefix ) { + + return { + + // 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', + + // 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' ], + + // Materialize modified + weekdaysLetter: [ 'S', 'M', 'T', 'W', 'T', 'F', 'S' ], + + // Today and clear + today: 'Today', + clear: 'Clear', + close: 'Close', + + // The format to show on the `input` element + format: 'd mmmm, yyyy', + + // Classes + klass: { + + table: prefix + 'table', + + header: prefix + 'header', + + + // 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 + + + + navPrev: prefix + 'nav--prev', + navNext: prefix + 'nav--next', + navDisabled: prefix + 'nav--disabled', + + month: prefix + 'month', + year: prefix + 'year', + + selectMonth: prefix + 'select--month', + selectYear: prefix + 'select--year', + + weekdays: prefix + 'weekday', + + 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', + + footer: prefix + 'footer', + + buttonClear: prefix + 'button--clear', + buttonToday: prefix + 'button--today', + buttonClose: prefix + 'button--close' + } + } +})( Picker.klasses().picker + '__' ) + + + + + +/** + * Extend the picker to add the date picker. + */ +Picker.extend( 'pickadate', DatePicker ) + + +})); + + diff --git a/node_modules/materialize-css/js/date_picker/picker.js b/node_modules/materialize-css/js/date_picker/picker.js new file mode 100644 index 0000000..48fbbad --- /dev/null +++ b/node_modules/materialize-css/js/date_picker/picker.js @@ -0,0 +1,1123 @@ +/*! + * 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 ) { + + // 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 ) + +}(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.after( 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 ) { + + var + // Get the keycode. + keycode = event.keyCode, + + // Translate that to a selection change. + keycodeToMove = P.component.key[ keycode ], + + // Grab the target. + target = event.target + + + // On escape, close the picker and give focus. + if ( keycode == 27 ) { + P.close( true ) + } + + + // Check if there is a key movement or “enter” keypress on the element. + else if ( target == P.$root[0] && ( keycodeToMove || keycode == 13 ) ) { + + // Prevent the default action to stop page movement. + event.preventDefault() + + // 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() + } + } + + + // 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() + } + }) + } + + // 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' ).eq(0).focus() + setTimeout( function() { + P.$root.on( 'focus.toOpen', handleFocusToOpenEvent ) + }, 0 ) + } + + // 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() { + + // 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 + + // Set it as closed. + STATE.open = false + + // Allow the page to scroll. + if ( IS_DEFAULT_THEME ) { + $html. + css( 'overflow', '' ). + css( 'padding-right', '-=' + getScrollbarWidth() ) + } + + // Unbind the document events. + $document.off( '.' + STATE.id ) + + // Trigger the queued “close” events. + return P.trigger( 'close' ) + }, //close + + + /** + * Clear the values + */ + clear: function( options ) { + return P.set( 'clear', null, options ) + }, //clear + + + /** + * Set something + */ + set: function( thing, value, options ) { + + var thingItem, thingValue, + thingIsObject = $.isPlainObject( thing ), + thingObject = thingIsObject ? thing : {} + + // Make sure we have usable options. + options = thingIsObject && $.isPlainObject( value ) ? value : options || {} + + if ( thing ) { + + // If the thing isn’t an object, make it one. + if ( !thingIsObject ) { + thingObject[ thing ] = value + } + + // Go through the things of items to set. + for ( thingItem in thingObject ) { + + // Grab the value of the thing. + thingValue = thingObject[ thingItem ] + + // 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 ) + } + + // 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() + } + + // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`. + return options.muted ? P : P.trigger( 'set', thingObject ) + }, //set + + + /** + * Get something + */ + get: function( thing, format ) { + + // Make sure there’s something to get. + thing = thing || 'value' + + // 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' + } + + // 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 + + + + /** + * Bind events on the things. + */ + on: function( thing, method, internal ) { + + var thingName, thingMethod, + thingIsObject = $.isPlainObject( thing ), + thingObject = thingIsObject ? thing : {} + + if ( thing ) { + + // 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 ) { + + // Grab the method of the thing. + thingMethod = thingObject[ thingName ] + + // If it was an internal binding, prefix it. + if ( internal ) { + thingName = '_' + thingName + } + + // 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 ) + } + } + + return P + }, //on + + + + /** + * 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 + + + /** + * Wrap the picker holder components together. + */ + function createWrappedComponent() { + + // Create a picker wrapper holder + return PickerConstructor._.node( 'div', + + // Create a picker wrapper node + PickerConstructor._.node( 'div', + + // Create a picker frame + PickerConstructor._.node( 'div', + + // Create a picker box node + PickerConstructor._.node( 'div', + + // Create the components nodes. + P.component.nodes( STATE.open ), + + // The picker box class + CLASSES.box + ), + + // Picker wrap class + CLASSES.wrap + ), + + // Picker frame class + CLASSES.frame + ), + + // Picker holder class + CLASSES.holder + ) //endreturn + } //createWrappedComponent + + + + /** + * Prepare the input element with all bindings. + */ + 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 + ) + + + // Only bind keydown events if the element isn’t editable. + if ( !SETTINGS.editable ) { + + $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.eq(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, + expanded: false, + readonly: false, + owns: ELEMENT.id + '_root' + }) + } + + + /** + * Prepare the root picker element with all bindings. + */ + function prepareElementRoot() { + + P.$root. + + on({ + + // For iOS8. + keydown: handleKeydownEvent, + + // 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 ) { + + var target = event.target + + // Make sure the target isn’t the root holder so it can bubble up. + if ( target != P.$root.children()[ 0 ] ) { + + event.stopPropagation() + + // * 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' )) { + + event.preventDefault() + + // Re-focus onto the root so that users can click away + // from elements focused within the picker. + P.$root.eq(0).focus() + } + } + } + }). + + // 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 ). + + // If there’s a click on an actionable element, carry out the actions. + on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() { + + var $target = $( this ), + targetData = $target.data(), + targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ), + + // * For IE, non-focusable elements can be active elements as well + // (http://stackoverflow.com/a/2684561). + activeElement = getActiveElement() + activeElement = activeElement && ( activeElement.type || activeElement.href ) + + // 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 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 } ) + } + + // If something is picked, set `select` then close with focus. + else if ( !targetDisabled && 'pick' in targetData ) { + P.set( 'select', targetData.pick ) + } + + // If a “clear” button is pressed, empty the values and close with focus. + else if ( targetData.clear ) { + P.clear().close( true ) + } + + else if ( targetData.close ) { + P.close( true ) + } + + }) //P.$root + + aria( P.$root[0], 'hidden', true ) + } + + + /** + * Prepare the hidden input element along with all bindings. + */ + function prepareElementHidden() { + + var name + + 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] + } + + P._hidden = $( + '' + )[0] + + $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) : + '' + }) + + + // Insert the hidden input as specified in the settings. + if ( SETTINGS.container ) $( SETTINGS.container ).append( P._hidden ) + else $ELEMENT.after( P._hidden ) + } + + + // For iOS8. + function handleKeydownEvent( event ) { + + var keycode = event.keyCode, + + // 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 + } + + // 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] ) { + + // 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() } + } + } + + + // 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 ) + } + + // And then finally open the picker. + P.open() + } + + + // Return a new picker instance. + return new PickerInstance() +} //PickerConstructor + + + +/** + * The default classes and prefix to use for the HTML classes. + */ +PickerConstructor.klasses = function( prefix ) { + prefix = prefix || 'picker' + return { + + picker: prefix, + opened: prefix + '--opened', + focused: prefix + '--focused', + + input: prefix + '__input', + active: prefix + '__input--active', + target: prefix + '__input--target', + + holder: prefix + '__holder', + + frame: prefix + '__frame', + wrap: prefix + '__wrap', + + box: prefix + '__box' + } +} //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] + } + + // For normal browsers. + else if ( window.getComputedStyle ) { + theme = getComputedStyle( element )[prop] + } + + return theme == 'fixed' +} + + + +/** + * Get the width of the browser’s scrollbar. + * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js + */ +function getScrollbarWidth() { + + if ( $html.height() <= $window.height() ) { + return 0 + } + + var $outer = $( '
              ' ). + appendTo( 'body' ) + + // Get the width without scrollbars. + var widthWithoutScroll = $outer[0].offsetWidth + + // Force adding scrollbars. + $outer.css( 'overflow', 'scroll' ) + + // Add the inner div. + var $inner = $( '
              ' ).appendTo( $outer ) + + // Get the width with scrollbars. + var widthWithScroll = $inner[0].offsetWidth + + // Remove the divs. + $outer.remove() + + // Return the difference between the widths. + return widthWithoutScroll - widthWithScroll +} + + + +/** + * PickerConstructor helper methods. + */ +PickerConstructor._ = { + + /** + * Create a group of nodes. Expects: + * ` + { + min: {Integer}, + max: {Integer}, + i: {Integer}, + node: {String}, + item: {Function} + } + * ` + */ + group: function( groupObject ) { + + var + // Scope for the looped object + loopObjectScope, + + // Create the nodes list + nodesList = '', + + // The counter starts from the `min` + counter = PickerConstructor._.trigger( groupObject.min, groupObject ) + + + // Loop from the `min` to `max`, incrementing by `i` + for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) { + + // Trigger the `item` function within scope of the object + loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] ) + + // 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 + + + /** + * 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 '' + + // If the item is an array, do a join + item = $.isArray( item ) ? item.join( '' ) : item + + // Check for the class + klass = klass ? ' class="' + klass + '"' : '' + + // Check for any attributes + attribute = attribute ? ' ' + attribute : '' + + // Return the wrapped item + return '<' + wrapper + klass + attribute + '>' + item + '' + }, //node + + + /** + * 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 + }, + + + /** + * If the second character is a digit, length is 2 otherwise 1. + */ + digits: function( string ) { + return ( /\d/ ).test( string[ 1 ] ) ? 2 : 1 + }, + + + /** + * Tell if something is a date object. + */ + isDate: function( value ) { + return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() ) + }, + + + /** + * Tell if something is an integer. + */ + isInteger: function( value ) { + return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0 + }, + + + /** + * Create ARIA attribute strings. + */ + ariaAttr: ariaAttr +} //PickerConstructor._ + + + +/** + * Extend the picker with a component and defaults. + */ +PickerConstructor.extend = function( name, Component ) { + + // Extend jQuery. + $.fn[ name ] = function( options, action ) { + + // Grab the component data. + var componentData = this.data( name ) + + // If the picker is requested, return the data object. + if ( options == 'picker' ) { + return componentData + } + + // 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 ] ) + } + + // 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]) + } + } + 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 + + +})); + + diff --git a/node_modules/materialize-css/js/dropdown.js b/node_modules/materialize-css/js/dropdown.js new file mode 100644 index 0000000..ccbefc9 --- /dev/null +++ b/node_modules/materialize-css/js/dropdown.js @@ -0,0 +1,265 @@ +(function ($) { + + // Add posibility to scroll to selected option + // usefull for select for example + $.fn.scrollTo = function(elem) { + $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top); + return this; + }; + + $.fn.dropdown = function (options) { + var defaults = { + inDuration: 300, + outDuration: 225, + constrainWidth: true, // Constrains width of dropdown to the activator + hover: false, + gutter: 0, // Spacing from edge + belowOrigin: false, + alignment: 'left', + stopPropagation: false + }; + + // 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; + } + + 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'); + } + + updateOptions(); + + // Attach dropdown to its activator + origin.after(activates); + + /* + 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; + } + + // Check html data attributes + updateOptions(); + + // Set Dropdown state + activates.addClass('active'); + origin.addClass('active'); + + // Constrain width + if (curr_options.constrainWidth === true) { + activates.css('width', origin.outerWidth()); + + } 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; + + // Below Origin + var verticalOffset = 0; + if (curr_options.belowOrigin === true) { + verticalOffset = originHeight; + } + + // 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'; + + } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) { + // Dropdown goes past screen on left, force left alignment + currAlignment = 'left'; + } + // 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(); + } + } + + // Handle edge alignment + if (currAlignment === 'left') { + gutterSpacing = curr_options.gutter; + leftPosition = origin.position().left + gutterSpacing; + } + else if (currAlignment === 'right') { + var offsetRight = origin.position().left + origin.outerWidth() - activates.outerWidth(); + gutterSpacing = -curr_options.gutter; + leftPosition = offsetRight + gutterSpacing; + } + + // Position dropdown + activates.css({ + position: 'absolute', + top: origin.position().top + verticalOffset + scrollYOffset, + left: leftPosition + scrollXOffset + }); + + + // Show dropdown + activates.stop(true, true).css('opacity', 0) + .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'}); + + // Add click close handler to document + $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) { + if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) { + hideDropdown(); + $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id')); + } + }); + } + + function hideDropdown() { + // Check for simultaneous focus and click events. + isFocused = false; + activates.fadeOut(curr_options.outDuration); + activates.removeClass('active'); + origin.removeClass('active'); + $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id')); + setTimeout(function() { activates.css('max-height', ''); }, curr_options.outDuration); + } + + // Hover + if (curr_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; + } + }); + + 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.unbind('click.' + origin.attr('id')); + origin.bind('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') + ' touchstart.' + 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 )); diff --git a/node_modules/materialize-css/js/forms.js b/node_modules/materialize-css/js/forms.js new file mode 100644 index 0000000..ce7a0fa --- /dev/null +++ b/node_modules/materialize-css/js/forms.js @@ -0,0 +1,778 @@ +(function ($) { + $(document).ready(function() { + + // Function to update labels of text fields + 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) { + var $this = $(this); + if ($(element).val().length > 0 || 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'); + } + }); + }; + + // 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'; + + // Add active if form auto complete + $(document).on('change', input_selector, function () { + 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() { + Materialize.updateTextFields(); + }); + + // HTML DOM FORM RESET handling + $(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').removeClass('active'); + } + }); + + // Reset select + formReset.find('select.initialized').each(function () { + var reset_text = formReset.find('option[selected]').text(); + formReset.siblings('input.select-dropdown').val(reset_text); + }); + } + }); + + // Add active when element has focus + $(document).on('focus', input_selector, function () { + $(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) { + selector += ", label"; + } + + $inputElement.siblings(selector).removeClass('active'); + + validate_field($inputElement); + }); + + 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.hasClass('validate')) { + object.removeClass('valid'); + object.removeClass('invalid'); + } + } + else { + if (object.hasClass('validate')) { + // Check for character counter attributes + if ((object.is(':valid') && hasLength && (len <= lenAttr)) || (object.is(':valid') && !hasLength)) { + object.removeClass('invalid'); + object.addClass('valid'); + } + else { + object.removeClass('valid'); + object.addClass('invalid'); + } + } + } + }; + + // 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(); + if (!hiddenDiv.length) { + hiddenDiv = $('
              '); + $('body').append(hiddenDiv); + } + var text_area_selector = '.materialize-textarea'; + + function textareaAutoResize($textarea) { + // Set font properties of hiddenDiv + + var fontFamily = $textarea.css('font-family'); + var fontSize = $textarea.css('font-size'); + var lineHeight = $textarea.css('line-height'); + + if (fontSize) { hiddenDiv.css('font-size', fontSize); } + if (fontFamily) { hiddenDiv.css('font-family', fontFamily); } + if (lineHeight) { hiddenDiv.css('line-height', lineHeight); } + + 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); + } + + $textarea.css('height', hiddenDiv.height()); + } + + $(text_area_selector).each(function () { + var $textarea = $(this); + if ($textarea.val().length) { + textareaAutoResize($textarea); + } + }); + + $('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'); + 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 * + ****************/ + + var range_type = 'input[type=range]'; + var range_mousedown = false; + var left; + + $(range_type).each(function () { + var thumb = $(''); + $(this).after(thumb); + }); + + var range_wrapper = '.range-field'; + $(document).on('change', range_type, function(e) { + var thumb = $(this).siblings('.thumb'); + thumb.find('.value').html($(this).val()); + }); + + $(document).on('input mousedown touchstart', range_type, function(e) { + var thumb = $(this).siblings('.thumb'); + var width = $(this).outerWidth(); + + // If thumb indicator does not exist yet, create it + if (thumb.length <= 0) { + thumb = $(''); + $(this).after(thumb); + } + + // Set indicator value + thumb.find('.value').html($(this).val()); + + range_mousedown = true; + $(this).addClass('active'); + + if (!thumb.hasClass('active')) { + thumb.velocity({ height: "30px", width: "30px", top: "-20px", marginLeft: "-15px"}, { duration: 300, easing: 'easeOutExpo' }); + } + + if (e.type !== 'input') { + 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 (left < 0) { + left = 0; + } + 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() { + range_mousedown = false; + $(this).removeClass('active'); + }); + + $(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(); + + if (left < 0) { + left = 0; + } + else if (left > width) { + left = width; + } + thumb.addClass('active').css('left', left); + thumb.find('.value').html(thumb.siblings(range_type).val()); + } + }); + + $(document).on('mouseout touchleave', range_wrapper, function() { + if (!range_mousedown) { + + var thumb = $(this).children('.thumb'); + + if (thumb.hasClass('active')) { + thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: '-6px'}, { duration: 100 }); + } + thumb.removeClass('active'); + } + }); + + /************************** + * Auto complete plugin * + *************************/ + $.fn.autocomplete = function (options) { + // Defaults + var defaults = { + data: {}, + limit: Infinity, + onAutocomplete: null + }; + + options = $.extend(defaults, options); + + return this.each(function() { + var $input = $(this); + var data = options.data, + count = 0, + activeIndex = 0, + 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 = 0; + $autocomplete.find('.active').removeClass('active'); + } + + // Perform search + $input.off('keyup.autocomplete').on('keyup.autocomplete', function (e) { + // Reset count. + count = 0; + + // Don't capture enter or arrow key usage. + if (e.which === 13 || + e.which === 38 || + e.which === 40) { + return; + } + + var val = $input.val().toLowerCase(); + + // Check if the input isn't empty + if (oldVal !== val) { + $autocomplete.empty(); + resetCurrentElement(); + + if (val !== '') { + for(var key in data) { + if (data.hasOwnProperty(key) && + key.toLowerCase().indexOf(val) !== -1 && + key.toLowerCase() !== val) { + // 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) { + liElement = $autocomplete.children('li').eq(activeIndex); + if (liElement.length) { + liElement.click(); + 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) && + $active.length) { + activeIndex++; + } + + $active.removeClass('active'); + $autocomplete.children('li').eq(activeIndex).addClass('active'); + } + }); + + // Set input value + $autocomplete.on('click', 'li', function () { + var text = $(this).text().trim(); + $input.val(text); + $input.trigger('change'); + $autocomplete.empty(); + resetCurrentElement(); + + // Handle onAutocomplete callback. + if (typeof(options.onAutocomplete) === "function") { + options.onAutocomplete.call(this, text); + } + }); + } + }); + }; + + }); // End of $(document).ready + + /******************* + * Select Plugin * + ******************/ + $.fn.material_select = function (callback) { + $(this).each(function(){ + var $select = $(this); + + if ($select.hasClass('browser-default')) { + return; // Continue to next (return false breaks out of entire loop) + } + + var multiple = $select.attr('multiple') ? true : false, + lastID = $select.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(); + + $select.unwrap(); + $('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; + } + + var uniqueID = Materialize.guid(); + $select.data('select-id', uniqueID); + var wrapper = $('
              '); + wrapper.addClass($select.attr('class')); + 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 + var disabledClass = (option.is(':disabled')) ? 'disabled ' : ''; + var optgroupClass = (type === 'optgroup-option') ? 'optgroup-option ' : ''; + + // 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. + if (type === 'multiple') { + options.append($('
            • ' + option.html() + '
            • ')); + } else { + options.append($('
            • ' + option.html() + '
            • ')); + } + return true; + } + + // Check for multiple type. + if (type === 'multiple') { + options.append($('
            • ' + option.html() + '
            • ')); + } else { + options.append($('
            • ' + 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:not(.optgroup)').each(function (i) { + $(this).click(function (e) { + // Check if option element is disabled + 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, $(this).index(), $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 + $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.replace(/"/g, '"'); + + var $newSelect = $(''); + $select.before($newSelect); + $newSelect.before(dropdownIcon); + + $newSelect.after(options); + // Check if section element is disabled + if (!$select.is(':disabled')) { + $newSelect.dropdown({'hover': false, 'closeOnClick': false}); + } + + // Copy tabindex + if ($select.attr('tabindex')) { + $($newSelect[0]).attr('tabindex', $select.attr('tabindex')); + } + + $select.addClass('initialized'); + + $newSelect.on({ + 'focus': function (){ + if ($('ul.select-dropdown').not(options[0]).is(':visible')) { + $('input.select-dropdown').trigger('close'); + } + 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); + } + }, + 'click': function (e){ + e.stopPropagation(); + } + }); + + $newSelect.on('blur', function() { + if (!multiple) { + $(this).trigger('close'); + } + options.find('li.selected').removeClass('selected'); + }); + + options.hover(function() { + optionsHover = true; + }, function () { + optionsHover = false; + }); + + $(window).on({ + 'click': function () { + multiple && (optionsHover || $newSelect.trigger('close')); + } + }); + + // 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").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 + 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); + }; + + $newSelect.on('keydown', onKeyDown); + }); + + 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').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 )); diff --git a/node_modules/materialize-css/js/global.js b/node_modules/materialize-css/js/global.js new file mode 100644 index 0000000..ec83d39 --- /dev/null +++ b/node_modules/materialize-css/js/global.js @@ -0,0 +1,153 @@ +// Required for Meteor package, the use of window prevents export by Meteor +(function(window){ + if(window.Package){ + Materialize = {}; + } else { + window.Materialize = {}; + } +})(window); + + +/* + * 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)); + + +// Unique ID +Materialize.guid = (function() { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + 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; + }; +}; + + +// Velocity has conflicts when loaded with jQuery, this will check for it +// First, check if in noConflict mode +var Vel; +if (jQuery) { + Vel = jQuery.Velocity; +} else if ($) { + Vel = $.Velocity; +} else { + Vel = Velocity; +} diff --git a/node_modules/materialize-css/js/hammer.min.js b/node_modules/materialize-css/js/hammer.min.js new file mode 100644 index 0000000..6c232c8 --- /dev/null +++ b/node_modules/materialize-css/js/hammer.min.js @@ -0,0 +1 @@ +!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 || $(this).hasClass('black')) { + $(this).css('color', 'rgba(255,255,255,.9'); + } + }); + }); + + // Floating-Fixed table of contents + 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 + var $bsa = $(".buysellads"), + $timesToCheck = 3; + function checkForChanges() { + if (!$bsa.find('#carbonads').length) { + $timesToCheck -= 1; + if ($timesToCheck >= 0) { + setTimeout(checkForChanges, 500); + } + else { + var donateAd = $(''); + + $bsa.append(donateAd); + } + } + + } + 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({ + url: "https://api.github.com/repos/dogfalo/materialize/commits/master", + dataType: "json", + success: function (data) { + var sha = data.sha, + date = jQuery.timeago(data.commit.author.date); + if (window_width < 1120) { + sha = sha.substring(0,7); + } + $('.github-commit').find('.date').html(date); + $('.github-commit').find('.sha').html(sha).attr('href', data.html_url); + } + }); + } + + // Toggle Flow Text + var toggleFlowTextButton = $('#flow-toggle'); + toggleFlowTextButton.click( function(){ + $('#flow-text-demo').children('p').each(function(){ + $(this).toggleClass('flow-text'); + }); + }); + +// Toggle Containers on page + var toggleContainersButton = $('#container-toggle-button'); + toggleContainersButton.click(function(){ + $('body .browser-window .container, .had-container').each(function(){ + $(this).toggleClass('had-container'); + $(this).toggleClass('container'); + if ($(this).hasClass('container')) { + toggleContainersButton.text("Turn off Containers"); + } + else { + toggleContainersButton.text("Turn on Containers"); + } + }); + }); + + // Detect touch screen and enable scrollbar if necessary + function is_touch_device() { + try { + document.createEvent("TouchEvent"); + return true; + } catch (e) { + return false; + } + } + if (is_touch_device()) { + $('#nav-mobile').css({ overflow: 'auto'}); + } + + // Set checkbox on forms.html to indeterminate + var indeterminateCheckbox = document.getElementById('indeterminate-checkbox'); + if (indeterminateCheckbox !== null) + 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 + $('.carousel.carousel-slider').carousel({fullWidth: true}); + $('.carousel').carousel(); + $('.slider').slider(); + $('.parallax').parallax(); + $('.modal').modal(); + $('.scrollspy').scrollSpy(); + $('.button-collapse').sideNav({'edge': 'left'}); + $('.datepicker').pickadate({selectYears: 20}); + $('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({ + autocompleteData: { + 'Apple': null, + 'Microsoft': null, + 'Google': null + } + }); + + + }); // end of document ready +})(jQuery); // end of jQuery name space diff --git a/node_modules/materialize-css/js/initial.js b/node_modules/materialize-css/js/initial.js new file mode 100644 index 0000000..13f317d --- /dev/null +++ b/node_modules/materialize-css/js/initial.js @@ -0,0 +1,11 @@ +// Check for jQuery. +if (typeof(jQuery) === 'undefined') { + var jQuery; + // 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/node_modules/materialize-css/js/jquery.easing.1.3.js b/node_modules/materialize-css/js/jquery.easing.1.3.js new file mode 100644 index 0000000..2e67998 --- /dev/null +++ b/node_modules/materialize-css/js/jquery.easing.1.3.js @@ -0,0 +1,205 @@ +/* + * 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/node_modules/materialize-css/js/jquery.hammer.js b/node_modules/materialize-css/js/jquery.hammer.js new file mode 100644 index 0000000..e444b5c --- /dev/null +++ b/node_modules/materialize-css/js/jquery.hammer.js @@ -0,0 +1,33 @@ +(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); + }); + }; + + // 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); +})); diff --git a/node_modules/materialize-css/js/jquery.timeago.min.js b/node_modules/materialize-css/js/jquery.timeago.min.js new file mode 100644 index 0000000..102a56c --- /dev/null +++ b/node_modules/materialize-css/js/jquery.timeago.min.js @@ -0,0 +1 @@ +!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){function e(){var e=a(this),o=r.settings;return isNaN(e.datetime)||(0==o.cutoff||Math.abs(n(e.datetime))0)||r.isTime(e)&&e.attr("title")||e.attr("title",a)}return e.data("timeago")}function i(t){return r.inWords(n(t))}function n(t){return(new Date).getTime()-t.getTime()}t.timeago=function(e){return i(e instanceof Date?e:"string"==typeof e?t.timeago.parse(e):"number"==typeof e?new Date(e):t.timeago.datetime(e))};var r=t.timeago;t.extend(t.timeago,{settings:{refreshMillis:6e4,allowPast:!0,allowFuture:!1,localeTitle:!1,cutoff:0,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",inPast:"any moment now",seconds:"less than a minute",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",wordSeparator:" ",numbers:[]}},inWords:function(e){function a(a,n){var r=t.isFunction(a)?a(n,e):a,o=i.numbers&&i.numbers[n]||n;return r.replace(/%d/i,o)}if(!this.settings.allowPast&&!this.settings.allowFuture)throw"timeago allowPast and allowFuture settings can not both be set to false.";var i=this.settings.strings,n=i.prefixAgo,r=i.suffixAgo;if(this.settings.allowFuture&&0>e&&(n=i.prefixFromNow,r=i.suffixFromNow),!this.settings.allowPast&&e>=0)return this.settings.strings.inPast;var o=Math.abs(e)/1e3,s=o/60,u=s/60,m=u/24,l=m/365,d=45>o&&a(i.seconds,Math.round(o))||90>o&&a(i.minute,1)||45>s&&a(i.minutes,Math.round(s))||90>s&&a(i.hour,1)||24>u&&a(i.hours,Math.round(u))||42>u&&a(i.day,1)||30>m&&a(i.days,Math.round(m))||45>m&&a(i.month,1)||365>m&&a(i.months,Math.round(m/30))||1.5>l&&a(i.year,1)||a(i.years,Math.round(l)),f=i.wordSeparator||"";return void 0===i.wordSeparator&&(f=" "),t.trim([n,d,r].join(f))},parse:function(e){var a=t.trim(e);return a=a.replace(/\.\d+/,""),a=a.replace(/-/,"/").replace(/-/,"/"),a=a.replace(/T/," ").replace(/Z/," UTC"),a=a.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"),a=a.replace(/([\+\-]\d\d)$/," $100"),new Date(a)},datetime:function(e){var a=t(e).attr(r.isTime(e)?"datetime":"title");return r.parse(a)},isTime:function(e){return"time"===t(e).get(0).tagName.toLowerCase()}});var o={init:function(){var a=t.proxy(e,this);a();var i=r.settings;i.refreshMillis>0&&(this._timeagoInterval=setInterval(a,i.refreshMillis))},update:function(a){var i=r.parse(a);t(this).data("timeago",{datetime:i}),r.settings.localeTitle&&t(this).attr("title",i.toLocaleString()),e.apply(this)},updateFromDOM:function(){t(this).data("timeago",{datetime:r.parse(t(this).attr(r.isTime(this)?"datetime":"title"))}),e.apply(this)},dispose:function(){this._timeagoInterval&&(window.clearInterval(this._timeagoInterval),this._timeagoInterval=null)}};t.fn.timeago=function(t,e){var a=t?o[t]:o.init;if(!a)throw new Error("Unknown function name '"+t+"' for timeago");return this.each(function(){a.call(this,e)}),this},document.createElement("abbr"),document.createElement("time")}); \ No newline at end of file diff --git a/node_modules/materialize-css/js/materialbox.js b/node_modules/materialize-css/js/materialbox.js new file mode 100644 index 0000000..64e77a7 --- /dev/null +++ b/node_modules/materialize-css/js/materialbox.js @@ -0,0 +1,285 @@ +(function ($) { + + $.fn.materialbox = function () { + + return this.each(function() { + + if ($(this).hasClass('initialized')) { + return; + } + + $(this).addClass('initialized'); + + var overlayActive = false; + var doneAnimating = true; + var inDuration = 275; + var outDuration = 200; + var origin = $(this); + var placeholder = $('
              ').addClass('material-placeholder'); + var originalWidth = 0; + var originalHeight = 0; + var ancestorsChanged; + var ancestor; + origin.wrap(placeholder); + + + 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) { + 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, + position: 'relative', + top: 0, + 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, + '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(); + }); + + // 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') !== "") { + var $photo_caption = $('
              '); + $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'}); + } + + // Resize Image + var ratio = 0; + var widthPercent = originalWidth / windowWidth; + var heightPercent = originalHeight / windowHeight; + var newWidth = 0; + var newHeight = 0; + + if (widthPercent > heightPercent) { + ratio = originalHeight / originalWidth; + newWidth = windowWidth * 0.9; + newHeight = windowWidth * 0.9 * ratio; + } + else { + ratio = originalWidth / originalHeight; + 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;} + } + ); + } // 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;} + } + ); // 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 + if (overlayActive) { + returnToOriginal(); + } + } + }); + + + // This function returns the modaled image to the original spot + function returnToOriginal() { + + 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'); + + origin.velocity("stop", true); + $('#materialbox-overlay').velocity("stop", true); + $('.materialbox-caption').velocity("stop", true); + + + $('#materialbox-overlay').velocity({opacity: 0}, { + duration: outDuration, // Delay prevents animation overlapping + queue: false, easing: 'easeOutQuad', + complete: function(){ + // Remove Overlay + overlayActive = false; + $(this).remove(); + } + }); + + // Resize Image + origin.velocity( + { + width: originalWidth, + height: originalHeight, + left: 0, + top: 0 + }, + { + duration: outDuration, + queue: false, easing: 'easeOutQuad' + } + ); + + // 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: '' + }); + + origin.css({ + height: '', + top: '', + left: '', + width: '', + 'max-width': '', + position: '', + 'z-index': '', + 'will-change': '' + }); + + // Remove class + origin.removeClass('active'); + doneAnimating = true; + $(this).remove(); + + // Remove overflow overrides on ancestors + if (ancestorsChanged) { + ancestorsChanged.css('overflow', ''); + } + } + }); + + } + }); + }; + + $(document).ready(function(){ + $('.materialboxed').materialbox(); + }); + +}( jQuery )); diff --git a/node_modules/materialize-css/js/materialize.js b/node_modules/materialize-css/js/materialize.js new file mode 100644 index 0000000..f3d4137 --- /dev/null +++ b/node_modules/materialize-css/js/materialize.js @@ -0,0 +1,18 @@ +//@prepros-append "jquery.easing.1.3.js" +//@prepros-append "velocity.min.js" +//@prepros-append "hammer.min.js"; +//@prepros-append "jquery.hammer.js"; +//@prepros-append "collapsible.js" +//@prepros-append "dropdown.js" +//@prepros-append "leanModal.js" +//@prepros-append "materialbox.js" +//@prepros-append "parallax.js" +//@prepros-append "tabs.js" +//@prepros-append "tooltip.js" +//@prepros-append "waves.js" +//@prepros-append "toasts.js" +//@prepros-append "sideNav.js" +//@prepros-append "scrollspy.js" +//@prepros-append "forms.js" +//@prepros-append "date_picker/picker.js" +//@prepros-append "date_picker/picker.date.js" \ No newline at end of file diff --git a/node_modules/materialize-css/js/modal.js b/node_modules/materialize-css/js/modal.js new file mode 100644 index 0000000..aa788a7 --- /dev/null +++ b/node_modules/materialize-css/js/modal.js @@ -0,0 +1,184 @@ +(function($) { + var _stack = 0, + _lastID = 0, + _generateID = function() { + _lastID++; + return 'materialize-modal-overlay-' + _lastID; + }; + + var methods = { + init : function(options) { + var defaults = { + opacity: 0.5, + inDuration: 350, + outDuration: 250, + ready: undefined, + complete: undefined, + dismissible: true, + startingTop: '4%', + endingTop: '10%' + }; + + // Override defaults + options = $.extend(defaults, options); + + return this.each(function() { + var $modal = $(this); + var modal_id = $(this).attr("id") || '#' + $(this).data('target'); + + var closeModal = function() { + var overlayID = $modal.data('overlay-id'); + var $overlay = $('#' + overlayID); + $modal.removeClass('open'); + + // Enable scrolling + $('body').css({ + overflow: '', + width: '' + }); + + $modal.find('.modal-close').off('click.close'); + $(document).off('keyup.modal' + overlayID); + + $overlay.velocity( { opacity: 0}, {duration: options.outDuration, queue: false, ease: "easeOutQuart"}); + + + // Define Bottom Sheet animation + var exitVelocityOptions = { + duration: options.outDuration, + queue: false, + ease: "easeOutCubic", + // Handle modal ready callback + complete: function() { + $(this).css({display:"none"}); + + // Call complete callback + if (typeof(options.complete) === "function") { + options.complete.call(this, $modal); + } + $overlay.remove(); + _stack--; + } + }; + if ($modal.hasClass('bottom-sheet')) { + $modal.velocity({bottom: "-100%", opacity: 0}, exitVelocityOptions); + } + else { + $modal.velocity( + { top: options.startingTop, opacity: 0, scaleX: 0.7}, + exitVelocityOptions + ); + } + }; + + var openModal = function($trigger) { + var $body = $('body'); + var oldWidth = $body.innerWidth(); + $body.css('overflow', 'hidden'); + $body.width(oldWidth); + + if ($modal.hasClass('open')) { + return; + } + + var overlayID = _generateID(); + var $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); + $modal.addClass('open'); + + $("body").append($overlay); + + if (options.dismissible) { + $overlay.click(function() { + closeModal(); + }); + // Return on ESC + $(document).on('keyup.modal' + overlayID, function(e) { + if (e.keyCode === 27) { // ESC key + closeModal(); + } + }); + } + + $modal.find(".modal-close").on('click.close', function(e) { + closeModal(); + }); + + $overlay.css({ display : "block", opacity : 0 }); + + $modal.css({ + display : "block", + opacity: 0 + }); + + $overlay.velocity({opacity: options.opacity}, {duration: options.inDuration, queue: false, ease: "easeOutCubic"}); + $modal.data('associated-overlay', $overlay[0]); + + // Define Bottom Sheet animation + var enterVelocityOptions = { + duration: options.inDuration, + queue: false, + ease: "easeOutCubic", + // Handle modal ready callback + complete: function() { + if (typeof(options.ready) === "function") { + options.ready.call(this, $modal, $trigger); + } + } + }; + if ($modal.hasClass('bottom-sheet')) { + $modal.velocity({bottom: "0", opacity: 1}, enterVelocityOptions); + } + else { + $.Velocity.hook($modal, "scaleX", 0.7); + $modal.css({ top: options.startingTop }); + $modal.velocity({top: options.endingTop, opacity: 1, scaleX: '1'}, enterVelocityOptions); + } + + }; + + // Reset handlers + $(document).off('click.modalTrigger', 'a[href="#' + modal_id + '"], [data-target="' + modal_id + '"]'); + $(this).off('openModal'); + $(this).off('closeModal'); + + // Close Handlers + $(document).on('click.modalTrigger', 'a[href="#' + modal_id + '"], [data-target="' + modal_id + '"]', function(e) { + options.startingTop = ($(this).offset().top - $(window).scrollTop()) /1.15; + openModal($(this)); + e.preventDefault(); + }); // done set on click + + $(this).on('openModal', function() { + var modal_id = $(this).attr("href") || '#' + $(this).data('target'); + openModal(); + }); + + $(this).on('closeModal', function() { + closeModal(); + }); + }); // done return + }, + open : function() { + $(this).trigger('openModal'); + }, + close : function() { + $(this).trigger('closeModal'); + } + }; + + $.fn.modal = 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.modal' ); + } + }; +})(jQuery); diff --git a/node_modules/materialize-css/js/parallax.js b/node_modules/materialize-css/js/parallax.js new file mode 100644 index 0000000..8c82a37 --- /dev/null +++ b/node_modules/materialize-css/js/parallax.js @@ -0,0 +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)"); + } + + } + + // Wait for image load + $this.children("img").one("load", function() { + updateParallax(true); + }).each(function() { + if (this.complete) $(this).trigger("load"); + }); + + $(window).scroll(function() { + window_width = $(window).width(); + updateParallax(false); + }); + + $(window).resize(function() { + window_width = $(window).width(); + updateParallax(false); + }); + + }); + + }; +}( jQuery )); diff --git a/node_modules/materialize-css/js/prism.js b/node_modules/materialize-css/js/prism.js new file mode 100644 index 0000000..da77df9 --- /dev/null +++ b/node_modules/materialize-css/js/prism.js @@ -0,0 +1,8 @@ +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+scss+bash */ +self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{};var Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(d instanceof a)){g.lastIndex=0;var m=g.exec(d);if(m){c&&(f=m[1].length);var y=m.index-1+f,m=m[0].slice(f),v=m.length,k=y+v,b=d.slice(0,y+1),w=d.slice(k+1),O=[p,1];b&&O.push(b);var N=new a(l,u?t.tokenize(m,u):m,h);O.push(N),w&&O.push(w),Array.prototype.splice.apply(r,O)}}}}}return r},hooks:{all:{},add:function(e,n){var a=t.hooks.all;a[e]=a[e]||[],a[e].push(n)},run:function(e,n){var a=t.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(n)}}},n=t.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(n.stringify=function(e,a,r){if("string"==typeof e)return e;if("[object Array]"==Object.prototype.toString.call(e))return e.map(function(t){return n.stringify(t,a,e)}).join("");var i={type:e.type,content:n.stringify(e.content,a,r),tag:"span",classes:["token",e.type],attributes:{},language:a,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}t.hooks.run("wrap",i);var s="";for(var o in i.attributes)s+=o+'="'+(i.attributes[o]||"")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'" '+s+">"+i.content+""},!self.document)return self.addEventListener?(self.addEventListener("message",function(e){var n=JSON.parse(e.data),a=n.language,r=n.code;self.postMessage(JSON.stringify(t.util.encode(t.tokenize(r,t.languages[a])))),self.close()},!1),self.Prism):self.Prism;var a=document.getElementsByTagName("script");return a=a[a.length-1],a&&(t.filename=a.src,document.addEventListener&&!a.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)),self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism);; +Prism.languages.markup={comment://g,prolog:/<\?.+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/\&#?[\da-z]{1,8};/gi},Prism.hooks.add("wrap",function(t){"entity"===t.type&&(t.attributes.title=t.content.replace(/&/,"&"))});; +Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/gi,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,punctuation:/[\{\};:]/g,"function":/[-a-z0-9]+(?=\()/gi},Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/[\w\W]*?<\/style>/gi,inside:{tag:{pattern:/|<\/style>/gi,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css},alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').+?\1/gi,inside:{"attr-name":{pattern:/^\s*style/gi,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/gi,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag));; +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//g,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*?(\r?\n|$)/g,lookbehind:!0}],string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/gi,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/gi,inside:{punctuation:/\(/}},number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};; +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|-?Infinity)\b/g,"function":/(?!\d)[a-z0-9_$]+(?=\()/gi}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/[\w\W]*?<\/script>/gi,inside:{tag:{pattern:/|<\/script>/gi,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript},alias:"language-javascript"}});; +Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|\/\/.*?(\r?\n|$))/g,lookbehind:!0},atrule:/@[\w-]+(?=\s+(\(|\{|;))/gi,url:/([-a-z]+-)*url(?=\()/gi,selector:/([^@;\{\}\(\)]?([^@;\{\}\(\)]|&|\#\{\$[-_\w]+\})+)(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/gm}),Prism.languages.insertBefore("scss","atrule",{keyword:/@(if|else if|else|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)|(?=@for\s+\$[-_\w]+\s)+from/i}),Prism.languages.insertBefore("scss","property",{variable:/((\$[-_\w]+)|(#\{\$[-_\w]+\}))/i}),Prism.languages.insertBefore("scss","ignore",{placeholder:/%[-_\w]+/i,statement:/\B!(default|optional)\b/gi,"boolean":/\b(true|false)\b/g,"null":/\b(null)\b/g,operator:/\s+([-+]{1,2}|={1,2}|!=|\|?\||\?|\*|\/|\%)\s+/g});; +Prism.languages.bash=Prism.languages.extend("clike",{comment:{pattern:/(^|[^"{\\])(#.*?(\r?\n|$))/g,lookbehind:!0},string:{pattern:/("|')(\\?[\s\S])*?\1/g,inside:{property:/\$([a-zA-Z0-9_#\?\-\*!@]+|\{[^\}]+\})/g}},keyword:/\b(if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)\b/g}),Prism.languages.insertBefore("bash","keyword",{property:/\$([a-zA-Z0-9_#\?\-\*!@]+|\{[^}]+\})/g}),Prism.languages.insertBefore("bash","comment",{important:/(^#!\s*\/bin\/bash)|(^#!\s*\/bin\/sh)/g});; diff --git a/node_modules/materialize-css/js/pushpin.js b/node_modules/materialize-css/js/pushpin.js new file mode 100644 index 0000000..5f42246 --- /dev/null +++ b/node_modules/materialize-css/js/pushpin.js @@ -0,0 +1,71 @@ +(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); + + + $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); + } + }); + } + + $(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/node_modules/materialize-css/js/scrollFire.js b/node_modules/materialize-css/js/scrollFire.js new file mode 100644 index 0000000..96d1230 --- /dev/null +++ b/node_modules/materialize-css/js/scrollFire.js @@ -0,0 +1,51 @@ +(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); diff --git a/node_modules/materialize-css/js/scrollspy.js b/node_modules/materialize-css/js/scrollspy.js new file mode 100644 index 0000000..9171cb7 --- /dev/null +++ b/node_modules/materialize-css/js/scrollspy.js @@ -0,0 +1,233 @@ +/** + * 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(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 + * @returns {jQuery} + */ + $.scrollSpy = function(selector, options) { + var defaults = { + throttle: 100, + scrollOffset: 200 // offset - 200 allows elements near bottom of page to scroll + }; + 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]) { + $('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', 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); diff --git a/node_modules/materialize-css/js/sideNav.js b/node_modules/materialize-css/js/sideNav.js new file mode 100644 index 0000000..3ae7554 --- /dev/null +++ b/node_modules/materialize-css/js/sideNav.js @@ -0,0 +1,376 @@ +(function ($) { + + var methods = { + init : function(options) { + var defaults = { + menuWidth: 300, + edge: 'left', + closeOnClick: false, + draggable: true + }; + options = $.extend(defaults, options); + + $(this).each(function(){ + var $this = $(this); + var menuId = $this.attr('data-activates'); + var menu = $("#"+ menuId); + + // Set to width + if (options.menuWidth != 300) { + menu.css('width', options.menuWidth); + } + + // Add Touch Area + 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.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.hasClass('fixed')) { + if (window.innerWidth > 992) { + menu.css('transform', 'translateX(0)'); + } + } + + // Window resize to reset on large screens 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').length !== 0 && menuOut) { + removeMenu(true); + } + else { + // menu.removeAttr('style'); + menu.css('transform', 'translateX(0%)'); + // menu.css('width', options.menuWidth); + } + } + else if (menuOut === false){ + if (options.edge === 'left') { + menu.css('transform', 'translateX(-100%)'); + } else { + menu.css('transform', 'translateX(100%)'); + } + + } + + }); + } + + // if closeOnClick, then add close event for all a tags in side sideNav + if (options.closeOnClick === true) { + menu.on("click.itemclick", "a:not(.collapsible-header)", function(){ + removeMenu(); + }); + } + + var removeMenu = function(restoreNav) { + panning = false; + menuOut = false; + // Reenable scrolling + $('body').css({ + overflow: '', + width: '' + }); + + $('#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.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 { + // Reset phantom div + $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); + } + } + }); + } + }; + + + + // Touch Event + var panning = false; + var menuOut = false; + + if (options.draggable) { + $dragTarget.on('click', function(){ + if (menuOut) { + removeMenu(); + } + }); + + $dragTarget.hammer({ + prevent_default: false + }).bind('pan', function(e) { + + 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; + + // 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(); + }); + $('body').append($overlay); + } + + // 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; + $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) { + + if (e.gesture.pointerType == "touch") { + var $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 () { + $(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: '' + }); + + // 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 () { + $(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 { + + // 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'}); + } + + $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', + complete: function () { + menuOut = true; + panning = 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'); + }, + 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 )); diff --git a/node_modules/materialize-css/js/slider.js b/node_modules/materialize-css/js/slider.js new file mode 100644 index 0000000..4995cf9 --- /dev/null +++ b/node_modules/materialize-css/js/slider.js @@ -0,0 +1,324 @@ +(function ($) { + + var methods = { + + init : function(options) { + var defaults = { + indicators: true, + height: 400, + transition: 500, + interval: 6000 + }; + options = $.extend(defaults, options); + + 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 $active_index = $slider.find('.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}); + } + } + + // 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; + + $active_index = $slider.find('.active').index(); + + // Only do if index changes + if ($active_index != index) { + $active = $slides.eq($active_index); + $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}); + } }); + 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).addClass('active'); + + + // Update indicators + if (options.indicators) { + $indicators.eq(index).addClass('active'); + } + } + } + + // Set height of slider + // If fullscreen, do nothing + if (!$this.hasClass('fullscreen')) { + if (options.indicators) { + // Add height if indicators are present + $this.height(options.height + 40); + } + else { + $this.height(options.height); + } + $slider.height(options.height); + } + + + // Set initial positions of captions + $slides.find('.caption').each(function () { + captionTransition($(this), 0); + }); + + // Move img src into background-image + $slides.find('img').each(function () { + 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) { + $indicators = $('
                '); + $slides.each(function( index ) { + var $indicator = $('
              • '); + + // Handle clicks on indicators + $indicator.click(function () { + var $parent = $slider.parent(); + var curr_index = $parent.find($(this)).index(); + moveToSlide(curr_index); + + // 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); + + }, options.transition + options.interval + ); + }); + $indicators.append($indicator); + }); + $this.append($indicators); + $indicators = $this.find('ul.indicators').find('li.indicator-item'); + } + + if ($active) { + $active.show(); + } + else { + $slides.first().addClass('active').velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'}); + + $active_index = 0; + $active = $slides.eq($active_index); + + // Update indicators + if (options.indicators) { + $indicators.eq($active_index).addClass('active'); + } + } + + // 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'}); + }); + + // auto scroll + $interval = setInterval( + function(){ + $active_index = $slider.find('.active').index(); + moveToSlide($active_index + 1); + + }, options.transition + options.interval + ); + + + // HammerJS, Swipe navigation + + // Touch Event + var panning = false; + var swipeLeft = false; + var swipeRight = false; + + $this.hammer({ + prevent_default: false + }).bind('pan', function(e) { + if (e.gesture.pointerType === "touch") { + + // reset interval + clearInterval($interval); + + 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'); + 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)) { + swipeRight = true; + } + // Swipe Right + else if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.65)) { + swipeLeft = true; + } + + // Make Slide Behind active slide visible + var next_slide; + if (swipeLeft) { + next_slide = $curr_slide.next(); + if (next_slide.length === 0) { + next_slide = $slides.first(); + } + next_slide.velocity({ opacity: 1 + }, {duration: 300, queue: false, easing: 'easeOutQuad'}); + } + if (swipeRight) { + next_slide = $curr_slide.prev(); + if (next_slide.length === 0) { + next_slide = $slides.last(); + } + next_slide.velocity({ opacity: 1 + }, {duration: 300, queue: false, easing: 'easeOutQuad'}); + } + + + } + + }).bind('panend', function(e) { + if (e.gesture.pointerType === "touch") { + + $curr_slide = $slider.find('.active'); + panning = false; + curr_index = $slider.find('.active').index(); + + if (!swipeRight && !swipeLeft || $slides.length <=1) { + // Return to original spot + $curr_slide.velocity({ translateX: 0 + }, {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) { + 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}); + } }); + } + 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); + + }, options.transition + options.interval + ); + } + }); + + $this.on('sliderPause', function() { + clearInterval($interval); + }); + + $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; + + 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 )); diff --git a/node_modules/materialize-css/js/tabs.js b/node_modules/materialize-css/js/tabs.js new file mode 100644 index 0000000..422c400 --- /dev/null +++ b/node_modules/materialize-css/js/tabs.js @@ -0,0 +1,233 @@ +(function ($) { + + var methods = { + init : function(options) { + var defaults = { + onShow: null, + swipeable: false, + responsiveThreshold: Infinity, // breakpoint for swipeable + }; + options = $.extend(defaults, options); + + 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(); + + 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 = 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 $tabs_width - el.position().left - el.outerWidth() - $this.scrollLeft(); + }; + + // Finds left attribute for indicator based on active tab. + // el: jQuery Object + var calcLeftPos = function(el) { + return 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(); + } + if ($active.length === 0) { + $active = $(this).find('li.tab a').first(); + } + + $active.addClass('active'); + index = $links.index($active); + if (index < 0) { + index = 0; + } + + if ($active[0] !== undefined) { + $content = $($active[0].hash); + $content.addClass('active'); + } + + // 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).resize(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) }); + } + }); + + // 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 = $links.eq(index); + animateIndicator(prev_index); + } + }, + }); + } 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) { + 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 = 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); + } + } 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'); + } + } + + // Reset clicked state + clickedTimeout = setTimeout(function(){ clicked = false; }, transition); + + // Update indicator + animateIndicator(prev_index); + + // Prevent the anchor's default click action + e.preventDefault(); + }); + }); + + }, + 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 ) { + // Default to "init" + return methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tabs' ); + } + }; + + $(document).ready(function(){ + $('ul.tabs').tabs(); + }); +}( jQuery )); diff --git a/node_modules/materialize-css/js/toasts.js b/node_modules/materialize-css/js/toasts.js new file mode 100644 index 0000000..78021ce --- /dev/null +++ b/node_modules/materialize-css/js/toasts.js @@ -0,0 +1,136 @@ +Materialize.toast = function (message, displayLength, className, completeCallback) { + className = className || ""; + + var container = document.getElementById('toast-container'); + + // 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); + } + + // Select and append toast + var newToast = createToast(message); + + // only append toast if message is not undefined + if(message){ + container.appendChild(newToast); + } + + newToast.style.opacity = 0; + + // Animate toast in + Vel(newToast, {translateY: '-35px', opacity: 1 }, {duration: 300, + easing: 'easeOutCubic', + queue: false}); + + // Allows timer to be pause while being panned + var timeLeft = displayLength; + var counterInterval; + if (timeLeft != null) { + counterInterval = setInterval (function(){ + if (newToast.parentNode === null) + window.clearInterval(counterInterval); + + // If toast is not being dragged, decrease its time remaining + if (!newToast.classList.contains('panning')) { + timeLeft -= 20; + } + + 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); + } + }, 20); + } + + + + function createToast(html) { + + // Create toast + 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]); + } + } + // 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]); + } + else { + // Insert as text; + 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; + + // Change toast state + if (!toast.classList.contains('panning')){ + toast.classList.add('panning'); + } + + 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 + }); + + } + }); + + return toast; + } +}; diff --git a/node_modules/materialize-css/js/tooltip.js b/node_modules/materialize-css/js/tooltip.js new file mode 100644 index 0000000..4f6c66c --- /dev/null +++ b/node_modules/materialize-css/js/tooltip.js @@ -0,0 +1,238 @@ +(function ($) { + $.fn.tooltip = function (options) { + var timeout = null, + margin = 5; + + // 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).off('mouseenter.tooltip mouseleave.tooltip'); + }); + return false; + } + + options = $.extend(defaults, options); + + return this.each(function() { + var tooltipId = Materialize.guid(); + var origin = $(this); + + // Destroy old tooltip + if (origin.attr('data-tooltip-id')) { + $('#' + origin.attr('data-tooltip-id')).remove(); + } + + 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(); + + 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 + 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 + 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% 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 + 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 + 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); + } + }); + }); + }; + + 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(); + }); +}( jQuery )); diff --git a/node_modules/materialize-css/js/transitions.js b/node_modules/materialize-css/js/transitions.js new file mode 100644 index 0000000..d3d91b5 --- /dev/null +++ b/node_modules/materialize-css/js/transitions.js @@ -0,0 +1,169 @@ +(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(selectorOrEl) { + var element; + if (typeof(selectorOrEl) === 'string') { + element = $(selectorOrEl); + } else if (typeof(selectorOrEl) === 'object') { + element = selectorOrEl; + } else { + return; + } + var time = 0; + 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() { + // Hardcoded .staggered-list scrollFire + // var staggeredListOptions = []; + // $('ul.staggered-list').each(function (i) { + + // var label = 'scrollFire-' + i; + // $(this).addClass(label); + // staggeredListOptions.push( + // {selector: 'ul.staggered-list.' + label, + // offset: 200, + // callback: 'showStaggeredList("ul.staggered-list.' + label + '")'}); + // }); + // scrollFire(staggeredListOptions); + + // HammerJS, Swipe navigation + + // Touch Event + var swipeLeft = false; + var swipeRight = false; + + + // Dismissible Collections + $('.dismissable').each(function() { + $(this).hammer({ + prevent_default: false + }).bind('pan', function(e) { + if (e.gesture.pointerType === "touch") { + var $this = $(this); + var direction = e.gesture.direction; + var x = e.gesture.deltaX; + var velocityX = e.gesture.velocityX; + + $this.velocity({ translateX: x + }, {duration: 50, queue: false, easing: 'easeOutQuad'}); + + // Swipe Left + 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)) { + swipeRight = true; + } + } + }).bind('panend', function(e) { + // Reset if collection is moved back into original position + if (Math.abs(e.gesture.deltaX) < ($(this).innerWidth() / 2)) { + swipeRight = false; + swipeLeft = false; + } + + if (e.gesture.pointerType === "touch") { + var $this = $(this); + if (swipeLeft || swipeRight) { + var fullWidth; + if (swipeLeft) { fullWidth = $this.innerWidth(); } + else { fullWidth = -1 * $this.innerWidth(); } + + $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(); } + }); + } + }); + } + 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( + // { translateY: "100px"}, + // { duration: 0 }); + + // $('ul.staggered-list.vertical li').each(function() { + // $(this).velocity( + // { opacity: "1", translateY: "0"}, + // { duration: 800, delay: time, easing: [60, 25] }); + // time += 120; + // }); + + // // Fade in and Scale + // $('.fade-in.scale').velocity( + // { scaleX: .4, scaleY: .4, translateX: -600}, + // { duration: 0}); + // $('.fade-in').each(function() { + // $(this).velocity( + // { opacity: "1", scaleX: 1, scaleY: 1, translateX: 0}, + // { duration: 800, easing: [60, 10] }); + // }); + }); +}( jQuery )); diff --git a/node_modules/materialize-css/js/velocity.min.js b/node_modules/materialize-css/js/velocity.min.js new file mode 100644 index 0000000..ea21aad --- /dev/null +++ b/node_modules/materialize-css/js/velocity.min.js @@ -0,0 +1,5 @@ +/*! 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. */ +/*! 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/node_modules/materialize-css/js/waves.js b/node_modules/materialize-css/js/waves.js new file mode 100644 index 0000000..c76d463 --- /dev/null +++ b/node_modules/materialize-css/js/waves.js @@ -0,0 +1,338 @@ +/*! + * 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; + } + + function getWindow(elem) { + return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + function offset(elem) { + var docElem, win, + box = {top: 0, left: 0}, + doc = elem && elem.ownerDocument; + + docElem = doc.documentElement; + + 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 convertStyle(obj) { + var style = ''; + + for (var a in obj) { + if (obj.hasOwnProperty(a)) { + style += (a + ':' + obj[a] + ';'); + } + } + + return style; + } + + var Effect = { + + // Effect delay + duration: 750, + + show: function(e, element) { + + // Disable right click + if (e.button === 2) { + return false; + } + + var el = element || this; + + // Create ripple + var ripple = document.createElement('div'); + ripple.className = 'waves-ripple'; + el.appendChild(ripple); + + // 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)+')'; + + // Support for touch devices + if ('touches' in e) { + relativeY = (e.touches[0].pageY - pos.top); + relativeX = (e.touches[0].pageX - pos.left); + } + + // 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)); + }, + + hide: function(e) { + TouchHandler.touchup(e); + + var el = this; + var width = el.clientWidth * 1.4; + + // Get first ripple + var ripple = null; + var ripples = el.getElementsByClassName('waves-ripple'); + if (ripples.length > 0) { + ripple = ripples[ripples.length - 1]; + } else { + return false; + } + + var relativeX = ripple.getAttribute('data-x'); + var relativeY = ripple.getAttribute('data-y'); + var scale = ripple.getAttribute('data-scale'); + + // Get delay beetween mousedown and mouse leave + var diff = Date.now() - Number(ripple.getAttribute('data-hold')); + var delay = 350 - diff; + + if (delay < 0) { + delay = 0; + } + + // 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); + }, + + // Little hack to make can perform waves effect + wrapInput: function(elements) { + for (var a = 0; a < elements.length; a++) { + var el = elements[a]; + + 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; + } + + // Put element class and style to the specified parent + var wrapper = document.createElement('i'); + wrapper.className = el.className + ' waves-input-wrapper'; + + var elementStyle = el.getAttribute('style'); + + if (!elementStyle) { + elementStyle = ''; + } + + wrapper.setAttribute('style', elementStyle); + + el.className = 'waves-button-input'; + el.removeAttribute('style'); + + // Put element as child + parent.replaceChild(wrapper, el); + wrapper.appendChild(el); + } + } + } + }; + + + /** + * 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; + } + + return allow; + }, + touchup: function(e) { + TouchHandler.allowEvent(e); + } + }; + + + /** + * 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; + } + + var element = null; + var target = e.target || e.srcElement; + + 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; + } + + 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); + + if ('ontouchstart' in window) { + element.addEventListener('touchend', Effect.hide, false); + element.addEventListener('touchcancel', Effect.hide, false); + } + + element.addEventListener('mouseup', Effect.hide, false); + element.addEventListener('mouseleave', Effect.hide, false); + } + } + + Waves.displayEffect = function(options) { + options = options || {}; + + if ('duration' in options) { + Effect.duration = options.duration; + } + + //Wrap input inside tag + Effect.wrapInput($$('.waves-effect')); + + if ('ontouchstart' in window) { + document.body.addEventListener('touchstart', showEffect, false); + } + + document.body.addEventListener('mousedown', showEffect, 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; + } + + if ('ontouchstart' in window) { + element.addEventListener('touchstart', showEffect, false); + } + + element.addEventListener('mousedown', showEffect, false); + }; + + window.Waves = Waves; + + document.addEventListener('DOMContentLoaded', function() { + Waves.displayEffect(); + }, false); + +})(window); diff --git a/node_modules/materialize-css/media-css.html b/node_modules/materialize-css/media-css.html new file mode 100644 index 0000000..9f69f52 --- /dev/null +++ b/node_modules/materialize-css/media-css.html @@ -0,0 +1,284 @@ + + + + + + + + + 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>
                +        
                +

                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/node_modules/materialize-css/media.html b/node_modules/materialize-css/media.html new file mode 100644 index 0000000..baada2e --- /dev/null +++ b/node_modules/materialize-css/media.html @@ -0,0 +1,369 @@ + + + + + + + + + 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();
                +    });
                +        
                +
                + +

                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 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');
                +      
                +
                + +
                + + + +
                +
                +
                + + +
                +
                + +
                +
                +
                + +
                +
                + +
                +
                +
                +
                +
                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/node_modules/materialize-css/mobile.html b/node_modules/materialize-css/mobile.html new file mode 100644 index 0000000..488014c --- /dev/null +++ b/node_modules/materialize-css/mobile.html @@ -0,0 +1,220 @@ + + + + + + + + + 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/node_modules/materialize-css/modals.html b/node_modules/materialize-css/modals.html new file mode 100644 index 0000000..2a243a2 --- /dev/null +++ b/node_modules/materialize-css/modals.html @@ -0,0 +1,394 @@ + + + + + + + + + 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" 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" 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 than the href attribute.

                + +
                
                +  <!-- Modal Trigger -->
                +  <button data-target="modal1" class="btn">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').modal();
                +  });
                +          
                +

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

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

                You can also close them programatically:

                +
                
                +  $('#modal1').modal('close');
                +        
                +
                + + + +
                +

                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').modal({
                +      dismissible: true, // Modal can be dismissed by clicking outside of the modal
                +      opacity: .5, // Opacity of modal background
                +      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
                +    }
                +  );
                +      
                +
                + +
                + + + + +
                +
                + +
                +
                +
                +
                +
                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/node_modules/materialize-css/navbar.html b/node_modules/materialize-css/navbar.html new file mode 100644 index 0000000..aa2f943 --- /dev/null +++ b/node_modules/materialize-css/navbar.html @@ -0,0 +1,701 @@ + + + + + + + + + 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. +

                + +
                + +
                
                +  <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>
                +        
                +
                + + + + + +
                + +
                +

                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"><i class="material-icons">cloud</i>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>
                +
                +
                + +
                +

                Buttons

                + + + +
                + +

                You can add buttons into links. For buttons you don't need any additional class. Just pop the .btn class on the a tag.

                +
                
                +  <nav>
                +    <div class="nav-wrapper">
                +      <a href="#!" class="brand-logo">Logo</a>
                +      <ul class="right hide-on-med-and-down">
                +        <li><a class="waves-effect waves-light btn">Button</a></li>
                +        <li><a class="waves-effect waves-light btn">Button <i class="material-icons right">cloud</i></a></li>
                +        <li><a class="waves-effect waves-light btn-large">Large Button</a></li>
                +      </ul>
                +    </div>
                +  </nav>
                +
                + +
                Halfway FAB in Extended Navbar
                +

                Add a halfway FAB to your extended navbar.

                + + +

                +
                
                +  <nav class="nav-extended">
                +    <div class="nav-wrapper">
                +      <a href="#!" class="brand-logo">Logo</a>
                +      <ul class="right hide-on-med-and-down">
                +        <li><a>A link</a></li>
                +        <li><a>A second link</a></li>
                +        <li><a>A third link</a></li>
                +      </ul>
                +    </div>
                +    <div class="nav-content">
                +      <span class="nav-title">Title</span>
                +      <a class="btn-floating btn-large halfway-fab waves-effect waves-light teal">
                +        <i class="material-icons">add</i>
                +      </a>
                +    </div>
                +  </nav>
                +
                +
                + +
                +

                Search Bar

                + + + +
                + +

                You can add a search form in the navbar.

                +
                
                +  <nav>
                +    <div class="nav-wrapper">
                +      <form>
                +        <div class="input-field">
                +          <input id="search" type="search" required>
                +          <label class="label-icon" for="search"><i class="material-icons">search</i></label>
                +          <i class="material-icons">close</i>
                +        </div>
                +      </form>
                +    </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/node_modules/materialize-css/package.js b/node_modules/materialize-css/package.js new file mode 100644 index 0000000..289da05 --- /dev/null +++ b/node_modules/materialize-css/package.js @@ -0,0 +1,99 @@ +// package metadata file for Meteor.js + +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.98.0', + git: 'https://github.com/Dogfalo/materialize.git' +}); + + +Package.onUse(function (api) { + api.versionsFrom('METEOR@1.0'); + + api.use('fourseven:scss@3.10.0'); + api.use('jquery', 'client'); + api.imply('jquery', 'client'); + + var assets = [ + 'fonts/roboto/Roboto-Bold.ttf', + 'fonts/roboto/Roboto-Bold.woff', + 'fonts/roboto/Roboto-Bold.woff2', + 'fonts/roboto/Roboto-Light.ttf', + 'fonts/roboto/Roboto-Light.woff', + 'fonts/roboto/Roboto-Light.woff2', + 'fonts/roboto/Roboto-Medium.ttf', + 'fonts/roboto/Roboto-Medium.woff', + 'fonts/roboto/Roboto-Medium.woff2', + 'fonts/roboto/Roboto-Regular.ttf', + 'fonts/roboto/Roboto-Regular.woff', + 'fonts/roboto/Roboto-Regular.woff2', + 'fonts/roboto/Roboto-Thin.ttf', + 'fonts/roboto/Roboto-Thin.woff', + 'fonts/roboto/Roboto-Thin.woff2', + ]; + + addAssets(api, assets); + + api.addFiles([ + '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/_mixins.scss', + 'sass/components/_modal.scss', + 'sass/components/_navbar.scss', + 'sass/components/_normalize.scss', + 'sass/components/_prefixer.scss', + 'sass/components/_preloader.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/_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/node_modules/materialize-css/package.json b/node_modules/materialize-css/package.json index c2e2eb7..7e866af 100644 --- a/node_modules/materialize-css/package.json +++ b/node_modules/materialize-css/package.json @@ -1,67 +1,115 @@ { - "name": "materialize-css", - "description": "Builds Materialize distribution packages", + "_args": [ + [ + { + "raw": "materialize-css@^0.98.0", + "scope": null, + "escapedName": "materialize-css", + "name": "materialize-css", + "rawSpec": "^0.98.0", + "spec": ">=0.98.0 <0.99.0", + "type": "range" + }, + "/Users/odella/dev/react-materialize/docs" + ] + ], + "_from": "materialize-css@>=0.98.0 <0.99.0", + "_id": "materialize-css@0.98.0", + "_inCache": true, + "_location": "/materialize-css", + "_nodeVersion": "7.2.1", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/materialize-css-0.98.0.tgz_1485461368337_0.723597272997722" + }, + "_npmUser": { + "name": "materialize", + "email": "materializeframework@gmail.com" + }, + "_npmVersion": "3.10.10", + "_phantomChildren": {}, + "_requested": { + "raw": "materialize-css@^0.98.0", + "scope": null, + "escapedName": "materialize-css", + "name": "materialize-css", + "rawSpec": "^0.98.0", + "spec": ">=0.98.0 <0.99.0", + "type": "range" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/materialize-css/-/materialize-css-0.98.0.tgz", + "_shasum": "aa612c031c0b22d6e7faa8fcdd405e54ad44d278", + "_shrinkwrap": null, + "_spec": "materialize-css@^0.98.0", + "_where": "/Users/odella/dev/react-materialize/docs", "author": { "name": "Alvin Wang, Alan Chang" }, - "url": "http://materializecss.com/", - "version": "0.97.3", - "repository": { - "type": "git", - "url": "git://github.com/Dogfalo/materialize.git" + "bugs": { + "url": "https://github.com/Dogfalo/materialize/issues" }, - "dependencies": {}, - "engine": "node >= 0.10", + "dependencies": { + "hammerjs": "^2.0.4", + "jquery": "^2.1.4", + "node-archiver": "^0.3.0" + }, + "description": "Builds Materialize distribution packages", "devDependencies": { + "autoprefixer": "^6.1.0", "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-banner": "^0.6.0", + "grunt-browser-sync": "^2.2.0", + "grunt-concurrent": "^2.0.0", + "grunt-contrib-clean": "^0.7.0", + "grunt-contrib-compress": "^0.14.0", "grunt-contrib-concat": "^0.5.0", - "grunt-contrib-connect": "^0.4.2", - "grunt-contrib-copy": "0.4.x", - "grunt-contrib-cssmin": "^0.13.0", - "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-contrib-copy": "^0.8.0", + "grunt-contrib-cssmin": "^0.14.0", + "grunt-contrib-jade": "^0.15.0", + "grunt-contrib-jasmine": "^0.9.2", + "grunt-contrib-uglify": "^0.11.0", + "grunt-contrib-watch": "^0.6.0", "grunt-notify": "^0.4.1", + "grunt-postcss": "^0.7.1", "grunt-remove-logging": "^0.2.0", "grunt-rename": "^0.1.4", - "grunt-sass": "^0.18.1", + "grunt-sass": "^1.1.0", "grunt-text-replace": "^0.4.0", - "node-sass": "^2.1.1", - "qunit": "^0.7.6" + "jasmine": "^2.3.2", + "jasmine-jquery": "^2.1.1", + "jquery": "^2.1.4", + "node-sass": "^3.4.2", + "phantomjs": "^1.9.18" }, - "scripts": { - "test": "grunt testem:run:default" - }, - "gitHead": "5d6c596b39b3384ccecfd71beb96f5b07f6310c1", - "bugs": { - "url": "https://github.com/Dogfalo/materialize/issues" - }, - "homepage": "https://github.com/Dogfalo/materialize", - "_id": "materialize-css@0.97.3", - "_shasum": "3d5c195a8894d909b656eae567d4f4c2b4f69ffb", - "_from": "materialize-css@>=0.97.1 <0.98.0", - "_npmVersion": "1.4.28", - "_npmUser": { - "name": "materialize", - "email": "materializeframework@gmail.com" + "directories": {}, + "dist": { + "shasum": "aa612c031c0b22d6e7faa8fcdd405e54ad44d278", + "tarball": "https://registry.npmjs.org/materialize-css/-/materialize-css-0.98.0.tgz" }, + "engine": "node >= 0.10", + "gitHead": "4d12e0660265ca556064cba6cb1a67bb81eaa53b", + "homepage": "https://github.com/Dogfalo/materialize#readme", + "license": "MIT", + "main": "bin/materialize.js", "maintainers": [ { "name": "materialize", "email": "materializeframework@gmail.com" } ], - "dist": { - "shasum": "3d5c195a8894d909b656eae567d4f4c2b4f69ffb", - "tarball": "http://registry.npmjs.org/materialize-css/-/materialize-css-0.97.3.tgz" + "name": "materialize-css", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/Dogfalo/materialize.git" }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/materialize-css/-/materialize-css-0.97.3.tgz", - "readme": "ERROR: No README data found!" + "scripts": { + "test": "grunt travis --verbose" + }, + "url": "http://materializecss.com/", + "version": "0.98.0" } diff --git a/node_modules/materialize-css/pagination.html b/node_modules/materialize-css/pagination.html new file mode 100644 index 0000000..ad0805b --- /dev/null +++ b/node_modules/materialize-css/pagination.html @@ -0,0 +1,244 @@ + + + + + + + + + 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/node_modules/materialize-css/parallax-demo.html b/node_modules/materialize-css/parallax-demo.html new file mode 100644 index 0000000..e25df1c --- /dev/null +++ b/node_modules/materialize-css/parallax-demo.html @@ -0,0 +1,140 @@ + + + + + + + + + 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>
                +      
                +
                +
                +
                +
                +
                + +
                + 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/node_modules/materialize-css/parallax.html b/node_modules/materialize-css/parallax.html new file mode 100644 index 0000000..1797bcf --- /dev/null +++ b/node_modules/materialize-css/parallax.html @@ -0,0 +1,251 @@ + + + + + + + + + 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/node_modules/materialize-css/preloader.html b/node_modules/materialize-css/preloader.html new file mode 100644 index 0000000..01528c2 --- /dev/null +++ b/node_modules/materialize-css/preloader.html @@ -0,0 +1,514 @@ + + + + + + + + + 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

                +

                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

                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + +
                + +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + +
                +
                + +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + +
                +
                +
                
                +  <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>
                +
                +  <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>
                +        
                +
                + +
                +

                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/node_modules/materialize-css/pushpin-demo.html b/node_modules/materialize-css/pushpin-demo.html new file mode 100644 index 0000000..794c560 --- /dev/null +++ b/node_modules/materialize-css/pushpin-demo.html @@ -0,0 +1,151 @@ + + + + + + + + + Pushpin Demo - Materialize + + + + + + + + + + + + + + +
                + +
                + +
                + +
                + +
                + +
                + +
                + 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/node_modules/materialize-css/pushpin.html b/node_modules/materialize-css/pushpin.html new file mode 100644 index 0000000..f84a670 --- /dev/null +++ b/node_modules/materialize-css/pushpin.html @@ -0,0 +1,307 @@ + + + + + + + + + Pushpin - Materialize + + + + + + + + + + + + + + + + +
                + + + +
                +
                +
                + +
                + +
                +

                Introduction

                +

                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(){
                +    $('.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 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)
                + +
                +

                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');
                +        
                + +
                +
                + + + +
                +
                +
                + + +
                + +
                +
                + +
                +
                + +
                +
                +
                +
                +
                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/node_modules/materialize-css/res/MaterializeLogo-3.ai b/node_modules/materialize-css/res/MaterializeLogo-3.ai new file mode 100644 index 0000000..755b2e2 --- /dev/null +++ b/node_modules/materialize-css/res/MaterializeLogo-3.ai @@ -0,0 +1,4854 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 41 0 R 76 0 R 111 0 R 146 0 R 181 0 R 182 0 R 220 0 R 221 0 R 259 0 R 260 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + MaterializeLogo-3 + + + + + 2014-10-29T19:17:33-04:00 + 2014-10-29T19:17:33-04:00 + 2014-10-29T18:50:04-04:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 44 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgALAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUt1nzFo+jLEdRn 9H1+XpAI7luFOX2QafaHXIymI83J0+kyZr4BdJFN+aPliOvAXEv+pGB/xNlyrx4udHsXOf5o+KBm /NzTR/c2Ez+HNlT9XPAdQO5uj2FPrIIGb83bk/3Omon+vKX/AFKmROoPc3x7Bj1n9iBm/NXzG9RH DbRDsQjk/wDDOR+GROeTfHsTCOZkfx7kDN+Yvm6SoF4IweyRRj8SpOR8aXe3x7J04/hv4lBt5p82 XTELqF0zHtEzL1P+RTI+JLvbhotPH+GPx/a0LHzde7+jf3Ff2iszDx6nGpFfE08OsB8npn5dadfa foDQXsLQTGd3COKHiVWh/DMrCCBu812tmjky3E2KZRlzrHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXAggEdDirsVYx518o3PmFrL0Z0gW29XmXBJPqcKUA/wBTKsuMyp2fZ2vj p+KxfFX2WkUP5QpsZtTJ8VSGn4lz+rK/y/m50u3u6H2/sR0P5T6Ev99dXMh/ySij/iLH8cI04aJd uZegj9v60bD+WvlOP7dvJN/ryuP+IFckMEWmXbGoPUD4I+HyV5Vi+zpsR/16v/xInJeFHuaJdo5z /GVT0PKln/uuwtqe0Mf9MfQO5jxZ59Zn5rZPNnla3Xj+krYKOgjcOPH9iuPiRHVI0OeX8Evx70FN +YvlKLpeGUjskUn6yoGA5ot0eydQf4a+ITXQ9csdas2u7Pn6KuY/jHE1UA9KnxycJiQsOLqdNLDL hlzTDJOO7FXYqktt5y8tXV6LK3vRJcFuAURyUrWn2ivHr3rkBkiTTmz7OzxjxGO3vH611/5u8u2F 8bG6u+F2vENEI5HILAEborDocTkiDSMWgzZI8cY+n3hNo5EkjWRDyRwGVh3BFQcm4hBBorsUOxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KrYv7pP9UfqxVdirFvPHm288vCy+rQxzG69TkZOW3p8OnE jrzynLkMap2nZugjqOLiJHDX22wub80vM8n2Bbw/6kZP/E2bKDnk7mPYuAfzj8UDN+YHm6WoN+UH gkca/iFrgOWXe3x7K04/h+0ob9Oebb3Zby9lDfsxvJQ7+C7ZHjkerZ+W08P4Yj5O/QXmy83ayvZQ f2pEkofpfHgkei/mdPD+KI+SJh/L/wA3S0IsCg8XkjX8C1ckMUu5rl2rpx/F9hR0P5W+ZpPtm3h/ 15Cf+IK2EYJNEu2sA5cR+CPh/KPUD/fahCnjwRn/AF8MkNOe9ol29DpEs38reXhoOmGxE/1isjSm Tjw+0AKUq38vjmRjhwinS63V+PPiqtk3ybhuxVJ9e1+xstPvgJwt3FDIY4zUNz4Er28chOQALmaX SznOO3pJDyjy3E6epdAEUYLG/uvxH7qjMTG9ZqyD6W/Wk1PzNd3pU8TJJMR14ry4r93IDEbytAiM WGMfIB6ToXmbSIdPtLO5u0S8pwWHcufiIQAAHqKZkxyACi83qtFkM5SjH097JctdY7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq1GCEUHqABireKpfq3l/SNXMJ1G3Fwbfl6VWdQOdOWyla/ZHXIygJ c3IwarJivgNWh4/Kfla3Xl+jbYKOpkRXHh+3XI+HEdGw67PL+OS/6x5Vsj/e2NsR/lQx9/ow3Edz Hgzz6TPzUZvO3lWL7WpRH/U5P/xEHB4se9nHs7Of4CgZvzL8px14TyTU/kicV/4MLkTni3x7H1B6 AfFAzfmzoa/3NrcyH/KCIP8AiTfqyJ1Ab49hZepj9v6kDN+by7iHSyfBnmp+AT+OA6jybo9g98/s /agZfza1k/3NnbJ/r+o/6mXI/mC3x7Cx9ZS+xmfkjXL3WtGa8vOAlEzRj0xxHFVUjYk+OXYpmQsu n7S00cOThjypP6fETU7gCnbbLXXt4qw7z55e1XUQr6bB60joI5ByRKUatfjK9QaZTlgTydz2Xq8e PaZr5oKx8napa+U44BADqfrvM8HJOjDgF5V49EU9cjHGRHzbsnaGOWoJv0VV7qPlPyTq1raao2oQ CG4niWO2XmjVIbmalSwHxKuDHiIu2eu7SxylDgNgHfn7v1teW/KGvQ+bY9RvrURWkPNlYvG1TwKL QIzHqa4wxnisrrO0MUtOYQNyPke96LmS867FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwX 8zxrDfo2PThcNy9f1Ut+Zr/d8eQT6aVzHz3tTvOxvDHGZ8PTnXmwdfK3my6YFtPumJ7yqy9f9emY /hy7ndnW6eP8Ufh+xFw/lz5ukoTZiMHu8sf6gxOS8GXc1S7W04/iv4FHQ/lT5ifeSa2iHgXcn8Ep +OSGCTRLtzCOQkfx70dD+UVyf77UkT/UiL/rZMkNOe9ol29HpD7UdD+Uemj++v5n8eCqn6+eSGnH e0S7dn0iEfD+V3liP7f1ib/XkA/4gq5LwItEu2s57h8EdD5B8pRUpp6sR3d5Gr97EYfBj3NMu1NQ f4vuTix0+xsIPQs4Et4a8uCCgqdq/hlgiBycPJllM3I2URha3Yq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FX/2Q== + + + + + + uuid:e26a190d-604e-0a43-ad3a-5e51b65c7869 + xmp.did:0480117407206811822AD2084CAF8F40 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:0380117407206811822AD2084CAF8F40 + xmp.did:0380117407206811822AD2084CAF8F40 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:0180117407206811822AD2084CAF8F40 + 2014-10-29T18:19:07-04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:0480117407206811822AD2084CAF8F40 + 2014-10-29T18:50:03-04:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 612.000000 + 792.000000 + Points + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + CMYK Red + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + CMYK Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + CMYK Green + CMYK + PROCESS + 100.000000 + 0.000000 + 100.000000 + 0.000000 + + + CMYK Cyan + CMYK + PROCESS + 100.000000 + 0.000000 + 0.000000 + 0.000000 + + + CMYK Blue + CMYK + PROCESS + 100.000000 + 100.000000 + 0.000000 + 0.000000 + + + CMYK Magenta + CMYK + PROCESS + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=15 M=100 Y=90 K=10 + CMYK + PROCESS + 14.999998 + 100.000000 + 90.000000 + 10.000002 + + + C=0 M=90 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 90.000000 + 85.000000 + 0.000000 + + + C=0 M=80 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 80.000000 + 95.000000 + 0.000000 + + + C=0 M=50 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 50.000000 + 100.000000 + 0.000000 + + + C=0 M=35 Y=85 K=0 + CMYK + PROCESS + 0.000000 + 35.000004 + 85.000000 + 0.000000 + + + C=5 M=0 Y=90 K=0 + CMYK + PROCESS + 5.000001 + 0.000000 + 90.000000 + 0.000000 + + + C=20 M=0 Y=100 K=0 + CMYK + PROCESS + 19.999998 + 0.000000 + 100.000000 + 0.000000 + + + C=50 M=0 Y=100 K=0 + CMYK + PROCESS + 50.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=75 M=0 Y=100 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 100.000000 + 0.000000 + + + C=85 M=10 Y=100 K=10 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 10.000002 + + + C=90 M=30 Y=95 K=30 + CMYK + PROCESS + 90.000000 + 30.000002 + 95.000000 + 30.000002 + + + C=75 M=0 Y=75 K=0 + CMYK + PROCESS + 75.000000 + 0.000000 + 75.000000 + 0.000000 + + + C=80 M=10 Y=45 K=0 + CMYK + PROCESS + 80.000000 + 10.000002 + 45.000000 + 0.000000 + + + C=70 M=15 Y=0 K=0 + CMYK + PROCESS + 70.000000 + 14.999998 + 0.000000 + 0.000000 + + + C=85 M=50 Y=0 K=0 + CMYK + PROCESS + 85.000000 + 50.000000 + 0.000000 + 0.000000 + + + C=100 M=95 Y=5 K=0 + CMYK + PROCESS + 100.000000 + 95.000000 + 5.000001 + 0.000000 + + + C=100 M=100 Y=25 K=25 + CMYK + PROCESS + 100.000000 + 100.000000 + 25.000000 + 25.000000 + + + C=75 M=100 Y=0 K=0 + CMYK + PROCESS + 75.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=50 M=100 Y=0 K=0 + CMYK + PROCESS + 50.000000 + 100.000000 + 0.000000 + 0.000000 + + + C=35 M=100 Y=35 K=10 + CMYK + PROCESS + 35.000004 + 100.000000 + 35.000004 + 10.000002 + + + C=10 M=100 Y=50 K=0 + CMYK + PROCESS + 10.000002 + 100.000000 + 50.000000 + 0.000000 + + + C=0 M=95 Y=20 K=0 + CMYK + PROCESS + 0.000000 + 95.000000 + 19.999998 + 0.000000 + + + C=25 M=25 Y=40 K=0 + CMYK + PROCESS + 25.000000 + 25.000000 + 39.999996 + 0.000000 + + + C=40 M=45 Y=50 K=5 + CMYK + PROCESS + 39.999996 + 45.000000 + 50.000000 + 5.000001 + + + C=50 M=50 Y=60 K=25 + CMYK + PROCESS + 50.000000 + 50.000000 + 60.000004 + 25.000000 + + + C=55 M=60 Y=65 K=40 + CMYK + PROCESS + 55.000000 + 60.000004 + 65.000000 + 39.999996 + + + C=25 M=40 Y=65 K=0 + CMYK + PROCESS + 25.000000 + 39.999996 + 65.000000 + 0.000000 + + + C=30 M=50 Y=75 K=10 + CMYK + PROCESS + 30.000002 + 50.000000 + 75.000000 + 10.000002 + + + C=35 M=60 Y=80 K=25 + CMYK + PROCESS + 35.000004 + 60.000004 + 80.000000 + 25.000000 + + + C=40 M=65 Y=90 K=35 + CMYK + PROCESS + 39.999996 + 65.000000 + 90.000000 + 35.000004 + + + C=40 M=70 Y=100 K=50 + CMYK + PROCESS + 39.999996 + 70.000000 + 100.000000 + 50.000000 + + + C=50 M=70 Y=80 K=70 + CMYK + PROCESS + 50.000000 + 70.000000 + 80.000000 + 70.000000 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + C=0 M=0 Y=0 K=90 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 89.999405 + + + C=0 M=0 Y=0 K=80 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 79.998795 + + + C=0 M=0 Y=0 K=70 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 69.999702 + + + C=0 M=0 Y=0 K=60 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 59.999104 + + + C=0 M=0 Y=0 K=50 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 50.000000 + + + C=0 M=0 Y=0 K=40 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 39.999401 + + + C=0 M=0 Y=0 K=30 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 29.998802 + + + C=0 M=0 Y=0 K=20 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 19.999701 + + + C=0 M=0 Y=0 K=10 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 9.999103 + + + C=0 M=0 Y=0 K=5 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 4.998803 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 100.000000 + 100.000000 + 0.000000 + + + C=0 M=75 Y=100 K=0 + CMYK + PROCESS + 0.000000 + 75.000000 + 100.000000 + 0.000000 + + + C=0 M=10 Y=95 K=0 + CMYK + PROCESS + 0.000000 + 10.000002 + 95.000000 + 0.000000 + + + C=85 M=10 Y=100 K=0 + CMYK + PROCESS + 85.000000 + 10.000002 + 100.000000 + 0.000000 + + + C=100 M=90 Y=0 K=0 + CMYK + PROCESS + 100.000000 + 90.000000 + 0.000000 + 0.000000 + + + C=60 M=90 Y=0 K=0 + CMYK + PROCESS + 60.000004 + 90.000000 + 0.003099 + 0.003099 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>/XObject<>>>/Thumb 269 0 R/TrimBox[0.0 0.0 612.0 792.0]/Type/Page>> endobj 262 0 obj <>stream +H,0DB[Z E0'n[/13D©P&NihZayS*P&x^>stream +8;Z\t3tB1O$q(W5GGaCE:moHHf3*S]8e\uQBT(\l;1rI(CD\Dd*<<<48N#25hhi$] +J+n;dZar?H!F>@rG!MD)[GU/>peJQ1T)BT8Bc?088;koPF:Il2k0*%X9O5hW?01o- +T6*YqQunsWj1:g?[4Xsk?%G?Q"Z>@hs/\:cKmZ'RF\pQqA]Q:L3BLdUI'qIQgL +1kSlD??\s\dbAnMi`][6\8f7HNUu6AFa'sW]#EVTq9iNi_R=*[/UAG. +X!d'njtcu;zzpgN"]!/1?)=T~> endstream endobj 270 0 obj [/Indexed/DeviceRGB 255 271 0 R] endobj 271 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 267 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0.034 0.696 0.42 0 scn +/GS0 gs +q 1 0 0 1 174.5 -111.75 cm +0 0 m +-349 35 l +-349 0 l +0 -35 l +h +f +Q +q 1 0 0 1 174.5 -37.25 cm +0 0 m +-349 35 l +-349 0 l +0 -35 l +h +f +Q +q 1 0 0 1 174.5 37.25 cm +0 0 m +-349 35 l +-349 0 l +0 -35 l +h +f +Q + endstream endobj 268 0 obj <>/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /Fm0 Do +Q + endstream endobj 272 0 obj <> endobj 273 0 obj <>/XObject<>>>/Subtype/Form>>stream +q +-384.667 535.662 m +-384.667 579.663 l +-384.667 623.664 l +1041.334 623.664 l +1041.334 579.663 l +1041.334 535.662 l +h +W n +q +/GS0 gs +0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /Fm0 Do +Q +Q + endstream endobj 274 0 obj <> endobj 275 0 obj <>/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /Fm0 Do +Q + endstream endobj 276 0 obj <> endobj 277 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0.029 0.703 0.416 0 scn +/GS0 gs +q 1 0 0 1 348.2002 576.5 cm +0 0 m +25.47 0 l +16.55 -3 13.77 -8.87 12.18 -25.73 c +11.05 -37.75 5.54 -40.84 y +1.41 -40.84 -2.65 -23.42 -6.16 -5.02 c +-4.641 -2.1 -2.71 -0.45 0 0 c +f +Q +q 1 0 0 1 353.7402 535.6602 cm +0 0 m +-25.471 0 l +-20.94 0 -17.811 8.65 -15.99 19.59 c +-14.76 26.96 -13.53 32.32 -11.7 35.82 c +-8.19 17.42 -4.13 0 0 0 c +f +Q +0 0.449 0.169 0 scn +q 1 0 0 1 342.04 571.48 cm +0 0 m +-1.83 -3.5 -3.06 -8.86 -4.29 -16.23 c +-6.11 -27.17 -9.24 -35.82 -13.771 -35.82 c +-18.69 -34.73 -22.46 -16.27 -27.66 11.79 c +-27.82 12.66 -27.98 13.53 -28.15 14.4 c +-24.29 34.73 -20.2 52.18 -16.08 52.18 c +-14.74 52.18 l +-9.83 51.1 -6.06 32.63 -0.86 4.58 c +-0.58 3.05 -0.29 1.52 0 0 c +f +Q +0.029 0.703 0.416 0 scn +q 1 0 0 1 301.8198 623.6602 cm +0 0 m +24.14 0 l +20.02 0 15.93 -17.45 12.07 -37.78 c +8.48 -18.68 4.28 0 0 0 c +f +Q +q 1 0 0 1 313.8896 585.8799 cm +0 0 m +-0.38 -2.05 -0.77 -4.13 -1.149 -6.22 c +-6.939 -37.83 -10.399 -49.34 -14.37 -50.22 c +-18.85 -50.22 -23.24 -29.8 -26.939 -9.82 c +-27 -9.5 -27.06 -9.18 -27.12 -8.86 c +-26.95 -7.98 -26.79 -7.1 -26.63 -6.21 c +-20.84 25.39 -17.38 36.91 -13.41 37.78 c +-12.07 37.78 l +-7.79 37.78 -3.59 19.1 0 0 c +f +Q +q 1 0 0 1 299.52 535.6602 cm +0 0 m +-25.48 0 l +-21.12 0 -16.79 19.54 -12.75 41.36 c +-12.69 41.04 -12.63 40.72 -12.57 40.4 c +-8.87 20.42 -4.48 0 0 0 c +f +Q +0 0.449 0.169 0 scn +q 1 0 0 1 286.77 577.02 cm +0 0 m +-4.04 -21.82 -8.37 -41.36 -12.73 -41.36 c +-17.64 -40.27 -21.42 -21.81 -26.61 6.25 c +-26.77 7.13 -26.94 8 -27.1 8.88 c +-23.24 29.2 -19.15 46.64 -15.04 46.64 c +-13.7 46.64 l +-8.85 45.57 -5.1 27.51 0 0 c +f +Q +0.029 0.703 0.416 0 scn +q 1 0 0 1 247.6001 623.6602 cm +0 0 m +24.13 0 l +20.02 0 15.93 -17.44 12.07 -37.76 c +8.47 -18.67 4.27 0 0 0 c +f +Q +q 1 0 0 1 259.6699 585.8999 cm +0 0 m +-0.39 -2.05 -0.78 -4.14 -1.16 -6.24 c +-6.95 -37.85 -10.41 -49.36 -14.38 -50.24 c +-18.86 -50.24 -17.12 -49.4 -19.94 -36.84 c +-22.79 -24.15 -24.98 -16.61 -27.85 -12.74 c +-27.44 -10.6 -27.03 -8.42 -26.63 -6.23 c +-20.84 25.37 -17.38 36.89 -13.41 37.76 c +-12.07 37.76 l +-7.8 37.76 -3.6 19.09 0 0 c +f +Q +q 1 0 0 1 245.29 535.6602 cm +0 0 m +-25.48 0 l +-21.38 0 -17.3 17.29 -13.47 37.5 c +-10.6 33.63 -8.41 26.09 -5.56 13.4 c +-2.74 0.84 -4.48 0 0 0 c +f +Q +0 0.449 0.169 0 scn +q 1 0 0 1 231.8198 573.1602 cm +0 0 m +-3.83 -20.21 -7.91 -37.5 -12.01 -37.5 c +-12.49 -36.91 -15.32 -37.5 -17.92 -21.88 c +-20.31 -7.48 -24.49 1.51 -31.32 3.34 c +-5.84 3.34 l +-3.5 3.24 -1.64 2.22 0 0 c +f +Q + endstream endobj 278 0 obj <> endobj 265 0 obj <> endobj 264 0 obj [/ICCBased 279 0 R] endobj 279 0 obj <>stream +HuTKtKKJI,t(݋4K%ҹH4J#Ғ(H +wqyy~3̙g<3Y9El +@ ]!O-@\+BVKK :OX~WCaiHKL0qY `5ck +X]x= 8 XĿ׽>.f#aPn D^{y8  dp H st:Y׬cxc IV?S!:_9[YbQP~+rA +ShHht^ '0߅™kYXY9Yqqpl'WzEE$%D>,^|t*K)%/`\ҫ:&D [7dplDa5|mb4,yy{e5 3⚅,t+whlA   m k +xYUH&%Ȥ +qO'Mz3KT@v[NUnn^\o]abTrtlmE]e~U+jאZ:zaqi5};CS[\_ۆwCaQ1;>L$Lz}4:%8M7l̎Χ/}XT^]X>\Ym[n!ycskkƶʷ;v{pIs0Xݯ3s󝋒&$WWW*)!$$%!e$cHNOAKIMEq ƕ;KLw@YX;ؚ8^+DspfKOTCPpJ%D=++O%$*8IZ\Z^UK_wL"dx]}>9=;s_G8/̹N!Gz[<=2|B}PQzlH0Wc(Een|Pds::5&89yFT"od䳔i/ZK^&gd:fgQl kJХeJ*+篍kj5U[ZUh0|em6]B@`PpH?QM1Msψ*iϛ.Z [JYZ)X-]R޸Ѻپw?@?5 ǖ'vNg +W3gLC#u!MMMEvAms˔FVNA̝GLwA̬,llؿsݛnͽ+!B²" 'R&k?3?4+:6oT\ұڿ6VʝoF?LT;:>::>:;eqvx^sawݥʕ'_EFO\DKLtAnFF)F|ԭ6\`@z?m+F;LwiAhy͖)Mgw~_ @ZH_XA,"F)%/*9aZ:Q,\B^_AU񡒀2 +*'[j o5[uR1uh`fm$1xJgBdrltlyyEe$feg-g#`dGbwj0TOC9; ܨݿxz6zx8IP=A!.aAxۑϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{T?~ò~i~L}~cbA~Dad~ty~W~O>~\/~|~`Cx}%H}1X}%z}K} {N}׋<_~7A~-ψ||Dz|+E|[s|z} ^}wO@}-~ċ {Gu{Dz{]Ĭ{f{Zx|[]|ϕM?}R<}Ǝz]YzHħz|z={LNw{\|=>|v|ېI8z/r z;bz'sMzd6zɬqv{D[{0> |;|yyaIy?yazYvzݮ[{^=c{ФI{R*y߄yfUy`VyyuKzZi{ <{z%zȎ~+~}͇}W0}3}HtЄ}Zk}=~zɇ}!~Єd*s}Y<9wpSwuuVrUW؈|;,뇔{RsѲ;:8q)PCV:4.8Ȅ2񡂡?Up Vu9S c bփR.ՁNn U388A/ͬδz6߆өn1T\e7݀tXT)$̯̕6;eCʷˆ imw3SƀV7M +\lGNػځNāa5tNzlߴS<H6*-N}o2ن N%է>w֣A}⇤\fXMݘ2, KԐ3g°[} +0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~ +~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;',#h%T,Qۥ{[s:9󅼓&^!Փa@!" y +.Jl6mHju,bU6+s hܸd-ʥ}wi-sun=0Ľi-_*)U_ˈb$na+;ϧT;ppA7C4.*Iߥa8Mm.ACi7\j|fiԫ)]ޭjʄU]3(í whJch-4x7h׿*P0H됎L랇ڡuÂ,{Bz}8vggҲd[!XTZZ.vlAg +{;Sm`vؿ`~?ga. +3Ì{L^WYe4]L7ok!wI~Ira^=C#Zh`Wu}p)"z7ff&3$FJ8Ҷ5m +uR_,^VS&aR~PfLL_Dw*`\-9]q  TI6)>u6 D`e͢/xqY%9ʜ;åOd\˾P&eRz;].R<oΡ]P{?: r̨\ʻb Ҥ3|m s؟W9oZt]RnÅ\cW#+nI&gyAjsN06HiD'@J+a5V~cRI̫vwtUc[3+?F|l(iU^+O?Rs1Hqil$Wþh=(RE +1BvџnF/ BsGMY9>ܖ3ȗqI ڣ5V_1ȣβiJiX0WVH[8g_/ +n3 ` 38A.|f|ј0I6bv%& ;Y㿜҄#dD.).p'3J12K[Duɥ$s8IƊ.z^48e!R6}vcMiozo0'=~i,3:?-?oS,9w#ROa; ?pB +֞IO ݟe#}ԯN$\l?], y,>&Рq]yh0AqK)ĝBFҍcH:-h-ǟcf)K9T127]qEjL<>h;|U +dpG +ƫ`&!8al`83>.qɂnA9 +; `HByg KB*k㰗2fF=#OM eT? +mTm_OBۊV<ɆF('n3uG~Ȯ#7Њ9[١`Ns.P..콤 'KnpF\? B>-`NWOOWBlfxW^b-_x&*/(j_=߆󑊢zF`LdE:SNʔ@S 03|TOKokto}bFz$4-,.m'j*J|)J6BP ^3ewܫpX.*,07xPڳ:2XOT21|"7=0ߴy}ĸB)H[Fs V+̯+Y(I(x&9JAI'tXmyG=X[8TK)2<TSRvxlȓGO|g/{>4/gRFȶ&A52 uЯ*B幃AuFǞѧuD)B,*?n` 'qQIzK֗4{B_g68#ʉ2.A$69!̒ub1&D3Qx" >ɏnνxVG&TۨÓ)sxd-5KxߣD&1±jdGjJ|J{Z ޲f6/vTp̄ub PmBU#gBg˷)-*E +ar>>Ƶrn[ɭF-IByѸP=ĶKUC wG D}"vN.p]]Q8uY{#qCv}sax_oyiNr( d8aw2CQ}V8UWO\g \yk@dcZt9$u +p-1z(=f) +vě92 w u煼ת#{P6+Dq3HIi%BCb!kc5&U ):X$܎[b2*@PkcӘdoTB_L1Uwi")=2#pI9,RO>T@>;bnDPuCfk^^\G~ oLRcHqܮ=-8^5Ońy*9:-\g8:T<?*C;[yX+I;lRL߭$DvYTQ6DyVmfy%/sIsmXP1Lռȭvow)QBb_LVwupeėO*|+](uHװ4WU.{ 4\m.QwR~MAiRz+%BKz?'{ k҉aa{H]sX}da~3_auQz VM\ĵv5I0LM)DŽp1:5,&4 %!$}ocޤA]R^xT◬M&/B:DwA24?cd&g]5b4a?iǐ Ĉ.OA 6vfvsd(5yTH/P=(a;zUs bWxDa)Eʼ $sgPJreY3w`cFo0|U[j5k.5J&eTor È´}I lpjC8c5J=g%Uo|L58E" +ِ[Ak]J͆VBM"{NrQihЦ@Y?6^߫ZWٯ]ذc؋hKSLj:>O ɲ.ݰQ{5mm<ٷ?^v"}ъw9O&vX7km[ ,70nΒ7|eP\I;-wgFN cIP#qWI ;NٶA)H~7i thl~~dzY Cx2>*c&mb{9f1X*L #> + V@g蒼]7n249=MK% ;,F\j 1klZi؊ΐ.|Q9а$_.!;̿lE,ɥDi}D3^a`Y5g{J=mɳy3CM'jM-iЦm n5? SJE+U~ ;q.tXd~~p*QeS%.Ћ"ưBsZ6-6[\d;^z4`;64藸ͱw;|+&AfLU3XTm)lF'l VɺgcGObbɜ9;v \CL, >B?KGCe"z -@EHILp<5'҉$>8#gL2m c1 c Fw)P+rkC qp/u8#!*g°Pa`vu@oH`"Ž:z_Q<,D>'ӅWP .`xW3|!6 +5 El[",0 e[Oz0~lUO+&xkPc|u$k.?{Qp""kr6isVa=~@W_ +.<7 +2#h?c~m'rE_xs6aG+K 14L^kUp^^_mS^dШ'>}5$:τ!E[bJx&n t(m;ZsF5uqX.ՂBqKP *l%{ٓ{'f';,TT,bhUq2Z3;}T9vwRR;GD + K*/@hUv$j!@ vyבm,W|-͢ ^ ~D_􆭍"ĉ#c禘*X/Ϝe>|XH;:)d9gƖ4aBQ4Ew,C +ۯBU#>SV$L-5gV ϯ*B#} npþtdU$Db&$^\^&Z"/˺+-}%Z:}9AYu rTlP0"~! ͚*@5K?߫Z-P=j>܈[O?)a5 +?WUsy5^(ge${Cm> "Gգ+$踿ϫ& Xw8?g,'ō="/xNM)'EFqrf CįQ9ZY$r!6m)4 V9kJ$# FьX٥Cp[ģ)CS;rFP#ImKGɺzj>>X9,ZL-jIbkȉ8˚?vtxPIO}_ay@:|Ve6ubd/e3<֭ztea'cLaM +lz&,f^_!?l2x2Xyń3D)\?ye ~4O+9$  +EVDTSؓ7X?MM!ԼuOtP Cbt;iްa@gW#@4c9.Do z2>M5i~u0 qswQ9ǸLt삟Mz)>kɝI;io"U)]$YL >$$T:gUo$UK,C`sCMAJMÄKC(g]ٮ9sUG0?L5QM%0Ol5&`Ƒ1,x'{k+mY}-Js#\d:i/NK\8HstQ#-ND).s*Zymnf\1l{(E=VGW9s:?wǟQZsC6A1ƃ6K@8OUY^`7j6@9?,yt4&}"T- +\Y&kVx녣391ٵqQ=beMq\`/nņ|2͌JkzDmͫIR4\~5NlօKɁZ]TC3l̅D3jSS)tWw$IX[wV +WTUw^PeUhWE^ؓ~Wchs sIg`wgs (5mr] B`7JfAaA3ƓG?{O[ ?xj/Z*7exXz Ά})C?`KcMՌ&)Y5J]q':]$؞]Yv x(ıH1eU>_0b?*񸨎b¤،D;Wxm]|N7U13*;.=>SÜj)CM>.eI1/QvН6Tkk+Ɯn\\FFV#Xde&~WE7"bju^I@j@bQ Wk8w_D ^z xZKA _`T}] +x}ЁM0S,rV+ KO&ƈ`;E{irf0F] w86f fm_8c3V<)r1p +hs|p!QP'Ղʛ2rӤej4Y r, r?4! Uq]f(*&umM+;1 +-c8CjL=L1TDJ7>)BH*cHY}~xI,{7WjWާʇhg_YovMKiN> QRǧ}AQj^G syJG"?txt,L>֍p_>Po$^<%}KDS4 +*S<ܖyd;éIJ~JMn>ȸcI6uɖژ䩊i77_5W2' 9t^}/8%wd0k)ͦF9kih3ShPBULzs'0$Y/L3ol|f ɪ\AW#siS-O^I+36xas @M +A hm45V-' ѵ1S+ ~*%~k˝ʉl * +lك=3_2~OgPs +Ccd[aے{<ХjA {! ߲ۓ;O'9+wEHE&JV?fiӺ j05瀶bhWZxo=ƺ 0zhK5mov (YOut;e=R*yMVn,$v:QڳE.yVl;svn,Wi.[@34SD_!MF>J柣ND @$Y~-CMu (+lBpБ^#$~2è /@̣6 3nh +;۪.3Fq3\َvZnZ"/vNFNJ2V{#ΚVse_쑮Ta8C¢!Η>FL\M{5eH~7;F AB?VY=۩Q i9J.sӿc%FVbdեiL`a)kD=W \ne>NX7Ƒ†2IYf-to7/~Uas[`W*v3_`~:kjR("E +* +e)DDIss,f_n6":hmh+]AqñQqSa9{~8|~bh6GZĠםN\h+(E30~kTMGβ1:zka'LG2>,gt X&@?e% +=@Ihs)HUOeX^m7R7~,, \jJԌfͬ8!*]JR:WR]Mɚ PZ;JN.8ɦ,[r*Α]MM"waX)Lbjd`>:?|:?u>^G$fa. +ʥ_S%ED8 J=ĕK{6r zGG Ui<Kg"^ q +I6vPWy^,uc/5@:ǹ+[N+li{P#^yv,ñ-NѳH⺣<֡gxV</nb6󴳜Ρ +nhB˾PoT(W##ĉTwZU} w-vT-9O᭺HIz) z9R'dI5aZGS˟agW=.P1ٜ y?2X)r4VaGXBe`9Q1͚@85$W?D}z2* +pt +;Br\ܕ'> -vCNeʔL-ʌqKHr 7I d<BgNelB^փRγF2AqCR&t7߄{" D9u)Cw1t}?"'[7o̩~1{>Ru* ʖdClutqf2[l~{S4>J$.nQnlP#x])By`r+wLH?VD:|iUG~ժ+&+Rb gP>}WԹkQǖ]WSkqwZ +DQdVd24KGMvU35KJ~4&jwJ*y;X߉˔O@5hw)񘴕o-9E:_̂o&6#V(ѽS-te$ פp}4%4mrnzhe4KX*KÃ29ʩ~'Ǥl|O5ÍB +;^j㛑Q`exH;J\*`l˴Khk +&tF|(8VǡܷR:ϳoG*UjSKknRgl ޅ-6&Nŗ7O4rGmO[du_TvY{ ̏Iy\aRKy&P7ݪJ)l"W5{K S_j0WSW;wixF1^lО伴^'1b%OAXhq)L7j}=9PX=n`ɗKX#CùA *7{ jWܴTByufכd=Af]F=_u*`q+_i݋\^`BaE|S&%Z a8+QgQ[IK-jIKr2Tcju=A ʧQ"7{ٮם*X|,Yzѽ}ƈf:jCo[>]x^hlhNrϳEDkcCǪ ת9c Ht<)}z!hE~DBӳ2S͆i{;ouIp??砃46ٺ^"1R<-65sjpCSjqi6dzھİ紈 41.$5EG9:=ob쾄 v#[xﯦAF+T(C@RQF772I$^a$Eq>.AEbiO0]ТK5ΫPÛG ZdJ*$d ^}E*֤>?Ƅ$dO _tl%$^7[KSECqz"$]*B]}W zT[Rk"n]EUYvFUW\B6-RB^Me2B4/wͺh4Ek5˖<1U[tD>Q!.kR涧7uJc>c +l/i^3;iڐ0sĀZnS +qW7Np:([568ViAFޜ~h9Pldüj2dO ++61--1Ewv =JCHW34܏&x8,&#Rc3Dvz6RSyu_N/nmكvT֥Y˼?RFװKzn9Q4gC^5l`P\ܲG&ޫ` 9PҞٲXr6 +V4,{a؄\tcY`]lǿԾar鴯؏=b!&Yb ^[\aYt$w +[R)i[{$7f"o Xp +zBz'hO|Ō4ǐ|-j +:}̴a%Tv5Y9QK d0 ?$ćH|#uD3 phrd@,@XmVKY@ou([8#!OM~.7SoJn%OG" +Ü3N|/'O-R_1Vh&׺ NPz8de 勊ZTH;XQ6}+'h_|ȋCcuHjBA,NOS{3 L`]1> A rxӴ*E^.ؐ`Q5 v{`=W6뼟\9avGOXc& v1w~0W:ʎ~f: 0/˵%m KRKAcR% P#CSߥfmD5oEx17B0<&Yd8"1wܡ5 TaaJ3p57A>+yIMcu Zd?Bk1x-rsV9sH6p]DGgO| y5S$aE`$Ls +[Ym ~u8p`6*I ߕ`S88sn9O3nXOE /7f^lbN[PBFO.9Z_.5>F S̉R'}ΪѬ`_dX|{dHXԾ3QlZe7PRqشO5OkZrx5u`aǂ:*`T), +DPQʮdߓJRk=H+ +*#u)h) )B6s9߹瞏HZGzGT"93hDͺ sr|b4y $TK "$I~$v(B#].qi?CN ~ޱ|ܷLcOnT~vxj̦5<.f\K<2p:CpSy,66>|zC +E +T)f/:X1}J+>_~Q;^ㆪvs&۸>.k7yZS:˩㜍rݖۜaKa!l.g57Kv0!;ڗfe %]"XT J3aժlwVj=v姠αe=bI/gH& :g,(y 27>aba88fVVqɌT0NɉB`( _"fo! t}Wg_0}HX 9,Qx=~Jٹx>ӱe9M2mFS)Vk-eZFF٥btg0O?Dǐ%7eyښ6WSCyeUS}l`a8i g"1лJ"|PKڝc,$+&PvꖴGBoj_t4I vqf熚(eC!b׼^SbYi1¨;2W`/7uh?4 +!z@#(T 6 ^!R S#>E/Sq9z_ /G%ӈ0C9[ۼ@(٩P ,}XTOkpQȫUG6 x2e,> -?ϭQެYz/T5FL^`tީ3\#̬D:,vw[mDW)TBZ`0Ֆ`3tBQ˟kks41y `\޸cV#z`XHhwA0چFTyqӵܫ*F˪%*/>9 +gS'"b'zL=N)cs*bR)W<#S 癛)K +&L\9WtW!Y17i*%wJ_ 閥nWJ!p-0T`:K6B+SzlL,~J#ZLHBEe߈Eq1 +ڸTD}bB;*OTCnՍl$OYQ0mz7o9NŻ|hDV[Ve֩b7YZÖHl~I)ܻJ5oOݑ%(,hZGҼmRd!/NEWutV57z;jjs^^lDǾ0-a_aL؁w44簍b^ppi&nX uƻ-݂ -cY4_g ?jGIfH %J҂[%ϩC6OzvWzoZtA$?z;ؼFT2/+0@@S<@>0bSuqw;j4S'/4sEթ(P[V^5ƊHkg/ۄw 0*֭ ajyB5TC J(_F4!m, RN ?S9 :״OfOV"յڇ1,V)S@._ +#Q`K|ͨ%cj/&\: [Ft^Z"q٤Jm뙊jMarח`VCg +w"~>< 8i}XT8dzQVY<p%HG/Û`rq;Nm~Ms\/Zh:(MXа^F.꜋.Ys}5`a((X0T+JS 4&~|iB!! !)$)ʰ WFY]E븎3x,˽}|dc +|i-0Ws +Q_GpRjy0׿tjT̎ԍD1څڍ›N:ka? 7ek_%]a;זF=9-b= &Mm0-vD'^j+/5(er^+EL F1$1KWE|fOFMKm::1`ڥfXЩM*i9 +l?+Lw?-Nx͈wɳ\C0瑃f sM;iđ`$O0z*RٹB9@"k5v~.lB?ug]ed8JAj͹um.DO^^v:y;ske+,L¶vŝҼخd_5Z;q#k> MU\J{l*͟ґ3Doy"UDcu#H)BPit/ v`_Sʝ{e5mpPpy=-2[m+v6*.WۿSǔ] +^DMk,2.#ɲ\!{^I4Ԉ.~çlDcBU\b"c jvJG|H`_2rHѥ tHHBaG :Bf{'9 +[jaЧe +&hz6Fdy?>gۑx&l$^:^nx-'-]O 5@S Uڏy]Tu _,zWPT|BJ,ɕ}`8ߴy?p7gˢu\JO(_vOUue4+Qbi?A.jCxyRJ駥Pt㸲rTfdd$ֺFR>PaL'v2M*׵T]`W*cD*hAe#"ɆKO9JKL2J( KgK3jԉfZnL5oM(_>FOӹGi}<@w#Ndhoo4Y ̾Fٸ2YAz$W֜5Copli\ 32l;a<;S?B>zprjsm1tZc̥{s/J{c*#3ހfϡneh->Bc9SJ"չO8'8ހ `yHϤu-*` x[c')Oy\x!QS9q*;$;d'=NY ,|ܶ34qT=ka%hs䬺UX7Fl[ o1apuxf9QGk4;e +˸7荇5xB:yZdͫ,`2?_a[0~9iY Fs3g Ë9u<,yx87 1Ja,O@/gO㔛94 |.]16'^@1'p:XtwL,jVQv@wl{έ̱\?R^UV\GI+9D03oyd[R<""" +.2}"!<4tH~(-r25DH@l"K濣,/S}"+~wF}V dRz,:w&?C~FqJ}JݢJirjzEgU#p]ZF%+[PjewVjlW7wR/*C%%jGx @EFH)&0_Օ|Xu +DRNXA\0JSH307͛73 CWc+U#r# aQOL4Eљ?s~{sIy?y>ҒLָKd-ޣJ1v*fH 6hz+~BO:IQqZUՍP[UD#BM >$ z|?^!J0W8N WzXfщ@'h< +%sdR۔e[$z,Z2H5[&Ht L UO 췯+52j&P6uRɮ! +a+rk!o4 `ܗP)f%VQTF(Z]s,TR|O)O?ho# ]6yл)OU,F٠E})gsٴGyҘp/kw~˖I'Y;TdgYU'I8@F* 8 $I+A2((+y8OϋWȗE {բbW"@}@C׌teYgvֈHofE`eagbN_4!/e%O;mhtWv6[iyFy4ʔat V] au #QYm3rM/q{~tjD 7fiɷ  . =[n`4qShBrx_5wԐ %nQ~x'G[ `+qb]Q2Ըi=UGn~ڋJ(Aݪd E7Kz +M]!} jnh-Cզ_魺a٭Dfrj6$-4nUZF)Zpux'@]U/ٳۿ3Ug`iU}ڰULWu+SU[;uXJPvOŀ{$KF,qQruH.}imfZh~atMBb0*iWC䶧jZmn[nKfi c+.&oV.&ʭ{5_s9dmIA. *s5: 1Ů m!|fl'6#N +Z>\oMkCZ8)*bEE@(27{I" $!0a=+vUZŁ`-xEJUǺ +~~7TSsV6i1=2J眆Jh@ Uu;7!0 +߽\醮%-;=.e/T7D$v{.ʫ|ZѮmcDֲ+-Cu_{>1H1]"D^nR ٺ:E3[h9 7TJOW+3 vœLimc @6'[c`Ǧ8v!bR{1_ӵuoPE2\@;4"mO m{ ߺE1dA}C=WB}[3']\PJG5VmnYG Xyahd'J[U~ vWۅWo]WnGnR9H7ѨAu 1vZm]lUrTVA +sj6lhm,My4A*0vJR? Ĵ>2C!*#q0MJ!:ŏCR|dFa?2݂ch3dBzSIt?%LmF[AxYGҏ0m;GY1űh%[sጒ@9 q_8G>r Wn)jodEzC.qJviN&If8bg + v|sd%:uTf&L0~p.(RU +; _)w%$/ t# +~#u`u[w.qsY_-*'̳ɩk/)2* i9$7fUzflc9}],툏WYCIkS-ty7>T! 26Kݲ m&cӣh' ..+upC6&@j5tdP0=I˂Ė +C{޶$tR:(ϭuOR4$=jluq1?פ9Si|cqF!_z^SK}`d%DT wV>;<'V=(5H%jWMV#9YD2֓p~~J }D]gNSsjJmn->,vg&SLl#>^i8ʞ%4'RJDhRN0hBA0(r0K+aMY|"EGE_R^v4/?m[˨yN`K/5[71[Gؒ' '铯RGhqꭁ]>iIX +5'\GB ćd^ux+[^%e ֪pxE + 6%!Itި@Ҿ#% :*h$r7שׁ55׈Ց'I+6*ЮwȰ%U#zD+Jt BaUؕ 6}uOr7dP Cu}FEua7RV"KST20 EN{^lkƕ$vW(,F7b ˢÞOy<"_).kh[n 9W?gڈ7yș*ӼuA@ OpIRrP($e[iVYR +n#(aFq&mq3%\g?%ӆM5XD3b$ʁW ƿ5&͔D4®KcᏊ . +1Zo +^`~¿`6z q aXǰ)Ӽ܄'84 n"Db.yC<K d},{*h +ڸh>wMv^ c8Iƻ(~j? +eoyl/Dl5Żרpy1ܣܵ^004{ .%CA22dWuQ>okL<5.ſȠiffh7S-|^TjX[wCY*sG^1Ve֗+˃L3 /2y{+.;CtJ } ->٫y6q< WxA_PZ? Q y1>yK\.!OqM +0Cl];Sk)=RZ@[ɷ5JBeǐ$Ni"0 -úR4H~9.☫|Dϸah-)r~"eoMK%4 _7"‘e +QD~0T.>"x*O>酧.Ey+HVy55RWsEk*PxEGB;(J X(8hiqmh^ 0`}_APWDLZ‹]<4zG֦`oyZR|u^gCF#nr)Va5ƪw9njyIt +xI1bIy>}-AگOShKFx6xqqQ +3SU\ka椚̩Di~ ?{>J3mtߐZt]YNju]ɒQYlZZsNѴѷW>Sݥ0Bj+7q҄fU7m :8^;#eտ+*,_CY3MSU*LX.jQȖg_IWJ5a"9R'C\y׳qH)VU-Z.\+Ѥ/aen/|F[?SPkr" +^Y>VH9 &yaIxQfd}+] +U.o.=q-y][viRgk*`/pLBu+A@[)&PYQ?im/K,Y*gu(i2`؀V"fJSs=RU@7+>dْsmY)w=U?ο3D qjv83׽} 1r@vy:{Eͩԡ.޸,珈~CH{ksv_l毁@"lOR."0Fl]]C˧Mfi nq˶Q{56ef e l[IuY_(i&;to 5kZ/ jjp~Ch⨿䦿iRs!G-֠5 +&wa7WAƫXUr8+}E)oVӃIÌ}qZlh<gw +A?=$6-ޡ|,)!<*ǘ*z!8߀ϸuPpD|Ŝe=sm4'ҢؽYaPOZ(vj?VGgxI=V-̹uMCJH_-C]B~2A\8*E8PTΔTo 9/whaߣby\'F,Ռo%wU/ժnM*T Ƌ{5NJԢT9L;y _fXD\uַA:x")V%V/*]1# )ԋ@X"SVӅ4u.f?Uչk%Nj;c~?]Pۺ˄WҌ=V듍1 +E ֻqd{q׉; +NYHdfttc #&vPtQjd1o ­R)ʽ@}<7 &8wyybH04͂@>o` ~M`Oi#T2"-!NSn\ z$SC%Q%;OzcT)!M.wf.Po1U=Bl1F#F0HD\u̞rڜ*ujQO5u8E$7:"І(UuANgulWYE*Z"cT\kTxlx)$8(YBIY`[}.Bb T$=U8Oŧ yP-x$]0_ +j(sOH|/=wKR` ptl>f*ӡuU<=Ts(&zpKA?sLo`N0Mq+~*m-~F7^5惬H]${|-Ҷ9Y&=X'Vu+^ϖEm +Y/0X cAdPc_X VRx6b|C6^FeC]o-F?f7Q3V>͝yFsy]ݯMF͊k^NնI#FZ.7ƆQfeϫCJn;AjB JFw +mԗ6t(I5beElXQ͌ i,)6QS 1zJezVBf ۹ʹ/ HQ89SnE%o-4NJ``,)~utyQN]vحp+e"xN6y*,7$'x\CQL[8.d@}CɏE)1D?@晹b$?7 + YM N| _Td'wa}0Z<9|3閗3~o=Y>l0Wb=P1jmE XR[louv:.C=;.a.BřS[nWJ3ǟN1='\Xr8۲:KXj6e g΀ap%z"K1.c1ɇzɭGTRiVBe-)K@iͬ!u@_`&2q up%P +SЧ|NWP !o-t_ nyV|ؤ賐e`HʏE=>\Tǀ|cҎkIST!%Gu,%[IR'+#T}m3\/df)`n2#\M(CQd6flqGv첵).Z&wITe{JQܕQE\m`p`Ҵ\z[v7OVo9ݜQ}$SSFMWdnyuя: *o[3 O FRJ0ոl+L+&oE+d- +@?^fEkoo\fyJ8zΰXmi  -Nw}OYpz&@>gݪHc. ]7Mz#fe"g\a@\qyºJc\3ܔ r'WQVE D|PLs\h_h#9Z-TdL>˼!WS/bniA3.1Fx@Ǡ3UNN^nPOZdtvWO&-8ךshveSȉ`wPU_cař=շ}m`<<$+UV66do88{ηzkG}ڻ<<7\jvg!5M!w&GmpfSgO3x? +wZsLRq/~lK]QV:om<Q' R]AMXyu ^ȩ $}! 9LHaH8hʡrTtD-*fY]]wuu[bgg޼ߛ"ȹ I7HR7HBHudt *Ჲ=eJtj| #TI/W?{ΝO^'`v'$^E=7ITF2˵7-^'Z"[x ;[U7,QyWrr9E6cy'I gIRm2ZQ +{0K,^H/>>G@l`T=FZnZH ѳ$m¯鵩KA3D;w7ŏw^J<`i$M_x8wU-,/h!pbP1|*k _U;N45jX_:]$ %ͫX+é Miwzz{7`fOE5FohX}fL}k%Jq_b_A54WK'h?:lTHmm. m&"X7rV7l̨b]r+ OpK[{0EuwrfӵFajCCPktMݻVw[FR(Y-VE8 P?)p>͛5 #TtF%3 qhk ;`LVOpZۓ. j&\Cʡ <*g!r)J;ȁ&xK0N\B&Գ$bԍ7fpt(0H23ӲG1d?ź +bVֆ|\[w+tjj?b7hwJCmm#b.^VBDRb8E]4J 7LGc.Xd/a&ڎ @顢zQuֈ4Tqi˽èb˕ 43~,ymoθ[0 +l} TCuLBt 2ZW>Eh@+[Řy0= +sU"r];û](̏{e E=ma^2'FKv~.Оm0Oj(esߺ Pk*!3IBЦs4{^|{6k\* }XYǠD=A %$hǹWǂORV UBꯪr+Ca6 Kԣe :Zڿu6&?W&k).]%],lb7MX][H"}WL)RIrfr?AƁY&I~_IB${XlZXE&|w#؆`_vߢfu3fm89?9 +̟NՎ`jz1*.@爎܋`oْJ_+-4α6@/DWEjE}HRDl;Y+ z/1Dѓ(z)oι&;.4aZ#gsbZ+XWi;<~n"( M'b6!G lP<^\nM8--aG+dyXP^s:0q \p3bWu.,R&rm#қs)lej(^ ,=/FV6fj;ex%Dk%!FW@ao2QTvs 5h0B{UHiGCOzL'pbIq+'_1Lv +QA%$[H~}{1fKٲ:HmWS +ëd}2w7 j< O7i2G;SWݒ!@YsZ~*PƐ6xQܡ/9i7cGHVf3R>K2jZxH"Z")vHD} @} YJ64T(P_(*C]miSJqOZgA(ny8}wν37;?߇*x"D6HaeZ +5K e +tE=H\ƒW8 72ym]Ly 1N<8͍@:> >6pӹ$.7$C$pA)hJewT*FmKg-lm*{{v\ܲsJa>3_*ݑہ>V5|WG_>RR_YL!RFjz S5fځO2< `}I\:XiZkRH*4[(xX$u|I9̺TkVzl_׼gC%*wXR nY)N.9+wZ[E9ľWJ%wp`Nj[.b|JOsdW,R~#* ĽyFdwCp*L(8OelL˞)A vfFʹ.Knd~A򥾺]Di(i]YʯJߟ?>w[侾7KK6w"!eDp5V* 3VEa{:KoEDcɾJ#oOU44lTjFk,>{S?ýSk>Su=|j}T +SU.nk.mcŮ)RxbT<TV*yÙ<+`RC;S^0-itp<ȗ2IZ_0ȡVVKHWol9=fd jb%}DCy{sI*{ZL1r`n}+D_*Uz3}i779_kjxL+u ;FxL.mmQ`sKzK#>&ޗxiBV^\s3_XX_رC+ҭj|S kϽ|j|[X +ΆBL.?\DCqߢ7nO(M&JOiݖw0IJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z, +     !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, +ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 +R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T + p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{OX͙~ʹ~y~eL~j~Qc=9~|4~cl@~]̳~nf~C~لOiZ/gP8v}6q}0}>ϲ:}i^},~ ׉_LpK-~~,*~&E()D9vyowy=TS3wI!D)J%OBvwN64;>FVWm +S^Di*bPkpة?%"1#!ϼK`L<n-e2*+) X䥂C@v2l Q?(=0q MzǃIz7MEY; Y@K (-\U&>rI^2IMe;Ya"VN,S;o_%sD;fƎ.R?l ;0Dq>8zDKG)3o+&<4@n͗0EO94#ҐnW9 b_7}B2yːv/ąJH삻Ȧp$ȫވy;Æǘfo虔F¨LsI,KhW2!AjHE^τ _wdlXggΩr!jU)[%B\DCfp <_\?k,.wȲirJRݐ=>0+cvZ{HllLVAc۠ ^{6oCҏSمbȏ:sz 7jP@Q;[wg|z30Uq`!P-~|X3+z2lIђ:_p-FOJ*Yr(".O'qäfrCRJ'dc~h!€?`}WzBd;hѲGϲmT SAij9< +ߨ%@`8xLTqė=,Mk $hJdx_r̰gʱhtG,KytomVK0X?R=Џ ]ٛa`sʠ7g&Grŀ?>r&z`b>&z%sxbw&{~څ]"WR%c"zD zA rs!֝=jcf]rmANJl$ے#ؑ >wTfGFF699<׵.'SZ*˺#-Jl.ZZx%m*| o 2ӝ_TWK4eRsu33'jRFBWl| +Fgml0L1, y+Hu2f;[T0BE{:qntoT]okI, + LgV_R:Kϋ0dP?= vE̷փ(M4m\Tk׉o,H=Zw/EI-LQ[ 8F/g֖'$?[u~fghXjݚ- VImKՀ,%ibQ*e97WKMYiHtXTBUDw-49#iԗ/r]hGވ/ + +lD2 h‘%TTT*Fdw">GY?"[f r5ʊ4`TAo4H5rWS8Xy;$Yr'q vUPV&4m/5LJE:S7Hvy.. kPXAl` +,e: E$@BKr.!{A$A,CY[EA;| TJkU>41aƜdcT.Us R&BchR) + Pd;ʟHbl?1;_:i^mMh9Ӝ+,x+(‡j3=P6u>a}&b (0=.À<2&m%u9_~zL!S`(6͟>թVlW䨸m5ypg!2< PR%wC>ubvbF.0UK$K;؂P,!rA5%\v" +[2gwdxJ:_'Eښ_+^Cژ I! v,V72UJLNITUKɎIy/R+=+(֨v6!M @PB%R--3|4-)#ͯ w.ܘ<;b#;*>$eG +>3"و~AZ$xOUx f𜓜x;٥Q h X(Zx=`dš 8b†id, ϐ!enZ +b /޲І2P0~ +1baktT ?g)˧9 С`.ޓ`>'4\DRdPaxԗ?i|9,t Ĵq]"m-9OD'Ex>#Bz6Nk%tm6BDzVQGq,2O: y{iHcy[]vaZT5 ȨR 345N@qG!fYXr{3^M7HX1ey87ҙ;NP9tn/D=}*I:2s̋%G{7abTBm6ۺ4JZmI׶Fהz\FD*rEyք ̣V-8ˉi#7XmZLW:2 +$Iⷱd`U+z3 8"}Y\E^\Qܵ)<&uZ!FM)V"ڟ}&à/ ď 5 O546PW눤0 fGlEbdc 'ƪrӬ[{K("M/y%0=zFBx}{w6{Y50%,40R}ԓvTp>K@fR$7HU( /10f<,1BS>٨RI3#&&pa5j19#yTH9cI[էjU̟~? +7NzM`k|-kqJ}(Ҙ2SaӼGi ; b:`uǤayU}T 2Ftm̔%OpuDU0m~L-_:qWg0~huw-] NVrP =<]x;Y1iw@8,n\(zqb !$zB&5dn61Q& & CuЎy#c%$7]w'z\0Lk{8 ;fGS Fx¬P~Km%t3MccM(bCB$ _ J,@՜ %ӸZ;.6B)PT~~:_tHNITScΤ5_3bO6-[o 7$cn:zNqnE2~7\NT' "[fTT^2F&+c5r~ԕ(jl 48mWDC]X#<n_ T 45 C0 V~ m&AGA7w@w;Q8Q ?d9#1yʕq_eS]y|d*&6Q30J(WG>HN vAg+[o:y1ډGmUV'pJ{"M@3X|*oƙޞ%sfJ<ߔ[-0R'G i++qNPF\&XT~ykPx>–~u2LX'P MOW rة Z?qU\+w>-q}y/sRQQJ@737Ka[t̷E8X,Tp!PVK$`Κ׵bu~*LlBz-f{i8DbMp/ŲF_<`w[Uq. Y!'i7L' Rz$v]c-ީ%HY~ٕ 鞀ws{)Wa˹ԑ`{[z ϡZ& z +- U@uBP.8jz B{GtϤ1ޕq# ^o2N*`DZm錞c@QY@Oy`ŕ^ )H??s %J@f-H%{#}řPKn@u5w:=YX9(5#p 9#Av(~-"]Qb'䠡ya +'£ +vO@%7_*Z-r*~z Ց4!wBpG-q.a+c"wmqk=WfB +k^0>npu5㞃= m]0o-1:ǒ~%ui;pVO/a3;0oKܼL6Ed@ZU%{ ^ ͰyOVNHLmu?uMBEQ1\IُOui@L7Nk\dd[i|lRܰ3"rW^  +19~(VZQjsfb5~Nl, $LAE \Yv3k"*Ie.gj4uDk"*T~~g^ ~<|1cPx7kF84K(/AI\%HG;'6`kK +ZJAFqKq$5GT#.a;1 p't.t-SSUn;QY(sў*M8= +BHZ# GcDS{d',Utl=,}*vcr+](_1rØ@?A[KDlv'”o>=ԏ[?Q ôn!ܘeoiB]u3PzP'ߧ%44Qw L7@?;gSVjgohop7syR\7V%xL| 3n|2Q|-GotuV֘Gk}fd'̐yQ/;^+b#&~ي2(ɚpTֆ)$Dru:5zj,|~0T\~>*,6Y +]7E9!7;au*8Y?Ң#WfiA~\mB\$OwDhE16:_JqBR%*X3 !O:`Iok2+}Y'1%Y GPMJ{rK w_ L&N NyA'ճmﺾo4gz"v;L je %Ɯ{NS6U'*@djNcvo^=Bi 795l€Aⶫ627ICkyV_}B.I=YR2U^c~o\Ƙa3Ƹ2@eU*Tlmcӱ~ xnNU)o`Iχa]PFŚVTC&ϣ࿋Y=d]/..FBXs+$=}buM>RWm6Ŗ6ᢐFX 5x{v*j;zv<_~AVUJϐ^IjQxシuQo=lK_ՑEkZ\4sqU7vOa J?Q)4C^\k[{3y~M|J'g4Ay,$0( jHl:Q"V҉1X&e s)MZ(W |Ϲ\88&tcpҔa͔ CC GU$^fb|8u̸&A֍9ke7;㥦koAvՏ0o5y'M3q"y$[Y@SgÓ=ݎP1)L \!B;U!)/C$N$A³ueuU},3Y'/Jc .8_[ON-<"NawGm_+yj~P]ſ^\y X,r-|㒒ܳ<L^T},^eDR,nkqց%|r,!gJx=~p{"\eeEN;Þ=${q@Q_\?/иLe>u#Mp'Yn_e<q㼅Ra8pLB=(YK[l`BKB#4;c;HS^OA>Ʉx\+0lkOԼ`Fcfup.wlCnKJIi]&fXPAn1کFTKBoI!ӮZ f)~Xhy9 ݨOC5&|T2ӲnSLB5eD0:yP;(w9mΪnWhKu{`wk +kH>*ڲ1 wp5Q݌$;LvvJ1f3n*Tg@oO#9|}?V0M5.ۀz{" NK?C_$ P&B̆e>(qIu`|ob|_0l2WꂝsCܴLTIa?f(/+PIwB WhgšH EiŮ(G6 +"  +"(H2̙dfr $xZEP>ţC~EF:}< \{ +% rH6N$(߫Nᷘ_%1]2:$o-8ȥ I-qt;'kTjJW^}kfQUr\ulNkHn᫂H*Wd6M2 *{`V%VRoJJ`+"yO|s86Vy8 :+;9ɨ=.qqѝ=ɥ^ӏwldG;fH^2`zBȳ ŞO*{M2MoR0i:T~%$9ED~cj<}${.-+P]c=Vzpwz\S;!?C:GFIױqYŞ ݇>;]mS)yrEz_n˕aI"l|sGvmߵ_7e]֭>ГU)i:D΂G}V W5*{f? +($p\)9D$ZYr|(4D܁OHʳ ;ܫv۱jxLr_r ;Wi nV|Rudܦ;@YNl-QnJȲc/14C:'K&̕BOJ{ߴzfsW|F-q2 ?}Y[pXdY<\v+M{ir8~LJޯ vlL: ?@o[g`}>?UrǛI2Lk.}GpI8QRV%܂L0/PUE ?ɹTcۼfHs^QMC!)$ ; ej uIy W6#LMi9ĦͱP*HʘFg]mߝn+|X$Z6K'OQJq m(B~ljSuZ ťbhWP"z@UVJ΂\,<\HA 5Oaf΍C75O Uݮx7F>QL~:ʥ#][eTS2%c Æ~EWg9i%3W4ފ:}޼0_X|-ƣµVu8H{YF"qĔ-F95E!L/3zLw@"FRmOQ&[#ZO/xˤr~9T00bܬ 4Pߋb>_nMFY%MOaN$ʡ˖~ &($~>tBM%^i3ϐEf8UB '`-icIaͨ+ دR=ZȾŁ=5U#5HR>njky/s6H؃E oLyCG/?QE%FvMMz)=ZB.ϡƋ/•3O85&YKլ(ST eҝZVx'xaV4Ë*H]z~h~ i0d,K8CZy{jCF')b|xNJ>V{0e#|SE1b狛*_R"37Boξ(p3_<ݥ%-tɫBetƓpx HuRuɵ)H?mf@Iz͂qrgM_D|Ce +ӯ_wCՄYK/Ԩ 佨/Y0y̸7.]*ѳa !d[m9#{-;W[ U$mb?ci3ؘsq6ĂT t֠} dlv{Fyt/ټt̰KQ8 N"4ʻc'׸Ns6I ][#?wsb,4U_ f)Eď* uä6Go76ɵ{'CGa+RUA=@5_rgs1OUG*ʚO&Q͡4%nlc=%Z vY Zeਝ4? eC` _wvĦ10KB/*Brv4όwM 0r `$CܝGa6;g-N_&ɰ.` `0M/s\PMf`p3 $A7 i c(y jӍ 5!UiMSD-rBFL&^:OF-T4w T3c q]2Rd/3U\;?Up=@b +TYRJ3O)*+sWu.[L6ǼA. 귒hoN_=C|HW Gz}w\2h{?Ur_ס,[<4DmD〷C/Fl Mr_򑹾g"P\TMIiDw$=` IӐ }6.jYx^h}]"]l +8"ӽ΃ǐL"Hڝk:^֖Tm.^@1~qxTlU#U75:LE|4&W25exz*̖̆;M0do^lpmaIS7kD#'͊$"lL?bADINmEh 8Ԍ*"vұE݌5Z5 `z~x[MN&a|b(ǁ$ch |cq)M_Ɔw>bSО$  Dpz!G@o3a]PnN2);K4 U"p+q 7bLay$04iCc9(6>E3a{ R䏡0`?s07y9'`Lq`ScLr&MP.ڽ,_ru/F=܏=1ltŜ 9>1lם +KX_t+ =#ثL +uuWK̹ u)F@jR_$YuBśGbQl+$,o8qlg!) n2QήU>Ytw(^'Y! %GU9, &>YcwU Mj"Zo6VWF9=al mynqA/2AI̐i +qAN?!9NxlbO{eiYQ̶>SZ .&sbj?1_ǡPkٟx`дY!n6fVJ?ffon06l)7BuyMAѢ&m>>Nj#4J%&|E]ۊ:i2g0io*6zXh +҂3;1"2ҍ+O?KjaY|nMHpA/LsI5cu*ΐDx!W {|mpq%qehrYbBt M7uA- +w%5,x+ z!Ί}|%wpȩxeXx|Yy$M}yAz5{+=}5"6~{άq~p^Q~Md~*XŸ~,LU~S@~5 ~+f2T"P{pUIpf P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i +9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy +}>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzrt?s^auQOw+T=y>,{¹luSmoou{psGrlatqOvk?=txj,{ @k mܖnlprxqؔM`WsNuȌ=&x,zj׫4lgmomqq0_s*9N uI_|2so|u]}@vLO}xT;"~z-*|Ly(x*yyr z$y gWTaˢĮkTd@D\dPPp-HG&]30;sCg( 1DE*n6ܵaz*&>P3ĸg| ,X񦁓`S$>BG DǕu#i#܌-`xJ!wم:(`[HWeQ2UFD`|:Cd2~TvkdEeUb2̽p ʠ~[@QdF!7H$ #dLt!BOK*G-iCrB.UlmO> ,B2W<+367ߛ@ )۠&KO 0ޏO igm82=D 4FB[!AIb4~Z *fz\OtF&ӝN&3xF[Hjz&3n14bM zB! |+ +/hw{V\lsTjg?қ۟u 깮D}û.5ʺ(wM ұ=Ljeo(u\ yPXƢ8p2232"uh0 ;(3-ybݷ3WdsF@w ,8#!H*9)iF^ +P7Dg3I33D_)JQNdOm2ta':=J.۱ +s`d+uu- ǵiȵ\L +kw/i&G1|91:H^gW@-Eif?QF?/KvřMkz݈uN0:ӎ3BJ]PU@׊VVzDPC9>RTl{=EY^ScyjN96b~mwj[ Zl'd}[YގM:tU9WI-#d=sѣS IKuƷ6i/JO{s{c@6oPU,'9cV~M6IQ1WwoT+mlF0\Od?oi4M4MC%HfM[r0p[p|R’/Ld/_c8]׍ YpFKM(Ewo@jjI0/kad[H>|/ѓL |00SVRׂV2Cæav4x,'L82'7&n&CĿf]9-f]i{Ta4EeNٟή"V_ǔ3tf65ҷ, jP6Ex)ͻUSu@6M6dFVSˬGŦwƠuy@>.TȆVOdj?#驺sycA)w,zl<ـB*7ij,\P#;}}~r4fxO"ZhNMBe@(78,iA#FaN}qǖ*lf Zۋ M2HB-7߅,yY#p9|qeےNYƐ*M}"A튘6؈U,ۅ#||(qW,esY!MANJje6Ç,}#5tPcjOf=_`rhTkHm=op2s(Hv "zbtu5k#jl_-$nnSjpDHrB=tytn2ݑOv)yL |triIs ^ٟtSuSHt#v=_.x02y)B{! +}~st(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2>@?nC)HKс#Eu$%`^>[ +(?`~^x0_+OËv&"YD>s5x']~-if~>NF" P^OG# ǖ0<7ӆ7 :sXL!kݱrx{6Rt"+@q*7k1U誘Y}(~\H`J䞂\ +52[{F;Onݦ *C{2Hpuw0D(MHOB$vKѻX{'V' 5c + +sh]T4I DGãTD(2BNlz9eB_ ݫ.#JUbGɰ Pc36߅!3?o/˼ 4Ta1l-vKWZApɾ<>\Щހka8Z5$GdW#{{ߢ! e8l&Vlu4ʚ@ԸQWJ"쎛)9(6gf y'1?JL)b쭢l]4LkۘPpuﲹ)nCA Ŷ+2dEH'Hm&Y3uѷkѽӭ1n]_Z<ڮRvӛpjm9G݂#j}dA-uڠ +0\C"dhK>مٸ:IFq\BVhF'$[I&3BtK\ D'`;I ["%#N\I +|?a8+ş3"-Aש_ZZKO%u6`X{cͯw1 $+OM{'E],jz6+~ Qk a=_/E qbVk&S7fg\"&]KOÑ: %ijeB>%j:l=T1e~/ߪg I0^YV)<^ϑ% +զՏQS-WGpaθD8ߠ9D֑ՃXM' +UJ]I"mteuuE)-3`Ҍ SoO6Ju@$ZZǚ;oam>݄92)@m{>-V|WU>r$Ӳ]qّ¸zEYuɔ>GT@蚩\'}њG9mp.d.@L4c&,r;b ӂdlt3ݦ]Q<b-w Nk k bK%H@ j"W4sf|Aa{8c%J@bW\E':Ehsř=}9fǹTW !3ߔ% פԘ]YzĀ&XIkWdPيb]9gbIi $ O1wu_)xS$P)m/UI .mpsf5Uwl}oyh 4;=DUIKSDSjj:?2*w0P4o+G4O6jeu HW)ϛ=ݮȆs51 okaIӽ֒Wo0%>#}?V5N_r}%7 +Լ{!`D}K_4 +!Q\HҽzȔHN>uA-^Ჰbg%+k58W #wi+q0khcuTT[`5Z[`J &-v**cs0:-7o3G(Z!d  z Q}vx'E}aQ#*'viƷ|'in˵Y;eR{E1vikYT24o/;K |O c +Rr_T'UtKyγzaL= zs#k)|OĀ܇:axim&&^cŽoIѓ` +W82K/ױϬ˽^ipuO:JD:WtG<8YJ] + ՄyiZP-|xm4rQe`dZH ;4SX1̚`wpu>7 H2%Cd>zES?+&e{\Q>+) ^T9ZPFV+@l@ A B +r3L2$$x *,^-ڷ[]<**RInpdk ŻΫ :C>KXi<_TTՖqcs.JmZEŒ:^΄hsVIbm8tSX&^ a*Ɋn^m=A2s^mICca|k`K{"Y١:nf,ڱW x_n~ +!f睥# Aɧo(u +gįVg攷E)?n/ؠbdSu3QQIB`\C!d +P,2QC[Pһn`RXYU^',|Y5G4-},V{:T5zGFdx|4Zٲ u'ʦ"Ww[f^'0Xcx2rKJJDJmB|CÁ=55oc/hNL9'0jI. =$!_3s^>pX0]ScԹ`gi9Q?+,O|ekkC)6bf!),MjQZF_Y[-ۈfiv&mH!`5oIxudP#F +P&h_2nnmMsC?wOt[Pk+jnA ǐHځY*zל`L﵋TL01|w:44o(%j̨5YJ_|fyl00DO+/.5T"$8[g)T`MH?Ɠ\fިÕyL/\Zj@Ν(Wڢud>P"Yd'$$ʗVJ+W>pG[^Gڻ2|M 5kci{ZJbILFPCR7<]'wKÍQXb* +$f»~ ^̈́:)]}pA(+RXzE;b1t!9ݠBj` d> !L7gh%7nׅ _Qg1R2Ǽĸ:@n\KX)'WIC0hݤ!XL}4l5 Vh2,?bLb#(sÀytk]:ibP_"2S&F ߆*:/~5l6fݻ Ӡv(l1u;8qi7mL[@Wxlg Y<#nMDyYZOEX;/C<_IfGuROM++c7S +4ƊaZԃu Mߊ]>]o/m^&=Nh̕.g*>d_$ +]koj-]wz`g`@XRSZ^6uV^og~XQ 濮a%{s Tp4{HLydW)YU&R?FD/'gH7yOG +S0᪄g :po)-.XF:e*diG{.㯙nwn.tY<"`7dsSC!x$g:SX9Y%r_']4K . q cYv.㏢Mrm*ADbW냊M1Dqby9mT'buq7Or }yXK8`微.;~1K}wҭrB;ҏޒ &6 Rr*?j䆑lugICkM|vhZYHn8VzQ3N??֫zGP5|No(RGJ[5&Hs)qq}^&2n:zǰkFmP03;7Nsi+ZiӍ ^zs7Tm , zb@p22{96ʄ/= 4)c x +t&83B-(;^SedSy7yG^H@Es7<AQ|h[\jeZҎy1|i-M']|k!3h{&m5&[KiK%}UEk̀u hT[*FkkOZ e ev]G ؼ;GLW[d;oo3xY{OEk[@|l2섐^򒼗F6a 9uUQ[Em'*uWAw:^WfAw:Rc$DZ9-N7~c + +?;A34VfO 5*DvUe_Rqr_pMv]{қ[;f4( c5ڑGdxEjO-n +| g8 KٶŲ]{r3J(?ұqlu;S7qWA}ǰ=o +nxg|GCTpTaH͗O0U`llڤClt0jh~pڱY_,x',IUjn\[M zDBb<Ô]T7S0Co}2%sF͘MQ ś!7fSѕ&.!mFk(+O Oȏ@ W1fG 0JZ-#=qb>@@gIxFz|޴\E=Yg6atҺ*SY5T9vh  %2{}n}I90v zRf8kOʼjVo:*xH3_ 6WWx4\;5juK::i7rʶYAd~X:J1<;e +(;MsrlڪU[y5vw(k +-OlHWeG㐣݆L9sŠFp6i&xИp0C2}TxmCH#ѽZyڇm{+EAaWdVSy%ې8bש"SLL14$Bs&Bj&d@Y?O+82}-D^ݒD(PR{Ѭ.s!$4Pڣo\i(#u"D8 +:]C>6ڒ׶*m@1GQm lìOrusg# tk-ۤ^G) yۂ2b+PgDWB;T+4Qv{9輵;!f6~/ė|@r~EM$,<`2+oMҿ$ȵk뤆)<$\nnu|LX+z-]:r"Xꗺ.KW;–YFC :Aǔ+IU u+U>.+͋;SN@] LUXKx6 ͑8=*U4^qݗۥ>S韒+Ż eLsf v?m!'粈Yv0zْ2GwT1e{BHM, &fr(y)% P Ehl% +$EVDĶt o \~6-s//E 2<뤪t :mbpVn(Q7:ziZNl*3miИ` snX +U\Пbi0^Kc=!!{pwpyKH&Ș/UDg#M@1&yf_sIrŔ\ Bc7HexXltbu!hI +&) ֩ršbps;Cu GFq~~c6RbO'l"<͖z [T0}5y V|EWrф\2aAA0 /ɷW&aA +AK]מ q\kPU"Jѻ?W{j#'rG^$U)~VHDTup7eÊ⚊R"I^w0^+mOXiMi-T5ȝ'N]~{e r5Ճ-wA-VYF~UgBOJt8y0.{KO(vlJ uS0փyk^?6Wc+ +Cl]Eko%ݼ脦g}h0[[tVۃw,U^|}X?4:a<X s%هU)<@ZQ/[6 . 0A=fxIҗQl3\PBoJ]Դ\>[3?,ЛMOyIOi> '|2kxo6oy*Zo9XYifNP?1k𾠣 *_BupֲB[ 4Xφ}P73d"dٮ&<ăT>x4Y"GXF%Ngt2S 8.hpq܏#~2HleҢ(j =~n$ Y9PKC‰/q䢘&lrS1|8+ۺp5q Z(QӸAX!\$$$CsrL2$L%,*OQuOłBuUX뵊]xV~n,[|nC +-bY@X?(e92"կ)fm6@>_|Xȼ L N+VJ2v&ǂga:y*=>C,꽅zqwΣaVbP$Ԇ3H* +|tc^7CvfCUʆN\A X)MȊQrK{Fۏe"j%hCi24.$ҲɹDӮ?2]HMtaPZ+C9J*_r%QNH4r{W) |em}^e ٻ +.v_.e'T)V4(FoUgzf0=rƣ[(hGjKҢy}%]ʟ%(y쭬0L1sR1w^NJO7 نyoxõO`i0)¿6T@JJL#״C[!)9!w+@,&TQ0GU5a +5\1(-9]s41y3yʍ/ G䇫~IĴ41_35g%@.1N§ N̡Pi'74@rz8Z? i;f +cENOri@Du{A6.ѱ>1_:, Jf?/LCNN*E]٭!mq=p)ݍ +cFMH?b;t% 7r~L&3>ﰞ~6slD'9?6T­ϙ^ 5; +k[}gX0^hq$WKJm3qV/f̔&|}31sO[9"6ε6 9K+|dj8a&kɐ=9wUͩ?|0,lugzeU,}* e-^uGSoy77bC#Qşn[,( l^ 6!ʌ>":jbiq2$V1\$ǕwkGԣQ%[`ѐJ Ή `]+Y)u!*5(HIdaoElw17hYxЈrMyA39ScLYgBل*dlQ P/Džml)IR`i?ĞAY訌:et/ ysn琸M>dSG&HPe*p:vFӫ}9|%*CdڌTm ؍θSVkq~VQ< f +CB'LH? 6ǍZWzjxA|+cshi#a43 KZr?'H:m2AĽ eЭdcM^k^Cj#,@DL2I~tHGǫJ̀e W`_qZb +"pp߄CH I&d2L)xʪ*jXEtJJ]EZ_=@XY#>(UT#tgE UO4E]cDix`Ffw0b(U +Y]sAvjfhw@A,bx#iu+E_Xx˼U-EW'_@ce2b1( h^EN +`V[@-kbn_Pe:60lu-'\j|Dme;tHGD˪&աD!ߪ@M?B=rΕtSwo2Y!;DLž]򮆁˶Rf;˷-r0ۏ첸R}"?5#mk+3((.RxP{K$ ~?uX m(U$C[KIl9vL"F]C2q.OI61Qx 1iQZxle_)O&uZCj7$6} A~8zXmb|n^i>]fQBchJDj^ k]rou#Ih +8ЂTc1)üW+-*kxueI~PE:LR] &t-¬^*$M4-bB c鎳A9ZuKDۄT}pp;dzx0w + 7 ? rlJU/3BK3hf@jm1RזD*p֓2O(Vv +ndmMAO;1S`M-a6)N˛,_ +l[c.Hі%Ŗش+#]lcٶ$ s~&b~In^Y6-쪸ʟ/FRa` Ei|o$Գh:)=kZv6g|V'E;R^t\"ZW +YnN'⢒LiK[!6bjnf$=+ *.ӃKvIchP*%zډ,1-pGsD8DC7x&X8e!j5kL4Y &XqYLA)$]s_g^.[fx́{sHq  o݌ KFaa)1$PoגיDO̐Ńwq?0$װޮxYZN8$8 _ُ$`lcZ6ݐ?ȇY+0H5zቔkQ}Ö!~QQ2&P{BcH|7gz9^sylu^A ;RckU>)vQ 8:oVcsK68#7>^nNk_<w*>mڹ3"ΨŢl` D#ޣ7W-#hD:G"DxA4 >X( 6b-X>*'qkxOOX+{5| fP|~NEzEy?|S-2<3}=`[~#ltGPj_ _߷,cn$kaM=UlMQ"gɆ 5iЉ5M%7R%qvLSG[]]M vKsw>q| +7pL=#.[CjϨ^wUOlTvCe]j20uuFfձʪ:AƆ"E*S'_ +!Z:Qpt47rv윽Ys9{<Fr׃d+G1 F~ /bm1&&x, ^ LtZnDz4g?x7o߽06m3fB|=ksΛ 4|K5~Xp%&(*,.0<664^?|X@`PsB#b$ PX<1A͹O3l.O IrOS#?UBP' +BPT;} *~>22 +EOL_~[ g ,v,cy]zFl(}FVύPq㫪J6A$*H$Ρ`v0;f×9zL2ٞQC|QM5xzAR+Ԕ k*xGjsH%Ť^Vaݼr~Lȡ3h5$؋#2'$ +,FP].V!foDc&2`* _'ǹ{# ݰw%{2>aQ*X SV*5r1V/\2dL9x~dE ]0 +^z[AKmILŤSK``;m\ojc{.]w{]}A][UT5䄚T9"#֑$-QJ֙ +(R;7n^윆a:VVTST@e& +PkLlvw6ԷU8{`>5#8-Eʦhc5Ij ɱUx(EUu=XU=ux}{tjG +4a(=Gr(nËqZTivU肝 F7 :&|ؾĮȬ8CLNlG\nt{Bvx~T2?]ъ?:B': nAS+w."nG%PBRBz^MLpz&*T@ mHh؇Dc΢&ZT_Wj 5yI5LOї5m + һE/`v0;fˡp;ϙ־A}UlK8SQC#kדtYFUVErAF̾!b7E|{e wY쓌E8T@V4U4<7IIiA(R@: j:8vug*tE@EQ*r 럄B; !rIC@V@]_ӇQ5UW/)aY/-Ry%F2"  InK/i"tY{p8d|Q\Đxi'6ĩ/UUi5gԧyebLY(ke&\1q(h-Ev;wΛ6 !5kC(xH@m՝N&וy UFeaf5n\+#$,۾.wAڐ&T%_}ؗY6"s 9G&j ơR9aWLt~-m ANv$&! 2p0t{z$?5Z uTj]Ġ`9t& f,h؈!%gS$&T<6ncK /'z&bp`F*8b(@H3x!}': yo8IP&\P{C@Rt(ɓʌ*rH1𵐗&dx'McČ`$f>m|S~䃱ؕ$x0mq]Pe& i#eF6AWB~8QChiTɞ <|]z[u*nz!bg9Ԓr3lq Xr3" >4SPh=m@A8 {Ͼ+\Ǖ--F3a@4M6;ҩ'Z8JԐpjj6 DzQ0'չ=;Qv(X N#0-z#}2Ң>ƾ#Ahw8Vw5C/[r:mU5fYH7H)N6S PX'>}<5ӽe~y'NNdtOݗdjM Z̓x3YAdECM&-ڀjG ož>ْm\-u ZTS#%xG;Ѣ8]0^`#Hƺb~ںnA-9*ViTR8 +`'yM>aATm#GђZVZ˪ݐETD_l }mϒdo8zPc)VdjGT *:YϪ z*MSqKP}W7K۫Ov*om;Czzqt}JeVl|eryItV2j)kb腳h ?|lIlN^mzQr}\E+ݫl([Xp1ٔZ[m@_Xi䮠pvfy?q)?GZ3=@W =T2lvsdrڰP챢ށzE     q5YTp +yOCŻReb &l[Ghmb9M%>]8!p~{gkl’B42?ȩVnI6 +e%2G-8o QP6ncN/J/FQ&= }-9>#, +>nƙ,Π z,>3'ЏԍI6Mo$GWdosfܐT:jGyhKڻ)k[Leٓ#ceA>Vl oiEǪ2p˪lMe.{J~IT"Cvnc53}-"ÐhI'ِ,kHM"D[YjsUZCM:fD˂+)U +Naa␽Zfk@ 0,"IBLtrAlĐ  N9Vr:#Q1ha x!coDjԀE_dLqi&]8NLSNIS/)WKlƜ5==\[jTv]٨@(WKsm!fwO)iiLڤ?鑓#tɕOL=?ٯ9,o9̳t2UAP@C6-!d!@ BB6BĂQDkop94Mre9*ӍRMd0W:rB5*G1GRBd; ib"P'dh8^`B5yϕJ\ L΄*nW2b߭L)3t*E&' sdr* i@s?/=:Vh,~ߗ;{u15k}6EnA;xobhS$u,N%ɕ8j 'q/qO=`S)г ,Tרs=@o5-z$^˚Fk3(lUA?5(!4v(_uw1ff:w-}hXKvzqAOQ NϜ@:&z$B/ $Gc*8?z0;ߗ]/ZZV#sY]X&qzlKNCd P¶GFޜ=;èj!,z5ϥ+D`C^n"NJf90 2?}ɉ=yΝi*mJnL6M$_e A ($eEU Ȁӏ^9,>IoGs}YEHBWh֯յYTwL3rS1MOeS-)*d`[hh%؝jӣ͓\$|[XRK@-_JoЌ+כŋ8V"]?/&{d_$]B?,kʯ2xF5xun#s +[oyDs?{how1,8 fL?CVAyE% +K.?)-amU [5[ڜȺMtM0o?s}*Ϝ|-.̩ {JZVu (lIneC6%FQnj̍;\M{w 564q@p${{bKXQVx &\^fA{O򒻭m.B0b @ħ/d?4m/o +y0wA6kloz=vVtbd.RC{,DŽ4]@Г zӁ4#L#y,xK|}]XÿC>A𵲇i6pD1|܎,HψP(@c ii@Rq2[eaU^FR6Jz!` {v' fQm)0}^(6Rc$5 (r~P,y9wM:(^։gDHDϡyl"0A4t!5F5bl ”#@ +)ۚ+Ou`;\ mqׂZ4++'8bqu2ǬN Gt$ F7 G,)O '6bgSo/+WuQ.mlc`rj($oQM +0rIF?i#@I_S>8Z7gW-[ܫ J?&[1Ck\B"mф;[ + 7qD +$fØt;Sj͖%qzfg,;-^Q`-}"ҘGHv- 35Sl.J7oÉ@ 5pNgmwٱٙmu*ꊸ/#7H NH  @HB\$77!PxE.ov[O8bD>Π)Q6AY-aWjLGU-oF7k1Fj@3\=ۉ <'#Gޙ?uߎo qxeP IÉh1nzY=Wu Mզgԥ'(e]-gCGi.];^ɹ>~o[?) oOP^M!=aǠtRl69m^rU4\ O%%-,O]TB*s;?Mw+Pmv{ւC)#HܥO)ih\LC.!K'b1 HQs.w{ϟ/2Tp c6#s6"bI)i+˰exVz:;9 sYAnSKG?vOW{$a R*ը1o7l ˯WC^kh+qf7 :B|J+*u}B2#PCѦˋS%e*:g cCh܁li) +`Fm5{kï 5!>s^sUXt9UJ厓7YΆ-P7 $*gz0W]yl`\:XA>s97<5'&cE=ffӕDdyix M8ZH6."4Fm Iz9)d1 ź F+)mju@a7gDfFiUcԝRڊXxi>6|XG/@@+$kaQbќ0/nMҋ]%:c!רZTxY jq4Fּ]Xyw?=5a'v:u]㌵u=,"@n9 $$!+E@AHGBBpEA."(hA P뷙ӗ}Їw +oPEiԑ9qͩ[ q)Q<\Uh.gY}WS(35QEJYj)zS h/Pk<^~'?aS| A :8}F/R+|cha + 4Y^HjZU7 +[C1 ?w<}Aw{_Kyē]Pmp\+ؐ- TźˠRVYĐ[tX;-i(i7[9GPq4zg6@0=4kֈ\c-MANTij *A+7V |ZQ4fmld/ 5@ +ݽ#]w̋Usri07mN wˌ|!WQRQIc fWlerU:Gg&{ q? +n. |f0rg$u͚B869A$Vˊ:bVoi L,EUJ@!Og)Л@v4>4=A[+g $fy4"nv,9r1gJc:5J-AYL +:J匞Y*ϗȭy5Zg!W6@@6,GDOMBӆF`+٘^-+*uj/iuUcnC9K)7hsz 5]Nٰ;Td~>TJ4& *ow} u?zXcΑggS+~P2u.3MV&*1Z,_e%I#\iPpYRg/PphmsY}~'kGs4Tj`ޅX~>3en؈24"y 'ʸq~tZh/5kofصOa8s߸F_$@3q˰>'n9;7^^^=1.5?jD'_X,D,Qn?t/J\p &w!ב0؋gTStZ*j| D„=bCB3WYx{ot}5[,w$ 4LBA#oaQQ\xąʈ}IHNK ȇߠ Ke's}*_};v$p;$p\,1~ ?$ + + ! +9~|?}SRwp^@YH{VDrqQ"Ş'VpoTU$VdDױJtzt +*BM"{i1a=~oضR[ Q!q/eUV.yVH[(`IʪYL 1KWiE2c9rg0]DgQ])ܚd]ѯWiMU}:o@:vN?ćѱ@Fq?.[cT(y1oM70œh~8Jh.#lQDҭWF[3j;E#@O<~.;YKhk&qtd=rT}J+zPUX}Ψ9gTz<#8:<1)y/%O$yevUm:>Cn^!R$,@P18Qr .eFҺs&o|<#AD1@q47剜_NJ5yvAT8a@Â*2 +hc^3~13JEi颸r!:Aj$U^NMrs!&xt~8ۀ>4@sWѴm)9PV-kQŸiP8SYFR4c4Kl] IC4<Q zás!{2 ЅfNxfKH~JμΟuF^4܊prfJ@г:6BRBd +Am-[[ꍏm@Ch[kd+>~r`vS!CkBD+Y]d=a&JD;Dlw؛7c_so` + y툈z6tk4 6֗7Z *-Kآ&%ת#qfB׆cʡ2 GMTC?.X [ZH5:Wt6譥dUEFIҬŋ(ZǗkxZ,z0= >=P~?Y9=1y~4tV$aix%A!jLsLdEԶrV!tZQ<s`i ,{߸?xQ#/Ne`%zyx+UnGz)xVY'iNCV`k"|FyT&`y'_z>#n/F\Lz2Cs/)Tb%Ӌ\8yU B+|Ȫ/: {7Ӟ޸ho;A[,8N(V'O7* xUzjޝ;Wd(aCV%l`PPyp<}捑^gՕBkQG5wa…g7pkŭYlhd˿L^b/IİK(9w} ۿy7S[Zh=(L0~l.}-ZYn@."@P +gSDFd{W5d˸:n8 \o3K>^=ݻ_%%4$&8 j%| A +oմĶ^Ƿî:fԌ& 6-LzH| b?ӑu[}U +^^_b6QYU82Tݘi-434o'iͩZRn +ZoH͟sӹ?}W>ߪm7 +b#1en ?#s"*aQ{u5k ixtJK} +LjH +0}0:[gAM vtv3tљvZuծ]uC;rCDD @ !`BBHHBr;\BZPXnŋu ؇}f~/76ذQ @Bbh\Yuun^R! lQwLs6H-M{#RpRʒKʓ7k׌MrM'?gİkS!" q8@& xw3KsޖG!禼:􊑟 %X~H<齾vmWkaİu~AD +(Dh>F,AC~I)o|J"&xŭԤǮ03bgF}PM}3-z[6|ǓoK@C' 룐A PtD`#c{xʢHjl80bÀ!s'<jc/q/Ӄ@ | +8- QMxFeU>iHR|/1{.K<['-<+AIgPW7 K g + N H]iD/X"IYEMo( +g]Ytd_6]8|pR~ =)L}Uz{@ yf4HsRA:VPRX[CYqDu*ܹr. Y%3XlsZ~=*UN^i\U^,t{gP5y - AEr(ӣAeQq>IY`<<)`?5Y^2]b+0gnϪn]T_\Vc/=˚%>x[@A#I=,-B- g Vm<Ǿ_%߭PfZewJ-۸?{5# %SryUC ݠ>Ф'XʂRlFyCrsTI0%ŭҐǞ݌!Wi KFMvWZfC?]>jqF-VTyl?d^6b#Sl0bYKO̹4KftDuE5spx!DGSvWLv|j'mmcUZգ_E&Ѕmc~0 ֑ܙyWk:nv}þv sv$4y4A֏K磻2nuJUaDG222qwQ؃RpaWPgM/ uLnmXivu:3_0%yN䍡I/ɴQ:8nj %bP,|Tv@^@q;$8ΐBOGhOtP___r:!͆i`=li_(x1ra q#Ь$ $v@mdx8$ F{8 +;("a)^STS 7 +Ә>ɟAdL bc!3쨠bUom`kRS2i@1ȏlr>>^@=͚#K+ڴW+lc4`}_81CQ~u6hxF 0l? y;H !?)|$Y"3?iV徊H!fLSI̝Itx#{vMH!!M@0cr?H+e.%fNMcH͐/dLk V-I9wȫ_G 7^P6P%Ȩea-\`XL)jYFX| ך3"紒jro/&ꀣmjv;!NzA1 +1+d)VasYV.o*X0N?'Tg<'TZs{ZI=yw)=?S4О\ p|*N{?(ы +Q#eMeXqiJѳRSFz9XFRwOMnUzwOqKqOVgKx}E5qcu(:ʢ2 R^P)R @JHC"BE0 A\ gnև}99? ^!HyYz@-F*#1KcH9}b_Rh2/s/gf 97y7 HPa 0WRX3aA *v=A)%(j*5ybf?7 +@\MH@2 P7]APeB<*#q +r|h%x\N/bz|VViè- +5(n@ +^$k +$ub +wkd߁zf0]1>F)\d7KheRUr:[Dx%2Q5I%euaYI+tJ^%(G-il \~NSyU0.FyaM𔋵dCPq d&؜L,QdJ)BJ)dB֋$SC wNyߧ6Ʈ6/> +qJhMIlm"Y+q &WQ%+ŕm +Tbs@@ӞEoܭ-~b0䤶2'rą >UepKyBBc^3XVVIqUz1 >7O;AtzB;~ICțF-LZ,8GK(^4#J]cz9@YA}O_\;nzGPLh%%lƲ.I*\Y(ؼX%mK$ik ^-!Bs@i +?lu?ov9цwD%HS2{31| +n)c!5*!/Q)Hj&I A |sPsp3F>M/Gl|tĺκ>mw3ȭUNӑ98żbt,Bw2IjVs:L&9Z&9&^ MaݕɤvOeq'Ey+_hbh'GDzCȺB(kAzE*f5Ό0"4ӌ)ftPnjXo]+o?سB쨅手e36M$Po(u +v02`Ry=0^G/z*TN k㷩a#3 +sr%ۿ +Ve ˴?si1ߓAԇaqIw3SY*v5(Y51讆to40xQ9rl|Wӆus^Y~mKw|NQ^#Bqsғi1s̈9Zn0/GϷ`{|{cn[:6-2vk-oVZm-FC q4Fcqƴ(c j&Rߕ}L{#}9,Wϼ3 , S!VCfi}ؼþMGNK?z8O.{—`bc?[BD/b>bSPo93){J<#}Yw:W@F4 WAZY۾[hΪ8,v +]#xA7̀}@a zZ`C? O-"ܖ#>65ڷ;2"{+vM%\ -ypI^vq2_gQMg9=ǥ=Gg>(*(Ȏ;Hd%| ,심@EERVOU0l*wo{_;Ci zCg н|_H)Om;ݠ0ʃ]ʬ_Y4("65p`63q' ܭc~3!>G P~؎wr+ ..:rN@uᎅEc *lظ +zHMQ xzAԾDkW pN8t8@`s$@fka;PYln "b HQƺoc.᮳cً9 ܹ11?` v뀍5}wG!Bj/YD}鈿S ++5wqY.棇xcy/q14o(v7kHx AAn8x|A +e=1ı.${5pנq +&+0ȋ9 55l eԄJtJ{UK?Mj>"k>G>EOsE7ڙ+2k1`0)쉑KxP{ +]D#؄t +J2:xՙ&V"_8Cj71RuӲ +6YPsMҹ>jY,BOz;[Rd:MRhg75V]={__Зsbc kAENBv?k|?0j78H89PE +-aoPoꤜYB#k 5*a\pP&k, +E|>O<3KbXC㟡m+y~oߛ`b<&Uȥ\59颦lY€VɋTg*uũ 6cdJ3Ft@6cv`^GKq;}^] +h;c;H N]/eS  VUfRe $7eMZYWF0W-3|@oΗ l1a ؜um%]V;B=vB\pW-%\gKERSy*ʐU(E_0}&79 @͟ +S߮\tncuO:>hp{+!Z#9RM2Ǫ* KH)T*mN6M2յ4\DgB9_2?B p%MumwuL@#pBA^ ST::8iQimlY"YY9}^Pd9(R6 D)LI3 %8)|'r2$E9)yW ro?(}Sӑ) ֩ COǥ]%c7M5Y,iY!iFy-_RM-ϻR?{9,Rl|RRF$5tYqE7 )ɏ<ޑ)  Y4PSF5;/xWg-^f72.ԊU!AyW2*R/}8Bfzc%9gʥAgjĥ:NwJCrgECzu6Wzsmsw~a5eJmN qȈԪkRbWH:&*_V/+w_rDgfIkU[4Pe1vGO}MO@ٛK_omϕY' YwFHNM?x=G_sb:Uݔɬyɮ|ɭRAb/+զtU|J +WmR}mNW)6'|cDŽ6%ňw3\Heܩ%w_J{1 GV(d2*uTnVyxիE5.vmyN5ҏ.b< >oDrZc}[-U$rD$j {.TB2/^#.SjПS3gi{ݒ>'Oqb_B]\~gݑ&ft{w t\ ꨎltz9)z68D WoZ?u#ꇗT ,iCzҏNF<,iQL?ЛO`S,W}ueyUL+vS;3$~S' j#*eߩ]o^T,7Y+O;'=#e4@ӑ/rdbO,B&xȏYhuX#wvݗ +C3깢L!rL:{NFN&&%ST˴}P<4Mt +/fVwWkS%*4ҩǡ; Ra:6p`F~ 0cFnuF##G! +E$Ks@9]0D Te8v,`X` N70I>~ r>ę["fȱ2E>ރwf6uw r3W)˕ 0b +WS $x9[LkpXBA{c7$;C#@!MO/ X/AbAh)c52 +E0"Z+l xj=ir$5w« /Urc3\嬃hD1w!av%8?)b|Jؠs~S6$ o=OQ3MAdpm:f2ɷ@Hq$KˡS YeLT~Sz7I}t _(Âh#t! NuM5exuH،x1bCp = Ȣ{v)Ki5)Zޤw=@0A}N7PF,`Ȅݾr<`&OlX+m$9CiFg#Zd= ̠W5o*oQ+~(F{.0F0Lw$sD% lggEw:v/@2ڿ.bϰ=l.R-:{RUp#V$BB Y$9Y$0Baod(PW+^!,E^y>9/yw}qzP!qO( CT=gd W o#oŸ_F M"#Q/IѯȷP(7b5. 0w~B~`9PXT?9; @X\V?, !tǻ4̡Y%ԴjH#uz:~CCoX}:No\{5MU?ͯO+r3nwfB` 9HY}LpuD(09ZMF5M.t+y&A ?,'L2򤨈2% `uM%;Ěsy~QC| %'bzjb72zjRXMI\I-)'Kb mB\@ḨOH8Ww~rCsk 3s63Q64r6[!¶K&~˙F"D]?L 49.5%Y =7pH`1],Y1W|rTMOweC/0m|L"H +Qo\JhKٍU}_6HϵIӹ{n OO?|{e/ʏU{Pu''L٠KT2^fq OhgK ^\RQ?& +lLjwxѬw݂{"YMв֞\;Tw}˄ nʦD֤ctB5YN7)S92 C'NEEC,PGI1YR PJ[rY¹}'}K5Uv Y/Ηg1c|I'SCR(NYd*R!Z2_ɞ*!hTAc2px3H]}=@]_Y0^}gwt# cOU EttAVJNSrY&U+UJJE1HaU@5ikwxN|ҹk5zC'KԘ<^-j3$/K5u&-Qp5 J暒Qr4rn,Am@7dK[>Tluٰ}së otxՕ`ߦ*P'B2p5 (\R' G&w5\gZ׻^<|}WwVPr9꘩{.+a%R!(Pq9g83mRa. $rt >SWV:rk>WX}rKEGK 2؀9ZG@$Ub\TDc+شB-h.YK}6(E[%XӸ$.wBly; +OU+ڼGr꽳ݳҚ7y(n)(A=Ǯ52:ZVf$+̂J]#EOP)=@/q֯/qxpoӡrΟ}=K+3FNȺ :VMi ӒLC5vDS7<]~QmP.rF/Pm`C߽yݏ:6Žў%GVg  uDЏ fB)7^^Lu)6Z2>u䝆c Ъh](VED$ +*d/FI + Œb#ngT-.uGܷ0n +B39+r?%RC]9˻RzU.y;w;l`Wqy-g?cS_iy=*| BKZJO6>b)MSXT*4VUj^cu:ZvctWn`>ӳ~˴[9N;W/9'%j:f8#mϲLviTv:^֚ۖǔ.[Wd1uV#eߴj%?Pbv$k4mv!&2yҶ]7tG۝8 /t)]8IWN0׵^bvWrRsLyc?=*˷ /m $KQ TL eP`F80+c_ĴŦXJU$& U% J>=r25j"#C##KnD]=q=ɑgDGw>ѝW!p|!ݲ7=^Jp|Rq^>(9!Q( HaY1!;BG.;QȞX?2n )~c3:Q/H&à r"d(|!/1B?T`GMG b ֶj+}<Aw#` 'p3nI`ǃѴ(ȦG@=# :d Ry=[9}Ʀ߷ V|aStD}Hp GP''C>i>ԓ}<9S|P6%_z=P5uv1 ġP/r. ܙIH@Z^(%Q| DJ/&8X`a:$I!a xa;{K!Ȉra93aӡ@ +eqqu1Syn-\Hnlf裆XT?go"aHi9C +crY3aaH @FVҖECm<$ 1n&x k&i}V3 #~{Pi کaa5, >.A C+Ĺ!<20DC:oe@Xu QS|pS\(nD{;rPo,'!6@f A c8Lש( _6 hLj] +䛙āh'#NwY3a)X<,a&Fc42Q)mkD,Bg_ ܒZTO.P&6+%_e- / _'E}4pR4Bo`,L\jV[x~IvX%=!+9x-7+__)[T-=YsSn\V/*G5f. 9sPl8PY^X#*EP.r`i^|onI)k-筮EҗvElSecM셦Y֓~G>A^W֯;8"߇UcPwGs-}5bc)pڳS2$kw[4UՇ5wtO7T]Kzuᔦp?VM63rz\?Y Brs9z!p2;ik#|r[a[!g=,Ʈlׂw1XWef ƫVD)tL^Nn?Γ8rFJF7qxg3Pr|UO3& S5`їƽ}/0~_5t<᳷9h[C䙆xO$_TN r0󖻍\g'9YߎAZ-՘MOd%LM59U}v!5J@XĖ1fGyPdвp.O80v9f< smOvcb8fZp(%-$T,,5K34HDuQP"KٗdZN<9\vupdi}{>Q `>7ZNHM$RCÆGda+2ZB'pĂp2SHr] +j yhC_K^hyb5b=lО# pQ,[8XG*cE_ODNCVNš)i8GU;ۈ&_HfPHZ!I!q"EmB"~>"pg#!(Ohg3aNQ4NB8kC{-!v,t5J d @T~|p7c1?#HKAo*V"t@' @ P{}dY7` +b u: Z34b(@,i!֡%`D(0~N} G69?CL  [(B[= q.Ш=4Bqq%xg`]y=;{5x5,k 2)Blp'0\Wx@c2;U ._ QM;#tp[\6scc~pG{ÜʘT e0} 5alZ(~'gYb.cny8=לOO11v +{*D̿D[!އ-L쑾h hśH 1%:K谺8|H!rP6 ca=,(^%~wBx/[bE܋=!9a grܑN6C=ڵQTUnE/?%'bW/wsᓸےRȬCAIɃL;8bXɜ!|n>sZzs~Ē7 ѯ4[؝>sQSYr_?ߓߑǷKWҋayu!CNF +;ڢ0xǡؐ|Ѹ#i{KcmJqkjobMZ:Oo tgw%;y}w,p>zݭB/M6小\!8D߲^7ZՐUPq̸%5:=iszGRUgcefobEf +b,g":z_Jמ 獡#NvF:unrsԱLvSQpxWZy}&6K&w*簩2yCgu9Irr{A"rYLtފ#oserɁ`{&^ɛu6LfJSdSy:qMP\Tee`KBE~Cb2isjrqؤϷ&,%!T ; (]@{:!PRB( R'DD H*" qwPagȇ99ߒs9I$(BVK S%> ~"^=7y^as`&ETSYAʨcGq'y3좂s‚nÔ/.w-XOlDde1%PD _*s:bhqИvN~Vqt`~xv>ǵ6Ç_TSq4Һ"މDnW49z)p}8EGדrlD@`VFExߡ³JdT=bH2`#7>"ak{?~л>;0y&6)!3)l09l:`9e̒ (FPyyX햅#`\/X˜pQ<cr9Ut(PZ=/2*PmC|zu;+lrJ'&I̩ZgTn$VlDt_$ X' ڤEmۓJper7ujRzdYgg穾P3Qֵ]SNA&&t.C#I.^hz-;XO#v>c>N6nkRlrk}xg.+98=7Q; pa``4ݣARP.F}CycJO$ ]ㅾjQPpav:MaC/ao,lfʹ%?wHo, ןDY\$o4(^U5"kUfJglYsVXV^ R x_md-;]:fֳ{l`^`h>jd~rgc" t^hXx@@!`CӘJ*䣃t'w9O~[=>*~fnsK;jZ|[=8t#42B/kd@su:pPQD-JSь6t7t䌞[_Ce!S +"gf(`*`Tݍ=.ne4.OH"Q(D'P\ЈhCFG t}JaFK!k.:7ict5A=Ș0EƬ_lWXi?M12qJ$ވ:&$*eQyPEY+:긺 (# ~| G E 3N:8ͺ;8Oz@5!8&cǴ +|5;Gk :{nq#x9g 8fӸ/<.ou[@1?s!p@3 if o^9-j y;Rf5@nrv' tR/2}e_^S\?zqfLxÞ7$>hp ANAF\2r6hjіI,[t;RZq3~.Ӿg\^3E&$ߑN_%| +, @`iRkCٽV@8y5l 9H:ff +(wĬMқ\?'?z u:Lw~v{ S?xJ;oe;5CB"/oSlKlYk3)Nd;9ut3{ܟ1N|ʸI/WIs >@e@>AngkJXO]%i2Bӟ֯eǤ鎣2Մ!n 1!ktkk:K7J?(}\[0G}Eb=l AdHQ@[!Mڮ{W{zn4yX)(6~;aj<ⵠ*+6EI>9?nj3qf K10$H 0<_^ ꝉh4 ]\ܒ\w,_!5{omwrqqQ{/3=.iH}!徽jϾ&)id`Oˬc6'vMUE]sz=H٤[ ע/Kj{FܕXRgkܴ?ZWLdUE7pQ=’_DőEQoQ3C:~AW= 1%ޙhFIiV V\-[SOxgWVS{zTg*|$1ZpqXqU_-khbOc/scs^r⦅sx!!n꽫QZM}y6Tvnj +Ҁ' ;#=T>)2U>(I*ي.Q$]qWVS4)u߀`_vP@cMjM給`:IkOk[ +lZ +ϗΉ#j3I%iCibVvr/]$8)NIC5Cǝ/: ;/1n&K `ŏX4jFtM@- + aPBzVYaLYㅘk|kObX3ٱ~&6r6ȻOOG6ɠDW9i"ӽQEhƜ ,0b*e9,'aՖS3c3{DQ4H0)ځPqE! +<Q=0i` 4LOt=.a.ʰ"aDCE4TQDU8 cPf([ .Rn(ASxX9xG r09ACڗZ1Jj ֨IGբ8hJ*\'8(>M\'ot b`8dLT;YR6*q~uF.J=QrNި?(KGyR$%zQQţGC1 0Vg်Qf@e;b/CxbQި$D*,,  ]彂w9zЧ[0OE-z c LZ` +c16\0j +#ڭaMzo0|?@uDЧj*[>*/x}P~|ݣ|ݥBY0< }c% \*fS1wM\H tdrtqƽ7jCd n]7{G}^kNtiD/5D/4Dj=|f~Rc5uԙqIDQ⊈ȾCHrsH }; + +#xZʴiZԱuZ>sx9||񐊵n.5YMAJ"KA 5 *#pL6#-pͶz7ӦJWn]Rc&S٥";H+,%p jHVJbe)Qa^b(,D y)|Z)qn3כ X)a zmVoRG,K)kȫvٕɎ|3LV&V%XU?@Uw(1ſ!1Ő(ZeW0Wi x6}=A{a.'M6eKȞ&!>6!$.ݙ[+tOfUUFW#ȑWy{R"wypьÝs8>Zﵡ7"fi-hgMoKKiIuHl7Iz7QCi +n +\+k{'B>p6?7{qevCd]@?ߓv> eЛbw8Gv廝xw{S;|)W[E?r/~V迒g9jfjk`s@=aSN3w1_3"ܑН]QM^i@AH ,!!   aȢ ѶNjkkGfܵ"hE .qj3/s{{sfW/=4rl4:&eUԉU'br(PV_}P#>NW8,9u >K~i]ԅ܋/a坟ÝyDUD^Rj NOD{Z\oO#"V7ЊwXN)iQOͿjr˹jʺZ\25/$7'6}&o 7}״Gm:i=ic l:;wP^Ս Ϳ㌊|QMD[}fpNۊ<zǷ1tmk|cm_blԶݜǸv ?6OvwP;;ye*pALdRԩ3vΰOJuvuO*vt/v^^ٳK޳[s.=͐^cHzak=U>GhùwK[w@9(+JcԾ"_L+)qZ;@U=h̦E;ȇ#J$ëpKi +נZV7n7ˁp;8]~QBi8 c>H7'""zBJ*'T"}kC]dR!EBXd/48pܑ~p֑ ͎,xx5quoC('u"4c )d $L.9t?$\0Q ‚̷C|n Pݠ}f>g#Ѕf!8w + +W(|!g5q ̤+$a.9N )Br=H$$(H-@TPiwgpZwl!_t1 b v{ cbh01dU!$Ą Va8*Ĥ@= >re(>/}K _2AR]`O!tZ +WR`HR~E$bP +ev0CKq'@7' - r\>&@~ aأ+{X>߀8rɀ7(qVH pIj*$&9f̙!vh7z+bMDbGd*FU'9oTת+-Πӧ<S@?IH䓐0)IO0M_=_3[|5略3h5gx/4x57xk}10=c ֟.)~ HEnZ{4:ML5y$҇V'c0l{nj]^An}SwQDMЮ$M|[:A8n@,ҘHB>#/~|qĒ2U<}̷;u 3+ޣ&Op/Bh3Pxtp_t=ᙨ*рK_걺I& (NBQ(e(:\ Ź77ǽ#g={ U[Zm7SH!zʿE-!ƚ+ƛ9ji&"N}} {o7sY Rʳj)s\ΞMoBVkNŲZД!cR֐ȧ̻$VqSmDcYi@~<4VJ' s<0,bK%!dW"fŹbR~]ʀs> *SINf패';Q̨<Ѡs,AeԽ"xBBZuh)MְBXRȶ[ȯ)\.<9q]QMi$((H*"@V,f5@ !LK@(h5x92NGǶsȇ߹~z}c)̓*u96Ϝ e^*3WuZM?YP2r}mob ZfkVPa~RM|%Qz|Ǹ$~(ŵO%n +%ZnUSOPj8=G`ߡ_ҥhܟ)<fA%z)U#%ܫefeE䶉ò3. ҼMBZ P+ڰ¦9$P%+2-%&DqlZ`ߗ+ ks9l3k2"Z*?﯊"you@+a{6 }jKKKbA*huE!j iTo5&#YP>e~L`C&ZSXQr5\k޸qM>ʮSkMmeCJ)׻_V& *W"5QXN< @>Bsoh\!B-"y3$0T`½z5:<̶ɖøPFm[ÉZUGJ>EMʪ|oHY8T*Wy-$W6Ec-sFF*"odRJ,48X`f:` -ؼbt̡Bpק{+y~š@~,6<_ɮdUL2d tt[Z?tBɐ!䭐\oJީr1p {@0uָ]r]Ky뀨1dzX]ksTu +BV&*)LU*CqP|Ce¬Aȿ!mpLp~Wy z{ô1){˻O9w&)HWԖu㕧4K3!i03"Y3JJTϑ+ r|ȭ^:OuW) {hshF}p|f+iZ@՜#H1\%wc홗.:3.f$p㦥NNzj5y˟>?}?Oq$6nfDgpG p =I=@+B;D7xxK>ؼ04+6g|`rŁfڵCk3eO=IW_zFοC#fwv~Qir +os+ k cLV-&۞˲?f`;Dx; ejgA'зhv 7|fkg/] z ٿկ{x`),@ [ߙ@C 8`64f1ƳGm4c5ȵ4W+jv8N Z] _;{ z LpA8"4```"pP, RFC` +l¥zb'&jA'^R +4TxPQ HG</chm6F&Vjr +l&e +#n#D +eSNCCC@:*"=S,kP%;LQRBlt$js_%nsFΐـ޻9sG^xWSo-Tj}'润 MuyVMg/hF5DӠDdEa0$L!g*Si=j0DG3t9G.ߌzFZd-tm%mӅZ!?9rNGؠq;EQ=QGNZ (M4LfΙIJz{zX[3ح ټkqyVcW\YgCSǟ"8(s9~P~Tx>좸6xx!IM8JEo`iǒ7g`Yûl;x +ʩg[at5#}!UgєPp6i 6-)>$VG7yTE_UF?UcP=LxI ds0<Z@{-ΑR.¸j8]ECF.-D +ǣ_:N N&!Ƚ2~"RVws܏^ZqO%(ߓok"!dc@13E4wкXD]c[lظ ]lq|,úՙ3 +\+ֹM.}7מEIRN+g^3?*I1ބS8Ä́!9&1<&_b7r2Wi1_ì͍dIUTfgT6k^QIɷ<^3{{j϶:-畅w_u+7nJG騘=C<R}ZVry^).jpdI*/Wy`vs-q-[ 5gdBV.YMY2O(g6yK.omZ>a"^.#NzK\ g8@U+beV%y:Ewn_Bu.Ϩ<PD H)#LQA,"tІFpF RD *1XQp]f%'nf=G}s=WR*x-^nAIܐ84wQSQQ;aQP_B61xCTT0^,p̕_-]Qךnܔm^`UfWH+v)OmRIޒ)ܤ޹oEDBLH$ oA26.98]pfnt.*[;hQ]&8+e6lDzBY[Q+HouSEg|2R>H{-H#BK&E20\ߖpQ )qXt)*+4W֕V"ҭ &ۖg:J $\IN^vNWFv -h[i Q^R"K0T꺭bQ#U+,-}).$)" +&{d1pq5k7٨&+46r5 j:^q:(X̝),dEK9wkE5/snAph}OQQQF_,Õ2ڃJwfm4Յlț5{V5d7DbRd+>6)uSu墈&ކ.uCq~hН) +Sxgz7.^܃ZZi>5Pt:2e^iRuI*Knm7rKs=M2 JnHC{p OpCpC:=zW? +-4 ]@e*{磤ϖ)sg.VY97[pp֮(f):v!;ikw۪n{B.^R=lRMPzA]H-u̕IrbVύ>u4BcuGLBd.XPWvﰢqy7N}7{;s& 9:t}C@HĶQc$:2%@`u#BF6_s*ppqp5~'[-LjL.7h2h1=D[!b܍Y?.b/Qߪr#icؤ#7&s,17]Կ+_6dǁ\DU#c$&3+Y+&lU}'|2爦4SJM&-m):S]{ýqwx+}P2 +d.W)6ncmm,m +ib191 qBG|KV@E1aɂ:3jQ!9N,vP>'Sߨ־XԤN]O}&gI}D]\wa% R)i~=>BO͂82ٙ!.g.CX~خe6JlQ*\iTS@H.!y`b FdA@A 4 aJ"cD'( +(
Pϱ+߱}`:{uI ,c`#ց]{I|OdE?Xc{< +8b¯37*535.ClU4-B 8۰::paQpڱX'v1e| 2F9#a[ lA{̷Sɥ,s0\; +"_ h@ |9 fрW2:pb5 a|'&Gq b{̽D|^'Fa7BMhXt'=o) <_YؗڝW(5ܞdZnQcU!-[j!.z5{%-dp_jI:Pw1 d_hwWеL*D:臕fJ>Y)hץ(Sc +e&Ir2j}S_l_W- TC|)3I]':&ͺ(f^zLd/.XBVJ/)y+nd)˼hYh=w2٬ )vQ,yvi%)YaYYWCoadbτd`Π6AfҊ`u ؋M,hSbE nU/*H,X%%.ls>abAǐSN7=p w +%!9kųx)-vbE8{`u,= +*̃/ŖŔ fL7=[+"|WhW+BwK' ,:}mDss^R(shRX\)wPCTffU*'EL;mV1$bل-mWC_^!S~\[~ uI}q-v P߻`G)@N9@ΡKհSk +km N3<:fjm0ormڹ55K֤Uk|YxWWENѨQ?Jw0%wrf@Rɼe%ǘג3Ly)P@w_wOqץu*N:ڕyw[6~_U%1/;{xb ؅>K= c.Ul&׮VsǭX[-uMu^uY~%U4uyqx"*ʡvlC5ިxxŃJs`Vm\clTf3iwNl׶ݴMnc3w<>]لmqN +`TRiyFxs.q|r۵yyo띭}w8>9|nrolʖҵ-ˤe=UΧ䋜o)`"<#“QZ2\b$D+ mk ݾKvxr~Kqf(/]p6Q43` (; e /r*x> ].K< ^9e>gx:,fٌ M`tWDL+p`_+ǐ5|U"wxP w`EĄ+͸EQ"\!dAל8#P ܆Vk=!㼽ay4gTh֩ȑtG] ;z6& +,}sQD%IV%~pYJFii~Nu?V,'ZBsS` 9}yt{\T_b޼1zDw5Q]_Z|#x~sKn)$U9 48U*婄\C"⁒RX?"ZB =zOᨮFgyfG*˒V{3f{OBlMz 4eεFO >pZ`JUD/y:Ľr y̿_ # C{-4k-CF(^ԽfjppQ0f|7\^a3d{wUҕiM դ 0ь]}QNbWT.ŪUV^+1\"h:еg=Փp>j +-b oЫ*CH׵Gh(MAcj1:QLtwxBOg tZf݈kVߙ^b]jP!SXIsGN/l7O3y|-0?a LYB6b>@p-3(.7RFvsնD7ó2?YWyĪw6vXhŽ]ٖ eɳјJgg]ȳfPQ%L^`}a`aQ PD0÷Q )Fal7Ls:q&3sޜ0e \[%%I8ù s>pٴi +]ʞQK @ ?IoUWp㠻6DC{=7ff:47BsP u~ڪ`v? lo>mnVGA '&:n1ߒBӡC U(| YO"$=3!Q2 @ׄBz=HfX0IF)_u@wPlP ( PC2hM? tB"A +kSRsӚEs@a=2`8Ȩl3q}JCHb >$L$)^>8qZt^wK-uD'3Ÿ2q'vABpaRNH^ɛB~ CXHPCnnDOZu T 52^HF"$W셺=W3uЯGnj6{ΆF.f#W'~#{;֫e=֥?:CןdNvå_…VW.D.rah+i 8Jc=a} Xa2bak7lcwݿfwܳmЗH=_2p5YIr4'jqbjQ3o7>xDxG#G퍼y13K~{ԷofÆ_$TT.nTwR7\v43g7p$I42w7y Y<=Aߎ~m1[b~(h-hHh\`%li<?"ﻝAtWΰ)83Aq^aQYpZӀ4ۥWsN)LjK$4%Ygu 煵Dğ |1SPk_yd`ZT[0VFr2zeN +K<׭EhJ3y5YxS}k]|tDP%VHEfuIcQؘo1}c%殺9Us0clƐfӧveٷ͙.J[}FG]z%WPt!A|BT*˗$S^X`EаtP7)r>0Oc m@o6Sm9`ߨIvV8ת\+Urg̬-l/VʣBYNxBKdń3_ ܣگ逋"`~ǸCBGGAӢñG%8XrӜ+wcNg3de7 }|aQ$G}%@~HJQbB'Ry"es8Ba+z|tٰ֠iEU9H.%:!_YW˫mks{H=%Qi/dj )Բb-in({HWFG'5ԗ25e;8a\sI}iqp)2t|b +~VA `T;!V.J亻r'?$ +K߱!u="!{KsH_[p"$bP[*( b ݜB~xmuSv%2MYY^aS̃$0(8qKQ[Q&']%3ZZ:WtCY?֠ȺYwrpnvC}V}^8vw֕z&Vk}j15,(-aW¨/U V]uTz>+C4-(lA~*h7#};jdEqmim2Gi9%5\y볿_x,?:_/aa ճ`>GSʹ -]=m]]@^7^/dٿA0Xnb>/!W[cv 幷%ޮB:B:㦉fz~t.tV.=Q7![@$oGx(3͉OF"Ʋ9u5ctmim##?r>o<Y, Q}hPv ec@¤b=%F:ފ] gBgb=3) ΙmU?nqxkzq 7/ޜS'Xc@ +v>ʵ sH:D&u9_[sc>oχ`|mq2oTh3q6٬܍~Ivl?ᮝn9~Wc2 Ng9ឋ@e.,x p iq6.a]xj_Ǻ%,e%V/YUKʥ#LyFr6#Y,/<爯1E#T{'trcIICm׀759`w +ﮃ^ł_9}PV )x=χ_u1>FH}oM+@ lzx> չle D((`W% 1`A,H@Dņ(< C-O1D!ODQDĂg0;=;{9F 9PY0s C Yҿ#DHNb:D X +ACFr<(g3J,Z=X=OZ8 `] h%+"6!j&;@:5ͣ1n@hm +}k7jGK(]48Zw }0`W.e@~5Gn+jM :kRsG?:=@ON}DoG=b{}`]$7bu)bѽ5t?+f 5(F?C?b>`hUŗ`RwŮ`0o4H%$"H>)k xCxjth(m0k0QLɼLDcOWI%KrW߀|ExNyn@߅BV5ջ ]x)[,<:t6ᑬt7J+&BZ7pC]h2ehTsE9塡|(T7Tj +:U3PŸ@7QMVen)wr{q]yMWՌCkp^øZsƝ{=fKm`f9/c)QDy P+Kz?'\z?#qnU듸c>;sC V}ҮBܾUXfLXD%L3lw`φ1H6G[g\qǜqy,wy"y_sW8-q;-v\#,s:Jvv:;9:wlqfLm|N:h{u A!8bnqm* +[u_epKؐ**2,m7֛l1l5)0.7TJ6 W\:dk\^V2Yg`(vF#9. % }#cwJFscS[ŋ6-X f%YZ=_ڽXU9 ֥t'+mZ#PM88>(cEV~O8qT oDѺk6+Y"ʐ-ʑg{fzmS,maeye//L:}?>4sЬD}>͟Po ;`k@xry`A1Zѓ٣L2eit,ET-RBg}[~=h(1:ӑ (X2 d 3lj2|/N&I I?Wbиlqr1_5׸S3Xejf<.iSGCp" +80(ٯ[u^ȉ̘AȈҢ}QXqR9Ӥ'S E ]|j)ǻMk"-&1sT?pjPEq췍Ҽ3NZ,ҿqBj;(v<.@0wlpvL8!f)xy\ԨLȵ" uyGEuqwgfd`.誈i*e60 URUZb2XYK(nQ@M\)GO-hknQ999s{}b<31=uO\u]D1D[~:s[<ס='ˍykP0e P0I(HҜy2s&3.N#56CiuXShvNޠGGp>36o_kE QY|7jdYc?4bIQ4I\tl-4 6)1D")!ΐc/T+b۵ \z/NFŋ~>\3T`'ٔuy%&G,5E^rR!+ea򗤚a6IѶE +$}LR¤r'Vaܦ 7w 3wY`%Rf5Q|'&`_ԥ;I 2ۭ^8cGbt8Nşi kܭz a5_b[7 W`=.Z +׆]4T[]Mo:`+@. +L p? f' iA̓0 8 ׃S +{t{Ȁ>-fn)Eϖ:4@ro9tXr0y TO&`R3`Q19*hZ]nusp2Nm U{0C{2OAy +vP7A%PJ^uqW}@w&cN7sG80u +p>-*ka{l(H/xArA$upup}DwPA;6yDt3=S-iw8O.ձ]#Zr_`HD)PY^K:_KFn )kp9}5O= G; pKŦ@ ؋+p By:xyDM?} :[KWO21 F.~EG+#ɗK q_po-~#nT]:˪^nb +8K!N>C<O}'iǠd[[k;ϯEf\ wNrgũ!p/394L`""}*/@%Spk6\KÍ8†NQp: +jp2`9Nű yy9t>`:G}vm(/cH?5'Ip?P;2z4.c: 'i8ڍVW0.bfzWt[=h/ + n{h˸_E zyɓTb5 O7?OEOHhq`t Dg)`Cʘ!]Zv{*vkphsѦŭ!CΉׇ7OZ4gI{Y*w}? A/zPg&2S:Qh MP3}:5<@SnT6hZ4uuqUҠ%YVkNq+5WSHOQZ*HyYITꩤމ&8biޡ'H}1 +"'b{d86Gji`6D3-vv]m / %^^%^DR[- & +[v\^'_H {BWG7&3ҿ| )-F{lM16ͱhIbƤ2l}C<@,L\5G$jW3NpZzfyմyQG}*.*D=P̎NQ-xyO |JOi:D'mxZѬSQ7uOg x $>[TujZ*W+F^kSRΌUighUjP yj9n/L]ns!I!X2)!K CmJ,S,HNe'e%9ĕىeܬJiybLR^[(TĻ|~$A& \9 4{IF ǪXnZ㻨1b12h![\npI%\BZ_ +/7+)ەN}?&zAI(^s?dN~7_mSJ<ñ TMAeZ$Sa2s +[jfKS\q7K]*Ӵ'Ԥ1n},)F??2 J/W袙h!kS.s(N9]Q;yIq#IlĦ3Ein8U(1} +$pGn?cUk(b,% J,v-I.. Eu݊#ʘOʘA'GHotE,9g0@X3}9ݓT84ɬOOZqIP/y_,*ʷ8o{PzN-gߑn1>c ӧ#% iJ-,KRĦwIp^4;D!:gk{Re܋$$ӻ0 +Lg6)C8cl7FgaTV?x B\,Il|ଥҨղYeY&rM"<'"*WB[+XIYIoR٢M^s=\wD\C5`0D"83ƹBqfL7JHCvKCviH#iȆe!Ԧ.e.I +^ ̦{~F`8[֘B99c@"u(AxI$ %_2JF_Tf!شzS۴Ne*Kv +PrQ? +_H +\ la d5i!݉tOR r+ZJWޕeE9X 0e,sòb 3КB[m(xuQ!b#IY}XLa[8 l5N /xF6#n7LŖ-lڶ* joAe}u͏Dt##s*g16Jҿ< pnPBUNP6t>2 kgBCfQttR@Z| 01O'06 z? 'Q@86!=Õx-~ 0h兠V>xڸ\[ 9/G0+"<5`#Ha 8iAu#y㼖➼ ŜG;/"WX_B_-'{9ȍN2I{F(;޾^S@y\|N u'^5Mw6'݁t$jV; . ={\\ ry =f +0^-z~I8m|E&w͜>ɤDtح;DM"P2$ydIOK exJVғ;؀DW!-tUU񭸆2Gq?"G@ο\!/"o™89iͦ=zГQ3pkMrpqUFjFgъSm$3‘O"%Cpb.đh8!x ܒNuY"o$[ TY:Sf*/G|6Eр&E :=؝~@JDd j|<\5x]7\uK18 Ψ)ؐ<޷=||E>86pcQgvǡJ? +`>e TNXI(ћ`Pl67HCNI6ܒCHrCEIίx̲\fimc?p}a2lEa$&4lLY(6COBao/}\)A55J .{]8..]n r[ۊ(%*XԱmSӦi3δv!mӴt2M3Mil/2f9ߞ>f&mJ`OfO-'_Ʌɍˍ "ܱj}6p/{Vp\qz܊5)hF+" ӚjLjIMs"fÙ!v43gNsCܠ"\4wYSe}~@DPCܦ+;t/m"hUc*7'sMέdFNfXa젶 i{~0ק=hgnK.UEg_  yyBrpeCmnNSgcDǐނA}ۘ~#ۥ悺\noӝQ ~+BY_٤+Ш>BIN1@QD,60aL@ش æ4g"dGٌt*tUVG5U~B$Zʜ5!M^Z{&Mpݵ6W&dw*&]g] ] ++"\F5uWep2CiJi +zE{RpqbS#uEuSnCw}jwςb_c٘B5Y3xwZ. +וywy_sjJ`&FOy]7Gif-PO՟ +f"1j=d\?_T䴼n"[n~i~-J#0GLQ;;ZPŽ0wn)j2@eE~W9tYV2s܁wyu65WGyu7HJxZ)st~P@1лoA^nhRqp@P>CfdJ U!#:¤zq65qMMKr)=kJu.ӞF D5-ʞ[ +d!st#2ƶc8ia=R|+,a_؉pH0ç] M&)|II74eָLZqhcq=dLO ej=N'$$O`fbI"qH+FB3sH\3oFH28O1p#Mύ!Z-v87 dRLL=e\,'`f< )H\8شhlX|s/#~qxqo n=<9) Ch_$uh +ПfIH^6]p) D"\ށX"vŌu+XEJʕA|-p~I|gėPG@pS%gi9i%ҿL/וP1M}SQQB_CRJSNhHER !|dB29>eȲZfǚ550żmw\]繟њ@ҚCeSeSE؈xxu`E D994|Cݬ`@c\ 0^_o !(`$' NRp>ٜ69mV<Z[9ɭ u;yr)ɘ+ƫf0jRӢ P676 +}@R;Nl_lL:X;:8 u'F7yۀ܋ouQ`= PSy +*_6XAEl<sDw' L7;0x0ZSלV/R"ȭN'w97?=G3sǼBOٌ<݋*%_꺑aуBFqd$$o+%9V)6 *5 Gp-'.o Y]> C+"/NyYG(2ꬢ:lΧq&9[<`_Gz)s 1'#`uQ/Z)ʤN`uSJY1ks4r.f~/Ȣ!ӝ7:WGP3ٌV"uC.b,lN%3_gpqoZ躙Y<8I + ᧾dJQϟ0ԊhI>K\P\͜E140M\ts :k42JC斒e.F` J.$A"gѦV84%^:e^.R/NZ*4؉zzu uawc3vE= 2,wwȍ>6^X㴱;MI(M"pX2 ʏqPze6>WNbOr۱t?63/QmvU揱-xN,+? bIaJ.l?=*q|]?o쵘ݖѨ)nyfQ%*W`U56YQ1 ^GXmnzxj3%Gyg{GFhh:!m3;m}PcjQevlMv`7v9Xgka}9VoE{X^nA+'C %bY(zԿ=}bi}z5 56t38zc?*ð1ӱ#9JYXR<,u*BSPۓ C%(Cg( +<'bg$LCRimE/R. aǜ|+W㬰@=ծL?2ԡHWO,TcNiB:[H+~vHZENһ\b͡\l{Jza|7[ +Θ_!90IB|B\`/.> \/E(TL : <&JAigV29Rz)d>rIv!cv RC⎙!c1# !a ؐHĄ +ѡIBTh0=4W -mSL +'-kzaRYA#[]dK3f H0$h\FFhM04ᘮiBdx0%|09_#M273(Bj+7& +"0#2L*8y2T2E$\Ct2_ۮfFmo^R=|yߔ-}ԋRR-)>Ϝ"3*{$efEim4%wW^zQM ʶ&fPndXVL#1Z[W,2Z2cI>&6j!<@ۖh!Y>q4M`,e,x 9*#fT{RclO8MIE,%eF+amڭku!u +j[5Vm8պʭVU_Z-mߺC[[7䷦A-Vsy\۾HJ1eRl4^kЯBnfs nԢ:D~aj^)K`eổf+]M"ˁ샓4(-wZ^;ir) 㞓nwF[Zi&sMk.:⽏B8jijpkxju-HN~spRb]05g9#э܆AV +xE{M\0pvƎ4Gh 1.::6zIù:bQG, r/ֱ>[#>AVG%h8ٜh[mӝihml҉GccPϡ_ONIt=.9_9%tzuR glf13] &;Jw>%}iBPWf2PWIU̫8rf`Db405nt;xZj~yl ҧp>HKo[ȝkrf>7vߐ@a5쇃L  B,$B&'fѿHi5\Buz}M=żtC:~5V)@C(M44sћ 4棱XׯuSDg-:XsE]>c}X+]`F>/jh   M@'_\h(Ac{)ezO=lK59cnE鄩zj>^TPnBHȅ@B.@!B- !"BAQDTRuκεgzvvnݥ]9o|=y2|k1;nmmW׆p%f.Ōb^pe^wqbpGX}qQ,MB!R}[;q+67Dĕ8.n0np̆vr|'p"~b!MX‘8p1Slӛ+,ejwѽW6\ڔsxiXJ$+܂d'wc.#2-޺[b_77 I}O0vG1QݟP{WH{1jm }=]8c,Pxub'k&j~GIF(}Ls1.è( Qv 0 .E!qbz]BgNtW2)ZXKM於C~ʚ%X$|@5敏)pS=e勔Ǡd#$Jr#K*C@ZԂvenx:) -f$sSk48?&"fE9OO5_{Hcq2Kc^2F9)_<Ay)(ѡ]QVE9*(Mp+Фtl ;|Us^lcQQfU=|ƌsdL3NY)GQF@:,xphRRW€ + WzPW [jƙEsjN1Ǩ}|H@1jO'Pݛz49D&N7@9z_ЦG t|4j JQU*;,:7:?L>fԏ /1*Go6Gg!=GrO4\Q|̒մoѽ =?eiѬ_> Tx +`5\@mj#5uiBuc:NVefZq1^Tr*L#NKT֬`o+&&uh<͔zSy(CC xIe_3LVe(%dtSV@uʹ[hUIѶ +X6# D(ЯvB / ?02xmY/sd?q5iݧg&#?E^`!! rB*d lnFf2SH/!-|H }z+NRi2Bz'6@m W7Dd;灼i06@0{]1K%5edX+aXo/m` ƣP;612@:Xvp {KO"ޣbrϯ.˥*4q~d%dԳճ|$$;G؍=g~Iރs{Ecpnk*>'͓|]%5!qw4V BB%}lN:PBp$aIvg9s~DD$<Ɂ' =Q%_BfjDd{=YpN')|FLN3,19%]`aB.(}INPWʤ8xd8Du:1>J;돟Ч[o pp p&t;1({@}>np/p_b?'v5Q5M+[4[Rjcr}Ǯ{GﱷEsS{^ =9כ `.AFhC+qrCH_i!eWk2[EB ;ɳtUvZ+~~vuGMD]쟀F3A#bÎZ̙m e|??[#(FXI 5hHKS?(4HИ9hb4qR<_Zق5b.@dP+^?jFؤsbguC |h4)ڏ$/{;vk.rrkmOqR-Yۤk#ވ ?;@_e.hza}D Bc>رlÎر;ꔏ<-zUv5ZVJ*T)W x+>hv@Iy _bh4ICgV)B^fUllF-n~TTj{OĎ\봷hh{NC-U'5vk}?UV0īܐe-5LbCfaJh*w\*v:"*p~9.ϔbUnܜoGEچ{hsVDh_wTb-pMD(9IQ&1S9DqpŚjdt/ a44ztc-Mh`yн\g̣:0+*"EPEaeXT7( +.ǚb&Zq_c5֥1xXҨZMD? \{0t^>|߂3s1TG9y%41W1~PŌV1V$ٍ6es[2͔-WJ3-WAMJ`?fr1 6 k`T78bEqgO9+h`U9Kq&(%a,pFIJHc0'+ ?:cx#%S3=|K!1'tTN쉽/[P%5)J)Iq$[d-`.s\ŧ<+SJM2ZbSI Qg[)#Si)ZdQ5DJH5ʜ4LiK+Rm9-QtzƦoԘТKj0;1Ue +v~ۘ7m]Č~2g V|F2-cY1YVEg56@cehKoPxve +G +r+^eti)̇ ߶LUvyWMP*սj4ʳrUS99~nբf@ pWKXN/`^ @8)a3/ffl^˹-~**uv4{Wnuٕ-thFt2K` Py;Nn{7M.v77\ĵ7TN(WRjgpG˽_&h'?mM^!A918P~!0qGBAlp.|7ݾ\Gx`K:9:A$'1 +G f:GMhI ކ* ]{.CvyH8ZZg8 U|J}'|/Fk~Eo#v{n;tk`3?M—Nñ=]|m--M< W8/t?úB9sIm|y=C魇 +ЏF{ok:KkOB<u:=K[Dp\џDlAOЕp@F=+1ɤI *!q|@#q8մNjB)odJOXWGta(V2:h䳣:FGqK]k!*WmWxvjgvBm1<{/H.ΐ}"1++YO䱜LYvNATúuLM&آMG2ӤO<JpW0`6``6` +$&!IsM4I&kf]zd=Uuӎv6դQҺN:mkUv޷dz{>I}R/xW%^սŋ7Zʥc:\G&dQqXtS gb"㙏5;e2|+ +O =.V%?{ewV,Y ,de#l33a*pN79nek4y g((FsP;."7)R.JŎ].%Yˏg m K(dXѢV 2X4Lq턶GIPݦ2=Ke6ҿ7Q׾H_Ny5K/Ib$SCrM6MNJ)&X:@w8]eos[<7C_kҝ6GYyҾLh_Fͱ 3k6Tmqeioi⧣"D{(Uh:D,xlO}fۯ_\DVyFWf/k\2,'XL5v IM[aS4,d +48/QxKEDd'{VwQi> fѩ6n5zqmIޚNuk>VֶJTzx#f(-Q[仗G~C(7_eJ"(YRZ X;TvPљN3eՔ1[(80EQ`#.x O~S +U..HgI*1'k*j;ʃ(`KO>=&z(쭥z MIv Y =DFۤ~&~OF'dDwK렴ĔDPKINA? L!w("d U9@pA҆GI#ydGΈ$ ?KŻ$ }*wJkYEHM%ZcUVQ[cȘ06HD:)y$OyZ'$bcxMćOb_O7xG?#~<Ši1"ѡ5UIJQ٘U!}z I$m8Ms`/68e|/Hu^dD~@cL<0""2 +* 5"(Ȧ(( (8* ++˩₩1n&DQc%i[5ǦMjԨI44>99=Ǚg}T:++Hϖs''- ŏ;q?>Əq)S&ժt"_u~uyzYWz+TXGO~>/~طb-v7R(=zB>C,N)V|^)P+[]G9DFx!Ngu%yab Qh@#`52yi>ZUƏq@Vf*%cDuX;;M,$ǩW5Ġ1 +㱟LVUG$oV*V[rcգ_Ks4g [{/^g A' +hEc)hdc)E +ZV,""[.v._iswr# kG>>wpelwUSVw JhYG%Vu.ZꚢZL-q"|Y܊TVjZ֤y-*s?RwTcxJ1lD%G(1,V aAي /иrF,؈lCuR#~=;iAo m +1 +ǽl09C"J (EӸъQ)5UkTtFF[4b0dǼa1|`!vS\7ya&po +K#.M ̣>0dQvMvD}}GEepcĠ`Ԉ\Ƹ5qiFkUظ/MjzbNs5MSTk7IOsf`f{{K9YeIPfRIIHJWzrҒR%SJMJM]j%7)MG`A,W}́z@y>9JTqd2јTI)& +`ҧ)1ݮEXgޭX`>x7e8نV7m\30*ǔ.SR3(;[9%ʩVdLE(}t jK4l)w)We 7v2l {Emg6k|m~sn0(z8E BװH~Rr_&,K8p.+*.]tqíAaa= Gw1]_5 ͩPFs([\!k\>ZiJɩm*si-䱎jb`;6{[ Vf6SDEVFr{ 6xh$2.c}cc}ǹ}7TGKH1Ia1y5빑oz v^x2 + 3#jrK y36 Y+0;g6~K8N[ u?E\vih2@o!ނ18I59͌# </W/RK ե e_&*F;Djǒ7pjY`\ U +\eN>aFї2gl MVżuؠu <=w'-]U'mu}r uvxa}k}Ӹ_C<ω <74}tWE/JD3|t*Ш-6KANw}eE|y\Y"qyW(29?9<{=;BDzQDJ^Gt<ΐ))y|X5<\i0w|G'X4HG# |4J=ͫ O[;i$Nb''sqbױsqiRM6Z:umU]K+T(L\Mh B6&B Ć m0ډ3??~:w}~{cc/V0]b -|Q_75O op}$1s4WG + :kѡ\i5ϫ~j%?L FX0i*\ъvif/hGɋ*ɒ5Q&>d +eEi׸?-Ye,-5jԪJ-ЬyC =ij׌!ƔiM5a<NjĮ1]ר鞒ה0F,Yڬ^FzЧ}c~,lZsLf1;5mnДEami21˘F-Jn\U c>nzRqU Zju~?>./8l>Xz{f,3qږ)Q)&iU֦-,xwnm~LъksxUa +WާyEit-<3M2s36{f 5dw*nנݧG=9bVr\Ym(TO5wU:koÇgZI"r=I8ce^FːH_mUPY^g8[R&Au׎*X;EuTo͉[=?kh=Rioޡyd,}TckDָTߖۿG.Ljj7T2|[/iW?ճ@su~NB/ ]m|5j RC%w{jc@霑sE՝GT*^eٻހ_p7ά濏YjN~#?yJ +ZUVnTTeOLCS-isCO,| $[[&[=>Vy54ИVA:R#Շ}…rn1*bQe\HnUCe٢CFS]C;'Ḵ{Mb?9WY73hzϣ3N Aۄ%n໣RU_*KT>`RـUA6 j`#e )>s2/]_SIǴ0:tf|0^ B-'F)ՃRuPAED6$dLeHKɘJ 'w([*H^T^r*7C%~(cFgJ D H~hObl3ɘ*QIʤ&*Lժ ըT@aتuL.EL%*Pl܎3% Ce{ˇvLJmϳ?ݿ}" JH%:bv̠RѰ$H@phĈ`ּ>5&ym xyX{g(b5 s/w)1WΣ0JWAJc6ԔG1 #uơK?C"<˚eße.o-q3<{>Mzmx_ShB?ʹ |5[By=g®r'oϳ.0gK2{9 2{2r{ 8|oaׄnZr1xvfK04&{CYi>>椏 ~q>J%?A۹B>zƸ%9j]cF2ur9ACa?/~곟B;i8'U9@mcAg|FW(ćW$ ^~Ea{3ظ!'}q=/XRl $Ip.G&& ҝjKt>oKOlH1ӝS{7$ۘ~S M̫2ґZv>Ϫ@VOS;tF=ğI |ݞpOѩye \0]׹ i"'kL>RXf)'Z:%t,ev+-H|';!.'v5LqTa'&3iB/mt9.hXIdn9L?Ev( ,r5^qOCr1/$v9u&q'-[|c!.yds.3: +On1.̓ي +U2E|$E/"|,||\q7˺LOgTT2CeO8[S6[.R^/i8:4D# <4(GJ31yJ}P\M曓Tp$:`v [6 jV^?!=8-:qHCh(fSwԫMԡAS4>. Y2a ݩЃj +=!vA@{ql5[=0fO53\6;ܠICtgUaɚR{Xi Tkh79|uq 5D,P}JEnGBTaT,5VŶDٜ*e/Hy&)7U9]N%}Ik2*#\gsó֣T= W|$^h)Ub{ +Fʳ'+מle'I.;FY)LTc|Pr:#x>3zhL9eHc_#yVR!: qq)ˑLS,yJO-QZZRL#}R\ z@IGeǕ6|W<h5 ћȅL|}^d+ +W\QhŔX]tȑ_$4(c,J*t=TO\K%7MEF4 gR]AQg]wEЪ(* +-, +BmăD3iFUi;1&ͤNkNc̴L56i֣c,d?Y罾}FL+`WJQdv|dȕQ Jv\*C ~;+ιOcqX^8V±`>( *id_+;IFYIJdT'[y*u)ڋ'/ыp| <<_h&q;(@1τ;~$J ~dʼnJ**@0 :3"$ * !yURxP JlL_qÿ~Llu1JXbPt|R.Fz#ìCH Njų#aKgpK-/p +PH9ĜE̓}O?/Q_µEgKO F+k+:w%KF.(\/Qu`;ϰ-DMT\~vPBsy&1O _?f4`9VAZM.?Ppxs{Ez3r [d!m\@̳p}jΫ)$C7XlaX?X6N`LM6s6U|RMySpw+TQ"͡|ի^3uK a·A? XWY +q/O=r, w}qKCM~'q~g<>,O ڙzb/ku?#|agD:a/Caq0&Xku7F4(8!8G䠿&M sA ";`4"hu&x`x?NsfO8)w /:r΄;M6HhD9pɈH#88rpu\,b%% +~O +y.!MwAQj@|ν:+OQ8|H❧I~E?"sphBp;C->Un3o>$}|QX5=:7j ~{=Hj=k? +Ux3z]W]Rt+pk>\P\fFi3[GP'^uz|:z:~CE0-{/J'i : A ƸE+Zd$,%ض㷋\DKè!A6]Tyxscu9/pޏ#N[f|a +Gb]m;V]a;l/nvS<7v#dr EA+|2;17bۊtf.v#ʎ^DZ=B]F yBz}d%,ã%2vb\lQ*'a{:sυ.#U{~=7QBy5df'ީ~.=$8#`; ۓ=beد~ ?:CZEKo +rzSL9q,Ǭ`#vpFHo~:b&'2B". +8p@wtұkuԣj .3HxU32_ Vq G-*3VÑG&ȃceTY 1GT5Ii +De=G(\jycm+U5qr ?'L84^zJKXk'/SIF-6X3k,!K.l-HWMbHQuOzU&.UUfRqJL/tBEp |'6\p-^~w[62UcJӔjTM3Te|S**7WUV㖫hjͳUk}Eso*!=pm`cmzk.|q⛃SbUeMRŢ +MI*NS5[ֹ*ZS;IyW)7urR٩O+fL9p{HC +U |w*_ԖTRST:A575Kslʳ*VDEʞT5#}2.5-cD55,! ¿4`$|e}oJx  b I5AI*;œVYKfnVbUQyUۺuն]ﶹ]n9 d'y^z|*|̍W%Yety-Y*R OGrjU(Ek +&-V_vl4~PVg~”߬8Ki̥*PfYI(/TzT) jhQjE'Uo@ɾA%;Ċs2T\*>W?a;Rԃ|ǤJ pϊ|THپx&')ʨLiԪP*JnRbuDŚXFwlU|^U կ+|DUݬmo W +TP *1Q +<|.HF3ńٴF4P(NiO;JN3X3.kᡖ&lAĵ)0(41{$f[3K7E,^mfv)##ψvl/ dx:4z0^oQ&R1&J ȵ Ny=/亭Mԃ>!g}6blS|s>imd7yp.]6E,`c 5YQ>9fq/r9br9c/[yfg0% .mm,o:HCYk7f-Pl,`'&'ߡOQ!zt~"'(~sbϫ5*]Msv,!{_3hl<&Bh-TlDŽ0 ň2=r?F(8 +a:tPuVr4%-|4.F&1BJg蓳q\E?OAr3!pFpvR#<+;<au:Qx\(.A]6}fJ#+{^8i=syS~}=*:+G /P]Wiԟ%.~J~B.i\:ops0^/c_>Q\f +4G5t̻jL?~ʹy -JCxЙOEh47jvP}hũ߄3,ji0)(' +L5{ #u̼M`pEWhT՟W<~`;۹v0Ŵi%mx} %rǘ as9jj=7{L`e R5:%.Z;}Q`O#6Zm/u؞{݌VlEݥ Te е/iVқbX1\G.t욱k.l{]Z쇰V+#]Lb +Y:1~6ktv 5bׄE g?RX a2)snM?ӳٮ:e05&9(Fd}{\,XH.&=Fڍc~t!셱ۦv,n/f:z43UaKH}$A+oX&fp:9/:jQ6LC8JdRruaĉc;ǗN8NvlDZs:M$m״ K֭bBJAVSV1Dm0؀A h*h6&.ZQPG'e=:3Hì1V*f젗 c%Xz>A4lsGX 㰔gKH ;;Ѩ$:u42to>.& zg=;6%ʯc³x/U|8fwcniL".|5ը\nsL]:Yuv0-WxZ(m٣fA,ǔVr vM{RaG^{jSWKVZliDҸZJJ[;lWʺPɲ1%(n۬mjS" +ۧ:\G8N +6 +CC7]'caVDY]-vJ~%uJأjw)UԱ@ 1E(llVG!~*h<G +W^k[KBzNUy9-粼u7 ;\MZL3v@gi%r1O5m + ջ+rW]'OWT]HU+ީJ.Uq}\Kryr{oj'荓@.pm4$x#FE[תסץjWU DJ[զ~UT㟐ۿA |EFpJ偋rPOtk#Z!kR]'D~vy*婩&.W0#gGڅ2j<4)Gh/òRYcm݆]h44O#"YePP\u9rWɨUy}4t'[d"kdlUidJ%#DN *\d ԿEسA,$!=P ˀ91B4B6Lֺ"og4t@ mM@mݍ>T𚱮ib8d6cLll&qc|-0'3/<~w4\|tzFaɪ{Yנ6t-#Hb3ı8VjXCc1dOT +3oce}~z.hE75L\=5-Ch,I5$so%{sIFMı817v0&;XTVfH3׆A!s++z ))"ö[/:@ndwt/ ıv?~ޗ}S) +kyR{꣯s"!Rt{^sk^nh +Ƃz8K!Lt?I!q8feep#TxplCN.a0UXR|e>oH])a0K$SgX'0ٟq%=y2ղ1@ۏk#VR+{ @^y3xޔT'Y{.o?$ %KE&<{ŋsgW ml}y`}ò{ސ͚:Lm`VKs%O,~ccl:W {ś4썓dŧpO/yC/s /d"oGG,~~ͤyIKLWW^/}_%Կ,jg'ހ Ufyw?6sZ) +:2qӺ{Esxq~&̳gcۼ8m~v|;׉8iM鑶뵵)F=Cݠ$@cL ILHCC􏩈C$PP}~{<$% ݜ73 0(_fѯ=MgP^ O߰y ކ!$=~7V!Rd cse e:#h$>+xyK+Dgt*sB?Lm* у_u]S25t,v#Wȑq?>2S{R#aCdC/6k*< 3ϋJ\;-[Cw6Н@wY4:0 Gt7)T 2d V9-hm[=c0g!X=GG xl'[p3=ѲЄqQϰǦ![[-&v؉c'vة`;fL$GS\VY<:ށ(Na |ayjiȓ*ʝʕ3ݔ=$[愬epf(Hicc{SP2(:x$!(*n?/UK/w6$gGL*)r F%O9s* rg}-ckl@%!4 +AhߌM-]N9K-uma*$MG+],ljj@iCePPo)CН$PnNS!6J@e4U6]?MS'hu>[w4qu:@zJʱ{-hAz<2Lrr®Y~ΚE~A!ah66@A<0ǀfq&m&А ឦ ]` ta/)q ĮQaE{HYaNaV6 3]Qg6{9d7l[ Pb F +*e(P*SS +J/Pʥj-2 ʴ:ڱj 3Hm-ɞt;oel?V~YpYKbr5 c̉ջc,NY{&Μ&38]p~ᣴX,k:gHL6}?ѯ' v ?mI[-~x;gr!q68wsΕΒmQQ]·˨#rs[ 7c?}&{vdVĻH"8sIKi&xA;.Gd##h^e~WN0?HH3(qe3~VpNEj'[ٜ;nG<$H9X< WU~H<^W^ef\. euqDINۿ^p᳹ϏU6K<`,D$+5>>ɿJKb&>f- | +Ol.>IQAaM2z 2zQ{u΢k~8 p ޿z]uq-l$.%~u9Gem~~|?D~bz":'~BiUh +^VXe]SNڟ&hq48Zj%v؝lj~>^n.NC)u}v!~D_v<mv\pǝ;vd`IЈ"v;;eZu&v;#bl/"Vc(p< 4z"%kЙcp_/;muiG:ў؊ @ENA{;ӱ;arXeQÛ rW+b f8S a@䩾";=}ll>B~ *YoaT1v|*8=ط{Lcz\cQlz+۱ݍ>l`o6 ;s:>GNU QuCt~1lEоkپ Tc ~o~;@VdjYdg:YG-e:5c_ ;~σaWuMC,lr2ژT2c^y;u£)TE G7Y.wmkUh9WJ4fy$;B5ur%X| EΊ}ṗs&o/E̻,HK}ܥx#+iժDb񠂉jO˓˝lSMG;lqf܆i I|HbxSGdQh- ϻ|Iy"QX+3SD~ +& y24Xr5 9gϢ)K{caq+X³Yφ$/"\Cedj(fsI>'ݲ=&=#U0?;ӼMvū_nF5#\O&~mXflؒ! ||e6;A+h9/)>O&d\25 +r73D V:HJW xmǶAlcoC%K"K+>|pN+=`hiy׀)ޅ~F5}faX5 ZZ" +nUƱ3h:Z+neJ;=HYB6BIH@P !Ѻ/NT;նK2x:ɇ0p=!?}f^LRpφ`@Vr@G Aw"0<A!\ŜԪX<71 1 '#hGw_C0" 5m ṫ` ",B",BPGbP !BpS/ t3Ϟߧ"$/0` %:BrXa`F6;XApٕVb\r>i:_PK -:G/Ґ9c+.q|h"|X ~5.5uбFl 0a|x=u04.zE4)x C$Hl- yױ;'jn i\ W8tl-бk؎nA pNlEMlaY6{ר` +Y;y80_w97=Ecg@Ҁ= бQR$Ή {P1j` B΃Vݕ Yk`Õ(,7U +U+'F|` + ^EMB@n/+iQ'B/ paT/D;C!XB"0cr>Q88/l0݊M?xy~n07|cǎ0q)SMs^(d^^2l/WYn_zWl۾ܵ{"ވ־o|#G?>3L6ğ=w>1)BY"D-U5ڂ¢CiTSźƦffpvv]|nܼu}ŗ_o~OD%}y1<\'_ gK"0X8d$ D0QPp)#`@L6-F8n#mO@zH(=&c̾dݽz~x FEyy = % G X'$`(,K?W-=C o"[ ;=Qo;p0ȱ4Ï?!Idr -bXwAWM1 0 +z޻}_>xo=z;xɓOkMuDT__ba~CٖsJ:CR Z G#e&\WfHKi h0a@À 4 w|kfdKeUh_ݯAųs94HASe *g)AxӀ n_ToO*HSoTb.W]ޠZA Р%4(ײ3n膆>nE$YL!`*_mԝ/QsР 4y"ySIfuaƹgc,i0,5pCu~S9Ѡriȇ۝+]xWY"Z:ӸdM3^Dv 97V0N6CC4N۝#>1tdBG*@C'ie$5hͥotРUrS!\ʖrz$N:Ҡ#{脆ƒn#Hi КʷkJ +A˱)sNy6K"cwgI=q:E+6 Zg +Uo-/4CTРa;rV(ՕБu9'_4qbf՚ *ʶ̅ڸ|5ǢT۳,8Ȅ#Eƾt^鎗{<6XjwУ-VZzQQYkF}QLVנϋIh4X$&}49߻w?cW{YE˫}?Q +˱lpWDL|rV\`ƉмVmӰi4l6 m{Pdžg0|ǐ0aV]ց灡F!ʺ[Kn۹l{`?)`oh@lǧ"sf\޼-RtɌ)Nm-në= +5e'#1=0htHh#EAg"F Vh•Ibm0;;6 7`2>A :SvIQĢU]1W B% OXoL[n` `Q/c×hޫF'Jcs_+!DtU3(˗vjYy`xN+1™-x[VJf AƻC),ȗfjkۭTkëK/ck$fLGz(6lj;^i<)7m}Uɰw>&t%4aS&Hsĉe!e;l[԰0ݸ/WioƮOW}/>{cI_ᜲks,p!m,g9@Ov.Rgu6A$Ⱥ[5X=ښWǖͯslwrl$&";$&,aqJ'=ʲ[_vwMæaӰi7X?ښc˖9_ 0tJddD'%x:,&rA>'>\0EEh`NӽGWpkz^`x +Wc"R,Bq&<$Lci7_uA[=kV};Ǘ/ b$fǢ* ˱\PW@i.wEfx΁HmjiHW#-]`0(̩ IHL` HwEĴϙqrxsvB@E͌:yn8~ ^I3mfځ6MmҔK IJ qCwI֣yGﻭѾobKl˖%[^ p(t4uU}\?ɩk3Xb?<1{B1 )ʠ)u +e;5+jK״4Œ^S5x{z~q_=a8 ie/ŴxXj(Q@ӨʨVf =[rSPԤtuEhx{~ {/ͩ0/!=k[8P&ڪY V $7yMRULMogn`##4n%ubD@tPf*haTIȚ^ʸ,oe>OUq x -"8g3h.PԗMЬ] U,*WPW2M~K(d+\+x{ڍ^o_=NioYz!pg'ئb +Z(e^ik{dEDUۆa}B{_k_ӜB3sޔJ(6y +%<$iCPMAcqd"mnf:p~0HA\^0K Ì*QJ 82Eg`*)=P3؏6r[h/w`}o羣=\[u᣻nj:|ͶoZp7ȗ|ImKu:mlB%a50as5ޱwDGI^{Ivx\/$ٝh cD,IFIdB#mZ47"TՁ>m3V?1Yiޯ-:B}Ky/eN(^, +юd,A#$9Z6mtoJZmio=aqS5ݾ|OӂSacO0.v8hx'#TQ*LIHLʆt ޜYޖ~0˪a +аm=ć“!A)# xB1B 3QFg2R!@ R`, }owYr6[iì+auc71'R 9#lD}qNܱqZӝNUzuuk@zWEAAP I\Bx $F$@BȅpAEVԺ9;m-ʶ?*9M8bɢv:jh"(VV@ߠTei4EJtLpavwk}n䅜4~1+=n*(NU +<L;sYINiBx6 +_sZfFGܰZ)HB':!TUr_JDot$ H\$\VQ"Fa]|VaG ^j2#(Q6"*r*&!i"$]0 k A]0ݺ4!>DZр/rz[IV-9~`qL45z]ECmdULDD](ՀOICVt^DA$"C V[+{$SL:Q 1hG 5M|CF^kʇZx3UAPi/  n҄di=ۊ~i+zd%C6@>k\OX["d>Еq]iB6gx;iذ% +gd9 $*MM//uxUakfR2ȕ\o`*X( 0,OƤAq.<1*; O[T{j8lQƒ .3&Ba:A8/ W=hS g4IC΢/}ڐ:=kJ]* *8l]Kh-nH6j &_ciS 3Ҁir`xaؚDy]Mݧ 1M&o +Zr-s.j)kjTAAdGO۸7`pHGܤM$Հ!o?f*wm2~\?h2b۩z2lnʯK @1'TYY0FG)2UhӲ4`^2nK֬f{}Vm&pҁ-ZwZܥ5UUz(ԦMjJ m3GrA A%h4 `Z ЭlVy1>g~ |y؟~uG? ӷmHozޯ'|%:WS 8#^87Ѐ`SӏT]=r{L&u~C*gN{i%8 dp?3 x \aheeh jOy`~RMOU!KrUh>Du38lj,J0pzT~ޡ{&`jmյk˦t˸("R(HɼX&QoAqq˓2,ah6EeX=7eNަ ;63e0uOɧ4]jnH"QRĀvߌ帶la,/1 G#Œaܔ>ehi3~1k<ʞ1tȧiPQ'5D^LRMl)l8q(˛G| 0#xeX+)z 9Ys{xJ1?o'ud^H2kq2,9ʄq00|hahe>o옵fϘ+&;jpQNj$ +%h>鵐ifqfb5\Éߊys&``1k{ڦ4vTᢁ/AɩYL"2B5=+ v:̂*;\q`r!=\= ycʚqOZO:ᢉ/),duPbM97Fz\Wjz{Be7&H΋ ( un̬uyP>8Z?]'[E(fjY1)QUoh"^jN^l^$oGs4o-Ҁ28>u9Ƚyhlu^sKO3;(jzIyD. As\5KT1E7w>u>3mu *].NQ!iWcZDX ޲=7B^UtpQ+.hD2-hM;[l'Apd:d;,{OHgpj]<5jT:hCjJ +]QI%d@ [[ߎA;.}߆w[|pRB\G;A-٤}SKUT*K0)!D=eRoh`2xo.cxk{wt#;]ds=c?bv> k6`B:EM{MDZ"VE +Ӽgwo2oM{ ireӇŢ#3PS + }fj;8wym>3tE`uÅzAQlnwG6{xϫkE7]HH ~5_8ɯs뜀gq+>~?>].Lm`=acܜ>"ˑ~RJaiVUXaS/%(\bxa@ @Յ e nH\tzK?Y)ƶX f#fHvuqҨFą^DJ +a]XH:$?y.d_Y«ѶOo~~ZJ^]rrj[Eۛb.A\Ԓwͽ xYbN8ww`{-CplInF'LǬ/F>-/,zTB^O>{.V~1vtnYHI׽{Bc{C: >gώP:}$%_z^US~nˢeϪq%kҔIe?R˒6^L|,Oxri' ޥ^y/ >9}Ǿ+22AnB:@$dPɈğ?Ǐ۠d~u9;3'ܝd}/Ds;d~>O`?T.@WY4v,dG$xPt2\11 ЧO| @<(1>0nN\x??G )eUMuƥ6-k8b#S͢v횮馐J~Ү*`wo2`i(`!8):W@KD|Ъj){g3Wzǫqdq 1>, Ay-"8YhfNS%o_%B)X7oǶ;LyeT;- DA  p[ZT ͷ4zS>KkL7tDa 3fY`l^{j{~8 &x@ ?= +R7 +EUne2^dQDLr9I[M#D%@P؆~?VN8 o @A$o @ (pM@/6,qkًxդfu㍼*d %vk\Cn\ӂ9Xgh ?)lń(9 +R7DkPPqKf9T$Y?. c(w 5A3xی{6gsv` ;llHklԪa *,ђY.I38aOr791fkpoui6ٶ0 ( KJlK-Xo;_*%/K8 P*cK3\iaY< r|^|ǐk2L=>_USI;İ 6mNH OHT$+U=Td웒rl+Z3! 6?9(zI!73`zѯP^e-'ڜ2a@d#LҖ*1:HFמӼ(/J pEHy,pWt:;7 ^)m.3ȷ '=Zs&6qg +6q[ͷOG$$_py"!hgT6! !E f_+Rl.[buũ@36.}"~'>]W6SL + 1f񌒢Su<*qOhfuqi6gAm8%h?w=Oe4Ĕ=1a$P[k匭sH_g7)hv!oFVϷ0&96gtdul`5( _YT8PG]s߉5{4;~elH&{aL0Ejm<,P2|sszl e1- +?N٭s׏oPʝ~w8 JW14Gu'C0VЮ#ԫ%JFWV]R-fE`%la*2 +& 7Ym((C U5XB~dgr[7h~ }hč87w*A?:Lڞ64^or]҆Xѝ&jL/RiYvCA)Tu6Ae} +{48=?pkbPVg(3]BGiK{hnzicgXeTCP T!١} փNt[>59w#;vމ)/)+F $ev+Ӥ(󻒔.RPtSj]Τ +eGrJc(D 5f&P}j-~&swl&n.Yh)YQtвE~Nkbr[iWra;=VCjRic.TڄjP E &P)46_.K{OkVW<>D:Ewa>r:lHd(qm6r[uKT[|ks+AutpP.0Vhaf' ,լR:!]: sep1"@L)FK%tەYݑ@ 29!kZb.zۖ7.nޭY["B>ߝ1cEGC z)?"WWc{5: DUՄ/ +jDA?iW7lZ7ʷ;[%NJd&Dr'IY\hR60r-ʺ6WC`}UI$P,1oDAÖ/V:eņ-`,oY/ݱ)|! 1iTܽشDιt^73h0!-/]6(֣5~c#턉ӗR05nl:CLy! a1Q_sOq!)%5#03g!0̃T2^6:ע4C_XW L: ip='>sCa@Ci4kP z#T=saTؽ;`fVg  ;`xN@vvG! R\!pJCPy8Otغ.̾߄?m?.N8BpDt=~8+[Z!H[Ck#`X 0- - "dl2.b" >c @gaЫ\BXK&=ה%?}*_Ŗ͐iŢIbhX<" JFA0(&~> C e Cfpc/شLVbJ-?k.A7_"NDˊǣ%cƒ1;;AͲ^bYgT2Cb!,OK= yЫ7DvZC&3O&L%Hq1|4JYqZy->i':OJ|C> 1d#LĐ3ѫorٔTÛcM'M$cؚr]0IU=uf# ȮZT!΢<0ZOsjӞqkuQj-"eA` @XB$d%!@VI %$lj@AA VG;ߙuzݼ٦$DbRfw9WiQ^cUT-U3f5URmJ*0P 5ṗƝK@ޱ C? + ;61|3$-!xUF1x&(bJfX,tf(FނOg5p}o1(f|Sv/%V})$;͚F.MeםuEmvC'hQCݢYаsh],^trx77n97Lw@,Ddu,B %k{=eե:uS.uܥʐt*ڿB۷/7&V,tOmx} o*<^DAxbyލ0>P,8OkĸDT6.HO:{9F#OV{xAW~%=3ϭ/?ulmWۂ%/=J=:U|?HdeP2дpy7g3w{jd8⇃ȀX <&(Gdl1?Ƞʨ13?3vjjqBn8J:j`G'`21| ;7`&oPh1G a}C )ȁedD#O/6 P{]䈪F (䠀Kc.#KqgKhpu?ŀ׊@ؿtAC}"c_zAW;(v@ہ;\BPn  :w#-ya~ C'z6 UC_ + B 9t ;{p?*NN& n +nlw p?8_QC< +Lq;FVk)+>eRƜ%Y8ωgz4Q0kMa?M47q1콌!} Xu;1pC:b`!7Ey!%x„LiRK33oT-"֋2$+Ill2_;$'I$ʻ厐7Fz, \ GN-M"EǚT`R%~BL&6.dN(&pG~H988l' +]mE P7ȌE2&GrpI/9iγ"Szx2*}L|DjP'^81Nh~ʾ}8K ii1U vp9l Z$N0gy4x2L6AT'f=$7< Kl#&s)' /S՗@ A +N*1hb d| Q&O%xΗL(Ɠ+jU) QS4w75}M{Ҁ6D6%h'h ĈADA pm|("F-lTže 'Z88kaVmFwII7 +i~~~}FY;A2 Πq@PB ^WfΔT! sF.JsѯzJrИk8W\+e^_4 1b ,oB! APw}A"NUqSJxBrR9aC۴s%Ime]+nnYfSV)) !cHɽ_oCP% I/ ֔J zP*5aniԚ>Z*|a98fkz.7q{ʹ=O@dA (F0aDY0H R'uJP + ;-ִWSXmzNf+2~D]nt1k%~fo2 0~Py]܊?K +ՉLMeQkj\rU[kתKmVHaыLzqWb1CO@s0 +&߷uasQOԑLe-ZyUqR+ +Ygԕ[j2ZkkU6NQt.bA&b#VgL{BPz7CF7}V3GvHwVeU+mŲ.5[4my6kR-4UN#rH|jx>A2 91PRo<݂x.NW@Ʋ5΅ʃvz!0$lŜ KHH"N_Ԥy=Hzg04Ay,Ey٬,G} "}bg}OXeeK'!vD _0Yǩo"ȋąs^kJ86׍z99`t2~@2ȓCByvK߿靐E?)ԯ&X׺5\L^sv:F"ed? ƿK \⇻)t{]ue5yn4nq2ueI 1@&d tGeɍRR؞Z`nvb, S!O" +Hu rK}*e:.װ~vxcOѥ$Z"oieLMoʲ@[ F{^ ؙΜ.zD{@,D۵rZ ?8rD݁A bfL6lL0V;f`Kdp3% d 7 l+Gq@#[8ko G-x +,=j] bOrT!H4dT2-pSbj'tC>ZMISs?Ç k +LDFr$j@#H$C!ױAU&46Aw'(vGUNkp+o5SB!JbD}ӃP*CD}qIE3 aQ*qGt7Z#`&gV[VpV0wEJz@٦ }}/DІ.ݐr%`U 0j(6 +pUa/S 1f-u%o/&|E@j R|iA +~9_y" -c>CzϐBT0Bh2@EjpB e(;`uzP/R e@SWI-A+vw>o/e<{g@|˚]b={ǖ lMi24kp/70D'^' RʚBka~mg}#|%#3a&ϰ&5==-:+ZQԣuTD+ʅuBf! H,'$!Ҡ("e(U(Lx@e(λO}s7i /l>BG/`X/Ш[ DՄ.3#6'=0] 3ĉjқ:kci!i{JFӚ0#NI@Z +݀xr 9{"=qH{\v[laSBzYF +Hz1|`D>e1̦X 5Q5P7y7@?H @O< qzܻ,\>5F})b_d < y`ۣpnapE?tݦ,p89 ٹi$,~'<=E3ch/qǘcӬ*h䥄gx=?1x~M\!_;_[ 8> yȷ/5 Yt Ac|bIo#e\=;0 cÑ͢GV\_͘>؇:Cɹ>q%y?h] zjPo4L A f~ 'J8=leC5Q QI^M|or=񁬊@vܛ|ܛ,`:jp!ul,Ap#@䐏bv/f<#|`l \QރR܎V^N9OJtQ'i= +G,`Ow& iנ8 `ڹ} 3 ѻkJ&DD0 GMIT: wc;rjޑnct3:S ])lG en G `2w, oo~g1Ag[$KiPyRT'5kkCWlǷiYjl|(9Uѱrfr% 503o':M,s&[W8nR)UK]^6a֖ 6X~%dgEl|AWIg)E + b K1F|q B̳(V=1mxCY0;̂c&εk\,č `rlLjxcWʴ|Yu6NQaK:|a6.ݮX:ҝbMf*7CIC<\:W{}w/<صSS~ՍuquDPQT(bIl$$,D*0:ŒZ;NZ:nǵZP*2)UdK9}m^|^K.7VzaZjBK5}F_\c<\mzGiafӛ0ܻ=|j|4쳨Ǟ$MW?l{I]voqf"k[եm+UnzZh|:^Eh[m[?QIT"bŋxFR.p\T*m?;1te!WrΉDyjx,k#]!ԳQ>ňX&gk *Y>cȎcd%rQ)#5Ңq+QhG3bwF-!?&H#!EjZQq_qY_iRH #ܰ8΋ŊhM\ sp1nq9fG!~%d͠3Y /RLtFkӡ\Ob ICo2 : Ʃ:KayU4c&ϜBp,4? #G2_%dBR+>a.| sxF=qs@ ݄Y0)։AXISQ-~bOqp?;"s;TR4HH6•%t0 `Hp\"b4GvnM-13Vw_,Q1_@? `g]!gCzztPh +á.r=3'CM*${yCBEXtY m Rw26MV/z/钼vH?i3 lhS`¨DFf(Ь\_ܜvCrH1D%3O ;r,jߥh@aEvy7;S0 A1lz, +8HA6 MPnK|bH- z9DWUB𘂠z'~٨]BfoU A %@ǰlr2p`^cI<BW(w8 V)%$uWT5!zJ _6+_(ltrH e&f|U7h2}`t06 +cP2A J$7?OCj!L0lSAG~DuAYgV\7?QtR6?I:?K 94d0 \`Qr$TOCl6Vh%o eLpq__ӫڣI7?k~"-ցjWuDd !I 2 hQP(ThI ǭ{{̋yy~y$A'b*37EmJO%\OŚx4C  b'iݑ/f F}KF-%:v22vfAi:Oǡs=_H`0Z:*J?,m: 20% qqChmݨ6foT?'j݆49u NU<*А^ _b`406YAP24]f2e\w|D x~j&TxXp%=6s@4j rѐǓ +) [`bc1` i,p<f;/_ +|A;sT!5஘I 7X- eI$->CX?\Ij(cO3 4#76N0 Zd{߽\ml׷m#šC.9 !ƶ˜LV]Q[j6,KeDŽ =<Àd0 x9h@ZjKf{p?pjw˓S?+<ڕߡcSX8Z-PKj~!Bl0{R2Y:=,VGr=/mDP\s`z[k sBfjv,t^<{ j]7wZu@E מVET$xb%Rν)S $"B˸D5ŕhڷxHGz,߾ோ;^5YovYcS%]7+Îj~jrXUPPl,S.)Du2qrgH\&餢aH8, DO7"@@*,XSiy}-z.h umǟѨ1yHJ%e+f% b~jږʑ!K餈tXHFy1_d 9i9%FWa`FN֏oU6>\w1ҧ"6TU"Oe!<32%Q*f<%Ii#b|TȖ 8)GjD́dtm-,_tmkŃ]_t_w]|`eDAmLpfV"tnKR%q)yI㲇%dՈznLHK +B@ +6X֬6c7WG0}wv]:֋5-a9AZRNV +T#$Jđ%"\hrLǟ7J#rn<[%/sڥY-xg ~5=?Xt,S~gZxB/sI$4IŎ gj/C5z*4 F.!gCȚ0 -Em-xlۀl@З}pƁ}U7ܭ>"Ϳ{IŒ81k5Rji`MK vXQdbF0 v<[_o7l@陣UeEmz]~?hn/$%8vC2]$ow/4WԀWKկh!Ab;,å` +tYk24cGfMcݬ?Q }#ف!'Gz6⼆pq^o 7}:Y0y!`XNKg j,eUL9or^!p]/?4$BQ.X=㴞0&+Am;2]>0GzbL;Z hk ,A}kPdk-[me{Vg]1f=Ϝt{jx&{9:jo|}{׉ϾGt~;߁pF:0Yc>:̓|ޖy9ӡ7Fy:-p.]gQMy? q +.,* l!!!{ I 7kKGwKU#-X+:uA=zL[8 +B|潚|w]=hil*5{.]0wp3GN RqU"֘[>asbOn"){>G6bڸ-Gx}HY|HC4ЄaX(AQ> a@TNq Gq2͓$ߡ(2)*%`8z dE!; qL.}6D3e|4|Es262'aqh/Ȣhf3 2* (\GAi,; <As +Ru t:3ALd> 1y +J ' JCʀÄF KTaP-!DXK/ldAV'ɺ.g Ivg|[xbd=xM4d'ѡ`1IgB'^9pGCI<ے!ٟ +tNf@x&v.Ywg!>Y/yB t&xCȀ. &E [D(@/8nBܖ>BE<C!ρ ُQx /(#hPy#o1&BPPCUꓠ4 ʝ =GBH#3 KGR9 &'}HNJ1&QOn=[}KAݝ <Ϡ#4>(:qLT}å +A1(Iy -|v{8TgP^RWhʟk4Owyw:?.)4½a#*}P23L}*QhAd$?ҵj}jzoW ˦QӅQ9g0"7x&XśU@|e渱jGʰs)wtuV+neEc88ᑾx_~aKyrpf.l=tГ|{]Ċ:&N'ؐ=ա#1+mWU]GF&K_ +n[nZd(0[mmECSC-_zl/yAo"ؔ-Y#zY[|%+p2\+9TcqK?gK:-;,J/Y_8Z4h 8NJ),9yL~#d+ȷ.ͱLlK2ȟ9( vmpo]_JSMk{As_%Q{k7%γfGpYeM>'( dȾWOz4̣a[4;Yp؛=n[m .ѕ++ۗn)ztAGd9׉+eU|Yy+׾ʾݮ~.'0FfQC5&2%?1Ad袻[~mC?h9|{ɉǪ]]mK:j\]Etm_Wly8yƟ8H%CESf_˖889v!5dl!ҴeFiK4L^XYA@3AZ6]MDj+.;fw9&G7%ƞgTF.8M$, +%tIIlb樒I^֥N{:+vxof:4 kRe i"anH^lYXVt/#\Ԉ 5=/%z*"9z&,9j649j>$)j%=֓0{"_B4{YS.uEp@ +k%Y5_qOfKf|Pw .F +&BWLxYN\;.v% +#<{+UͤHߴzrLNM~jK +ODdg%222YI„)x䇑 ~d7*a:<:~7ǎ.DDaDrxY~nSћjᮽ&ʷmZ_s2P"wZ~ܙ *d 8ᇧOq#Rgy)~[& `A O_B'=q/n&yd,@؆%`mY`Yn`ug=w4{@7|I:H5 ?BHI t`{R"n>|bf/s/m!?삐OV"xF`'!,ɹ 0z}OX ҂Ag,7{Ɇ_g"D.ǃ +QvGlYMtBt"s+]*W5Fh+ !:i__#;?=G+b `>7ҁO=3@$fAb"h%[WWGmtp:f}6aי D @+5zq$X?r'j"Du"֕ +S g8@> JdHJ[Q+<: D3q,]bk,d;2{!8?Ds3듀UHXAPAK +},N&-*unH2 _x+lƴEwÆ؃Q7Q9/9}pŀw3Wq>&!?{ԯZ{d>@V#֊ArArUU=,7J$6^Z^%s^[%*7!q+C;Q 8/DN&A-d_Ɠ|Ň-֑{@w. …lٲt[R["WQT;KRgIO{[7c! qe#C1$WLhb- +#G4g _4egy?YH_κs[+▲%kҞ+o.J{IEeW@ܩj$>đ|)֑6UTN-g7G8/yZ\ИNn}%7,ܫQ=V!Jy27ңv[V-@g_Bidg'=6M%sz_e_- ~6K]nt^7 +r 9戞;O?O9$w&8|[ٮ]ٖ2h[ͩ㲦ԷƴwI dgQ@zlZhRjwZOkCf>VEuv$ٳ!}*$\KlWv#Ir8}`ZjMk귚}#ꆵVE}Ƹ|{[)!yDmH@6o<l&} ԭmݣFyN$,P}U.+*wWdS6g4e6d\Kٙ٫NQdsqYUDH$[G dΥ‘2VrG6O]m5n6;^.{vW6g?h䷙6 +[ ++eyU; jks?լ}0RiN0-1VU0.{$mJ l޲T͡ p<߽Vԫ{58xthWflYWf6nIY\#-lTWO0vZn|Z^03 iMqTU?(˷y{)L|28k݃(7x_h {YGՌF6Z +Ě*yeNfSkʦԒ4Sb:ST41L a&.&{S͠|>rǔmݭ%"J};uʍbBf\.1M),,ոLZ^ُĀ>ӐX:)(UƔLV&Bٜ3(CU沧iFuh:'ʿ۝j[W[Ģx=rzSS +nW&./fkIiViqUX٬5X9SY׺-CuyTe4\ѪuMBXEAaIXE@0qWzZD +REAPAܵEܗ#n=3v +cNUԞ,gg|~zy}?ѐf͂1=ŧoA4ӵV+ok2?mW{$QRYk+;.b}˶S"{qIyy%w,>{I@m˶\6E~у*!ݮ3FtmuM原Tյh'ly}OqOj# Ǭ;&a)*>K_X?+w᜜}md}=@V^`O2w  Y٧DN6 u1ֳ.3&sՒ"/jT6慮;TnuÛf=,=sӪo2/ UYeCswFRևD"_IUǧ M%S,\RU\,=㰽CQ>wݩy'G,iY5-yc\vSѬc{SkRNo / Æ/?R>*FGRGCo#zTFtb=tG_]ҡkT%^ 1MmDd+/d/>08g6;>'^:1U>>f6#9(TѰ臝Dw]۽j/qTyÈM{\]ۑފ_q3m,k |VS\1s6zڌ1יӣ vyŴ#>3D]!h`?Utr뮈ӖO}[8:>˼&<ت};hVFByCx]DFvAu:yDgD7#jnfʯӖ"kNkzżr =ZkCO]JOxVcz>Fȵ=U͊t2T8w(C@u752ω.4>/N͈V/y/eTFWfɯfOxdחa3/N׷!oc.܂M |{FD7$/!5Z!Dul+Xvv'_=7-)_3{p~jZxY4C +UClw~d5IJAlbY?hGXaD|K#Q;#JÎ7n:Z(3 +BHc?d`l.ATVK\_0l_Lj*P5˿C)EpVCԿ.4YEjE( "A% #@#r A("HM׫XVG+VWZ]gߝ/g|g]ך$i VcjD0!D +hzG[Cq n@=_\r}As}F} +ns[x +ϫAy9*Φ9|f9DY@DB(KD*׌F!.mz?2a4;Na1vk +ZC狰oR # ~H{/px*ٽ_ +LJjٰb׻ͷ=o:~y_#!|\qw| $|ÃQ>P@)wusW`Qn2#5hyR/ף5n3Q-߇/5uM  +N :!x\$hB6&P(APo8.S3)mOEHd`\iXf6iK'Ed Rtv阽';' :>|$l*@zg!U 4S V, =vS^jR +\g [ͨ.Ǭ="w99)xOHKU|%i t D0^y(ewE&:bh F 0$@@)=Į%Ωs?A şS~+[ovlLqɥgr"2.GRIZYEࡄc|;+#vl6Knsc$SA +j)0@7b-ǮȳCcSSfz3%쥓a㹱.#->J ;,3*o&e=d}06ߐp]PW%n 8r r`d0q-=-@Ѝ}M>*g./.qL'꒮O+IX") ]E7!=*nFgfONTF*=ERώ\>fP陕}z;D/*'Dˡ9a~5i(akRe +-D}/ +=˷Duz|o.5-Bg7߿f6x@ wqo]GSI:mu~nG߶a6޲z1hQoge!̩R^[.*KחkUM/+(L U~P^^Z6j`0pXWwT hu:yMt52-&bEKh}]m[UM6]e_Q*P+K+njQ@ɵgCe"y;B;9S w!!tC}fh@nj ՔUOguUMbW]CVm7ϐNԱu/ D{X[~|pL[V)DBwNc=fh rͲ]5gm[Gn˞YʆܠRzBNQH~T +Ș +Ht@ĖZYpـp{C |i/CC._-+aNn݉[S;mŴݭՌV"0G)js23^;B|3$toL>,u'{RFj+E^O?dr7 N07]X!@*Bw]Ad Bc _ݤt{+k/7ZT_ks76mDna-r[;~cx|D_|J>KˎEћԂEG->v8T)Nв@]n|;)T{s%35q0Ͷm@yW5;dd&GyS-<D6zvc_֍Yco,dYbjmt"\8\ۅHMkD Ds;^ ,4㹼~ocd 8= TxV{ .\;vhH5mL¯.CwC׏ma3>^gsX~G[BQ(e>*  MCraxayFc xGaw$xKp' l`3vog&_$*BM# |Ʉ@CBZ(( *.\,\ xH` X&c ࠇW!fpU3+l?D"\" Hų: Ix +C =q?/8T 籎簝'c??g5|M˾Erb(xS(b +DZDhĒT /j!8K"f5SdZm$=m2] +{ +-HEbfy"z} ];ҏ|!iү 9ꏨbD2wa1xd] ԠkyXzLVG'zB9 q h( F|?b2 ?ɜgfn3~_r +B,#dX,TzGPA}1a4{W#"f2ς友#; @vȨAKH?0q}5HpvE,UO ɯ)cI +n e@t 1W͈1Ҵʀ﫧4OmbEۄ?+[+M:VHiPv}>dj3q]3r57`g0o/iK9XߎM9#sdkQ5nBN y\8 <; ?QB+ y#p!uNxʶ [Ÿ] X&wg<%ݫ:0/<8S6|n:9@틼H뉸Axh|KD~F!ZS4.y} + +|&t3I l}#fr+Ȧ0k4f,9nD$s& J{jUwQ1k n$o<.x:rVȖQF"vIv$5 +Jst0k울 NeNEOU{JX( Z0D] +(ަi0E&pJהFߍyǷ ʣl2v2&%ݵI ť3ɵD K%)^U + +/ +Es +!Bh`/ {o. +c2{WTKEV}9{[I rU:]M/6 %}_7[͖7[|ĒC_dD[ :U7JHu!ܪ5*5LNe莖˜=jС&K<\YH)ʨ+d nQnz 1!Y*bRSv10x{J.7[$5; לvU< uSTbt<%7GEϒ׳dYa$8̯~Lđd"412D +Xp;O눠kXMaщԭq-5ǷUWFRW%TVzeRkYE;')O'̝{/!s[Y)(J"j& pk0hkZ1i8f .ZU*+{H˔Ԥj<|/_|b +.1]$[=gp{W#vVvYB{>bc'ٸQ9jU#'!@jYR.:S%񫚙'+|*'88|"*;R%S"h5[KLqf`34&w3T1Lz-#6-.Y(l5+ȼ&WdC#- n +Va#FpV#ZX+*_ͿE{Wp ``#6ფ!ly +@N{Ss\»JC:՞A=q;mAԣ͈zL(Auy{oq`w0@-vвuq1Q -q/xl#GN *v:s9>Վiq\r@ o/"s;ٿ}52GpsgN kdӻ iWRX0o39jUmW;'2w(tێLݒc} 9. ra ut 4|$@MH3v;b=IQ>as7[MΦ[sf +fjvg:`Kږ:duȎ1{\E+WwA'@?@ίXΟH m!f[Bਞ_l쫏^'1)i}g6Ky+wVn|8x8]Mh_ο-3'pC"HvY(9yѡY&/J9hZru3W/~,=A}ny;P gD.~gЗL{(m# a!: 5px7?ՙSa20 f`FP"JQ,X"q%Uc jtE=.Y{uƵG"%( +!;O}}'~$~0Ofh#v^R+uBW e{; F;m_ x(6Q}اD֍"j)]5GPps`|(|H?-"")bϏ߈5X/v~nH>6J-߳* .C4'DD8?( + + А:H>0ZArCOY +yJLX R`Ev%,M4/q-T{cDAD 38Ӆ㡽.Cw&]mqm{w'♯E^d֬QSzɫly]jyh'P=9]}GK4wV{Ju#qg|&xBSFӉПHD1v( Cjxm#TFtfNLPɮ+( }߆}fDTDDYaVePYM*X&FM0.59Ѵ1ihKs޼[ą3r { ʏ2hnڒ۪1Sb_ǯ*Ҫ=RDna_Y9sMF"",MB0R߯iPQt &VX) wj+\ټwIl徼Tʜl~Yv)(NBQj& +S(Xlaᮔ^;4>#80Pk=uL{Ӽ/xE}ZhBg./c$18%#p0U$MK]O=O>d(NGQb. +w`1JD}P:}'ih`A=hcZU4u kbMeՉV9iҊ~-FX_r'N>++D8E; +QB`4ԃs5ԃz{vH[Cje-ZEM+c-$u))Y$TzU7 Uxm];xs6pk +bJsS 5PH3@/*Ʌ.3rev.+k_ٶ0Ӥ{,wdh9(w辩KpBr_:lEX z.,^.Vô6T~GK5=Z)GvMw[n̳>\Q缮kD{xv;a="zNϤB 4MC rfh a]';m$gxF[bFl6_7 o7䴺)AU輺ɡQA5h8AzvV,Ns!eL83 Gx*NgLбB㐱Um +kpooȱ>^AwP~1?OH1Łi=3LL{յ3OǨޥzZtnT!ACӷyFsh"D3\p-Ds8I?DMy`%6U" lBgE b eJ2L^U++fMOe?Y-k7g]ew+bG)F)O+a5Xs\3 )ς@x+܊f֟btRk(j/˔? 'ODT up~ `$lF򙔱xV2eы,?xO{*PuAo_t?_#?%7j`X~|0^@0WANx絔Ahieޞ`og?hΓ|9g|Ht7B|{`'  zh%hp440ppX%B0H1Bo FʗRQ>= X=Q[LɅCy+)hEˉH #[!`|E~\BAYpS8RB7(ˉ +ro }bL x`B/Hb͇C<hƠ3̕A#z jAM,H`Z&)&5t>2L$U)}~D^ KK0hȠ ]̝ACo l`rI$! 2A%r|INeJvv :2hOZ1[•XB\RJj٨B: Bw,\'u}GEugqSFA"3u +DPAd230 ",BK5ZWcM=hbY-b'su߻}9(zy'V&q_ Nq%]ev^Hihde-r8hQA:'hE"[|}mqBLb?ǖ( zŨ-,rw( e}ow?$kxo%7WCgҋ_w?=߷{'+E;oKQܒ(['e8s21E3fNPxpz]8oW.Z ?Y̬ Y 0/2]7\ +g'\e +/p@w$@/#@oZP/^z~>+]}A&ݙ;U'Eb;w>3_q)0JƧ(:@38]z~@Iw}҆<4{~ެ>;ܛs\Z&Uٳg7'dY>=x5qχ&G<ޚ~f

                #z}b!\ C a ZdC_E yN68=qh~y&sL?ݢ?`xOn>A]gwd-MwN6]V@A`Wal-pM9G2p:ҋ},b>H.p ,ݨ?$Ev/6߹r{Z6A[K:K7]`'QkԱO/&f~e%<疈JGT؃q=ѱ{#4=]7nmtۯ6lM%YK#٪w͡hOPc8O7cq>_'d$8,d_۝P=>Ұ;.AԵ$lSlEGtmMֈ6eY˩1sC9z:N(#5hWұ0e7gRYp" S'g67c{g7'upKJFu=1Ŭ-![ܪYĕ6/Yn"UVѩ6̥2+yy]7Li :Ƣ8н}I ڍ0۔)oS1ņ,؛m ;s䬞l/^g\Pu1$U)&uMCR.־:acE|sejkQ)Wjvţ3q$2 +ÍxAe Z!3|gVglnG^[΢ DY f itMuZ<ʾ$ɱHѩII'ܴI7r/Z52ĉȴI0.x82LcTe} +AO)tX6eiʟPj=VٵuZaIBC]U(ReS*,˶I+-K5;w01E]#.BdSc +PFF 9Pg?\Nay4;ʛfq+ Fuj,ĚqҘFYdNʊmLXŠKhLX9:RXU[<^H}ݍkW J8 +(8g6NZ`jNmzN?f`afnMPEESkٺn]6eyZ(*X +)JYYػہΞ;0}'MZB׋ǽ2-c$)nJjG%W?ō'=vpUB`J56<ցYki3d^S`gꪉ~E+߷bz + |NXc.tsȥձK,i)X,1$f=baoy-~KU^)5cFi(ޔmJצJGxiqoMnx$p̆; .X$lhIix^IUDnIcDܵZ"sVIdގ5^u+7r~v'l3`Jy*qEX[Qsl$S}Fna)kֹ9[V̭3ʮ؇-%$}0=5P-gťʁi\&TwWQXJ(W wݣwy2df3]/ӪKR\;-] lI6h )wHp8_\ɞ:P;`yVCNdQ7F׍j)3u{&կro7$1T(c1f`6ɝ.`2Wûùf6hXt$ G<gSFcwAUQ˴2-Z-~ˣQ;"ijro`R?PTY@Ƈ& cO!g|&_$#%;`?;}MCO"h-ݰ} `;+BgDi#3~n`k/b݅ F I'3@9=.ak[,m03Lv^NOй^6Am?tuނvU*3N5?evSO Hflo|oa1:w4;pPA7 -`s̟ɹ2;ك?e[V`'` x@7BdNqL9ćᇡ7\.,P.W/{rg̎ X>̽o,v$'ehB| CG{"$(C iJ0~OzJclr}jO][B 9 <9Sb(T/yf(ў:-TDA@'/R'yN[ߛ3?;nD$_}š-&¸P9U^x<~4^.0#;ߟi%G\ )PaI6Re١Ԫ֏ k괶MM6ѮAbN} :F9UrꧠǕiE`_PKufT :kA+i_ !7!q6Tt-? A$b@k"q$>ǫPZ%vٱDX}ب]ti;֨ڹS+D7Lj:##ݢ{-T3$88t%|t$ˉWӵ ki-Η=>wqڹ\wYsssy6%6{6&]jH`T$>5@| q4Ay@+#Wӝt[ZF⋴dډS5?gcb)+ )yLeKgMi4Hm5M'UvSUX*iIXgk{YjveVc5 Sհ|w cemyUWo5+ o" JbZE( K!@k@E(޸junkn۱vvt;ad?=s9s߰NJbMH k) ^ ك{x s%' 0!n%&,%^JR/5|ϹR3qS։ةPG2{4!xW!s΀e$ kg|¾Ct+J\V卵WI*9}V8=0MTL$[ƒۘI=!CCY=2/.H]r³ זDظTuYc繥ΕAt_fMMtfv<gTF0즎Їyj^]w!S[lϩ mn6gu4Caͤ&s>*Ie#YBCDHYCB>9Ήװ{^.p!g 0e b GP5&0z +ޝ,}`k~ I_Zȭusf털\;')Yh?P[xJ$  |s×jߢ7 A R7 +`LRʢܺKeM + "]`Ȭ3VVs͆v~YQaIH?+)/n(|+)1"4#Ucpу. {F[UQyнŜX[W]_]j6BJj9%m|cqP4*Ht+rޠ5~#0t`aB 8Y0O0{Ͳny\VQS +(2UXEj/-唞ה^dޗd3MD1AJ^W%fA=X4By#45Zѫ ޥ~E@C]S_kͭif!azSz;\Yu:\YHUITf"P _]AxkC?4 +`Cz'f,@w +;kW j0\Ž-nؾ$mˉuY [uMeW/ة)ZxM* u]xpNA{&q38;p;@57h~D@t[ۛ NDn^>pW BCȃz`uP y2cc}8ܻy3itu` cOx>>ޏ;x}~lFຕ@Cq \֥)bJr:ɣP-g< <ܗ\;JܖᦼUp8^E' 霽:'8^vMm -,U)Q٬jifM~/-߿-4˩ŸS۟*p-lQ犓|P:Ma(UOUϰfRn1MPm6MWf7 +l0Ԭ7m\keYb׭Vh %? Z+jslgXgzj~:J[EJ,6PnLW . )lڜk\]n^bԼfy\d\h,7W9aSs\ Nq+H +eu-??;w +WtX1QcJejtȴ* +OY4KTh;7h.?~vP}^P}n#~zБ]N-:3.mKvʺ{:+=TFiXCEqYZX, +SvfU6zY_L.4W:~Frǜ !{vziBЏdO%⹷7ubM7gjHwP,,ΏL떢u͌lsdvq);|a\NwYo _G=97Y#Y.{{3~,K`E=^&W{^VocvJ4yRp }بR=9$A_ٍCf =s c;eH~kZLtNr"}zpppc-4CJbe6%%ppj\&#}YI %)֘ꌉ!;_3T#R4b JIOde7 1P,,.V:,UHA@*`-k1Xb]QQD#UѱrԊ:k+ڙs@wŤ,F/(GFWύ8;jSxTQWc(a>_# }xk+$|dm8IZ%BN(If4-yYrR"!1ba\eLBUt|M,9"V6:p kv + A>0^舶Kgųf] ޹>-)9;r=$eѹ~Ȝ9aّʰ4$Khz: w=}lIV|(fYb.sFx <%!e3˦˂KQ~-'-Vy[M(Yc^IWؒSڎ]*lH!)6=g;ؖm^!I.I}*$BP# `hKWjlҪP3yU UeXxUYRzVnQyTWW+>j +a^c{s2|s@鎭WU[` |7q8P3kH̐ Y I{6+1n2w55w1lmxk:VXX\s;}FZ:K+* <moԪYG]׏[\?Mx,i+q1K6HVȆjdCLN2T+䃶^7τ={tW +MDofm]2 kPO  3CwǀPosc6.C}$NKE%q\[Hv l#z,za ˞u?0 &5M:0h`<c=F`ӒrXBz\U3X>"$d382;s `. 00(лв]:!e +mv0o E2 +N?!kvN}'5) i{M'܋HDrA..iT5/Z\/_\JyC2h/`pB/뭐yO33OW:赦;X_*8kx!v7\[cی@77,]N)KOgͣp4x0mځ=jz/ȏI~"r~T<</qC.נ(++7&F,(,ȲܖEvvrY˂+  ".!xCEh&Fmc6If:i:MSM[vڴ}z<_9y>|e >X6e7pmŕOK\@$ dXqu,xFVe +*U-])[kkݵMp={aj1drrr_w~ko7CfC $r"CkKGmoWkqKp/4 nRZ.GRZpP9E;}VC)g~֬(b}Bq}Lq==WΑHH둄CHW ׇG17r}G͛`!:)3aNi(-)>)wfi^Qg2z{88w}Hca kl!Mw07ߟWЧ>(U Qϊ귙.=CӞOQ[2 $<%b޿{?@ωlsc9ʅ49Lføv33 @fkזs5ތF~OF-L/jOJ[>})iNؕND"BWO_zp}b0L +&tRݱp@Gt>ի/`wg[]6^g@ێ֬@wV?Ӓt3Fݼ^wKZVw#ơ#"$9p7\G߷`=` +ci`@J0C1)Q0󊸞<+ߝ[ВrE 9{NÈaޒWޕ m'2H1D>O1wW9K(D}7 +A) iN3X&{m.,5V4 +ZE5=!8)Ae_HSGD瘃[xqz~\__z_ΒhlViI]lvcI>Yb9Jl5N-,+̃RaYLPZIXn6iH; \>b';(}-ügyQۼxQ}z ?jXxc^.=.vv)jdҐ0@+w(RV, Ư\2ZBm6^V{Nr1糨{{i'҈ߕ>j@k<ɃȣP]S!> kjX?7vy@E}eaOp}P, +(q]ՠƂADET,NPXh{,G$1qu]{Xۏ{@xgygΑڛ%_>`Q2l]f(2C/)멷4y赌A.| b38~Z9P rxë;<+"Q1ír\\p4éUp,2!9V3yLYǻH?RO VF*gS݀cju#`WDak261ZCcIڲ*K%\@]+!=bԝC݉Eݸr6ԯ_ȠAVh6#GdeYPV: S^ jO-Pwm.߃k=?CIl3Yw8ߕF6eل\dikbR5љ&+"CV!V`zmDQ7+|; R@.Wtll]> 7 Lb|II}g'&w!h!y6N(F{;Q׋]# DuOrLhv/C?[7lO 1yI#_ҐWhv<xռmּExD3=桍i<,`!Pqk6@kA? $#dYM6RDJvRK!u/+~xI!쨭PpW;H32$t䐍dur +.2i.'WG ƙ5H?2|B>N"u9RkC:k%2SVo>~CG7A8RWm! +GzjXjMf|tX@Tjds"@# ~I p'4q7F \hK_hZG9&ۇGx}Lԙ0&He%rM8O_ŠS 8tZ%#R9SThgG8A'5qU˲h%|:bN+qJ'98̃UYê +4jpHՀ&|W2cjAxQeNW^/'7~}6}pV7lGX3`?`8nsWu2:AC=84aT9F@YBz7ˈn.yJ\C;N;tQwðԹGT{$aL敃*|Tx{JHfKi +IA3!!Z=k, `;孁Pg} lʎcPR(bdl HVJ TX)Iy'e~LY֐՝FRK03Ov@ol=P4[Gas8OgHy!s!) !!9!5!U!쐣eOKC"#TțY?]8iG,=c~3XP7la(<`G`q8AZc"[eLeʳƕLFEq2ݸS^~EX(\(I< ԝn_>|r8nU =+LXcFie%-7e&2Lt\E)EjZL1S-0FlSϏ8gj1=6 ,Pe s :W|j +{Kھ>XX? +#e&5E\F3+Pydvf>6#hE ()Tm(O|ǧJx bca@OdFwƒ0XiQGdcNR̎LNNγ]mMV71.!Fh*a`+"}ccbuX2qH &̏(͍͎)K#"q4!SR4VhuGEyafav .D&葨((("0 ̌ (qh]\Q0.cMh4rZ=&Ic\kmm&A;8}}yIirjIjI4j{'JxU?3~F[6a>(ѠԦ*CPnH t$=WV^PVOW5MߡYgMYHc֋*^TZRES.qaQؑlZVudD9TfCi*LiPlJN]Y(_Yeƕjq&˸KΘqZqC&#CT ҏ}mf`69x%RuԘTfbK0ʬcQbBA>dbJxyhI%){rs~0AZy(R+‘R9HLT I\E4L6-U]ު^WY>J"r,JB2`y)PK8]LWA߳H^FB@̯}a瞂hĺ0ǝ"ĸ3ndX宖Ns/nO}M><<P{ + ~u@7hYGo ڥŠ$;Fc@G8;#\<өG] + <M hw=n];G;65+P`0^ہN``~ jCp(C!EAeaqC1}C"? 6je6րv1.Ao8]@8B{|a#hB>n~psynu󘈿+27ԝXg&Qs459=@{?0# pZM3lF{p3,?gyٟ!a{(pm>/д.d/`=fC70ԧ'J"H5K\~¿ƍ b^?EnD|B]k4RCIX= +(z%-BR&kOm?rw޸p0>&?62j4hGLAIþxq1GxPR*Ǎ+GsMԝPS20l<@?F-5Aո޸5ZxWXwq+0"<⢤MT8UKƱs qW\ %uW7hZpYӉQ\ňv ¸C8? ΍3n&<ĉIdGoN~:G ӊx0n11W&%atrF&0- _NI~GH) +^?`ST!|:lG0V#ӝ84ߛш3۱j웹 Cv`p>ݳ10v%%U'8V? _LHjȹ{<3&̬)8>'$r&cp{T`: 5cgP'vö~ak?|^ .l +>/څCք|/@܎FcyG92]ұcq6-.Rlw/# û º]bO~qui;X\/=R}F4XLk6c9 b r&G/Ė$W|ٱVW.jձ*]إ[/vI!-;*ޕb$7SjU=c;3Ҙ?ov$/޸ذ, +Xn}+Ra%=W.H Ƅ'NQ?RjjWr^\ Ekp4riӊ 2)I~<'yNGWJVRn0͐/BBl4ԉC6 rUe8T.j* w4eߓ(N*;STu˯lU' j^,^h71nFȘyP"\ֹ-B-΂d,NJ`/( +bAAdHyղ֯dۆ4fi,5L}2dZU%3_S11׫=W̽H;Xx:O#c㳪EpFIB81(rБ-6!Q"ګ{dwY>ey&& MCMZMZr4;ej\A+XEq 挄2r˲S/dSYlN)ݹINuVR55I4)I%)RCm|GiJ%i"ߋk$UNjr!ۥɕ,]]EBLHuW ]򲪣r|ը纯UUT +U+Wg`/*!mMVXE] k#ݳFz}IEDŽdAyZ8Z1~SIOrYSZU!ϸ\R㻤Ž@H55 IFJd$LEb<[ðu ⽉f`ׂX.omBw{P ޻bh'bh*6FU {'Za'|/^@,%#k& jU8"W-EĪdĢn+ºKuG|qXYĖ,$&niTUk_p +"$DԒPJ2UcLUjj:Jϕ:Gr#y<꒕Ȭ g*]FhI#tM#44B3`i M7-a *tfpY Sa*gC~mw@^dQbOE*<7Ps#)7Fay +믐 + +̟j_v;\y)`jcmAv3yf.fN5`={e!/b򥈥Rpq/R?- T@iڔʿ4A~kS>jmVҾU^#_WOjYQx?Vv&gR\)"K/ʥk%O<Xp1Pom$5qQ cXFTޕe) +SM4PIYhx>]B IϕR)51JjIb۶21 ocR P RCk(b Wovm7) + ĚzrjE oTK;$]++>v۽ c~ǏZZ}-ͥbbjW#0Gi%oFɺUh$/5?(G ~ŏc0$~b9EQ:_|F^}I;l 5wKa MchJV0E:\:Ǣt%B{ KuL/gds2y4]!T=AOI.?H+XMXPܥq>gA*KczM#c/v?>>~_zNo:ptp0JSjc &C0&51II1/gה_q0ބ10fXP+` -6ПPOls&\wV6= 0a&~j [Z=W^u_:Rtzme.4+k4xƠF +)O ίu/`@hȉ+f7r}!>w7%,gҹYn!Kktv> KP_ ٤4*3ZzCǪljjm3S/`R _Z- +N!Mhon6\[b6R\wϑc*=Vc=?jCZyF+n{>@NZ5/bF*#r#7i{YQǍԨ+ƌG(HyNd7xg{=Ê6Wvg"7*l.an ZЭ跔=Js'jvLbR53fg̈YaT2c?5b/ScSbM#I̯\%gˌ\}2|))enE1>=*U)@=Da)fn$[IcuhuX&L;by7q3qFzWhD{o͌ qڽ]iVK4+>B =5#>4`%ۆ)6ZSmD{d[1ѶИ`+UXj,m\Fλݳ 1g$b>ã0{ KHe K"I&L2IfLB&$$C!"ITBR, @!(}cVVc] +B_Hg3s9|/>X$E ҐcU8E5IsT@U-wdґ +G@2#Xa:Ŏ;BGYn;[ycq9.YK$_mqg.j]L,kc acSUU +TE<',ݩӣgFsQ3Lw[,q+'+yN+fNj?g8IK+MuJ,Ty]̈Qif3ȝ;KnEFk\mǽvo[Vr_\GF9ƱlMԀxꉧ,'r`fE8;J9SU3GK= qɔϛ\o@^o1Mfg<`9={4cVy+󱕒c}fCV?8+/n-xBRgT7\c_-or}'w*Q?_n0#b&w[I^+Z\xm&}$=o%PF0 7f|>xhA,BeVVQ2#*RzTVj|&)ԥ`- +V(!x lc 4o2cؒbی-͸"ۈ+c/bO~o&j`C5o(]k(FӜUʥWj֪"ͬFnԴnM=ɵ(zۚ\16&gJm<h|Pu<شZՃ4>\3 i7ѴxMmthJcuC2Mjӄ6ii|qkzCz[Qk`mD#hl#Yy&-)tS4s!&E:TKXܗ.S p8.jkaR3нAWe4ހRbc‡/L>e~>g|A`fNmh5@8 +q P`%:X>qBx_]}%~1%ޅ&V#7B%B70vޯեh>g^}~$%zEs`@}xËWbCaADA z,EL +Fe;{v0-[nrt#Lqjh8Чm>GulꖀiEP0'oeX׈?L0?gpjJU^lbPx;w@x#F7b;&"awQ\r㑗#G~-QXM7gQ;O-SQp2"G#q$*q`i9-2 v/kΘV#cak6X.#/a86`Cj~c>11_Cqy,$Ȱ31;VcJlYi$+6%90HAOPKL=PISA&ze?Z#tI %UoW9R2yWP~XaJy;RU496*pz9֧1ڌv d?}ѓݙCM7!Y'KG=2%|'>KL!rl/碗͙s1  ec [Do=9 V8PxWtS9ڕ{QNUy^ g#?¡3m>K,;&Ygɸl`\*cїyŸ_΂j +([ +OaZ p6¥jJ4 ꚰ>ªzB$a-@Sf4(cCO# 1.aV-EWQ|řh/΃D*.m^4aS$E0 u3J$a"?JE>Nśi^t!:Q%,r\pVhЬEv6VZk`n&AaԾ& EQH5咸Oͫz4KI='=駛qfܚ%piQ)CSU6UhԕêӣAgF&}F F@NZOIB[%*%qX'{j}񻋿UZLXj`-P:FC#j -1tBo Ag}Bcr:#w#K V5HA 5Їf$&"p|wHdꓰb | .&7P[M`븪oR#$32R$uHYjA\, iD"*cDAtH8MENLm]'{LwXǿ *pʐ%DqEׁ /BEyjMl`֓&8֪16Mn?H}~~=~_Y⦎%( )Dn(/WS:`ʖ@Φ%r2mKʡ|2LhLcx, W<$Rk3`\r2#s͡jgQ[ ٙek,3ƛvsZ+*Pb[嵅OΗg +S3`VjeSˌ[ۑCh(u:.:.Xn0g<̙+[F_sa +SyH1g`^.@Us$z 4fp'Eg  +m=E'{xK4bX94s퉮j#MCd;srÎ]ر;ر;h(|Ful]pwr߇ {)5՜ ݌>4Ap&B4hΏ{Hc_N`G#I#ůKuX4`;1'-cٮqux-tɞ%CR[1Y~ւ}8694.HbU(Mm™&>v ~fتnc8!;ݪu.4@W 9| -Mywt{>Sӆ#I? {YrU +nGL_M%݁{ց 0=&&OVۃAcYp drXw@0C̄9P eP`~aY̍;ټ' K==⭇܁uޔ_8 l4r9 scxƎi )>s]u ~˯| | \K68ش +/cHgi? ؂.c*Zkl7ң49Y}]ZZ9flAMOŢ:#WϚdDeo{g)Q~hAN^Z0UiEUUnE&herU|w+Wrm]w?<5nk0I!vßWÕ_n/*}cJ;U *4X;<1*J,{T\,POfӌov?)E]C)!*mU2a.mTAE5k)7Vy~7L9ɚ?^3kz7P2VkJ6Ҥ3J &=UjE7%gaz<+Ŗ7fn^ jzM9X=G(eJSF,BW(5x&k\A yOcB+%FXZ(.EQ6XU<+Ė|l%69i!]552{+w >4)l&MPjX&и /SJ +ج%E҈ CE#\ 06C9,{rhaVᮚɑJ쭉}5 5D㢒46jR'ktQ@#bjxFOCcNjH, Q-נ\ZZ#mPGjRRc<5>_b5&.R)qo%jd%ŧix|4,ޤ5^JأNh`'P-?<*?we1 $n "" 2,0QNHAA(MqZ5q4զM6mzĸ&ƚXa9}"ΡlX?m _fK1SU@Y(/ir'+; ,E&C2 2UZJRSdHPR>%RBNJO %$HrT#,g= 3 +boeȜ6RpeE+#=ItsjLJ26(\MG'qA;Nw(4bS:F @QU5IVcwU^56=VS5Y!r>><ekzP +)iluOy-P0yڇ>+7{4>]5o_pS$l7SO7=ϡ~z&j"9Ff3A(h ܚ4K}i~i<[dZ8ZL-P kygຈmlyh*^/|3Xs"kĚC 7IÚ%%m,1ϵxXE# C N01ҾCP"p8iFjz͚ 5Jc{Jj}?@?6f p뤰;YT':ppzybFcI7xZZ+ow^BmxBP\wFzw>{pbGs֏ ŜC9VM(gU8@xuq?Nx;AEquO/Nj[9WuqN ?%wŗ̺75f/NLN>V 1,vb{%Ө;[|;xR>prWJU}s_DщTMNΨ@Ə7𣋼:~ŏZu[8}D|E Bm'|.85go-/(t"шZ:s_lخ|l6bsll29=قldsۮ"G'#$:D b]Pr\l.`w,$ +ϓTVWUD̮r]9 ];A1B9 (hr4*Ѩf,Ry ZDd+G#r"pvrԾѿ+`ܵ^ Gk4:ıT-TiL\Yn0˰/2,3,31 $vcxKʭk7V괪*RRU~V.Q*Jc;R{;G: rq+YȦcn:JFd)ﱰG}VuWj폴~UeZr6f_T=/F|Tg"S8%S[K8]ͱlsrx[}嘽,Lr fÄce.vLg2=&> 1,wvi9Tk%?k5t2Y$Dq"nG9orj8`!E8\IL&1B(iK{SH9#3jJCq'_vDSyʝi%SK,'r %pj6iLU1݌2ьQfL4-0`tݙ2y_ d2LG_d}>'.zi{XdU˜jɌf*3Y&w/4i'p y-0ws_c=om)]Ɲo6t=&ezX✖.kߜ,ȔjٯZ͛ٗs J*fwa=V|En+x O=ūt?*%o^ΒVGaֺ"tQޓDY3%R=V +=xz1{GN]a92k=c`~53tRLrH[(m $`H#Ϸ\_!9 +}ue1ӿH4)$(~I$ =5XE_Z#_t ^}Wt,RT$k$S @:;I Th$9")Obp/ yvOL\Mb&&+#rrC|ǥĠp!ҮZjBVCq$Y!6BLaCSl aTdo1'"lgqHLݢէ9(Ji+"J_1uBp:ع DSbsMa}aܰnBywx fkf?T#VJ٭aH=Aa+\89JI_4)ҟMDZYXI׃(ORS_US[Ƕ\[U\=%=@vP5,O8"Y=%]6mzI0H_)K0l>.wR )ZL-vj5!/Cp'V54Xք,(z۩g C|D' z "9&5xZpT% -vz'57` BcㆎS}&Tyi0(:5 : HtRwKc)j<)^xrS긭Mz[95YiGcݲ9S OkI7e.5ӍB 2{2ceey(Kk]XXXv]`9DPEEE-}3Ѫ68ƨǚ&5UcըʹMG϶&iLL9l?qg~e}yG㣍 Y&FaV[O?r&4ݑ Cƹߢԩ~?pҪ 'Ki.g]l穋 LhݷS c)+C7`?vj $ur.{gxhV.37kznP7I7M;*D2f;y6U+6S|}.UXzM|;]jsrE5zH]< t9}" v@ Z3a,tS|=t}M>|\sOzO BVȆB}24FQG@Ǘ9 3ЕbA\Ru!u>}p?^0zݣ׽C.RC('~n>_~fb/%||% +x6Otk?Sn)qG>H^WBԟqsϨسu8Mhl6uF*ާVc%>V2e e摍ϯilJfSQM49αͷhf x%{Z1p"ơ4-6o,P +4jИTmnq_x y-5+8{wn}W0zh%KdhVWfvWc!޽LӺR8MI~Tc&X[Us<1=/gjjb(Gˋla5øph?YCif5iJ_&U}M (Q]HѸ8C5 TFU[UWo<=ߏ2pFqZ#-93#gjҔ>(BlQmp֘~+~e_UC,dlְڪ!T~q >O ИUEktI"2¡9*PJ4@);҃i Vgd(͑TG9du(9YgdrF wAF2:)SB}ځγ$:P^ ,g3_Yٲ5(ۢt%ggWk̮*\Jp5fuoQeEຬ(]EgS WgђL1P%PR]e`Yr#+sY<9Sg<);S2Ez7+;y*sIaSDn[X,4&rP ^pV,o4 P!2WdU薡PE#Q4NE +-ZE'̃>8dY]p9dj FEvǮ"!fRzD1j56$HӚ1ZsL5Gڴ4uSv~LLJ=}}}J,}Zҗe-=/kMي\!iZP[OhgJ(~ԏ0h.CM& lXoӈ`]~񣇋5顸{ ٽ ]k4N>brK $B])f:[`ki8`ogg~rr9H};¥{Ev$9P,z)YJ\BcU?t-=7L0cQq-)8ť|?ct$`]9sMxB@w~DŽ q` +a2B5XXQfezE|^&WT_?xNDH x&@QGՠoLNי1]e +?>Ǐ?Y>c2D|oI9d 88>//w@<)3̤NL ?>ď0՝?{wgROyN9%x%cd5^ \{%e3)/&.lخlln应wEVوvϓ:^<@G!.b(?hDcy2ĶuDڄ]?Sm+_qх*?J&v%} (nC +D:\fkmt*t3zs7]/Rk3ɰZ嶥jm\Lʤ"iʒUTZM8K[T`T}wj9ME$QnrvJˤ3i ƗR-gE)v8T:Lũ#5-u&0PiєA^MԬI_ ەO_ kx +G҂Ҋ. `+ܔ9"T0k#Qi*7eyG(AuY`w]`e]]6xM0xD⠉hhԦ:M4=$ΤvI۴;^37{y{wiJ>SMM,)O"t]-)n~]6pDo}=׿%؃ +M|!.oNP9M1#U3&_,UVSSE嶶i] u.XwzHb=xpgيlAS!|(^UEUY\QYM29m^a,-<ٗоY.e|9)-0pvӍ*-M0 &]*pĪ̑,Wi*-5,TRŮ:&5UW27j{/h*u]9rFc3e.KFB|P e;GYli*.RQyVe(S^&OF{f)ӡQ]FV>L+y>FG*^3T͑[|oF׸[SQ5SӨ|3kWo2|ەۯ4 \UZ FoTQ=Fh.& B +}/P06Fk[yoHCY2uLRz` XmJ-ocB2)f(= &rkxȧPPɡf%*!BCC݊S\bo+6znڌ5]0Pp]W>mĤX6&*%p¹J[4,p(.ܨ0/6&|f,4b96Dx5ƌ@=|mA{D'Rb45AC[R@pDT#EMaP<0iBSBca<}P{{$7eh6ugrј?v6ʜMncښ 0mx9c8GXfH⽓1[s)V)m)nql( ".ɣ=åM$wc:<_O&(ӧ &⩒iX tSK(kRˆpp [eg%yt2'9drcN/8&s-[ֳji'7UjCm^0}ƛnr ]"W4y&걙ztG7B=V6,Ԣ\1ovaM]QD:Ro ig3tt:~͍[`+<(f"$#I̯e'{5N1bhof=Cc@~ Wad 0*r޸ΞqM&:$fϼɀ$`8dA>ؠAd,-=qB~#M][}wuO|ʯ~g ryAXzEa N +n2.SY4yy]C4b9eh'{̻Ja,#tZ\S Z!}5}L>U3 xG;h^ms{V3]8 +Je|INS4hTO[}?#ĞIybZg)W*7eƻjArz}}Fwㄧ ShGV4\ԭ~b&Tb n_}ث ѫmM-v,ϵ'`| />g,ƒ8B-^T*G_L|7{٢mӉ9:w [iɨ Fܤ`< W;k,ExNT2yg?fۈ_FtA7 +Z9#9NZ֓I:Y' +\9yv2È?#KBh&t0UjgBF5׏p6XfƱZtR'e]o;v.p8qNlp9&MNv-mvJWrT+[v h5[@QZXA\1& +  +!:'}<_+Qˌ7ъFQ4$M,c]OxaYEVW^eN{{J;Q>!ctM:^FݏNtf6R;Iha:fmMEQڣ^C")RQXs< +uM!}*FjT tj"W5=dƲ7k 7,jpV7PE,+s_ܴb%4J{JCvJ.Ym\)Weʘ&+W*ߩd~ +Z4ZHAD˜*@#S4hтk"6P:MAZ]ƴwRIJfa X<1ٔ0974dnҀ9~sb}kIieF˜, WrFAeY*]YzJ9ZM `<ĉeȖ" X-V(b ֣.:c +7(hߡ} +Skj.7-}G\ܓ<:B %CYXc)O/;Qb-SOYrʫYVI6+^UrD~ǤZ[ث&xFNjr;^Ɋphƒ8$:j0.kQmRD5jq*P mZjj9Ffy|Bu|A5WU| qOPٍQ4` z=^0>Eü^P.Z\jvW]/ۧv5GT_?(g\.&9=A6Á23|43 #7964U_.4&ab1۸zsVW6t-ribAL"c+ǶDObIcN9TYPs46LJs;0c`w^@nwUf 5V1!a5&9f6Ԍn&لnތc+Z$_-xIL|1yyuz8c}:`?GgisyǼO& ٷ=0ۃ>9g4OdNi8)<|.[O+q8O^aX\ūÚRZ#u}g\"ӿ30+FHaW MqM7-:uqSu_qp?a`ә>^h^; s͌I.1_^ }C~w=ue|>r,!݆!ytVLX1K/W[e2c̦Z^ً@'~yy_=ͫ O8v?;NDZ%n;7zImvݺ6[E֪] Bҁ( ʠ*kT.T`@`m2sQS>w{y+8!hn X_8wp@7)82}]c^e?̫ +<߅o79|NFb-COoc\#Wp9/|^u¹|<~KhM^#80lO1|e.c_ރw&2؉_3/^P'=C%i/pZO~|1!} +"zARBLy,|>Osyx4c$csyy0;G{ W=hϳ<*wnY6e6NY]adZyN8K΋eT/·df }?edNaA{)tg"֣=Sqy9 ܯ3 +OTnawj~ m+'`6@;vahO0y$>f{;{n2ŵSϰހa<_֜B~c7EE]TK2/{]B?J5hgI8Zrs̜y)u&x"<参 ǃ-hQt1"Eo2KnB>@6X=GRff}6CKc@ ZbKI~hyYE6VhF~ , )Y}E SQiT]ILkiS;,>Dj+>V%%9ib"6N&!ˀXf2ez˪cU99Ty:;QޣeJZV2V˼jQAE-\RrU!u9Eqs mohn0*]7t ԵTiU)CjꔴXSҤZnicƄYEyj0*h|JTgX>E:'?'n݅=XK۳|ý49u_;-s)(WaQV+TѦhEJgάkpnr*[yZsrW^Ru pSngN5pwoc-u@[>C )VB.1WljtU(r+RW:긂 +ܫuonkUsJ5_#9ϫ}*s:Ļv|OA?tbqo&FxL +y,j+P[ZޠMyu7)6U>(g9|'e="|Ruޜp-ĺV|e:^$Z"s~|KwF@܁rҪ d%"#O Y_%xQgTxSJ}NBw3h&hڡ{Pa\a.UF|rFBt-:'kt,=2GWY!D.5Wi8{ 5سly Cc~;7zUSr cN1d5OQy|Lj78SEc*hct U +9?ހڣس^V>7CPǵIrag+Z +eʖʚpȒp1xiE%ɔL%I$1ILY( IpB'Po+h{$qh~\r߅uc H^"sʢ!Sʩ%) +S jV `V4NaRRRl֝Iّ]hϠņd6h3//LH/S/9t5Hu i࿏{vw #A<0sqsc,1|rl7mF1f#+>i<>]s 4y%lH*P_rsN0+8t&ܧH()^b)e`.ɐц?:񣛜M'х.;q+\̎ ')'/aS} 0Pc7!g y?QK9d% .5u!}0klVO)^ތ6)`{`5=0XI}ƏuaK}u\kWr@nzcyGY<D^%-ći 5M7a&X90Os6&j>괟d+V곟Xl!y}K؟6Sϟ!s=U|R</hr뭁H(!0 XBqaC*5?+8plI>| L}_cuM;9`ͅ9x7Z}k -Ǹ(dD\,FN?#'')3q˥|xCulb3׻Z>W]yD&Qp$ U\0!Vs%q@ϓs ,QTg~)!ĻeW9IнFsƺFA}pC&k@&0@>r0u-ys% kTmr YWIe{1܏-S׀CX5ȵG6(пјwUH}r:~\eM! s?ΣijOZ{$U1#1J ]v[>_mpmu })'hЗQ* 8fy +>=w$) t9Ïa|$љY;6f_)b 5خǶ&b{gbx O)5dt;mG/Q'*;)p XUf{&wѺИPn.NVjd ~E=Kx:\?דDtO`X >-`U2K@ +\gQQH/5?z ORz^Nl߰Ǩc~g;h$i= lYnl WP:l7`{'!n-n_%sŃtAzDwm_P|ت]>`tdJa7#u:IDQR-4,MGZYmbÛV͵ǐy,G1C,E'9 'F;5:KQL䥅L>f2H6lq~+93=\ssAOǾٚ5E^8BpDJ8jnV_D*P#ĸc7|8V3pw1wG6Q)pd‘GnRx੅M؟Ld4HR1è:g(UW^1DwAýxK#>6s13:mԐ`ˀ)𔰓U W\ᚈxC v~nw]Al}`hi`, Y̹ßI)&;U^U'4$yRTRLPij݊.V8uS_T(u)G9%RQ}_ι_m>@xV˻JP=Eՙa2åL2TYrEm5WEA{kߢ^y䶝UrF8Xʸ HjFJޗO4:Vđ,Y**U" 3X|WF\~96>>`b:ɧ20ہZyVJ)7WJI*vf*RRY N@9U*!k]S˵HNZe^+쮳9ALk=YHI;cQ5WR> BK?/M< +*ϗ'';A׃AA?L pew^g;n ,$$\ T +D8V^Bq2ZN6#2Ң >q;9oyn'[鐫%g+{ ]Il% +e VP!d"Z "8<<]LpUq-@ԉhܛ_! +c> ) $Uc֥ &Sa +(Hw#)<as29C>q-JFP .~1͵~L{ MHi 4 -JG ll+@5c`*o >40E70cۭ +W/pdK,1!a7fF3bll m B&xjG؄;@ |Ro.<)> ?:cm9&'4^6O/3JκsܺbCg\o3@jiy\g6^g8 9@/}o1DNQCbwD&AzkN# -:Ncnx_`='d62!'#FW?r&eRR;㚅ͬU[uv ~&v6IZFPI`%XEnE㮥>yl>7 ,f=F5\3KTh\5!%>擤!s`1kD- ^[csX|0>CMlFY} s$A n–Z5d||X`5?b ߝ%b&&ϰo_`aM<~H{xy71RX:8{WYIň%@#_&A%WL$u8xWXQ>8B>0uUJ &^pKd|G|FwUV3]6KD_PLpoFp*%U~/N )ڇGNvSO8jQv85mjd+~Ɵ9D!Mǧ);Lr+jOU,U*.V_ZUbRmP*Q!y7^'q~&>@^gUcS;Y))*wzT0TjĞb{*tT(Ѭj-JsHOU/Zl( "Tr O%*HV^SSSI++5W0*7BMJ3:eK1VmlxRS4Na\ɑJb1ǐ' A9J@!%7=A9$e(ϗP&#}cr?8ʫ +o6$,fwI6l~vIHBH&@J$ +$AkJJJRZjŢXZdZQt:0VvږaV;0/۽=s}o +|ӷCyd}Ke+{y3݌slP⼫`M2|ey*(!Uh+ت`>9ò7RN-F 6`|KZi +|A|lr :)wr(4KP +Q~RpBpNˆ/B׏܆hDѲ!|PNc%|a#hpJF0ߕKżbxLq㤸Sn~ǐ Ѐ (%]%\a8g|JHlHOq4di X65|ՆoexhE0W!Д./n{y೎Y|< scZlŏv0 :rEE0&u٦0k@3nIk%e o!ya|HsvB!'KA#KYd>`]*Y Ճr\tuL-1GlkKx_ o8I/9kA!h.\c 2ꄯMS~w9Xeqrđ&fNjn q/X6,ao=puV?&kyGC&g3dL(9!Qjgky?ۇG>-})wžk) +!#6ko,c\ɊA(fC~yCv&ړ{OK߹F*JyW=烀% qe#3pH\΀j<9y{@&/|N:gT "bc|'ku4Jg-_-__߃?[mrrz{ҿrGQ +-@t%"}v̨N|StLF8$P3\PEM/3y^b}"3ɹ#LV92l+C +3l3ԑ)eX%x?<>j* + +-tL4&qXsh^x_xONjqJtR{L(P&˽v+p^Z!3Ne8qY Squ sa(C2M~] +{mf{Lm5:'`6?)=|w|_APŎL籟.Li$_y=Bz?"kzDZ}p_!B%}'] J)(<5kn tb#BŅ9!:NwpCȎn$|_)nSV"xfO*xlyxH%k7xxSspd;I쯇o9r8+[@ +ԁ8cҕhC|E\ +;{Tn6ٻ4wX܍*ɝyyrgEo/(3?do%3$$`BH@ Ud(Q"EED +TPM(Ȗ-Z""Kw;=4s3_sg}ߖ6(M@rAk&Ь%vJ^ ; KgM@ úZ|u9I<9v,}l+팸 O8:C_ mk<b$J.!)A-A&.~OHtOHZsѴѪŭ$NVi%M["VxsRܢx:{u>4 gqYBzt}N}.ѽzDEģgq%+ġ~ŢNy}d8/aKbrg*bNE} +A3A "M~K[4[<~M [[%VA[rNj?]༆ey|1G@(h`*]S@K!M>b Gs)4 N_(| SC,u%7$ђ4ų `6уv-dwCaآļb1a11NSaȤϋ8!5F -ESw':{U!<\>y0?*>⎤3&C̙",\&57K?GӚ +4JC96g! -dSCI23!rm3A{Z"%I cfqdZ$-*<|6xcw!^"0Å("qkNƤ5!96"M%3 Cso#:24s4/%RLZJkM[f +ESjhrٓ\gRGB %xPEWjI],-VI^T0 GFZќ^IRkA#VN,c.'ZϕW:g/\hL1$iRUkkuRG[bNڱEAΚh˺نTIn}Rɻ@S3$( 4[f\" h /\4DSGwΆ݊+yލCF3gDv6gTT a[>u 4UFhF4B@?hI| baX_MbHДt%0>BS .z$f*|ըj@8:FF0'YPyH`pΪ4M LH9:KFf T{|jHh#OS4puddq'qm*i~RRB7 ೛%ljۛ ZoIq@>CRM}jP~D&%x8(D笚|9*Ŭvh֘Ws/wQqN2,AI5F(SB)RV$M׍luxUyd./(ǘn+ДЬB݆j>׍l[ {T38؂r99<cBvOUdN[`(Y9y +6izEqe-Z^Yqխ暶U_WݱSv7٫w8vC 1r17~¤Snco5{gκos~?.x?.|EO<䩥˖xz3ϮZ k^Z~Ɨ7ymn߱s[{o{>Og𑯎~}Ϝ=ϟ.\JJ]IYWQdg+/RKrR+kAݔ7) nƃe-ʅpa2b"NLUV܉w+3~ܘP~< y G+K<Ô+/b:&e+8fMy[sP>| T}<:I?().^J>\ͻ%~__b2lvǣaO G8#1<\|LҚ7?3' t뮶;f[mq&O6}ƽfϝ7 [xe+.j[ȤƟILiLT*Nhj~o'G~83gϞ;w?]pƶehbm֮-;zW_5a3Жj꩛sӲZdOG. 54PCC 54PCC w +u%^]/9 _ԏ-~kwe ܝVOѢ'~HPG VFծ=Ͽ1}C&|ww>/n{y /Mٵzo.Ѳ{_d'װ6Rk]/޳̾{ttp|gvzffgi;fiNд2/AoF)TLP. E["-)'-߶g/yޘᎀN"_ +)Uka"a>W~ՓĢ ?J!&vezzc-̣>$CkSFkCe\ )j3J-)|ʉ鱶d(;nZs>w'C71}fDmX4 >J6 3O;F.^hW}F]υ +{E"f(/c`4Ѭ7h^!}w>85KhʙHAΡ 5.-F\ |{Gq{im=/ZtUppdK*8+#KD0 +3{717@AoPa.57d0~DK2qH9yBCOmHLU1tՔl2"8dX2, K%e( %6@du= +םj^A\ˎ*$,!2.KGv[=ZP +$A=]+#zw^ XaF*bZ*SRD &^\4h`C͏@v~'x<\վAGi]8^@(WI<}IXA-edYÍDVa( e Zg:8QCHz,I^PQ%xI-02,탡2Ad jk.s[g-HQ$Xi}yJ&E|Ne2@ZFO AF# zw/؄9Ќވ0RYeJ($9J;C`M􂜇}0 P/69&Il됼:y*LYT~?W@lͥt%SYBfaC*Pn;ӑW_ހ}]M*'(bN)%O2qbzȅ)}^KgX $'mo N_u_q y[r=P"fUdVp=!:qܴ.K``ZJ s^9z5-&i *ઑ9u(I#ObDQHnƖP VKE2jVwn '\G&ǼԲ֠m0NJ\ɰuUH Z %4Y@" 5Pog1ip`䉳ߦq/g(MEɱZ,T"V $KM2TjA})Ï9;g/(Ė>Ȝf+Z5b m @92v~ jl̆q'G%7B#~̇ސt& n磛#XB. xю?S]1a^‹w>LpP8:H"Ol@H4@D E> Eߧh x 3{ =p~@bIb)y`o%65~) +}OztGr( yĆ_ x {L|@mT+5s7*Nȁ3GR]xڅ)|9x^d\ \dyb.pPdmkkm_"8'q*)c{&B?P|5 +b} \hXL35j1|%/h`?b!4У( ^@9 Sa6r%'Pb 5A(=)|FIS|F!'AcIn#V4jBkn    {C.bE aԞ=ag*"tVP*GhHLf)sUQ͚H%PY~5[y6V!zgkhpwK +Ly}\DM3 3]WdkijJ$#d=U$yA +7B-P%P_6`ׅ3$}N+5AIL62U`#%yWFSE E[V\Ks2[nh`ԱCbx. 蕽|Đ +Cű-NV>ߊ=jVy& ޠe=ή0ۯk@G +*h\̰O^LA m(U42fwO'pxa0|YPa47(t%1 Ο;\0^vwvgԟg oB l;e^cdUd ~Pb07(PfG?^;87rzĸ~_|)8Wх5SSrITdC!b@ As/=s߼tD[gnyQAA$LN'3 c8FBm}.)u#=g4b4~noUc[Q8ܾMYBy͇fBHOI8t8:K + |H{ȠLdT}ūoݸ\7gMӫ[e`Gp=ϡnO"@EdYs@\4yjlflV/o.=ٴBj:*n%}lNmg[SeJKn/T^P@QQQ@@PA/],YinmyRؽ +e[ +C>yE@)H;a#ssEfKϖ?,?_V3|~lEfAx8䌃XH?Br_({Jh3[^^0_S 3`p^AkOot7$磐dmÐА +P+6/ +f^ Gp1~)$T1|RB.玦TMI千.YoA777SCkCɦC ?#4wPO?Nfo0qZbNYLn~(VbOKmkZeu8MB ̵Օ??#Ȏ,kNDs:#:'>V\9Oe t̚R2'L掞8Nhmנ镡1!?mb#~GPqEfV 7UO$K.R+ \f9\cLu%uMXyߪoNhkGWF 5Ak(9ԁZ$)93Ε4RfiNb]6*MZInAӉW2v -&Ġڷ6[ɐiuL Ye>3YK@e6rU/"4 SjbMCb"5b@ ЇIUBEI*w:SW.+Է[i>9Eߔ+UKr7Se@p^*6A3x!Y!,!*y-vANEM&ACӫ cuԆnvC$e^X_/.bm[rĠyb g \)ƴ&} IQRVmz;hgyn46,bhغ ;WB;b>tv/KWt:A`jNmg\}CEŴ6NΠ7Ҥ}4E111t"/,1AaO\4FٴC AJd2ȫ(8Um3R HaD ذ$[n+A? + cSΙ# ͺvUD֜Zא )F/ +(F;Lj! +14! +rfס^w Y]1|6QHUU5gvŹ=utsԚSͳe׈2xRKFEMP81H|ZOgk15zq4`.dzXFPV(3Kd&Z/asbP+KVPBCǎOf{~4]=|RPIZ-` I-|M)z圾ЂxME os?߻IocA?c)ґ]쉗RtIZbAe򺣕EHE)B)2*AW8/1/o\#=s#ǒF#l{t%/NՓ % ʸtM~aB4|}MG 5 qtl^44ra8((>' ) 1tIDIz*5+ @};XpgӻG\^km'#!_ٴ_DTXrR,-s4A8K`qqY9UX[~M6®QUA۠]tw \ԮUGg<6`**9{".#u 7 '8́j');m{k&h ho''DX_A!NW1K)LY[FfZy on: L㆚ P 5ۗ@+@t =  򆶤YIVS~AƷST*e\W;^^'cF:/n΢wt@s[\d FPEt$H3>eOsJ0)/(kh@>Ӭn fvhN1{vgo'h9_ >u6EgZcin=aqWu7h4(N~ ="l'h0SFI721MGMl/ 4d`B mȠ84'<@sgV;5Q9Ts ny*rQ(FRiھ,&#{ZsJgK|ݶ ۷6@|ftgB&'=TeH[H}U{˚6˪Zs}I/S9K 'h߷ +T7P1!O I=;scPcƪQm%WY.(IM7ـ Ad|LgGX"nJVx+9J%rS}Zd5LV%THdHm/6%^AfdP] ={}-*[[|SJј*9(#6a"[R)|Υt9Xe*\of{{8 o@eЅ փos{Ȑ選 WtEi2ȕMe*icAfa<&ZOki*QCP:gZd`"/zn߽ʯ'mytSqф̚t^s4{g%wQ5g,lmEڬJgd୛ m?gz݋NP*|3I;! RʼnC䖸 5mkey_goMi#֊NǺ_ъbZԊ"( D K! ـ!!@BB "ua(nXQHU^h?ܿʪ@-g{~o٦w7iaݯ'^ EQG TŶȟEa|1Hx]&]-E"͚`^?eܡaWtLmqu~)~?;I _)OԄi_hY=A.3+ݑq+rnW-n/^2禰gl}'=$qϛ2 &[ftC2.L?+N +z*)ShSes s +)[+,vU%8Zyps T z;v6ُ.3 -#0l&. . x D ꞏ|ces`"5^Y{JOD'"E5 2p!8 ;Bq(7n\v{>F+,Uyv.5ก +.I- +vA@Dl 8p}!:.uXb,15(`ռbYȅK2Uw ׇ _ yC7^R@qX;o;w]8|6s\FV[a4,/Aqp[k=;\ȯ f+7@!H26:C6 pm mlO +8{q\ׁD!P@rԣag +BdIR&ԉqMYϢhc.ƓޜG{a87Nso5dX݋`J#o;A ccx⇿LNHVvL7(I sU g F3LcL.SITS󞞹's1{.bXܛ|mz^y3-9D^鮒d L4T ~m8d{嘳@_h[;V'(PJIki)%F'\WTonuwWIeU'z+fjol/c}I6K m+ΨU\f\VnFeoÅwE*I> fh:֥ݰ˧֚.n&(袔[1Z(>D$h $k+{*%KGuS[o{d<5mq|셽qj??gpzB9(RF/oeV[׃ZE-M]5rI@.i' 7crk]:_Szp؜q봋sd 2hD Ӌ>n_ҧʫW\[1(\Ax*P& e~Qaўw5rr,` )||dh2e"1!>LpW1CBzmM><\( WyPzѿdf--hxomP1^R#g¦iIIVD6)/D~R:.rЬ,N/TV ֭],[y +)u߃'/RBHoƒHgyQ0 +L=ED] +DI(>݂]+Q[W_M[f1-cC\ÿDa)5:6`5\,+E$Eq$rV7z߂jZ'W ۄpN%4X`E3@D߅P Y &( Nv /Wm FI,ˣF9"/*J~ ?*\8 'C| X d}51RL܁i k|s'Z8B$1"۳ uod8:;r8 8DC+D8CN@;)/S~l ZCDݑA5"*{&#Ud8p@>3Nl ]80 {`ma CVsX@s`5Qd3c&?.n)TC*בֿ$\)/]N`,w[V6/SW1F@g JUTC4$"1 Bg $*AHP ' `jAj9H7Z $d;A, Q^jC>Ak6*8$l(|g<59jCo_j@nEDioK 0W, `{kX3_*yBJZJEZ n $/F.D>y;5?5HoCIH>,1Sd{jC<, 5ujS h5<:y)!j@Ky4@ݿ4$ig>3MM$" q:y;*CaӇ,.1ҽ?'qL.\|Q&$NzEseP ONM%O_P@<Ґֻ<eh@!Z jYu&o5C\D.S^GU$ͅ`̐n1p=pS4\:9x Va dYˤ~Hg/$'gK'd= iN%  t=n?e5&S74!i HCJ9@ї^\Z;=z4C1O# + FI%>aOЀ~9x,&i<4А͛lG68`H7K +ANmtaLs)JM + + +.QY2%Y")u"bb] +q@$8@50Eڿp0̿bv9YCu7DrV,8dI6Rr<ĵH i(ߴ׵G>trÛV/,أO[C0L]5SI =V E fKt XBkUSjOL~Wi_  鶅 ^9k>=퓝#ۃ͑QqMzZA(VIXb>Yʙ,uIr- RzV]@j +齒B  dW'`#g! ƽßo=UǹC;|{Z#"[o]MIjRE6') oTWV(VX5֝U[++h(\Aj|l>m/^7K>fs,ؐ'NYJdXʮK2_f dzh F<ߪ!zA=P4;A%r@Esw]kЙM? _p8#,-:Ym+jQYņ<YK G*hez}I$jp^ixo\GJ9t[ivO=W{y{7QUmqYd +݄/4s +b)R$Ī8V}pKsةUu_8t#Tov4t_6=sꋈw]`X ҊsdU4a|S$$E#LMaT! LdN)σM~kcK_o}vvo8~,x8<⻘4j̒byƉ_Qy"Z4`k0mz{i4hހ&ǁqܵy 9O"n|@F 'gR> ݈6fYM\d2m&Vp73pp,gnWA8vx2 5c/OOp>D962{"1>m"S^gEYQϸĐ҂z6 +v|yl@jGr j`bCo+ o=]ޜ3a93WgC3"㧉1ԸkxI!/)uJTm sE7Cj?EXzf?l^s_);xًٳa'fKf`cfKʂCgy!$a~W}g{e(]P;# Q7la +8 +` xd( yBr&gp>;~`}juBR*G!lu))6<קix A;/CԞPH i =H1= bPz\Qoh<-^(eCUM-tZ':-"%,X8.λی-~^m灴\qJw֮ udO~q|2PG( ac>lpNj2[Ke8vGEłH "BH)$${$!H*(( X.l"(3{9W?p.Y{ofF0  dI_}Rb/Wx"xW]^ <|s8ųq0}<Nb8!cVx} sw[1,b]YHLelQuҬ`ZdY-IVQ¾guDY@< ␋ +_x:[9pˣ!5Q-e'& +㤞-Pq$FDk +(ܚ|9ǻenkxn1P` #|"Ȝ̍j]w{MEP[[L('1F:רgKjJPER+.4ŧ3M7XN-Kt_>kDP"ga^c'qqK>˞^=SgsוGŜ*OJ)*JS9ZSXW +tr]:ǐ,ȣ+*,4EC>UuӜХKe"[q`/j, +IgMk@76޺|tŦڳ1ѥ|~y +M_La˭LQM-àͥXL$}9UBȹn&;t$=)Y-0epD`anj{9vZkgoaGQudC g Kv1[F?!RS +zdH4%Y0aN8u)H d9s8g[lIJŴ\u]I㚚G1hhjsP+]ռ\}xn~sDr^G{TAPI =uz:ڬ5>tk7ͤ﾿Mw/uk zDs7u#)y)6YAO9e;푷T֦P{@!AsSwZCRs?U O>Rj&;ߨ}M[Z +W}^w76MUK,Ց=8RAbyڰsԁ ֫ uTqZV"D '(`A^Iyݿ20duQ琯UPi5w["I^OjfƵ<ɕawY9*y;zZ]k^wiT4لݔxwg 10dBVI۰ՙ!NG|=xa~iw\p7?W^)m,m*m+w4XƋk/ TA!GRpn .q.qst [q3c>VFn=RRL{ e"Ibw:C/8hΎCBh$3b\PpJx֮CyK2c~q_vdrT]ptInpF"Sp},t66!l"FMl I3Ff9X!AN{H+RƍQgSwy*wlHڨTG= cpsdX"[,G\Z $7@t6KH  +/im>MKH{ +D6XkBA2]d (["O@~bN{@i 9Z F?x9 ϙaciǩF9ݬۜ{1HH@?!i&Ri#g.Qi@sTnBz!<y1v> eJ ?Vެ#Cbhw/e=(}z,~L:%|HŞcdA@6}GnRŨj=˱j*n_J2}rcf32gҎ$MIٔqQ~7לG᜻ vfOJsE]Y*HPkPNaZnZweCI~T~%c"7*kHNT$Kc͢ܧEw/ sGxvt'g@B6$7ϰ&5oT#G:i)E edY$oH I؄ld)C@+R>}/Ç}07H^0iƟRO~O$,i,K0)QN|BȢ`z@`/A\$%%!5v_k]7t 7S.lt9nF f=ް|܁Uǵ6[B!ڐgiznT[$߮sڀxoʐ8dgWos0f3iApZ@bڢ2Mq? n.a~DX+"UP"  "d&R0 w~T]sJ/)h +k0x QbF-&*E jQQDkbaĠ8?R9Q_3kỵ@` ܦO_,Z_t86]aɿe?'#a dëcV[L:@?}b#o$`W{tC +5@; A_m@%kPkj~CfeK0Jjn@A((g4:I?|kXyI*x $%Rtfffjj3Q*jS$bZ\uab'q(\} Tp0zSs( 2A hBmT‰c4탱!]~^qD:M"!#M)Xag +'d&n,D#fa$ȋO0K!G>(B'j m6s+.\I9MD*9N` (7Fx!$fツ^kx]2_K,GT-t@B{,Z_]$$)\Na8XE= Ìzs\2Nl숄^ RMVBd2ePڠfV*`u}P\\cB瀿<JmQۂG0ց~Ӯ^ 7Pz<^O$B°7yi}>Ǎhc'|>B':8<WC𼍑2M0,؀oNXׂ䣮wvkʯHH|;čWH^: 4.x#=h1, -GrR:" `q'yq~=@$= &j ڐw c!o& 0 *r4bY0CFsȒ,!M[t=NU")3`^D`0~폰I𱤡-YI|89H  #D:#eDN3afȎ\E%+!_q U7xw܎ pN}!kH) +'c-uh&W؁/1("B`p7Yke9⬐˶ETxATGLroc?KO~K RSS?{i_c#:u6ᐼJUOjoSp +'r"Rqΐ1QcM#)'XkF/%mG{~B?d%KD.vX5u3Qi`slBE|q볢0H+z/}+K~?Hcd`v1n O ?dh=L-6kq=NƙLR +=d,GJfb *`[%ƶh>U^ذl`=>ԧٝG0odg>$nޤ__I\2s)pFn[lu4v?5c5vwֿ) eG+ ˙%5oDH:2p~LξɹΧ}⏰O2t.KC 7:y, TzdVG[ʾ=VF9Pis.)/w"`8P#~}bC:1J"n!ȼ=sSbMsF])c~.SPnrn(W%3ʓNcžQ[=T ,BBxyɮht9e5hp[Ԋ˓vja̭J9jsT}vi.|oC#$ +$Z-2dAC.q {'i:&C D,{ږ^;2(+r9gJ' +*GUYs[eu-FvAdOse}N6V i(&A;}_;c䰛p­s}Vt*YIVe˯W6嵨~[TsdJiujejekq@H[2YD,%!iAGF>s:jh[i~W#J:Q#gW *J-eٍŻuMj*UgirYB?uz@Q5B];sk:~#-4)A)ԡZ I - +*HDP]@?8*~Yѳ}ssv: {:,{~'ŠBzjZƲԨ3Y i%9ՙp0W(D/D)췉y@4!M?a{g6-—KR.~4qj4h^\:Y]_^+(.*N/gd)ŒԌ 񟱒@:mCySn~c+ǯx`q_8ΩZAd +ёTaiEfFajŜ¾#E%/KiG $I;8-88 w>\/~e*=3rpAO^?۶[cK8!)LjFU^Y\Q/?//[>_LRZbٛ$8I rԫ⾶oý؁{q{nvh䘽a^k]gOhV0qјĴdL^M0TWõO5Ki1oxU+q@6\ET)I}QFˣ{*޴!ݖ17ݶa LjiO$3#>$Mr,ȅ#q)MU2Cu6d7m\N ;~8I jTDfl\o,jo: {FeDzS{“zbb#; WקjHjNgv̦_ -8$t%diF4;$ݑFSh䑎T^Ŗ86_p& ׄ!q쁊D$߁!c`V761=/{5JqP)^^ >;JBf6gdtmB᱃F՜ACƾ,ǴPOhޝ6wBš(whñԉ9mb%~cPI _}8-ۤН /οQKrk{5.T@%uR=w1щXE_R^K>KC  />/iE%FoZgaAլ HkU-ɫV"WCW9FHՔ}B[Z~Z/9})gOrveNfB82GuRbE| |#5lYwT [`wi} ӣ}x={ɏPcMeC0cy^a[I2ކP_B-7:=P&\hΆ80dWPh' bpN't/}hc{6m@]Ĭ Pet7||ϔA$י T%OX黀 >]4.#`\5ƨ LϬ_9,P-R ,?S@5"Ib-adVp'EBP>0O]QM^[TzYuQ Ɛ9! I@ @ A@(rUZPE +*Ȱw;9]笇ظm@X  o#D/a$vla,|Fk~`We0;xۜ{!p .B i+n hkrx[6?nǹQ'q-[FÖ8āh=н0 D Aq1O#pR=%~h@m 3@ ҵ@ez$|e[IZ؀ ws*CfV=zG%v?&W0e 'waO"w6x   Æ9~/ϸnl$;C8 T7[ځ|فa䮛 N!F#{4i!U!_ٔ>oA%W;9-<þ$`ODfhl<%n|TQG wN::>r~u.;Zm`.W&<AȍԄȾD WA3JJb;D|IoKIyO%^H>J3*dS +4p1:?,y7s_pyP]yW~1GyFԦЎ'XGE6&Z,L( %;Hi{I 2+F,,jB&)&:Wn*J.eW{;i4IsȒVIT|(0g-$Z.UíN2 +TU% iC +nE>rSiT՟՟y z ߾C7u27ۉZ5/[|ٲ[WjʙN[QM*jmU-M-4cR<7U>42_%di> +35LA,ty ]lrxOgwۂ_;CO=aCAֶ2fS<֨ThX%B}0/D=$קUR:U)?RHӎ1thkuNf Gkf,ںkyWS:s-=hUR*S Y#0deIU+*"0$N%ǘq5@:g6t1f_Km^t?p#`:Ἇ7R4ԲwVW e2raS(hr+F$!ˬeHP<3Sd[X15@ cbfq݉Ř]K0W4t QrFVXY_aS֗pRK qb\&-O+=JA]4_8̗-,qi O +1P= f<^g̍Kv;φڻp;iSe #ݓ &ZJMr`:/2O_^*yNi7.*a^\W<ƴH=;af~.al̽s0W0}Wu8/l_t.ҳWl:j~IH (" ;BBB@aG(Vԩ#.uSw +,0EtVEq=c= bʎϼO;~|}&GPnj'Stbo~~́ՍҴ껥? eUe>6 S9Gg?2ɃVEnvK7rk. ^H +/usYq[[ 7sbMFuaӶ9Y k +U E┆u9&NMit tIn3 .3^9w^SǰVՑ|פЭ37\X%XQ"L{~:ܮԶʬymdmC9TeZl7$chI-if+ qA3$MScCV{n Э _}#/zq|εIJŕJ*-A#HOr{kJxBrA7좑ܭt~NZn2I##rߒwYQ۞7<{7ú{cDfknNS2KR2LH.$ &zrX艨Y? +^3C \?bY>.Ԉd#hݐky˰qooLlqd)jMlp-:2{-O)zIH8!J"HX>--t?x9g#0 ee:@i5 !e96̰p\C8hՇ" `Bʂ,R)!*Bk ;[s@\#/x7){4<ǃ.fqq!cBE1"ST,B%W"=U^jo3v+w)n࿡) +>HmW] f{!և‡ T\cMPCj1de6C!>Q DHhu«)5QʤL @JM 0&jTًH CָCR6 Qrq Zلq鄏 gLQغ|AACil2} fl)2HϠY_8!e+<8!vCKľāIp1\h"G$wH +.HpAFڕLw8(XahS-^dltf',rw6&`FQ4%oL::!Az;׈Qɛo%Cҹ7I{-GK+ D4ȝP*yLa5%B )mP1oL6Ɍ=~iޫԆ&7rGQo1IyCWW/dclLg)BCBt!ő,:飔c}!"LPƷ:̚ bϱMr6s_`kcN8MEqkKXܪ {H @ b B-@"D@D +A^VPֶ^u9ߞ3)1 ŌyD>$ < {>p}n0 1[ n32+$lw} b:XۯQ)GrU`0kq&LxO1 Q f#@O[ a#O}kTm=0}ډ}Bs"oףX}i$6hWѰV0+ +s~1e9XET2K^Q9A~E6fLH@S@V@((C^ +d!o5n3aNKǪ]/wt9Q~uqXN-Q1J8yj^NB03S?*?g$z$ {s羚P?llew]O~{GI=VkȉŔe&tir:NfQJ8Y9$Q)JRR^y:m<$HX|\^ԯsv-K.O}ݪ7rV>VANfgf1ӋjMOu^>/NPJԷ$?IIeH\@\k X +:G.5yionm>KWg(Kɔ4m#%']ƍϬfeiƴ$:7<-3.#%. lb$ zob0[=\&:7;/j;E W_v_U*є(ɧB-K^P•Djω^H;)ʋ*|˔|J d!"5.7 Eg0ri={vUM-ݥ :gv_cĄr5-4uFxb$[ܒ\A?LQGl2d=iv'poٻǩѕ7w6qiD>YP|]>&Q*4qw mWB-PA;?k#t{h5h0phUw-uHy^/;,1 +0idҌ,M6ɍOhoht#$1a-0 pF;0r]m3`fouw)^lw+{/J#E] J ˒B'Q:*(v#-3>xJ÷!a m̝`,߷A ,hrO-i~%s0ɇv9-t9(ax@!p`9 l ,n0aߌ@v;(ݎ[G%];1MοÞOʾ\O%(wƁfdlfGmrޟ~n^BL Ѿ"4 I\dLCpfbc!Ń5RlOh0P¡Ej9Nh8b#MN dBBgCbrDd9CVI;hdFo۸O@p꣞Sc>k ᳐ENCP@^ᆌE gސlB@|<:S!RԨ/Do/G [1|l hf;U:A=*$(j='os背f2N/d~~C]'^OaM)^Rq|m$ y$ rȋACrr]3CS2.TkyP~@ȏA~6dJ +|:a9z[ gBƄ>c8i80 :W=79>Эvc4ۂnAPAu,lȗQ!ѿ)^E*T'* d#d@G4LX( aaV4D{%1K튢|O"Ə y%~Gnwv?DsdڐT ߳`F5}E=z&L`dcn= +'\y0.+\2lZb憘gMOsN=ɪHӞK{*+y&O\0TAtLi/vNuĂ 7ucżsJ>?.\0s}Իym9,?-wnog\?]}oD|$u0R.`ḁS.͇=/4[/[$ɿ(*n)1wƎKNw=Rv<[7E)F$z".5,uL,Xo?T48˽oҐ17*fhiHRRF酒EMs-3ԧL4'L]c;ڣϳۋd)!J~r}EoY{|_y"űo2ksk._YB|Ʋ.͊c/5K9P|>wϹ%VKedZ n)J{4/#/x +b}_`߻FܽR|~vLU k,WTy|zߜ_);qc2i@Vs%dM}Q ỐOsڷYVp3? c> tF}i1\Ci`mrkU{*7iw<狹_(o3~n9h2m:oHXնf>L0?I8XUA)ғ`B(@( =jjA@P((2눸zQ 3{f{vV|>_NnMF*1&8xxot~ |NΌъXQuTY٭9.}|gWF>UVJoO&51/'&Tſ +NZ 4D#/C ++2TVkrRtLgve뢰%1Gz ;ryr)R~1)ܿ>YƪLa&KEļus->TC"{٘p#W7 ưnA:hO6zIw VzE':J 9U*%IeQ'Nt=h/L@ +TP![ ד`]tk 5]Rwҗ]&ok7BۣKq-IM79'LWBȎr0yL, +M1e?0Y~rD#CdUV&z 0_@]=hxVr⸁pD0`ƿޟ:esZdjJh*dAC1b)VO(P T{kn~x{oeFgC5='ݼios~)wC,D쏹k5t$9ǐ27zO17ml36E|blՋ6<ȕ~WNP0- 7HP5 #(^C}lgIqLO΅sd?8{ &`V`ǘ9f32g̠촋#:JR%n+Wq gC5(~/r!Z Ɯ% Ygf~,"/|&x6dtmGUnߣCnO6p`sY9P@ -HUY.B )RyLR7*71[hP),SOeNwen6sew,~^p\O;Cde.|-{2!aYb3V]5+ꊟJJMWӌV}(>o;6kb6ە/a+~*p<@k:> }Kې_|4kC:(r:k!T +5C^pZ>}w <H[_Hh \~:L:IvMQ" +ְD{P9Jڍrw2Iu|u &9+m8)@ g)kHE vȜ` dYTg;Av5&@ $$$6!)67,E*n8RA[EQ}k=ťӊ֭Uq3_ۙx;}srpig0 bɴA$ +ZH2E1ʴ JYec'6PT9I~(“Fp [83ؘǰ' hiCzu%icj&v&ON߃Ѓ`O B Jπ_.xzǂ6p0~b8A\4uxg3O>C|x\-,@0Yï {M;H3)W;=%wÔ/x0ȃ&|<BDd,H:τ(} Xict `)$- ?&^[?i >Th\H>D,Ku YB !2m@½V"i EknٓWB_ a5W\R'H#ݘZXc!F](#,2S֛CMʆd͔dpG#vg&W߉ڏux!px.S lH`8G!ք`gr{Qv4bgمD)t01&*4 _c3fE;v7{^u~%;4 sI\I>{7s~c +RV$4ePͦ24/-!E: >&ϵ|3So"j9O=w60G=/xߑI;vM +3 " D[1`@*&D3>+ߤL_$~YT|?V.z}nFs#b{=bwUywTyߥ7 Q> v&c a$7d;3,!7#ўL {g c NrPչ_Khȹ&v߅s1D <}Ip"Xˀ|ăs8Ép'4!ιtl2K %dsobɬ&?$3K/w)|*Ι=G :Pui㟈&LUw( dx CIb̀B R2 +{ƛ*WI5GneЌeJѢDNgN˽^w05@rp_Rhhɠj_Ȁ꘴?lww}Kop[b RH~6[EFVQlƯuNV+.Y*Ns:v(@Vo?,r=K%};;RC ˷W$VCؓ/M7&wУ(#Qo̩G06NX'3ZȖgaks&%C>_GT䷫I+&gRVRZfQ6Qmv>-"{9צU[^RZ*^Q$ސA.o9wGxS#VD5\j}\?!m,DPSO;!oQzR[3~:7SohUڻR]\Qo+/]%n.Y'k*ڤXUMYW0Y?U)aDm{gՕAP_&(TLf ֦CnAlMU``|wBmMIs2<;?n-_[])XSY/^],+oWԖ~*鏬(9]VrUQ.rՕT iiQohjl5M]_M:4:-p|澮PѶ[ZT.kzlXпBаliTW}" aQ(B @ؑm( ""PYdY(.Pjg: eLm 8ȢTEgǙ3=a>~s>9 +f?pfތ=!)B3&w7- :íT~!3߷1 ײ~\btqjZVWdx,ҬdX]~at,^}w:}.();x{Br%FeTA:']Hx uE:L8˄M|j2$Z%&EŹ;itK+L)(I:Z㟘75Qp|o~ ^BD&}8jh]π4\nAG byэWYoP|&lmM95qU;U.puVnTUy?? Ȫ=us5:r%j8Of.-lHa^ttz/Z}=b]Zfx;:ƞ͒G7(=:}B|BF:V7^:{Nx +۵W:?yO^T]ׇ^+F5);ǃѽAOﺴ4BU\ۘ{>ȔF|rT^^v=#}#mJ6'jEVH]r.;hHO2pl`)0?cWh-KjэcǚD&Zn*Q<ZG+2[2Q)'9O7^F;uߑ.> g_E̟d+?Āp{߆L3Npp~; ơwRL2,X +kmb>E !T*ք!>8^LI dlT,q*+N׶>~LW4Ӡg3s'|:Dx ꩻDa5`ɿ | 9_!(_SW"y֑vuc8aڽ԰ye=c\\tm2YYpO'-Ba -|P&(Pq%HђBW=iS `0F3 1 +Ә+{XY2kY|uS}.?@O߁2``Aa1 +5ZJTP+Л^4#h=up,08XKt0Ļ75LU$;x #0%uj}4d/K P@領F)AWJ) (t" EƖF;R!"Jh`8 AhyǵHsq'*.Zoω7r,ɖXD8(g?E,A660G \ QJ\ Y ?ψrȝ/j:YB(>\E t1QB0MƲ!Y 2Pͺ(EQK  gijoĨ;Kx,(RfBҜ0SD% ݂5%;_t߸Jkx(i ZG>b9 z }z3u< +qz:O|I~`V=.h` t "7N qQTM ֆAH$2Ī3l5c ~[>`-c5Sfe~ #Ɯ}Ƃٽ0L ƋBF cJjH}1@LIJQz#r߇zVM#ٳn'AF}xiۻnzЂL0X^W6!``U8ߐ4|3-5.!q1GQkG,7[޸VNa{rq&ՐΗB;_ y4F=֧#TX`̿6M{W"H7Bd]沼5_g.}ʎ{fk"f|*k1vWZ~޴b.#" t?>1>Kg O.Qx,ŀ^ `38xػ,|+>Iq峜DKm%8opks=}2f43J>}pIʡ^~3G 4@x{;W`2@_VBkcڝ"_!y٦9zw,;XýȒp>IdY>--\!BEݔjoBWhN(Ԏ}ɂWD+,z*2m;xBa"4hR~/C);ªțfc?]Y뫊]H[@Y1BVaߩSGB:j&Z4y/#g$H;$l61ױTW*H}$B%M\(/, + nOY xb - ;jp:DUʎ0\2ckY,ͦ&k\wUEbʊ:NFQ _r*(VP~[|(B0l5g>BU t]*щvutc%߱0Nkc,l 3R5n^Ԑb]P+uHd|&3e#30x=KvHU=ki;m_0ptn.>'n_Zm}W +>H[4@oƤ`GLspf=1Ze_LRs`6`a(nQ5 S≧3JӾU_zk;qolcoLc9a91 5Rk)C:{PWX\(nvW(hdDzs۵ DQ:8[3.O08ĵ}ݶYٶG1ֻ5]ƶD\"ΡKԼ +*/= 0"&\Bֿl!:!#ԑufq:': ;#;?:kXݵ&$F$W1h|~z=}?o ? n3b{˜XFӛ̊VsBs>)Kk ~ׅBy yV?Kv@x D? ŸBG0qLd0%c Mc{ xgu7v+{u+}u+5=Jp_A_F9\w`l7@0JttTa4F1ned8 Y8ebIeI 52@cs'?25P@` EԔP\ 1l1 l01LF>ba c/jwJRC,Hn!? ۞ Fz0EYf&\TOal>/r* QD('UDE +尢O\\DEM‘0Qn ƹ28_BX=&P3] ^"°O,ߨ[VeJڤRUUG/Tgs⧪+⇪n}Sq[{jVwF@/eP`}\zi=u\Ԏc|p<˘VtS~U*~QV@do}v5uv^ͥQw5y2FkHWɕ(az{tGh.R0#3{g$inuD;nݽov%n=N7coK;bOIǶˮޖ]}$7,5ƣSk<:OQ0-mH8&dհd'dXdYIgs3e]~õ5NW7HL4\rA׭][ަm}^9U3~fݐ{S"6&d2:HF'6Q7t̓МЏyTbq~t[]͙i{iBέ\ΥM8t2&}w }q_GRJEϺ4tKGtfmL,+zwNq›NxLdnG*/ZN~I[rMuG5}qIK@H &8L 5! !!!!B-D~AumγMzvqwHEӒԫ|90;Fzx5OռQQBgC$kP|sKMgZ;> .=w$e@q<;eb6tU!ŕFQ=.Q#U"tGr VMN|D#2fo+) ;i Dokvpa2v\wz`Ys:P{qG2ˬ6d:jH343!ZHXi\:!$;D0ut [8?^|WA ,9ai;d8У;^rji&F7Q*Vnbh +CJdCJ,K!).R.>H_RT +DQ!5({AW ie$J/wwT_ZIqae-Q(w=|kXhރk}twKfWvzoUk%ƜyTe7J| EueTam5-hftd֌W RUXz͏eDL5;hϴ`!@[+{} =L۪_9w^ܧHr+pڸVwU9)ECi6P3&4l6m&lbB&fBdk*=[\?ޅ;`@Iv0ʾd Qџ\ЛvPԓ}-bnV>h0-<m[8u{\r#?Z_#3M/eȐoewbp8S-]YrNaUy,"_M|Tn'UԐZ\&MaSހׯT%=Oz{U z9gIO1!E41C׹z. 銌hԯ-iw {=k aC,CRDNئC +GgsYg./1n_nߘ7wϰ_d8"i46[4X\3 嵄 37%_A_Kn^ ,Pisc ?\tN B`hDSEoOu̐&ʡ'Q <8H1&FTȅ?G|&^(=7ت.Dv6ltvS!{lOVԆ!aP~`*ZpӄqtL:R͠LCsR|I_EuqӱKO,^&?u-Ñ#w6N/►*♺2jw*vEME4ʈhn +ҵПƃL##Z3p'S2'2h,ď,Q ;mu\ݾU{w+igaˣlnsۧ.eqhWD>F` }lAmstl6+Bx4sPzd\yʔŊBb5e Λ]7w+w_cmBKI"KPUvv4 t6L睦y 4,B8,pc7p5aFrD{̔=jG|Ŗ6\!uSiz)kN>*ve]]q+aMLtX*b72):F[\B:qP?Y@PU/bT5?F37Y-gUYv|cVtbYk25X2}ۗiӾ-K;4NҌA^6 ru КHW?w|98/#j8g> ̛fM -KeKr?R|Z9E5.fo/u$F!@n ulJA@5@XYE#.`ǕxZjUlF2Z;sng.8g>>&u)1$~*2~DV]Y$ILLl'bopk9@[D;W"!+H^૫QMmG3ӭ>ȵNSWV:u.NLVH:.K$Mr"91{b7P.8EC`{Jm]inTśXVʳmʲ Y咢LSAFK^z:kQ;kiZ2E]\PUnZV=CU`QJV$YNM.)g')v'(ds8]ٚ&3&I*`Fga4g˨}=@W:Eh[+WV(DVerی"ԒJiRqì5Mh'*o{DZŜb'z|K}jpvAH{WALl:O^UniCan4:vfGɖiY6I55تzv++ETuQOL9DU0DR/i?WS (l BԶ۠rW~>oJn +㬖u1D mRUjNaug}Pw5n|5s U3b7%zCt}v=7[*J5PjfqoEz S:BL6ψiO3ڐk6V*Y%]ֺ)s`7΁-Zòf&^l'~L !߽PvK'^e.=ӑ#Af'OЏl=R-4+Y֕mYdbkufM_Osak%[F~mf6zP(hU((H"y5E/_fm7A|oi=3zj,}{=e{g7>=f>yz LwoTy#@D rH!O.tȇe|5r B<x GhfL{'0yZLA8 c< +0~2$o򏁜a?O@ ([@z0F=7 30z ׋z9cQ- 7ö́1j5򄌑+)?W $ïK(ۍ(0` +2=1 |f Lmo08qLJ8 ƍcGg 0H YG6.Yc \#'+q/?dyTSWK¾!/@ Z*,ʾHHXHԸТH݊8mک^ENw~NrOqw¢)^/  (sHlCbh&M+_<8 xKKO>Nctf' HbGZdAC6=|Gwѽ8}|K ߑgcr?F>c!SMA\=iOcOg#SbH5|'.5ԘhZz%BSE]3QDtNSEWG-M1fO u?Ax}aM>nۓO_)S 'zRC*}I d+d[}̛~?$'7$XW<.z60s;pv*f} τp-#k +,IK`btV`Y.u˻w52U&߽6]n|ѳMF<My~ozIfC޿Ʀ76# uAmaG-Ƽ\%9Zy%FjM0=favo}OOՀ)c>׬>~?l\Ȃ aha߿~}'l_o0'([wb+`50@hlFcYqeF9 3Йۨ(֑p< u}ֽK{BVq +nn ++ogY^G-=w[k [?0^c_t-ě:aqFbe=-V؝՜vkNo o ;(61'ǖg;͑ض9 +|/=7SЅt>LCO!l/5ѓc;)մ31bGں=[n[cm\L_&X'\=* 1X쁭! Bwa0$Ѱѡ 1&T,ҨCh-Mfٚޔ$7'V94%6ҫVovZC,nKCQQ}܈.K]¸c]"0Iiq' AR :Jm(sEM^ğPи(Ƭ Ų\+gjm܂RZW#P BUQVW-Su=#*x!Tc' jLޤQ8' •\CT" RFM.P1ha, 1(6-+Id,[MQPSV +;ej׻ȵe=nRq4ew8],X\iP%28Z2 XNvQSK髂X& Z:\Q-Qg9(J+FuiWIcn(YS üIwypB{a4ܷ 7XFU7(oE42 ÍbrkS,klEV^UM*U.$W4 *\ݢXq04k 3!A4(ADqpU֩Z +X+ +8"8KlUk+.D:Zu}_Z?y}r?hL1+'Ǫ$;LZ_3~Pec^:A?iÖ8g~&h;+Wƒ&^I>7AR9{u{d*`}¬4=f15x/j\jѫ;|v G X{EwϔLmn5l%$ ݓWoy?8lJeҁ529ega:__qڋQq=C89NwnXۚ]2xuj8QgCls4و<+al܃?/ b, q=0DGcr504/"~}Ts{re.r,EvܜGD7H}zQI;q-ri9Ѩ }>mmV ⭱5^tWtSYNq̟Xbߢm_6*m管;k莿+gs' v}8 .B- 8Dz 6PF mmmmdۤ}hͮnyc!xP:շn+9 +d ;H΢l@@ѺEA0[TV%=вdKƠE4++JDuIU>%Kſ+ +T Oﳿ&3{_3[_ wE .R.uCKɗ"ۡrAWY E ] ombj/e?fSXhf? rh^U?mwfpػ>pbP٭P؋!vI/3xG@S` +j'hjXU5@¨#񥤆5kxk ^]zB/Hf,d~Љٖ@ˀO&|P:t^;5o +@] a\:$dwXNR]% +RJ:RpUu~ߜ%Hx]/dϦ{̽j  ~O9^D.Ue纍.O<Otc BTPwk`w%襸MtlVGKf#d<3#Kwa5,Ն!]jr}va2v7Ἰ}[S-.R\ +@!nӀ\!Cu~a/ZlEY`<7"{n\$n q͸Ah?J ŀ2EyuŹf)4S6b*B:Ul| 2ۚ0#Zŭ i4UT$wT9Si̴MuڴWUb*PԅJc~ 2W :b\Qq}nE%󖱢2YQjPYl:e^Ɯ>iNs8ar8.hvO820|aj|tmGF8BF"xY;ը&(n1PO|3Bq"zQt8/ǃKGhE2 jĪ}Eb'{c\jl!B!$K@$6Ibر@ 8X$vl'Y&vL=i&I:Mm433{y9^+b?uUL$L(8/~?b.JϤTJ> FI l +|,Ki #ޖ_LAYB e"dDG_ŞvQe sIZOKB/yȝK3kFJ0}n3уL̽{T +rr\9fW 9eAEEr5 z!֜l=+;ŝ\2S cr0GY)kXP!JEBlkdJ'+RRD.0ԓy 5LG aŸ!5Gh@h@DЯ$a!0\̜/񨻍(#AḦ́˚Ͱy 4iӥr)uQL6WlzUDQs=\,+ {xw/\: >ulG<>G~=<𞍄r98 z1iVIEזƌ3SZPJ\ܞx"Y|RԡZoS'&>Ij){|K !hQ< 0*A-3^d hE0cJ!MaCqG_NU{ʭ.m#۩mv4BfFԤYJh,]KNi~ɦ[ڴ߮%'7؇1wޭF0w]żcX[kN&U&VfG TF4nQZjFn5r]FЮk/'Yt6~5F_EO,g50_.|\}DW1y+Zu/iВFEtUG9*=QYhc5T4sm&Z@bbR&# +ӏJ!@xU&K>zpu6͘79o=Flc 61]ASF4[˩ +ʪnX;恸Jqʟp|&]ՇȗIz"CG/_p3u8mx 8لǚyRHG"^mQlFY]gTֵL}qq:46ZGHX#*qe_k%xa>}g6ּ::1wvw ҠMζm֖Ljn=LnhG; +-Zeijg[nAYè>_b9Qe5^Rs|^b;Gxa}x&ּ+?1s [ܮhhw~{I6W*֕IvFVvǘ:˩ +zy{-ns[ +[gDdZ$E,,siJg|XHCBr<(ds r뀯hf'07!_R:WƊ2B_}(VM* 6U M Me0?;ϋgnse@@Ӏs%`-TMP^q7W;AT(ĉff>XxkU@c^_ c?\p/0Qz:Ue@+ n:ԤnZpC͐7݀3!/o)ca؉?DZڏCKswُM>0U﵀&Ѓ)yocܤQ}E.>o9G윸x~Q`:ϞWXx}ͼ{~⦆5i`M󞬉"CFQl`.~ <_ @]Q }Fi +ͦIٴ66*TL';1E;w<;A&W E8>UQ1=H?y,NxdJ<2uQ-R.iOeEBvWjz/+/ x=K{+~rK NX2Z*L-!Kel%]ϒ%#/X +|* +})v\UlSl}Mbc#?4esZ 4tU\q/Q]}IEcdOΔﰦ)[+ZW(7[sUͪ #s5oPtU]*60>kt&T Q?wQ=F*Nm %4N)h"/_WfWdkr6hvج o"nYo̠6ABmАc̿B$Q~<)p0EaWHiCxڰܰъ_({NV ^ +]dLk$d>=H(aAha^S}ZO#=vn4ݛjfWpj/s'Ϡ?FJ׀7GbCdr#H91Pf蛤^'Ygi3lz2 h8;8R}J_#6{܎~f췏l:lvژȉ醕1aRVtYFtbaʅ&-jiّ" )+G7Niq4%CrcG ;ғ=FYcP'pFnXoEF|O v"-6Q͠hfLΈIM=ߐe41zWCR[c@a [5{砚}>)8 +|`BV `)-,5!Z>ʔULM7]?1nݗbWq\>r{c ;ғm|/#Y.h=?goÌX<5/e GAkТ!#@ Az@TBt]OZa]-3umn~L _|?~i扫t$))2k89ǹ0ՒJT2k7gk[=LڃYSL^&3iH$%QS{ Krٻ>5`:d1UKkR$iAzc~97⚣[XVu'4i^ԛ4#uNpK J?sYIjeC?14LӱظP\!?kԜsr2\ VAZwmꔌ5I^Z Iz-Y/(bkی8(bq1;¬Ay¤c> xc&;b|G:1SYQ1#:As9|ҩw X=|}鄓2v q~ x́GO4=ˠ5½ +PBEE(z<(O=޷z]ɸ-w "N! t;< Ji7N}7PHI2$9CԿp;7qBƝIS0"@!tIeKo4pe" WX0/#tpL.#?o05w1cbzx;~~ 3 'MJpT,=/^`Q|9Y0y\t$o>r|O~|F!Dϵg/PdcE]cAnArKĂܑlX Y,?`/G|b‡hEE>{F)[6SDϣ̘.c x6o>&w -C}1<%ă=&YEyCp m49q42,&$ Ud=LZțNr qO?/ +z%qx:)$D-"d% d+APg?u1q +xk%w~AE?4tN"|G҉Xy8&>y;uvQ ?uR8ۃo>?pnA+r7Fx@qnT\9C41$[1jlf4h:Ӆ/u<;HT}Pem:X5$p 1$$"B"QmCToB +~ZC j]FҊ6\lU~\_qQBYOU"1J F* !zR}/&4w|kuWa\QƗ#.hVs|يs=1|Nw'#k"uqb  $?-2zp۸%Wb7;>ŹU8ӽz4Þ8ٳ'z^m8k:CO`kO]"_ǘ٧1-O$.E&꟏Q8ÑEOg`f_BfOr2lav lpxixm71Fd7w_AB> ' ]8\Q|L|4h9'6{6`ٮf:S-ڙLv.Yݤ]nnbkwrܺ!g5CV_>T-ÈG<&w銿6ZY=[|0,Ga_pҍ6 [tyجs0t%zmu:vMl*[/m[bJ,ѝ.ݒ6x,m!J? +O?$[FM|@380J]b^q!ވ,fM\2]WʶUqKiB}YHҤ_%o5OW̸񢔐O%RkL!jy{Io$('ClH&$%IfQmNpM$2BZ +P )Ҟs=n#ڌ2tŪh1hNMaf3sRNaC1,36 +K5e0j*` +G11E٫`Sg~+Ofz^b)K29sG1sӐc 7_k*ԘҐi:A/OL_LoWUPQ*L,Ch>rp:>iBzeE6l r1M4侍>'d[PJYҪ2 ܤW(6uy8ƓuE^W(6ҜN`g!XK- 5?OY=1#?ov` UyvΟ-R%(ZBe“LUQݭqZ>8,;9,?y™'ʝQxɷTd8GڳX@~*P`ڢQ3a6=$fb+ +rٲWZPėX}5 + .ka][׫m]NVM_jUTXE gܤ:![G-^]4:u&rDiי; ^Q%k}j_ooUwj,\ub3^wY Gr`C3}Qye1LȸfnowKlE~F/zGn)\)\*ܮ6,x2Js KtNRS*4~$'j+텒x|Q䋃7q2 t7畖Kr!Yw]Q{;TiޣTďQV"_ <3:S P4vNO~%npUFQ9FXҘlRir* J$?IRF*ErVe*IXPT!*E9!{:;)`Tҝui />aB0H1șldBLf(5\ZO N$I2Cp0]<^PU T$ +QSo&7h"i4L#UOs: {\?a0G!=p:c 066)a ~nL>\yTƟ3, +ʦ0 '-Dk$F5O465"eE 8Hpj%&*.TӨ(1> +&y{E +9^٬IθI&9]hBm^]u KY+ǢVwdX'!-'Y00g#YT:Gaf)r +/lV&TƜҘXe\*T%R=PC_7f1&yeVr dia=H>}BR8Ο,$}oɽX{c?&ؾc~RĬvywR@Դ`5GQk׋WI%0PCi4K+MA/@t Cc4b嘆HG;rX/usRغv)XHk}/q ;z8x@Mi3_pz"©G3*ViDhe +B*"r8*Ǣk$T͆U[U}VRS0\$1θلyY&7Vlc<.=c6$z =08WO] Թԩy$&ߓBwp_F;~v[.vB-ӎxJd"%"SB ԩN 5j{q|˿C?N?D_/b"Od +fRg>u p6Q)\s;SU[whWp}+\D ZBӅ9 H^!M?Ө3m&SǎXC56sjnݸX|8%:Uj- @oX ^zXHo2L77Z3X Ȧ +󸮥F5*phf,Nc'Y@*o1zuAS;hvcGbl ^;CQ T6`sQl +n?Jp!! "',Y<8}hHBmcj"G:rĦ lZDB4zT픊51n(T{GUHOic{WT^o}kd4hg7Pih2X8 PbxņiuBT#'Ib9/a2a"axFq-ENcEv:Y=k=ן@|U߶^pĦXcBIXcզQ74QZek!0}$-3-rPe*S,1mU,65*N*$Pf)盅"JCơqs5>}{`%v,iȵ2j/e[&IK-Ŗ兖 y%[a)-%yjťeyޙ{D K] qDpFf`fD +5.Kq-5zXTkĜ4mz5m<96ij4Iۓd1w= |zemA6G#ulI1kLslJFɄU&3-X,VUZMI[a(wcm<+1Vl y+6"SH"?7wg:xuH?6#<MXmE%4X2EZ +S,7{2 +ۼZ[b~^*6o]BeKa?LK^Ze}%s4kahEI٦*t۲mPj+KlbͫqֵRul:lsm/ԬkCzu]˸9Dq-빮l-#QW +eʔ$#JLHY"8Xr]+~)W$/U~Q)ʅpEy'<[!܃Yż1t7|ۊQBRu&T@j:\L5IRԀXݭRYVxO^YՐLܢߗuJ@o/K} J#Pdc:9pHG#KPX&.q5َ,Gjo2;uq.,q3l>P/^0GO4l^\NGV G3 +w><\$丌X]9bCJLWcqҦ6H&gltҥ^եOuo4gH꣰+y|'{X[rzTB^i$1qO➉ŞdyRaX,|!S$.TFO&ͽNkpoRrFIII>KB^ޠgS@-H zdW BVHX+' ; <)XTeʆUVU(ebNL,n{OKqޫ)ڸʐ6'.S8\>84ʕ] \n ~OFo }HYSs >Ź͚پSX[hbBڟ8tf`5 |?` 4HnX< S1?$0o.f0fi8Ycc 1Qu@fύC PD3I&s[1efƌhLoiqڪ3fL ((@Lс<؈ =x*)`|W ~KwQ{s+=o^[6 Q1LLjۢ0m,&MSX<`*30`1FkZن;aX"FԎG=a֐Qe۩BFT'%`^ v>ۣ0} ڣ1}t'i;w,ǠF ؂ h?[?CAzdݛX'$b_f1G Dqrº+RW,] Lz?]  |d8paD8vs 0CK77[7E. ̹3_oI}^3vi=EWGA a:-Dr:0 3G_l]BG>Z{#=`7ԧ__ DQԾI@!j{r aCя =aOpaȞߓ{G{]E Ybj٬5{#|Dc1=GO>g`|C x/y=dO4 rjbE 20*;o!"\>'ug_KH2kDT} ** EZnnhYDQA@B"2bM01rRV&NRV8ff\*5qܢo~T{=缤O~ld!Hu'3enDٍ^ӉYDdd"d3AvtS"oq?xW?" ~ 1 1tKlF3`'5ڨqssg#>mj O9z<&ȿ?eg7N&qdOT@EꬤF5j8s#5P{8g;V!}i_2:2G;C5ķQĝL%_AԌ3sӨCBjF%5jH-_'QB//} Moq~$7 /DÁc 9}r]*|=c\| urQDUԨF-5>V9wd4o鋫˴wi0Z"6;ٙ0eG'\;kBq5JN&gͣp y]U +Dh9YВSG|kwqlCyeÆo$O^17x Ұ,\p9bu,ǙU85|z6S 9G#qGF^Qߠ1] sh!ȓx吻|!+ȍpy~.)DpM1lt-C[ :jtmD6toO$xm}qoc<6WL7OfRߛ70L.Ot%wW􎝆|=^ }`M.Ůk:-ScJ O9Sylv M=D+4xB y4O3 : +]&s6L*gsf2ϴaR4{bW*UY[Q?kP7S+}]s_\uS^})ZO.;v{{bs%}4h1' >VlDoj|P[*BoηUX3P>G\=X6rޏb|Y,yP<\{-]~tS\ `*aRJ=ʔXLAҎ"eBY$,W ˔br+-]--YtI#e?!,CG߈.10vƲ1-Zָ. Uc6C}PUT:(PLy!E_H^X +1cx@k[Hb[fB+:q#1&.헥{Rh2q<3I+s#kvxa>Y=DlvBP&-~,"d%ĞXVjI 5bԴc1ZiCvZ3\o1\r{y{lb>Kz 4&Vq.]#4"!RhX0&>'dӀ~M}̽5G%]3G%>4G%VhdeT>` + 38E<gTJ&;iHbR48%LSh@jT6Q}Ҧ+:mҲ+3m),)tUShShdArCc#˰ Jsz2gکOzguStV_ٱ +ώS +˙МSPE9kS+c͹,2L/RXݲ|އB}0 f8*]A +, V@a Zƨe|,3mIU7"ue<-\GacFgWA+%r:!-;klql}Q3dcMW2UP +#[yL@^RE7_W?7Hq؃R)`+5okTg/S |!adg,@PՑXuw\ xº2s/)kS +܍>iޖloaHa1~R=Ci}_CP o,^Ç<OXI-A GhFoz<^ÒsdwT2GvNI8Eag0?:Ǚg +hrM@-H| -/:'֣?<ŕldllj֟%hMFg&9GEq\#dG(+t|+e`؛=vEHrsh@:st4CjQNFi-9c֋]DNg:ЙCGaoA:N:K(gJm5b>i-mP՝ U|ǴUl';cWC(NzM=~WO2|u{7W ?w1ԄZY?T}40VEq*  zM f*7h+;8WYEYy!GsC+-)%)a_ڸŵ7+x(0fl#Yik͊P- %,@=# ^+eOiJWZxR#2Q>_ +h- ZE%Hy!@$ $BТmN!Zҭ͵{3nu;֞vNZ!~>Ͻ`͊O= S&',V iw$uLs0^5K>[R)G{Z +6g-=Xaڌ +pŸQ ?|mX +o^:"YDX\f!U<ຒX`d?|lΞH)EkӰ:;9:rLh)GCN9u]Q-\ʰQjIY̡TP/*IT80Tf?گ>8b팣E5yhV-O j Q`e<y [v&*w _4#2]Y&H4cO79rZM;렂Ʊ _39j&c6.N:tpQæ_/'EYQZ' ̆wd%["G+ ?Xu ;i& }60(Ӱ9lT4 +a+,ƕ(5`1h(.z^ɊLC2iTVh#HEc[LyB~'Z$[s8ܦIpf +bLa5eXX0QRBq*[`4(0zOd:yc/"ɴfIJG=L+s3Y&Pa0JR si:K0PTf̊ʽЗ?]yX}"z\loTBe(me-rA/{"z`-]c,Mb{,KQhO|+UA[YJ*WC][:l1pYUD+~g9 ۀ}M.G}\fN*KqC0TGB_]"hj!&y5*P9P:+ZlW3 tu WH=*gDjUO!wIBFs/QwZǀ'Ɇ5y0(Ȑ_{8CAGL V;V߈Vx2oR/#{Z$y HDGqKU(=C$ s[*e^ Oo*2}QHGZ"țRڔM*,o6`YUHj"ѿK['?m$4CB$!s;ڹ'Zg[#cR3 Hi@R$bi,i]G[Xܪ ;u Fl 11man% ¼"EB̺1q}~ux@s `3]9 ;v#%L-[Jpmcr60%&^JI$"|HL8x˥^ȩI @@ \*""^b2T@W=j>gmt]36v[NvݦsT|?D~;K NH#H3i#ϑm%1|I1G,Cy|G3y~g_2)ѐ,O"ƯgFCldbOajWL#>[_0o69aOƒ #5 &$dP/:jTι_72~w1N.~vp:kߤ0ڍ>$%qαRgrragaoj^ԓ24jZ}\ q>)tvpgp//^_ğYopjG708=]O͙xԓ3I<87+]Jjbf@FRcn)C\vV{k4Wy? C~9wyD)B8%3/ DQU^jM]c:ut='ye&I-`SGch"x^Qy1H}^Y:9?"56qj66LubTZGKB<kW)hVub]X1eG;Kf ?6I:E1g ~s7ڧmFeV +5f4`Up>V.X6!QҌ%!X50<_EugxG|Lw +d*g> Iǚl)X>#"BTGP\,SEsajTϭCFTmCyTG@Y̋ Qo +O}؂ձ!|u iKd煕Q~X=u1cQl2jPkDe qN̏,Q⟠Hn (D +•>.SL >{Hh%kS'F$ $Ơ\*C4 z$d(OB܉(L\|2dp:F87`O9Ia0x'29gIigk譞>'B>e`H![BIFlp&9H*F^r%K))w"KyUȢ(S`n:ظv``볎>VG-}+Ǣ$t(#R#O +J٪\Rݰ#+F¤QsDyUd _Ads6x:ْ>(}T"O +:X5)hĄLm6KaLAn6tۑ? HcNAF?V'.w/Zd=F.V}0,9ԋa+`ԧ!Ð +}Bk\q=LH5|Q4@A4 " F'Aj?xK1#MQ2gLdL3a Yt +ZL ԙyH!RU2d"9k^>d{|~y0Bc{?wp$(^ J5ři h!Pۢf"Ֆ UlRHqCSyRHoԾsGBl$va3#{/u+9Tq/𹼜<\z1:EPyCYH΋D# +rGd $:m:!qAEk-b]g|A#% 9i?wQ{">9*VK!G%=B$A ;y @TQ `NQ#"7#xŠO!m9B!H@+9Κ~/;9_ +4s]QQXWeueߑE=-fQ(̸ `T 0q8QU bզAlVMM`L6{bCRc4how{ xmcb-fJM`PW`ŘՔhSE(4\ldZR[_yE`oجloCkiYΧ6B}3UXO|)uF(6VvЫ +dά<Ȇ3D$ͭlJabWS2mzAWڄf_0'xni]' )vba'luPC!d|R[Yp156v)40wIwvjQ:jXG .@Z.Z}-Kbna14,ttN_tb\KK34@ o/uahj!j6pENc$\bq'-%r?= kgY,zA&Z@q.IX4iÁ=9]lix3o'3#MF{- ~FK.wuNĐv>Q@$M1p2 u1(}\4׸7qț|m‘3}ldIƿ>_{[4Ү)yWP(]%| [6]?>FC#c61qF./l~ `0)`(bJzآ~d|isY;}/\pedZ AwH0Ŵ}k1˰_}- :55u]|gu N|OCx̹7T} c ضa{.0.S0I v͏C8 Zנ"ZIJa/`߈"ih~1/Ƕ \M?Ч<~b*-a8k7刦NƠABc")}gcfcߪ^N*ȎSD2P-T+nKK_ϡ1L4ʓIg#?EhXrc;YvO^Ö}51%;JUhi#:cFg1v՜\; keҧ.]:6k 8qW:Dy{+ePvw9] ƧimZqGiV9hsV8s\ +eJ]*TNuA2_T=z6k\FXᷔaw͆SUnZ=̣U9R%3EiI *4,\JhX|~C9>5fSvVfspN_FъpuQ7N :sh@ h;3bʹvK| ]9ʎ UVd21fF ֌=Vi)=MSf)kRb5)\c7+9Zh|qݚy};`sآ#;EXojz\kj|MV*%~&unS5Qr5.at_7W=hTbF&6jdѳm/uT@T@S2 0 ]`H䲨1 `y ^K$Zf*hY)=Zֶɶv:k%ִܓ?>y}}˚ƎL}%q4bb\9\0 -_EUG$+7ª\eGڔYQ5ʌ5EJTjl,5?NܛEra #NJ + q-z +)?zrX͎1*#&U,*-ήԸjYR)JNإ2%Șx~)S'FNm[q88GE9^2LTaJ3D)Ր KB JI,Pr\%ͪiV'4˸Q2ː.;?^b911AaaV٦0QG%#dɔ$cRf%*1D ɏȐRfřE[*| w)<@75؇~gא2jSHdd8̓d4*yS~NC@SKoޖt/*zXlȤ,bI&XP,cR4QE +*(M+NTV) +M-Ճ%4CJɧ䔼K>yC6&35‹JzYQ΅Zz-X҉oya+>J+)5I0=hD{&3SV$_VqOjlyʳ<˳:8e ,\~Zʹ4\SHl2y1!P&JOոJ? HyU%ʳ*UcQe{"n[FVKիUF.wZVmhȠF΅ǩzr@LI1Z(7T:B(GFe遺 : ;лX_mQg?ߎI~%g#=Rb|J cʥUÛйM\\k1>$mIgiໝSQ;vMG'$]0P`C@uQN w+ +}|7[ًO +FwJ]#y‘PRa#> eԥ8 t4v71qzjiW|?-/҃ +܏WO1xNA^SIAN$'gR,Yhmy׵u/`ͅ35b%Ұ>Z ҅\Opn!p8>c"5ec,ýKKf+ų`ߐoO!|z-Kp\uCѫ 7RnWosܦHv;; PeP hfh(MEyEևb7:󺮢gKp>5HCax$q`\,?Yu !yaMZ`{!`{9)E h̏Qh;:.iofp^'Ѻ7/}J3G~1`9U~ YKm@k6Ӣ?ڵzGOѺѩlS$8AQn<r_ w_pYX;|r"𓈏4-"el +ֱc X:V;؎t^*ׅ5h 9$ V,a߆};plՐZ| -]ɳ|kyF;lݘ؀m@an_L b -M&kk^5SWUv6ҤjTiViӤݴnUNC}>}}.Wy%z"Y/_{Ob> +ۻ3>wiJ>EOOUE79𓣛}!\+q~F6e;K 0"WҽMyޑ`HRsxx/Yڱ8]c~9Xze TtOҢQB|c29wxz8-RLSγhqyi'Ooi=lff1s c`4!F?јop4Vc:Wy,=|`oŔ>1 D`1*u`6ƎjLza"ΏnhF0pC LÒ{_CI"%M{MlbdK II%LTc,QcI%:0,APڀ!i H;0 EldcdsI^EwUtmDG{+3wLYfV 37C;1"##) /ՆCГք6tw`z?:GϘ2іyYwz ^ω?9B x6`uKlfiq'L) (R‚@v9NgѦUGޜ!4LE4?-xo s@Ïy uQD\, Nݿ{xmtMc[:oCxhdj2q@FV Z' +ܨ-ZKg1TΡRav+(7~@N<_&-7p%~X Rud h,LGz}jTpp2Ԣ؄ +c;E즣(3@y6uX-/>K%"Y=r`wps:T:&9&*Mp a7Qn.CŅRKlm$iXga]GQ"}opKcm*q-$ RG7u2VP֊&E&.wm  li&IX9㡭BS5uv۠T!ӆ^(Fp +Ho"!R䳈=%.p$[;xuwIE덂99r(ݬ«CׂL:|Hu!7 yI$lBr ҖHlI-_Y̷۴?77s, ijڥZ Qn Y8H!ůܟd2pAф;! !3 OqF_|g|AfY㼓#VA}FK=J} io{eD$ + B + +D !L`0!J{e7#bɽ6ɼ0Xa,L|qzJ] PSSm$;8D'!b8 +-,FI> d0 1y7ȹf{5"Iq[\9 N98|_%~ / .) ._\Z!,8 ]u'0B(5wN FO3朜>dPg\Ҥ}jCtrt\\ȯkK8D??8{=<<wrx\O &5y vh}q- t=! P Fj0ؔf/TdV [=v]Ku_}K7펝ץc+ XASZQvg+tB-l7?ckncgX>Ntho+|+{n* ^k踂?t\B{lum29wtt"w71pyG\Vx塿ۏa +]x: k %^i optDoq>!;p(cv;i w|-88,~>^rlWaد@Z=ZAXf8Z_m&:-D`kwp~ >szK?"'f)X~vcN^F[4Eт&tl2!'*,42"^q6Q{rר_\1a#bP Gcᨆc2pӜ.E(>;Fvf|¤n 3a#<H#8 +-F"t)rkKwմZ)eZTmjKU}*{lVEσF]W=x2undy>уnOun5W&h{j3T힫qCU1Bc=U9^= y.RJxh~Km**qtS>TgYB*ݨ|V {Sy+0w^s6|;:rT +?Oj_J#5ߤb*ꛪa}sTw+?\Co50hv++2*3䞲B#u jv}L$7TA* 2 (F588CB)7P9!_) t21RJq%ڕP +xwۜC^_IqD7g C"De(#<[JԈ +DNRRl٣Zw}L֘Kp(щCp`<9k6d>FBr<̨~J2(-*F)QJ+):C ׀r%j"ǭٴ]&gzWq2}61dZʧyo":*1CБTCd3F*'k\T%b.TLje΁kJJ%QC|`jK0~a||}XzfXd/,`0oJfJj_5 TE +WQ%+@3T.¤Vބ;@_Kڕ|VKH F7D`aLr_hvȣ<ȣ<iFF6wh es-**12eXI3b3Ism2Q"@zcn^NVN$)I&O/\T ypײ ~ h +x Nw 8 ^o7h:9ϚQL3xm\|pZ+>V4X9np 9 +%pb]79E|Fk.=tqߣp_ ~ @z! 8d +%8b&qO, 7G;[s}F7}#8>oDX׏xobE.!}F'W\G8?#} +y 7{//x8xB/?xxd!]ʥ?8 +Jqq`2ϓ9cʚv鷈uXi<^^G~_['228}@-1/i z]@"b#v91::f)d̲%8 )=`A}`7x#vL*%x[fEA>Nlb=Ӊe2į~xVav];aA-63ڧamFnf:iyZG1cW6!~>gbE,C %F3QVXn8ױwl=>t 3mIB6wh=X)p1b8{V e5YЕ(އq#%Y/>`ݍ.F($ p< +G + 68jȣZӴ<G UJ\ #J7á{6h^b{?v[!{8v +!J$D @2-Dʂ xPW`k,@9GY?[ԟ0G^m8rК.5~a_\0A O:YT W*N.gd m$VM{Mn+rޓ+}GXo|/DA]U9fy;kfTW5-hr,lSNCݚ;d\%X mh#aǕ~Iww[~8:ZڲE7*HFyb=41\ T3f(8NYɲGNWfd2"+Y&YMj:.,/>R+цhkknтҖQ|k9T(ƛm,S/My2̣d3[n\F)%fĬШW#^wh 8ӂ%mhY y>̠NSikTF.+_l# 0 3ΰl +(0.D4Dwq;hc9&٬i&VLlkXSi&=iZcܲUt=}kPqQE! 0ԩ,+7lFSNx1WUJ3nUK)rF7r+%.^nrn-d߂Y?=N#_<&0ҧzs+&OQA1#RVg&),3]Y +*հI2dPp<(0C9?(8/<39AM֪lTi&Sy?;pMgq$*rkPHnȐP`~˿̖qHA>+#C *B ܼg9G0s%\*(EYX'btTP%b_qq-OI,WWҍ1 %gحNՠ:iV4x i|U<}/!㤀A+ Р2|ˌ)h`yr\rYX +0嘵rCƠSW.jB豉4/Ɩd%ӛ BM +0wE=\.BD."c'1!Mdb61;-s8KpG`O+yɇK*a@ȡ3$x \ \5\t5\@5д!`u+-M_M;"88Lum6{&P\ U jbibh[6ҋP@/DG=lyC2D-\X:` +XX G} 35ã9p5XᲈXĢ.$ml||<[\ +nm 5ʡ]ֱ@!H]/Y@ & +VxҏVx£%RZq.|j&UL+q4+ZOX9HfF$|6K[w+(݋ < d۹xvzю(8r965]@:r;zgAK2>Ab{婋t} A===uh $߽V3u"o%9KɓFbvI9V#= u̐ǜc@E?eb(Ea.^zCU>_Z>QA\%!Կ_p55AGy1~ [/ g?>q&8Ǣ%Yzq]9@"g 57<Ǽ=f/΀w9Q|P5Xr*.S 8yP  q-M\׸p@E~_).: x~B>G"QUmpA0ҷx̯5c=U K+<.$;?1?R>@k?eέx +^?ni 53|5ezqA#_L +^.{8 3w𗿂8#=C=:n$2y?t,Y?8VrEr?أ8G:rXD^]M2m~A馲.= ݠ&救GZq+YȑLLV8DDRKX%_"6cvv'iP6Դl_+u:~G-rE.9ϢB1į DWc Ğ2 YNy: ߰Z_j%yWx=19v-{E'{Cf$Ilq1 BjrԑdkL76`0`n&&`CbH'@B(HB[Fi.K@%Ye (mfi6AZN]5mӺ}m6MӦM۪}ؤjڥ4G.S =z?y99『w f 8$7el{W('ߡܿ$xqÖ8 1Ua#f<ߦg3q;cX5#Df= MSw)h5졅p$v1iL.x +8K)gYBDim` $]v>NK<n'2LY%u )tY='e*\v/q~J M5+ɢmIښQ{rڒ˵9%M)aES՜USj61m"Z~D XR(j ?R/1~ +b:m:r"8+GS IږVQQU6`(VBZ7֫޸Qu6Mݪ5Ri3)yNU +VUX>T3SKH'bCطEȓ&K"L3TgU\Z_5ZjUm(hک_Qgͪ,mUb{Sg;>S#{Lo&Yg{(C$;I!Qk,ekͭ*[*m媰W^2GJ[SI39OQsWޜw6 %33IcuKZ~vlF9{IW3SNʜ.*8'"WH>涩 Gyv?ʬQ5` Q)-[J&RVj0vƟ^Dw;X҃][K> 'dMSfI,kr@ ʨVz(PRB=J +)1N0uR;HfbM ~f/w_ዾKax e"'q!a$|:xĞqbMG#a{i{sp mx AY2`͐ѐb: }0q8k]A(nbL4n"LvLavL"&i0bK4A<&?åC){1ǎJw ցJ9>c;cܘɋ9.?7FҳB_Hx| +:;_ U:G;0\|Hv,bb,R(2 $y{8G^~;?oسEi㗩WH*_%p p Ǎ' 67%X,e +2X&8ҫ>_{Ŵna"r܄*_a |n]M>gVcB~PW +Iʊt9c/ggTW6\ۏ_ݛ¸oo=^I/G!R6\{tƟ6%inmzK4IIKKEZ.E\1AAȠ ás)`e2q2&sӝYiOs~/<Yz,GG>ۇ;h +{mf5*c?,ks51#ꋚ b԰>_8?@}^Gnx7u6v̀/b@2(CAw6ڦq-gҿu7g8?R<7{{BGeER?.jK?wvT=:uч踂89,C%tz gz@{཮kz _>/߈M_p귪һܷtɜGG8qyqa6WqR6K'Hz0v]_p|ܟ>ݛ,::)tGsc88#8Zܬ}d/ _R@m!B#_y \b3e'"֯MzGek=:Bt5JR=pt±nѽ(\Sݰt*O.r?b̘C"f'Q~mmIG<4vPAo ɠy#ynsmEo + 8,OUB$P]*,Od_ 2\G{?vX-s^tSsd+\x +)c:h_P +~/k$?fOyF>OqmrѺ!.sSc>;\䱧"p᪇pMdptvZf^w@dG\ȝ +-a4uAL&cjHָA9ʂ͞*P}LHuª4Z59_'`K0\RE-U$Fp+mw_ղqlI&&cqjHNQ8:CjU`b+4$JUI +$5ȗ4VH%oUqOxBwU`BSDEOƮGm%#P1i(bPɨ!Ft94y4T*Rjܤbs +*HW5r[)\ʱ\zD $#F#ϯw泥8!7#kȍߚ +YJ-*RBK +UX):Jn[rm3/T}RcxGi3-»[1nŌsJnFS'R*U`cO۞<{r%r9|I );AY㕙>MNgҝ+*{^2^5MlkH=Sl-~@ Fy24+iSө̌\P +93*=+4L={l]< K7#L_O̔zvx75RxeXՅ|vꤖz P#6(e3Ǣ49\#L*Yek.{LddHO*sLIs#>|o #c`;3 mcHrSCn|Ĥ* Y|vY +ke,K)EmJ.+x U\Qy|;rȻ chiCG3#t27^RL%VJe,u) % VRYH 2*ۡXxK^n"/˴2K-pg]9]m jF_-CF2֓b$&@>*-JLx_b}^ SH~gCcc ~cUEp>4q*=NsaXFh11+)`bA MhPi`0MA C?Vj)x6{LzӐأVBV7q7 $K%l\xa0t\x ǸcBHuhcC걓zCON0yy@0"dF\1RkRivHMdM4pġӄ&45GoLLk.Khhh k\ni)![ 9<h#;?;: 6+Xy#tp 30hs1 ; 9tG7&4nrхU]Gy,AUEpܳ:^J<a<2h6ƺ gGI'M/uE賏FG.Y'ṿ; 1pa0p{Lߐ {%W@Ca!WқO c *r1@_RqpfLtLRl`ut^o$6hVӐq -8.sfp>rFqخR+_W.0Y āt0Rοgjs;pH}A#GGs"^@ aG>|Tp!X4T |pƲ~kg88K8G<N]zS'u/ >z:=E;N*ңn<7U#` :._ORܠԍp/h=k!G!^7YJgz\hDt*bn 6^ 489x,؋h2GM>:p6Nv4#ԥY EfUR0we mXu8# teDt2!Ue/Z"\B.j(fmV]O{ jȭ7\~t \χc9)2xYŮC-Z@泳R\ ,F}9(48ĵ5xW:EiU5YJϨ.&j$ +n1 BxS(fYjC(i>'{ogG;k}+l$n9C5rxxK;\p%'/\p k4\5hr#{#PN. +idgqedY1@3zMaL$?r2C&X5>ȡ1A.%jTPFgiD a!w+'tCV:7)5C)O( 1|!OwDt.Xm)1PANO!ǁ紆*dT^Ur .eGxGRZySbdSd{< =ZQ1]!2YQ,jLN\r,rNi 9~LSeLȄ*W*,qB=9  +NUHO]pwL,Xߕ|VLl)f9#'CNPEyLxl2{2yeLJUD0(-U3Ui0v|:ɮL1v +ͥB+tr)D]᥊y +ݸ~0)\*ָɽû{Xfmհ2V|ߵ=růĔTMT۩jEZWj^vqq*B˄ΆKZ[µo5c[_U`8,G bK^2ٓ:hh5i|1/jZVXA>ך_,N7Ѧ _\[=_iu`xD@yy_2%ʹx>r؏{Թr`jf>+Te$9 `cU: I ~%ٱ/袁/h _s)qqlK3[j ML_>7\;ֲc4QkTT((kx[w +ሕKk4U@{.J1P╢4 ŗqE`ƎUn\ɼEi]l'${.yǵ1Ja} !Ϛ:mfG3m4I3]4E35q^'$;i츎[u r@ +1T<ȸѹm a-߉MKvǀz(j-|BL9~3p.Q3 xԭGn߶dN;|ܛ}6'Ѷ$3'qR<%&4S|qJ~DzR>ދx/9f |ʸ'yj= kâٱ ]0!,ڣp~ӳq0rN<Qٗc;ޥ`|<\^\e>PF<?WOcq|xiorM_a{ u| =&RK忚6W$dv}*1?X߶i{#_\Y3Nmc} 6>|d)];__/9Գ +3%OlOI' 3d,mB=E;bW8{; +,g_^U*IltBtl x( $/g :{'iv6l`gv;8hûCQO)͠s'I=. \x)9)#+yJ9ۉxs'5ۆ Tx>)3tSI/ WB)t~-vk~ƻFvNZMsEp]z>Dk;ddI8,ybi|ENbWVf{crVրco5(Xe1/sSG j+GYvꎣ7b%8pTȊ*J3LJY–ٲ_h9 +ukTz.?.7i<%oD,!`R8\)`. .jȥHB@H1%폎@TXb/&f:.cK4#1wsb=8|LfҖxxCCxt $2N(mt 5&j0T?CpmG2aEh9K(U/0q&{@AkX = =Y&zfͺ uЭ>HV^iPfPwމЋlxH9,4ٲ5f` ,x808!qM٠)]I l"10BTI##P$Ccba܍2Sc5#&F&G;Τ-gҖH#D >[3F5b( Ab${izз9&l^}p"F;b2!{asE +D&x#8j$,byb!p,dLY]ّ!1CHlp\q .U%NLH-Rdch +^@D3Hvgxq|Dp*жhcHu}67jʌ +?R#3I3< PS,> ؞Eq\=-R'6;9IAzɆٜI6|XdA,@W־+Y?[ړC iBF-(ӊ -A[(oq@j ȡ^s8j$,AE$h~?Xhڊ>ǁ-•a0|!St+R)5D@*zmahCFnlV7qm͐pnyQњ+{O#Ok R>5y]Nbs0 ;P^84~EJcil)%dtUY#Wq€rFtGz](9dj_8`]భKJ7HKwsؗ1TT..(rۮѵ}4f>z{ϟࣵLAϻsƌzfzkfL(քC ~h?j}CJ3E%/c_TVJ*pT_xEy\_^Hڨ;Wi YA"ҭ[l!Iv^يR9$Vd2nqy>=/<y;s+Nw $ ӟmWy0\*c<0gלuN@B! +G[Yu?R|^rrH/坑,~$K]Kn`l=Z5[7q|gUnr"~F8ߛ-cY đ\ೖ-K1Es)`[>zyH]PF(볫ܤ;dqFV Lk-zPߔJK{wWy~P'C8d,ߴ. :J@7 dzqF@` V" 6X ##  ZeWŔԃN~a~qfu#E".lйy.?Xϊ ;m HK=`(tu4G!gn_:^!B@zhCLZ8l$@ ++ @ e!OAx C8~ⷎNs]=/I֣3ѡM*{q6ljK~!}9Ym!!_7Hlް(Qppj`0GXs,D`+/xGF@ҚSШ +s=t##URuMT?|zq+[:sMnִ䂹33o\P7.B *OEtO1o,N4GO\ٞ~pc݌)GR0XQAl(f4 M)h@<׹L"]NJYsr,'%hݹv + ݆/U)|JnPW +x kFEQ`0|=t[ 1x}fpc3A&ŽpJ ~ 7%1,۰PRND,^HU0uf>7웻ñ]zQZVq6 S d`0XA#GVJ[(9 +RWvHo^0x3 bx +p`+gQ(^1ױ>9ږ騬*^x#qb ,Y2aHwcVMOb/f=-ȁ/} - `=瀾}k) +4`" C!)p3:mu@XoQv ngn3w:s+*qBV- M$NreO{}v R` 83JyMO4)XZGyQj{DM {_πY ̸Ӻ|)weUefᨈ.A]]dciI~\w<8/t Pg+e >*7E`S# 3\GHpχHn aKS[K 5uk;mɶcVރ iEHD_+߾U\'9GVXJ¬9M<~̨փI+qijL9%A0pcF"((`77Q#'q h[:-H,n#*Z_YXO +=Vy!pLYzY*K;x2}{"w7er"Iw:GSy\V[<6'Rչn%:溬'5mDtbZL\&$ +ܾ~vן{}߻<%E&gINDHJ"NƄdD] Q!c@ +d *>7 8PW% \ h`3^l:93cM|;egA :܂8XJ[7XI|0|N7w[{EkvcJȬi%J-Q#u|FBѵ<~ԠVTw|_JvV{J,͓ɯ)l/` R|Vxfm 96pL1c3Y0ߜ,/NP[@Qt+eKTe9ۏ-p +Ȯ|BpW$ %IHO޿y:~0?_(gD,rE}KcШ+)J_*=I,?!4l=Å[Pծ=Ğ [ }g OZO$o!xL=5dbBC) Oմ>RIr\r"#;@V2[kclzi5a#*Xm?;62.#:ĉ֙Li_8L+ endstream endobj 259 0 obj <> endobj 260 0 obj <> endobj 282 0 obj [/View/Design] endobj 283 0 obj <>>> endobj 280 0 obj [/View/Design] endobj 281 0 obj <>>> endobj 266 0 obj <> endobj 263 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Alan Chang) () %%Title: (MaterializeLogo-3.ai) %%CreationDate: 10/29/14 7:17 PM %%Canvassize: 16383 %%BoundingBox: -385 -322 1042 -89 %%HiResBoundingBox: -384.7915 -321.8403 1041.334 -89.6665 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %AI3_Cropmarks: 0 -792 612 0 %AI3_TemplateBox: 306.5 -396.5 306.5 -396.5 %AI3_TileBox: 18 -752 594 -18 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -344 157 1 1317 754 18 0 0 78 133 0 0 0 0 1 0 1 1 0 1 %AI5_OpenViewLayers: 76 %%PageOrigin:0 -792 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 286 0 obj <>stream +%%BoundingBox: -385 -322 1042 -89 %%HiResBoundingBox: -384.7915 -321.8403 1041.334 -89.6665 %AI7_Thumbnail: 128 24 8 %%BeginData: 2976 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD1FFFCFFFCACAC3CAC3C39AC3CAFD6CFFCACAA8CAC3C3A1C39AC3 %9ABD9ABC9ABC9ABC9ACAFD63FFCAFFCACAC3CAC3C39AC39ABD9ABD9ABD9A %BD9ABD9AC39ABD9ABD9ABCC9FD60FFA1C39AC39ABC9ABC9ABC9ABC9ABC9A %BC9ABC9ABC9ABC9ABC9ABD9AC39AC3A1CAFD60FFC39ABD9AC3BCBD9AC39A %BD9ABD9ABD9AC3BDC3A1CAC3CACACFCAFD66FF9ABC9ABC9ABD9ABD9AC3A1 %C3A1FD04CAFD6FFFC3A1CAC3CACAFFCAFD6EFFA8FD09FFCFFD17FFCACAA8 %CAA1C39ACAFD0EFFA8CAA7FFFFCAA1CACAFD58FFCAFFCACAC3CAFD04C39A %C39ABD9ABDCAFD0EFFC39AC3CAFFBCBC9BFD40FFA8FD0FFFCAFFCACAA1C3 %A1C39AC39ABC9ABC9ABC9ABC9ABC9ABD9ABC94CAFD0DFFCF9ABDA1CAA8BD %9AC3A1FD49FFCAC3C3A1C3C3C39AC39ABD9ABD9ABD9AC39ABD9ABD9ABD9A %BD9ABD9AC3BCC3CAFD0DFFCABD9AC4C4CA9AC3C3CAFD49FF9ABC9ABC9ABC %9ABC9ABC9ABC9ABC9ABC9ABC9ABD9AC3A1C3A1CAA8CAA8FD10FFCA94BDA1 %C49ABC9AC4A1FD49FFC39ABD9ABD9ABD9AC3BCC39AC3C3CAC3CACAFFCAFD %17FFCACAC3BDC3CAC3C39AC3C4CAC3C3CAFD46FF9AC39AC3A1C3A1CAA8FF %CAFFCAFD1EFFCAA1C39AC3A1C49ABCA1CAC3BC94CAFD47FFCAFD19FFFD05 %CAFD0BFFCAC49ABDCACAC3C3BCFFCAC4BCC3FD3DFFA8FD19FFCFFFA8CAA8 %CAA1C3A1C39AC39ABC94CAFD0CFF9BBC9AFFCAC394C3FFCA9ABC9AFD50FF %CAFFCACAC3CAC3C39AC3BCBD9AC39ABD9AC3BCBD9ABDCAFD0CFFCACACFFF %FFCACACAFFFFCACAFD48FFCACAA1CAA1C3A1C39ABC9ABD9ABC9ABC9ABC9A %BD9ABC9ABD9ABC9ABC9ABC9ACAFD60FFC39ABD9ABD9ABD9ABD9ABD9AC39A %BD9ABD9ABD9AC39AC39AC3C3CAC3CACAFD62FF9ABC9ABC9ABC9ABC9ABC9A %BC9AC39AC3A1C3A1CAA8CFCAFFCAFD67FFC39ABD9AFD04C3FD04CAFD74FF %A1FD04CAFDFCFFFD74FFFF %%EndData endstream endobj 287 0 obj <>stream +v{lO~d|o ⥎7iTJU>ޤr[|DeCs~>޶+yvn/Ϊ,xr̽qV>F45l)UpiqӈELYD0įkE=^-۵pJVN~W W+gt물ΰ1>6$,f}&ej=ޒʦ],}f]iZզ &KB[2>U-aM/n㴙}St*ѪXp ObKy2f^9Y==9t+婓Y<.-l<$~ -98 +5~*8SJߏՊrde-KN K"qfJ Q*?ȯ4-(}}l㪉*%=.æݰ.o z]nא޹rOheSEhtbK`ilu+։d]Y Gmo~rk%^No|Db C@5 .*Q>QLW-h؆̕hՄX<~3qw~;JDn)$d\V/TО]B\vi"*q9 ڃMk{NF޿؍γ+ʜl  < s%[aR#Nl(=]>UE{]fY+W::<^L%{e~ءtQǙљ.|3P2 SlmM2TgV·haCqW.!''J5z^'ogL}P43R)]US`VFP^i໶qF +6Roe +]VSߊЍ(~f¢!߳C2ֹVxQ }wc})l6ɽ4Tt/&e]*g db (æ92w<0[Љ(/T4Bau^ \fgܬ GM̿QYV6=^m|y6`m)A.vF(Vc) RFfgolJf*6uH]M[n̘J[pX\ji8 Т +naY>A3^EΡwz gYo8Cox%mW)?OI=^e}FI0Ov˷,[}[rx6m8֧˭f]\O'*yqݰ,΅q)3ep6wtHg3LN/ES.&=ڐS9/ \C6߅#BrQ]NĞc8-T M/.ԙV +۴[1l~2 O;^8Kc xzPFD3+X\r(s~p-ƳZ7ZF SH\wdVT[l[Tv4'?m^ui'r{p#$@=gW 7D=C9 gQ5>>M9+ԆϸvCN /y:JLN)ώ^rZ}PެӍfzlӑmW}Bf +mj;S aڷϓw8oJDXl\g +aD[G|سnY>jw<к^s󇣦g֍9-̴.Q!Q|dZ +s Gˍ_~3;6{<6ڻI?j^WHްFEYUVa賫F'M:{7C.&%JTU=|a>EsC;,3A:)-۞h41s2d{(5 ^5|*Z긌3Lsݫ(i2?WX,w%:,20O w|WSe(c۳ֶy{'agm٪Ӧ2:){ãʱ-WKAo)h yfzԭ~!w[xBN[BBxz );47h;`y+ºjq[;lAbsgd?fo=ǜ٪at):9 !_wsM!MǼxL^vvr" ??&\p,cG]0y99T}MՙF +N·MڙdrHsqIݛ%있a֓ˉ>+/dWWTn\쭠N+IM)*vMzʟq`nHM^a*MՖt4ױx4ȁU{Tow򟱗_DE})Qm10mMi\,f]>%YUD,`hZ̡޼W;rdbT[e.( OlqM'mz^U&5O*w?X.S?Au6{/4{dQ: Zngۭ{'ĢN [8_S+'k)BOF=$Ģəu؏ =) ea$T%W_%1O!v)U=k~4ĜL|o|Wt4]#e8}) }h"ɭ{x(2nt;+ ӬDfYt b7y]b5nG˒HV?m|-qĄP`0O_VG0TZEqj/ 0mߘiꈱBDtFQ$7,AQ@wqF]%MJٖ"h[g3GS*lF| NfB*AhS&u^Pv%&'D&޸oP2y@gw34D,aK:ݒ.@G 3 J04t!@^% '=YSoH0 5 fWO Ƥsl/-+PXuXr4a9@w.>X(4ڼvac<#4{)/ I2@.l ^vE籩DÊ~+tQB ```lw<{hhDzkCCPB(@%{U_g2/B(Z zx1WO8a}\Y)ЭZe!@O 0#$M8U,r|>A 8Om޳_lK5¶_58@_hW@|1EEyDX'k>om5\BSsqx#|Q.{Z+%{9'M9 `] %lĮ&tWbʺ Kѵ>g}cl{P\}/|WE(719 CPU(@洞DnPy\ + 3nl >HTKB >ů@ZJ٫ xU|6Z=?-W~=}3^[u6 +\TOlx6ꋿ@}7X(C5t$ rFVPfsHFGR4o.)wpo9wUYݖo"rE{|Qs/K~{{@շA%%o4t.lrQkB_<@˷"[,ĘD׈3?wE`O@Q|';I}ֶʪl[~Tq[qxZ-+sOX0|_u߾ B wI,_u| +TrsM쪎]nѮΓ6fM^5@ cVw9ǚ_RYަ[eU` TPzs"j~N{EWrpϜF" a̪UAEؐo]J?M'Xxw Y)YxyX.Q*V0qXX6tBlPM=D/gUɷn}#,gwءohf3WZEBs;fA\rf 1s-?2 =`r 44@֕ZLĸd&3eI䦕_yFN?vgI= RU7,YoxMϐ +5zOk]q"Q֒O:/L~OA9rfBStiD/oӁ7`~n 3> 7-9K^RpJ]F$Nnm}4ٸu8ǾNcSc$FPC a24E'ؒob8Չ猿}8yTs໗oڹ>">:9\ZXQHTS{2 7#=WΒ/%!2l{[={<+eFi"I&K|cr1">\YUzaL7k4ڹxx籬F{1)eï-ʖO:wV 3Xhzva۾pyGTzYOc'\E#cQkj.>ud7K~8&Q_!Orzg臏pZ3H2|1e *f|rxK,m,(% PR2;{|(EjNiݾ?Au&ۇ +QP+rH M4V^3zq<|O vW@;s!ٍwwOKv.NmV]9MDR:$ IMhE{(ٺj?i<}{EWnYMQzXI;HepjROMS:Pz+Y]٫V?H oSožo7}hjޞoNjF]MɮVTiaIy]3pfdLj׽~bo TxTA>,r\/QmB^ZL+P i--Ҳ3O}do s;z Տ͵~:Mt3VosougXaBZQpVA]3vpbxm]ŖB'[Qjk%*^̼ǍwfwN7wg2[Y؜۰S=y8&ti/T{yJy}Fb0{hgv|%sMDZOJa^MIӁE,ݫ9 xTU}OovdaZ`_N|'ZCJNre9Ե$4;6]%,Z(Ry.O}:Ia^8fU~qx.C 3ɣX ?ȯ|鹴*(!5 +a,m+tj4}|x>XC[#v-#K]1{y241bȝ7x0&?BʮZиukmk(] gegoqDv{/;Uby^`?ŧT|q[,^}JGAjj "UAsiy  ܅L'QH:/^ꄾ)%]>=?{-ÜM*T*9uMraNq^6{:U%(yoED*}mUt4}PtGLu2FN$sudqEuw犍Ru5,л3>S ad .iso_ym( ZO} J@ouv*(LYH8c6C$ORbޅH8`iSɢY-RKIؿҡ 5e/xU +@7Gs JIEH߃Ϣ\i[ICD>XWGȱLq_{UO: . !Xx^=΋+j+@ˇ4@)hFM), đKp؈׽2v+:w֧gHiXoWv2쀼!yMW"dB;(߄= +qhwhefq }Iփ#wV~4DžtYcj bp@ +}]6xNbWxo;οնXL(d5 = QLi:'7 r"\=+LrB޹ݾ-AH҉?Au PspKͧ{jҫ Ũٴܧ0|}v[n*\W;x ֙ڎSk -[d~aTuyo2tɼq."Ъ. Y|NWiDg>^$M-;W) .^[!zw5:ۙ '|mNS_kanoUX[$o=pr\9i[9dGmӷ.d&O3VXV;g>l'7`rvmdunc9$߀r[{W~7L{\FՂ1~ e"}nT=.pvԎFlw6[rzՒK @yZ) .Q.Y/}~ :%(Q 1+c[w139kl FїCp7//Ʃ;E+CPFR2W[37N N HuR62Sz/{IY$ZJ&]Ѫo-CbZ7X%+-Kg~]~1r=;K +ϱ$N⾪Mѱ޻c2;IEpk92 ؇(dwIBp.Oq1}/]:=n39mslB3e?t鲪:`^) 6؂( + ؀]sy95H୹xZSVTǝؠHzt)i9Bj392#Tm/7ʦ5Ooq_M%jZpT ?ESG*E]ΆV:Oq@ZGvW+6v.uN+zCᅋTNgY~k#T` #p+t +3 J⻾2Cy +=R"7~*WdiwT 'UY rRбf|XgǂT$KI`jLs\SiFv[qSc ,'wwy0Yp{cT˸kRֳ ro#:9g5Q y~9-0~ao zR.ڑabd8<šb"H t\u  +;O ◈ _2l餁}B75~v؞ Eǃ"'klkVdwWguE͖TMٹ*Lt ZjB 7tɱW9?_;]'̘W-?V2Nguw}YõI@=e{h6^6\ 7[~CrTXӮPYsA:Vd4 Pկ:utq=U}p K"΂۱rzz70@sxS}g؛vHM^nM{#y.Z%N-T홂QRC)?Wx1_0Bά=\.8y^Gwzb\- 9vľ!wQui94onTf+ףs]oQrg>ꧢ֝1 &?ؿ-BHS>ҚrɧUy J7J0,](OɬMKM;{)x` +SUt`Ժ}TEFj[,2Jl¾K(Ğ-~iWK~1R[)r$^}7{`#$hC`6svSgfrYu7orng5sU[T# +~r6f.%=ROM­/𤙿;_P}osq0 !"0[hR +eǭ6Wi6sʴ2m-$_mT3GƟs\_kr6"{ uT{>?\|8$8deTqȰ%"<<)f)=_+˄ko4co-duQyQZ\(wh|#vR)|.,8[fR#};? hK0ʙ넪"++߬6X),_378WX:@h5hv]#<īIA!@8ɢ-a-PhJA` wmg3,:>xbgpK42G @aF +BXP3C$S]ۿ|V1D1FV-z<U_hN*] P1@O'Y-4{qvEZe⯀M2O+*&;#|s; #b<X+sXiMدP&@A) P |8|Z:! (V+> q ̕+W+Z$|$~"H|)t^d6N 7*Lªc4<J{=/3On_MIJe"ԊJb4y_a}UewOҡ5OGĐb @0L|]wy{tŭKZWqn,.B,.J\dѭ9<`g~u?L~w +`Ӱ;W(eyȤtdc dr7?E vKoI\uC/n5^_O/\^~tϪĉ1 R?1oXF(zlp vceȡ-2{g*{5I {{M~%,|T!5N -W|6Ou+d"gUV?@h\ݰ t>S{{>A~пޡBߪwB@\56Nߋ~}e&:T$MoQHeoYPΕ7lW`q@eO#{Wʘ+-伣*|m{Q8O6¹vN oZGnf1c?pHb 2 e'0{Im@)Q?߽oV~wH^ZU;~, oe_~SdGc#sr\p{~etR0CIު$͂CS(|9 oDzY賛LW1`^X1Se|E6vVmjjQ#t_7|J%^wOѼ$&Ԫ7I(56s '?(wZ)Y#x{݂cT Je9 1\2X͉Row]Nݙ31_B w!тCj .⦯^hbPCiđf,^4IzZ6GO[zlJҗZ,ꈑo -N+iJs>I=w(4nq`Z㜾S8hCc7Z`={kשWkz6- c2.ϸvR%lݖ";'EjBfSqǗw=ҮRuue77I/v@stqSΐs$mڮ$\F{B3{DU~d'iru&|ʈ'q6 +z EfePSV,)GVKe7;O93Wǻ0ڢ5|^;s>.ZѐH9)8a~/X5Q#71W[??Dv\

                QwuK^SX ]'n;}>w3mqq7Dݳke 7 +S:Udدl}k睪MlżzrHL|2wVm ~ !_\uTG!inh0^/캕s޹LgVG]t[f}$f zwW'?/dțp~-3rJTvRDŽ?PI.3j:EƎ}c4MjathåNm㽼:b-i[OH輬yR4ջ1&9JeV҇%ne/Ykf2zH~0jWũH߉0UhݹNg[k(vp16N7vwڽի?'x~W=2fxznqQeHק.DqK ܌28h +܇\gSlK%INAY|lWfd7ۍ99vRpZOnmʬKw5mj.dl no{wa:`ry[a.OZZpJѭ5x֘VF)K䊔MJ6$% rp C:Ȳm>sJL)-%md'UFe8 kGӭl.?@7"ӳ|Sd,!q_Uk5\ ֞]3[R#|WGZB-|LG>FHF~Tq׋Rq%zs5Z9k޹!F1%BugkK4ZU嶲> +SZf+U*`h97'Ȋ.q?(<&μrzavid/n=نa;䅦ԕFu)*ʬ$ֺ$vړ̭(߫X9J"=H,JQ,w_jzNAL ׾ɂ"%2J\~<1}kbÉlB*HeM:>8 =̀>LUOb9% +p1AkIL.R4;Cvk-5yl-tBAc Wf=2f|~C3PWw6yV?]q&x)ҧ+PojP9Y[= #3\pqqxNpI/),C,ؓoPou+l5kxxev=iGN+f]EWUeO+Vϙ(ȵU@vKvP_3l eV}(?p$V&ec[|jiCu4:D!e?ؿ?HVd`z &?9@<ֽAG؟7 [ wa*Kx6j˯v8?)}:]e cȬVH_KiP+; t JA(`x )"> )olAxMW?L>T^QkB <h@B4I4#6rOE{lA|_J!WdUȔC^٭z{ w"?ؿuz4z;,)΄50h>=w]->@;}Օ:,F@Sz}V.!dFy*I d_qV~DT7rt[iWOz?9`X#QpXσo5'nmWH㩖wŅыTyYlٟd<z}[1`iۺχ[ `i +{L p O;duZWn ,Vt, ~&rI#gJOO簹1Qӯp!u_.䆫):yC  +=d MNw@p UI8>*.!o68>H/{[޿G;t/$f|r_Nu'zWt;9v\]@ l~ß;ˤkR˗bOiYqN8NjNnzInj+syUu'foǣ7/,; wid|*E##s__]m!l#8ՏF|6I:aO[_lĜ$y;i{thCddVlHW vj@fFq@`b; vvnkɀEGfa3g"JETKjpx:_w^|UD`-ω(sqG j$DY79[P%]í|䘲'XkQc)ݑ,nW^`| x<פz1"&EViT>Ԥ:ԑ@Hē +Sc?k\W&qq^|}[ M-&[V~ Žh'umҶI<ˆ^tpyLpWb#Q!-| R"A+a\ŨN6]L,︂/)X~gK8-fᄾ(K0y7\aȞ\s8oUX2ڋ3-a"c{Y![J)7J//1CfhUaQ+1B׹9c^@+ʵ7D.x+e&&iJXBg_1XWK# ٓ&7LDzO;[Fj]}VYx0f4/>h}CsD, JS~ 1LN:]ǬFl{^ڬ.eˡ酃 iU-&[b +Tciɮ[ I=?ޛMBO^C>\>_@+d 7 6b^yŷoڙ 26@(yfb, sR#wc*3ٗM1b[ + whȓ΍8P8Qwȭҕi{!rʿQWM]s2C k߳§ZPk|GOj{&Sn?槷_{"?X?osݐ^T;wjѥ;i'cDByP$RhÕsO92z 6SN b~x7_Jd^dVP4td}DOr69 !m5ɝϻ[{N}۩o bRoo2]k*BմxΚ3&sur71?z.X{w*}*Y ;1Wss:i0gǺ42/}^ݙ׺vZ RXhsC0oh䳇a#+𙱁| +IuɳUz@ 9uњvX A'A.i'–ƧչwJGY1ɨ ,#|.ZE9Եkdo=Ŵ^[zm.f|j[{7bq?όvi0q_qxJ'izgm׿Ǽ_y:4JsEU^?Z,vZҪRf'JUMmaRjS"߰]yqOf[ jܨÊ;}+gU ˣ⨅/oP E7\z; mwzCz4Υ(V)뱖3"gpNv 2܌U9ȂA\܏/TʜDXRf0gn+B̮74@گRUlv5EQ{y =,)92MZiAJM\ b<&ׇC#0?i$/d<&o/M(@1@H~T0ҥM$  ? a.Lu1ClCzGOqds%DJ6QJ:&`@ΒPI6~71#I + G@>޽$FA tak !Hri%;Lf!^ Vii,mfv 2yݬA_HPN/xtZ`T?Je }%~<1iTg)7]R,&b k'8>^rwV\,HqG:*ǽҴ~o`c29qn1(4j6[F*<H6;W V∺\=_\撼>>}?q#*>Aֽݛ99n鰹~}7ΞJP\'?ۂ[``Z9_{=#= k߈ȷ0< h05nxlH/ ,B77/{\Hߜwl羳 dlJ+4G'74@>.O*~<;OrF{KԢY +˃/|ϣqUF{WٟqBbN]x;YOk0sy|.F?m`6 +e=;1K@ ]AOY ψ +Ƚ7Qn}]w>uu94vo?1*Pα)wпГ~8!LwuvNs\tEbA{ʔ  dHa.֤h' +$3\J:U?JH){c;́]R{w%B"N)m`7hv3{u{ $tz:\'CЎ3\4Wg厛v`]hܝ/s{n +NG{\d=+b-SYtnp;;gY!vɫmz7C1S2 5?ؿuh9E(TZBb{ +R#iwgg%Nwu3؝RحdC2eT˧nc!π~sD;ʗ*OK)zW[jfj͉yѡǿ`W`_]쀌?>|Y\KRXݏmJ]s2ܬ\l~zaZauzeUlakr07wGtovTkq.Ѕys5o3,"LuY4~VN6Ω21'rkkTzfAiYZtizv1VjF9HI(IC`bqKɪ0;oM^qT? NН(dz[q=Ev=d |hiCyJ&"+}?"U;Z6?9lztiJ-v#qb3}v["­NďAlKpp67<53H{#?h+)G, 54bVKG_mG_5ܝzGEP5hߙ$qk +l F2|vZ9!oshF=b ALEB_(! +;KXϪ[(W3K7t/iTOTJXtY']y5@udmOq?.gϓ:)uǣ0Wǒ\9%І΅>/4I瀗lM6+ܐu~(->wp<Ǚ T:$ܹSz5>N҅l(0&5-;rue.@=WLۗS Fuiba= +?ؽ/Zx>]>IvaZz:m7(E0{=6`4(jEKz^M>V^3;ُ&#Ž{Y@Zl0TC+tz2+a^ć,_J=] 6|T؈7Ƞra?Ȉ)PR']d2㤴sWU6db$2W~^Tg~"̧<=`ilO/WE|_;$>&Y{ar3+lԌ\QDKzU4H\f?)Po>yoGPڳItDžhďONٞ?{k関 uwK IPo*@NB^P^Nl`w/ϑyx)q}-XNѬAz=1x,/W4uC|D'9޹wj6B7@jO7d^AS{QݎӿvL}?Mݐ1ޖz +k;r^QjyA쾚\X +ltW30'tIjP[r_'V?_ ZpovӦ?E??1&nj.z_l@Wwr=ړQ{qsi7?vzyD60Iؔ'۫z.;<)|:L&:Mv^4 46gN: Oh/|-^g|uo/?d$5MnYc]N5g>3ד ea*u ݋ԮQ4dN l1%& 8 fJQd~~3gK5zbnbEN1J*[6]]RbCֹ/w֕p^AV)@j$Q%MW]Ul|kLj tƷ]['jP`m[2D_jpbQv>( *l:4ZA!If-ڇNWޑѨ[m%>存f\`U/Ħxz5 @*WVR6#P@.rTVJ~6Or1:8Z#E&F^3/6NY+y־{[?iwz2p0؁2`1iL/QMfiU~_7R%}~sVGrd]>ᬖV ۴[E2A*k܇,.2Hacw DK]Jes8mR:[^"b`̔9_ Z$*a#<#8Y\pw`|2AJ|:h:RI4;L#NuB!ե>DdY SiSX+c-Qv\^>09LoZw975/&"& y w#<+F*֩.Uq! $AB<کnSRPm$E,i*AZH2 -yn* f)>HeiEc7#."cNTU?A>b-* +** +*4_:1٘L""bf ^ nEҋRm ExQ* /1 ̉9Gk.wsz?Kݸ)fAvWo0zRgzDBoJ{̷h&UW^s]teg +S1clLVb11vSl};fb&Au!AGl}=fmM@yOoֶgl/ά52ߛ ˞Vy"P.IzY*s4\N:h'hV!42=\r_ش-qк?ힵ0MȁB"F +cW6VRh^6'?g)=UXsǍq+k坵3M'B>o>a|}{M%3Yla㖹{vɖpM(}^]:lۺ8Mݚ~a:8]..Jq@նhLhܫ_3y #MÔP8n8~&{`"lVMRA3G~>fҜ^z".0[uޗAVQw64m\֏|0>-kc߅!0L[um[eSzvδݬ||e3Rk3e;'߲]ᪿ13V66.KOxo_>!Qp]06®c':m~1lY+lK ^R[OIeFJ'0\ Y Z؛vya{vcaε%T@oY#.`޾z3\/hgtb^ 0T+ֻrhID-nw߯\ww5V؏ +4rn1o)z~&l.tvtk/ ҍEksVΉ]B\>8fwy]gpNmyFHVSL>' u-JF_-7DOW{ |ez],3lLLZQXYΖeuU)%T +0c|y)KfxZzl?c6ieKTκgG+ԔʊGl@ͰU姸f +IzcM"p/ FSRh%4*[\/6ZOJ Rx{Qz+US%9%x3L٥Iujtf+M7c; jL`5f +]#sb)fJ~g 0cuy=Tsn.n`$*;ʭB?~ɛqGɊ # x^$~3LYL{XQ1>d+ |16gri$E'O~Ǚk{{,/V#]쌂ax*V,4]IajK3D鬭l)?$eq.|x#|qj#GS5{ܦ9VM~g 1tUu-."f3κ1+*LΫ9-./Ef'X؉#q7c~ߕps͹i ZXV"c.]a9\5eI2zikWnE!iEK?7;NBR7sԯ^7!s\f*cIJS+/nWt,h*[b98HnҘY7V݂BG~NΡz&,tC5<6ϭvA+% yx;tB>0TU珐]^ ı\56,^, u'NT&Lv:ow҆`b֣y(h3gn7pnL^k b 8|{)A Ư;aY^6(+1X첫WehcdvRupRX*p6nL'o7&R~:\}<:O e-[_d/U/}ŧ[W_\3S=Mf2ၻ"vGWDN|F%ʬJ$(uV%}#5SzcskZkyZnKSݖNu*-*J +/.jsQ&Ȓz+8IVSd2,d3@M?SLnۦuiH:$BģP_n06n5A[j.+s`DUއ|tev;;SrV90,K{Uopg[lffL1 &jQf2L[!9Dgj騡TpRX\|WD9w?4JggJ Q R{EXc*h(dzZhBl3XJeɞglɔV%^+jʎʅBg̎Eʙv{qqq?WZ\!Ӎ\2r'`9x1q?qك\g!Fe;󋥥Wmy-J݀ݍٮ +'kLKS|R\xs2-=O2vn˜p[(zx&mO3gCf]*xt3ZuE޴r{ MI~(G]{6luqX,l`L)z٩|$D.Uw T!w>{\݄y30Lozα&v&Ao!mvpu[jo +߄mBNKc\,|P0Wn%6 ZyX2|v(myaM,RVN;P 4P$Ov}`8]h[Ѷ9{M7L㿈v9!cfC1mQhf0*GkQJQ2;-;J:G^')F Mv^Yd#JQG/io7Goo.ad} PMF4(uZ~6iU\?(8-P*XGk{}%r}&JCSG:EypPV.  W̾9fxY-֚~ z/^  j ))_Afaǐ+14bݾ.ze@Њ!9fRjD(u~8sd{=3fuۥ@͹TSz6M_~ M# <|3ߕF=F+@Y Z O/.hO;>8$1Yb/iji UYdFPzzVc<,a|<=x9 +s!"aUTcV>EȤt}1z UAc0^TlnR(xC%k~con7O61͌[$ѪkCm~[5]c/*lo>Suv*qxʁ/٥Cӊ\(# b 87';_Fo郏aq(*K~nv{]F)n c>vIdp|C!whׄ;CwA%(횺S0Þ3ׅuK1Z*0/l "?+Y3XMx5i69ZJI{tYp]YƳe?彻}ykA?]>A a4 ŘT }7t4۲ℛm"F=cA 3#g}5)ϬwYJ'5ip(f)ЋY v2?d$3z[91ݲ۠9()0mnfk+0MzaNjC̡+@^/(/BP->jy$Ё.WWڽvѿ:- k2q 9{~&xeW ,Wll%;QII4RCU o+G1: P{ +7pÓیvvB0|a)"ד4y@Vj.MI0*U-mʜ%rN_gϚ|~cgAwQճۚs2OncY`&㰰-ur- ;V GƽBeFU_h%1ts8l<F'| ~g8} +4+yNafkinneԁ^UX]U1}+l $*I1f7jJ. CO149w2~0I[u1F +5Կs Yziŵvvow]6/n*z5ei=e!x$='gf(L#VL~٘ح!=>H? Q +1Ԩ@m|PR1~ ~Qcwx",P{}yw8iIfkq.bQ[ZeO-}BKx|F:$&atŤU1[]yԈN[ =N-tЩ5@cAz Axor~];ꧦZ?fqit=ьn{++;e};5ZV%Nt/+8?Vq6s3`e.VuHfR3϶H59.' 8=Ô܀)ϨA& 9t]QfGWɵI/ۯCa~mcG̠X__x4ryZ7jf1Ly}ޮr(b +b#!ke,ny,`G\t< K|kVr yF0j;r+=ÓVj k*/ܕ1p7zx% wOnlu_Z/JlLf0!n݅#3/5x JI[mZ%ii5kLSTAoZ +wj6( 1&h[?-g{f1Yz+hsO?L,ɠRΘ(ei8ffCJJ׮OI/Ygλ @FB~+hMNdVB9&gڤH;$KkYJYzwrVH'zUUt[1 yISFMy^@=f0y}bo* D3\ri˒zՐxl rib݊x~J"h+FFu9h];5* 5I.wUc+GQ +QKmE \i[XaI 2fo:3ȯRES)-? OO'nX/ӪnHZ'5~ښ08=#ZNkdr+Ta)MH -u7_a6]k8ʌnHa.氩a%^>`z`%5o?ZӚ[|lԗTaV([O^k&ihgj'{8VSPe&ˎ]1Vfk{ !*ZTzCeA]캆q# CtZwpeTo$+nDܱ"kʴ + U)sNXXziE$393Ej8:4Nf]X]P#KrBL8Mu[R +U&u;x҄jWbz1Bӹɭ>h Y>_gd9<[-Xϙ=~NL|-;&ᣉOzl?oξ +\s%u/>}OԑуIȁ[1p 8VH+ϧ%-B)Ĉ?+HуNFGGj\oK\T.J_>N`vT:pLv.Wĸ(]v;7NF!P}g+oDF]|ti~,mLL8w-_}q[mW-Zr1%0mts@Oˇn +Sp%FX^&o]SPbj} > O"U=^H-GɺW+>|^G3]=>NX'u<ۑ617w_&,K.(Jscz3/ʵ 9Hɭmj +#'6-0[ɇ"D~+Խ'TN] |BܧxZj=C6vf lkd}e٦w!G UG@_;dd^GIX\ѓfC|#[TG*O_)JWzw&ڮꗴӮglL : 9FH%_WJRxsjeVAN #ۑ.3?¼>E6>g79䩆F`읧ڀu]+9y]kFKqaL}1,?T7yvY#4tFY!<'zTvQwyOoos7KN$dPs*$0 +s`p&egc<<ٹ{{4塴kNf"4җqT4`H ~2/eTyIy+lL=WcAk>A;xdLO8ow%y1x>qfubqyu;[W&ncB4^qMc)lĊ[pyNwIŷHcش3x^T p{S>z+nZm{᣻?[E +MVZ6-_ǧp<|spbWܣtC-~zyrO{ /K^0lE/yiM0K$ V~7B]bjrAYJQ=N {9  Q!gqs2u/mo=S+ݹA\#%s&]٢&-F oN'%54conՍGʹ:Vp0W>U(O5[_nd(mFYb1qK?`rʻϡ\;ux6eګt΃:LKiS ++"5Rb0_uWTFǡ\7|t>,BY +㳰q1qk8z?3f;ԡɟdAskO@Gabwγ,dAETwHѲJč=WʽRxvtfB}yzcTb.T?[|85L%8uruARz]׫cTźpt-vw_uۙOC۬A]L x&h26Zcjێۑn9Qۧ,앩2M 2țQ.ByWDU"orl2VَIBuvB[;;a\ŕc\ZHl"{v6ji 4 h7J5,Kޞl6 'š^m%w4boq]9~O 7vϘiջv3 TOkzҷO.2K^-P*݆8!T>Q(XA݂<:K:Odpdؽnf I_V +/\D:7ܟYLV;ZxWB&ޏ* հx3|@< Of d+~ 2mn޲5* +ZQorH]~j9>'(l(Esj;%0CmcE`F&?kG Y3ul +Qk?Xq;q1ؼrt0aP3hU^ALAO"=B0$E3P)n!kU.U@|h`64KnvѸEN;k7nA{xp#A&|505p|/<`PQg_e0.nqC]nw^ vv Kwf~FtPT ̣߸]VtL.{I6.1r !m>n*7u+flOju%j?˂U#vϬ1_>EiDi8DQ:(fu'E0QQ4_4?ؼ7Q`=(FEVEl B}p?V8F P{Rnv.No iܾE@w<,d A`0"`﹈ +x5H"}b:T]>Qd/Y\ 3Q >JĺlG `QgQQ,(^Tgg@rI) S*pQ,`uuo pf1_]`M$>J WbҜblm݌ң;h 67Gɬ[jۋr4J 0vsɾQo\,?CJ 8ɕլ.PkcӠ 2uӗp7r?Υ_9X>ƐkjLwcH,c(ۅԑ Q:>7HK4sD{Msn0SIFNQO78򑪲x8[^qeծ6瞟tzE c =hp o1"T0 ځ;ia(>y#{-磫0PW/? s ēLޞ;\`Gt28Ŧs]!+8y[1J8bzO# HvytF +u%e]ir~B<8HosZ;'^GGױåqaT;{T˃Un;r޳W~Ï'-1W?шI5d/5 o TkGkSP:Ҟ[ζU}0=\kG5঺ao6:=cXLabasp_bZ>ĈTH><|KpO&U76;ޢSq|oISضAv ݬ4Q/֖ 6.]>Ԯ󭢕ZVଯ꨹E).|{vds͞xkAޮC#RR-\G%mG'3j}kٌl̵ +||ˠ{K՝jXI; +tt@"V -1*@K~$]&L;%`xkal`֑ՍG::&@;~^k~-:b{ͯȖY].ۖ>!K@7Őmj;扛ռВ6_4aQBq^cW]sBz{*5-wiLg9ݺLNçnץV?L$F*w[X"[Sg|c-T5 +kW@fJXȫ`~Q0V31'`V#jF#[nך^jw8I2l~z TW+|Jf75rt%5s ?$&9nE/nEK'eu9?3Z㽄]((jQ>VחYy_ۅbb4iZr>= (TbL&?NVMm31.7Az툴ƙsi瞃1ϥOsт?/jٷFct6?76t+oZ+ 5\Lbu.D7],׶XOϳm[OL;NXZ?!wDNuU"Xq( ++56}7_^ {~{ᔴxt[|5 UqŞkI\Lْk +B7~&g3fk]2- +#טv0j0% %B̙LҨ~l[f[̈S0Mz;,-;%r,mI3dDLi2{W9Α90uk*[/3"DED̊E{uz?;ϋS, +j԰|J& qw$cK#rs{H'+{]Yd+5!g(ڗM՜p'rby' 2OYݐ, v/o{咗h;m d[RJǧG}Am6 h$Që)kɆ_;lq&^p\ V+O7 +;\7XF)&1!ڃZ H)>S~ FnN{F).ȘCu~g5gѐym@<xWUDQ9H"dJ# +eTe/<;QmdƢT5Lk።ŎAAmS}#6BAzYzx.k?$x&%zě"Þ:wX>uwVPvBڒjJfW 8=X,F#.!+fuc +wQsT7l`AC%ܞ8cr“sCQ!l(GOdiu;+bZiJnI) gZ"d8<0F?}D^F&8LZM\"}UEb(K518Y)TFGSf]Ƙ\ cS6g`S^_ls(vR{Vhs=/S>}[DaS[rQx>O~|8iVvDtޟE:1y9!T >7pX-lʱ,[RG8%tѿh6seOU3wOÞ;E ÇZ WL+[-)FW}ЬNKu%DIOo)y.ŨVĊHbw:r;qӾ}3.q.JNl{T( & ]HV7U]`q'1\ !oqF +X]hYdzsZnUuL`1:!M C:Xlt1kC̉y}4 +7J>8ڂo<$"{Be{ mT&Ʀ+t!M5:鴯xFŲo'8%:ĎPesN?`sm3mgYhE-ռ5&yèHbk}[ѡƠe5azG008(Ď:ĥ|2hJkuPr} zVâNZLlY&k0kr0YE["+#CgA[[DousDvwu(]jS;F\6v _RW#Ug(\rrZ)˓B)SC.().}Jm>;{m襀?FI"] :7zw䫵(tT'r]x&&n.ur +ѾKb*.ZCqцxUl|%PBl]kag B dr?*腆a!<-3 |*LȲܦSA iQY"ZGuWiaւ"o|{V!(Kp|l6?3=T~-*&nvӕ#8ɽ,p`̠;Lj<6Th%Яک:T.8^ mW7.0c`7JpzU]@V>o ' NHݚPxG92 +'@=g9$N +e{z| n ?}}֗mz.bdSo8b9\D; @ YR%ȾTY] n ouU|Le'NUCv,޵@Kޮ^Y~-*٩˝@{Y6bB[ @J4Ї|J匹Hwf˂Q |,weGų~F{:ؘtӔ9Ҕe6$M9)3F!{P 3ys34`VXfL*JY~:e$Tf}z~#T0},8}H7}I8YB'tf,2&# dPZ 6@">"yz*f釺MhC/}뒓5j+c iz9gM9e¿fqg*r]}-$}MEͭ']GqX&j{םU|;$ &NÜ76Ϗ( 5NӼ0?#c}KXX#cL^IF) xv`a M?tOx@K'PgӁFl/rƛ7 .ՇiŪCzJF[FzFif+WW.燿͚ ѾN\; +,<}d7jq6hvnDkl!ʫBY-YPFE}Oq~\'~lw!v@_/5o1$s^rh,:ㇺ&סN\r0moKt!Qt +\.jXkh/&TkM՝: Cݞ:NVVwSOA^&27?VƸӽ_~ÿgEK*,S0GYԮ;Su2r9hjaw:q$k SWjfd9I%7Pƛ׋PT^P357ņc+N^y\ eMJ[/؎fܤZ {z^g1#Z7$ZG6<X8K|;67vQKcnAU@G殸ڛ {T +݇#M"gs_/&,:.Ox:&0:r`hkW){UjdaexG _I|'e7:n,8>Um?`?^ܡ~5m!Yt[kCI$d/_?Ê_r[^X}sWiσ:m%wo5[iT˛~kFw|?ES9֘PTϷDʒ/r?wɩl׬-eGҲ9_l|lޙ]p쨖-uF~[ Dt&=o:듹ީk,m$|Tj(2&l+c)*~݅Iw~a jvZG.FM^ʲ;/8bCͷ-v`t>[zIkz::u}5jZ淊|̟mzr]'*⩵Ķ[q+ . nQ0_?f7MpuZ~UuǥU,ήR:?7*MýT}Iz[MeTuF]H}vtOQW\\Ⓢfx43ltZqV#@+&`,o,kFVU5_uPꬢ|8)kJRLvh%h(`t#xGaO:G\4b D +∳lR_?~?|.5 EZF6r1w)1IVI! ?V'k +#쳅Te$p2UAVj7kgd)t_?T|E]&sIO BA`BRZ|Sܧhg%ҦCduȔ?ָڏwARHJ HZLb7r'`4;ߢsz? +$ >oDB9>]K5V,I +SY]2./0S$k.-? >*`,eI!F;[e [ rDTԝ BWN@w0jrVfK~fT;KSqv(حihل{)]D9b{r#,^ ޫ ]GM$ P-?aZi֓Ɲw-*۾s0^!vj!~7LMto#zS-&w}2 v&6Mrs"yR]jWkdgw}?vv^W ٍϸFIFO[? }> +h_|n ׼zIb4qjXZXK b v3օڶc̣}h]~Y+ՖmFsik]0" 4ԭHjq&`@=^wEKd sQH(۰w<Vz֍-tsR^tsq# +k~^>,=2]X= +k9ӕUTBЦa"ru̇/jv*[#-,Ӽf} PgT +8ǃrrƒ p7ֵ*k9RW3^ \GcypQE0Ճım/j_Qw}ǰ)Vi/+;7|jTҸXNKP]gިbO,D쪖ST+&UPVN\A>VN"^Nz4ǤΐnOV"VCCDhF݂+cLoICX=_[N3kEF>Ig}/\zYRN@5*7^|\J/˰.>(.4 .({rzgb8$AIޱnFq)-h ̘IԨMK#n͢p;L +zg6Z|W??`.kӺf\pAYhkЊhGhMg[HAqٙ8_"uYU-Rӹh=mPd8ǖf46gQ)YA6<]P' `7 + =J͌`Ϻ ~ZߛRYg Bw[;l'ac.VB'` sswyc`{gQ"@̒!@-@[H@,lc"5$x^Fsh +)V +IDu":.8|j6ˌ/b?& w% -VWY.%Ir4וo=y3 +sk/5ujjm2@.@m$3c,!C_eGXZ,}kjƿdS%;(d=3@5+@zP9P!ںm =dh dl7B%/wkѳkCMSF3ne▦\ ouou] KB[FIS~E96zouV }{0m1cbe1Ì)VB{)o%wQ_.)?eyΪ#d!deߒ}ߋ5fQre) Se<,Lim1v +o>?2[yD q,YDxג^nT']ѧwJlsxթS}emsJJBYR.;$M5roOxvvղ fMz0rYs"g|kO~cq?~9^D75.NJA~?] z=dm +-3g JY,VwqWlRډh=|& +.>_JzNCLi#GcbQEh՞YnϠwv,Kf=AcZ{[1?.vijY5>j2nrk!c 9z 簞< ++Źko=Q`7Y֏7jIsW(\iʢOQH؊?`8f@SLmop7|Vx{Ìn<t}g}ܘ?^{ +yNQ"&Zt~9l֭yڧeNiH7 9Î8l ú; z-D6thaQd g_Zjar/w@PQ=7-$l$rw?;mRR٬hPlvOa[7Lq_'۫& p劊JdUFrj?ZlJ;k (Ϛަ|m[O>ޣeqb`8dkI6Ebq1vn\;:o}4;"]@Թ\[gisRө6E3QRl>p[Ʀ*\$\2}23GR[X&i!<`]Ziih\nYΒbb7\-"kAL\ϭMbO<^s+G }eWxOy<g❸-qia }i~ifsU67- 2:c}z'K>|2@B"d}G^I-:RndIJ< -F&|A|.mvl,56i;Be/FFqzlAZXbBk#7\ f>*0O9es傽DeJ$8*d)"S ȸɸ~ԿԾTT~֖`g7=rjt 85gڹGV #uu-ygcHn,v҃O27Ս&r[,gJOZL/ /l͒-Tٌ"l~ UTN^Wew,׹㓽xޜ;XN'#y_<9 +kfýܕc7;o E4#mS] ;2yeL|>]z7bO+e3W=?ʿl{_6S6 1, [)3x_UY:OK疲DF<l1?92rZlsNTP( hrG$~z8a=l2VyE<'vȽQEsq JYr]7%1r +r +f M_06"Qr'ފ]?S;5nޤ%? vX k/"Vújw*wVB)TV̆Y̰~{IywwJ! 6QPex /~@\ۋ|99p@0 xfSezqچ-nvx.Dhc\6hb9J>^;ea. t2.7 .-I< nl ` %`6 z ~̱y A9ef3 %Tݕ6ޏMY;-W>qws+xZ`fbزhؑ|\nLSjeOB qgs%\c RtA2/=1d|iR;ηs]\Ex^(wM/.쵁 Z*]|;d}$Vr#y<)Ut|*N?ZE&E WR뵌 ]e])X^j0aL>T푶{7vm\yM1KԓC'-~)?u[PQ m]tcF#cĹvMSePʷv(czIS˰<*+ڿ m|^Jm;QݽW6o*{ɶfF%M_7Afawf¡FJj[Q8>O"N{g:]?2FU*bij%x!$:}|U枬 svҽ>7h"]L]܂#QΣr`RmnrtYu8*_[F(#ZU}{[ӷdFőu52,dMLSUӟ&o4\)Ux#{ p]+t]oagEc|k檮 ?#4^]n*bkEd[Bdw/vSLߛϢվ_YϹ,,mhe=- UqdJ6jZo-ٸ>xX?eM_+zw=j8vhQU{C # n n0\HI/gM?'ShEG[W[?i>[لXFgBofQ^*W `/$2և:H\k,{h\!zr9H`n^ӬTO~s\A\rV|..Nk +5 [+fYXw8!p>.'C6+F%3,3nP"ԬUϬwv~|VFF<{-IBt\ 4-NwG$AuVj{ *JvumBFCUO!]'z"N8>|\.[3%S +~a"R%IOfU]' + 費ɢVgkTsJdMEl]›OY] +rUprGw5 _sfzN6s<`>ʖeϦJ;#֕z/RjDieYJoW9[WJԖLŧ0v1&DZd*3.u!~/q-ܤ1{3_f1T^k9P7輧V: =j?fwKt@zxGII=:'q&/rۍHǚ {!xyxzye̽9xV)!aNt輟B8To~#ͬr@1ݭ + +YVSVwlN75Ѽ-!i!; oU>KmG#;}o6kٜl[~?//qVKNEИFZ8pԷOvԦ&.=|4&uYwX)7 v%_yy + H>)y\pMrT]@ln1`bl2g+UE˴=qK$ئJ:/gKёp>vN Ƚ&kʕ wg|RxXyOׯ} y2"hynmquIjy2iʚ<4חᘅqi!3G~@oH)o'T{Ac\4& eE@dѪL?~d`Tr :3y9a"A)2ŕ^ա+MD%4$ݓ픪WMAuAgFM 4}w k<oŏWժ/5.{rf0.𣩘b?;EY5ݒ)aJoJJ;UmĹ2wpwY]G*cۅad`%ŰG}e]lߨ9*mT=H-6h]p/eX/S/X1ݐyY9Ҷ Ķ(A^W,W;[}5}Oj Aqq~WXvbFc zet,w+GD^7oݳئk~7)eYLRɕX40797N^9(whU[elsFKOK,X+d +ysk  +F3), zY\(GW(EA:l,,٣/{؛W1ף=ɝ AG3e5tbbl:|upZtPzdZ/vny]XHF(W84:0WHH@MN:trith'n1d%˳UT)<}Pø{9n:ÆQBit)pB ޡ@W茱tWڨ1n?d|@wYoj9=;I;};`Ҍ}5nd\R{+#x1 i2 *˔]+1ʕZ% +@) 3 QUgH2r2N>+mL.ʷ [ Ō@@M +2}+ +8P=SuT2˄' ֟~xғzW+^T:\SXvD0!9E0'̢5׻lJBS*s Wf S xYv?+w zɷfb#y I(Y@8ef@X]֑ʮh҃S7)(Idf:e1) n)t10Ikڏ,` ;̀Xj_"@|M$Y@m -3 -N$w2S2dk`UMRzp^C) 0wه`zGV|vmyo[dnr+~!Y5myKFMm+loa'188V"O[XWv#ű/o8ڟ1~l`/ ɘk}qmo bOIqO뷝5~ܤG仙!}e>}g#{F>ҟ9<'q.? r69]7'xoZN~?`s~OMxD^e'-dS/ᣂ3&PW qQ#-]G]:ڵ~m7/;\q?Gpxvfv:͉]SQذqØvP} ~R 5bF+/o|wmm5u^I鬮s'6a^fGEqm}I1iȉ*{rkϽM+בXKjP[JN*DOq4>W?nɽϦ4O^¢8>f`m9P\ UZ!1E#>o{1irD&prv:+jμʦ~_[}Zĭ|̬Gs_3#ޭ…|Zwiho)lPm:EAMOAJ`$gA|be^X)C~:F +ﮫ^L';/ĬܨqauPָfLN}Bs{:|#.Ms=O({B==3 }J+8 +R8c ==wSgvwBy6 !fM+3]<|6tfxLڮ O%a엂TuZ蛹՟c+ފzz 0y'6㝺\}c:qu鼱]/ 3[_v_\"o#PMkGZh{;#9sګ6*?o-=c`}?b?[&#[:_*BcMs~i ?[VVqZA\yWMxozD?a'l4ݯUýAct~k w'=IonkZ,uNG1_PS߇s5NjRD2fn+V֖rv{oCg.jn]?8IR:6VȄK*2F?s;%kw?ĘȪυE| `K:t4Z)RdS+RBO^ZVɦǻo|>KˬmƲ={pǰ;k\S6kYc.\QNkeԍ݀RjIu`kIMQ49_̃"dVY^3iR#ciSujhwH]ĿmY'Oe'|KW}xVeS}YGO-AiJ>%KeLJvM$'VOFj M^[T$ͳp5l.s-g)$6= +[2;­'gs-Z :4Jv$ 6_Y`Ցǫj^ m+Q?ǔ4ɫq!`'mOtxhp])MG#^h\,?\LC^p_T>FM 7^iH^g\DtCjrQ,Њ*!嫤jC߰J|V vB1-7Ss ĂG00I= ׾=Pg۞=Պa ;'_ζ5V:vR>MCRi]pC#ߙ*b椖1R(:E;Z T +^wdbuy)BG:jdkg0d +D/F^ L~-]3J%y? Wp{7WvqbU2xlS˜W*I[cFȠ#A*dIug2{'XлKjchZ^cU8nqf_gS|##ݺ]0g} -xZ@yuA]6dg_dN;ص`\}YǘSq@1]B ,Khx5 +L{\Bt!C^!9Ųgg^f嬚vH܋H "Sx(`((`õau,`xt|/>q{Wqgm*M6qTZ>&y%l\Ӆ u)U!<stGyX~x8K(m+]Q^:JOTA$SeMa)Km#l߀8W @\}@ls)UV~D菨\ kI93BOK/ZC.19ب^P}0B= +dj[g:ATH>W*^we[@iG~J8EPlSOO,'y৭팶=GnS]ϱG@>a QS{xPLpx@o{ou@_.00N6uXЏq?+Gh uLȟOTviUvt|`Up?aw +*m O@t1e@R.: n;:R&TyQ)=bPIf<}8O;ಿ5~[Om?2oGo=y_\<"@nh$[;Oaro4۫UkyMp^R O :#R?F 3ecyUjTf`o{ߞ;Eg=Q2Sf䑙DxuV?dau]E~1}ww%̮ibћ v/]vy-8k3Foxnʗ gpǭncڼû!\yg<Ϭ^ -&J~XVdzf1xs{y}?ڭ_yU[/?\ڸQznurfpώClF.Ԉ+w2yZE9j.43Jˍ 9D(O +-.wq&y^Uj}t{VQuK.Qd^]pwk) +Ŭx\Ye8R; +-3fʍ[3e9vf:2'{U(k7d"bQfP#*s/n._--L<ŇK.j\5e;gfJPհ]X2va;6謒ǴJ?Y{ UyBKb&H@OJtq6l695ע[.{BZt%Ɨ"f1;ՠ^4T֠wX,vi不@vM..ۻe|7Ʃ +g,t)Y>yAHqKb"i MD=%'f|WAzp{a_]Ž{R*!l&8 hcKS jP:a&: +f_ ra.$lͥEu9=Fp_G;-"pd/K-;03ݏ(ư P}6'Ė6mE=ݠOO!%~ũm)$f"v9:i40T9XP,7+sT]^TqfUg!W|q7= tneԺ~(t/u]$[![J:fT&&-/N˛&ZŕON0S +ޓ7iVE&\e& z5jsy<]PŒEeH3Bn/l7+q^pT A?8?X :ѶJ +ZGKPTyRU´|X7>j{V)6CnX2%~YRB'WJ`9Ng/(ףE +Vpj[k +RM_oo*; 0~DeUDsJde/I?Fw ycv&?MPPU}?OC%K[ }5”\1=Q .wzک"xM݀z@B/6HX  ͺXRab N8fyw>!aiNUZtۏ|9/3Ҭrrြ,@(  +<`?}mU[4'~kMQ~VY֫1~m{_<L^ vqַ gdPCһdڏvTCŽ|^3~t>yf>_IKy9HoǻrT,`b޾{{GJp3Os[k.;1_9;%|gj;'/kORb?yQ(2Y2Ǻf~[~3#!-?/.@&Αlgjl'/mN.{YuɻQ9p:]nx埬;u`#~@u.RwR[mU9 N7=k0ƴxg%EGYhӂ/x \-pΫةe՘BeS;C. V'qif]>YR]ܷDq{'VkAl Z_+Vu/n!cN/<;bfĔU[ +FJUZs3o 51>Q7m|S|GKYJNYFֻɵKv\N`g8ݮrzpj6[x%7pCZ*651}5ڇk:Xrdk1SX=^mP +\N=b6Gg`3%h\ + |F{SsЎhjTexf;Zz1~|W4mjNyk%~=ҩ/CZ ::AFUuM ChD\SmQc <~<7N+?^27IzunH7R±R5LwjA)ӫQUÉYỲ T \#l9e\זњRA4gH\Ew^ÖNf|>W/mPǽޭp4;ϵɳ$Tmy#]/YM +9A+ճn7WS]{9{#u+VstE*N (^u翱쵯6:ƯI?-+#xֻ*¾f:ߴL@.qubJOpV1f͗von窦3S[ƷRA6vW4*ҥN'E;JR,eVdSm^X 65u8_B>v;Uz{:vnN26< rzLc QYjZ7Ziw5R ,[˟Piue Mq)l!b&sdjb=m}KԤoAE;~/)˲TWO5Vj ʩ.gKc[$uHGFr?rDmi{RN7ߊ-8{y3+DNJKΟ` ~^V⽊Fژ:I3kVA{ϚPjwZpPz[dJj>\MgҺR$$xq:e-! +oTС@>j4izƉ$``Pa*b,`~7͡+(EaAXATqNm+yuVw"/ȝ/BcsKQCwCh>'4e1;5~08nkyArPr$W>yJ eSXb&ɥa^g`y^tmKbS DmM(¡Cb8'ͫhN}h[Nݟݴڶ{ZFpMfiiy/`vDlkG̔xvHs3sV^Dչe64ZKpoݵhqƬq^#pVTpwվ`?)]1\:8KXCW_{)nF q s#LjI)B6w۩#"U+g=잘av '\_ tQTӢr1b@\ƍ~DJ"N.&L: YxZkNDՊp?uXs[)0ҩuL8ZLY` +բVXi!Ә CW ,n^'f'ߵՏLJݬODm~H+mk%Xo^gd8/+E9in%=a;PFh"Y }[.dl;\T|^nr+aŒJ%A,XٶR SaR a/J.1Gw.;?>[w砢Qj*@ + 5׋&_SܶmĹ&sk~b&TڭgNa)~\;wKED:<!D 2"deė^?1bSˌ^_y ,C?.4?0L$ϖanqɯ$K={ j,vmz NU-`LAg'˚n}{qqIk2pQ @}"JCak^IC9aħT#)Zs6)-qŀHaK> F0SH: {GhY?J AY(jƤ +tF ]`$#&x:߁3 'x/S<-->% \8Z9VfR)ǃ=.H\oau3ނC|Pn{ n h%xmH箥 ~و}u>fkfCY)Vo!w.jةTS%֯ߞ޲ A |Py8Ԣ|HT-@GP{)㔠ymk"Pk.GYn!wODL;<2fxʤ(@g0@}Ҁ0y] =}72.`: 0.~I3etI0~:Lv!¯3Ɵus8s9J[Mmc 5/$&_׿|k/C]lH{kـCY p9^܎n<}nJ>;N;QȏӲ{x..:ssݞ[CyAM)*q=ʿV(I´s]5K@5}bׁn@,H .er9{uB3|e[0k ^KEkMnԏnqBOn?ҭζfd,_r#Ғ+<#@>M ǹY:lVSB?^̿>/O6'%c9POPln@^bby_P7j݈;nrq~X!U# /l?џ@qǻRC܍zw5y]33Z{p]9?G%p!VՎh'p#ɴGmZ,O}1FYnI7?kLvٓ㭼K厉N8QF>c8o +lvYG ISW6|910W=c / qB_p endstream endobj 288 0 obj <>stream +"`cɱGfd`;m6]GsXS cykpPE@xBGan^|N\8Y5/x*](WoĎSH^{#n%iĚ)VE"73#p䌅  ):/VX"qmĞаNAϗuc͈Zz1?'k=N˟'V+As gƽp +OIM%;y؛73Q~c9W@c/Y^n宾Qtu7E{Wfzlx[׵lu[~V<,=?LщR;9%3^7z9P_NOQrI[y,50Qz\M]#~čevhvCFl l>ղQ2ӆE)r'0ΜW-4SוfB)'P;qP_;{m  @Y/jF6vNjghq?ȵ8XfU0tM?83kKŘM;ijny{E3D{:9YOQdr;V;SVu%vV ͚6hKogu +٢w+sPkRass%џWSA֜+' k?D|Z{6@4N6JblRoYR홛Z5m"Szw[uѰkGׯnP-'a5e]~ʜ"ޕʹWE,a2yl43dੑ!?W#*OAmL5Eӻ|Gs6Um3I\g1f3^ƪ*i0tԔL<1o띹Q7kbe~U:WDso$ᬬ(^'[7n4?n['ZF({zk񝠛BmV߬5Ìq,櫼6<.n״_΂oU;eͫz}UGR0JJUz+S4+}JXvY;S@7e,K:jv͘iU|OD3cܯJ ':6<}[bsEkޣQ2&KO*}U)WVSGgWikiٞߤ,Bn+>1D|֓_?g }z\P ;/]FQm4o4>-~Eٗn<TնmCAE1#9'Y5יksoRUafK\o+^PfM<+Jd R璕~:PHgVGVzۊ%U:f nrW/TŔ +''-;ms產]ᓪ#S [G=9LXvi罱ѹ0@߸jZYJV'UkG=EMUFnavQ6ϛ7h~rBv³cŴo=:m'BeO t@N*N OA`@TN:O,nI<^z[0'*X7ez7L;|NsR=uiP( +K23& (nraqΞ59_\@Dש耗ƫ;Nm"qAIIyR)W')zΫ7TYyf2pT@2^_D.|E  `vt36[+eKh O^cL3 /:7a~%|Lo;"C|0C'܃I߂I+vQ6i0(z$PN  0g]JLEhf3&%9L`a z1I7e2?% 1 Y?mѾX%k>C\0j+jу=NW >[e:AO0?4Xz%.\"M $*$w*/~`\xmLC-}9Y'8΀o<_ x!a&xSr% @ǏK0 " W t.9I/CwU-rUGrz!98 y96xuY@C4&?>`BA lNbi#@= !/9-=xU .A`D>e/~W_#skPbQ6"I( 9敏e@U >P` , +P8k ^IE@PH$ 祖v;iGσs^7Jjz{;+*g_R_#2GցZw{@CKU:wM h[`oqt+=ԁ6@ dug̷-k$!M}Yw?.jIokUErUpKͻ-/t``ܓ}`j)0s70k}(frf z~_lme}8棇ĝ9:Aܡy;}C1usd?7ዯuծi<^2$G$ѯQ_7|>L_;T7wbs.%] ]VPm=ǚT<=z[IWo?hk Xٽu~T[ cwC|Cxx+7dC}$w˃6?=ݻwC vP`cV7;YWt~KyFqʴz?.O? Ц/}owU_~]ulU} W,C,%oжb3Z}`L7.Qk+gvC~Bi׺jzG/wpfNR.O9뾸м>Խ3dnx`昚b(3dabSoGRf{蜺CJ +$^UVccՓ?Qܛ}G-s\a5*+-ků ]Ѩ\6>PBZd0>:=)갭+L\t'l^[uÞ,3UY˃l6? BK\nqL>c7[7^m/,gt3)ȵT(d35i%ב灭A؛ /֠.Ж-l+u.FxM*?Fb>ǛQpF=W[ J\4JJA䵟t'G~t0g NI˕{(Z. ~Lw08emXvgdBۘé]ٳO^(M@]Gk.Af68 +1k~-c *f>`#=nێ7ڶ 2=޽r@dA1^Q0 $QL>uڳz؈*cE9땪g^1̬Q-sFUD!oVgƎܛZ8FfZ9,00Ԫ7/q&1KU%VZJ(ɢBͬl<[ԟ{eS~&̴}N/;z11:+Ad4?3ju tw\IwJA*ޓ_QeoW\E^!XQ4-)e?bv[xH3s 3f~!"=.0iږ FMlA*jE:%ru"䴰LvE=UU:P=.ch z;iRf>~IňnDd 4ٚ r@\yߟR"Sr7dK>1}T_DHxRdqo`ݟcĘXHZ-N3XRE?a/FT_TjT(Vx |%;' !j(>xZM2ȓ.AzĬ]T.ƗJ '߷Vɦon7bFJ VTCO)v6ʹN>J䊗N\p> ΧTwj.n]mk|1ڹ[yΆZ WM+K.Y˱rA݃:試ѐ/Ϩ&SuX8;^rez1l[eEk2W~Jm۾΋^{3¬Y^j ݷxw\I(b߹2N/$pg}X58 0oy!J*MT"bC3g`!鰿M?qVmnҐ},.|y. ŝn8#gU +6~EKrSPzv,z8}q`D=@N ]@Ψ }2X,LKd馛@p W簣6cA,5! j{u}KV y$RH0kj/wcN5uUGZ,&LPq :M$/&Ub̕~-)hvaL޺2&VD^ʉi:i5)Kw L)S L;KP%/Q{NO0L) j&&oJo`׶jIv_Q3uxq:0}Mq +,1v셨;t{5"v5t9K,$DŽ:'عE']>`'-C, 8aԿfobqff$V澶쩎Z\ϲE.ut(>gdQݶV82[9%(| R&^\u4Gfq;%'RZ'Jj  ] +bh&[:+*jޑR4/@zs@s!uOщW ,9@. n>U.W.> 62CJ2^iBG@Wzr7|ܯpW}@5Pg5fey"ZZ9|-TO*,x3'5 蚅۴'; {ƪ +nOonB۶&-Ym`<01&.'x,ILR$MWj_''!odoF[֟ȁooCq}뵻*~bm 7W8_Ђ/m.]yr7 ^T_o?0ۯ#֋?̉ۋnKJԐ s̙ioVOnO wca߻{sKvC|A*l @~A}_)9me7ʵ<2VpuQw^o'}آ!}|Pk]M>+aArːTEfGSA慞͆:@Ls)]_i._cCbS^JX`h@؜k|`]DT0TygCԜAR4udnU'|%>bWOd`D-mvݾ{{}W@O +CӿP`q-gSg){sԘQ5QɲS!+kC0Yޣe{=UCBn7ݏUIv&kEŞMPU(n/3{ՓSvC?&s-̏1rAH~+Þy%ݡέ; cPs.<Ԋ|Ue *3|(Z3YMgݰ`nQG[ZzmR aȡ5gJs3>Y`iT Q63mj)ZUJ+ N Sk 6mX@^ԇYySwXxޭZ{xeUۋU.$w?j+H??Qɿ6k(lcpي w(F(]k\QrZ neU)*Ծ\.Ǎ^fAXjA) xE! W1)^~RK +&Дb|8f!zg&6#7@(r׮:J]U~*5O)FPxOJ! =؞C+7s-s6QpjُɢQ!h_d1X8W^GfkyLSˈ>nj1hڥ^1qc:ue>4HvW)nrOii݂-Xg:+ckeJT)ύQui̼[f6dT}(5T4*‹fnaCw]-]ٙek9lGGbW?l5B2Id aOVQX)q34f33b`EЋLǾ[6t&VgiN*-i8$Aeq>-ޛ&GlvNnbNֽܽe'cv#k@Vv٘c!u0onmx6i}~&)hEh,uت0~9 f\|&#1ޞ~jnGWm>>͎RgiWo 7[[z{VM ?WNZ+{ʹ/U\ʉXu{rDmY.R^%񽺶~,Ʌb$Z&We[؆`iQ"<yQw^MtɹZV}uAD-U8%T"+:grT0oS굆"Y.$Ku]i,0MBnRtIHP(zL:JRQ#Nf)Lm_97wJzsFppr }Y5)mw* $&EgE>`{( dEƫ2ֽ1)H*%} ʥ8\զZkBU +W*{ +mM/U3rGYXR2bDxm B>m #<Mn–'­ĕk"1F`o9 z}ib26xoh(Yf Y*Rm +$gȠc]K aKq)ϓR̕:Ǹc*1+tN,ߏ4)K/Ѥ@ KkqOWu9W5|rf~%-fO 9ϸ*JDg߯"?cY]*Ӯ|ϲu+2YeVȠgdb/xOփ?4՝?%,r[zGޒPE *\^E,3oΕaR2Z(su-ObB 1=i m +AQARn<oR8܀qBx=ru}ZAf(zǸE5~g`è|BWa= l:L'd4|JΖn4}OY0!Si8n f G@,` nw tW@R`l~|}jf3SV;ʍXtS+YBmfA|mmMDOt-}d<҉mNP& HKt!4L,7d[HQ +c@[ 8$(OZkB 9-ȌQ4ϋz0Zj()Tރy41!VMTfJ= +y;9@YP!Ar(k&%^f}P2$YRG @1P?3)rEp؝>%'~]}45=Q +7O;[QC^RDVRH0 \Z؂I&ZM]r  -.hq>% h$<73>UN֍X8kmB)zy4^x]Kn.k Se> V WK0'[#X`Sh9`kf{3'?؇dy ʝ[}珳q+qPq[Om' 텻#%56-kpf M!1JPHnsnKpp3qρ +>y5d9pYz.R6~hb6d>{`@H6 +\}B€P3Y t:f`¼B?Npu0 @hM T# }ZdmRO'ֶ3V|$t8?qy/9+G`:H `2ѻ)~@:@ڬ@' v(gwګI,>X{/ +PI63ϾO74᫘~޿6\[NSqTDZ@mvȞ:bEn1:]\ίz^H8˦[$$iP9;m >z7? _6+ ;``S9QhO4!` Z00F'4WF%z}d_mz2[^;䏜ۄZ{7.]ܭqś d1Y_Y+rgة0m~>C?JW^4L˰o2B/u}ֱ{4Ca?)?7h;'?ρ#"}s WG9Fm +WޥrvNeֿօg_;^OўyӉЙ.4ЅΩtRBojOÆdC sS +$ˌ_배}5ﯞʅhG3NӾvmB=IVϘ^V\-vˬlP8Jf(KI@{jPq{\:6k½XC7RZ`*h*5˺ZsbCMhn~RhDHwBhn6ȑbSCWkK1n d]Jf ]ZjU՚TJ\iUƾ^RC; ?f[ujrI_n{ +Yɉ=8|J&B ┬jk9Ǫ +Yu̞rSSn-^mCRֽby}TM=<c9nIT\5kJSCE:]c}n~uLpL+u'l\{تj,fsNFW91SX,'cN&_{(ᮺO9^dnƼ8dDz5fG@GH/|VΌzV+e崧49}hHo>G+V-}/znm7JfhR8 ќhtA=[7)Vd\fBYx1eT |߃"[nj,WN#=0bw}[:[(ud߇(fsm)w9s]RW +qaa?v9:m5}^_f45N,7sLdF \\>u[zT)C)m"3'S(KNDd[->C8>K_j_, lvJA?o}oD%cL?3a6 }T*қ ,o7b>_݊"=#e6P_QrRݔck/|&(܃6hgKry-ǎm eWC*<̻p gAr(s lb7[moճ׹_UJ[D #M J +Sb2<w0w~x%hoT,T<mCi/nNYכ|EVa2Q U;Cz?pAV&cO, uW]jN /"`?qLHz7 $0@8og[Ϝjǻh4Eh*@msu/_F8|l_A}dOoL$+Ȫf9-@<QzEV0[Yk-W`mmdT3П5WU_G'?O_k|CO4q +̈́4ρzs +dSVB -d!]nx4¹OTOWf6|UpۿJ)U)"ƛ@@`{ lC=nu~__&#|3b_QG/6^ xj\: Z{:V/\Ҋ~}V7m׍ɰ_M׺)=CW^;pxՍ YT>V;Ņ-y< F 9@gۣ+auKƇgfsբe(ȯL ʡʵ?66œҚgS>~=]>fV[kWV):c✨Z\Yj{ xny.D3tPxMT xTT< +yoy]elwraDAZ5c^Z6x߳: cHL09.z>VܲFՎ5lq VՁv94QFp萬[}P_ +鵑.%>Li6+]>F}FAܵSzE'3t,謝,2U*C[m,lr#fANm/U8Ǎ=Oڔo/h +WUs3׺\҃zpae2u1Sh\:OZْw~C{oڮ3M `O'<ʮ96 On4yʅGȘУ7TMk] {}rjFhj FrY6 .PR]'O*}4J]*%_tFbmeړr<lyv\yYgnB pS6>zrtROw!wmgl EIz;i|_:gجǞ7_r +i_{ђJ#gM2i^&((xi2߬ , drb0ε+ϩb٭IeaYWA| ӸRX]~2wucrXo=-r3<|8>y_8 +\.JNEP7McɌħ}iL_J:-d-o"xݧZTTQap)c-ЗՆ%K\4r*\ ٰX_du5n`gI(m^м\v1)Nfm>Fd }'s ,U^Sli C:jAiB\|Zyފ3tlhK_f{3{4k-MX]I[Csn=:}/~ j BT.~ 0o+f'w];]XR_k-"Lu- +,w'VA +6sPf{5MY7N\Hvl3^>dt-Sjcak#(BO<#6H/^WėR'hv 0'O~)8emٮsU1ȱ0eU50tS7H&l͝RQ7"ekK벺uf{'AW=FlDY1$aBW.3lryU3Ԋcֽ-Š0e1%.c5gVw(^c+qhn߅r +k\jcd5QO KM񫕃46nsRse냸Ȋ.3] +f<1J9!hmuZ)Q;'߽9|/2[x(U~%x['0 +9Ku)ϾVkJIsu[RbL <)FSz¥KI˙eʓ EZv#a-vs%R l5"qZ_ 2-Dvp8=H5'{<˃}^pJ{3Kt6`R+ 9x%jO$\}̭ ,~|89氍]la?`L$XEl̇8y<:4w_'R,I˷WorTsRG7[ WyƿS\cB}p+3LE؜˺S(6TWe?vL60Z}tϠB ڸĿvP*b^Vs|"iqaprO bEO&'sm:ʶ'1[wg'ܳN m^y*Æe=0kq +=-BCA+Հ]vDG|p4 6^iXud-J3+xNH@ǖsD?r!B'Nn7m{1ɎrLi_Df3YAázKy-p8%(]ֆ%nb{ޱi{ u8Ѥ=Wr3Q07xåBX[/ U;o6:”6HB'wH-$X&-|^2x}r1ĻMp~Tm> v3DolP|DнdW 87BWU`j1UeJc|V26$ܳvsb*-PIRtceڂ4(ԅd@>e@GO +Iz ~Oÿsit<`AmI"-^;6v'r9𻅔SNJz6hi2];@,4LͼWFIdN9VKkFK|]}ljMA*iEQbd9I +T/|o̵Lm'FW0;8h04lfn;ϓh4iw,g ts+(/nd<[[ڽMdWI'Qo zY8\\0'8MW p'Ӏ+s^pdsVE(i39뙀} uwn!ϢBL1?c-j|VT) \wĪ5`Oz?߱L]|;">A@on5j&$T0 +^2vG@0/ r$V3WkFt&w~+RyzE<P;?OG;?ۿS ǯ_.!ޏҀԮ! vR@W 5|Hn1sgirc1%\3Nm!@b7uWp~B#  ++KjU[&'Y +Pan֜VKٽ$2v-l2\ +GJk n}UpK&|- J@@0k u@mBs#A?2ȁ-^pW\:Z*פC@_vipUYM܂W).^'mM%}c)# +:k}+/;RoS"ƥ_M՟j9RRx +QfpCSv rܮM,=cqҖڱXZd.<iV)1? r*P>b9_vvnӏHCˑ{4. U eHc.ϡYAfL&әc~0}>ޕHoС%PV :ke]x[&ٺ)\bw`99|0RGQ@è҇!q}D hj_gnk{M44N[ z7ܙ&Z*XxXZW-r-~rO]h\A?HA qg];Qٴw^yS+x=-jahh9w>RZ[5/?}GusT=eZV8R5CZWpAtvn÷V-2aڴG,GסԦE]CWVQu[*}r6_nEޱx{3V ay,w]/Oo i~Qy3~Tyh*8}}խT-h; W=WvSᢒjAvnAs[z5duTt9&kFy8ngEmG.$º /wCo-*lSյR=h{vEp>:Íc8q[h^?{ފJѺ]d/jvUX7g\r>_y +V㫹hts*XeC]ȘZ3M}4M wt{~9ϔFzJnһq:,/J9lj\+N]9i ߵ_ZjCҵ_mYEn(99uΔՖ捎56׺ T/ cfSN6tARxf;Hs-bSbDƳz&cʣ+JfɭrX{pgƙ^ϾA_Wy+~Ci(,L՟CM>]D{wͣ(9PˡyziptT4vjŒ Œ묝U6wV 9f+ݟ5>}k) {[(0׺P1Y짬$9t$dir{PoYn^5kmn6Z&Flq#Tg .G L9GRC;,nJG+g^\O򿬫f竿QDo/~Hܜ`8B&"jB]tv65LW*DɔrSҍ882w&ZH[*&Jتanb4!:EfB4#G$"B@ȜVJO}(((}+h!EiJ`l7e4 ҮI\HA"q땱te= ]1;6) T?}kC䨼1̭NzJV=Hpк6yh9y +PTz uwGs|H2+itlZtxP &OdU{9kaB*=ftz'(0CTg`$tF 0yK>@Ov,|Tnľ|ъvX`Ӗ2SD'$"iHvqf)1ߌ4G'T.%XV {`l}nl3KM<¨6[4 +ծ woC>IH&G~12UY}}B'_- wWKPl϶j#b +|~(v>.oJ +a[mOFc/&jo{C ;S((n˞  +`B Bpc&7@2 H5L<rg/MVVw@\J, 9tݝ Y$;WzviP TK^.7Ժ{e^N5 +9jZ3¿W0P$0 @%g|Q&8ŹЗ(lY䫵d|jϕl@Nd?dodXrhXg +K#ы|yGzeoЇc~ G tvd z@Ovݨ]ݤ@dqi:4y4ݓ|C~w)ڰO)yd`[&`O~O\/?zQJpnـ>`y>ņre* +~jnEZ"o6mqv?Of.S.xM8Ҁ>da>%ip|x6GHP<#!wjDDsger>]|lvÈݧP 8nu4iNY){Zh~ɰOЯxC +tuO,|:8yfg0m[A[u{%+7Ӯ 6JMHgκ9w&nW/(we*N`BV}TdV?HZf+:"~578ʪ>ӕ7Ygf¯;}";k{!}.4[R`5vP dޭ>Z:4 i?w馺wʮ=+\̓^i];xN:ޣZuuD{oXĩsCQ=ĵiM?ѫUEU TWunIw[F5[(XHZK>+v-SX|~yndSXǙD[kF!@׺Z:w~rcwlGnK L[DZҨ\J:m}yLuğ*>*߮VP)DؕOAaƘ&Ya3A` 4BxWU/#g4!)G0lCrWʼn866)-⨃Ua:]ΎX ”_J |?yZ8>aʶZs;J)4N1DDC03SVצd +kU5׆h)q^`b/OB/pv﵃g1IhpEf|C]~)ngQ\Hz;'{-ҙ|ХtrX~&+Vd"}jEK´[kE 9xp^~/Eg}LqV:ttt+(ܩTة(]nTP&fO10PF.K쌍ސAk5F1KIvYvے_+n)-+#у7(WϔB銑#qBG_Ύr7VΕN Ah74\ g+w6x8q(wu&KAmuHz 0{-XNѭNsH%}BɊҝ_iv'1FEuScZ+`.@7MUA+J\E!qy^ z 9r[Fg=V*esAg92Z5%'՘_5 +*:]>#qR >+Kq8\:Ja ^Rv^WE 0A~#Nb1#wJRS)RqXhvYAM@O]p/k]+_{nhfMm. LԦmp#U}s OⲞ];9=0b2ѺwݺM^ѥTT[Ro3ٰHOc4hS$_'yQɭ@V2'R3J]WLZTZ` +?sʛ_rkڍ͚hV6rCylUHc=3hNij 7ї r,,U2miK1--*/o΄!244"Nd  ʗBA7Y]f?pЦW>u=}k~yn+I?cwi=zj( LA6(K5YʜDz2LROSvEPe1DV5YEdu54QDYQ5Ksfr$2%1]__UZ?Rک=HaBCMy4M?%Dªr"d vx4􈼈yA`w4gD^^XyF g[Drq}0fZD)sYC㿴`xUeʹVLviP۱Sk(ҠMPؕLj0JCX-T#"j;DP%pEPс}AeK!c6DjW]2MP[3ކvu2]rhݬbmAжC*M1drgޗʔ:t6is<#A~;x" tt#ֶn,4R)^(Uwpj@ߵػSB֭sj{ 8J*7;k#|;!bh}{~C[,̃mOosQ/]e\HÞ4R 弽x\ }#bh1Đ_CS0cHF̈!. gb`XӍ|[uzR%m_@WnCR%1hٽ -~x{yGxNxi!N折ybۈ_"9W]Kq-ZZMY$O>ISÒ$qIΆwC.hłX5b 1"VBX]뀥붸ڕ56uX0ƻ%^V+ȶ}Ԁ>l\ ;e}"bC"ssm'pZ!FR/=saya[+ZN͵^uz +vX˖"V c]EK8ڐz~T΢s|ݑg]}ʏ-`mumj)MdKgv +9$"Lpn4 +p]Rrg~ T'R۫ XmVv@G}Ʋs4]a<ڋ<8Z"ڇu>g}nڍ&!Wyrwv6t!Az5 ŷosMr\\|kTjkTjkTj@N)uͮY9LזNCCԿ2QKUCͬUaȻ2VOƺ~2Vi1]L1gQe=kښuKrig=7i^"\Xw;  9zI#ǰDZCW O p*%yYV|%GZwj4m۳K3jZSU6 A! `<4C[u i=?HLλb[\ʙ~Jl:]<xÓ'8DML"ge1XH?ϑAT^*2(1ᬊdzurkڛlҩ:5,;qv)Nd m#kG:#pd^d.`5󚔾LvcF2. +.%X8><^Iys1N\n)k.1*{zx*]ugyM%ǮYE F^#5糝;~cIXiTF>p4F i|;|J|KJP,rtdڷV *OEJ6[ߘ:« Һ{9t 5G +g:(]cPTך4|ɥWÓpK9l5J:\xxIcz%]8Rf@ +M_\FP`Sl3c70a9G]"44ٳ&-Y?c8qyS-DH\9zvWj{ 4UYRA%ep)8wB*ոRV3J~ojٹ,^3/DSnְrrg_p1u8uD~1^4qmHwr2$iT! +a klAQdrvԿ +#! Xߘk! xe_\28, l +,粦mcb{IZx 3UP*{e @ɬcLgٝN4y^<")exa]_O[T䏳g`(t+.0Fҵrز٭p/,F,-Z|C>!kD;CTjm50SChldE1* $ʣ!r ʸ߰zgjpٟ 8cj k2t g?*?RZüLzcs +<6[xk{-xG|I~X(ݴ~ +3}-lo,ڹ.pHzpdoԄ4f3r]q9Sa ?JF-+rrx1XՌ̸%bO,+;q uLLKG1zQ+a +;"Ueԋ:{qB8 +[I) +eUg`b$'5XH{ sԎ"{C%5P}}2.TkϜفTp*; %WݎvG,̑*%{Y<JFS$OTZp^Ȼ̜ (F=AXM׬!Be6ïl5LA|:W6pBu)v4;l(i1=xe#BwQ~X>z&Cdn8MZrlfi@̮2'@##8 q][3u iiWPBeAiɷjNUog2M=Žc͆܊L7 2]N,NNE34MvMHly&79tC')ÏťRG3N&;KX[[tquHvnRrDw+УXFD2vD%t7*-1pҌrA2J,|VEۺ̂$(&! _XUk ˍFEA̳B,0h/= #ߵ[^SL=QbktV8}a/Q# '&Ry#9}<,b`# bOXQ֦r#pG9~ mDn2]3%YD&5vR +Ͳs׵_B6z`nj%E̗pGr" +J\f&{qi[8S6R[JzFJֻR)>ѵUrs4ufGR+#.m`͘VJ^&?<<*G&4!UAbtlTJ]zݣ|A { +R?|WaiomϽc3#UUw <kCG–"U 615~Yu+WXAEX.$HwM +gaT+]e +۳>if=$k#MڝOiَ/A:U9A]3m*IIZA.W-yͪwjLzb COq?.D3ek( FݡMa +˽cXNs;= qr5tU/XhR#\(fOa{Z&]ӌ; [ +E /+Iܧr'kqN"_,A~t¶\*MsFU 5Êrc̄*y}=H=!V3FBO r Tk ?lSLfbavX*SHP*R +5ޅJ*L_U!dv88eIQؓ SȚO8^9/v+d,W=A^kxFzj  EOnd#˝_ueznJ\䘉g4!6q1˕9dE"F3Yp'2e Vb/Z+FJCN]}?aǸ*I>tX]ywQCk< +zs01TjL?®ST*i:a. h9!aR:M@/ĶGt_21 ʥ,Ņ*6rň{H&5{Џta->TD2P |Ub9.aD˳atķ}3y`* t+֎=!՝z?+~rƁH1i +>ɼUr8Lx(*^4{dÔEeW%hlVCVәōsP{w8^2vjtiz܍C.Owζmgox+BQN +D{u1yҷLtԨ[Q:1J±G>K٬D"zJ:}ZU1f+=IL2gs0$)Y+B g g<@ ̟p|ٗ%f{FFqxhv%+i4xăy}Nf+Oi{H6WjB|:Uw=ٲ͊_T.ẼRYT;Cu1`yiWҟ^c(äQϴWJDI +1H);,qKM]zkreK)99WaV#FxOs3 j<,Mqn18sj£-R_<̬h^ m/X1е6^jY旱q#5>?yQwRL&`0@YkapG2Ch\ʮ9[袭z| ,&;t2[¾d` niw55~t/IOۦZ% +.,3LvF _KB +Otۈ;Gm+H0i 8LzGm&mu\KP2L;m{6rrcvW/?*Tf^$yo Wz-e]f՞]ca9I +aԈ]ڦ +ZIo[T3)nA)ZRQfR]L:IC3l`WDk|e`F[؉(̔o0$;L6QlL{uZݒz:VfYe1!~sE.VM8&Ť,99N4[{Zs&G]*GOuǦmU՝K+͌FZ'}ISA'ۦ%eZbaſ#FH艙tO#dpOgf B膞nWx`m`|r$uF ;49@Nڎ2Yl5L-7ks;hB0֜44F5*WSsVvg6ZAa ?*TDl(|s)lwJ\.0&;~-6iҩOwacw2bljQN^lOQeXxQQ*tPǯb|r+gkavJ i7_؜ڗ{*g9di ̯|꣫ejϦ/J Yq\KTbd.YTOQQ[R"TWmBN@.&hr8g_o6|Dg.-r # nJ#pLmg%skM2i^ET4„mԔ15CyRyqbQ3zV鳃MM/jٞ\ \e1kR5ׂkM؏+l˿~Q_BNӒIo +mMvK~ׅv}^{p"7f|Z T aP/C~؎#,Lރ ɠNVضwVɻ.̳[@ J\㾻Y+h:_ _k)za32:W}x%QCo,qjN?F [/XVNkqQ#9t[R|֭Y&oV9l[wȃ~bcǼjyj;j SoqĜn`CV}3=_47?p:Ko-[lȏm᧕k>:D?*TG[^iC>8vo9)˨rmfnUTsmzsص{ph[{m ~r\rC}ԗ܌*є$m@CbkӉ3?=q*ɾ]QSViQωGߦV1g?*>*gU!z]JwQRFl2D^j9y p=Z sS i5COb_AFGh*AˑȜ֢?0_ +Oӈ:f2!yr:y8 5z;뗠?Pd'\i?_mfDG |fs )˕C~)&t6%$AC) ~ۆ4bNb?P%J9mQt[mC6PmN ,/lܖc T/ܕX'ee(:7fl_"jK҇ ʲEQ.[\h +QDg̙_K!uz6ssѵ5P-aio۷mn;֘"t!O3ߙ6}ZmcoU㾐ob҄;E^Ft2 ޒuX_ʞO'Ϲ +`)Z!Za*L8£SxW?(] ggWMԋNgz&Z4uR[ *AdJ,!j[FVUz J},Xp&C.NjV+`, ī0UN^s_DZs+{g!Y5{VU-KgcR=k)eahQdٶÃc%drW!qh?0,MJPErՋβMQmֳqDЗ&Z[-cesyyk.px]wё1 DƐrrp D[:G7]iD^c֡3AQpI<ҙYǁ~]XO}>QcNsDc5utN2'ъGi%U,F.P[;:cer,$gN[$ZWD+pvz&x&zHK  酇DAq)(<_ci٦q]w踉ۂiaTpnZ"Ҭqq QAPdA?ǛD{$z h#E nRtA5?PD!Y=[*tXȅ% +R;A4`;XIc#(BN52N~&OgW Rvz5E}*uKcr^oYި`ȭ_?3iTɷ絓+Ŕi֔o1Yўjw3qayep.+H'$ϯIE[;oʣۚvuSN&ű8]q'\T>mcunx?D9۟K}å[Ƕ븿kХ6mC'q%kHu5ocx6mHM !f֖4|ۘ*㭶Z:ȷ+aBzXnESe'Bʟ!o9ޟ'3_Œ ,̟*|-Gࣁow덐$Q9||'Y+Hy>Y-7Csvl +DTͽwz27V$C&nOR [::ZJ,dT2\ 8FPpD] +Ft_X. Ξ3 ٥f`ia)yX|9-{JgZXѳv%($Bg||h3 $A_IukOt9q +tH󞕅21*Bw: *n/X"VUv"vʫExZF+juslp"~~2\/1-2Zn.'r`sK@]nD<5I2>x-׹Ӓ*wݒ~,?u#p+IP/ϧ6!W2+O0txdS:BZ#j 69's{̽XOqhO)c/qjMa8I Nti \ +b@!S`DisS~R0Ƣ^L9 \8NÇ&ki>Ɉoq^^4fݷ8 ܵ67x9%j<$B4%썐K!٦@<1Dr.j%S&p+SߙHd4rJ;B +G9A^:3 M.|g|y}0=IP{GjMd1fI/au|,{vQuYb, 8*71wQVrGϛ=f봣GEE Ac|V.o+aY[ac/l>n{ l q5#O"!ZoȘ8Χ;hnM>ZWyܻ".0]i_0DS |8n`cf1>%rjD~S)k5K!JCݬW4xfc%Dd 6DD}fKA;K4hs[<# ª{ A!T Y!b|K`|o`o\yC"5 f&)t$-? ,4l `ac#Y)gu|SZbx;=W+w땧YKӐvqb +Wґ"JZ# WJLDW>ݔ~qm\kRwo3 YD`.@4Y7xD1Ļ"ܞۋy0E:ֱDٕ"&s9M\AX)bs˶n 1ܓ~C8xMA39Ћl`-"$7N\E}g~[niYs D+ ޏ!qs1.qs:)F1CoctL(E FQт`t4 0C'@ Fh/`脿Gb?б6. Aw,> #p}9,0+*\6犽_3zxO1~3N&<4H=U 1&n|a o +(2& B3M!1=Ď،gGq2kw%;P1űo9=`W,]gk&q&;J](0ā=UDr__d4?4#JsSA.&=́E0M='<=-zv:lk#Ly+^<9&*~_sz$8]eY^[ +M4Od& >;)ػ[|OER3G&]~8[340>?_n* NKx8ֲIE< _y"aWzJWE/"XNkSДXRu4Hx#C :e~!%f~~ *KAqB]bݡg H7<2i#aЄ"<2d PЀJ ;Zs 1<2|gYPz?܁"p7ѲnQ~Ǽw@}h+ᘶ_X">Gk9)zN$n)&'lזOՀ 9o{6"#mvbe2?h\c;Sjd<+VƳd"Ӭ #WmVKnA6!_9wnymA;_BF N_ s_5J৷ѽҌۇg;=5Tʘ.~ :DHE"RGұWwo R!^sD*lT؎k&1W^A/M}9H#g oC[} + f| +9/_½﷤sLv +G@8 +P8nH%REd!Ӓ7WU̍t},bMMDyE8ac7۽ð.~5@ADpn{Pynf꺼0wxx_X5G^_X&6 *^cq<؏WXpQ-lx;CI{5 'HؐE*qn]&=Nt, ZI$FÏ;sE%:UaQu=nVTVuytfhf% @Hk1ZD1zZS-4n]4x}c4Ō M^F bVMe4W4x[@=| M|m[hgH鸰t>7uV_쥫xT2ks>lv{Z6׫cu<߮Wǯ]E|O.2!!&b!r +~ +'g_d;jrB|c⭰HXv1QZL`meVv߻6B#̨g/+\|ZU(ZB$;Zˡ_Ao>~]`7~!xQ +UE`ᵏ -D;V&ZmB_U2Uk9a]A +w7|%_7!GrŻu_p'|`Y+UOt6pG%SN+qz;CYjDCԦ{XD>>A|a=Wx;oM9sFqv 5xW\ &jT + ݪ'!¯u&$Ĥ(c}^xaLn(~ߕn])Ĥve%_(pҾ6I 3C-70=b~y"KqVc]M£o_¸xz]_*RM+e0Dc\AD0NDMA[WM!݈fo?DGśԬKv)c Dix8 z[E^xpj~:t23jvQV@x]^`,;VcB֮U_6`pfCJQG@9UΆ f֜FLo]ZD &v~ELҠLe::?Xevr"AW@}Y"FQơѢֽ$sT:C?<#~A'2m0զƣA*f'E͠mCIbVv dNE@ߪ̂;tTfI +VN2 Py%MuǸyTړ MKqzu|w5ݽ\eK,-~$Pįu HK<-?Xuz:Ʈ)N-"Ch$A(O?ML"ʸn!,oф(O/+/ja'`qI#!Qz&5ygJwoh=cz|^둕@v^Gxj?)}Mk@2V=ʲ #^X^%e?i]jʮ} +rR>+idi9PGb`52BcϪ(Zg{?HzC=Dz.Oc,0vHrMX {Hb0"Pb1l+(@@ bq(@R0yb!G>),7WQb1w- OX@j{T_퓢|cyG=|fDXA( +^](}oU|T씝S$A}~7TwC'nQn]?~o QO+m^׏{ F]+u3C=Cr}ɡ+XO'<4~Q2Tߩ G\gyp+~v>3P5)UclC#ή){]ׯw_N R?oqE=Wof ~^;-_ǧnEt='D߽*UO4vj]?aMx~|gxI|%BEmgu,ѹʹ߭Z=/l{U1=Z)>&"~46*%TW~j{pUom"}YO u\-.CZTPەLw٫uӻu>q p﷤su]A]v TbHXĒ'udVccoWMV"a>GIvG]˳? (ίbsq~qOWVP@s+eh@qoG#W mgMf(7T4\<]u1Zm;bSovCI;2ԏf*vPV?"'|TPhcf~.nf:ᖓpQl^ydRcӡQ@> 02%8:'ø!3眠٤Qk\LLrMGwLY &§#> z{=^Z"uScj 2kS"+}|Y}JGi'qp ~d!hkJڳfO3.i&tܬ`UIO|ibvJFv2MdvDU+5*k x[f=oTjhTRa˩PK +H,OoT~ڬҬ ;{5Y!GoֳP+lZ} -rw;:]ߘSg&}pu7 rstR653o >_;}\U1ԣɼ&lDvC8EP(bԡpIq &qG4xF/XF`&̸&4! Aaj&3`m8pkh3p2&|9'$cթEJA@8nԸqn$RW ~.nJ&؀"sKI5Ahc:V54ǗĦ)NU]H#ձy%s(xī:hekT5]3Hm3:[z%kҋ<Y ;: ma\MmtԐ[K`Gm:őaĨ[7% ,|mľu&Jg7պ7<j/P=楉 1B;[ñϚ`֭cWEfZrn%{j3ƂEK">j u{֔jR ʝ ݇ҭ\;; `HP^&X%d(P`CDꔰY`Q_au΄dO/XDfDe¤[Jr ExXJͷE'\}aP à!060f1])0 u6Y*{ jb87`%0n+9^nMhUNAH: 1T)WTok*u]cPп8vkʉ7o5A< JKjeJٮRōco5}&ޔP?fw?@s'h2`c㱹D !|KtDȈ2-M}z7'D<%/'{ѥ'4s=i.!#-5p˔wqݑ  J1>g+]FtN]NI+1ܿ< ׌LXT7_|0yW9[ ? + ]^ƽ7ۀ&,O?3xkHxA|RKӭgRG3 qrSƇoј3iAS|t3f"AXz꫅Fz@&p*'7nE\'Aٛ &Q0-%xgH̰m5GD1_H˰ ׫bV{Hl~YC źi-‚ 8m{{DPi#VMOTs*] 3@ezF[rK&HgH{ +XC? +=q*k^ZHT`r7WRB:[Fc$y?%}|#1PgT@R9#= !@4 cD]: 8J樮%R9<֋HY TGBnGpGEGC/q8C +bx$Pdi6%\?P%J9md?g4ن2֑€"Ը6وѹ+NʾQtnl)PZ#-Tg)`i +J1!U|kd)|is#@`\j'Ac4^C2Dz%h&J#RTQ{VDgPa< +": _ӈ$ Yk&Qv~F')׍X5ABagjC\|D3)g73IYE`zO4B9(>6YfWKl +^M?lG?G2Q!(|ryY'b0łPͣf"4*v,(&`+)y0FT1sOc3.]D"b[݊N;K.g"TΪԇܔvVYn͑P׸@6e?nMlJ >uL5x3gS+9벎P`:g3;ۧ(YM%Z(/eB.sGzk{=롅]z~7 +|nUfB%+7K=Q=Ns8[ØNhaܷg'p<PZFnaռ艘 +skc4 c.D+!z`U<D*[wC#0t|SrÛd4BF""`m“"&PKsY@?N_®f4F]U"7-ַ݃%/0uęa /";I7b%Vr,X]ayT 6P0ś %arۃǶ +-+pu~[x[dXvGhd = b#b>3O/ =Tb]~ WDBM;T&m* @oH ";N"Bn2ݝ $Q2,ڻu. 0&qwTuFMDy~zG 49y4y"_ ^[& 7sXBo4>m284T b6Q Oğ>ӸH5"6)|m#k2s7 +1!DOX<ا=)Psg)~ '~^*`1>6u>61S|l&2ϯ:H6QX-,*n 88uQP5`jďݥYgdqMn-6":ZCouȻ@9[ 4Q}P'yct蒗*a-*VCQI~Q|(;Q 3% ufZzel3+O,cɩ^K/ϥLza+ ƺ75\h?n1a G[Lp2rbz^S/O@O@Z#Ksr=ft#>ue.6"sGχN~[t],8kV ,J{xRG< Ck=G؎|wWL~Q\拿5a +q<غf~J|7V6\G-kY +I|E.i9~._ixKQ[mXy[-^^$vܢ 5<{sKoÿB>-[!'P*amfnjPE5G@$m* M--\3Ė….&inLT M>7uѱ# u1@o|& A@mTMq`ʊ7ŚP jR$qKTUYcG (0&, F2AAB4-0 JCd@8at0sd:9n+15op,sl$ TMW٠X +IfW6I aF#h4nY0{l6$ X$caPPS5|dxcPt7Ð9c::C`|ܳfbC=7Q +1-CG Gspl28U ܍l` +`n`,*;\4`|{A1Xan>Pk qFQѕQǠ* xoPc2,_@MMb!",L Ϡ ^03ԬR y)U a+F)'`\@U-Zn=yqi +w6U[+y$Z6fǫ\%;;׏+FzN箎#-4ooJ쿴η(/ s՞-J-LtKVӆ,ne4g&/Z Pov7&X2iOcö[FpX y~[iN_/?%6 ͵Am*N=}.?(vӬ1)Yi|}7FmJKQ;SN?BZKTcW~#/bnlUSNVXǃԟy-W+J9c4oӣb+I'瞟2sr{KvoN7'9wNY=[f9J[,'>O,' I~P<5VeXN[!IIT?>a9WXNCL:c%_I変fILH='y8S?رݱ(ھ9C9iػ{HroN&b ^ޛ|Kt??7g ؏_)/8.gXɗn`eV*TN.2N\f>[^ +'|f%ch%ٙɇ2[Hk7ߖ&Z|oNgB,'S^^ު9-45Es礥uߜMW,]~Mէ׹+?^u˗.鑛X2KWKWˇ[ʷZ\c'yJ,|oKW7]KM/YMSc@nbKߚ~T[ޙ14zґ޽*|-//땵ֆu7FeO/R/R~vդo[dnz:U8e%f+ERX}@2rJO[l5f5$o[Q-Rȟ|{_t{9nisPT+OUwp:_ +Ͼ͟~Z +˹统_+S;ɳͮ3Wvv+WٛqXӅ/ if_b|M͹>&mpdiPʹitn:mj%i Q[ƀ]1yD'6u]tzr*淍fhb|m@yB~n."!樚-FC4SkE? U+5rk_tD@vv9ўv7r=&0KDq`2:#7 C +i +hrE +%tK R&a +h:tɈO(*Rp|< 1@h`)NhQDDF'aF:b!҉J3DU0CZFED#CΆ-G fP/0Ȑ=cw2;~p(abrK#/q<ض'"K6XHFYQn> +u%uA#pWbDO  50; +Fi|B"%P0'1/{Px<"O$` Qv`G"ZI]!'䠈"WWxؖs΁BG }4VW:RJd$QĎ"kI[T.d9Dm,l_F1G|9텔AF 1V{_/Rԅ mճ#^qCLC6Y%2v\HE ) T PYe Ddch-&0%!K%ƛaEɰB,nNB[t(F$t~职A/v;ƙS1d(0MR"냩P`jW;F^Lz(ܴ~s(Y^}[k"t F*`"f'sa[ήϳrхaTYZ r+n),ʑOq7yNz#*#g3<7Fvzn;ؒk9HƝXtGǽ&<5<GM&N`Bc; 9++ nOO#FWZ҉D5,8%Dzēiűl^;ZOKkr JZޑZ}Jz,u- endstream endobj 289 0 obj <>stream +%AI12_CompressedDataxkɑ% ?~h@4Sxi LhT0(V,Xs7EJ+mȸp7_ͳ o~'M7{]}ǿ_x^|W/Ͻz7}wzŻ^O߽ы{q+crl?_~w/޽{pa~WF_|]| %߿yz?{ÛzW&PLG{ӏ&ƋWLrRwЙn/eR?Kb61j]f]v~0;WpɈo:xgg->=nϵ౜?h?ׇu=\uzޯoo7x3ݤfYops}sss{n۩Mrn|]#}調A^#=NN5ˏ6o˶n۶oWan>ie_m_7ƫ*]Wz]WWW? 0a>,>X>ttgNVkr4=>xpj6ۧ0]O7mHc2;iIkҞ!]ܦ綌ϐC=e1͛}uu>u1*9iӑBu5cG1 &4Gd3 +*SO8@W=ccy|L_9dޚTiGm.&c#[SOCgβ2376WdRf475f4OIaߚ~umefzb ņԛh5ͤb,M&@nM$^r7MN&S7)skVfx1Ld&{K&&M۸LK47gsGC7}ꏶUWM^R]ddO~k(mÝro%'F0j8[Kg#F:ۥihKt םֹ_[~/fՏڟk{s^xe.ѕss(}Xd~o}JԒc;93r0?Ց19n(p't7T_Oqcu;֓g9@9vΑ)1 Qaq B bSU2,n鼸\7QPATr5Tz\._`. \mr554H5klmv.( \]SϸLAֹsGGρÞ%J+n}?cG)] P]:Pس\\iYB6&# 2RI. -:BEm& ]2v|p/Ł9$:#npF<}Kʄ#5ș:#tŞ!LU*^OZU-O?e}Ց6?Ց>ՑZ>Ց!Hz gD${KF:nt\8蠆 $]p>(Jk:-pnr^-pe?m>YjO/d'ҏ%{$Wz%سwJ?&{+w#7P`q,kk_,^{N+rcku\xZ%}O3yن9sZJ3'qRv;T^r7 :m&x]?J+OɿnM\a|&Sܗa_~Li8k<鮏hY&(/^p_c)mA@xc#_0Wt)ԕ]]^9.91+ B=~!F.32"6QFTlz16S>0BvcPʟ3Vgj1L:>[B[FJNbH͏QTtVNF:5펯4uȓUΓ0 i*ğ`a|doG<=)g/ܽ.)9Rsr`>֓c;{Nq+y`pc3dh<}}'G ~*}jid;<EO")5C=&/1h )"C(?17'/o2r{yߣ}q%W gIx!Y=3BN[l;9ǁ\6[ 9B&bh9kɁzr!;:=Ȓf6.-kc!6”UcF!=Yp:I6{N 泎?5|'s$[n3?ӊô0AmD.y2M\E"߁QX[LEKuKco9{ Y8 8Ge?I)yMg/gmũG#Hv@*T2یMFl Tv0 +{NB(TuE=fPRǽaTd +z|;@.TLv8qJEOSբMPfq f<S:L3t7mWԞPg&lpSSNǞVX;jW5y0o$?j`Xj`n-DƴRAؙLAҹs".\b:}0gp(Ca[RyךeLؘuZ*zWsu'VZIܭҳrCud8۟w 9p̉)B?|d]r˟YreW 0M+9k{L'}2Qq )<ٞrtOMhLc.6Uk嗋aH|ۓqEyO긝Uaaaaaa?o쁟888'_q=9}cq5(~*!B@ԕ*"u- 춓/ym(W0U\oU]bWWMRƛ&uʾ8W|Vle %^ŗ{k0׹F?Άy߄*Ν9($;J7iև2n:$-x6[e+m2(2{7!WLb̹YRsg8L:(Q]FuuM7ugL=0nqCB@(cQ .Qlw|zp4_Ӣ#q|R02`@qE$Liey6O'er-u::Dy@p(KwF'qGE! +JgU1i^\/ +dlc^]W{-B:*S _sU|Xm!_wTTקeY~`җR^ژR]ܗ~Y2؇"h#(V>.& Z5Vx&yAeM!Xz +=#,~ {AT P 25JU0*@*ʸ@ +TH]qWϏ V +w s}"5+5K|j%ر;r=/%]7\nA#4QjN{:'/g ?4Ӓh.o +Kx( B1AG#|-~RA/^p[IZ@d!1]tʒF/ ` B13I 284x[i8OB6HSq]d\ +o9NB A@e Gw/C.p;{ s='{r As^8I4/8))iÓ;ݑgIDTA{zxS;yj7O9kbDkτs'_Wa!gA/ *++'o t&ɴ{޲=k,'}CiB:_r-W;>s("<<v^1Ks/+m g.lsu~-*sZeI/(iϙLvBfEM | ktT+{^#4^?+>j΂ +u?.|*ڙZ~Dbݹ'ut( UڑV;$aUd*?XO\cԩ'G=@JԃOi#syJ5IFM52Z)??O!Rv)oN0u RR;̢ʏ4FqEw^"P_)A(۔5"^hҊjg q]gzQnSTD ؝dt,-\=m$'O~=Ap8~s7y>E/܉&c\ԄcHs`/ABC(/~z=raކeeOaO)w9lӿ~.\C8OƸ>|.\sO_3/k'5%0<:* Q TZX2/v~6#{5bzIy%vC\|0EgkX&yǮ?ZƏ7?ba[5+ 6p +vtǜ^;b)a)uҀjS(;1t9ԝs?]G:HꎴCQ#>-G +PW4{it's+S?#q+x`K?aFZrxˁ_T! R}F y=>-"B[LNÁ|~~yX7a9S3U4QzqjnsRs|;QD,TX3:d\f|h:k,xΤ7ޮu3l;1{,GWc}:=],wmG,#74evO Y_ԕE Pl:} ID]OB= +zˉvnn~+ǽV\uQP*uWJUT*r5\1Jw ɇ:qu8]粸-ĥ\ J먂X7x=nwEsX^7yuz~{0#xB]B2bt'p1A#c0# #fm U~s'UKvy^yϞU]˷e_~wo쟿}wF!-VfyrbZKSfOe_v?/~~?g+xI<;{ƀ~ٓo?z޾yO?%G?Y/oz/mξw__p̙_0lԆm4݄i¬hY2k1O=޹\kVיv|=4aSi0&KqQ/ m/g3'_ HpfƋ !t,6i ޹،bʆ=ڨN76)6lJSj0gglqeZd 4 rƁ+``|:& Ӓ'Q l\)9 6*3N9Q1|L?f0iyڰAc-ь`~M=jzXvm3-|A! Lhb*66[| |]oLfo i?϶tt[E<#,R i2v|ٴ g U;38B¨n2/Mb^n(&L nwI c023JLI6蝻Ĺxc0)ZVqDl1Ѯm^61me\0.2E7a6 2v6Ī+y50ifI؈mq~L^"oKyS3jpj0f6OR8se?Oip&v>Ͷ %j_6ci^1=Ը-^?Y XLx&2O _jTW &G̛ `Iya6a y Nm[\Wm 8.8ʛ`vm]nfe127"#JTN, v7r4RsSɬEbo(O3;b'Pd˄͙ M-9 yK($.20C‡M:k6ҴCǔ"ݵt$~]3W6U !`2u{oGۺpVwFDmDtT<4ڤXv"8a6u˶ ӽ"[j̦oX +a/`3؄>w#$e&)Ûk }G6\9̀Ҝ|(NX}*S?P({td5A711Ok6yڰ{ÁȚ#=w1暠}GJa_`}6X#/umM+wK 4 0|`pdq>Ç^~7ݝ z1.:H7n'C_mdna,u93g]&<3esPnûz#XD|7X!$cjHLS-ɂU7ckD4Dw#A'j2I[a#86QjR66 <&܃x6*v7n;d60vS[( tW +8x:K×f#uJI ΀$Nkqh-8 i 1 g:pe?l"'' WbK`r[2zIw l){46P;[m+X]24783_o<-d F7XNгy/G#oxK/JTMa?)Iu#}ɞlF=i 7˦e3ipG`n NLv'.TN);mNp*/g#/LAK]ixئۨs3s -BB s~}04&`Lfu"3$0ՆL%]l.#2a6/jSܨtІeZ`OÌ'w={a"4/ɛy`\ -v4`aiŵ`_.s`n8/7mOv;x)n`pjnxOɦ s,( ᖥ'0`pƅ.Ӆd &*3!H1~(ch]E!|;@rYBҞ4GUSyaJיYRؗ:0r~h'XR<ʙO@1;Tc@ hUg7jD T+Vhf\i!೽WA*3l {u6"a;"vA/9SWMմagx垒Gڤb +w0Hrz3ȌL7kO녴l;g+U8Jp%z`L?ka#)d#Sf,tDndlcڵ>,!b#ܖn!4#@Xr0I*K +C]0{yc&GNr\pcm lE>k_XMz w`aӂE!- !$[< ӡ$U,g5p;ƉɐGfZ]IZyec,wDrqNU&"G!V9D͉i&a%V-Ǽfō̢8:Z4 $8ܯ V13mX\bg&-ru9%;kww9%g߹$Vx%o<rK\$=.gj!_Ά2 + i4z"?9wReYQ0FJb6N.?RJV<JMjCG*%]SJ#ULiRnokt`++p'}j[q@xb+2"|X +r0KcF!հytYle<)+K1^a +7"2TO@,! MźT!qٮ%lm fт9QPI VSQ Tuފnv^%ܷ/Q\ng)1b4ƥ WIJe%y⾺kc /{?V{uGR +WJyR[-YoRgQکT6OOij/3|]evvzJ cvE.f'3g/Ȟ=78q٦ygyg8NL`9H6_g|yb\NcGE"'ya[lrëhPx哫wWљ,:&ړvh68-϶O[wLu1o|+:mfjͶ5 ;u^dNp,Z\.HuY&򨠥ʚt[oSުşc:"h\<'"eCk z%IǢ5vSoU81[q:a>I Q&a>M2ܽ=B@_z<5J 3p#X"fP#A/+٨o@=ZA#q/Dq|51!ŽdoFEp3!>(]7Y3д8 Zﻶ( :cxzT +o߸-٢ȠS]CQU_3]1qԞ/G1H+ndN?okggk9C5aP jÑY1AfȠvw`ęuw_ G5{viX` ]jlpki](OR>Ŵ'`ߙbZD7_6_>`0X}v7ߗ,(ѱ rl/>YdDo +EP&1\)<&6F2m6Y ;bmeMT6=IĬF+SNo1JPFQSMaA\򘫂JmBw3QX ]LaoK>~Z0"$ZamQ4Br laɕ 3DŽ;]+aWlU0!p7ф^2V1!FMd1GM0iw1(^ ?Q 1Қ/v +|&j77y=ل3?{=o#++aƺ.ܷ<FlXP0 m?|'&?A%ć&mA"N4adR $H,8h@"5"Hf9u_SA"p0u'$fb~ D@5Lۧ'ƩD\t'V (Ym"@*$m@\!4_ R|j;urL(Rx]ȎGy1a3?5Oa +!;/!{-xHxK6vJvf6ŽxΰxpqʎǝMxO#aǃfM]F;q&Xʎ?]l?Ԏw#xhuȌ5&ㇻgVL-+Yu@;CÈ?A2 +G$+$i*VFEE-Pl~˨Xw3`L_ltU@Fy[~qE]ӃrGlϢ6|&T]A eF2\DiMX &FLh]E1 +FhDfڴ)Ăzj-3< 3ʹ j(U ᖎ1=Avz8& (Ss9M,4,DY)#;u +(£̀oj`61K,J` EOfZg]AZUHm,dϖxI׺T$7a!zG5"5w][ OML.ķrji;XSeٴMM(S8_ )hS,W2q\ +qJI ecZhrB^44 GJkA +p@Bw ;.%AuRbKЄ.D&NC:#&#<(cY`3ƥQ"Y] +*(&" L0ʺz(ƣ){|{ ಺ۙ2Hbq*(g%tXr9=N?wIĄ AbE)#t'3=j[I8g{~ A ƾaa%󪍙uI 5|$2>%$ͨoR 5g#Ac#|"ܥYX”ƻT` 8ٯGD §h P`\1's +:Q蕭%{Frg,!rn<K0H~_@cFT⣣@S +y;)}  dPk-D*ȄS62uU42LM1.%'JQJ0MJTpM"1Bߺ&omB d`"` s_ # +jiMQL +ڥ>*"׾H88)D "PH;S,l6)OJZ5))KF5/BA.3FP +>gPIIU (9ըI+VLzspR E]FW/~Ee(pX/PRv"xf5գhe)v*IUYX6v2 NQ+qc +27Vb2FK:׮ZH)#29ʝl9=q=}6獗Wv;Buݺ0WoSC`<of +,n!"h0C<'\$z]A7LB8vd2&ćIS;*+.L<`-x^][;hGJD6] xE#Q5wuY.1/2ʺ\ MiQ~e*Qyr2WMq= W=GgJr6*&&jg +P]@[|]zyl~J{Łeh:4$y^+$k#9@,^a袨)"^BU!I :ˎ=(׬$Ng9/kP\x +5"*C9XohKMVE] ' CJP T84s9tatΊ"WECC?.t0ITc^Eawya]^eQL^>e28=+ˤeeQ_(J浐ue; ID~!_$€V"i]Ths4o&Ҩ>Ӹc76_MID4*F3iVPI+-%j ;up# +*K$|F  u]V4{鼂&GWKVKʈkV8C)kexU+kE^3jmqQ6!"^,. G< Y#GY4WSPBmGS +S|a#/ +KXT){El<(JK 2(U-ruk(-50f.-%el,d][\DQӾ3S&"EgIk6D1ffe*oսub^iDPuDSCAIT +AdC/x -GUȂDʱYvI"^1Ds@:̄ 2mDf",Ȃh A (~H"-vA½ BC1F+ \7o[!&Vd5a{}~ + y~f5M~ųpc£Çr8hrO9G:~B&?z +MSv/~t8\|7z.K|6+0|"Ej45̼Am9/۪|GSsc3~_]'(߄Ə擱r~kOr?|i[y󬾶9-lm&Fḿ?.HwAme%jk1DWsDt5_f4RSs%ި,X%SS_X$>/H8A Нz.Qih;S]5m.7=P0A=[{92>Ӱ M@ , eS$< +{BPaS |0{֍R{Ɂ=!؅L$0E)m*H()4'9X%P/t T~gFAjB 313 G74/qcf쏠NAc(>!P< ?A2 +AB>w)/3{e4!\SzEHju6jdz&ڦIk 5ګ@1,ƛN-Zut~ eB%v0`kyAf5Y4T#ŠF{olF&Ttp=i;X<5Ag7:m0JBGӦ-)HҙlM݉4~u1: M͇"ńoR=RL ^M2[}DՒNT!hIՐZWJ_`[DJKyْCWl+wƸb ܢ R՜t! U:SG۩󙸢s&j5U51bcV۶:I@SOmn('ysKMsc/5SF)DI^#~Ո/zI3/gC1P@)#7(]$Z9Qi5:ʏ: JARFRGr]t]R&RQZB6ڢGJ+KzP6zUJvuщS:hJVFczul5&aChcj,%բm.2 Uf6RlCkckXy*CP=a\f&}jeƪL]uIq5K4%qtAVeWC1 c<6TYe&a!T!ȩDCa 6M(:OāLp%2r5:(Qv-F:! +gMmgfh{5}cj{"O΂|l2mx9B{$`J%f0C9AW ϓ)XޒZp gBK@ft"cBA ~Hkܸ,'(9\5xA7vRW͚LHi쳾[[A GXJ vaZ aI20Ғr6 4~. V\B-$<)Ԑl8qIqOѝF(.2Vˌͥ/rB8g' _~D?i=#c;ͣCeN<-K0B$0Zb$qDQaK!L#{9*ʙuxO0IE]''U,g5p񇃨J:42d/gFnf +K.4\mGd]r"/Dr5*7HZB}v(6CnGm"y&cɁYmF9e +ն˴rM*N"7mqgWKɅ,n^f1L9+*br7\nr1K&.q];%c,j"KfE, "SdABR RE)`L-P""}AFPF:gԪLu6k< +%I)RȩQ*EJX s +¤)X&OAFCTMd Ѕ8^*'U!A) +6zBҗN]•ttE>+Bڨ,P5,6" +ЮsFb= +&4Rй1uXcr7F20zc(=LNETY%+ ܒ=P+YteXnc5 u16ѯvr_+,Gg?,ߢi,Zȍ\.pW{e3pOwOYn2:*V+JK wjiE*ȚA2&mS~q㊶ƺ*7>P^o4#7KT.B)1Uc[o3B1(]W<~`=2T x +ߴgm7Mt$K7,'D~PbyvDBn9Ů# No_7 nu] <#_vPaͣkխYu5Yu>Ar,9Gej*oh ,*c|Jiεq_Ugv^Ҭ~uY>֓ y-rRuHYt/FqZzkr>H:X{l~Y6X쥅(܆8Z:׋)dMZڊnPqqS*<`9.:Y!h4gs hC $Pͨ lm` }%bѢ\ؖG>1#n+Z斑Gg ՁWMz5W̩zjX:p,Z"4pX"BHwܝ\gA+܆G"ԩ)oev »̩H`R+ujc0eXIu%Xq:֩tIޣA9ȽvL'' fPG qd_=+GJm=>-)&lPo9p!5bG LNqwc!@=V"?9GbgK{M(Gqg)" &8CZB{(dj'u+eF6xB'DpB iؒQM{sW!>Q)C?%z HUH[_'H''eGOe E茿-ԇ5wX Wꕜ`Bbgiw3aX/NVAn61FU?;@'C[o1 ov̾ u(v{3Bsx vj_35ܾb k MђC[ŷ.ɚ17>gʭ~^qJ !0~g/xS4?TZhp~cniKpgXK9ԛ%Z`;'-ˌ0Tҳ/Tw' }UX8X„Y< +J'"qv&^v#@ +7B"vh 2s\g4CwdsrB\a ggΩ%3*?!ryx'}$fs kV 9 ti}2!Nq L?̚QZşII 6&;O5;t]u]5fv?ow\uIVs\少:{nR.vu`28vpu +`;0ȿf;جb;gg--#lҐ= lna;h뇥b;rہ%Lf;{fl-ۡGbÈ!jz:ׁmmn뜮f=E mG 9wG.T߶Uw?M@z?j45yOytt|At8Gg!g>l%z!0mwD_@=<ֹk$C1Q(ji/#DP2.g-. _,.koWf7lI#7E{ipζ/<)OPp{iLB0/[uڣsHPB  ȳ# {!lRD^< 10 FCeN u pa`噜3 ]:OGb`g#ц̝f@Yqӎي tH5X$?9?37|m-61 +y,aUD~xv<+D^gLO.;c^Q@H `J N*{%2ÈBȼ Qwu^<+m^ ȁ|-0,o1M.{!;p" Fn~Cаc^o{@?jK|BXe;v:rL<40"iw^7呁*:0[@%r9#K``h%i\m/"w&.O A>#N55-ב2fP=Krs%dasi!y|3 817yR*^W˄FB.xӏH&) 7$,L7 Xa"k*u%^3ԈWH(@!^Q?yipaq#^1 +/{NCԌyr +O +;t\5f(:/1 NP4ddB `PwS+7 +á SnP f(~2Cf(C"k~ee$XO^f(J mDR3P /)* +(ѭlLl^doMul|rPgl"D3dCF"#ڱB[wٕآ!،>(]@Jsh ֲ)aT| ;d4]!YX3X +=s*;+Ae'=͙! ɘe}idV+YWЄJvKe^{{&8j{6[3A­pˍ 4|I܏5)=:P4S&m'l_8du:,62Lޘ3Ry)rf(W'Q&UFdF⃞ia2h;*!mp"+ $L-r(&T/ՀPXϏtvCָuDd(0SQF=nrYu.'\˝몹4gΠuҗyݣQ$ +ca#"8@ث_PQGw=H +Bj8אLNA&s٩ԫVՅwtRvsw-6z{@M3ÖQC -kZMK Sέ޶VNn)zo#/M2vq#}N#M1^H!V"űRx&2yۄl(es][9sG$|eoQW.ފ9C΋v{-7n,e%0hR~vaK2 +HYk|wY==%! HxkȊt/hvhyKpq~bQ`xO$1&а ŭ.g-V7w *g&\XTc˶F/V34V0#_m^ ӓO +T'l.;{s"_#.w(Oҙ:qj䈣p5_<4DB9'fks3fRStQuBc4(˔ig h T!rBЏaˍu: ɔylw~\Դ3P?:;xd nu6.G`Ig#gH G']OJi\GWDϚsfy 9_6cC670lwTVaΒ 6:мc.8+dSf7cr.te] +} $:N>XY2`Yl[)ڇjb h IvƺY+k"NP>]0Aދ d|L6^sJ׃0H3BP@ZlO*0)(MNi3E1 vGL7r @KN +d"rJLjZ^K̖|C +a,9\9QKm^"eO %I-( M,!)y["uTׅ>[b3V{a`ۖR΄VSqՐ< +D,Gִ *R< PJ'c B6b0Cʵ⌧HꋒUp+S H/tb|5ChrVن;I"uY/̦\xoE G, +lhi؂1BšH* ET1c#ʒ%â@wedT2 [FSb3d{ /z*l4~la:zs(d|"-Xeg_60VOP0aL_/=ub`lS `c?CAl>~.h˷^gR-q\*p (Gp(ʤf.q@m;3! +gLrZER'I *\=ejOIl +'T;*Sɭ 1I#X$S.+_:Ơdt6x uFF bP]T!P +vzw;"A[a^,H7(BgӜr}b hUDd]hhcnNW}(lB)՜ae<12=z7k|g~(dڮwE:@ȎsY*PhZ#F 8/*^z ky50ɣCGq95%%P gi*[V;Jh8h IHj#R xKҙp]gn<307`Q}f-tL9A1e smO-[~] r|WtJ:_j&WT,::yژ -/I1B#.Q$+c/idmveڽ 01f^04b*Z#1f-Ťc ŠSycA^4W [gvXڿx@3H+kTj*S5TAE{FP^]F8A%{FPɞTה$dO% Q5 ^r@5{M=j( +T$fO SAj핂(+ Q$Dў +T5 *SABE=B^WK##lv-q )HѻGe$0vs9 <5<3gؙ4g ;z/v3誱g-g xx`\=G-[΄@a?BA + <dmn! fAAg3`"G3荥 +|ykdxqJݧiQNr=C>m$gaL/@ {>r *3x =x4,{ۧ;3~W_jT:#Hh8:đC )u4H@bGvTp:jv$`G;PGÎ!~T:2?*H5?*H +RGQ u)P5?*X +VGQu?:GO"_Ȏ ++c;2`I#eRN~5R(}w^ux»cMgP1#6hB .h@\ E3:f| A0n p3 ATp f +/vNk ?,0 @ f b4(^@N  :)1x.If ώQ@d oXC-QN& qdXL~ 0l%v_yV5y0BA= @TX 7'BBX Č*zTU7F4zpպn3^-#I{bXFF;TSʼoG5&ewf?j43̫I(FIY"D'U! }r dS$;=+ nEibR>xS|f\ь%}NP>)y,k:}قxbuB4oid"D^|[!׌MRMll%MmD'2|%p +P6Sa0`eΪ8 ׮*θM(원p޻\$yW0'$2k3MKG0A iQmi! ޽FDfDUl6xB$jZUYy*]&9A ]U~v M=56qO_{q"&qGHd\NoP~eqjxMeTۤyjgT|»9.˟6R'G\ge%㍉*9]EW6KKv,8!嶝g~dOI/|͊g?lw;R+yBe{ZKuY1װ1?[E&*Gj'j5[lw,[X}6kK({-8/o>֣% ][ûa 1,i~;$Rv35 k_JY,!5ڛvWWɤ]Wc,*e6T +gCQVh?y޻3@Л''uY0^uݷ5@Jz[-idl/=z%r?emƨSc}K{'~!lg+J&ɊY;+0x%J{7,1zǭ ijO@2?S%j^ 7&|^4tkXw6fWߘ1B^qw 8gaOZWxfa10>s]}@(s&`?2rZLn 'ch#8Y +\3^GHVZ$TT^J=]OL_﫻KAv4cQ ܤ:'/Nql{Tw3!M9"163"Uۻ3c_ézn:V/RUKҝXoF˟|z(R3Vp\E+zeX:>VӗcX|梠\Ir%/:$Z$t:\!ԤV\ֽpםu;/vuzim*7G(uӝ.!oKټbzImx+O'J;0^>2nxFqÛ }{PMc@ +f.:ŞY&(%*mur b 4ut:n쨨Ϥv\Tֈze7 e]< NGYJR|D+*/E J4L,Ɔ-2!zy%n#k,̠J(غpW`onV7ѸþxQ-c[7I,gq6Z?*nUGĻ?z;Y=UY/ {.{Z%_^ɀCf7JP۱C0Pq@OBrXh\Oxf=C01~m=F%<#cǏviXxTsT>sPbKگ_/z*C׏&^]ImE/W6/A&ƬAW[ϭy&k.Mz1ELPr3@FywH̆FGT(KnsVL~?yy|vf1*SX TF\3h 0L_qukF&GF딯ycq_uT?iuMmHBc5/4jNPzݎX/z߿ +g"؄r/6|yilr,8uW?GUqDqc UXwxKg~j8iXvܕx TQq!Uij>'v>J9/T#h[ Uaj"~؈*ʼnW3ڮsOpL/cLq +f)߱;r~Ү[;w*~SϺ3 Y;K`\ƈ;P/y#>qy\:g Kay)ң5^D@gܮԻy#4PĚ꓌|"[uDlq1:^#6ύ?x`i8ocD;Z8eyGRũ),gF2!F7#:v"#Z6,#K;5;-ۨ9H0CMU}i<ȑB/{͑j[ҙ]L-B˦`]'kՍȻڽM7%kV+r:M_'% >\l5kqXhAL + +DLZi1{A ++= 㰈OP|Wayę7"b9ʧj cZt㎩mZ?Z$h_Oe1|e]eK[>?oFijcpƯ}qU>7z,/-}H]rEHqGf9B4)[hy=ر4Hl짷PFKO(.w2lc9QW["48n|Ѵdb"U:Me\A|"Wz (V&0B 8/ qx,Fؙĵ| = cIφ1Ja.0THzǰП5^EKWm\|G7w܌v6frcl1Q#<1=33cY92\d9zdAe"3'HQ, $C\1[xګUڡ>oTn>kmh]͔i 7i/']ݼ>v&$*Aʾ\Yhe6gCӀ}*aZ8%mXmwYO>c{$#!>0'|Q[g %ł%G]s=Yo:g?=04NnSfn"nGc]{s:#-)*.A^4MVzjEDDR֫QPpbxBNmn7:qq9I`V\O3" j‘ш؀AF==5d <]^a5=?w1O+꥽_?ҮU +bzVk jD^dcXC^Kחws4At>ܥ$5N54R!5#qkG,g6OK=Vnm>=(f=WvҾ+-rUvPJeħz>'+ Q`Rsv{F ǂMOe;Uʱtisͮ]8OU3aRnv;N{ l#֞ᡩFxbo16.l qcz܋1G=k^d?EXgoo~/?o~/zT3۝} uCOo??B^W8Wd~~G;s_|oog_ﻆ_~;_w;Xo~Ow|odGs[|,.l?t1KO ?O ?o__w_$h#-@oU/hS~b-H~L??|._gv_~*kz<髟f븢O~k_/?83m7m?[\ Rl/ݨ2~GcPWMWheRU&"^dZU$DPT<@L ,䥱hc$B`t62detMZ ٬ZN ϵZ4YJj^U©s}+6W+:;ӶbgٕGJɢv5p=ەj$wx˧t,au)eaQm>ˋ:XȬ\aCRE_: #"@Ce 7o؊Q <6mq~˥HxWKY{Z*Ez0bL"+ . s,` ;EJyp 3^7,ؙa\j7d :7t, bw¶x8Qi(O$ԃw +WF8d@$\뛅2TP_I!k^6>Ko#,mcPg(EJ)3乻 +b^wE(3IL0&FLUo$AaSWHJ ʉ8VT7$A[- 3nV!ot1<47U>F鶻nJ\LXx]ܽJQ}ߏ2z0"BnbqϪ]^uv+鸌2ˋLMDw$T:"37c7JUL۝tra%jVWVˈvNrpx'49YwI Ґm;+RU=޻aJv?eqw"\è (CӳT Frl$9n6p@T*S gaF\$ f_l Hqr +۬3W{_+qY1]Ɵ5#ۏsUa7R)]q AùX,0gYv +вe :.oE8% ^ɀ,07WkgK]MݟI( q3%7)z'IHj<<%WX*B$۶V 5\71hsoe &2iצ5P46 vZSFxdyj NK_s!O=i3.q04z.yQ;7ޯa&vx̱|7NSxY #J`̿X(LhY +95S0MF5E~kR2ʰiiN c~s!~wa4omvtxS_O+Y@r Q=C:$aZg/E|IONB(|%ߛDs+N[?u)1-sZUln .,RVMjڵ_|5_f7+28,[jC0k]bʈ]D+ +X2MiQ C~"h"pv-&O;E #A\aNܣUN,٤ةt)Vca@*oIÌ:Fv[6F@&vḭJ1BحI~=kމv%x*LգqZ, +zOAVq8N/%6WL}u7IrY{t}'7a}@Q Ea/.!gf=k'QȶZyۋ>o+a6{n\ڕ[E^m/G04pB|34[U 8mi",֙Gۛyz50j^YZM n : +> fA +ѽ7!RgnTaX"FVL50Xýp`%5xY?vLC݃az0ps1oj ]m(=2@,Tc~UKtoG i@ Kys%@fW>bIF 5,YG[l1~pثejn,Qy(X ΰ$EYQ`y;7G3w '0:SPl\`廴-B(ذMvQGf,eZ̰v#4.N=@mX]TJ M&c+e=kj}U.Ȓr ]W[*Y#E<ˮlYn"\-v\UNQҒD?ϳ[0X2!gE(hi^i(_ڴrmq%[!º;I{MJK8ݡ,=zv8x&Z%]HCNNV[~y "7@b56D*w.[U21}>Y/kH,:1JIP8 fsUtܶ.1PZhօuBmMԈq=B,Nɚ6`<5Z`bݚS5`ȵ龜ZSkPl?'2˜QVu -(APgI*,x4%Q + +%h-.GZK wRy%lZ!˦']P$B :YQs1V HIbi&,ʻ,JřCWGCdHTDCE;Y~Z +pCHeʱڙ48ǽ= pXD+AP4Et_nrm*(J}Ճa 7@d3/3Gdd N!lw*1JLHDMQ! T.!V!u+i}S 9}VjՄV1gd48=ߩp+=4,N3f1ߔSd&-0͸RۼQ׭IOW +lL%TEVv8#! +l/!7A{(WһkFlwKA?9UffKnS{W+VEBF4Tz*;5".BW-:V.C +#t3XU%t.ְ#Oy(7\]\N >9+@ʞऩ@Wg`iJ~V4%VWWl,I~/̔dbt)ߥrMJ>0 +Te/7YsI۷g=@FDTpLgPN mO"uY5 @ +d cb}g\M3} +Q[&\ +ԈJ+,5rZRIUdHui ndȝJ. n-20#>˴ÉGHZHE))-|gȦ^xr #IlLv.RAr*10rswE:\*u܄mlZZ=hvb6'1&8'~e *m4` c%ajF]-bXԎEyI,L}cq8K#Pvvb}Tz4R]=Jze)ܽ S.;r:.XXV e%NINkIE*tiCyvǘppFxR* C2bfbZ? kW^VC59S9LtS@e߽l *|LE|ڲ7Ĩ8 !OR(Zݹ7IpnR!yoi xqtAc!]HCۙV'*WS1[yg(!oPgTLFnn,v5@(Q͝}B,g u&5P#3sFlft|>QHq*QXsXNO(X +pׄ;m+`6J85[jU,"M8L_L^U [9)zRsfKy_*,,2(2ⴘW x^zڢυ 'Q ˌ#ۛy1ϰ-T 9#ڪ{1R\H mjqV)(Հ?Z3M6gnRlk4dÕ!qoQϐfۨUoQYBjvY!{&7&G"KIӧ{GTV hir^g^k u=K' r)g&fSW +_}Gm6Z1*ƅ{T}?,HV`Bbg$-v& }Uܼi}"ADgZyl/yCJg*|E,{WN4ab\kKM,{%ۼt{T!+35Գ:SuFa9l=Sʗ$>Jڧ~LrGd$ZrU74k'?iLRֲL6@ +Xcm=>iE +*F$r-e_(G0 6e)CkCKޜǻJ% *p p% rI-Kf:isY;N?֛I>]eŎSwg3(:=#ؓ:O1!iuZpu{$9b ;x +׎:%;f5ӯBϲ*>>w.[MKlScgPGE<SG0>=|U^[t|)0ܾOLnqjVZTR +7Go YgW^%kLj阮ΨOw"]5,/?)x87\JN[JS2)}T%lFui}6.H8!,<hN^nt¾+USHɃ2ԒU" +hb,ݩV{,%/v=dQr,2D5d;+"C? #Y u"9y4p5Ë>*/kT;t{ğ)A؂wvЮTڵ͠ێX.Ƌ6,*5V`V5^\TռXa2"1/}ϟsAJRԋAfJD%?Ұj:mPjS2Y(ܖA;_иOf["5ZPI+@+oavA25tJas敤 RQVHsf&=Nph!H|Lyf~n #=!"-Kzh_BKXlА e 9N,LK#V aEf jY,K ϐjڪO=|K֒`Mn(.jjf쵼V{&DI߻o1TC2XBPCvq +8eo,E \uW`=imkT7Q?HNۼ4}GâVZizu+F{Pd1_|iq6wgIi +CĬ4^k^џ-ґ +[9F[{{X֐K#m +>Рg叹<3bIĶp21AacTZvY(,fr^XjTD`4F^O]nr:TRjT*{#,PAV:JޏiإC7 P0 #݃.g$RԚ*EjQ6V[͢.sr]jZ6g{H$.#T%d8j% Jlk8P9*A6@Le=]rsVS v7lxPSUY)6YV_Ta%*Di'aE1f/F)ܢWʭrd'~|LhDQCӎӲ@VEaIWi ][p[.u٬jD{|y4uocYd.wu&sO'&ET{@"L2mh(q +&s2 Tw$lьBB`sW|{GTrx5sm#81-r);3q#G«Bc}&ҬOݫ^zr劺W޲RL7F[y֐o veq2}u P]llhc_`efsq-AkgMs beC +b ^ޮ-T"S}4R, +VP&C[SbAq_BFeR=m`@(] *a7QBﰕ8H#~(XAMӽ*)Qmo"P]:H[tw徒 +$q CO.A^Fi|2vFM<9Q)# 3kpJtX!l]2~ܩx +2ks ܶm[ӋB"&sFh-"-UlfUhe*nm:7j>mCiSV:%cH$/GFKmзqVSҢ\&=Llpc2Sr٧tA'(f^{0#wƣTICâ1$݈ Z\fvQI_oeQVq)Uc `x +UWՌOXBW5Q0@1؉f<,hހ~Ff90 Q&MR1m^- N]^UT q1ߪB}ck^Ϯ)[>v0#TM,"Q2F#<6?ԑr\F%%KTV)o5&?bj4MOٴ˘&A6OYaD"OnnM<7-}ݏ`UJ.[Sgl% +8 +Xh'@ͻBlhj]yfxHH9JSf*sK@1RU$k"9ZQo*riؼDN cUP UR2ScMn>J5]b+D}y2Ʌ͌/"QbӚͼjmIOx=5&gz,wi6@UHquHEo *Ӄ'XD_{p߶nDUuiv jnsbyyfu7O~R5P[¤苨Gnhl0z/Q +xnBaFn!D:E\}qH +#k;>J^`DO|J^c?fZC?X5G~#8 l1|(?Wo?oƇ=hb M C5VXË)4,T~ĀW,&fT>-0T7M(4&e 5v 祮4ԓ&ֆf^&Λ&İm41 &&˾%>jk&ֆFY@ 70Oz&FجĒ%ibH ۑhbĔ^4n&UUgS*q &&KayİV +"{!Uabɒ`b01~wL{Lq2Vu+2&6- ĈUC$Bq-{ɚyb2bK81%İTU'քHK8 +k{'ƢXpb DoƉaDd8'M{a(818&9qb|`Ɖ5*o8u[ I6Ć!Ħѓ]-@ +ĉ1X뾻4Lذ9NL#IOX{ʼnЏiOXS[{‰5>N 'z8˄'‰5Ă2N8a8a X;BxЕ&ɖibfH413cUUYb4%ƕTK%wYbf %4X;ze,1,oZYbMG, cZ/XCy,1KLàg0(YYbM %A[ѬN,z%Pb?#4ba,,&Aݐ%dcgKeiN$XbDpV #d1%Fڃ%FƣĈXnĘk2Kkai.zHj%F*S)< S/ĚaK%Ɠ#hZXb/gRa)da,,1.dxZ(KN,1>kXSyĚ^,1ͬ%ĽN,&0΃%y%ګOYnb)L#S&IuĦ`~UJ3 +$fLS>7IL$BžHbg$1Y +ILgHbH:3IL%$15)7ILgXW.`Ib]̙$eOX)٨$1$1թQIbIb]LFg:^$1$1,$MÚIbA*$1Y$13IZ$'I]Hb $F +EA*I+x$W$1y%E#%,(@b 1 1$gAbHĺF]1U@bI 1*C HĺfH 'ȳf@b8$֔sO 1# $F,* 12H'1 1@b( 1e3HLHcy$F $d 1;ge _$\1o|Qu#$ƻ[vy3GL"#1sd1}΃#|QV8b-$ODGipN4$4W:yaʗ1GfT8bk~pd12G Ë#p6t2Gl+]8bg;qĆ18bdaBI] Ca IϷΫ9a$1dYFL<0Lj񷖔* >80b2FN`x^#&#b1br2FL/#b޳\I1E$xˆYIˆi|bĔ12FL=1b3FĽS#_ƈQP0b;0bP2FL_O#&Cƈ#/1bX cĸ#zh_BFЊq#`&#.R1bpHƈ`Xc+F-#&ksf9F #.Ӷ`zW#b؊1b] +#F\ňMKƈ%gս_0bބJd2F OشFL?`Ę<1Y FLƈiV0b8+FL2/X׋1b+F,YRĴF1#&S+cĦ!cĦ50b-{ƈqbň)pV0b]a'F`ň-1"o# X)Ĉɘ1b*F #iƈɐ1bv#F`ĈV{1go#GZ1bMSƈֿ#&kƈĂӇ?1bsOk"6=1b+FzňA=1U,#f,O#&K;1je +FR1bӒ1bf&{`(}`T31b1 +_12FFl`ĨycĬ@1c*FlZ2F,Y#֎ ڳ&u#&#6ulbĤu #Q1bÒ1b1x#&FJ;cĆ1bĭFG ad.#Ö1b;cdxb*F#6'q#6,#6F2S5aQ1bĀ+FLׂ3cˆz3cz1b F Cƈ'F cƈYO.c+FlFl#4yƈu'F̖τSedˆͿFlKs-aĘ^1/1O#13F CaxaĸSwˆͿF̌ #̌Sl`$1b]}#&֌5(1B/XςS\T.1 +El2El"Lӷ=)bJgBI1Q1"6 +2EoN(SĦ!QĦ)b=RH#*SXWa"&"g%{E"1Bc(b'*FSiX6ލ_]z&:bJ %vU~cu3>L\Ozض ^Q s|m&v!4 Bc`X^g*]̰l T*1L}D5a"s6yax: +g\.a*W`Yn[Q{gal5Ya 0>gkk&I~l?'(lt v1aژ-}PPfZ@†!q mE)a\"H~aԷFqqm䃉A7Z`TxU GѦ8JkG:&k :` [ A]`|(ez×ZM9U;\AwO/4/Rۑ_-^~Q\ U,Oo?Kx/SYeiX+KaJRrq//l- }Ijc +$[$s0t߃,ރQ4WK^'ˆZecP_嘘/{#>1_J.U̗/NKQV0_JoAp{/a{k%|ɢ<(_X>w/'rLmǤ|fSG|\5)_x z?ǯ9vMmYQ9 C#B)_kPL$\K-*v|*& M/c|m$wNR+E|!:v#/K[n⋴E _v;D,x/t~סv3ý[P%;Oȓrbm!X/zGmӂ%r {M2ѻV붼Tл!ӻ1]R-\ ޅgպQ$z0dz4:Ker2{ K8{RV1}$y(dԒ.|)Jƭ߅Qwahbl9 &k3d]B^h.]]}% 4$4zY^!lrB[:b㨻+]Ð].p"%[wA< 5a |`.ՊlK[2REٮ2)#ӻ=Z#7]wa'] +=]ӻtġ)0wn*˅4B+ %mޅqn0]Ӑ]4# |V]$ޅaW]RE.3RW.TM엱$|\w>G |4$|0i;#2-<*x +K1RL:%ބ%Z]˿ܟE)\$ߥ=bQH503 cTFE]SK58ZEk"w +KqgGsIcGwIπ$YHQ[E[]xgޥ[/.2ǻ r+uB_O޳Qf$h{.j8#]T3KmH}.65:ܱ \^A:$ +FmEh@uIGfRg.Ah>7"0]wtm@O3D*Zk;]x-X#ЀлX]X% +cѵ+kN7}?ׁW. ULR¦W ]:\IX.UmU JхbBIU@t̓)]pO]7!@t CFt1]-vˌ.i GuHe +kZյ,N1 1#nߵNR״dRW:k5H]1FA"uzuXp.H]X:+KY +fA겼rLR,ԅUnm$l UZH]cGD#H]PH].3q^LRq R/غe}|#:K%Gu CAuM,rQK -եQ=@uI %.1e2$*c`]Q]Lv$ TM-娮iɨi TBg .ޛleK}M+ &6a);Ln\]xgW.'a4ڔQvҥWrJUtɲ;Kz:Sbt+~ܓ҅7.IA +Jg:zQ4+YkZ҅n-pAߺ=,]e5re9P0?00&KH 5:K%ʱ8WEMJMäqM-+ӟQ:W+R^; %ߚƠoQ̯7'%ig`B[qq[d5-5bluň3[ +->}퓽%q{kCss8[>zbp9kK, lκNְd0:}K0,NߒB/[j; Q8;AzE|#{[5mn sKUҟ[}:z+ݪB2}KV +xRi-=GM²Lh,Am1Pӷ[(4[ZfϠiER4η) o,goz EEA"2OoaU+[:r4/U=d]}¢oo) 6[V!vװ.-XEY&O U"g)1F*YsjT +Q&g3lD˱9Kş w6n$aŦL͢*Kf݋3뺬>4#01뢷l90K^9HR}ac:f ZybaYMY9/VֵȨ,C-ouI`)8YUϘ˫%PėϕeFE^@dQzrm+ZMu7X oIAǺ{e8Q`c36O Rt,N +c]e2l 6!D|GX[:Kk`,lVkWOQ/T]ۀbXcgL,tRD,yv6z.ՑzYB/o4cLh@F-Xgnm6W8w!&:`JE}㺮AxYЗZwptU߶¼YG^6W-WJ+p+ T JބDRNt9IRh+6Wb(!WJ++^Ys܂xU5j +JV(x%bO^^ W=}=xŢ)+e͵3 +D+YUZ+,* } J(J9-0yxW8]]axNdlp"SĆĻRסuJic E]I rs?yW'JtJlJ?2JKbλV1Nz+YT(-*:2WX?ueQSbREi@^!ר2˂uޚEOHv{0.ne9Ҷ[yk^=zaxem+۝9WJN:WJkfժw&JH"JJ!;^ `HE$PH^It#a+øx%I+q{|BfT5W%1Wf&7W- Է&KydjZ@mԕ|{xE2Jxxw[XRRRUQ܂h:bP!jΫZB^)tWKІ5BxT]i¹dڕ TiWm{ƾwkr+!~TJ^>toZ,CA"uW +<+a ╚RpYWJ(W8Z$^L.3<]E;]@|숳ޕ> b0( Um+ +<"+&Ze2 _CxUL}Yp-X+*5tw;{syѵ9JE ̻Q`λ4N9L xI WYSޕ2ixWӐK+'ޕD+G)cVJ„J6w%e0hϼ&skV@a'8xWXQ2Iqw;Ѯ1hWMu$!>aW}0ƀ]@]5_Tؕd3 + J ! -î$aW+J] yzv*8jYiWjV"Ӯdݝde +=yDRiW MnA⨍R^BAA)Y]4 +vHiݗ@ 0VD\]ZdeL%hW +z/+_JQV8J]Td3JF]ɰ[~B=%W3J3J5 +ԕ do)uŭ7QW'9(/Z'DB]QW:NO6PWXVm2JVUJA˾%f& +Ϸ +4VD9"ը3K+[Urﯜca]*A`]a(+,<,+Tˣ ֕6R +֕,uV֕6* ֕Q+ (U:luEa!jsWX4Vyl@Wl83XXU%D3‰u cP,&er% +r%"YAbמ)WڢVx )W~DjzcwӺZ-qxWP%4LkPʝWq%s`80ץD\MC\MkpTȧ>]0teջi(fw-e*n uh#kV+cUx+ ЕϤ+YWXEp%Z֭PW +*6+Y6fin,Wv%2 +ARy=W%v&j ]T@WvtjLzOZuT.qjKD؃p%йVT^|+Lx+OD~StәU+2bTL0vZ 0d6VqXuFr !8jU6Zݷ(f@ IKVK fU ][;@Va +#J꺢 4Ua "a5-aΰt47zJ$;a.5p_EfD"L+C^e6>@WAbб̳Q('U +"w;`#RΨ(`M*j-*4 d4$N4:д xP}\[pd^"Mw&U-8U E*J}]PXq! UӒ!Ufe Hm+w ʌ*lJA:\&* t=[S>PyЩҗ#luIl#MEuU(vƽ{op!aQT5JjA ;L*B]TH* 3JG]/ɃG_ZQA ӨjjEu)ER멒?IfY+@ +-N KUT$!Wldo?8^X^WtޯY *mXlL * 466_JF CžwPPm%[ ^U"$yʌpƳ9TM?tE27 32BEevQo +dޫJ2u:o?Be&n(T(v=CbCEJXûchM` Bx=X?f@ \! T 7 5 Tlx +;.vPBw5'w*<3)T(p-)7VY@v- T[*SgAM{*2pXK*kƳT`P1 *lAw4-5 Y3x״GPT؇( O_ *P2J"u[e=_`fP! *jFPuýzTM| ا=)2jT٪]ʖeφW1*|zx@ TK H.E˾A˃:ŠZBPm)T SZqġB*ITfX/>-$1 +ߊ'f>3@T9MRvDu9 +R2jDzN-RnD&@TC)]R2D+ יJmDe O8J>JMe NB$*Z^Y-u'Q ْ'UHh`vޢ(a?QVpHId;a3)oi J(S(NfxgPS(968T6qSpR9 +Ne J_N~fHơN*g%p//ZtZ }3E/(TZmSu1TN&0Tڭcda1T:q1T& 5Br*QK*C̡ڢsHQaLpkoP&;0T. 8C*>E)S1T8h!0T(.-$ C#)E`dž'A*[[P!jw1T,DŪOΡZNЂB Pcͣʪ,B}ZAkmB ANf@K%{~rJ-_"3{JAs㨴KSBZbƲ[st7RWNw+Gu77t tjj蒋8g ;%2RsvLANc涷ۻ9~qlڠ8E5PWlLõz$vALl;DcA5W?`Lw07Nu*yk| ʩ$4s JY|`jAe"R'!WߐਚGK<*s ,0R5JIDfh6k@ cRug_;` +۶JjmժProqGDm&HIlMJJt֯ + y|m8hjG⓺ѩ6mU(,=sX8ZlYK)DdQOU*2RIp8f>4x/wf1U/ʙPUKUL J +XؕcPחxm |GBNU9yx2z2ˎ/n51ZTszj;(_ե Ҝ4d-`၊C/U;ɮTt9q($eJəoKO&kj;eq{nĉJ_U |_%8p+KS>L42^E:X'@)fQB+Q{%:N8ӒOQe_FSV}rny4QH㞨ZJw7ŷhf*Ց<\*T k|2Ea`^ӄ+ՔE=US[qZ}GH^g^״/]Xn[a*c2Z/u9R\QR2|Px#g|!#v[=A 5XʽW[ՒC)m޴R-5K)R}V [Iu8? ;irSTv^5!ev-eɗWAalBxV7:PzA3s@c/Jk* /w[Tw~H-p3P;Cg=Xl^VRO#fM1<558}eAt"<fH1%߱ tT" +0i$SY=K=K)[ej.U.<%6QfgPʅbeTkӣ>f_;at5!`jF&M\e4 yGiHIcᐅ:gxM1RsR~)6_/dE2֑`fZ6<膲=2qN:Y0,[vJ%uSTaJdjDyt"kd:ovlT/ԓ/A#6Gc[|G]aAO!&T~C:QJ.{HUUS%.”_(ƪP8 xLq[,Tal{cKMlWlSWV7=8@>`s7) +rVYiJD{Π.: +mNuҭS.c*Xbp++Gj=iind)qe/ؾ8<Jv/ nJ=7P' +OK~V)qc3NNï:0((|}V&Sg +R˞kn9amoUNJ2ت*>E^ +4}9SwX]WG|շ:ܜYwzTh +%Kծބ>L,$;wv1V,7ޭW=pn'nq΅SWV2T%IeQ}VARwjud)c9K*zIz"۷;i'uNFO+_яdq\uc5# 8 f߼{3KmBeS~MDqXkaλyr[ݛҥu.ͽ)u+\N񘙴T!;r"=j0|cyi, ; {X +;S<><qlC>2R/%[Unu1UFE\D2Īݘ]S e,Юe㖦ID%.wVKqFfZ-T c1] ntW3e2Cq|usQuU:;) 5[z5)Z)- 󋋣'`!B󮊊{>:M½K-3ɛԱPFaLᶔ6eY9T(6z3] zToԇfmlVU;cx|z8pmv&+ڴiQ祍qmڗna"R(KCa_6 "yØUV=ia?M-THumS({Zi7eᾤak:7Aݘ\]FH͎YJڗ~zIl|ɱ5]Gtzd*J+T11Hmŝtz[eݷ7#T@]Kta.mM]ܬqT-F44quY_~Y` R,Ef)xۣD@PXz,]RmYR00|Tfv9{b^ḪȀ% +(BK}|ڰ;dLvD@1e3(Y)jJ7jھR.aMu%hzk`tIڪ8j~lGVϓgHvkqfGFVJ!}ж1ntc~<$ 8SᔳKcW@R~͝cҟ펻٬[ s[0Ӱ+8m^qG.i\o endstream endobj 290 0 obj <>stream +d4ރ,ٵL0}~ĔHR1C!X3rmXK:i~}yęy.Mer[QQ_H2)IMv߲W$pRN{qJJCG_Cq@R={[o6!)f!l$h&hNE8| +-V,4:uu^>Gl [ݜeʬ)L>EsmŜj,ZM\aE'eE34DI,h`r7 +LARlI9aU2IyUzH:r}T+lliVy] KN c8D;)cCzV>$AXJۖ_=QY1_2m%$BUr|'c4\iMqw”-phI)6 %O c(QFSgZvS"줲^ڠ+jzBg~l#q{ )m+8*9:Ɩ2k^ynBVcӊX>gS"@0/iHn +{O*jqrV7)'m")cSJE B5x(kota f uqu' uvwylKmٱ2}(eB8@`nNRat a;͠^^+x`TJNgG7NةDE8S?Կ-ҫ%Eܜ'Yr'ydN\U(NaGџN&5J$XHt0NwG!ҥ!E SP"VIKԵQ̆鐅׈zYj(ZS5 + )fM_Wۜ<v$Ll/<8N6HaR% +;0ҮR +q(ykgV9)z` X6 -&ƻ4#h+R-_vŧlpjSϴS2Ah#r<[^s &:I46*l?^q8INP7s}|baE `I= ^%F"¤*Cg,L< 4m2>XwH$ =-( &^zGcbTs &qqT%0-PՈʈTJcpavN= xvӚ{d7A ;%{pXʫ2EQf}vyW +{ dp!Ux$D>¢Dy;LC;ѡPf&qZA=Q+mudR_$i,ִ(p/!ת붏/? B o(] TuZR I?jZmVǿh{+ u∍!Rc)7qJH J UKN7)K!=1?N%3'bL{A ĔFC62=5Ǎ/e2]ܵ]\0k3obWC:ZA : ; MA_yyHC"W5)18cћ6l*Tv8 )QM@tt<`t;f38S7SeP./jG\N& .0.".yrs a/ _z _3qc97T_[ DtK++KMQٓ|cV-tX9Bch'p9=?==H"BZB%zBD2oRRtV, @ RB{{ TOUU̓C&5Uvf΂1.$ԫې| Քe0WVlU bhrAݷH4^|jTrvJ"mo0JxYp + F< 9LvU@_@RK.z*u&VJNj_]:I[w; ]}{SJJ} Nֺ2Ѫ)ZԵ0O[7'u3o'B +kn$ơNlw-S잟}Y-X;T5@ 5.-PFќiwTѬYX%owF7?,m.ZM / =9Rd(AuC}2= #t7h] +Ud@0TZ}/>awJPAfmnyY% /sR3Mv cv>Ӷ0M}|ˁgrbܰp;4rQR^-rp1mkNS ^\̜]0 vVosGׇ;ۃ~#E S_cTڍb?M5g.S^Ŵ',[OIJ*٪lB]@]kZC \Q ʴLn[bK} @q%oI@1uӉVݝ\?mMAJd{hnR2Y/[S\7"}a[U=Jd ˱놈;m= 5漭e汙nRiP} =M'_7nRR*ZGD4^QgљEx>=Ͷ PycG0hW~ITw퍢M6q҅# wT.ckDy(y-`e:z,ux_7>bT|O.Л B7P@RTCSI_W`N7K۶s$"~VmG$w)ig߸ ۸jil~LӬe.?BUw\?ā{r9Y1t "~vӎ4O>ڠ5#t)ۊ|σbUT8V԰ w+FR1k70=UT<YF*dOh?'hFcN;6 nu%x*Yó +_nG$=|fV\fd<]i-7W}'olTR/3IK__1 *Ы2ؗ5q[VhGd+sViْoZ;})S 0Ĵ;=E*_Qݭb \[oa6f`C}S0 ;%ZvRm⤚5]nifҪƦIXC۬8Uy f>{ufmCR*c?q[8gl7見aɋx(o߾z[|}voOGW +\[_ก3.:䃢i&:YV(q[AB77/+ezPmuaţU|+qzE7RÏ١`?ފ[M/W}bUEMs Ixo~y2vC240rʌA|܂4N/)k .c%^lA872:w8zÒxh4V6?8SDFE9e9UѸ i{ o"@δQu.ʆh)RD`|M}Dۋ27nu9pPjGk0vB4=' K1^Z̍3JX +Q!(805`-TY vހ(&,yeHrR6SFR2tR#6+q/wbZyU P ӝ1Cۈr*q{#Z!iMʜdsHe]|VSBǷKÓOWϽ&c?f3,D䕊q*/N]܉݊߶sԏQ ͈\BbLThAab 9ao~ aXo9Kx%OM,lW^4#5oo"`ķh_O@!֩w +_e 7n{d2AVLrK,+PUD$?pAjm +(J֢cl&hs#[L.Z +vi)Q^7G *{{.Zj~j]O-c-)_b CZu[;;iBC!rQeF߆HIحRk):z{^$JARWԉ۝FcP xx^;MS:Ns+f tsFho٤-6(ePj]M(T*i&TB;|TV!X)ԙ|uA}-QǸϭ8ݛO04Yf\: yPGه`֚eyΒOk@ӝZi >ܭV4;&n:nF*-]PÚ(pk ِ:24D|< ++Q>Z>E[_lTfzx$QWR%tZTULw/i Igu1u^8f K+u)p[X'+mjX!kӮ{!H"* S4nV'ּQ֌ A-. +̓3x9j=Z+KUBPo|is6vS[/T4`v k'Nzgi5EZg$j1۹v!}qBPty ++W+< َV>nԦ04Ynnz/܎*h:?p;=n: SظP +Ύp;>-$T-vZtWޭ +;aCJ4]'g vƇp;T +cѦ|Kp;C9gQ]KӬu;~v NCvm%Ԓp;`L/܎%Qa_v5?¶C$>l;¶eIl;)m'ŀKmX]Rnl;Mn_]v6g*Zp[TQ&[v_]V5$Lnᷚn'8|vx9De?t/:Z5nGD4GV]]IcP +LJ_D6snGdʇn''4nY۩CS>Ec^vIItݮ/TP>t; 4nׇ[y.V.F'eXBCWqn':p;[2dP|v=nGkb۱G)nǙD2܎S`ۙ/N +렚2.) nՀu3np;9|vR+sWV'n%&nZQ I-p; n*/83NTXSvKp%ܮ3erp;2NCJſ3.iWv_ +vIIpܮG}p%jIp;)_ɠ顀ۡ|vR+[Ov{^ɜv[ UvM N #fZv[p nnGp7Wv= +C3[ NC^Qx\v[pND혆 N +ʆ%ͩTVnnSWvTn'P +܎3?p;{3NJU+n+nՀV~vz+N/BiV& +SanG42pYd]RnSp7?p;n?+ۡ|vngD g~v+ ܎:I.)nEuIeqnGxvZ}vMvVa܎%g%%p;*kN_Ѡ[v[pNOSHUnc)p;)FSv4p;[?p;zF l2n+nUDvQvt::+͎8n7?F;vWvX~v<ntp;7W¶eq/ NJaU1m\˶SlPv}vBg=mȗm'8,$|vmG䥰|v9 +Jnh;aA(l;ť*ێ_l,mvh;~QA2vR+NJEa\A+h;CVmE)Uv`: +NP/N-mʣtmh;*nOJh;ݮ/NsEE)EIh;}3_n'mRv(Zf Bӗ(dA/NݩlGL!1n|v6Tfi!}=e&~vz +nlzd! l3NJ%ۡ|vlRvR>d; lTvVK^vLKl7%ۙD& z3C. +َ?d;-b*N_?Džl'2#vLd;b20TP4s.edz,d;8_lP!Y;vh; 3&mpsEQhvmmg_)#Cv~vD2Ne :Lv 2Nq/ڎStbEs+ڎHmG*僶a vvfBÿh=O|v\:]7mG3ڎx3ڎgAuHwB~vP +N9#@!t^Ei%E]vd;gv02َJ_b!ۡhvR:(.d;"l'|Vv +NcTkmC4rULd; _Յl^vL^cP7l'vR ٮ"IYiL%qwl߸._,2َLSkl]TlTvBLӼ%Y'^&щQv6+:w] 0]d;d; + َO!۱H09BUٮ/bM}vFJʋVx?!ۡBCXҩl'Kl\v"%7j!I)d; B#]vRd;-U*NJ%i%+v3_oyBc{!۱=+dpd(Pܹv NB_lGdI`*VװP~v2N; +zQXvdm +؎خ +`;, +hlhہ%*`;_?`;̢ ,)3NlkWRf +3%ʉ lZv/n,/U_vzG`;O ؎oQv #v4>?`;lu]-y +NojGۡflRv l ])Uvd3?`; gQl$l g-ہb`;*ɿ`;,g(/`; +؎oY0,v)Vvt(X fSvJ|vYvدf݊wHۍۑ))Xv$h ؎4lG~KTy_``;] ζ RvR`;lGVۡȦg2؎_~vۑS`;eh?`E^`;}P|vȹ& +=S( D̙k7)]vµ#}-Oŵ#cPv\;J2>Fir\;&_Nk?s\;hk`}v~kRvavJdUµF5 5 kGB!|vvz8+׎2Bڡ˵ +NJ ZZ~vckGKiT;6jgm7jǬڙSڡg~vR Վ(jP,vV]jM-T;>T;BC)T;*@>T;2ՎީB#) Pv%j/>0b?T;UAT/Pf/NJӲRrRhf.T;t N/PT/Վ~Bc[v#l Վx@QYv|v?T;VV2.^gB1.}vVjg/.NGݸg'SP P|v n\w ^LR풒*DT;JӵaQv2n jTG9PXvp]>T;+T;vjj`DTjGxPY_bXvRT;ⷙjvv/RѣSv߁ߜ5%vZU٪d]? Sv8E3$'KDP:_9ej3S=JYxjZv(jv!jB35SH']T; +;2NۈBPRg:=vP햸vdhfBJm5v|B}vH +NaJCC-T;LTJT;Kid='T;/TF%%T;Jp Nl_jcm%S햺v jK#WQv=TR +L]Y$کRz4B,mFjigjP(+T;PjGB)%S((+T$VjOT/Վvʇjgjڡ_B#.Rv[TծsT;~v܏B3;L'K+RvDՎ=dک|RRFPNTڙ/̘2ՎbBC3L[B#Iv#T;uH}vf)jg/NKJCIT;ڑT;:O +ՎץPh-T;,>TKIT;vw?T; ծ(Trއjmni(T;vJKJڙvxo+Ej71~vR+BI-T;^BWBvvR+'B#CC-T;,T;>CoT;Kjj76ΖjP; +njG5T%%APXSd Ƭ@P;y%|v>/CXeR +nު@1e+iMYvBP;, 0jGHiP;>P;-c*ԎNԎɤ@P;*}vtSj [b@jG;jGUW7do/VtyJUwO"NT"Ն1 +NY#9pg N݋e.LN@_GL۪UtV`OGDǎQ'vۧ,B6ӻ2 +ӦV+@ӝ 7C5Nx?,.o,v93NAdt +0N۪+Nb`7'ұ-p;ͣ^8jN.I4:{ND pϖHt͍SvyL :}s*sQ9t\UosYec,wI>F_ /[6sUGCk`\kM[NЂwr ufBXt6/oZΜÆ (E?%FpPx&;/uݒqˬݤ1gG^>N]>GZXrRq%qt\YarR6eφI9λm\Tk'^H4F]L~wzɩHn;a\8L2*K(9lAp/xDSiGpI9"F9E]rkr4 +Ӵ[bXNX{4Qqڙ"^ψۚ;@u9NKԃfpEU҇(aQYu/jX0VrqI +fA5s`jZ`%d\=$d$8 +F0-juLkn E)fx/'ńvS6zDVPq6z]oE0q6F\q1`4y{XH8#*rȧ*%Nߺݔ8B@7% G}ύ#s?bO %mφ,W2$8l<1=IrAu&Y$J*oMo)8/]tG9BKf]φā$7X%Ha\dB` q[ɐ$ۗ1ߚ9߶ +kԽ7'dm%C85(8MMgJ\p#$;Wz +WġD8qrd}݁p纝(nb}U#@6|)8qƲ35yF$)Y1qzXN: ,izfJVB/ǟ9ʰvgS *8 7 R ݐ8&]۱La}7$N{`8@Sӂ)"q4jCQq n>;q[Ɍ:#u|@')B"$Φ=}VsęMaP8Q.Bg(q$ۘWUѢm%Sꔸ[;@R=SqG.]$YpQ@g3%SgM67o꼵ϔ8f{Ǎǂ$2 ,5(qM2t%L)qM0V6Akx;J\3-J\,M0>Je9wjղeU@1#_,&z^JW!p 'KTcyé`Kp1@ wVHiS֫ KIPMw2aXH0N#pZsn$fK+ 4g  Um4MB-1XpT>hv\;']"C9'p׎B-$8)R- ^ߥ|8q^βlu;;}- 4V>+)>M~ZUhղ1+ vߋg3&1ôK}Hd XnZad(`}@H/V2cn G6)hmlIV\ԟYmh2TޝEʒIIDщP_6Y6_[[L|&oE~MhSsuge +iMj$lz)=p6Prl"@˕LfS#lNKTLieKG%ʩukWagl)ˋiu"m-Z =cr{؞( ,f `1AfZ(6aAyĦRއ_6d`tU|@z`5P,ϟlf^ܱ =`SjfLKM"^L ۖu!lIwn]s&U6ok +fZ1XgډQx$EcSY+?+66r'5OQ@`eƮɪt'׌Dec+i\X5wN#8ʑmY5toMkEnM(嶻x,֚_` 6p41ƬQ{ߕ% Ԑ!䴟5 +aM1'f#i %R- F[ς 1jYjpơ9YͼN)`iU#m#`[N}D߼2 Ć?c Y 7XMgKUgZC~/RqZIժٔUkQUjKB5j +>kqդ^0(~͝X)Lj<JV-z5S[jzWM +FUwUknY♰j,j ;X5)Z&V+4\XŰjLVMaCMF{.AJ[=j*r`ՔQûUSj\5TTդZT&jRlYMd5( *\&&EVqy= +)t7eD&q 3W JUkd9WsriOWXpLћujXQ\@I5b}n$j\lW7[&dqGtdqԻw*Sj J|6WMgzC?M<$ZS*闯#5Y&Z࠷ V3enZ9oqPYWMjR?s՚9Uk#%UKjjTl\5UkSjtrF:V% G +պƽ j˦DZM_x5-lmx56ߗ2лGTJ{4cvj*7fAWk[ؗ;]Q Ք0\t XiMlWӦ« D@sLitxgn[ T]juԪsPo`>A3F@aT58%T5O38Բ;V +bUS[2VM tX5/s{ɪ~LcդXP6jR2.X0yyV +US|Yxg,3UM.)FT5"h^$F}-jtUC-j(2uPo2WMB7U.)^U`:UKJxm5jgX5 8Z4UC-j(poLi^>#"1 +3NT5*P5/~3 TwAy7:SM/S TcXj[)bT3cT(Tci]j,?L5TCL5j0eQL5D fOa@c%+‪ѩh6 z:09/[T;'%5{8T癖cVp@߂1׾P5RhtT xƆq[&e@Ոjy?T㾧aN,)P5mn.jtQCh2#ݝj,r:|͂M3SMBKT_'ݕȖí,a }Ot4dZ#Gݭ8צ IiZZ޳jDOLH5)H5Ef,HN4KYGFa{!2xjhRM +BIj̄T{=A bH5+RH%ƁTby7RM7 ƈNS T7 Qm E\Zव7"Ι), 1sn7E9#_2L h`jRg>Mg05EU%:iv͢+L-)cSӟ<١&--a'8̽72N->SkdtՏOg\1m+/v5hRTQ<5YQajƾੑyPҨBxnOU[TCNg#4`We)b=)X⽖. +w7ՙ6elsT;;HsMS;u՘κ|(scFo")m**Gm^sxp)(j0!&.whiBPɺ@MpG cԇf|B4>MţB!r#r8#^TnӞò&)hmD禽|gn;wqvC{%) 3m9x beҢraҞ'Jb&yoTVNdTV>Q4 Dx܇Hh+$(b=#g=53!MI| : a.R +#x4c.:-BQ:TO@DrѶpH[t.lΔ6d(Lo@4qǟC욽t; jOCb-L-XhigBif1rAS sw[SսJOV3t$$ԁ@S LSoQ˲DD?[NwZ3hѬgr'[|{v>>_J=øVm@4<[BF-1gX{y{?7RpEٯޣi0Ǧ'0xg3avPU5&N;J~hg?d5ГK3sqgi밳FDlvf>Fn,ƅu5-0`)p^mVؙ#yqذ3SP|q;CL3+H3hg7E;uL,ouy$֙TKtLʅ`yM3 I(s-;3K%vl%ul֙)ܳ:b޲:KJbz?ukj`a&ПYg sC]3CԙTodsf>J:}q:b%':'~+u j9LE5VQgR/PgR&eG:bŌ:CuW@HgG+{Iv%D1`&t֘Z@̰'BAgMQu~9@>Ag[ Й6fQ vt8]+Mu:jx 渳 wh6Kdf)pF/oD560g5KIpfNGSy8Mu>+ȸ +;57>_|ɮroG^:-6[ʳ][M8ݢrϜ9n*cs҄@U>J 66-SẊ +q.XJ!4FRJQ +hHRοmJ,IvMO3m)oOԴ>n2Mޚb;Bؕn͸cPcrٞy 厄xʆ~t1MUNM~_PR8cbNKR1` i!{hff^*Ue~3V/m^fN8ȡCմ{ֆ™ik3 TB2{(t^0LXؗ`Rߘ +,jFs*.5nC*4Qu<=y><<2??3W^R=AX[uJ{MIq?7<^#-z0!84RCD-cO9lxr9Hj ) +c_f5橿oR +cЊ+83dS*,E78??VO1G!0^}3֤ΣyŎ?DŎ6R:I߈5X3S:$_h)CԼ-6FoFӼ&7kS]Ziжgb 3[ۀ (fQSJ eZn`f5.qۀ1;} vQXȂ&W}k T4w3j=\)OZV]863}+ʶn-ڦhn0hYM5N)xv2t-Jx~yQ(C?|/G!KD5>E}8Ra-(gYrra9PE$ڪ +)cLm}IIIpgE- is^c+)#/u=/7Y/unmd-޵%[pBx}ֹ,$*gΝ;ʃt6 ьw+UO z>ꪱ┑"]. + +riY>(ЯEdR3Kk]RXf1)av>IfJZ)X;索N6{[Vb 8f߼{3wb6G8,X0i s\4߸2An6MѯEo=Mz>Twjw5M}n_h4RP5 59ˍ(_:?,m]u}uIw] cej(J_]wa[ +֓ұdEʙI/(ԙ[fwg۰+ՐA*6",Blrh銍HM.عvv~x"ţ +{_|] &'$ha=^SUh) YY/P +-ag e #6I, ELC1`nq &'U4@K0OA&Ohn47(TkICA>o1ƣJl1g -"4y1UڊF"i8d"E:`ӷJ):4Ƒӝ?rcH-G8d;y¥I#2iNȉU?󻵋2YnڭuWT .T?4r X*7dz; +t2U|(Lf[1;Xj5Զ2ZYd;N+LN'`I%,(Uq6`<@2$ f[Q/r%,:4j ?N@_'QQ!Iج|BuKusS=]Ň] r˫ͭ$ĬTrw3FZB#/SG30+KN"R,m UT8WxU4̥ٴkY˻aa'm&|`:\MDCa'b=Ċ62AorۙjD&SﵝQZ7-st)ul=('rܰWux 7.fv3][;gDD;^I +,qoT59hɎ6D7/b/gy7rońJ3>ǃ\@kX^YҊ iX~} xΉ |r_y%#S+L|:ֱ\R\]OOܽ|<)䪠 {=C5hYti/7ft&vfi$xi״l9Tb%'a){¨)ԉZgںN3-qhG9]+ ˦N_gSɥ7)]<</2 ;kir(;,в%QPQ6i_㿊cF9법*8҂_P{M㲖!+Q2dQDAIJ=9 ]08Zּڱ&b(l>A ׫Sx;ubhRQH'9P2ʨ<ЌŗH*L@h;rIhh_\ct,ڌ +SzpVe&n*SU&>E(Xg^yT9J;>F9!J M <3GXN,4oPT;^0X|fmh_z8jqM?Br0*"KLbo5-r#W%O>t:HJtɵ͚0W_>CQE%Rn˧e& O[ɒέW_ɺ#1]"8IQ2ۤX6}r{#kcWZk[΃v-*e~(KdTsDG!Fz08yj3S f9 +21【euaIe奺+r^ic:!idi_Pm3Yr LknHq"VUZ:(I\Mei0m>F [z"=)YZ9N\8͔(ǐݠrE[Hvoy5J ]/_>CA(mZb6ASU)>>rOI"ఛM>,׉Èxpz2bW[t3;H`V1N*-U}h2SH**Ļ}Q~BTHu!0 Z(DZEd?}Ѭw6rL!n݊ICOH,c^wO9Vw+"&ƭ8ɽ'<[_hTH^.lơ(*AVvfr䮊 70{D=WTpHe412(8~%ct9g,';@:3Ro|6LVVjlf`Vwo+?-KFΗ<~YN$vGF.DJңT~VsipH %rR-|\/_!阑\J(tvf[d{d7܌.Glz_bk.׉TlwPFɞbyR.u["r7 NFh~}t9oQrEItߓxOʫؗ6zZ{L>4RG2H5"VM.C*u\Ѩ+j 3iR15X]"ٗAi" F&bw2%.[n](? $|!?]Niur +3=ձ&5ԲRv'<\KG"~78OiF:Aq(o-rVJ"Yip97fan*h+K";_Z{sO3N:ku>uT >EQE=ѱ_Sǒ_"!qcʟtJnH';r:U2D~>);`vW<e׌8"XGdY)&oYm=lh\5J*.&/ ̼MabZ}[y@RFS<>VZTehXv\:">YT0 >7Y5IǬ -Idk춙~M_%(^fҊ&zJ(V @,enLv/Hn,GʓZ! Im +-]=YlۍAvGMt^ecArsaA'S'4PVޝBƱ6rnFDflfoR,@~ёꞼb-@w%|RmO.(x+L1(%TdHN/)ZCUv]1#EJwWP$`EYT sDyx9 szp;Ԙ̡FfBP/42HZ ."! szs/sl̤m7rfޥp_g?5%BsYXu* ()7ݫ.sȯZ2q'<sZ{Kf9Yɬ:=7sY7˻|BZi@7#jh% l.1[K!a~/ fN7 wg;=psP!ݴC!7-hQTe !hS(JKp_Z%d]+@%Tu!3kQNOv9T)]2J_/활2Ga>uwv7 +eA%@sT՛n;^bui`]ݎCIhk^D_69sS==' 8k}m8 Ӓײ+v]8 =jBЙ8nm4(r3lQrݓ!4f0B85+9u7ZP{X?ytY횬%ZdEmuU4E9okJDQz9dNM-*ͲX/sYQ%|bkwS{eGDrmh~w@0IիNKɓ9γ;ZI*wFH} H09fqYh+1Ԯc?QFc0Ox#e!s4![/L9TW݊[$E(g^*5 ϭoCveotrSNq6W('ů, +B9unѤ~C}'Ю &NKuEoy)FeSQ+@L*UEZ 8kM+ssFNeQ15l]]r{e"9;yωɢE&YJ".h'<r|fո,e'G]e{>nX`5U⛺ėE>Pde=+nĦR'neIIfKVG%k0Sk: cbyNXպ{iRhMP,t(vE5 j8YJGӚZeyX`N:j] +}?e.شuMj]߬u8|ye^z3f5Es^d1W>MV@U*ƏYe@6um)QȗƽU(ʣ#gc KH'i[NJZX21b ;"`Uh XKEA4|lyX}Y3U`ţQ*AvD*PCZjd[}c8T3;Hn9}5=4 UsDjmU0cP})S~1oH Oԙ6zVFvEQegp)D` +RJCaG>݃egj w2 <+u_-@&&Ɏ8SDmFE(;z>TS:`v|.̎BQ~;H^WnNE +)mo٭8"*ttĨR$9Ҭq\Ae̵ +UYm. rxN+BU5q*eL,֖B[4Pg6æ-vfG@b21VOIn]f94쓿mT+ Fqó3صI'͎4OJg?o(t1驆޹>dW)LH$=xh9m2l u@!.Is;m-lo[ԷQ)^sJgXbZwrY^Nȗj~ f +6a_z' %ryD}ZRWkŀ=uGFiӱ (KNOX_8tmN#ɰc=f*& `i2zчJ|n춀-κKsC3!iN[G ; <=v\J /N*uJA劵 Mk48؎{ zA2>jƱCb0-;=#|Ҹ_7X;Dg؇nCyCPI<( C(E 裸(!V> 5+UN(㭣N'D!dTB5])vʢ=MdrG RUsTq=\zwM%r"z =Guβ,PX-c8vV]'jPu;%? A2a6@ёy챆<^11&}\e,㲎x>TL+ +PcxQTDMU=ޣ$#阷pi:h.^Oo?BJ1zHeWp[aBA%(\Z[xp(dMUw6$3լI/v4:&xM1YvQ18Xvmf&qioe7x,-<-T&-DLh2,DUPeܰN +՛!9E0z):͎J.˝j%a&e<Ɏa솀/bak"M6i%NzginU7u 2Wv!(}Bܯ]/ch~(-:{z'۽f]%u{U"Dktn'&nWUv(ngd{[v2 t;!3NL IA2*1w]=nWI_vt;nn'Fۡ& +۱0bNWCݮ\vHDN3qDcDǒvSYvS ]cvv}t;|n7n7U5WOLvut"[vR3%nWFMttDݎi8@tLJL@%>LIv(n/t;D +t;)O-"n7Djy{t;yݮAIt#t;9*t;mf&] W]v +d|X݃n(nFVvZe֧nt;jF>tt:2rͨt;*Fݎnfڨ\vot;Kt;)O]S}H+tt;^'܎uRndzLp;) nK+vd]KOp;Zv2o3ڮ2Ph;%X_m')v$%CNh;Ԅ[nk1ʶS"JfNq{{MvdmWzlzɶ JV~Ķ`UjV]`ɑ`Hl;)mζv( vζy%nWbx*?+ʶǾ̶l;9kl;2ێWbe)dUESN̶Gm7,̶ +S?v:̶v:mۮvhmgwkeUv:̶SVuCTl +/l*^bi'5j`I!&v.l;Ķ|][vʶɶsێĶS%m'WΓm'5*WŸT9l;)"$ҕm'Ǐ'09NSVf)``i4l;f2vd͙mWY影4%]Kf1X=vfX+ێʶSÅv +e݌RNO]ÅPu?|'ILd; N>v&>DIv@ONʓl'5lNka{lf鏉lWiqȋx*l_f]lJ}#۩1T$5H+Nd&J;ٮ)vLSl׶lgJK?d;DvRd6iٮmloI#58Dkvzd;*NUFLӰvʣ{X$]AkBcId;}lG!Ƀl$$َjD#v(d;Ud23َplg~lGyT"5Zd;p&d;d;̰DvO~'hy%f%5[d;َ2Dld; d;CFd;~ E&(QHdDgv$]#e%Dkx +]#~NӉd]r[vvr[elgTwYld;9d;($l}h!Q YiJ5v,zd;jlG8}%Ym%QNe'DSAAӎ2Ng$ۙNo%=d;d;2{`;4`;{5/`;jm{-d ۑʚv`;e=e`F + +SP8l'[8`;u>vH`;yv2؎:N WvO/3p>v$1$׻`FuX۩ v( lgۼ_I`;)O]ѿ04?v\lq!?v2oZ42$.ku=vkvkҧ̵evS}٬glj\vSY9j+x2b^.\;k\;s%qp:=v8bN̵#\;J/\EXvS :eb 6况jāXEYPkgl:v@ݸ $vX+< +6ctC0ځ`X;ZYvzoX;=njX;GX;,CMX;kmb($֮GZvVwbuX;q kv򁵓vxQ֎cU k'NC2֎:2CMX;#䁵S'a(LX;B=]=#X_b]%b.avMX;2W XEuvVX;ԄCIX;)OĄkǙvy}`OvMeYTk kG'ٶbbYdVX֣3]i}5ZX;N'pڱKX;"X;k'!c}ޱvoWŠ-ޱvr['\k(缭k2߰voX;կ=vR3֮2ܬX;)Oꊵ k߱v `vt;NK쌵S?cpX;o%a,Ckv( k1߱vJJX;=ʊ3u)Kh)+kGV҂Z)򁵣oDڑvʜybfӆ]=߰vaX;iNKOhX;Xk7k7کcrUw]b*ٛ+֎5aPV'NXJk'創õbh旰vccZioX;-X9Bʊj`kkYb~bGX; k7kgꊵ#4a9X;k'%aX; kvӓLX;Ōʂb`']b\vSXvIS''֎.a4Dd|ĄCHX;~ڡ&+n ++kGj{`vNX;ޱvtMX;kkxb]ZYVujGA-BjPHIT;OT;:$ʃjRUڍdD"QȆJTEYvS ],A#,Q%T;ՎrjvSYvS rNJڑT;-22ΔwTjGODIFSQQ+vT>vT;92NJO|j:DJbPTv*`}RZvUusjtYO1TSD4v'E)*=+>OV;-~93Tt aGx쮙`G;p_'s撚:־93$:@NtkYu t;=In^Wl­ jк!'Nĺ>YtJ +1:uRJX'BqX'kmdZ2<ٚ8Z U*vT'(TXNL]B: AS8c V§&n7|(Ϳ i_#Gk_@t +QVBNyΩiXtrCǂNd# +]4k/)>Ͽ.Մ\gϝA9N89sؾ=Ș,e.Wes;Wd2ܹBGsK.;bX;WH[wX>&vNkn;'J;Wv3+uX{͘i;W* ={:W*tMCΡuN:'HIR{?&uNT3u.\:WtL9~w} :'o=slNJ1sR*^ە:'&uNʶeR^<{z v\Q)qLG&XQuܡ!h:vquN0 s9:sZ95sQ;Ti99\L9uf,iwl}+in(ÆfDp$){0Na2f9]oE < קD-zE ͷN?WshVƘS +@ˡtdd9R9};Ma 1rZKv\N-(/8D i8Rn+Qn);PL~V9\#uEjWnG0hRт0`r(κۚzM &'i|+l7`rR-0_RRBMNyC\Z4Mi!-KR!2D!J0@6-0JrNrzj+ݗ-Ў+*5arRLK091~Y}bVk%䴐}=i|'qb;OsR#_}?v OeY&<,? 49m2Lh=2prqs\t,NN'ze8)NN+ *0qE~A-+NP'MEsLf/K49Ar}b-49 U7ÖkAJ1;%Xܒir^[ӠMeM5hrEOsNp/K}J<9ɱ w;lT=:-WVMtΓCٜ;Gؠ}<''yrRON֫YMeؽUDvO(^#8pȢj{+T]m7xrSYyrC8k=&'͆R!0?Cp:]Ԝ$',m$VnL%n9ݒ .!Չ;b} Xi}dbJ 8 +S9@diF=1q-Lɍ$Z`㦰P8%Pf\ٺ+2No+*%592(_lB6qR\KW(]"^꾟e $h bpWb\ ыU= +u2N +@Vpݭ8T\㗧1UWd.;qdTdVdW®s|xVf\T n37@iv2pE I{zvëLrܢ,丩9X +n8PúPZ&9N +Aҹc+9N*C ǡ\1q(9N* d/cWH|F]s;5"丩丩9Ύp.8 _J+LmNOs?/2ߐq+1i8E[:n*+:ni2LR(8rioOr&8.|i4<1+GqlLj{[25NʤơΑU3,[8'5N!#lP㤜wS_:5(LרsjP5nA+w(ADʲ +o/,U9W8yU,3>Sw̻G{4Kw`|ϴ8lWEx:+n+*nNu} 3lPmH+#N"7)qCQv]Ym+^Il +757/bwm><|a)׉weEѓLS[ViT9.bˉR w\|BuL0$Ta3 N.V1 Nq7 NΦVdɫ23kfɃfcskoeɿҪgөP|_+]DҌ؎^I$8 n*+ nN,@roY%M"bA{Qip{nƠ,wMkW>rsֶN䗅d88)0 \ 2Ɉ88)v_!@p3NoA+T 8ipr՚{ vWՋό N'>V 6BS5+] P6<8\' 0ωGBY2Yjղ< Thz\99&Zg=WS~UG<8R<8mXipE^{h~n=pi=`p(& Ew-QνȎy(`p[Yp`-NYpb +Tg>Xp/ȑ+'7k R4HK('p(PpRB(8}E'#"2 Ă#?Pp:  SN \ɂӐH+gd$8R*c~$8)lG&i ;OF+wvW.(8 +rЦ4GTP{"Z3ŽY 6jӻNnI~#q4eg5Hp/ǧAcJ}$8 )% ʝ=E(u3J} /nh| fյ8e|4_HpD{[D/h)w:8  8Yx<|c4n=amuJ{zD=o"n-74Yv'M՟2Mg?'e\Qox> Է`@Xzjp\|2o%&Q[oZ7`jm07y3`x7y :+ } }sm@PTLԷbפܵL}әl}btLj _zɗoȁ}]xjط +P[[N~G*@P<,/o+ޓBk@i_o$]k7MTg펡eŽimG7uޏtUܽ|׉zͨ7Nrpp:MʛW̛VL4q{ @FQqwE@&o$ JXG9 gtA) >82Qb׮&߶EuN :Gu=޼,-vnSR`!`,=_NJ,c,85*/Y1Qm2]t;̩l#in0>607 wu!< +xgkMv< +sv-0nmik`ܔNj\׺cr0*8nr^dǭ:o 7 .,/V$In?$i$7Dz 8M]*FY<%HnHH/mr;D7H`ܔI㰕Jvo%3n1 ]z7ƭ |7 PUQI;4/`eP`]<+Xf̱BosKm'S$M!Z^jSlnam/on-2֦vDVXYm:Xm'yE3ԦQ~ &I8J6KFiҶәOH8mZϓf`[li{:Uz;'8[s`)3s +=zf2>&MLyM}e,kBxRL6lUdSkk}rOSo< Mn06KZQlzZ6rzkxٛ*sRD> l^=3 C-q5E&o +`#nχ"' A`+YlKZo6H{6^ lYL j"eU)J6TF 86a3VȔ `bT+Mh6^IM6T&Ixݧ=$V 6}sZ_+oIqߒd\'V4\tq?N9Ma*F}q퓿ػڃVh$G_ShGތ ~]Vh_䯡;Vv%I-3lR ?VWOz )`+䂷_lRIB+OH%"7D&qqy E+6ӮJ +^V qN=V[^闖 B]2[黅BME~xG]lk&M?lE0=,B*~tcH3cMB`HY '-nP1\&ekb؊q׮ `+N[in >R +`#eoq;`+(F#M1lܚwK +jMy4W+Vf؊5F˖D|JnF;+} IO8(и6ip `+F82Mi'3Rؔ#U=lDy+5 lY*')pF0hI2lr1e%)GU g،L`3 gJR2Ts QL6cg&U{$h6~iQ)lnV#F(A2v"N`SdRKVA`+xP5>.6*A`XnW6b˼+MѸJVV Ta@ TqxQF=rޗ6A`SU=Vx -W `4ݎ `;ZlR- l5l(6`h~ ب`"\l>l", lB .MRCش+`l Xlf"M t[R>rWBf0vַ)l+a< a 8lzBJ6} >Mæ1z7Ct{#J-6n`` +bѺa%BZ)"[s +}\9l28lZt38lQb4:CԀ;3(fuwdձjFoy 9~ ZjٝҲ+bD ,I MP?k&#'_bNI!8T@&GrVf4!Qt1~MmR~M)'_ǿGy$F.jRK5TrۂҎ>k_{}y +s*QXkSY_5ׯ5ἕeѧ  _Cٝ1V +BIU9wLI Ԋ}MLA_[6ՠ;MOgڢb_ |M_k& +_!& _U5=Dk²QGN&q(UdiPw'ѺS-vB'p˹䤧Ơǔb(R?2}:} eڤK9}M*ˠA=*uǿ8^ ՜:e y}My'gA_d{ L_C5)ml<! 54zMgF)SzY8zMì@=(|jU" zMe7^c;=^Rd%ݮ^{^kxI׊ +LyDz( +\}6҂NF5Ti{M +/`U]* reQN~XvM~'`UݓuaZe(^S^w7),!xgƐdU%2Jv 3vmN]ʤi8ꗕJV{PPpuMJ]c]X91bWu6QlU[E[+65cQCЂmA+wDv&ӹkSXkx Zf)AxM$>kxkcZZY +^g2+\xM_^+l9W^c]:4kCk5X52o8kR=K5<8$kَ _Ǻr&kϱ{=3W ^۽ *1kUgصkguMb ˲ÇrCx{\#_΁\#蓸FY pޚEZ5| mMqr]&tnrhJ˨5zim59k:ko40kCX)kg5[ igx?'b[i3:k)^k/붕mPӮA6Zxl^hÛ.`BwAUbټ.ɃdrTTj0+J*՚,D5%`O)鬙v<`jwh05RQ%ARSHxd[zn}`.4^ V6&Q@Ma& 1jr{\4YƜ\i۲jf}ҧ{!ܴZ 3G]9P 5 4m*+4TEO K@ZiI_(Ĵ#-<4{_SZΫ|Kc ^IKS[k`4maJ;%`׊GHi7fj IŠI"[x HܠTk4%;#mfsYi0WBuO@qex4:RqtޭYހ aeMh8tVa˭չ$m2M+ +t0&LXxŢ;:UexcѦ~S ,ZLCcW.ĹhjHl۩h`f'(lFZfr(=SLmӷۤrrET4xTEC!!cρE߄3MV3MI-(Y6NhtgIErPPb=DE#!7;hIQT49ST c١h[Ȅib,hRlPEYhׄZ(!htw vM&Z9w081Ѥz%3 vfkͱiѭV9Mi 60hBH!єzcwpl7mQ(T&Ӊ:h%+ :/9t/22AV04R!]hڻ}FӉ hAhZ'cc`4%3/Tm+VhB F+뜩`4S= 0iTh$J&՛F8Muqv0&'М9h@3MhݾDpцX4b;P3ǝ`brkX4_z}mQ,TVgdqgr=gŌ OsW.X4Tr"V,g]IƀsцbцTآ,]Yt șVP4Se7C (SxԀͳj:U[<$H4١"hԁP.@șcRF>7j' m+ mABk/@h݉ ZmReٵO +u=} _h//O7;k~_˟~:ʾKvۧ%S>o_'ej D:o/e54~,J{ï8TߴӮvɀCVB=TOP.JEűVv:U '{5! ƒHmr?ٳ6 gdaX^h;UgD=*;b1\[dŪϬ]3^y L8'LvDdɬDz!WiL$B=[1GCԧTədp~]fؖ<2w)3?s @쀆\k+~0)zH)ƈ~&SPeb=l|?{ڃ;v3&G&n"NIDҖާ4t/񊰒ڳ_>4Yn RR:v(NGs/w{} +BtRClM&^m=q;ʋOڋQ@{vwe|W4U^o&LIuODs]S3t]2]B\vpM-FB=oZgK;O"cDžͫm/g+B\Z ~^uNjևya|M+J)\+n? %]Ƿ1BzqvVq»~ٗ$gW^Qd:_B>e`YlWl|w>j~y?pju|-]³][TA:n2 vbqMxldx Oju8|;Nm>ߡk>|>5˨x[RG> OG??/2⺶DJXC+w\,\v|1GݲZ3Seu~j͸&_f7V>s3eÞCKLo'5_cҒݲxl!Q⸮VI5qqwϿ$$eWv sRфeb]VƄ|Զ_?`K&wX~z|ӣt͂j`[̰۰UoꞜ|kOP61v 9Ph_zZ"1lXiDXIa s45Ƹ_n`5cvU_mBb˰ )t"naLPqmg`X1gyXfY)|Lb/qVnW[<~_OHrٶ`PSn:}vusc-P$u踖;P[9ny[ pbj+>rן?9O~:k77]>x"3=ˎs*sMch>ܯ,%k+fhru0W|->ha|jxxF(O}GA +n1#nwb?rJχ'gLGpDC`?gW7@cMm;nd~V?WON^߮`^E5xݔdzyG a/~]#*sqQ"*%QlcB}@=0 o1sW)Dx<€|"zt,qG⹻.DUJ{G]Í-:,'7m_"4r;uj\l +Npކk1R&rn\z) FӇMW#!_CJJ0vU࢙-hU ZxĶf}t~jeø_]gxOu1i.nvWg6X A`3AyxS{T<~]_yX8X<&8mY[︈f :k7C=^QVUbVkhWDT`.يA]zEyֱER*J-2PB?u, x Q7hs1vH{ +L4CvC잛}CuWG~acbs[㍗C/wW tp3z:qbuE>vzsy "z QQ2GC!:g\Z>۲1c42 Ի͢ezFڼÝAbz=j\sǚDZ5r۟W{ڶ̏~wX$|.yalYP,q *O5l% G0!qo?x2}}Ә6s؏/5[_B>ëxzfaݓⵍKn0,3Wٛ"cM]i5FW i?ab yML{N8{;ݿZ"a-vм枷{=\bm}|+=#R֤/ՊS1ȆR_-Z~cfXF"Er>W<QO5o 1IXuXT'I/Rrӹ_l5w,Nk kI4aޞ٣t,6U:G8m&>vˑGOwIk (ʌ#@dk4 XѤ8O}Yݨ!F6l߇'qX(N&4@F_B`B븚G9a덩)օjkoUUm#Z#Iћkb&g W3JMFs(W:Ϥ vlQ\hS^QmIUݍq\or~RŴI5\wk28a$6@[4#FfσxE?Նe0,udNXnn딇]`A7%Й Ne1u6@0L8og`2ST `5vXU@SRGTl JD&4L|S]ͣ v1&f!Ay +lGYR S]T +oblKjPrE?ԛ Xb?ؓfKPmNG0DdJGih;Sp-weTARI'HIߛYKه ɚ7PGW76f Y/Wki2Cͧ2l&ݲ+sM^`]\羞΢|8װ0"SV,1:gɾb~׬Q_5nZH.r˽8 <0>oՄ{z%Uo&&1SyxL`8)MjvͪQjdtyDh[ΜvkXyF!y<=>тXB) >snɚ2Μ cv$=Eq*$0IzT,` \'Z_`pk [ 7So2>gRLxTwlB^#h3H"B)I"ՅΪX^jPf &*Zs5Gw<t9y,+ R#%~3vNJ! ͔S,*WhU(_]IKc ޙ>:C) ; (i4W,ww5/=eL՟kQN +5bU]L#.Z_t`6JP'3J?QK5124 W'mfRYMVm3Doo€پf%mȲ udk$[ 0K5PS]M)wxs e̷d^ +"1cP049j`3iٚ +>ShI6s,!c_5a UTe[-$,!>'>blayH(6@,w f%6-Z^1gLgcW9oY4ȖVOfUN4&k'֮Dg7TPW5STb-hàRfƉR /%uu"+j4s5°h 9Ԕ%ڻ4T@>KE%o:LCMb9o&e8%\bIi) +6@rIh$ә07TJ$ՊuVUzQC/Zh6YGkz?Mj &Guߏq)'t_ +I r_MZfedCdDaۚjO`JF:@e_Fҧ_j! 5*E)mAL!Cb\>}ɽ$ +p?aF'Ρ(]xl5zQ< {uVyR0 h\qM@'Z6Zzi>!6v\St9i8g;-]sH M\!՘ᴦ3Tݙ킨OT⳹fиiXy@署T{hU'c{gٮVD3`nQ4\ -|WIUSV=.eTR3w`ΨLF؟qc`VW2,&f/%jϪILQt2&iPSYALVS9Sp&AĖ5C/h7SuFJjɹk4ՕrSiuJm)eSj#G9gO Cf$"z]F3TYk`N}˖'a_ͤo˩qv͢)XS#걫 v)rLCgE'Ѵ='+A^i]#}XcFQ]7 kI-aNxtcUtj}Xsc2PLE7BgK k"F d 8 `/XRG*Ц *;Nmh6d+-Px=WAhr +d ت3t'Ԃ:U5 kc?}LȦe2f3Lyy +L<lp tLK\KTHCrŌ<9k9 ON؂hzrXu RA&PÆ$a#NJTg'kQj^ IYvEŴ.&3ߞJ;=l#FӊW^\V^ JP5|Z2P5Hc'*HQyvH!YNz?Y_}" +P7ȧ鮖 j& Z԰HwBf3%SL P3K +s6[.T"Ĉld[&L*ڳ ifHcQ*g +NT2)πfXCGp/[E<:X1Pt2\zXh* L} $aMl#508 I95WaLXzlD%;LnZΈH0'h/ߓz}Vu5O]YF쒂Zgvu5clerƨ]:gO :ּ! [h +,m;+B5*d +g,~QN!fkt}D:Z'VYed;jkwrMq ^'1Jg5m|L5{ MB¼: ,^MY64ֈ-DȪ=kJedoc#cy0x;(1Wa.($-XetJWo&eߑkt3Yܖ.(lc*1Ѣi߱33 cFvNәA9XZ#tX3Dre0"Tv}AZɘXU& 4](K3[R'ͤWj\ Uhh,F(90UMzdze)y^IpU>ATٹMLǪ45ICvgA/R֋ 9`Ә$Sl L~O̝ianNi7lNrdk4=w+T_=wfKXHOl[f".{7I9IuVHGsYzk;RsB:V$8 P=Jr ]J<G +>lM|a_IsUSDIt*㹯e/զ$kh)̦?y_YXc-ASE~ VPa`Z"a|w*{~/(6iVZA +Y\~9[&[W܀_ eߝskBl/^JA~wԚghoCooEZE$%cmCJ5Wcˢr΂;0fC؛;Z> VTmM[kOKJj7v Pᮙ8&`) -18\e ,L $*ZCo1"q$ք6Vo5_Ѷ>պ~V堯k-zYtZPloДlfD\~~+z&d5cmUrAΦP[\ dU$*ռLM dL0#Nb9K~ ^Mu>ۄ3`kٲԿ# k\;ve +T'ų2;xȞo_ 1vXUQj8gM#d͚ki{Ef|nQkD;6ND?_Sdō]-c:ftU&â[oe,l禝m$d;  BmnZ-Ԣ*&zMEQjZN3xUy8Z+Ps04 gfzLxQ٫BiJHScZ^VbPLg*Ly1/_ZeTݩL#bux UDG*\Ô/bX'EgZ갞r *zYWqOO-§"cGui5뛾e{+r֒`X$Kcn0$""tU=ENAf 6t&ԓj01lXKzɺQ.I l,7*-j{Ml Z/6'ݬ;׻n~([2òxw!8g囟Ul1c)ߋ?D1e^ Oڻ2؂ώ(/ k0),ſu=L)ʓYo;{Gj#4m1MZ9ahhP6͠Nֵ؃MxmӖIo6`E hbNiƛ|ݢ>_!wQ'-tYj$ٯ{oZzQ.P!^;4ꃀ#\y,!ή3 +W3Z~(Gyh0"v +BQ0!o m`4c?"twvwjYͧ>hiL5mJ{߽8j;2BCek fXaMCǁ]'")E'Hֶ%ՠkGtH_?)@n|,effԐVKBK/|I`(XR %@%l`-j@ZwnNw}ɉɠ?[u/^]a~]<_g{}?x=}-:)Ӻ__|7Wׯ/ow}<%˻çwoo_z_?n.3_}woůÛao{~꾿zҧ?_#ڬ{^{a\^c5߾ߜ]#3} |x{ն뿿|z?}ppOr{?{磯o۷7x8n||yڥm_ۓ[}po/];/pk}~*~}^6wWo:A/:K]|iщ).+sh,{Fѧ]^^2 +`k.:DŽvЍڗ>⾺~T'~w͛O]> +[y`^/d{)x.we߉_|xfuwvY6]WV9Wy ww7j0,}p7o>|U^:ZpQ٢SvCsϧ˱hx"QOwWg3~[ϔ1=?hG:d%Ϛ;e_h?9xB O?1 {Gή]{2F; 9|zc& nIޙ'n#z.OqnKӈw~sw}-/hӴӹ}Ӂ}ĿR֎gswK:yWp~KŞ-y}~Y`۶3?TmQ9sWߜ^^qy}y~"/~E>0R.*g(6zϿ}~<;~t=:`k32;lnX9/CmT$WHG>c9Hڤl(+ D}}W[G,wG6/||?<"̐~'״p=gr|/ǶK:/G/KɳO..޼}<أ=敏TѬ>.beN1+!O?`pޯw~2f W/}h9g;hE՝mv3Sy]4]˖Pe󺞪;vإ''/-1(d/ )qC.˚~ |"{N>ӏm&w7޽)>B~2DᕭхN)n y$]Hx +mh>stream +~lmb}L h}v9|>CP식ۮ<\K\>W_嫻ۢ.nO,V}|Yik2뢏톤$9?VTyi\key0yvvÉ//o?)']/>|c^郁`?n><GDz~5]^_v25o<+jg`O;)gʍW|{yQƌO EzUN/>wyD ~]إ>Gz˾ۃ1`y.9?>8sƜBƜt#Цs09cγ1<iqI{dBk rߕ]2s'!ϸ<5< 9س}/"e渾zcn ,}g +WB_L]׾sRt8衲ՋlZ}Wt+^| +1rl/H>X.!'4^@G0`8?%|x]t5{%[ϥWZOz;6uۛ?^<W>~l%:sb{h_?v&>aF^rU +RwuGo~nG_ u()=ea$^PM'\Wo =CSk/vDN;afcڀ^Zױh;`3@/]ef:PYnRK@ +ZA A C5045ĽEp*=#Uݽ%/ֺġ*~h;Ux&]wC-Pa( +O—F~z!v]d=/_]_c}{~qÿ`|f9}\\oJv/OKoX1K$y?7_\ ,7;0'[f>-skuPZ¾}pXV7\їu\˛__\Za-;v~.kf?>fyuv\}ouN捏.JZ] |&tLE,YCܝO*^~*A @'47 ==3 /~o_o_VV%@,s"O/~ur(⇛a*>S-Kͷ?u]{u41w}Ѥq4((?uǿ?_;~!??rCp>ք˝8Mؑ+N:veb+uƘeػ ($*<[n 0l)/S7/i9NS#&>%taKz g s#vcYnBcS},/<&Zλ +&\V;O~ /B1~||O\SXLA(τq( +_OTV,ϰ  /\ e rCrU +u+(X݋9es )k؊!'>/x/Q= . FƲ >z9>G}(u9e92TvgW0$QMqcy(r_7,ok~( g\,e'\#1D,'tcT"AGwHCa8%BֱAt'^V`'U ` YgZYb{{\nJtJ<}a>PaG.+l]r"srP!bcj&!a`:c6xޡ̑B]A!ONc=g`!\$ɑy.0́<]/U(#fRr9"}j}߷1'd#ѰCrf L+ aWn( E6)(P 1^ r{el`a: tIR"{^ zF!6Fk$p +0͸q6j' vOf[hQ^ +)$ʬ貒s +(1ׅ5p[d)/@$ [<Ɵ.ppi`(7=][HE7Ŷп"/ /p){[ p KYxҰ8 T$bGJ!g3;P ]e$?Rd/?ZT2My/eL׹ށ0Rv<2[A9VA@r0;b&#,-3A5?f_TrGYbt ]`wav_bFB̏>ȱ7 N=wslƀά:S[*] Fxt9ZJ-/46pIFR½& @kZgrǕ(0hxϥ&r:W,^V vƳ 4栎9DpW(ف +t,׋Pq(wBNjp?y?ݼ3rEQW9Hz$kʙG`縪'(H{ᡑToy#%( uec]aG5t$aǩ-`he!(FrƇ[uP@7SeG)`ė X@ @ aYK+Zj?V;Ջ &|fH82$#%MZm"Zά-̨+++>Oc/w\)ODQ*?(ׂb +Ka pj 0+Zaϫm +;ZۣWU$PAIE{l35DLqmj]QTSaG +}ф9,suVD0Bx16WFq;0eݫ@KhpO™O@  K"d!)̍1g| oVZmȻe[] @#OG"752bg~wBYa,JC.ԝXLxF U|mau YزЃw{^:JoܳaBqG_ԨmD \x@<%HlF Yn ) diMbNr /))DnT QHw؇@heʑVꨇIؔ_'-88~LJ i!;NmNYyW%Yz`.Ն:{_՗t,+6eUb(AhdQ$҂C(Q§N:`r*aK;ۈhlGZ9;6 0q@݄d@Fܗ&C ΫMw=B6z֞BYBah +`ih@Ó΃ 4{bvqdx{^\.<{^ra.Knk[xs^mBQs*D]PFCFGٻˮ,k&vVQ|@<$@B#L?@fHV F44`Vw@×`=?2†04yj᭦ "pP{b';77}qZpeʧ.ax_|!E$2?3y.alCj jQVvPd8Fư=uyd~o(ń82RDg":.ְ\\hd2EܦS +( + +؂*E*0hc >BK%/yS"|X`΀dcܔi7v)㨣TϏe 1D0U 2Xb2oGqsk ELu'=KELFJ'*lvE^B9&X #WD&>9a|!bŲp֣]mr]$:!c.7R93F:x* +z,⸾;ZyAF~2/'J@,joDSy-[貤"|-caQ F԰MAce2, * +_..6-C`Wp^~> #wMD^ݴ}^"3:,C|*6h n] $: %@$5\ADMM/oƘy2msnCpĿyz\G$ܮBi)mM|z8%T`P +pU*&\5q鏓 H%PuZ8*p/B U53~ mډWP#k'ibCbK- Ƒ:h!Po![U"ĄԴ ,Bq*\gгa<g,Vع8Sg, &ZEy*eȘ@u0"LhC0:bX+@IտXEbLJqORb\U=+/DvQ<ήSߕ(+&Z?>҅L\ &/C@vGm$ԆB#h>9{`BX;Vވbnqڛ8G6Zy啥-xi,ۓNYx<.,liy-Lsk_bݤҀW6ja@!/l,0soHcߠ. + OkuXf*R^h0zY?{}Q/^+ Tu `>BkK tl]0s\h-NAe5,zAa.L:8~DzqY2\0ˢXfYlXfj,39f qPBb@6Tc+-˒.sl?XocrcAr m)qG:g3~t'!#cV%0B1hYO9ʸX\T3h\ZE]tFXf"1:Iݣjg-2`ACBP % .%ώjVԜXUJSYH:"Y7UF@D,p%.͟Jba#JwHT1$Fw+0HJ)iϽF\X;)8۴x2T 0GWj3TtA&b24p{au(%#_h|%J2z}k/tg" +fR8Xo*WP)BM2Eh}Q*@C&p:+0̧l6bE˚%G 0@P΢ +8 +>N(0mABdr4'Ʉ*f\Z[@*H3f*i 1FX$ ԫּXm&8Тe@QvVZ#rENLjz˞5H~-1d21$H1/[n 5/؟mسynN{) aBe$gl!h 4ڗW6~svXV3j%Ď9؊$B* H }lW$9iGMIh(d%y̫#,k3XѢqn}N?qN%0'28 rFPG_B"eё1E{ONCʹQ!COSNNV@pfU(Og/rhQF2 < +ɥ'0@4C6c$&@<λ#'3RMO6J܏KXGƙ7c7@L)U?bL; ;9ˎQD=V?qg,B ƃw7g"[ؔPo[}/e&v'Ӵ1yx@ɨXmHIV^+yooon._bm9ޭ4s]uH VD*_HuX~W(dz| >`Rf VjM[G~}W3b\<#+B0j$ rCqd<{_|rscO0ȋۘz*޾U˗V5%_Ld9hOߓ$N P1 ԯg ÑQ ~Oolj"'6+yu[9Wܿ9Zߖ 7j}#^ͮg hv^(.CڱEx R'QKtGKqA^~cn`6Q#4$<G>D6^_"\觟w(ꗟ6O|^_޾.Lw>2]_lc?w^~}w\dwJRxh4VlY_,1"sJSh4IKm&I({tp +M Z6 ( rp  +E$KŔ= Ґ/ѧR,3آ^5$("Fƺp6Lz ].cǀaFh _~lZ'D9VG*:Q^r!3;]vtjG "D +bB^r,q- +AGH(wB1θ3:68H'ԤoLޢ!iEe{Q$爇K@J*3(k3di(jbR` eTZs1HރܢVaGd,Ka';lu3lMnY=II 7q!dH,f\C&Id!Q&rɳӖo \ 8vba.!P>lmDRl,/ 9uHΐ\NBU" +2fۏ 605f}:ABirWƀ5$lKé ^VߐVKDPT㰬#u YAQ⸄gxڍN%JY + hO/ǚ+.~ +cav|q̸Ar.NZxPJh0![Hs6nbi=QF+xdNvzB d9hqEzK`E*et͒N8zb!vUw(,2)+N,LvRF"_r#F,w/Y6gqA !rg= 'Np2bp'9@ }bɠNTnsYCrmZN' C?6Fۋ?A֖e+]rA +v:rj0u 4T%3pw@FE +Ae o tb-];J ),"dӥ9,DzE)%DXݟ蝆3'UI)hZ&RUV3֞!O.02(; f'Ů dw&gdnf20Ux<Ңs%HGJG^!Ҕ9"c9ln롥cHd!&TDbF^üH"T#,"j .WkDFG$!J%l!ZRQ(u>#/'Tl,K(*sO)F8HWGC~"AĦz8(:"k^^!!ұ|ӁѵbcOn5$cOՈUHY,yBBJ=J(4Mb"3f0:I + [MZo O}g~Tk$ f#BJ}!5@/ +D'*ˡmZfR5,P/$itH.ɋcəIYZ 8-0\TD/(%uz&(=U$sMQ{EeA_il-)d$H/$Dqx/iMZ6 $L5sz^7k &ʊtD|KȀE5^S+,ЩZT($"rA3΢qwH 8$Qӊ--<(@Iz/r0 0xզeE~ia2;٨5/\|ېiQ;$*\bё EQ?*>Je3y֒%gD+.8q˽Ăw]!6JJ /xdAj}IIC2x˂;u Efb:R +Uţ9,hG\PD>N%9b GШg "Wz&PVEV+{Ϻ_u iQ&e1}1,&E|/=31CU"T42v^jZE=IFa1^yQ@UFv.ҽE2ȄeJ3R/1V]xوPVV{P#k:s0rbF#li.Z'}GM%b" pkc~4{At"2^c9vp"]P\?Z` wQ9AZT,Vq^Ys-.AR{`# j(lV +sr/uaTK+1^qPIA P5,y)]ƪE,N4)ڱE@Č!U7QI$B TRʅ׃Y0p+ +f ;\Յ Hy!^/"JN ^ASѰaK80z,+ⴡ試¬kh z?N!-vZN[B`Ѝž|e˷mE8 倇jűDDo0K Z:RdE4/AɊ]׏Ɯ6/͜.,Uu^1 ͒[[!gP@dB/ f7ظYt4A M&"6Ҋ<۹Aaj1m"e92U;є2@|`/BX;jfJ̿}Cn n\)%12dyv#1soDc51k9^YNTK凂i b7|ʆjYJ,r6V,jگ Vnh~||`ρ!{@L9Z8:7-8/L׌ Vqtv`G0tnӱՁRf 4qa0G놺:i$?~1錷K5DKqck}q{Y8±x#/@^7-*6"qD@lFPU1'@ZM} }198e^!l&74~{Ԇ!tlqdvNQ@\48m&"zH7&=yNʂȖ,ϱ?!.}/}dU.W?2 P ʲ,~(Ao*+礶Bl˩PQ?s |x1$ǧ0$5Q(7 +W:`mD(JZ}OHO5"T !s~A$n }UM5ϡڒO[L RwKvd>p4+U?'!BXDg7Q*$BD^A [h1w.G +9vh-7K7.XzOC]d&U6`ɏͨ'D\I*5ʫ4)&E4lyi0@I3+OYtTa#*%=s$gRaW$2: ǠΒD DӚJh;JByqx=9ԡCLP2GJUG.qF~+&uL0Yg]ʿpNMV3/iwh ~@>X9k$7@"@~h IW,Ѐ ԩDZg/J1q*NeF h纆qIc"捏IO=: A! +~0CP9h`߀1L@[;ic90v دA0LXJ9HbZ }nd U2f1ANl,@5 )Tr)&bCvv +:A֔2'*TW0(pyW +vOƱuhOz=X +K gЮ^7Hh o4Rƙk@6R_&[DZ)VqWE9cyYmwPҟvGl\4 I,VT/WװTQ@XRn|#Ou 9Q8l ݚ%f~X)NX;\I4Ś׼&|0r2A + &C]Qrdq)J_ٳ͜z7ґ1Ì|" +!+'[>TR T-GGcʍԆ-njݰUl`<9Jleц/As~&EDQ [Y# js̄4LH*CT~!mjA7Q~0Md* +H|]%J҉R@ s'N  WFz.gS~l0=S:9iO&zi M ?97>) aNRL~<8P=tѶ|.01_M8N9I-8¨ 8 ̸qꜩ8g9g8!jPO47AoFc% +]AOǤw)o 1 .F3|Pu͘suhu|534I/e Uu۪g&1ꙁeCBXAgg&ƺ|"swsCF}3qi;Qzff\=3Q N>+d“g'qz_:{l9ZGgkMBwI@Y@i@kGs$uBűfKcX1@UMj[H}. uh}3y.*f0n2JЀL7ح6Z0iP7Sx.^Qhj<1 ѐڤI5B&vGS Z2@|)z?{X=t&vHNvNN4cb&T,"O pJͪ呀-5}yU oi@[:Q,u_jFa VeCB+BI7@si)yUדP^\-}4J{&w>ݍI3Lw\jH~e^ +j C@5ddrFe'i@ܮ +}cjIP,rMJnJBFukiJ$Ln w9gaF4@B1FhUbI-U&t"E|+`>ꁨ|[؀E7U- +0O ?^1:}x\o8g7*"0RQr}ڗcsUgURox.llTv%Ԑ&|QX+2P47Gg1_kiFaxÌ`%RFa)uƳ1Z~V34y6g,Ѳ֩F=oWgE0}Y˸ٿ$/ĄBL3c67s1l?i]1TӅ)\OW4??mĪ]L + C#!x`Uxs4s%-U!] TUqf.:{G,nz8eaVCOFLzs$ ^ [˪Csl fXl#g9 &PM@* N`FFy!ԝtBZj@֢dBzkKХ*{@ dE;I9˙1.OHJXRكh ++T:# A%>hnʴ͎Fo\{~L[ SIg/F0b.HCga(;M^CU$_6(i_y SQS +i:UK H_e&⹬8<&~5L鷳#Āak5]AWܿt*@F74'ؑL-VS\?N"ւ|c>3!_<EՐٹ0Cyċiv1VtPQwzy-h/8;Z[F}P]VC;/YJgVIfv[z㗜9NRn{ `*R'nSOU%7qN%&4aI#tfޞC' *,F%aKI#TF1jft,s67K9ߜMkEjP!hs0P_ ) QjИ AM 5Ggf v5V 5JC\x9Ø=DCT4{rЯfa hYZ^'qҜe[N}YUm`)lT%fN&%@ Hs:DMӻF䯪pjQ@*^M4ŢLl1XZQ},.Ͷ>mJJաԤyus냲٭RA;k!nJ %\[(#3Jsajp(bfTSȸهEMJղI|O&PwYpF FCcԤ<;ٺĤ?Cjadf@+2Z){Ndvl0KoO-I  n9C37;/Xt›ҢS%- Qp.--q1 Sk^ݔ>$v|X O@V>9|2çU O9u6y O9|Zr +iC O@~)0B9ck>9|*çe &H>9|Zr!c\ `$AZr +iӆ@V>9|*çU O9fI O@6r +i@>.9|*U 22@WM@W>9|Q-NHĭ +q*U *yrTKdq*e 9|\r +S qq qC @W>nq*Ç *cV q* >-9|Zr!çU O@6r +iӆ@V>9|A O&x1)>4f5Ҙ\[j>nИ\hǹll<{Y4'Dc^LEfʦ 7 k@kyڧf4,'TmvKW-/QsFIlp'GmrN* Дe2jGm㫮N!7$TQAt%*ھjqd=̤ٚR+k-5zroW}-8ɽfD%dӓ{Y hғ+0ܫIwOD QߌQoɽGoC&=l sABJ* PW^LI.T=9Y!P%+Q*i0 dCSKFȻt2ލ(ͥ*LdK8i/y 'f/E][IQy 'MmK8U3eN&r*NK[SYJ2Nzl [_[ʼnpl# P\-+U꾋 a7-K5FGI jg2Su2S_[ɼ(.s5XE;(:g{FIVkHrkkTPE7-N$(:wv~ENQtD(0gQhv^6Ny-'%M-'?j 2A[I{}kk4nl@b{<71NI?7Tivrm9'BjK8X9(9#(AIN?~uUJ>sΜ9s}WursLˉ:_# ,âNќps2kǩb2(.rUhi:Ԕ.FVdY\cxbdkYPkMYGd+ti_u +-vM#q*r^ Mĵ +϶O2ʫZRp +'\tU$q]RI_Dz +Uٗx0Jս]ȘʹXh"%2кD˜{ÓveeѹmXƵcID9*C,MzNׅ{% +jR8U5ueuNdD@`Ǖ^XǀmD89p1#.qX՘}"`uj39X$ZɁk9gg1G'dDfq Y,9]h*VcC)%SS֥pN|H/Vy&@PwxƺBщ.3УXoqp.\.}vÇkj?ɥJfMe]qN17Kf9zV7?Bal'.*Xi:Wr;V=ٚ^\ŵ ŧL_ݸ)^\M7sF2S:+tnV5P&~^+T7rYl`.Eمd09"X$EAY1s'?X*} (tJ2exv4h_܉~H $LhvMm6(MMR7"+2uid,\JȁLBah L9<*2m"1QLYE[m 6(͇'ؚow]q~LaEY#)v4-f^ "{^- +YL{DQ4׸Ev$m@=tQHHfXs9j>5F]r3lJgS\&_-.S'OSg]vnh:\&ŎA7B{%2[Ӧ27sH2/1IaA>zPPu)Y|ˆbŁ3IC~PIԹY25k-0MeHC,;-el8rμA4eF8i%Ye.vhn>\yk;h-V{o38@]wo"ۼ:=Qn$+7"Z ca6e3q^ʼnYr "gE+JŎB#+4L9-ӽQL ܏xPZj]C%Δh`s/G&udp^,5kS<-Qԉ,[[} ȺgENXJcqէKW[}o\dfY%і*摊&A8I a;6E)>yOA\&lC@ "sߩN% s֣r~,š)[W}C8f_&|]?l_q@+DO#uv]6{;Dg#|F@ZoKf.$ 7[YcC73tp1(q͍l݌ 椘BYؾg!,Y@p^WoJ W۵~9E)j6tWnF ;p9ےb>$/.i /kܺcX Vˉ1 At` \mHn|X41Q!Z݈E9Zr{[\db{-}ſQkk|bLŎ.bLFňq^?j9fW[-[f81_h5sL8O89vz5N[2!=>zKp̤Kf eJ|Wӹ16^ _V)[ɗɏ"Ssy7'n:jsfٛ| қ j6k`0&ؕ\%%"[jGT W4 +'RQuLnzwX<(AnEdD*eJ0]DLZMt&D֛';x%UaS[DП$+3؉$$z!( +$XF@ D`G$F,<͞R2fKp8~óUG^UթLm Q ~f8bSџ@_VCnnjQ}3'ȧgW=:%n"j-4xic78p!^ALH户\I KyWUFzǂg) h\ZHP(tA}C}{Ϫp=[ZY8eZYDAdovhhy߱201oJ) $$d ps 5z `` 6T0&A >Dvܬ)$d^( Ӕ- Tb+h2`8^@& U { ) +Iؕ"WcL1>N'B̢Cm2Eu"Հu8E'˃g?ˀ4nCyԐ5kY6c;Y +#MQA& ˚2kUzn Ia8'$$ }( 4Joi2K4R: r"$AbT嗐7/Ftd"O_:YSRvA2 ~?\ +; 1ӊ}GC}9#XҔJ +OCh/cjc#āl`b^eRu K08JVp+TpD;2ObhMO$TЀ pso1@0 +׌i;4$RraLKJTzk*&Z&jv4BiB<~`Pp`.)tA>v#q s;Ɍ+`e5zI,<|Be'kTe4أ@'-.:BC|f0]TD E "^ 'bB@ YZ?y""]M`]"C͈XArѭGE6̫uYAbHg&[leK +dbfdkU!.SfP!3tht:,Y֨[A: XŠg#k&$gڤa )F'IPähB +ɐ):B'$"QfE\ {48HD}?: %ĈH4FR%.n|YؿMXu>G9 ǂcn3I56,! +?a*D&&V{He@ڔ'JTYR +&G +{Pkv{2r#҇װsIcHw 11u@2~Ad9d.س1(V@?DSPޅ(SP ҒB!P + +Z"-skO+KeyAxj^H4$V*!AA +Ɯ1* ޛT Z\{ghH3/ "UQPv2nN*h}U1F(r\`SѦD ~@[Wp*JLA/xxPg*#WqhDj4<(x\o*dX5 `:c  +} Z;j΀ K 7>G!M,$`zWA= 8H:>y84E +f +g#:ƶ VkWjLN$Y B(~x_mn7vt/oM/dK m 7K;TU @[z. \~, `̳xGS37$i[#.QTe|6%uPYD1(mcplj"&0/%3 -Кhd0҄`[|""H)4̪GϞ "tĜ25*5 v9p[OllHm) F Ƀ.F !${x>WYuJiUMnቜW>!&Cl$~%tM%T( +oiɣXYM@ǡ(Q%LHd̋l#` +4ZF(4$]'asJ]NtR@sUgI̥EuE&a%6]WA2qT)fZ_΂8gmE CZ-]/,&U-3M x@e"Ko_ +03"Ӡ|u`e@=DA!, Fymx,a${䣳CdZL*Ϣ!/kLC)&]* |]5r}/\ ,3M``S0%?>!>T\Q$pTcAWjC ufZ +*]0H-y9ۙjqԦi()ĂFBXEB.Hc@d3` +&ʥi =!&Lu@X0)*VwL-5ZT!F+f;FJT.i,kTD<7xqW6Y( +mD'e:L"jFZoֈ-p:8 +@Twta$ZmoptnlhYiZ%<8B)PX7<}-c:S @`ki6)Ǟ^Td9Qi*Bafp"/C +H Fۚ%81cr\"@dFJCA@!l mp{b ؄UOg9~.x1A`OP,:WdL1iXNuc{wP4C8t mz-n`}ӡӤ< F:BǷH"[yf9GE}p& ~$KD3,KiKw8R 5NQ3CJh)V PFU(y)LB68+<~<>Qisj^1 Ƹ྆=C7Kfx&3K7BWDCypp &ʷ $BSuB0^q!'>s]Y3s &$4j. 5~sj;0" ;U砗L*AɊAVa"hD8kQ5PQ܁ 4$Q`ٰT8"V΃й Oݽ=صFcZsPa.-YdGթ~ 8#wQHJ!+Hd8*CC6cXDF3稗h dG8:^8,ew+K4[SGbeHpe}tx*,ZJt4xQ`yU8\V*"'H Q? +eFF$KҐqۉ4P$ZB2Í ++'wpp~;Հ!?H@x> (tIol ;SqG"= C5Oa*Oo1o*A yLڪprgd)j!HW .5Q U5 |&**C9holéY'e.4μ4uҮ:-ӪFW%[ +0izIS&LBX\ Δwgv=7WxF!;P*n),ej d j( "K竰<41AA!W /!PPSWbA`]kw'pYDµ +$Ѱ'h;*,8%pZ HP#%Ds VH/ +=7RX<]"%d?UǪHpڈ2ő5(I@ESH"ZO.BVBbG˘*̝-Pe ?E4ؕ<{G3 AV&eRYBB̩iR4 e-Lp{Nh$&y|t&zIUU3+"81Ų܀9#WpƧ"{ri:Dߡ ):ӹ +pGO[=U%~+Ջ(=ntBD=f"Q7wG *^ȆUj́HY +z"#|" b Ѝ7 "L >OcFK"6"!: qUoSC,4qz:en5TtO +TP(0_|&-8Uư;RQf[o:uݡM +JNe (buͣ> " ^&qH5LJ8J<6&R"*Hb"0eqOF/*3 +. )M㑏YҋYST 8^਷ :2,^&M}fH%"3 DzTyEGXd[5<{Xc8 +8dꞆK(1!hw?m^w~s 7aBKx:(6>;j-Mxš &ygyA J/, lK`aVKO&F QBpOfw% AK<ଔ=]݈=ãxfrNa,fN &mMS3cL?A3#6u-Z܊ulH&?[[b,u/_ԩ5W +18ٿԥ۴|L>HRqމR(xžɤ56%1 +{PVFO֌hqaݤjS&@'ЍW,`pQᵘZӟO iır:Istn ɑAn#bc5Q#朦=?O!0 4\_IE.l U?c#$ln#FCiP%o&$[cy')PSI7o"VV8YHUA]TW?P׋^yVwϝ7?R4RPktvVL:G񻳘wh +h5wF^Nbte}ºY05v[O,@h1Kg!bEZP7'۬EDeMʘ/pmwIhS??WIpwJhyx]N0CjjSci?7x TZ~;;ХI v3'cd7C7?{MMff1-Os/n?'c݌oe8 ~nA +x ctÄc!]Sj`_uS01Ө?KOc8MǷ!^ğ`,? Eri,*(XDϹ=^ 3; [}<'vd%?p{ta=.(Ȑx"ipYye_@O/|xAU?OS/&)LM_/kD +Ŏ?^M}??Ovc0JOj:GwI!YZ?x=x߇ sA>?À+$=)mFǯ[lvPt_9Sh8Z{R={gG bktqLw=. G!"%b>%_r[\] Y~kF_)Gs|I2?ʰw~ĺjo /J ۘyJOsɬ!@HQ)fCAacn(ٚ :aD]aCE"P0|k&@hL섑?Q]@!%xe8(N-HQ:B?wټA{%' 9 +Բxs'̳8Fpd{cp6Wi怑aDlC[e'=d7ktR +.JA@JNH+Đ*f߲ͦ!¢l-!sP6: + + cP.+1`p% ¨3DRk 91^;]N<(E'e*+80Z#P)(}C%ǔ46֤OʙP5p,^'}O/pE/ j؟&e˟ׄ6*,V!Me/7oFFyr4a~It=S ` +S`2}08e =?>?>=&}ܩl+9KbZ) +99{c+o) +QD?AZRIMGԲݏ?ߝ=ӮkwZ5d9f?|1 2ΒȾD2h1x8i-CMc_߯1҃1lD!yۘ-Gg@|:ig5&rlA)9~ hEkԑ?jX)v,3.נZ!K)%relefΔ6#ʓX-ւƝtyNjϧFb:"jdc]gւb1Fh+Ydٰt+ּ!cA x3k͍Iw2afNA$A-m0zG{sO!{c_:%5^5т41՚Z-<.˜Y0~[z2K&w_1՘DB{×ag5ؒucaADbӟŏmר3”pvw+y"S|M{H ۘήZ.`r|FvktaVset7L-ꈥ‰9a> c&m,u6:<p1v)ꛍCu;iΰ`< U]pt}a -6] aNU0G} +o4S"o*32qH6M Z w@uQwnJSr_៥\з?Y4iGp'/6bl$ ׯ(v&Ӊ Č k̘cy=ߘa".:z~N?&&;%UI o/u9Y-+:><^ ľˎC/Eo^ 0T%A l Ma~IbࠨI!U翜oڿ}:&|5߿3?3!FW`~g6&;%lB`hFS{_`GW# >ܿ}'=luC7DZk:>]`(5]3P3拙^|m &nDAUO t~aZS[OM'y:pR̡~*v_:Pr8)rj?S% ^wONWpbxx\i뛷kՍQLO;kc^H/!Nkv ze~Mt*pŲ8ך,Dе4~[Wtqe5"'>5?etf[#'3nZs\BE-+Svv~r5nm> GFa}j86W~]\8$NSq9*}{54~%.=\,[k[uޣI],f^NK䳍OE F|9jdM]d2mfA/ mFYLս/ |3dg:Y+}޼32bv%] cA_; ؐ.P6.mԙuhAͺnOY5>l6g`0wr.brx3,}r9ewjd] 9WOGIa@]OwOzNf"@+ }Qg k9[*;(Y`tŰ?q\6-6s(njz\k.ǭٷg=Ɩ3B$a.i mzq9Nz M\΁{do5SE7.סf&^^`~y.Ca /~}А_| tl/^Nom~cOpi=o[cd6< +3Mf^~d?C*.B!zA&FeXXl7mzcFQ X c "̇ԏooAk:GuO.c8zr4 2e\v'YgTA#@wф yIj_[M:0/6ӚL۪̇i;%e\mb_Z{{~0Ds|tuƿo0SbIUW{vvh_-g  ØvTdyBm1sHZʙ!'}=<9=+{}aZ,͋702?G ]Kg|&;ɬ~__p*c¤C[&%| I+5ø|*J@ݡ|H@n8~c ~Ik8wp\6ԅDwNc('Sh?ے 왅 IRjzs!4#j}];|҇sgWT\ӳ7VYMMKqkcKcQMe{ dWUcۛ[('*[4[ţֲݘ!M"7OrmQ(N(7_5ݼ&~w٬!h}.;F+3֍x|ʍeN~/Nj9̴MM6QO +6Q:ױH(W<7' 5l{e>/s'pPW5*][_#n/y +ƣGE|Q[x=7d?^G%N:Prc.L<&Qb<-/r8QvWٴw|\oy==UWF*tyNx5?^Ɓw庽-/"+LCx&Gq/9XB~×Ӄk"҅na;^]my_@jF H=⩃lX\wN + ^y@{pKOnr==D#ŁU"WĤs0*:~ U5艉y^yN"hS ZTEWb1mOי#]^55} +DB{=xɄN] ɽrOO'Wdy-sn%nEہ9'lA\{ ߁lΔ(x(Lna.pr9ҧk:t_ΞրI{դz!@ɢ5G{/v@ev2DTuTRN~ {[:K*h>&!mDiOr'(.WQFIM̷A[hXB7?5P.2m.z6#Ψ"@(:,dsfGnRKtEmѵO ƥD)YɦzEKn6ߢH]m+r.oư%0ܫ ]GAˆ\z~p27iz "a$RXL{b n!o*bJ{U]@Hzˇe;Nԟ0zy%ѨLFh7[h{gi*KTp=E_?[Wjp7>G{{M픋Zv| խ7q~Vʦ]}N}]k\Ԟ6A{%tI 'f`|j_k<-OW!mqw<g;A,{]m.Y{yk0_p67#<0 6\:$uLm^H'ds)gR/sX6+){oZmMv[^ܱGJv ;}!Yꄲ[vLH{jTnt/&^#fUB'3ȿ.1dJ.gWF9P|Uv~<>i=BCBzCXpL((fd^T8y"oZ%WGc`7kv MX+ ,;ztЅ@S 9voAiN;Ȧ 5HH8m?` |"ֹ'&]I\4oycw*qRN\,uuji +_s.t.jIZX#6jȖϐVMd UsrL&>?89jXYL$Vk |kLs =@/3b~duħI+D&ym,뿭-[4V:릻cyfAF#Rڷ/XKGЫlb4AwQY*.a `6|ŎIk&Nw& 7 KCRa'E{EVl[6 'OLK ddjfCjC}2Ϯ^CB$+l7UYL"dEl j}7 ǣ^h?߯ׄK^f|#~Y)@n^5>l?(vd.%rڴRMo#[{<Z V=5/+}$ԏ*g'+J:TD\{M#A6F sŎsNĩ;sn۳n/+t'Wv(QozZ~r84x~fJ{^hKWkRxta<\m+9&#)W\G/*6u +M;4i=vc6y̡}Jk9ݻ†k"߈]83wd/jf$UX:v2iD2K-.tϗϗc=7JZcT2¶sqEk# .QIvΘwjsѵBN쩽>? c1:LsRH:?s/zO6_?Ue,®^OG}BšzyP`."@j%_ -XµZ7f']*>ӎM0%EfD|\>>SpP c55ǃwiLN)])F bˋG}-gǕjv *_;kpQ1cdzD:Y,M /$b 1VSp6J98$Q!gß|DLAYkO\}74d$e6LX8wHK˰pw7d'c0,> NqAVI>wۜ='1"]e~?%)ѥ$ +%STud^eGvs΀xꭗ-!-km[DzwI7} C5I Í*4{JM}pvj^lQ1m]jmvSAN5אfJ.1}[vG58uVغwDdrl~lE@ ]h鴏pZ8e} |#OUR ;l% #k"x2N + >_fcD^Ժd d.U4ϕgu~(a_iov0L=='cC4$n8켥wy;u`Cv<^^'֣9"x>bIcWv>{obPUݐ}g4~1*r8 wM 'Sy mߞ~\|ҫWr&wķ!Kyu 9}x+ly/cD]vy'ycKƍe;Y}_s ??_h>rЀk~d$u{ P%m VER;‘ ?ߎlN[^EԐؿȞ4]+f4t*ʇ™7Zx~% + Cqp!t~׎^RDE{dh~g7-,kz,$gwt\lwU8;D'qRvRw.k8 +TkWC1Z'b'Фb[bu[g%2h>zZs+9~8e*)v"kTB?v:$B&rWzO^".t7THGJ_^K\# =>em.xb4?/Bk;.&fi,q-ݞ,p'rߖ/r|񊧰s~6g;[^"3*Vѡ6{;]Z_#(|<4bz(F1#^5 +4/?SrNCݸhRNFNdn=EWUjYm]GU mYoWeu_vߒg'FUk;E8V늱a>\=x8˽D"L&hȔ]TM; +qho7{ɞM\(=͵|2Z +/Ż/ʾCqR>o 7ȝV^t,$CջToVjM>^P˟q?ԕt^IKo-'W-\OץBo뿻R-ェ'Z =8_Jv34d\[^etCO|u cOn!wdc9eƽX퇕K?mnynVp蛜אxi^ +܎wZx𷎸arvsƕԎwh߮K@ +=_CᓝMx? iyy.ݳյ?qT~+*GuȕR'+Ti%jVvGڍuOFkAD( +GN:-xXSNnwKttUC$y t~@;'{|X*Nr`|$?ߎY䉘o> +k-jJ'}mrE9v4c#vwNFdmNũ+k+7YKc1|;F5uH>I/;fryvڟi8͉ۯ\9Jo +Up^ \a)i5i~)g*ɫvr\Yh~={Ju^r_L jV_w;2.ūUBVVыucVIHKVޖG#޵[tpɉcj[<Stv+rV[hK}={#-g^ïn~ ;~V'Ab> zfyx>;$vZWyJ[bܚ5'~Z9ڹ%ٛJt7u_yx4y2d߸(<*bh} _)\Iq[  o1<)- +חco ۶r8Jw zNJ7ˋ $3B1#Oz󪿞(bxT[1骠NJ%g/ɓVMWX5Qh>^SHgQGظ;ݻOq3ylt^Yy)w*VGV^>(?wP;KvۃF:{;˹o柎c50PWRk~YUNql. +ڝfN-q6[=3 ?{ |#u2:_d>_ՅFwŽ&HX<קAIyٽ<;w|&J_<+S'X2`O\e`5c?{m>pZ΢z6|sWDs϶0Kc~vyb/B+xubYb`%'>LqΣo}vw?.2;ŃR[ivޠ3yR:WJHJ>mp3~G祊^)6+1+=φ۱z^?VsR-z{ugP7YcEp@6}4߮^gl/"gwv_;MM\Җ+\njYLtj[ToaNW̗'/۽@,r4 +b2ϔ/ +1&-WOJkO튷uޞbQ JmWP/wZJ{șX_Ůq=\wK7qvu7~!JTҳ.wUy:U[?zA0`39DŜz s1&_Z]|QO")єn6*k{%OՈj*X'nʼn.MsE!tYZfЖ%+Y~V4h4,,aJG# +XZq [NhNԶ_w:ZG#eYKѻ1혨+bIwI+>W~ZWm"TȑhZ];bvzSxZ#xuoFCbux2tWkb|1XDz*<ȇ%܊'~&{L~vEMd.p!ishJmmhLֵ-AEF2oO=4~W+?i^jutoC,ߪQ{4vUu5y["®:UJVxy5EWjn5^tVV7֝͟4cͺA$w/'TG3Ǹ|"HLˁn[{:cn -^ D{Xf鳤wʡdx_PVmj}ѣԘfN!$x;+/q&2M M|Pҹaz)l !H;̵4ūuf<`0=Bu}ϕkǸUrg]˹r,0/̑EhK.փگQɴg [k Yw7ʭ5ٯ_֪Mm8<8a,j`vGQm7\U(ue^o?1bulyMD&ۣ: gjQUNl-Xxi@-)mAjnN_8?4VhS.Q{2]I$w$mQq f]o=.r?3pR%5 (EQze?ӶP]&͑S6;w6+Q'k +Ι;z[Y@kKּMکy^&N'e^X *PkZ$}(?.53~ 77>M p2:tKƯ] .w&xu>v+l[{pk2tߣɴa#dfu';}69q>h q4C *9Y1o)Gn~ZxiӭYU>bΪ݌ABOP6*uu 4ek!2XuWO9=佐p/SWNgY.T?1SF:6t*z{]¬OvW0f1ߙjvqguڸv9AZhZQ nn1/c0%"C_Vh;lEEcImlVW{+ Ϊa'/{,(2zp +eG̊g5jF%(yѽj?>2^Lq<c#P[Su-W3TSw潀ZjpuY{Q\#^O{)j[V*@FB]ld"6kdwku23pq]Ahj!vPG+Ըշ`\ P&'QVm Ǟ+ޯa =Z'mҚ_J<[,Ħ,i-U η ݞʗ-Imnt2IDeK՚^ kd`ckT㞒|I,\&Y>Gu<:6,_Ě)JQߓZg|Ao9-C֗kslw5 Q7bls)ceIhI<1OG |8ċ"&xV΍)\g9Ml&R%39TE("FoϰUXSGYj [qr%iCuAEz1p0 Ba~IX'V)PvL}f'7#p8D:B|>А>YM)ֈڵMVR<<Ƭm Z {-P]^N3/U̷F[/GzN|a+N'W"m7r.NJ|S^~A3] N/i8U$W8<ئ;CQ=T@VQuv>W2SX4E\*0~O,Kp7'n{uVPREbSfLeUY> +t׵t9\R H-O#[.Q~UN'0)KDDJib0\)¦[Ld?#=J&f:19I`i[la騽2XE_iB[b>hG1,@$Ζy?ɢpVb?Bgs0E=4VR[Mt{! ,qv\nI Y1I!"_V{cgDKY׻pU|)VBe"A?S£p4$A}(A;}/@FnO^:/O(,o2J)YGcYit%,zLC7w]b2Z*yx٢k,w"j]e> x2QXbՏ .Pn^zM9|cu}Oe㿗^{1U5P6(rj{׵5+?`*j-eOĸ]mU?ڎQm0{9aQ_vp 'l',$e;齵 w)eÛ_ G+v;X $R[La?k_ +\J$QvrMJ9^9Fo!g f,.ȽT?(?DOքUSIh/e +?&w tn P,VR. k(x{-/5lG$V1 hDb3KaK=D'{LTw]í)$/t ЌJ^p) ﵤ@fI!x W%jTLIef|#uʣLV-Gne{qA +l':MUD:C3CNW,T}EAj1wM +{f0 ub9%AXK`+k"jx}z |q^!cALK=,Zcq$ nѕ{WLiFش`~R֗bxR*"^ݷ8vͫ.0 K¤=Jy[owX;A¦,J//_BmS1jb[: Jx;oS/NWVIni1;5|pY0bBY v)bC\ݎ|{d :KPMuc+7,:w͔p/V3]d5uȟïP +u{m4](~PrnMyQbe:XdcA}Kݤ}u>*c$TĂ:Oa-WMU/ 5gJM*U8Qè""TyQ~ 4]uVkܚJ8 j(V%sa,pqٙjE-puPó0|5>:`%_f/,bB~0#1]þL,i3cB|O"X2H/,]p )zwA[+KIV#[>;t liVM6EvѨF!RG6dԕV~[-{R/d!9'b_yBB.jM'i#dϻf4'Z#2KPF06R#0:A>=NweRPSwυ7іp=.6a7CXRqdfPQI->v-"PѬ^1j`k7}~o[,_ҬPN-=6mϗX /7+F-^8`J +U,6jʹ*j=jVM.8pKj3#ɬ(RURl5y7VvT>{ؔ/f+![ѯd0LER zeOPT;"kT)/d>z="`SHj%7@?~&I8[9@K_%PG+̿9u~ÏTysVWLbtqU;jr +\,1WW ]o۷|.xش=ڶN_O5[`H4˾2# +&xyّԒ99+:Sb*I-I}2*-IE}߫Zvi;if:FC~'@N-}9ﲹW=+نo7뒂qK;>ڸk@͒A)&J{i,Y]*]FyRHOexMJڝݓų;ZѷA}oqN;Wb؄ +iAzq.+X7 + }1"^)Ҽ־s:^NZj4+kk-h%२9i-wJAp mڵwNț,roU7llu/{ +ц1ȅ1?ϯGaD\hi[b{!U7gLlb +xTY9Yt&66J޵o7z+@;ňzXt˝w Ni:k +JFU0Rzo]!Zx&|Eo +=67*oTzf\ʕzzf]+o5[/xQ$5c[﯂PA[͍ Y+͵=VW&^6&~&P|'5.[Π ь%RGw]so[JAղ?fׁ4ܰ6JtjDKaS*Wfs˼ۋR5Lgje1VZ_ir۠+ +Z pjƴ;r87_)bR;o7+LgNj'1` $2G9v܌-=w– `G㭨'R3u"At +;M4᩾֬@-tzg: df]#y<{8XK:Rz.tzpAښ 'jT덨u(g-*MԃsQOr @ʤ^"pUvrD:G BצfjƬ"VlwtU d/+~0?ls#V|lB;nEUu=4ҴGJשּ&) jBFFxH-sŃ`Oys2Iix_s[WK8yܿ7%,2'hwУ_'oYg.7C?w/#ފk/_%W3^Fmm7'j\VBukźfJ5emb,Y +Oxj~?l<:t ^ŧhxm/,kn6=$`n-6Bu ZY6;P;P,e^O#R^e*Y̾}V2 +aխ3aE޶Ì0M +#\t~4xq:adl4fرGJ5^<Ó֪U#)$e R + +4͎Zqj!_C;c}{ +_0;]U9"靮2zAz <^Bd7. V8p~\a~H_׿ Pox0簸q]Ŋ8/x_|jWRTXtVm\#Av"쮏5bcuy?_b +eЩpY1Cc+d,3t9u.[`)')ۣnjIy'`' wU50*v@N/zSi^t[xS.Dž/d e)6 ^Z2ޗ">~ZGv⤼]_&e+hvRlne6q霒 $v29<^t͋q|,j :ݥՙy*jU^nM| '-τW,8 ]I?nT͚o# 炟2Q? Ftpev mmrH%DtLFvhn$z Y䗕 ,R3}>,t'֗r( JVR@F XdME~_;J!ѢF2~LIL{5wWD*Lc <֛;~fӦ?^?B}M/.ٻ~RC޿|/Ot\>7( :0ūcg73´J>D^?HmLFdK@N8W[I}#am-+&T+Y$ XF9(fH`j7ISc1 xNF'v᭵ʖq>j!X~LIY-DSlc2BmꜲ|Q PӽNRP"lo74g5:T= +֐>2v3pJ|b}ʶV|g-AJ#Ӥ>[(MTAz 8X6=px5 ;׮4{0ȌbfCoBɧ~ +f!bŪF0F.lvZW֖@q惉'o|4Gf,rЧ/θ 4FXqrׯI-K]yc/GtQW;xmr*$Ict]H#^xKe`;:O$+Cr)(d >)M?E&ы^m(KpH1T5=yX/iR>0@Z;`;Ʈ( vfWOQॱ|tϗIY]UWjN*^t`eVg /W1_v7YkQ=sGXaJ!5p[pمBZZ1FUk +HcbO^j==QP~ rۨ-o8MY Uo!R 7gGJ}(-c$J69p%EE -x5t>Nm(ၺ,Nb6Pq*YFz[H 'G^ VOxti+ؕj.^Шsw5Niͨ"{]%y + lqd('XZgl2ZU'83~<)G0 + g+q翷=s֬] ; ?y·3n}nK,D{W$_7Cf˺VT[ޓh\ubj"H6;'WZ/,lr*L,m`k=|Ͻ"o2ɦ~TOyNjJ@}te8f)2rP&;ᦁ eUQ kcݠ iYfٯD{s/! :ivv)gxU="蜯d[Unkn5ټk4+,hvx3 +f"2/lQw,]}50c;P[+N厼[j5,@abgҔ0[[71ef2-E+gCF~λIZ&eRSGrbn`ʓKmsӵpM7HԤt{M)#PLzv !مtf?]_l)$vUO b>y0o׷Q،N~:A*|ʹP؛"zvo"xО6β3ޅ6X6=˱ 3jeZ\9e"#fp־nxx*K+?>/.*_J_$ \άƢ&P*XsZ^o ++8$XB=>rT@@ZpWaUj-j9X{@潵D ˡ鼈$.Ͽ`eLޔTn-.),i.K(mڷ})ĩ䱩텔ë́AY%Ǹu&e/Iv~ uAyչ5H0mgxVQlt[#_= Ӏl˂?m fm^w[;9j81_qs|A1fe6P×JuQ?+K|ܦ+MTvʟՙ!Pt jI_r%EKk b&"z=e^RMʼЪמR\d2g屷w bf\VF۶Q1_AtPZf-k0u7m3ZEW.I3T( pF׎?9 +}sGYGbz\~ldm٢_Z]2 TfyM"Hn=άeCGRbInOզkP0ܨw!Fƭȥ6T9atTI}Neuqp͟"ҳo'8h'V븹QM2{OEv. + '慦=A)akc+ e?CpJ-gΣY| 7@?~e΍[ٳE[DfM/R+GE~uKE/5 ,f h; F5Vx,=@ъ(SV:_fa.*m@Wl# 6A,Ž&V3ƹdSOGl +IM[4wWQK^$Ȟ#hZ%T8౯,ٱZpX2>ߍ-}[[,vs[ק?i`40iI-Q;#\ mw}ºfYIAdtΰ_FKg0!Z˷iRc֘5f; _3%J{cFto~㼸4M׫R6mY. b+v*Nx+ή??sKU +E0b@ 9 9b{~ͤX֜VU (X,z0@@'(\7y8O⬪O庻T.1}yr;drczW<4|s36en;,tImTĊecߐpfPȹ뵬( 3~.+]|ӂ>8(^rA>g z]n=B1z\Sn`T5$ՋA x ty[鯺н~-;N?*O֙2 {-jZ,Սr[3,Ѻ^A{WI+v3NAd֠ 9pUu6|T{|M:j]tC+FV;eAϳgOg0ڬ΢$N(r"mAu};k-X !rTލ)"j0j $jݞt^M[Ie/]wlkݏ:XHUkhI9ð6VWi wyHTAl)OZFi.XҬ|-ijn]f;Y8Y%C%.3 +cQ˃ɽ!SC9>C.:F,)Nokf45 9RK/Zh'e $o;ua]4H+ }B9%H*&4N_#ຢYI|&Q?Nvc=.nNl.'3ZB֖߳86]YVKu(S*%J;5 Rd,r9zCe %uQ*nƤ3Kb<[H|h95 ~׻wn:uD.}2:̘kPw\!NRL۟,`30K^[w0#6CyMG +lO'UT^E7_ S 9bh]Yâa];ucLaߟ(]V[K<8K"q`n[PqF`KM^oIZQ D*E^z4+։/H#gJ"̹(ŬjyE5 H*n}q$"5z9B780]YW,S/s`I-|$hUSWyT\fvԆ~!_ޯeFdoYpy'{7iV&X9YmQoQ-  8Q"LI>2Uel^"krsfִĝ|J`~{KBؒӚ\oi8sq`7VSj7K݆ܗdvdZiZ9P5{^}&_JIaR/ 4\1\#jcoݒrqu{x?Z#8v_Hw_zIu#-pb(˽q(mh%5a +)=hf:-; \_t$Mވ\lNWp:2kfKOq.MhG_٩rd*@~*%]~p0F 2F\΄݄t{N?"pplN4Ăam^.yy%3N&s: ɾb_QJX=eë> F)4g߬_S`B#l1VJB/}]/:|֬Cױ/T +21*X/ #hMqEOIaMߐE6m:_vQdpz=)K:a"BoNa de.D|]/ |mrbj{": +g̎VQ:8̉E|”3v5Sj1+FezK]YrҪjvA +T"Gz9A k(\/%+pJ~dhJpe͡Z)T _ƿ@&v>@?_(afϏrTW󮋊s_R+Z\=O7aBf7a#0z&,e"yʮ!SَEsд|&Q .EFFI~ ǹV4+t1\TQ5Ԥ)uxgkB*Cu<Ǝ׻W|oX.ƽX.d7SR9>2tD Dpc:Cq:kwG${3ϥѯ:~>vc?--\"d=s,U\FOAX7دUncKv36fK]t- |5ciD0fҘ9ȯJȜ{hƨGy<%.ߩ$YvT$V%2,0suط&Y5ϾA@TK"53v/O=io5i1!u3:8ҹzi23v)H`c&^))uf-ZIO1L'=Ј#[EkH>ZOE\zR^Ӓו@&W_Ez$C6(qkq:8gW\|dr,~r""/,T5D7}:w2"PM ap#UݼQQG`:־KR!Wjjv &pD<\2m|̑֊&ۃz\࿌K?T6R0zQ7%n6m5k qo$#`  ,MuI?tJ*Ū6B1YԤ.,X4zw-+d/~Z3>sjTX VgQU޲]"OXϭbE]?wSxY[ߺ(TV PLq +z]QSDJ{d`3TtL[[W9p&޼?Vv8ijܐ59pk9l7=r>|zV͛:I^^c RJ+mu^2讼r"ϐEΉsZ,]? ՜]I:Es~p +clu}`entbmz>n)YrJӷ"Գg(Ѓ..* &g:B-OFnRBGm9l3۩̗ɔ|gD>ز<-;Wc#8rvƯ9爮ΖxK|8dL-Zzlσ%d3yD5Zx9\OݘOL8H,٤M7ˎS%.6) jX_ +Tz+ͻ*(u`Y3;jn:Ҫq^;R.m/a| n׿TJYx =c +nM׃Iwd˝y=1&DHFE+W.ӎ6k@VU2}I- mٲ12Fe?ʬ,WVWN oQgl^ \e<rpկt4M=ΕϺU] Epd,A5bN&ztz<+s-jD̎s {__]w*Цj ٸ^wn.0@+m L(28ʼU0OnӬv)tvhĺxB)UYX ɳ,M-Xǜ8!0nRNCzʺu'S۷zGnsҮk%b@/v1ZN[I۳S;F~7A]'l׍OJ Eiׁo`cUvmnWeh_j>am 2ِ m`r#o/չm|~m[r$=B +2TXi[X<~ā+JVp0ru[^>b^+s*jqHY߾D<;9?' y> h~j#K$vPc-Z™N7"=uz4|g q2]֧*!clp2i? biw`m[gzd '6H?6s;f;ltq`ϔ,"9zɗF}ꎾ0pk lQE5m.\Cr +G?͘϶,Ncy bS%OqL8²4-X.g:Iܶk`A蝍t +][N1FJ1=rG&%0f7 -wY0·KD(ت\X+jso^p'h0;/g~X0Hm mD2zmcG–.}( l/c-L&r1xTK1Z!"g~N?Ewx^ʝ)=1/ʧ3m%bXogzo@(p[T-G!H 2cJ i߃Rz4fZoGh< yè@KBM'z,j`p옌\L7"iYyzͪմ)W~ c\v?gSBm^/3="$ρa98H NeTuQ(f|m{z"0+'o \_9ˡ'»uCĬv*-2ƝvȼxsGyq^ -UDtJd WjX.YۏO4ubnIe].CIQ7gT!.ykլ>Q)/6C:᡽fk$^T+eK'ٺ7VښsӼrXKnLl>"6*,@ϋz򊬻,da*^Zd1֤ Vw2mVG8ڞwuWx/g|ͧ +.~ NsG^dV;?&Yn`ɋʹAA _-#ΆLtNS^ԭ~{UNNEڻC&`bK83 a:gd79topBqk،9m:ckN +&ou) ^eq@KJ!lZz5]裋(ݧwwG: +,{;q+JMF܀tu:#^ Dye],Y7n~O*>`J>q0c(L1ka6O]QmV EawҾOBRmC笀];)؊;^f]8$f0@e^:ݟ3c$cR"*Rrs¬5ٔ+w;v*`ة_F\ܫ/|g &1,)mm1t@J3NYX!_jX} i3;sN+y-ޜ}xqb g@D?@|&F{xʆzDemeaKxd1i_kc5/*%רpP]w tWT0ͼLʗJ)zS˹.bV8;֥zsIa /O22Y3*}]D-&VE?/rµ7u`sNae.`pl3SאpW3eT-ªNySt.OڭN#=2>ϞOpn?Bg[9ǝ&CnW v@i3G;{wr;Wj34Ea3ۑnX<"l47"^Au_%sH|wnKn3XʧḥU0RJ&%IzUiNqKDuL\Wos,~ha}avɢ>1_u92ASښzߚPeUNZx80@@~nJA?~|rଡ6_Y*H &ɏSecU"(Xf+K%(藙x +A+pSzR@<{yvН9|.ԍ/ٍž_ jLH3HnU. Rk ^W[wc27 endstream endobj 292 0 obj <>stream +XY/xX yUEDpVOÈiVu!ϱ 5}6 |o5RυTXm?w؁˾@`nScӐo"7bAd\yjyrhB)]sp%y &jwuqjk ֮R75߀Utђpvֱn.%G> 2>:*é"N$p?oGϝD@H=@ڦ^ +t.M A*n!s_'M6 q~dVjK}]c53Q$BL&^ħ=̩t۪TCE6t ?U,37(-O?Tke!%c.*4\LV7Ӯ3DTٞյ*?Ԯ[@7JP[J lm/2Y6sHJO%\ԑҿ TmIA1YхΕYŊ;^=xRV# uz{}]ϣ}C76lť|LT!首a[WmgMAqքpy$uLQb&*F 0|o0v9#zc5޵=-= G5 CGWҕVnycM^];,V@o""V<়s*VvfUg`jcxuM 68y{բETz~q%&u8|Ci/ +$"sUZH|0Ui!h×1%f^i+p Af&}R.e =gk\,>dC 'T@*BKR޿6_qz(IܮY[k̟c%V*jl̛hc{+6SM]q}.?ϖ m& M +e} 0>o]m@xQzɼ^J_%XYƄgRHWQo6̑v]z6\-xߍ^joR>o|V|U fMD|pZX 2+˧;Y@3;pOú_-|<˓0ƚ*nLVSyI=kWG T=m+dܥI Ut1ԇjnYQ|p)wciQ#6.3fMzr @t))wC8u_7=b[Aq|汃2`#RtCr5hM5ya2&ԤmEi(7U'vTO+P.as@*wjr+IEzxuP,r^ 8 +%Ң-:|ki3Qiϓ^?kH[ PmoxBD1\<ڱ`sK|e22RD2ZJZ~:A6}vy\Á:DтϩOi٣+:Ë,`ui֤C G̻ e,Դcy|%N0$]%O;:cd47EXYctwPDrh(}d~[j3^ݸĄpXԁZH󔖂EDz'K&ӣ.g)6R?~ ɣ[^οNg_ڕ:CuL!ʵZyAK&9TV~p%ee A6-vS~ЭE.ø#Vhug'LO&ɧU`ps6a>+!s5:6w\`;?8Bhu +Ws 7e?nq3С7ü.VC Mi<;[4C'3wݍ͉*¨gjY lcH|ϒW fxY[_ޠbF/s)9̹f|ȼW,5yzs +zk| 2qCN 4c07@a)O`aͼr%.Npk-~=X 8A+a/<2W"2+XoRܳy?/^H%MCx1+[!GM=c\&˓Ɂbc٪EPjI'7q+cn3fZmɔ  [I#GOf_OUK=ԑl#xᣚk+힥RK:$' /фd| QH.L΄`;O{{ *RܐԷ{BUnjnrq֘YJteI +67mWBu$`L~U)7g~+_lhd'^-~6w2)cu"\-'AbXJڠMٙ3;j%w'ĝ2ʿ;,.w"c֎Q! *޽c%WBȋŵ^IǞxʪb4̵\·ꆏO/pMղ[O)0# >=_ ?|TNYWKW;Cg /<`;A +؊]P7+yNVg}pEj%C͍^ڻWdso%j& kOӑ6KW\{1bUQQ1whlKROnDva`u5nC7Oun 'Dc0W*s/uj~8?CO1iu\~.&=Z|w9)2Iy{y y+rm)@}{]~)dC'7W?4[\7]ͧ>k]F!~3~4K:vI9V0 ܷvRia{Mƌr8:kggm9]l`H.H:NR4L^aƭnAXk6m_h7vLHb.8&wDHHBՐ;+,YtdcWc'Czq"v]^Rj©r2- +܊uc$޻\_׏?@GӒOm?8cu]T_3iEB[+n +uW}󅖺Q8&lYXOS3?Tlf|w blNf Ns4 ֜p;'9 Y]Y1ʦ3دd]0r&|:hc\+,+ t^7mf`i P1 :ى9'eODR 󊬓KtI)1\N aY2"67S4l7f"W֕pz{dO. Xcӷ\ Yo@8^pOni̹^j"EU(;^Y \Z |hwKҷҭhDqH%e7G= h  V]6ޘ+W,qZKtA 9b˞vrG=N V,oZ~`͘*h‹|%яUQvfs = \pi%{gB~Z-{vڔ̢qh*J`!ג&O9Wyf |,}U>7?uү qՅ$Ո,H(IW.lK;uꕱc~e5p$WMLb9G݂Y)ק. \Zy)|@>tZRoD㝎 [6$b[YssUOLxT/-]QTW?V> 'V Ҟ]5b)j86Փ~˲#dZxo҉^;0Ŋ +_A잶IEpBySv3+t,͠zM{M/ +>d횣DDIkWޑ`sX tY*!U`_y7\'[0WFB%=B. A&,@~j"+u#뻶Tn%@s9,Olֹ0讞5guu]VrziFߦ˟b 5B/O3I+ss2  Ԛ*k!U {)8)eRZkJ?g9Ipב&|i?%eMg|l?G*_S>o6 L;N"nW(gk{ b,S ny3zmU`E=s946jڈXw}cϱe Swn#Q->nlUT'V6Am$n;X h ]0hY:1='w͌[ `/_ҏU>l+0ea[bpqVT\ߤߥ0=TSspSi֊{Agۼ=f?gee_(2Gi)˕`]fډ |_7Rwuz%C.^P]G5[/]t'a/%+dU$]ߝ[3ǐF0H5s*!?_sg<2E J~K]~(t)F7;H۶͝M6NT[/@n7C07֒4|@>6>%/Aʙ U!bp^$ u=B_ m^}z9CG!WY28+(Εmӻ%8[ق9sR;N4alS SʖwvmX +|&3_<ǐ2K.:;4fz׃[.q=c/8 |' Wٵ1G%-efYOtBzxC+ö6o9=,הOe'zܶb0W20]m7370U$$>87Kj'^O4Mڒq\C X\[Mp?GKFr됻Ghp%EY3C#,*6:@RY~Zf89~C 0V% Gut5^ *쎈d2L{ԟ݇$?t{zAͭCō ?[-5wtQ>Zjgݝ4|M\ + fN[ѾTB4Iq[n?smJtFyMd.5Qtup ++ދAHF%C̓ww#,qc +Jm<|:}θ͗aȸ wA.P>B_&PAO>`\ӯ엇NjLo4cKԫzm<_LU-vOٽzE"$y "On>@q/b彶;^<J3~]>Ce٣;SC${k]@Zr~2tg֔n< >=v4" ;$aAϳ֥.dF +eCL=+t pĕӪ^] M{gk?^1I>_Cw"E- f-y@5P&czm:RG'#ÓUpڗXt!3pFܯHbQNJ,׻E#_"doFߜXV$@>Ί{kH0Wρ4.,y +7*o4" ߾`Ew&˝ J^G9a#IM/$tsWxZTJ3΀M~׌V`4QbM7J’&4uYњTu<3܉ 33|gFɽJ:T` wDt JǦu>,Qƴ(q±8p Į!rxt8||Obc~ꢁa}O  :O*Wio]']iU^o'!qKVۊ`l/ӫt_:q}9yr$g$E n0o}>Uo|R{>ew^<{gnZvdҽ0y8a;?@#l:smJ y:!(KF>a694pő^G7]qpX)̤2/j4^23:+9(][Nc1Xq[,Vz@,=Lǭa%WA]+TsM'ʭ (Ti\/%7ǛXO)d96+[i" 4@t]ہ{T_p幥o%N˚NC7)b[R-PnfL2NpaC=,쵰 x|xbWkgi]/xw'$Kov&,.=\y:.4k +眇E9T"<9_eaD+Y[L +gqo^̏P^EQcFU#tFK?Q6Kmb,Dv&)zXT"E +_A+V?4p98*?'C~tcQ jPQ5x^6 ^MR-a)]eTEysjߣd?0*4xM/ :SrzS}? +-.: 䌆Tuȫs*4YJ9 o9ImQ7vdsI'R{d랖?|͆Z(rt;i6}Ό|)hVt;A}g]s=Ϝ6! ikavN>6xsI܆pl`f$ +P|@9v~T[I դ\qd) +rnXkv?'$ȮКM\4-;+V+wztBe;~(s"%VAo|8#GssqQKp. +;*_ +]{q!d P}zqCɉU67(ٷT/uIgWC̉nEa85 I}kճ]s9RB앆/h;Ζe3Ć[*)Q7Q+:Qz +~j}r;2rIu52Toj 8/yol$J`$\`JXc &HSQP0\Zr͖ȡsߌ}?9X(-NCN,mԋNcXCT_eNw~14}Se7*v'ܾnr՟==f\u\{s12"E?ɏ!V{#2)KeH틑eR{/x4)v<@bsGBD]4 vx#=t͏\o/ +r'G:fn]"M-- q>DѦϭTO7|\k f.oSEwR>y,I2MT߄{0mܷٽ}ȧQE&X{.CS:v]}_{q.u\I3{YD#F¢r]lpo?GΔuKRv^!>)SW ܵg K<$]"洽\cdQk7YN51z㈡ǐs#[u4t#SΛ[),j.k?Ӌ-o\U$a~2F5&֮Dtn)FJ.@jmy۸,\?&gCYFbo"5\c[Y$RSdAp:ݿ, +00tXt2C,7PK+z[yk\;wF2-}#E?LY&}iXLY5KlxAb)a(z _pT'QK]r쌯@wȓIDEv;…xBax,rS8Uc&7Tv|0=zᣟBxx¤zCfh/#v/0@aA඗6ج"sL [1IJd#Fb].mƮ@.Mly#O㺭j{3.U1:_MjzpX ό-DVwx*} =r6k8v%gS{m$W$Egw.'AЈYx#9v^;mz=n/X!߬B1F~2K9NC^lJS a3GrWf[ _Pԥ Wd(1b{m6q͹VB% c m?0;bs5G< Fd ž)1K.*ibdJ13LuXR`YP\{ѭ|ጫ.}?9b7-TYXJrOz@)oiIQ{yǹ=\krRO)SMV^*؅5-?Izk|iqvm5/}jX x/68/͞f62Qc9_W'g m ~ڲR90l-/YZct;]E}OsSḛ6.gUof鼈koMiU N|45QІh`ׄ /O#DG_0ݮ @.ļ uhuuQ*:1?Wsehmx׼<>8oaSn~J sJJ|e8fswd5`Ɣx")$?  nr&*۞wYeuhQ}3^4ja霚,,4rZە/XnuZhQo @NjրVZivbSj&փɈ+,pb|4dK%\^[5ҧ_FYgmhiգW9R,aW *NPiGFvsHH5'l/FD=\8^Q#`ipuK˽@ +%E GUfLV' +.ĻO(x agZI5Un\`C<:hTmUyL8Esxּⷤ.fL/Mxiِ+aK3cwܞ c,R%?x--<ّ;{Z=i_ajjћP&~K̝&p`nf-*6znZ팯y zßH^B>HkQ/XeϚ!쏴LwT+WNA?jk +r [%3jɓt la%Ab* fD+,K!G :\ :ܹb\KXo՚R0 +\SZ}홒(A ֨=s6m00 ,:H.0&n3h^b-!k+'rĐR>%kNx ES7WRL*g@)`nIj[L =/,%V?{w7,Ai1ǩTQfXo2يe@ae>s󌶹lUJCmS[w~{ @t-03G1țBҒZ#e<-\µ*3w\ cLޯPkռ\>HKc} S|w4s}{+|8\!??N&O/X-o뷜Bw Xj ֧cWu\a\c⿫Fĝ~t8*1khw-FqA`Gy 4@)n~q%]X64N'8zԣGS2A4=UW[ G 9&-٥ֻukR+1uFKJ՛咀 P|{85Hj=3ZdOrzq\v}i@`yPn0,5沨M,\iv+h"jݤ+ k,F':ͭ-oF((2`%4C,sEBC1ntrZ(5fT1TmwTmf2D +:%3:aW:-t1ega fsXq.'tըxvD>svX΂h(;K V5\ĜnlCoxj+L\O+ئCOqre&Y&M@وM,[}jo*߷g(tK'x44]A|rdƐ7gOɡHlE\jYSrW'U}\\H-'pֹ5SB>n r^vxOmnN-ov/9q /9JLJ`Y=)|$nI*c)V! )ʝöAt[~ TRuZ G~|% V3K@ ef'( Zr!xK +έ~ +Cl^hRN0m^GL%"?WAߛa^Rr +ȝ~sԁ4TKkb$zWF.+kYEks4&fg(.?ɶY=U.]7U6 x)f97x}DazxR ٯ-o!pE1ҢyC +'oON=u+< &x ӕo1:e?j]Jε^l@֢da_ܽ~cR< XURsn혔&c; O3Eu.F{OLEN.W!\~B/TT~S'c +UtAKꪈ(@rI /͚s.kщsDaOv)AIJ *v;*pAݩo˓`#ݻhvzz?W Bxʫ#%Pf>ʵFA7r@ Y~L >eKfζ澶d{p{,̗]_ްG(9UL$2z.78. 6{~SR.^nBQ[$+sCo:E^#╱]&fnV+V/Z&ɿ Q}:Ԗݷn,ʨt‡W)j2!?o0ʚMky!M|O[Œ=8{Q\C-:~~X)UbvW<{_p;wsx[ Ǜ *hlJFfHo28 8Z% gleL eHqg??@鑓ŕOJ0HYŁQ;dB1մz(+k~G{UFOgL)խ^]ozqB0m:3^y_{cgJTe$ +]Np,]L( +SUiB"uJ_UvU{e}R]5R5ccNRؾ$W֌NfTj}Bф]pMGjeGԷ%*y-k,(,{ gC5৛r~S0;z,z4.WoimZ)}K7pDTy|ǐ#Ece77RYʺ))1s2X$~QdOrB"h/>톐Ts89f#c}N|H*}?~ D&Lj-~Jp|WJIVy[2G.=,E|17Z3c=1 +.nb7,s#c۟{?&6G +=TLcV`:笣11웭'Di&`QL塛fӠďӆy+4~R^㟕}Ip#)N^R5,Md?Թռu i-6*)4οrJui561i} +3-fGͺq_şj!0[/a' +tH$bcã^ƍJ= HՒ3-ּKIudmu-̧#ʹr#s_*z%~/+ReFDL|O>8x^$O~ϘV&ImS!SJ1'4 tꭌV?A(qGʲNNN3wsPe!lz-ej:i~GAGf>T/^WW` (Zb ۵c 8Magtܻ+{6 f[p``Vna'G5xl+,vwN P+Sɳ`r$z'et DK-c`];^)3 FrhVBݩBjzhݨ݈?afޟ\+Ef_v;zW~ Ԣzާ+vD v&+o1镸~%U~g3n ӓYv%VZҾl>pKΓs_'թb+^nkE$dllE0M[帺eV9/ ߊ\yj퓶0~nM#Ꝼ9&sڏ [i[9OEҳ5^zq[Bާh޷Kޠpqḕi9Zw_79OZO?5zstGK}':ӶYvaj[ztR%e`Ù[ ۉ{nԆvuL ~~R'J;m^xW|6Eym@WOBkuqxmࣩlW <  +b~yluP h=c#v8cy;< H) +*S~s|cEOL@7hŴYƶ2-Un#MfΰU-"e'o7lVHln +-eoDiM?Š-9-zۨDe@ub 3:d Av*xwftO%cӌ"clenlV5S¯ͦ`@8EkRKEh w Q:!} +Σ2A*VSʃ^,ZD.zb5ݴքpwy-'?jnYq6r2 !CY&CJ"uc&y: +LnT",2;D( 7(> XFELtI~Lo)) 6ytj>pKjD5FP2Xbno=dGAީERպ!B/~>pn=Đ5mUlwMڌ2K΍z/<שYgo] kz { +[zTdzàZ6!~< >9~rFyS;*Lnq[bӝ>* ~<.Bɥ 񜱊*%Nǜ:.OyX*jqlރv\ ٨S^ڸCYH\ +t~d?qv+RT1SPY/v MHQ" +X&B5WŻ-έA9ήF#L<-IDABw^li.+X_0 +nXjԬFʰqSXr jxqU+ݟްi@_^p|hN('uQ'SqCωTޓ f\8!ީVW)}5GGu8j6rF6y ig2-|jZ3ms]%-G8,Έ)fmԚ;[<5s_%pQ<5;s&].DzϧefX@NFR[+e;?|\x pnxG+^V~t Ui%1SGiďZ#c׵"fe"}CQ&߃ +kS<}}br'{YC (6LX ˞m9y"{ݙ@no6޳b^=>ȳ}*o>v`sZK[3d UP.4 * b`i88E?en=K#Ocgj )jߑ: +x<~ߏmM[rI7Z,4X"Mӟʱo0"ZR7plIjooAHjm:"W/p_oQΪ70i#9oXx,tx(nŤӐĆV\[4YVL]m<&kaO﹑BA +X ]m3'T",ۤ՚,έh[οج(dRn^`}7O{eIVDt01 +? 蘲noLSDm e:RORc$Mk7, +:cz іQnh'/2&yotǛ/)vi'C)TBuB#ȈT鴑E.v:iɖAfwl[ޭU)<#faI~TV8dŶ+{'UN~%RZyy;5ŝ]_w`P#ϰ.KyO:इ/4^tNݵ4Jvە Bh$gһ({q[e2 + a#-Ʊ*I`I%nR+a,nmY]`Lr-jxgsrbgG@ػF൉f~t{7_`gm&;Z܎zyn\<>TUwg8':y4`Wݕ#~#.5nU:}fU~sBV+`G]a6n񀹣:cu8ƫ>[$tmfANCbx *95V}>tmm#{;#t#|@؛F=f>FgZ͙`~iSuk9vTo+e[F_\o8[(VQވУnCb('h{~׊xp;-7#3?n~zwp"4ǰP/ѭ AaG 4X^3wzܦy .l-Wbu-_XjWgQu28^CH ξ~E|q!ABR/{Ul|ޫޢ=A[az~uӳeo be2r7 3\s[]uܮ(W4bO19f:!9qQZaL=W_%'-?q9NV`ed\JTSUНg*sR'C0DT@TTb39g2t*&Yߨ⎢I9ubVߖc)} {+3hZ*z t3QPQ0[xgUf,ɺ̘DVozJ;+rzqSl czyЋ"ZE7Y2[@񍓀HY^-6B2K7y:'Wu34sHU=mг=ywT©5&>%_uYH斳⎖X͵1/t(w{u$Ɨf [߬Q!iiЎd cUw1Vzἴt +;{Ęlrh.܇;XjL#m <3^ꛏIݵTo Mļ.mDU혭j6CC8"_ձg]DKg)B_UX#yۏ17Kf0>{yҠ5Z"+(uzv>p?^ wqXAµ7Xj]j,`] +HJ1$rfQ @J/z6,TFar&+(% {dἕWbٮH!o?L/{h}sQݤIRwr"B/a0y[|bVqw3/b-oР|U=ʸi# 挣±p.$W[lNċX_Q. +dc77_i̥gvc׵f ~ܶwO'y$:T{+<C͕QI6t lmX_p.2SVQ:#J'^vFR6h>R{\ʯ)׀ZE)4]m8>sh-h=jЃMɠی5hrU?sf~w]+Ζn2ۃ`v `e+0٣~^=HUYˡ(񇮔BiE{RkxQ P$?>]+r KwŔï.tôQzzRc?MDoו+y_0ʂo%xXW۝:93^e#}HfQ)raYo|L:jun>)ຯaF˞m9933y(7_j&Om\{&Zxa-/Wj5uJz'a,vNpάb)=IbeW_'i1ҜAYtA8]!RLznϯ%5ĢaGmUN(hQ;Ctq o]li=R)D5=zw~;t%+٨>8hmJ*6ٌS`!>jQtyᮣzJEpoo+[0=RSv[#bJ\8w)e-ɜ$"QlGpr*bc7aX)G5/z".Ӈl]בųq79n+G] x|} 4sWNP7_։θf=G̢磘˘n@9?xDŽ_Te7I֭);X]ΕgjW\R +Muu۹&=SMȍbزXQέ7>tPP3,%ދـ hxa]&ߎ_9~ƏI~bJpy OU}t9oV|PI[ ږ9פJ䭆#=֑뻦dkjlx,[ۉI0k֛Y]iɛk +0Qy(Y;R<Aϲhi\9YtG8ԍ/rΖXZ3'NcϦۏNtY/̥l<&S;0JrcΆl؋cqA +!;G ؿ<"X/#T?Y`J&KCix>5?EcA꧒kz]umr‰kJ=&t錥{+w%IE +_JN6>KgA>{[Ӿaپd#<-ڙGu̺olU2*lwLW KY'`vijbc;jgr_`uqPTSr|m\zfSt9{%5K3e/VRJDU?PpGu>v󮜫K~OU 㛢>#qrI"ܔ/1;N'EUBhis҂RŚUu5%?:`bKY&iŹi'xn魶/,RBO؇p仹aVAz-ga+ǧx핝rx[\MM% 9}hPAMSF +v>@H6V + +U/˃Kǩ'/-I, e㾺lݙ})W+R~P.\9.'+sB?wܫ^\pxu ̕Gj4lzXټ#ك 67i^_[GC[&C'To +Aip,;_wE\Aph+lN83xJ}eͩ%{PF~ANvs)\)8FӉR=[5<䠎?k w] Bd4[;]k<בxZ,]Ev۫?6nvG'oWTZXbX,H.*6O݈qu +;|[@-ԺSt0U)}] 4O;J%w/ʫ0PQ݋f@2XG5ZBV +i+(0ޔOo3{'OU{="r}`ν .@m۞:~fN$gaCx@a҄((5a㸝GKKP~;Ė6'F\yYIatS*}oDگB2*Kt6nQAʤfkUDs=W#FD/kŏ,h!sGV|;+u[ 6D]{iurNї'{l[,nA?&7noA´gʙĵq Q{P^'=½*ϖ6#z˜# zU_eZ (e{Bsa~ՂbH<5i{7k + +R'{VkZtI\œ Ů.l: ]E][Dw 2A޽ +`{̀[8ܚO[uj^2&wzJtվ Qݨy9[qE4:󁼲W6ccN{ӣ)TxԍgZfo%Y8HZqvfYBZӵf5ӂWF{Լ'əK!8R:_Las}`5Ө#REjWYeBp/ڬ_?b]x* c[4+쭑lkP)̥^nwk %R~C +uCvPŠip£"6:ZkC)##[fB0/KlRk ۋ׈Ol;43ʡŃ-N ;D+e<`Kݴ;7b~8\yrs^H9k9NzHD;fz(ycY6GWUd\ Gߐ՟ M.=m("ٕw90m./Sb T|klg%c*^0 >+Fchy5Mz |i#`.׷mМ k;66.mP)a*X!Z{W4vkV'?MFUfkhnO&tY'$Q6Rm#j1,ZZ1Vz?T8ڠ:XjuἹ1MZz|Xb ;0I +j GB0ߍ Ke],܅lD`njGH /[f0=iВ@ǚ։^n/|8bUg  Ch=NVP#9N!?OwGVP3d$wKt%'MoթnmoP7OlޮOsa,qJi5My(odN:}Y0avv2sOƨGGE.?QZIM6fk%AG/gF7Xno߄WƋmμ~7Kdw8CeiL4ݫ' (xFשCʬ ? wñݛol"mw-,BQZ,?$Gɣv{IsH__ {Z>GrtWnSë7GLZٜbB)ť +Aя%qgܟcXٳ?n$'/rB6l#mo>dxǬ-Y7XO={J.IzZ؊0Џ2'6\fA'+;[S +O *7T4QkͪEK&e԰B!}Ʌ@xz7fnw|$n% hk+W0~@{ՆD7 w`Z/* \}:zcrwW0OWݑ-m4G8dޖ F2;-~jwR>fX=#LݏįQ'BsQ%:΢Z811O tz] QŭuطD͐#w~էf7.ƅ|Ϩe>f< unK\}4vK*Dq,q&#y/,%/by䛝2ΗJ-s=ݮ f?hʈZn3M +$FC{Ff簰irWh ?Gt&-VgO<}R 2jY51(^ Jrä$}CqW7h<%Z<8y -֝Z4vW2R+jj Hd3E1r9 O@,]=GE'BQ|Ǩ6JرyQjgwzL& Cdq$VSA ^D_}ͱ3..jr'_%UX} +Cbք6+B_3!,SSnBN䮑f? /S! K}ER<^7"6mj9_R9~ZneM&匛zZ8T fMB./ԡt-*Kvyzq>? Q-|>X) 8Fth\jSՏk~Jk^.!YLѝ9By㏔x%'ؑoEٹԶCӅ'?J ͯPW먩L?)juȶKZ +~t4ۅ-)A^bBVֹ7=*-]]1k't ONX؎,4}O>=!y:+WjxzЍk^6yϚZQc4Gc7u=}i96XOBc%UA[z6X24l)GM~K(CסBʋ꾃~|3i|z*&^m;#TkoPPPa=~2)ޘʸ'Tjܴ=bVa]0ˍr}ӡDDD\oMeǟށq5 +&JOh7OԈu^ƪğ\E_kӷEz U"_rMhx$g uV]M#i }sH=S,Wybf qux1d9bPTɈ[~kJS%hbQǎzy7a#m^jϸuj -Eܐ\B~x!87=׺Uv=^6oQk@S:Y~JV8Eaubaz(ϊB쒰ZL[YZrmfmlz`L}^bj2}61^>v:&췱|oA4,A$R +%t@}bts$J~МUv5xA u夨hXR6Htn>WiUR[^oSS~ ׈֤i}0=V_νo&F_wtu5s%-5\ozQ#ylSApM qmG5\MM- WDpz6dY|rw&X+s0fnu!˼6 mٞ7o6WCec;pxF[gI v[3?szfJbq' UndV @޴] 9'v段 ]d9+~ltdǽVwǯ&vkwEqJH. JXh(mX5O띍x;\ź>K⠣`KǶ.Z +%ȯ̲wg?iugH ':buwRBUTy:u* v yK [W!c܌*]jy)jUfP,t˺R7gڒcv8rI-_[޼+xid3LYZeo($?.n2{Km۬ Pv("7XzjW>A9ggg1>lT:,Fz޸^bh{vin_YdˣZmS)htZOM0g,܋j pZ6tVZL5 5 լ (W\Vc,kFY - ,m߁|Þx, 7A'5\<%Vz{'^:o%AOcY!ҤKg +Uz2m/=I1;YMnU`. iTD YAŹO\@lQoP^FWwJ*@EUVh ,{֥v(Ԧߛ*@$LJṶkWot sF Vu +;9OL/aDpB=nW%k[4Ss'.@}W?Ai'@(In_ؒmWcMz;fh3-kAH!^fe4. nF 8eǬ4Yӏ7t,Zb7WU|xt A?^HKRCN{hslc. 7AߗtUQ_&ҖSm҂ Պ&C,XAb(^T»4xF+SW4{4{6A ]/M9}D_$$c(Qg٭+࢙Ɉ#ISY꺂/*3e5L^[\5I+& +HDkO9*ovb[TB\]%p +G1mzVxŽDqd3@c2AM.> +o]n`HAe|;iRPe ),7CU&]1o-7v+xԊ)LDj_}jʆBGuCPg >h}zjsuh}a*Rt[oiZÇ]Ȱ?}7k+~K|9Z`iNQ,r1pko٤VG47C4:0ƙ=L[F=DՖ˪ds&dZ.&c׷xFS5dNMT<jsQg 93Ǘ;3E +gAqv{[λgo Q [yx't^2p\u]6fz,5_ݷEރE&>i]%[?͂2C2nLx'2l?k{zJ|*Ә!x+t?k߂ +)4qF^GY}s\?\+ +᪭F _m%$535h 9My`pƼڦT1)7*cvr}AL&uH *1 }׃͚@{o3%ƒ%Uo~q6"[.ffUixj̹70*5~Ç鵥 ;_֫iyүJ+,B. Vk٘Yslߍ95A*ZY-%)x;3rl ~ FmDYsX­γx%yLpD(mO{LaOd\P)*5㈓c,M/69QZθ-7C!C:h'x)̮i,07%W_LiW:UlinDb&p7[!@;U5B} cKl:vx7GSy-rÐn5CDOSj=cA=}U^}5<$1֝v=o-/eI[)89;~6 %7_3D]ܧ+>&eQPE/:6>Z#YI|=k*!~ +&s[ڑ%qZ𶝿-4 OjhgS(}6[9,6^"7UȜ[Jzcʗć>;yi:?-MKQf(%صVFVgW.8.~@Fܙ(b'g(-w&,lY*p*MHJ$*($Nnt%_C\ie&/ݲ㺂x+2r̵z$S- &Ce+_Hm}ƂODXrFm=EĄ>(丝4"<|SyX@< .lj~0)z)͢;כ>s+}5Co +/woKTvp +Yar/%Tq5r5ʛR|ӺJ!YQRE |F+g寋쮬S0x]t!X]GS6ɣka,6}5LiLex͵`9I~ژchH+Ũ/-a:ÜGBҁEAX܉CbŶ::jv<}F54xnSWf*(6RT ax +ӭFDkձ?wo:7)du%:OccRP-ىZv)1f?. '`fvFU)lV4]ϩ_<ęRgص4&TWi̦PBm"đ"^, +9psBW}k\u?]U;4yɉES>C1n@>|™@Ƴhb-s-ZD_AJ5/~{zbyܡ`2fg,>u G^ON*8#H7{LQ](?m()כ%$1lKZXϤ"Z#ο haՔԻ(Ejeg/J6RբVZvv aaOH +D{^Ȫ/6ў<"3}ށ1x73)hU?b/юH t<{K wUy#a4ni` 6{̄P"Ί߁rs@+ rMjowlheGgW}2g8O;mp4aӅҖd֊{)T[@J5;gnCDkJk lΤѶbB3K#FKA&j`FcrV;,w5#w;8ݵ5`w/1n,q߷pPxkN[C)ё3@*z-Ym K8/4V< %X%ns}=C'%^-x2e՛5o]U{5̲FR2& ]RٔxԪ+떒Qo_"7r$}5.&}g[UO +{ʞQt:+x 3*O`:a9 XB2$캅\("kL¦!5]7Ƈ>yXz!W2E>73I*ӺÚElDB*#E +E +]f?:Sx_5Q;s~ʏ!)A{œ$1FO(yO71PIE07zTWvQeI5k5#dM-fv4>R9-yLg i|6ĝ,{݃Xt7j{+pu#⇧ 6/lsut=,2oLeōU{nמa26g^z/;E]\Ə=|kBF,L֛xo>zK0|2ke8k1|zI0gwtlKfvp#`#_eՕYqR. މMTvXJ>qrp\}ێ0c)1iUF'q/7Jh4;^y'4wCkp(G ӸOT7СhGkO_x#"YYou<QT<=;t@o߸6'7R>sIm,ތ5OW.4?z=Obsrߣ|YX41&Tek(bóHxrw;)]^ώ f5qġN?ci{5rJgMs,5Ӎ܌tҾoN_.%RA &}QtmXZikѻS)JtyreAﷷ+mkOWi(&X/w9-t?dxfcrF1g~)IHc>{0xat  sΔwA8 v-@R#E׳UooFey6Vw$R8rБSpڗGR/{#R^.'}]zU_-*3?t{ F2BRà_g JU31Ug4h[KeWJ9`@~uh2P? kSίٚȿIePY[ z?$iͼfja$-3耆ߖ3p"t)`8ZS{]GX0OpzHܗ<&j$[j\WyYZJ]Ѕwi<Ġ LG'Z:7{#Y8sevy#ƌoF)f[tӡvjco j>SOgU[ȑI~1/X?*gR&:@Q6sV;~& ngaV^F[U^z!n`YzҎÖ6ڃl<̙)F&nȟO o]՚w[rxHKgU"oRhr\94Ini] Ev',Q_W ೮c/mMKsKB'o}=4^7OU7f#m hdN⫽u_h4V+Fov. BcX^-[ À^yUz1 +/pv5m,X$5@{uX)S ~}~27ʜ.Ej=\1[v28hUj;v-dMI\ +W-D +=w,y**yD.g+ ʠĢA\` lw6L~rRgpRoq*Ootos"_mܖM=n GD;(9Y|xW[v +GpAj ;.)ٷ3Us#F|t˭ېKwG|؋ɞ!R)fm"rG2zInВ-<5VpqF(RY=v# vGc^U]o{tlم߉vAo;LΌePx*q{Dw+΄se>hW.˲YW}ULh8n;1m)8EWFܧZkּ#q?nwŏobO]7kط=|>BRk<׽e G҈UwL|]xlOvubty獯X%i(UMܳ+CZqgFqGL(] W NTǣ}pOޏ#[s6?XNJ:{vuᇵԉ)姯 +)ﲳxuZdgh%Ze\2D#"h Az`lOdt7*&DJ^qF55pY|;Ƴ*fWfݔ&c5ے}~|R\éU.=ޘU= Vō<7BK8M]Ch8I94G ڞ3J9) $mT:Q&/M޸}:=%ةn*W֫!L߭7İ ?;lxDZYSPj[l2yds k .inƻ`>r5jλ5(}V#8;,}R3_Hϴ-Ƙ42b, :XphVJ'rrW5BE@{ꀚ}xɥv⪿L(^ EPQ4#̟ë6R'qGTD[pe?Ȏ3b=;Y{3ǚie 3w5؀pnHv;p7G+ v\yݪǗc^${/poMIn\WG};cs؝B^8u fTsq30wܘCSka܂ZG%yqƛ <5ꛥlnvB䆋֭Lά!AQ/GLYŞFlhDmĠYhk폃1|n ++Z(-6"ǡ|~ +Kzz|C={̭Ȉ}ZXZÒ:lK +%x +t\cY]dgI%grfv +:%SQ-њ}HI6v% +h<ZJrc}CU/'j))ODh=p2?e&/b2 tgnol z+O\AÆ֘5 +>8"S'P\{ `Plm!̞ՅB^ֻ4-_¬sY'OX̍-XZn| MUtuţ9mf=-HPd>?B @v7a`fU0C7%qw!wYr%vhnAUKr0$Z8qo.R•tq+ttƭ˟1- +*tGkl~  qgzw߬=Ƨp(1_\SyƫNz֋D$M<R@e;XG.`߮E;~G]6z/xcoqXRF'IIVn гT%B Qgӳ88];*[Sl[^H;]vu3ܽ/^Eu::kt/]KYr4ɱIiZZ+"OUT*9lSBx3EWlTqHU4o9=fL&h/m! Ud&%5ʉfOysS6:nIùaRep656[e) +mf~?;ǾIkiͶR'<4Oj4Kww SЖoS`<>ƒՅ@ +ԅf5`p}-ug`<::xJV)fv"gdbw6'.ևG)kpAqϜnƫPWTsL[fT,-ZHwïS\lJG㒘S;5 ]*Ρz#"\ժkO}˾؎3 w0x_Wm/ƲW. bŏ*<0<&stl[MmePS}o TOXg%ctZU yq};$ Zk%M6M$63.Sc0SX4PggWʹM#Xl3p mv*1%´\7/q$`K' H; C\z:ai``ճ2;owhm0͗Ƚ1 sXI9y]W4=al=1{ E)iW*"O#+/ _fnOf|uHYZdߎ{8s|$kJ<[mSȃ{7[An-߲C&d_2QMAe#&8uvpCU)8B{]KC_#+%̏O)@}"{gNA9Wf9P +d;=%h~(gS>(0q"ҕfY1?`4S?F3 _B:LPD%@*itV aZ{벾 +҅>‘#灧XSIOဪ G@;*nhY|2 f6&luM>3]1e?;BP=P0hWeDý_kGx1 vQqvNvIIs 3S_n s_7|>vz1tOWt.x[/][j%m_q/HɪHV".|r;y]mdFkʲ4@2O(SWض1Tm +lFz$:qlm +{΍D< ^D_o%H7Ք[Hi¾]w@q̏=Ҹ +QV%G0bm٪s4ג^QR<Y P|UJ;5rMō:s0Eľ%UoIpHE酈䃳=n]}  /)X} ׵y0Oe&sR;h-/!Dždx;f +?e])oᓽgoY މ<!g:ߗFPnH֜z|͏Qdݞd:lOPW;RY +uJ]:Ip,:W#z!{ox9gMUVx(xƋ#~;2PqKZ!حwҟSS4C[I>im0w[<:'Cض!!^=rULdȔ +%+'?>kWFUGm_^>ږ;_\&qC~HsMr6KUL+0n5N,f|-j׊藭ho͢hAC&Wögױ&Owa `?w`Q *svpR5[ ܯLu -1oI]ʟ>ptzLKH#vݫvnu.R&#h [(b}Оyɢ, Y,0Q~2JU;P䥝߂nn?!tx'"/Dc|1L~D5s>')B?;.4) ܼ#?F_xҔC3& .54ힵo&VmwtP?p&U3S?M^ } pי.= ֙NiogGCqg87ymqe">rWlVOmF]( 4ǃ9԰zNlN&ځ_~lGNsUk, z\ШKOҞv*|t<ڪ-۝z!jPcM5/Mb!XMhd՜jEЦe~EG9'kz]aS_ |p s;WMU  DVwɼѭiOrŇO病TEڵO~G$8 gkZSfSc'+xTG|]t;gӆ^v80XwzCT sN :;fOw3S_[PnN -;il$ْEú \j\j$=\L7vϮs+R{6شjw@JzyXAvzլqfB̶5gS}Pۥ]t~@@"ӷ49/t틸p2wA'B*l7̜|l"Hw|vZgac%@J:WvޮΌyKإT9.N+"@ ^yЋ95蔼{|js9=Bbv͖k.|<:%b~r[AQm{;D|(]\ OW}^W~- w i+E WUmf'mr娮"ղ^hDPR-/oaD#صџj>X;/+HI}Gxwrei?[{熖?vY;<[c NrWd J>(ul~#Gigl_r]аfRwo3xtk5),m/ T3pܙ $:{˛.v֗K;67Z&wvS>"na+z7[QX׭ l;`Z&q"?W`׻-Uܭާk +m: F+{H]&[+jmI0Ƭ+֘ +˧u[ \n]nba?6h=4|+)Jֹ=}@wyqrPyvw#ޥu"=cgZ>XbNkC/iKʣ +/)$qRP-Uט1V>/N'#9T5g2 U~Nܳ 5mx]Ms8SnHd{i o,-fj6_7 i<31u9j}Q.o8{ wx.8؄BƷt%M9݊^繙Z]5(Om Ʌu˜21> H"V>Jn1oY#8wjUdw Lm^mJ@?" x;j7j@}bAor>鳈 2착eܖNKs?ڷcW=r'-'+g.rz߮B]˲}V}"zo8?,x3r Lc;WG{bK]@[pl=B՗~L5ߐf,E{;q/*ZS+;,1A $UW$H9mӋ ,@]s*)d,JX~X9'S@GC!84)=㭙YZ ,k$p|tN +q ]g;@`0kZvY \*Ӭ0 YKbr@zJNk(%3d +0|*߅5]uBzdԍxyu~:;]i-@t6ys6H7Hw5MzG"5>vGwȩuJ@2Y |RnU{=.{ٶ~)=m$n^*w-yDC{w?>4"Y$ +}n:6]6gɽct&E+;,>v `![g %`k?C]ħ; :k,FݙF& +mGH29iwzUVi(G5}~SOtX l=6wnȄuBǣ&kD+"S2>Uҋc[Qף;M>PэאJkcL\x/6kXXovǼG.[h'hCW%"qKSފ  ]Ǽȗj} {2-_ӷA2 ܟ6@m(кNޠb8-aCtՊFpUKHo&_tsP2f ߝN7J߭wE PnC(DCZȷk5TW +78P7$XҫsEyض@BԑrwHj~$z$L]n+ |FF_(=KgieP|r~)^zG[}:#FG ޟV2^>DJC +Sz;ƹ̽Kpcn'"aM>V[RY +3Eo-+W9JO`d5M4meME=L + +NZ2cK0zW!9洋?ycIq%zK/:|ا F~JRw=ٰ*9lt;'fˆ Q=xhgVxPݠBiՂ7:>e qŘTgs|,N~6p`"Ç'ɞ[rph!Z(c+,.KƉp+vrTHlG|Tɯ{X0ۉ)ZST˖`UOTۏ,>.Q m]7Jc ?f7^zԵ'Kn7*n~LU_j"}CXߋ6|^DwIٗbȦW*}1:(c'խTPf3z72W_ ˭Ǭ'2*&L% L ܺ/ag%CT?ᤪx {JEb 6 !ksġkpYPF~*InSS"7 y}:lkj3{E ܧYƌ;foZ_]ǹ27kYG w" yw0N^kej/_kMc 0Bkp-ai<ژUO}| +ԑ|'qj7Ao;/_oRسAҍM|i6XNv>JT=S54|yj^?[޶G[ְU!-5҆gm(r5o9^VLW^JBINCUf :綂ږ-! @@@@rQ9g1?iu[ս_թ]gg`ۢcNӏඅNB 8ظzV\{|ĴWĪn7;PwGӍmr]B+ZSUVN.!y ѤlHIwy9Z.Ay|iNFN̊}6ߗꟊ'L&YWܿ={OoGo#-ݪ X;}JH+l󈡐}vZ5F^"aO븂(9r׃A-C}=nYv;i7a'iO|$Eyo:yiU1|/_g5K_-mMXq9]J=`^P1,Q !UdԳq2zמB`]t&6oJ1{Zma]}IXu،\E/ycª4sjnρjog-:K5yv }:8cnP֡-ÁO> %kܹEpe>z}basJ*501[@-A'g_?]ϦvKoތ@Vɣ /wEg%8zςCyM?o5]+%OK뙀!WXe)hf欣Q7Df;BSz3jqkg1#sG[窭Awfk|2w_5E " n*^\ٵI(?4ykpwE-ٳRN188ym] +s=dݬ| rSFH?V3ږA 2 s=I(~QNH 6W +!=-TSS:jL! fE/}_rMȡ==JsZz~T6x*xw>Td~X Ay ~-rX`棼:tnv9k]674pgnn'g:X|714P:fh468 ;o`5g*C;Bb'yN̲w&`1T +bck[< /-{[diuƺgv2>i8 +zjFTw 5fN*̠ۆ=oG o %&,̉$onN)HzVJj~bwwB]]|#H͌n,Α΄[2>[6䴓d_ Z}240ɕ Fc4 +ɛ2Y[1v0 +B*gLO +t ;Gw6On-nlfG ϭй98O:v8T%5x^J^xoۈ`lt 3O=K'CM,*4BՒ+>d(\O,d-x;H;kɗ̬N8"Id2o#2ϸxn^F޷~cxn3- +3ǁ+_.,ykA~PM=:8#\wyuJ6-v5qwmo g(ʭVhBNZ_ɾ^nIp}Ӎ* +ˆP=gt~{P|HU;'lR]L7O7O,SS^P StmWi|7(`cnɷwKGBSQ<ޜ ']H?rnPgZV@\F0k4 k\/[啬RyQ\_'tqs݈3õ{1f琻s7<E5j֍/%%VJ BcLގhⲬFYҾxCIp+VYծǹB~$SGdם>gDz~ߣn}~'}Ox *b#۫"8Ge{MыzWOYk&B0 +*>qu *|TxϛcQ3F\{ɀ84ޞcIlVۈ{0 yhs#5F5$aгgzR!R +zMi˭g' +,?Ek׳=4\+MCȨ}ʺiKE5bMqog՗rq:Tc-S.R;[3P ?kQu22S!M88FA&i%nT PV@j|bU{FGX&v֚1YmypqY|I_ڪ.-u[zYG,=ݴC8+_'dW18ʧ8o\]_H-ܜ#uM-/kCRh_3󏏿ճ$tz%G/6u%wwhtV{JKu1 XrEP[5~ cpeCuIki5(bkǮ[n +!v+)QkqǬ|YT׷rzڈ#^-;Al;MgV+[Z#~yٮV3&f 5<[ϺВ&u2Uv$ۛk~\? +?ƅib5fqXMkª2t B󒟳C!Z7#pW'}|ctTopr|EK_:pS):F3j5Uh-LZTMB9Q6k6TBw}%^9vFR7khrv[*ՙ믢Q%J/i}% @o|y#xhnӭS*?ʷ-#⇯N9(^A'P$9Fk +mS}"ktn1Gg>_y~ؼU3y*bgMᷛUZ2eb4a *-Z2i-~*4Şu@}AMuO=(GW1iSwŪ^J__*B# e,u6ֵe,8f%7iBJukIrct_?.ba51.6Cr%eZ^,@+h i?>V jSP -i$$3̎gj0kfS۵c um"Ӟw-ܰO/hlNyj:/IFْҦlU`нiFw*Mg5}6~etREmudZʷ͋Y,uahoRG~g^Mzv>b}1h!\v״{ ۉ(vjCA˞7O^&1ª\N jir*̶1\SM56Ya9VG'}9iPCw,Hmr`lk/߰Wuݬ[n\]R!>,ݢs6޿;Ճd /Mzj8KNi@ZpS"Ls@tvb"^^*/VR/y޲xmv/*{vf6 H-^gqŁ+a^8^Xx\Dur(v&&3PcpoaVUCgM.=X U(wCQo (sr*v~rmiVӖ.Z˓KSzISu9攊t٭W>W !vie'E_[|五8J}4 ,q?ohkEM.4kHܴZغITv: }\ ^UB~}YmIakc`ģjGp'8%׃fvǓNޏܰϫl|[\r}N={OCf>NjiYͩ #= ]w[yi4݋6v]vǹgx5F³zq``*8_P&oź6V^c=}ˮF7nOuE[ ۊ.E68iT_2B})H IK!:]*{0n6YmHb87ubdEQ`^I:XcTPS?y= +Z (IvҨ˙^ξ?b~6Ou4H~/NkL'1cyp+Z2ֻ+dHn7BMoh8H۸?kn?Sh05D]F6YE:]b%=\ wގjjqG"4ƙR'.L1 ;#8Xvuw1Cnw]k +WZbcf׵MKh+k+aoS_ޯNip]L~ͩ`O8}y7YN,G9靐pt$ΤdUrPItg >$|% ^ѭMy"V+{c U澒zCSC,X^M- Z;Z8^48D9F .@5Ɏ7'M|UI`"F2)#j}|SMꍃ5wT`q'ͥF>q~s0&nӢD׷x&Aekw*#NbŲm ĸٶiC`Q>O\ -HQ*YN4`k/5@zlAI@5j%Ls- z~A줚jL$+6=7^{Sa@ٖ C;cIzzG7ET8B` 2;A 3KFq%uVq1Qf:m۽XG 9+t/ teDB +; J^R;&PaA =|$玺Ae&ۢk6*chc0_ɗꞚLZϓ6,ZK8j^Jޥ[tD[1:xIR͡mPJӅ?ע\ڎyEWeWRCÕr3fV4^}=xqp4'=>Pscyk,A8~3 }URZwNfdZxAÅ'+\k Zft|R YS)K0/Kgkr68%zhv/7o|Vמ2__OmQ{;b2LSE;a`k8H(hy;;5ZׅqS\%_tbC>CrnV:.8g0{JbBȉX`'AWU)BpcKg֒WӀk`++ݢP ud Gpc)It ^aIPʻ5CmD; fNP驔ъ{ ގd +;CZj]¢y"MYiاo#/<eK,-u͍EU60Z u|h$o^Öwm}){Wਵn1ʜQTs;MK ^^V,y5VHqs6l0UNB&EGQHf΂hW'~Lp[2%\,q+`:, ~YZ~TQ̎whq`}3kj*Ij.k7AnvX1/G7ܻ.!D]6*8sFr;"wb9еΧZk> yŜEL"lMenMj<*SAj=mOe jwjBi};Wn|Ӕ,x1 +ZT,Q^Ϳ gR?7q.Jtm]2]1K"&\|t H)8l8:zm{?C|OO1-MkZO GJ}vpFږ&Zs&_*4іfgT։ +*o8zBfr[{42:f3`v]Ѣhl9OuJr,3/~jx u@,sxEբ'h{3 7gAC_9ɕFмWTPZa~JCim(F[ѠRZn3y(O5ʡw瘼m#[N,R[ڑ Z~5v/饊wgF| EP*OR;ގeg7d|XG*'/ <ת봪P2y^=)y +`po(!aS;mxe +eZq&#`50xs^Hew=j"ON' +P[qjt߷.S:[VNHZweiw)fj֓e+c{Wl&X;# c''r&" H]2E4RMO3_ .Dv94FT #-Wu5L?zWvRz|h*?#kb.{ђ Hԓ\8w+j% qpC]}Gi` };-(Y-"kﱏ( +V({Y&UЌO_7J@VCN-("Pftmimj=-SfǎcM\ڍ%c&A*1i^h3j8[%,y~ɀ~Ʊc|&6͎J> ٳ·5mrU+k'XpM4U^mިO)mE~% ƩI^ +'۾&MU6.5O*ucL3˻>Wfu7``n{R>O7wMQR뺱.A_GĄ3+5gb orb]F!Y`(&aQ{D.Wo[F9;gN`R['nn?A /EoccyӖ͡)ں-^V5!E^[DZ¾KI^KZw]I8ү;B8ջv`)3>ǭ:v"6t[l#Z~& wU&mbD%w}h?(o_T3yU=66 &,ыAL EX;/:=BN}/N7?ȣULA7e``ILF+5݈'!ICpJ{W/t- N!BQTWj;M"tt)#{ ipv +btMzg!\>IXUݦD0H@pu :8u@PZqlo! }d7Uw-zydf\[BAwKHzdw S |&#4Ǥot]Ͳ./P|1~@#>+ۍ.~P;D{0Vq8C}5>ްC[(X{d1ӷn- /ߌ% ߽;Htn{mN)iCе Ɣ7${[*ڶ7kݮ .`ew ksr*4lQ5~w55̨]۞#<%>}0U1NY4M;r8ɱHj@;qxlYI1Xp .8ʡ8$}+j,KCmTK,M vP^_(/kJX '> ٞ&ρz:ͯWQ>-bo.͛P A`u6Bp3]yWW?܏nA.mzWdʏFJgV'* Uu.mFOqe{R;E;BȽn:#1X/[XSXxF_WwTk6_)iK!!.\7h E.>Mӊ\)Ոus=Nq~MuH12Vtѻvͼ6f֬[rfy禎+֫zZ+j-n B%;3k{)qwcG,oA:3 yZ$|vf_J(tʝ8eh-z0`_vZ\'s3:#h[!S6vШ:*uYa~Ǫ9PrM 6ouv|kK>^JsB_푴jnu|̡S Sf\*g:txyMmsAvi3n" Y]ơeE#>r5Ѝ^?޻!6F}[oj+kh1y68B=O 3&sM52Ø(6*6 gը΀>2u2;f59/'z?.@輯~_@wby]sNGyeJyۑ(4~NhG s܅a^B~}=&?ǿ:L__f1C=O{:/+J#mr}QHU7˶撚> ΜayJ# !`i?`3d,!/gϼcs*?L21?Lo, =-o&9?ϟ<cf},3+y{~iخUbuAߦit^&ZFU-Sv=???`*~WԎ=*>8pu;_ +QL:r¯^ɸ6DtxC'<S$%< 9Ð69wtLmr,#hXWf@@ԑώyޗr=Į^3p7012<˦;_˸QZNCm'FWw3i<3[v"Jb"^jӨ:/X^<2N IE%"[٢AWzE: p\xQhơ6A0$>"#rX72ʁ:p:=ϕ$1M_Jx˵j/-尥찅n€H=&;"?~? -ְUçMnν2kl6xp0_ A{ :`Ĉ_J:ڳ1hß<˫ =2a7uשguեnA{9?:gNjQKfr/4naqȧg +wZ+D#3vIV,aL]{v󌝸߸Lf:{??:sG@@Cc4?4?Cck|K4Ff?*?L?_Afe3P}3-eI# ?i}讼pE9lx.ݧQNfe컏q- +S-w`yE3{ɬx|")39cl^3 =蒎눝^śzi5?䊛:~T3 +i ||lg7/[t͖H,;}ge{W;j"j/9=!wrQ5ωׁh|}C#9hvwwmfFl +`.fq+O^Sw۝Wτ?^giP?@u@Ղ)-;ɪmuokNLTs^CR8 λ,+'/uk9m_+4l}($flo6`YR<+Qq zd<.цz-R_ +Vo rctkp; i=0 vuŻ"|΋sgoX򠭃ͽ=!/:NM +OyFW`jng +O;mj&6: t7#~b_xMJ~mԏlಠ:t>nq!_|gpT.VۺG6ϣ޾>KN'Zm6Bz@Fq}Is?LoQJA c?,#h{uU<FZADQ@P=;y';7WΟW5uWAUy3M%o OtT+J%M1Xm5Σ5#c~OxN >#Zq +q?yՠ.sq}<[z"J_ +T 9UVU o^D_|A}*}֦]\'Yɨݗj8=&z;[, }gV:EI;T?;>ᬘAoym|ǵD+dȹ[xkl|Fg2 +\[bTZ  ];ems~'YY#ĵ%5mF~@; p"샯Xe!%VuU(.yDžj8gE6ks92FrYz*o!V.I%,: d!7jNl^~ 팽iyjUp Z[# :T.BCqmuɁlZu^˼}njz{zE\ż}U2#z4Z£ދ昆\n2F~0&-87&xBv~L5ղuյ,*cE~?2꒿.fD]!mfY%֠J8pFԤj~}zƢ9ך{] u> +n޵k|U /47(Q5z*/SxW5n>>frg*@'@sQnsh -"' YB-{/NQ.qȾ)ja{H?bhN7op:Nە(}*ك{St, eXjAMM NC푸uxZIqsϐ_G\y øb5OF*&^AOcq9f[r n]4uv=l;*`_cw-&*m|~ ?. ӢL@?- &:%_ _fL@r.^4_w n/shVWVEY-we<&T(8Ve-fl8F+S:ۯVZ\VhN4q%<q޻_qz? /0Krt9c=]X1YߵF z؞]r7-?=E5mNH@WQ D(kʋ 5/ >O"aHQ+Ph@ﶉϽnE ~D`Wdίk:lغG>owaxu<\dhw=im{WYҞӶn +47Uѩ\^WXA.!v3 gd6Sv,{aW͛t7zl$zzvն'@CG4pN7ؔZ<u:Pe.lHǜg]퇆ӟR$r^Du'\WۓwWOo*_@k:X>,Dž8}F̭bm!q3B{+.?׎|){b֐]VLޮ/$.w~|8W-gUؽ%~<ܞ:86}{3kesujXRFX<ē&Wݍ"YEkm< q}F*:6O= Zl+Y4;Ahr2⪲s}Ilm>Q&Q<1Jn6s-7Y6D3-y`&crwCC7DqP.Ƶzr}yf>NXv~٫nҗ5ѨsHg:\_.CM(-du;|񙆳Cߋ) Jǧw=>,wSJ/$gW}gX}g]]:{9yiо>kJmuEe9T!͖f8: A=|慸@|xT!2{Vow޼ك^2F$YަS7©r--1@QYyk% JП%l?}(JL@Y*NGaO95݄~/[WqiWZ.fqRt͑9P?׽~ݏ +Vq}kpCwx-cʻ8Y:.Pa9v +;˘9ZW*\*bcş/5k!HN6]ѮSӬTJYywˢ=ֺBـ`yqm^G@.ݎX&9Ig"I.I.%@ա? Aҍq{vVm^PB.QuF?6 3l ]BV%TiJPhkݧ>8$qsĘdۭi(Vi­;Ef5YYХ + KDKәAч hшj3kZexK7yzLFLkF"ֶ-Pr12Sy±E\^^4=2ʼ Lgk$?icw5L:kB +^En)nɅkD4u.7 h꿟;gdzI~1J*DvOs4cS(F_¾xʕeT%\2oy)r_~`{twЇaF D<2s1ԯ?wVCkw%+ozj{ʍ^Π\-j."n!6#ˑa25WvZv=5,#uAg 18'CvQhnF'ar&m4'.U#Bk6~`RFWqq E(-\,Icdǔ6?0 {V+{tw(sA>ܨϛ-ڇf^?b42.`ͳѨez?{|t}_=!D ?+ 9~C374?WWci&9s.ifq>п??Z(9@oZ,o AТS}ύfo 0~kk1cYZ&<˂8̹|4B\)z{MQ> +ɸqy:B5ӏޥ]`Sf9ҎemlJ !Q+;1*׻ޥcv?Pgصrk54X) fp<v{w91Dȉwbx;amzuPrc;]%APH2aH#y.̐&2ϐoham7qOy#RVrKTS͹٢a4:}awFim;ow_-?zoȨ5YO#ДVU&H +;hC\nˎr-n=!y-mQJm%Qȹ@by<2rd1zH@UϠqҵOF 4=/R&^1=F ܸN(F}x]ʻE;X)Q endstream endobj 293 0 obj <>stream +&XtXbps]'RezuZݬ5:6 v~K q=Kݕ\o] ɜc+ {%Sة,Rfn☡ߋGMMF"g4Vl[ +=?ė/Ms"k?y+T>}.l8=FvGV\V#AܝݛE=F-L!JR `huyD^ݼ+( +sʓ|<[aXxP[‚ $2&``QIkxrNEnˋMni~Bz<Svew(*2܆"`YIT"fK54q3*dj,QbeT]p8@ 3 +bu^' +vuL1+ +Ȫ wY&++4z_ŸF\ShVE^7YҸjLڵ܅KjAjm"ƒ +´2b;=+sXl3ܤY3mX>Y %ɢnkE.iF]n}6jG|e;tݩ1[^{2х[ S#|wH@({<}:)f5a겞\VLeeJ[3"!-QO%aq9K>稨nv(в}VBIYfGFl0tBm<}f3;VhpCstf:2 Cuway&ӵ@U(fd2p0xuVdu%kaSݩj,!zʆ} -6&ɦ7{,WGpLN3D&y@'?lb<|k;'F/G|90H@Vg+0!Ǖq\!"(?O&nw^m]ymv?+X\OlvƆ4 ]VGӗtB+}9RdڴCH@_fioh+ϊ~Coh&9˿/Oi&9ߊD+Wѫh%! +4{5"<_ ҉cN2s> z@T9|q|i~q;!ĕe?]-D\ǍpB2!~92}1Z`x/jZTVR\b8vMJcd?i`:-%R gckWK{* YM 4N!Mo\_-U[a:1vH@VD@}Z=r54WK hњIT\1ڛ-4YS2sCL.鎺~ 9tf?_4w C+[lB4FWrkq6tGE:~$.ݴtTU562|ޤmR&}m~q2_DCa'Rkut{^pp}%g Oy7$Vz\W1kRㆤ7b'q5QDU7P{ѷ4Ҡ*Q *ᓛ^%4"$.GMcʙ*CfvxaJbk1ܗk] ׫4Y[U<dҟ>kSn-zxԳ}!ٸj& K6bhm?Q*JQR\+h29B>FkV2@,}! ĕ |qRqq={ϖ enɇP Kf ʩB-( +wQ$ .fNyNy-z+zao+! +X[Zzxog \Vf&~)~ ld(D<5GE!t`-h={ۮu ??2RT% `[>^"M栊f$Nj\/0lKD=& 7eͻE0Qo*&?KvKG?CC_7t?wYo1(2]U(AhRk637tmIY ٞ[ǝ 7OV eiHF>Т#T*8@qA}"7u]`B>jXWd}o6婆ÛG55 њ3j->rfZ!RrW0s˼ /"/D2uZs'pDJBDCN钽# ugkmbZU(qcK#.5vnj wp'!ܽLt7q&[i`3ö *p^cl.16|ZpH8&)ط7 #J8Y Ҥ]+u,F1Sz2yu\ɳ b1iyR̄gJ@ؼPN]!?9\C+JFF2Qj9X{$?+=ﲶm8]A,36-=D85 fH{:F<;;G^qAv[.Fik@!V&ì3,'Ek>v=?^b\00| |(./Ϊvr^t}K&{{O6{0 E~{eɜ~DqQ>`:A@@-uLi>qUyӫypZI1T췝iq*oOAl8< w60ػKYWyߣO+IWn#{OK䨱ughrW7$Yv]&y2~qyafǕLhE@sYzkk;_`fWXee[+greeK`}㮷lmi{8:WoH@(3^[+T|\Ǹ݆2Y O!3U=4pG~6J,t/9=4kaVKVozN.uXN^-iM@CK ǥRiD{Ixkxds:๼z)i=z $j$B +)J:=, A4q-۠㚴[2U'?pIcY=[}߻%-,ongtPmKux_m b͎ZM8yu}b#@_ƢW[<{F^|1q=t3l"qm%5#{86̸j])-Ã{1f2m3tGWY Z~-gztAQ"nv4W4d[ևЩ3peþrUY!DkҪ5G+s5KF-k6E\dXר3u*rG(lW[#:{9[BhVu|6<1dZ%_kd*r:99o Wdq=GǴx?6226˞v qf Y9=j? .v] =P +-nSyJCU"W;;ax!\\-t*nh3ݹ9}0m^RL +k0܈E(>51my:=937ް{} U~>a G\eJUmY\t 7L*l~)Y0J`)(f -mlk +ռtv(a/-`R<!,œv\͌j]$ ϵy/q팻F 5^2#fg-L5R4/߃Cm3DN? +ğ"<<S^e/g.\TR] {Iy=V6w FJ?+ M0Yoh&fiohK1qPz][=lIn +3 ȾC؟gvgI+w,WKψZTKwsŚ'wFz#JǥۍKW230!(|߃:ϯ{ˁ1(f=< 5y호ЇR%y&e-%nc3ra֧8f9 j'qiv*ǥ9K~wnd͙kh[D +1't!䥶̀Ѹr69\Oû 4EX<|q+q#4g)~Y-V\AJcЭ+VlCh" Ex..KE^?frJWhrzw 5<^6t[en]"X4aT`8}+qE>E{jhQxhӢ\pRoHν~00{>AhjckXK$?%%UtIG@Ԗи{q5ٻ?|A%z|3.CèW:1ps}'+̻ة88XN5$:  UQM\.O.m\2e..XZ!"qu |q{2t[cr(z0=jͧlDG{:Un ޘ$f/+uC"%0U@.~6@ԑ '*'?I̩޳ίkjRZWYj;ФiXK + u!I_S#t8[QڬH@L?};Pt.x帪\ǟ_=&v8?O\/o--gCW587 7')L9^L^,++uVcE/p}-}>2~z}M=r/7+Ռml9<=ϜT2m_-owϦ(U '[$Dٰ.^B~8Lh9k P) J3gܒUqqyZl[>ydsuB+4jq?ʀ`o5S$T( ]z#.׼ϳd'߲+ptǔ|E”PtY +Sn5\{FE#׆U.>JަK[7ыEeifޑ8$C V-U#Bp2ll;[y{|tݻ&K̡$_)!k7 +LK՗SOoz~Rb_Q3f]|~Mu*uDmļݍmwqS 0tlO >;kuOs௲p#imGѯ^PRHm38ڢc j̈c&;$?:5 ^תL\O-^G2}NqVmj?lYs{n3k4RJ:TW n}*[nDՈ9 >[17&6wo#.O^YeЋ&^\^鸾Xo )ߒqoU͜3vNF+^2.=p$M/w{SNߦ {~1ϽU!0ΆדCںrސmUoDhfPx\y ֫Fݒ>P5d@dp.Rq%0q bΠw%zFٮ)MPZ#J +I^s`Ì5|^ϤeޝN-:)`zvtDJ]WOvzRcA4.*-eq)*B&"$6D#f|Qݚd&;|*?>'sƑKpE\I׋Rm9wlcg5pmnd0L@1(.9c*(ܽivJun0'W6=;z`gH@VWQ\C'ܥOb(fӷi$7Uӗf6"u0& ppމETqāc)$qArs9 3 rXeF-FI1'&*DX TOUwXzH%R!b <4=Ou1=#z%R?\Xxխ3^Fv+8 w4"U黈k$]P7cDK,Xf)o|_i,It@??) 0Zv08ɵ+1E +WG@%aZ0 % +r0Yg輫?ke%N2uqO.I/24Ozi1W;pGy&}y_F0L·{!: EJcy#۾9 4)ofU}}hir $W;sa&~e};9GffA6_VFikbe=0`^G} }491ݫc>jd]^n"ʯa=T/p œl:;ۍ"+XCvrSp 5kna>}VB~9Z'?Po +]OYH㞷ꄻc#"#l=YN mײʄX6gݰ=->dܚ/XikuO#׽W׺\;dvDdwiiߖ1?j=.₳ +½׌K%.H>qdJqsW&գ4FMai8T4N*E@@kv gf!WF.` s7L@?- _gD F?+M w../.I''Onx.7 .f(݄Dy)N7|P p8Anx@clR;Zg[|וim[>߀=bZboU(q೼\˃4.7jb\z\d;^M:sipFr7܎08hݽE26D:R6RMg:vͣbtE~-˘]L3#F\vg5k?ܣu˗r\-tCpH{eEua +Eؠt-*=( +"*h:{~{ƬU j<͑$so1Wް~/'/AWe7xuttP;Ԥ5X5Yoܿ^&rI}y$*JF/%_i%0^F=rPrvOvOz3ɛMp rBm?F]/ +ڝUJ!,Y +#kbLD͡$vZfۋ#oKSɈKw<[.]nhV?jVwײpQaHm EM(*N =/j9$PDɇ Bf#a(?t[u(J@'`}о0z=<]7-uM/4'M@g!U{jPm*7KX;VGsYZZsgc87 +^nY͖ Xmbp~= 1i t^y馝(}Ko^7cQ!7E=aa ݪGrjُؕ2/L٭OݵG-JY9YS^'K^5@0E~{mC w$us/RfO>oWimyzi"/ y/.tw{jTh?@GrAMM@Yپu ۋ3 YJ+L{UM}G1mz2F})k!SEmw) +zHx +ta]!)/w:ŬhDiwTszE|*it9yDZrg,eG-uֺ-*;ϟ<|<1>5v02mz,Oīˁz QQ|ӂ}4<Ӄž#gKcu{1MZX.)݅=y +mbPԉp#OFouQ8wr6IXSӺua(q7Ւ瓺M!W[^.j=v|  ʷU>P4OUlHŢ? +l/ W9"uFݜzݍvNBcqHY~;SL+4۾10};l_ZݡjaS"}SctSUWbҭid\FBFf:"HaY?E'R`q,}ݦvg,Yۙ@zy,em) *i9t}Kn_kZ0A3SPb L+~>! +ǁt݅V0ݜo!՘э*4#@:~s5cXP\9J).*O # ??=0ö*:ohR# `]{QY]rd]?HR؍.a\EUlV[ ыG^"ižh(LeP M7 "AK,@Mv j}^k_KF'E%%٨ab:t*uE:E+n| ^.s;s½uS@m a ]"uA( -LmUW p{ H <'FM+u)5W%Ganэ5VCh" i|؛}Kԍ`PO `zC0_vp +4e|q#\;wZc5?e;G4N$(aV=<;' ?@_O( ߰j\/5Lx" "p* z?ȋ,ˆI3eyYBKhF +%t„B-BmwVx lvJ͑ou|P00gJPC@6DEx#{iv%/RaApl 2H[aiwCXR97d귋>*,m᏿jvYl{@Ihb9w0 7l92PTX@+S@ >D&Q\זYk!nu;]c{Ì&Qqqr6A=pyZާ{`%ewy,Ogb̆p ;FR%wQʽ7aP.ɽ60eEw:GSm_ۿ f5JqOu`03[P|C__MS;=̟PQ殻 akvt<츏|o_['Xq: n~1.nl@>a#̹`5Rvnkb_*I%桤#mhm͹w;軧#kGi .]ʖJv&:ndE E7 {h(=ǡ0XS {8h|qwpy۽)3SxFۑXmamhr˞U;?wؑ, nAQf&).DiMn'|bZ>Bki>6['=}Mm3.; mE-j ovBr+Siba".^6p|1\wMڂ3Nz{;n 5xBY*߾ktJ5lVRIIecn-ˁbά ?_ҁq' +n\n ܼAxDl$*G}PMVkTڑs1YF,#]tS*x![ҹtm`!(4o>rʬq(c:/m4Y˓TGJSX1I˗3rNϽG5 +bRC'տ_mxDEO~?E;Y?o_!>{ :z1gnٚeph$-&Xt +࿚k%6.mqwVaY:vIZ5; m{Kf"=WÞқKI%-+d>ݬu9] 1g9'<d,<&?}5kӀvbmz]3/rKGj/ O9<CTx?_ 62_jeZaD }| |h*!-|3='{jy j#XMc!Lk~Kr;o +Ov@xrF~Z 'eO2`D P$< EpR㠈 $6ݥOo㊑zY ]2<{iE̬uƔl FcGLgd+^| \N>G?; ëSs=hoo/q{>/W\4~eKuq.Gj3g+آ{}.^:ru +zs^-gZ' {pǻa#KR&#/]ʴy-;YR",ӮEa-6|.Q8 8EaNqXѸ#YevQ`gYs-jRrL:Ǽ 8,=e}#OIaԬxq- _]dOK>箬9-ѩu*||{hMDf>(2$JxVu?Աֱc?cmrpׅ|,?|"1@FRoҝGr1b #Goü+vJL/ {+TAn5swvwdܡ]=ޕgRmS6lЉ]q#^2aݧ|VxS^1id޺5`N+&r +`kވn~~Mb(vx$3k:bz }{ + +p^Y67K5#\qz(*ҝ~4BO D{x,L+u /} j@u8SS +>xFt=}{y/Zw a$MF^l1="] !p ^X# 6oIwh{f_VI>L˱( LEd=YuSYTw&f?иqSekZlO*5mej-V_쬺j-HnEq]rr>Wo aw:ΪQmΜfSגb5jP%bWݾwZ+{T7c;D7Z^QaWK߰|s51Ż^F.VYW~rB@jy7itM=+_eqR?럥Rg-3W +X?T6cKy}8m;$c?.sS,{wd⸨OIWh`#Kesu}07KlZpM +(}=,hwPT?`P jIC:ҍkd7ꯑ>^c Oa*?HryܹXi'\|nHuYSW&<o5kʫWWEAuǷI#$, u{Plσ9~$!ri]U"Z<嚽 Ɇ&[)L6"Pˑs]h(Y["7U*2?K2R؆,`=%^gp|nk`[fk8D֡hno (5?&6:v`i%PsyNK@mN]8ȶWhF@{a'DVBV=b4|N]o1[7Sed&v3k\1V<%|uR}cQ0cqe~'z@w=V=txot~*hO}wE3ɻC +-|nECku[Zrsl&~ +潼Ư:>`W4{hs3fܬ/tCtѤ;nG@'(ΛiWoku9I|t?YZ[5u@Lm-+ջOu5s ꑑ&_.tNZڴCC*UcYd]J&q@@ы <niaM/+j\]ֱŦ㠻$l^n;>6ݻ&M.ޤjD &3[^4䑕s"ĤpB~=Wc2;ͭ՛oP]}YV=`fw:lDK-SVt+rL-@vj3N1oJs\ٶeLY/fGfq]1qT cu65AbYb('89U&Wfv4JIߙFrwT.:[v={NxfrU$rAu^Z=(N(?HM Z<IYcqboe e\jodvvPnaö߻M~'PcebӶ9df@Z sm OtS}WV\ӆLrx%jŜJ+K5j^Oj߲LqmOI-`CJuӘc@ z {LuhWQNgZ+͸SΪd 'Al%&]DwlTe,s5뛇w=93*\bݛ-3˦;3g~(ō +?u:Fjnx6U1_GoL"u9r3vBS,s3{PkZﰭԬt 0ۧqI]JX)m..ҹwA$W+6i5ף7 qOAl 8h==hf@̀J Y "e+ =0#20UTC` byf$5e"{\ܡ][v N|ɁĜ my{df-WzjIyفi<˷ w,*  :PRn@}nPcnA׭`+O {RkPA|& z1m=n͡~:ɌU^_Uܑ]5G . gkP1uotN0,@i``mCKPU *<@Q8%5;snoBW]F-}νzthVO 깋b8imgM yeP +,/cJ>P@ o׺Ж=al(*w$-FC}r)ԙfrvbޕȷ<#hO;OWwjKp6LyӺE)'S +.'kЕ@._'t 󍱞$h\۸%x.NFVz ^{EݦO>3:soc^em^p +MWhcʵa7gI9qu܇gz [l$ho53ZrF]xu%n'ǣ{vѳK~Ye^7zJ_- %5\ nc |g,SڈT~)\Ǖ^~{vmeyqy\l˷7}WH(.ͻRG&mS ssSj?={9s˳-G@tm/hua2~V +8J< KwpV$z'L7U_[hѕT[WN緵;N ';,'.f{(xў7ﻞ<+dpk6v %qF [LXIߏm_k䎃'>sǣ+HPtT~<a*:kj,yFra=kU}{eաZh_ȋ @r?N&!+U2_A, Ț{`KvelWyYEF/~Ev˒| J]!WFr¸p %SX(*8Xo^u;ۃ$236#,ٲ"MXKU]eDmHYŕdȥen@ hmaePOO[7ة}:QaB}wiv2\Zr=۽JzjmeC+32cv_eN[atwQI$Zyru`c؆bS)e.BQ'!a/0޴&RޞJp8麏ώXnlfru/OH(`hG|cKb[]갘MT3! !CoPl_.6u&uxƦL܊,RN̴dp7o.җK}firK[ y3F*ݛWt2 BGIWB(:*3 Bz_nEF:G?KY8-w=؏հb%rDl3ҵZFs;*ku6M%7Wu<ᨧ>IS8Ik Wn!/0`$@BVydZPscZk>jVcuZ{UkCV`9n"r7+(;S;K|x$=Z"G\ v$%q[>i rA>?AA~U~$Ql0t7.6YE&7iev{!\e7SJH .5uzb*' %`ح>&n8FJp5u { \9^o_ ugL T^#h?ȺMȇ:2ŷya)Ѥqo 2c'x.UFgd#kp?D~* ~a9P,sQ7sWDtr AR'6HJ۴Kk%7YTx{ۤḁa 3 3tHl,gO ԶWpAA k~ q,+(|? ?=3jXz^Fz'B3,PX1}\~< ?F5X]bJG]tYC;WRM^7) Q(dSq/n<y?썠7R_Gƺ{0YUmɜ17hK(#_M/C}d+Jڪunz%g4wQzC8O0`L?ȯ =43N~hE-/ FҲ?޺ .ۥ-_kC*; !?jyҋCVimoNe<g^ԣ|jVΕb}0߽r,^'|?(\|ơkgqB 7[OXW5ׅz&A.];@ Xѝ>KnBϏ2df\o8fZRq.i %92Y_}{/SlEvzfsˡLԮ:he;eigasMR:)\ʅ)T"uaFqZu"Z +9+{r}a}@Lݸ:2vA{_v|ab^w1k̓obnpvtA< +}]]iƃ={Xrƕ!u+TKu3%X_MBi1]ѨW.ם )]$>I;IX7 +F.`VDͮ{ѧ5{Ÿ[Q_~˸ m‚M'ǵϬPtpkwzg  ?H cƢ +ց-hM7QD?ĬKaS99ZZZ}&Cޤ oakHAL\ K +ըgʘP{}逸&"QN+ߊ62liUo -1T HzA,GsHW2ޘ,SM2eiW/7 u:Tj\DW7n]_ݟs{Uu^3JlE~mG˯?at'Q"isGvs(h {.zIeYՏ"˦[3f%R<*Y}+t7bXt _ϝj)a֑(޶JnB5 WF҄a8ʡ 8|g}J$ Je6:1t<.tCW8񨼟|(Kb fsJlrqƲJݵBijԂ".]V\zcǺS$D-2y9@Q9&>ę? mk 'e&[eJ` GuM#XQ_{ؓ·BY]J؎;>bW,̎O58f{BR!4[;&0 0 ku|_X>ZgYSGv]/[B wc:a!t]=+ +uK8dWd6>e +2j $yz*$薟53y4'sG%au:igN+@X/JУV۳#FF&S% dzd Ez:K\ DgK}ܸ ==8|Ǯ]J9?O cȡ ZeIn6 +?jǧڻEx eJ#4)'gYK)ܧ}M`Ts6N0Ytڬ +{=׻fl% !6!TZ?ӂxg:bT.1cD9\äxhSM䔭?}0/O $+\sjs^gPx=?IۣRn.4`7e+%ya{sV8`XȮV$|>ܼHT2f.Ni auL=eO 6_|K-ܪo;m|wVapw@,ӛJ^l-T݆Ry1+W|I+\|=/~.=?zB2v}&,b\69dLe1R"0|#T`zi1ݟ-{3m/h温b;9~~CV,/GwH{>v>kLfaڱ[ELf#F +@4= \܃\{}ˡWQTƄY_k0::Ųꓠeo'x4qtJ VWy.):S%&k|bYr|ٜ`R`slgֶEJDW|LPhb}/@N&rhÀ2tf`"ό/Үd 3wԜffnY;/U0 +ݧ8'Lz.j|ڳ<1fu8k+Zt=ˍz.*) SZAʼzOFT55亱쉰1]q?=p,QݝW6ձwIO[nӃ.g먥`4fRI5Z<&O(sY1/+%P(C0H%&wweV\o}+e}Ͷx-G5-|7umz,lbUYɩeCkqbNgA0/4u|uV 6-ŎӁ˕1Op <{mu|-9W؜'7pWNȝHnۓ;tzH)1O;I' $ '. Fع!᨜K] BrՆ[YUᵀ[\x4k*jE0nJ:KoR[b@] #^Z&ꈹZ(}$M(]7@OԘlm +H[bv~5vuBlW/Hk&"W'M>;z; `bg.cIUNVTvΛc݁M%^lŇ!^q/t/ G!2r3 fILZfJ޽xᒦ{XV&rI<6NI\23lҰE B4|q,{Lj+~nLVVJ_ܣWT_i&l.-&M:[+=czzlovA2v-Id{b91eFWXf7#YaS kC5L"G=_E=֢Lbm,+@Wc͌\`Y-y쭅e];Oި~Whj*61s׋l+1OE4:>JzJIb+:4IW'u' #^RЭ=KwϪ^mWWySF1 qCcj0sy拽iCUhκaRzA}k㷊Kk@p&5_hO퍍u[ξ:4+6M?}/e!ߏV 9s'ĥz/!Soau`Ms6OQʹ9֍gwomx7\m2+RRM4lLg"SGNW4[_#RZ܄}N*&&3/Qʑ g܌Ԯ[Vf—=S>a4;à_( V +Ǜ mGxTRlW:7꡺BX²5I" ؄~&t:YbcOO9^Tާ{>9|ڣ ka҈TZZQbӞ9Udw;UW$SYVyar$}6$^V55G*ϐ-nǮؐyBiIad.`:m37Fz%;>Y2>=ӫ`LKϫ]TʦXFA!߅6Ni]n ݑ5Gl^2`܏tE/Kq}#b5y\[Zu^&yE9%KT,3Qg@68Ggk4IPfSvW9.h?bf|g&͝N-+>( ,$h|vڂJU&߬TrYʿb3G70g&Bmle钞9xra@ 2D6oݒc` mllU_v`γV1t*l_~pfaf@SV wGZȩ50ω#^ 1!.%l-\nMjT *.󜌛rʴ4(e[WY}~O 9P^Nqvhm@W9r +45X^y0ڡo^0ۍ?n5d7@< +ճS=p4ZY(ӵPZ_AN~eaQPB/ bEh_B}61I8V} V,.ݸ C +x^@w,B7}D1BWYO:09sU{5 u<@ A]Ndb ?+,bq+=Aj|~7+T4۠SP8:8N U_ pjćBo&z~`k9lKz#!zK4R|x^gq1c]4hVC;?4.E`IT.8?Ai 5d]  o6f\%z1|;>}2.?pwpn,#>|sm]O`[JJW.8^׳~Df~4)rFF. EțdHvup)?[֫pܮ|xDq~J(QP".SpumCBG"VQnS#!Y:ts|i +v4;8Gh%3hn=!;LO%?a3ǣ۷T繎Rk|d{Aï+AX=mshuCw^}S Jgm7M? 9׮10R, HveFŵrzhQW&Yw&]#oG}30 ܞ3ݎ]f?Rڛnsm }.C + +%%72޿dO[!{07\|[GD(0a͉hvmV-Ff'˞h[XpFodѧ^^7TǵgIޱ Tax]#YrYdgvK +O X6Ȝ率8KfٲLZp-`G }5&;r^n*sY? +эߓνءAb%b)5Kb:.<j3 hV>>v5KVf@;oB2dm+r,6%\scO|8bvATڊLR +0'u벏y&ZD5+D Y_ZG4*|+fϯjF޴u ʫmpJ6Զz-e=]u،^G>vyF}T\K7=TG'OM⼨gQvP3$?y +ap48oUw@n^; ":/b*ac(ם,_ +pRť5GXT_ WLI:wZY9Ė`*_όEΣ9_!ʧà ;Cg[bO˻9*{ֳcMj= +IHivVtƺ\dc5V)wy=cZƋpHxHha8oif{#ƾB-^A8^ty7@cGDhCi&7/8/i)ă@}MV_x~u\}fi+~(`KMؒۃ;IYMj}kg혝˩,S`|.9kB~u\8gsO6Nws`߬ +aZQrk_3mgvbx!8cuΒSaqwIƣD?/_2dÞ} V=?VoG#}1G+;0gjL~j^&nfYB2wjsxyᔠ{Idlg:`Č^]5~ckmw,60Z?mHH>LWjUʣ3Վ̲<٬j,t wS z)4L'lG&X7d9]7NZHn+34( +ΒԁH]lf^f4N:]heaߕVtȂ6ejKoVa*,4^S/WWƌ.]_E:3{QBA +OWskMS-,5ZZ|nɱO_qJ:$pY;]30 vIe@yx6R1]Hozkb1ij۹T©6jL["_`ͣ0?7LY =6S+)x[^&>/$BjjdpDA5]RFl v0RT3cJlvۋ2J[˳io3VSKmamuZ|5Y,ˆNbG"_GΤzړpgGyT켓i,&)[oyn$RjWyPlaVSznPnelڵLuR6ˁ^ihU7[[oZ*ʡ{lØOVS~u. /n27~U<4Vp f,t{hzSk:ڹ越`oVskCGݚ޵$5"lT]YGWVAPk!}_/-EXhaQ.osCcT2:6;]iJ{20(Jj4Q`Yl7o2+x{t5Us?8!Fn Si Ml],@-W;@(ŴZȸ3@!!R,!k@ 8oC}|'H$xľ_5Є ^5!-3htD Q|( =V2͖I@8=X"]*Xc<>? ~@S e\xG`O.RhyZTjp[ee93bXfjɍbu *)GnL7tz@n E(gP!}NQh̓ouQ@ +wl?ee5R0%##ѣ.'A%.# {aV0 +`ظ_j}vM7uقBay@# iɪczcr,-5 + H^}Rz2~Z6哞kx;7n=}x _{> Pic0r0|ߋjnfj0P|g}]O::Z:9.r9~fѹ/xVt}A6NM)=o0|ο`eN $G +G3@޾U2J,D"Z)m:6Ǹջ'4cb'y>_x{.mvresK2^=Xu1sۆw[}doͅBO2IzO=#rts˸©Cou| H~:0 ֜uu3ϟ]NS^VNZzX]⧋$8?,y!?Eq;_{i}@K +ȴC<=w^n]nU}\}g7 +m]vʳksLNe{eܬ\fItbhl~P J3Q }vM,#͸ޚ3$s X _N)`6 }pBo_[o+I[`f}TGb1+ߌ];)',99qcAF]#׷.@G p/JQduQ{$kus-wc~C&p*.w8^[GLfV9DeeƆI t.;g&e,t +SqYOsB⪧L4 +36O`RX[NZ)}sot$s[S-*Zyr~vlJua(3ɺ~MFStlӲ4Rϭ9rm\DE\aRLp9(:- +. '2+qlm)ƾ̭za +v'g]>Zu+tVkȼN鸄 >V'`5W|4S [**9Fn8A? @0M(" "6M.FfgN4uRS}mQ\W^:c-*pí:7'K?͟<x%6sP5Iꎻ"CJoW] wo6@IUF0_tg@hnAY/ցfq.wk^iMiĊ_P+'S7*t$OcCĄ?""fš=N^CPn((Qڄ¥Z0 职<^ȣ~DrNV2zx3/Lg&\]pD6b}BI]mRG`8˒P ׆]ƙ2Lsɀx|y[ dUN]Q@<+rUWk]*@G9(dsf8RP?FL7~aз;uPt(tRuiFUoq f<}CWn3o'^)AW.hiw}R{|ӗ{STC~$֋:omje% ź9"Ϧ/[?XSb3'z1)_<,Q[ nFtæ2sRM+nۡtF̶|ď2jo\'AI7cuk@k֐׬چ܋R}noX/l^6&sz2a\k#[<2XJ/vբtѴ%ySQGFFYMKl?UA3ߪ3Yau╪ ,*h;+VUο'v"wHkzG-KuOW=Pn?")mƋvY`ۨyn~ZŴg7_uW֍ѭyOY les$O*<(SFv0ECN^$qW,~fsj ˗NI9hפ?Z}yv` r*;<)gY'yQ _!E9g?\$8- ~+LT38)[Oִuf}Zq[};(D" V}t0\<狅*J5Our&:˔a=Ɋē-/b؛|O^+0?loy,`/ĥ6 Yb3mQ[pY]y +58Vo0Ɇp^tq8: "@!egjQĥ)\@ce2/kvD,@I ͊6ed?Fd HyHNKRi/i{8i1 +3[) 6y:`3A &׶/~{<}q }B¼ $(!@n0AVώc~H_p{ +zy`[ +=bH})%U8w0V, 9,Fn}6@9z Ўs(pMV@F; 21#*~CvB{<ju=ec|x\cPgˣJ/0ο ] P,2\[=t}/9>eK Vv@މ +Ci1Y]6m׮rHyeL9>48?GXąN~>0K(.a7_\8 +Ԙ,kLwT07':o,>O7.\n0j5QsaMkf;G^uJ Ͷw7tr`{ж(pֿCgWUlE5"F\TgW>%tr7.FVa5 X6a +q77,*n_ =I:ݸ{u6嗒O#gY0m:c_sMUv8ϒ8b!R|OfֱomY^qjvX\SA +Н{6X0ѸYBpΗU86 {QU%؅1Vv'/z2۫.r15zd3~+> Ӓ铆Fx=o*mL=Eu馧3V(3\6Mp{8 +AF9PzO_'q\򍽨{Ԕ֝x;MÁUEh=|ɴ|\_7VmKȵ\{īŚL&jܒ4)E(?wo>qQ '͋VNm.mCyy,8OM?+Q޵#^;iMO}TOLirURԗ|4[5=bK& { !}Uj 22\Mw%̊Eq:\ZNtu׮ZY LQ"'? FmzKAAJc:Z/?G/u7bNʯD@GGE|N?+cdIѭ9섢y<gլͶTRpt`c~T#ZC~FgljYJbQ85'Cpy ^_pC|!=ou_EOT@|-#;y#gPZeVdgun?IGj+wwug~47H,18}JK_P?~*Ti*tAD%KtZf?1]S<6;}c +q` E&g̏rۤ0.K[<+łLq.df<Ž|ڄ&q2c3QmdgᙝeDB؇;aІjү6Dn 3Rm}M#_?HT1S4@5/c%49$*8QP7}}stn` v&}{k^k60=i/B(@{o+땞ԍf9'fTM\\1سoF2zO$K]$cޅ!4KA^D jzEj!4oک ,m?8OW]iMȧ[B dN6cU +F2HShCy,u4楙1kw*fF~{+پs47iʗ2+' Jn['ܢ7N"tԗ?8#as?jTlA-=ESePTh>?ʝ(7 n=VW 鮌.$˥HނY؃5Fp E6Z^}#Ys +6UFAeYk.)NOv,v2[qo 9-X9{OD D}yo6' MlDMl.q=P8)qv>g W|on{ŋ}),ֵ:_u rӆXAxխmz= NGbulJTqzTm`sSv+7ޅk7VFD_~u/:q֍E|9}6Ϙj,%\[pѢ>wSqF*Ne+6]OpZXX+IہFnŗQ_2(b#N։-@Cg_,v949;NQکԛYr0G5e^JovcFT{ֳym3ҝjx{}/F T1wu|+@4yo+%_i 40?rm`=PWcʴB1$S7 `>Z $(B +өהLTU]3A٪D%O_߫Vũb8~eȟ@}(jʯ]kX~;g8]FWmP6+Vauqu^eKnKɑȗ:QDx0E5 +#5G/Ӧ8'*5KZZ3/ӎ_)7RH +J +F +"M7q +N +C +lg +,;l~I).̏2 =c)0 [CuR`$^ML|܆*sGƗ/^ZC@?t5!FƊNsOC{(= M)Mf +KӞe͌M@8e,\ +z #^@΅gZ3^4b>j|T)',. IsXIsV4Ҝ4nKiD/)xSpuz^Vg3'=["UXI_+{BwQ_j<i +twboo?hwx?"faWx^]2΃SU?>Yk+>Mb" ӻTR3Shz^NRH"%˓YMziΔk'Y$oq-b/raIKkշεv7*KuʍzZcFSS+KhZ_yH6HcBẝ TL1^]"X۫? #OCo@]vJR:T?й'mti?y.[>} +ym{iHq}>PKqI*E߽}4v4}=vv,-6_e0rŠ.+^®oOZ`fBv{v_k67@O^^ZMZ.0_+*ΪE;Of/641]Zwt!"Kh(W@o')'g!^ep‘*.{F^lzGъ6/|mիYO7H{ =,q)"{1<[KđF(=[4k>E +Ib +jZ K%n[ͩQ`\5b:Xn7k>k]˭{.,*K6W6a]u´dw@fe0!j0f{Vw)/RhWFRطiIc* c! *75eK3N};u^:~~ +K» h0n$v1hꫲ=5d+/PRBzOJHZЬ+Yr礿E=`CM/,:nTl/-v6ۚ.yMb1dZ*DZb-VnfcuK*aSհcS"Q* 8ة\:Zc9-L^Zf]딍B[+?'LgrNP]3>L ]󩍘 8>FY VSţ-HX،:OėNѪglTFނBm9`^.ے{m.eJ΋& ٘BhNEq'`)s?MT`+֮ َIAKk!C +rIl8f}ZeWݳ5:܏S<=GćSU1ҹixL Wo245YCKXobhYVCdUBFg?2Rk +Deh bfXr:}*V94*g}[ys^GT6{;蚷V:JazXrYz$uOFJ@5yupRJs 'rwQ|,}{AzF~ϏJ:Cם qD,q7IX7Z69bBk( +_KDiaLD~չFhޥZX}flL +AJxl֣#m6<4KXM?yW2Z>nɧ݃+/% +ejzOZ8xԧ%BCKmI6Og",#˝s^վw<Wsg,?Ye4m]{ TFHF^{]7 m}򜨼9;+xMNh]a)ȵU]SpRTוf=V]ăE@mѰƽ孝eԲiYBe/WyfU𰘼A%{:y3 O0~JωDA*B ϝBy/#sD#lLT/;T Z/oѝ`SśSR)o,P\ٌi,gmtNsIY٩E%qS wl8b%ןZJoDp! +=sSGs4ChLZ [}[P!%"@nNeDÌDpNlL~N'Z/]KNnv2vpȆܭQlEjRl*t~V3ޫҭs",!T?m9zS'QU,CX*ׄ:wE8lu9͆7*wȗᄫ}JnGK٘+]͠$;ƜiAEmTBD_F(l75~ǣHy 3G+QbTne+9.RpȲlzc?wJU˳ޝ^; !˓Zzx AI&UhL5'߱' H|`>@P~|S@Sg;)WY٣6IMA!Xd@1<Wͨ14lG$1N7yl?0c =EbaT 36XZEZEǸ* +1!e? vۧh+ZSUs=b<~6ذZ̴KK;|]G-` +JV.yiWQ+,wzULpiR+68 z!鬞le= [Z@R o.ǝ0[pdm8QITzPzYZ8וH}Y,,-Oy+u2tqQ"<ګnD}LÃtƒ7d_LWrx\)7.ONH>DuQa0dD^kV&[%dQbUo" +Rq- o9 |ްV/?$X9C#j&/JeiE؟/*;eX=.}L9􀪭  : fpz%.Wߤ gfaA֟z!1z[e^4Wj)x)V)ox@fswOY[s2r?FQ޵|ɛX{xSQb +;czQvuB;wYLJd1nieh0_i4w`9~m^s0헋@qMbܨ(D/6$|ytu貙s`'oUlv@oǎNLh ͏TƷljRg.Ix-`$ĤtKH +waⲅt tک,Zy$\U_z[p"pvDkw| +j +a[O8^sgjpVe! OmsrLRt:vwB +"SزW젷. @Gم+ۭЛNZRW3o G53NNn &d[ye~|tIy낓c%{StgY4Fk6D~B4mz_z\/tViү㬐㽷%G,QXOS:B},*a3vdFDej7e,w[tT܋SAOS ȎiY0Z?O1wa}#U?{=lZOWЛ/ [݋ֲ$ͻjwLKiZ?dcȞ oR(%V|@:VvH嬯X=hv~c#qYMewnp%CLV= =0>{>ZrBQoԆK-hu TI& \埤pK:8ӷ-ųd9[M*yV#(^y8j{g}YgJ(L2-OG\mkXeGI=4|>z'nz̽fe_qؙ-nm$?\|d|奺QB3\w& FVeR0}8iE݋Y/2^4Ao$^-wiLf23w=Ěڥ]4zg`5Iu|ƓV6Z%ǰ1t9.#o x*BXn5=ngǘ͂@M +I7)N-" , Dk.5~y YwV*t13z_o67T%dnd7!n)2-U+oND gRh]Rs/0;C{;%NqF?@ܖ"!tEb>;bf=7mh99 +vuͳJcd{ehbx;G7+Da/]0.@6|\BM@;ۤ,w!Po\ݿ<WvsڃjٌߟF&&7/f.|ș#!RyRBĆ 4WsK␇ +Ȥ~fcez9G>[;*[f=yDҴme=fܢ7QABxESMUd0[z+[!^]ߊ+`]Nh^`E)F 0z*$0ZC*vFXa]c n]Bh=B:aрm(>ub*\N\ޒ\Czҿ/|Z;D`y@hLOOV-ק{ |kWY9`jŜXmdKM^7gPЉ6H0@"|@ͣju5^jiѸu ~ hu{֦jLP 'Xld L?Ř*7Y#01 +Bx2<ޔ#lv\-/<4(mbrI@C+j/B \˭fZN.x|g,Kg՘bb)pU#Ev@I'ʃXu_6'ɛ'fo0-$Fݗk:|?j[\mǥQm?kbk~eۘeӣvk:ؿQ.W{|@Y'5B*6GMΚN7 >B=mb]l;qk⻶|qW+37zZjjRJc2Q#蕧]ɾl#/6qZRVK=c-]0W'@gk#b}SJzX\Y>_loXɩQ6*S&àd>R$r dVWfER< +(v*-3m'<02jzd w%}"NQW>K1KƏf3w`z*Dȗv(ۚr'#z<(z۹m=+w_U8+,_./t$OT{e ^Z_l1<B"z׋!CnzKl6Ke⎁sEA)-Lu +Ȥ-C#Ang_V~¬mrdtK6ϸͿWNvGQ*dJ[E`5dQS"ǝ +ƼV/s5a`Oi@*׵݂A+Gf'B1`Aq4K&ɘֳ0KFs%ۖ"${ +[| vH>|>yl-y<ݣɻq(cdlXHfv3c} ɛ,I:+,~u,#C~oRda +]͟H>)&_H>e#tNP}:\;dwNޗF%ȘQNbLP5p^5"s=|V*/B`DPsYp>|Nm99"L7DǹgX\}3\H˕4/a&^~g"طG-9q}=n5]֮&.;r6_` 3$G +r| +yNOKKHxyѳDt_CՖV楋Jڛ=>YEAnl/lޏC:}wu~u|?tsyON +|vޡrСbޛ8/~s$]d}:Cp= vm#Sܷuuj iAfv깭0ݔ6mȬ*fȻ5ɏGo|_d.0ϛk\j[R|tKx>;v̗߿vZki? =E6-gnJ%]?m"bk-3~#µt699ZڟOlײo$Bb{?xw~VAkRɝ8.?-\KZ S3HD,DMF=K&M՜l7Ar612x弘ڢV1f|rQn?@܁..{5t-c\]$kLUZp׃ka~;trF6!eMjNs=dWs'O6Bbvhg^=Da2Oe<9"T}vvpݎ @ܲ%ml<<1i}xJEkГ>zNpA-,{07k봿c[E6fеіjɬsv)?7l66P2Wy폛N>T/W~#f|__D8\}`tl}Y>4/AЁ##A- 9EOSw7ZEmA7 Up,X?j^8nٍOl| %'?0 T_E%NӲ>un%mHuغN1r<ԶToVru?b6,}7FTT)`%h_ꭞVzBWv0^=9G0IN ڵ~u̠Vto)c[)ŧҫE@ڸZw:P=}{3}l_.Ta?DG^?={+-f[鲤p9ube;;J 2`eAV_.2Gwy/GТKW/=L!v6Cq›KOr6&f]h6IuUȯm+NyZ5DkmQL%DrТȮբ/o㬯=mo,E|b<4ȏu娸8@S͈(7 [2Yp[L;qǝX|A+`=w,2W,OUvoS +9QmZhW~ ~PY=˘ wryӊ]ekݐC N{:/3'+Q9`ʚ=!;б2<ۤ-+l)wKT^ןmnOH!$d hL 2)7]bVVKSG0ђ^4}G:uy] BԾO88> ],oawc +$ :d255v_dEW>V >.c/>iN,75^]u؆ё[\h$^8}"[YvV:h- 9͝r+G=m$bbp-NV+8 p~;Mnգa&&0Cyȶm٠k/;0KnMS!ΊD +)Qa'C4b1@)B;*%ր,m yYbIR1gZ 4u e'6W^:FݫeY-(lS)/?H =IKBF 9SI9RW<]Xn72R`I2`&wm˷nyKTIqyE;ȗo.~toTYanYA3A>rBBHZpۄ`X/CQ2.MwX*d4R`illJI>,hO &o'jJLͽJRi˸T&:#8&e4$8 C>mF :c,$v&{?>v =Jƣ\+¿|,e/ tnPX'~H޳=yw]/Ԓ7,fa!daw[)I=f#zTMGxys|uMv_/z |r@rk׭)I_5ddHsY|ҽf|}%rNGM:x>0S8nPxyA+~n +`,ʹlPH++B#]:M޽aBzKFs~͟W?pOIڥ0Y@ zj3JO8,~gs g! )12#ˋ8ߵwEy'zU(2rDx*({垷tlUЌ&0}K +YG7 teRS0n.[%äVQ$.Qv&G#"Q`ߪŻ!RWw:<\qlז0+@EPHΒL(s7Zkc<Ljքl_,a[U^[`M'Jտ"r#[CW֓]ʉ蕋C-.'wnJ\A㌷8X8t}倨znNS|uPx yOY=ŢW|"W^ᜲz^zd ROq:_u^YCvHRߵ+7*wiuϊ^VX/Ҧ_~Bɥ:gho;RTJ;imʷW~߻mռfeOv^4Qkao}Oxm|ۍ (w$]ϳ=t,}γ3 b ˖h\écO'5߾?zsEhE׫ӝ9T\9%lu!,C_'7[>^NaΜK<Й,S"GNÍO(orZz"x^_myhzcTM)-!;ܨ,:=ݨ Q՘hEdSJև~KZĝը.]0Y̞`{g|څ1{zֲgCܩZ{4;F_VF GQlFL`qQgj*xVf-gð ]y/g6TxoazѸG6o6Ѿt-+6L zQu~uеZZ{N U:MDeƳ/?^9ޜsR4^ K|][szTMb]62\Y2q0,y1 ׷iWuF_FmJ][J&EZ,]Hh(hKfmfl3㱱zq=NtQ +~w. +P5]?1Ky ٞ_ *YQb}zj]IۂTZ2QiY9)/>G"kBRv d]dez6x8H.1? ;ĨLN<<P7bNR:V`\*AUzB8&(>32/lv+04fpsv]/6ebeN=UqL.vKcjJU8VGL^(x dum&G(/6.Y4JQ`0,dkطQ^X_wy{0q.Y>ʵ(x5s3F5rHs!$ʖ;bB2PHY7@İr>lqI}ZWK'KH/7Q +7g<Gڽ`g2jC T]AZ71;ֺF#[,P 1?=k?W/ +LL?gRe](ڶBԤk/GH3BK +t8鷬U05;RV`EyiVR!1&kcndeBka:SRU2ޑ^+ kbn@E{^[f]qD +3:kɺ|ӄ2N(TS- + +\Oimu.=.pZ~a^\>">4xdʄ:D MjE og-^4oDWEv {(?|%'Ĵ*l<Ѐ3)ڟL;pyxBˎIYb։!afӻ2f]vA|̬}Kug6ZӜ#EaZ;]-&8|ݽ/ 1%y1ȀTI삟wz_:Y;,L"ĭ$lhpӑ|P2,Y{I06ڟo*g,)̌-􇫩LQ, /&9rNPǭn=nN7;r(~E]"9}餐e#2(ѕkU4<#yR&rVULO6&![װoJ.urVgc(eUὴ>&dkΑ*{}恀5{P(pmj;bpMp\Hpk\>k#ա1k4r_T6fn_.Tuu'[['oE߼:r_&/?RO].1o{ +;gq;|%mYj=#iͤ|Y'.Όm.t?ǂ' '@\UgƼ%cuB}5նag`nut.ܰo,؀^E2Ѷ f +օÓ1 VPNCkXpf㙺$mR\ܘ6!+÷MQk@ǦMz8767E6ʄףO 8mmC1:}nTN@Ub׬1V%~cg4}YVZ]\o 9 ק}Mm]ƀ)y նɔum{2jg,o+V*y"P&nBoRN +qG +aaWެsؠ(&f'sw[;e{ ' j'o[9a/qʥU +C[z^;ն[^;܃ Mn1D2#gN>%?J 5ʲ2Y;F.n +Vw[{_oۛ:7N_/=M7=)uMt828MJK3>KSgPqlDz$~~:iNtEּ8}-}5w ;[u)?=$1Q8~ĽGdu^ۛN}r&x/@',IGל<t4wKgwh#:K?z6};?up7-ԟ`߹GW{ᭁm9w5/0so%=;Q%-O\!muKrhQp (Ǝ 0<7r}pYu޶υ[%~OzvCj59[ n]|/N_Z_>eiNbˋrt^9=w.jM1I7xK,,}.Ơ("qpH_uxmrƮ`kxFvrYwdYxۖ$WFy:?OXСn٘o㇭W0yE@d!]s+uRXР}yV|~+.i\{&#Gk.T[TmV [l\j⽍/QKHcqTio/W|^0 +QK,Y) +V'RzZv\Ϝrq.L7=6Cuǂ;Zn2[`A`zwu]rTq6.ItxWOf b#/O!%9Q2sd4=>sqyڨԳީp*,Te<굤Eǥ:ExsD7š+_s_'/ٻH3/ / p j4y_oXc7>J:gF˱V%iɳJ(R+o*ı^k epyͩơ1:UgW2mBhy"W[,L6^IةV8*7kШcJ }TSXDzb'ȟS{5+q^|v\ҊA&r/d{2arP1my3LOV k|} iƣVVUIq(#--|Id.mI`z8_nT`)A.NO؉Lcr0lazE .?nیۄO)Tֽy^@֋ s;zyv=,(7. ȁP>CIײZcָ=LW0)Rñ?NVX>/6bʲ ZQup{\@ݩ;qQI`w o.- 4nWqԇE?ǜƫz2ivʈ WA)&d$d$R&3ԗf~wx;Gf 'V9)l)x9J.rWABWB(k3Ed6 +c8)=[d@JbB6Ѡ=@5BHxx@la{jsPcYLڙc(.}AAɇ;#s{y}:͹$M0;HSVSxbRߌ49&~C<˺E,N lXގ$x~db%6YSs-5|(I$!=AJߜVE>4i2tâQ>QdgZ*)}r.~kOuw?{'PHB$E2E$G(Jj(ņqq\Z~؂[ҍ +~ r m3ЯJ0="ATrh-ixX_}tȫdrW~/!(Bf{a7BX7*{vxW.I<:wkWlүq{6 +<嘵Xt*q.$ PaMcNgQ^s>={`/a_b}فŷ@L\0)7=uC{x4: +`W',u9TO8,n ѩoSUlXw4EQ=P"eGJaVo=(׈ZvUa\6'13bKng?Q{wR曜mt!9%nqY +2"}<{;fFIxq@>g f)F%nU' N+ wFWsn[w]ܶ+՞߻[ccOFޏX %Oyn*fѨj)(*cfyGAGgEnKiqի(;. s ?RW}3PuLGv`ZU[Ohpyjܮ9w63 ׃VԢ>RD̕^?`A@|ǐ] dĨ[y:0ily#nvKJ_Ź6[oIli0oިIqRGUS&MU|J8A©~&ΑTş=6:g6+^w;nޚ[-Q"7ڦ-kV¡@\D{xt*cCN7 $\񩌗`YJ 4]Ҡp*C["CgSƼ6,&쬆B7?]vx^dYǸ8ԞVxr;$)&9c*2xXd8 )@yu@ +O o0I^}n_B2/h),AEw+sl.]:5ZoBzº[ocvv<{͢?XJs5k׼oч8w*9=LB@&%u>]jq>`\p&\.=/gkZ| q@]:|TBk(8@8*Dugܜ `-Cl,vRoKlx=ە.||~(4 $x5XB$(l+@|FXNSǦ@R2n4qbƴӔss %g^_Ef=t;-K7\wD˾6Hɷ:ZxƗNp!}i+}׫ZRl 4vu{΂+2zI:xR}0t[{uK&^[mRZ]Wa}m8 ϗΊ}xEiRՄ=T+.gq$ҷMYe[OoDsFjAJBW?ZsKulksv^Fw,.ܴsoNw<9IuqLed=;,=]O܋mfgn>0HNϢ-w`wE̬3*ѿ[} r\(vN!"@I(z5{.Rm$VSɩq~%;=Vrv\wtV~I?QM8 2P[ ;{\_89;PsyKӊwLk;P= +>]s)}=€=kx]a2cV?fcc"N|l~|V,ș΍ v'#a&z2Om` +Z+?Fn,(eN~˓Z'k1WCteWmoMhZg> ;=p}='e-M._3>p=XWڠ2(:$j zʋփ^5o_~vgID1n%j/d`˙f2O&;@,I,//z V` a.7+9 0]Yv1$855 dhC2tc23"I9(:?6iB;NDڞmaə7/bUrD ݹ/mpcfE~tfM"fPd3ъ ߃=Y7o5BDl'BBIiKiߐ`d!L{E{P򮣍,E}@FbG&Fl,8mGI"GQRq? CRyjcG0E-|HᠴZpXWxwMǿO;–>>*c iґ)d]j6Xr\q1sBbϲd W}g΢}:{ȸ1ms +:$nrg}>siμIG;&x)Cbá8 Pg{}W`ާ]l%B %ݖ}ېZGC$mZ[Vk9rrB!`[3#D_+dAXUջ]% גҊ~xP-5L5 y'PWkW ߕuIswWۥ?`]cTV#Ѷu7'y5 l,^A-,A-iRE{?]" U;XXg # +2UPņj&'t 9nͪ辒4׿4_ 6ݢoWmƣ(B=@ټ_/?A-Ze+U7Uwժn:,[l?'ޮ/ޥ&Ԇ9v;NZwEF*Xbԟ:wɍejPIjR=ժY|Ujq1{Vϒ +g YPyB` GX/R/V:"ʸ0?P{=7>z'k7|ZS݄{d-FzBm %@oW2dusz =Jƪ6/i_2.8ЇrsxLi,7ϭ!G) t\զIָ^:lE:RAؑ~"|'K5b 4@߽|1@t7ZEԲ^(!^ +_5>^RoW[.#ܜ̎~f*F#]8)*ȩ: ӏ ώ j(2(}T#]ݺw˗ 3&WuU]`U" ,8X{f/Bg9Qpbh2Ѿj-Ӽ~\;ڠ&߽map;M0Vp= 7o_9f@6 hGMeCoҕ,A_O*!͇_ǜE]aXIrxÎClP]BQ9_8br c#}YJ endstream endobj 294 0 obj <>stream +g^,}hcua~+wJva!n ڟ8 +^:ݺtaOyG?|˴0M_;e?T59"'!NM>W/^D^:Ku |4)w'4F㼆 +GbǨe1yc&[p+F+BM3Q83QyIgs|9\YU2}M(<~`JR~ݗϽU;aŹe# g.h6涶p-~ud]"DՍՇ"ÓSH[:k54-Q$C3,5ur阮YSg⎻M|zE(9nmN؞ЯhpBCy3p}ݬ6z٫+%tyJ^?xKfJXeJ1m,rv)rv#ZTrBДMy]C5q,]Q_vjs:Wy{_K#~ }m!w9ݙrS>zrI>ѿX/*74]]~#< [ab//UIq;|yղNhgwqXH!a)^V99c<]?yw +ǤH[ZmyKCFy7%,l[5c<Ϗk5^?/z;*zki& ;L~| yX촜_Tʹ&='^k[sM1.k_K[ɚhOtKIFI!vC8|%zM<#Ni{=. nܚdZ9{{)dm|i gՃ}zCt-hrf8nI#e[dE]JiErSnz +~x/!9ϸ}V0>Ųs}56֬ޡͷ92 Ll卸,R>Ҷ +iVSGSySz-q +-'rP^ˉݹԾ+i:ͦx4?ӓ4cZ:< +s66P AoG0T$һ㧖R"Ks3s,~,RjvggQJxu;MnbL.c5g9{E@^sL_˚Ɵ1vnᔍ͝< (/nMYaoIX^FyAnj|dps]_ b[A,wUb<6ܞ"Cmt?~0(2]^בH^&ĂB6KBIu ^8noݣN^@mEK9IV̜Fʘu4'lϽ>ȞSc+(R^8z +\/k1GtJ!'$CM(/>pN!s, +a9̀@;JC#>:7|j4Z?2>ou 冏we{ja:zx+b:ymdb'UI!?{"[TP6|61ټ͜R13kF1|ˋ!p;m 264S|ʍ[FP9uc +hf%/Su@{-dGo,FmJpe keh櫟۞k<6yq1HٴFe3IM?TUFa JEDA0 sńzk={=78=/J]55Lm-wYyT?Ux@[TŖͩb+5jd-Mk[۵E U߭UOfZ}]Fe--fL26FwںB}F0}1M;\ 1pMUS=Pc tz$ђ$q.цQCf y7 | 1;pς(txU]~F̏4D5M]HeZ~.|Յ1 "{XhLv~&b[ +WAPlKYliq ]YHhw){:v4!>u\5d(iFrlz; j^DZl-=E{S)Q +Q@U$`!G؎pЩ[~N| {U3x vL{Z$D +W~ѽrl!zö^ˆ Dz;b W+},^*st8IJ~!/""v*.҉ }p's('S!TXjsʻ܄wXLk+ s1_C@wFJMڇubmYڨj [JrcTȘ̥J׋)Ls}]/RD:uw,$RfqƊ.Yb>c̤xbG}452+{g#5j,UWPQ*Q]SCk.vYGdD4+A #?^ւ.N37v>S,{JmV)[74g?uX*rjBBWbY1C>z9jYqd{`ۣ{A=|NSdE +C͸eAšd0D`Hh~d[܉d2.=0g-Ļ\eҼyl~]_5OCl76dx%Z{*l12N\{ `-~rNSB5q𦈘>١%,7:P ػ`cW Eؤ4gsui4x_<^;?48~+ߍ" +M_,C5wTv9 i@2sO5'|5}`S\d)UЊ+;QLg-2Z'h)PQђظ1#_>ՅgҊPTL}TyLb*Kv G*GpV"T֯›nu*3SXm()g̙5mͦ VVWLp_2Vǭks+x zzrd}sy"Ru!o~ZpQ`Y<)g#Ȉ[Ia]A^>bbͽ<Ӝ\@\EWjWAڍ>;~EN YnU03񙷇O B1j[~T +y鍆Y0}); 1VepQ耉٩=2;&п;xX>^-π^[07UГozFrW_I*e/2Eph.p\ozܾC://m3O0/>xwճ|G-i}_uZ +ƕ]ڗ_]imJdzvN NϲqiGdzjg=;oSΚ9^02")ijwޞ<쳿I|Ç-vz%,pr<{Y=dY^qp5g9_6|۫(oBmHߡti]Z#.ݽkI,kV.,X@gޜpDN}>vOwzڲyl֖Y9{wr/cUkx[8P^ =q;{C@?bҷ3⬵i]['hG\y5]cϐZᘆ1N^,ZZ.D4^prx@܃_QiҞ.=M\+?yFI8/OmkO{o{4dk Fd.Ueۛ urҜWKwv|>!='Q{WXFWM{':rC5 ?cf1zHGhTH#a CpsCPo> +e4'|* "Rr-o/{Q}stH#F|4W9k2\TXi'?Uhvo,F0.uXr~(aŷA#=1 zl 't[܍ +8z}[pϛчsYʆ4D.c "# aJvBaAi^5Z?P}JF^OWN+#tݦ^⮵WD?돇{{e/S/htvYv&~~9\)8snt^zCwIm3DvBLݵt|\?Wu$~TĶj\?5OULk~Fp%CgYkN2wκݽsWLGg ֡YlmV10M&5ϛGE'~߬OVeܝL}~T<^G4wxO\i܈)hꓛd#diһuBL7V?h^NFf^w;h2nӦe.fz[%-5(F5$xB@Sw3k?ӨGzna +j( lۺl%MDhQIY6R+;KGJfJr^5?V~+֍?5XUy)l\ٱEZK:\pѵfAεԷvPsn< 0>&>_wؔ7_uf&+ߪIzxޕO]{'F@M=Ǭ_|l֮G-)8D3ZOMzrRzIuwϫp/j\?K~Ou}O۝oM;xP)m :ElgHm݇=ZHSxiKW4zʑt.kM5q IҔ@phyr2xW.vR@4}0J7J1e{a+]eדꅦW7ZZ{ݶlV32&'~\u>k9I0]krO>qTG:j!rIKmR^bT CFtMxEVS^6m[r+ w#Krv%$ #I2o0cnT{1jÙ>wT;j9jVg R!qJIvty5I{8IIe$5}s>ie?Y4Vev +wslv!CnIxLjFȩ}[_SO:Bz`I S)-9-MJreW˪xn&%'>u6Tދ0J$KBr;|j{_C^j^ck#iO7ܳᩆ 0Td*o6Q:\7r g +H7IN W`ސT=?8 l /?gîL,&oa4;j.Y M + /!<{gUʩe tBNlWW! @* :ƇDG΍EݖNF~g|;eίk2"o/~®N!,+nnêW.E({~TUK=f*J%~ybS4 nNo'<9W +bY+ WFL1fb̖`?f^5 }]/V$yF"²7a>X`9qhҔ(̊Sudgz#a,s4]N- j>޳,Ȧ1e8IY[S7+a{:E]ѻW__;A%!O%(/qGd%VjĬ +9cJ;d_tTt&(E*d3$qW*J Z" +j4r՚s<5QS^بI sBMZ^+tI+qㅷ#gZf5BJ2`%(&rU^ձ[-Nvh7B-9]%@+T,]nF@=tofTt)%}ҖɖW;ww|g_(;ěN^8M7΢.n(#~a>&]Vv tH .J@۴XXasPjM:zQ>f@Ƌsب9gx@΋D29\ٚdϵAFoH'\O]Mb>}b2ՖY*+g O3^͢wVB"rS?G\Vu2. UԫbfX>}hXeW@˅1 @342I 2sEPd˰O %}3eZn8W|(]- + vWmlE!vfrw{ 3y^;@IK\#n:`TLݜsK3ݕ|=fE^̢&L `FKsbKZ /7w8kRדŵFIZ޿Vh +u_Xm6$\.&`ෞW0)t_R2f-57#f7f2\{xʸ=!_r:^sB:#tf#?‡S6Up{= [O֪l p'nC1yp.!l@X- C +)d|4 '= |^> zD mHօ=tRZڰqqۚk`[J^ͿYVmVpsb}vdAS\4] [S ]HOHd$g؏;MWQUB4ՠ(q̸a\cdѯ[Ʊ\{pvy8zV +BxT Ɍ6_%4a:3iÎݽۑ$jBE(yMjՇ%qjWvO}0?Sh }P?ߐ^rW+gWkOc{ٸh7&jr:v6Y;G贠&ܛsX>fuԚ_4]ؑI}o݄N;b-ߓְU$FW'ϣ_t\1ë6@O$,ɾ3^?GUy2d>YچmbW[v7nNzLkz~gV_G)č[5] A{Ů?;,@g(^p7+4]+-,+&1x^:wD^iGM,<\BZbmU~ܥ`V@g`Ӌ&3|GvDK=_cep^+t|NNϙF5"qN8ΕEv_ w5kИO@ ~suno{bR#fGm[Tzn͕PR#3vkt1m* ||g86wS>m);K}2:3#<)LԴ?XyvǹzBW*hdG"L`|憁͠#7;j/me}fqVk+e>\]%ęuS9K۰-kմ6تG½y.9Nߕq,N69<@+{dNZE&4BSK849{/_~S,o~C剪?DUz6xnw"垨~kh~V׵^v`CmQ9 mY.fc00,Փ~Ӭ뚐Zڣoژ3?w9DȺj~WՔE(&_ fGH^O.Y wX|.% b&h4TifRO`BkğWQyP8UH~hZ3Y Rd~1Y\dlqm{#COTm$XȚRNX^G0c?ƈ_~ Z}nI+{ƃI&?^sW.}Nltݘ%lSmX I R ZkNE69AwE! lh¤Ҟ†r =0ƣh&LMR.9^X'f bŕU+0{xUnHb#ě`n~:|5T5LtN_~oQ(~lT_,YpڪדS,Ʒ^OxOk^N7/p_!;[goy$ 䅍9dT^nyuj5Nlt4QcX Q2RṂ駼:X=2ȱ" #^/.hG9樾=b-ڄVNQؕ*h._ v8;W 錚*snR.^eoU!ZGyiRj_ʻ .{@.rAODFY4 NAc +?ڛАʅޯGTMo 0 : +t8)P~)ui ?Pf+EeS +0VaiVYAS@zCz/sc/{A~j-F^lj[W_n7Mٶ؝7D)'j[}=rum 7Q,,V0N[_s't܎#">;pno8gx?N p 2Vc+}ftDMlNG$< + "69Ԯqc\Jp +/ T*āA)cqhLY Ͻ.$ Ҟ >θ^? FltbV zE#}wlC +. IIdkrG5+"R%_ n|ZgϏo@ׅ*Xz}[ʩ]2n@\(C?c1e6 &w`-g[ `56hqJ4_w r_@W g(k#ޙt#'/M|@ +!M&")PRƵht*ߑ菻؞KR8?[]G3`]ZJ.SJ뉄Lz|@zap1*C]WM XB\O;d]n߀]U?5`Pm~U<5F'zţ?fqt.M Ur{! ?V Iyl'a/[=@[ nnzK; /<R2rA@PdR=c2[%5ӻLcjIStDV+]L\k}qiߺ:`+no?]]6 +3NH$- )5H]x@)D{&???~+*χvsOxEO+?_Yg?}G{;:7?-7|L66 [ 5/Z\BdxST9^mwU*Eпr_%oEܴm\ۇ}ޞho>cpM1tecfd{xwnڄh]u-_*b*?- !.qr\8q9jnvt8d*jc:MHk޶c3|h +F?~wVqj:;m{}#ߵcŕv#-]$e6 JnΉhş&A5<:d2rQl>M+ZeKz;jZ>kgh~^?^5+D}Y<9~9vܰHM(QnTe$w]J:CO:R^}'iEК}3sj.il6T*>&S p+y5㯨bTط͑\wG !~/ϿZgxAOvq9C[Z6Wemٴ.b)F7 ^>Eq rk<&qMwMUn2͗ +[?fm: BI.Dh z&JV9NRhMQ$0X3\bw\Oǽ.k%G8`m<`Zvh9ko!AE5 + oVb==? I.4uMk\OoNu:%qĬQWKۉfρS{..l!zO,=ݫezƩ\ֳ wltz{nTuAN:[Y·[yQڐ'd4q}NUMڇSK>K]aUGx*٨=ԴFF2 m֙llί|/B: ^M[`B-UO#LP<#K ISVmv_tWNBLJM$)nt{g{XRmnj:h1d1a4PFKl,:f]*IwV+ ߣ+TzH0jRVtyaSޱګZeFјtZlXVwUIB +:s\ +S -f%Kd%4Fbzږ7U{*W! iH1d&ry]; Kue;ut_B]8+왢YS!4o֤ɮ:{Y B6\)Gyˍs+ôlE|Vl7ާWjaDIږ.} {n{/V*v^%W k鞯C.HAqqe@5j 斘Qn!x[b"ޕI y{ydKEv"X̋pH +&,\-(Иΐ|ekWUօWsyHMH-?IY﹠vADE#&LńYι޵gZs0]mǾ@dN8i`+~We 5D3FV>@B} +]c'6N}!%&4Wir^~fU83zf~- WxmH-N)̢7"29%lkf¼4G`Y Wf׉zV ;" +k,-!dfAzpX_g֖ >r1>Zj3u"qu5)+@jYPm P wxԈ )J*4 +=xł{q徊W'ݟ.d_:b#η?%lV hIOV 9@] ЏO b`)~ )!`0 RD^=@Jv3-PWvTD?OVU) H}l7j\bqBlg0 +x,RpO +nI؎;)`)QNMYl+z8*q\HG 0D1׺}Xȃw_HlqejjB^t~8gI܀7i") +xy.o'w;a8OGGZŅZNml)OXf2H+-' ;Z1Ee-'307_$K`Nj}zR{ocsnhonZWeTZ٪r^g@P +?~՘Q_6xNZt1DkԐR{1a9Zن[]o~[ī>;-9Xo`sTlSʇ3bOcOæu@G𺷏kW}0-= 7'խ:ֽ0/<92QsjF̼}0Km'ܞ?x<{6|x+3OZ=>b4 G. Z~0ܾQ6&bAɱn'xDQGr a(?Dw8h~ *62/n~m.lmJFXz:q9 +yIڏ]G^[?si+?-#C͉"R3vc)=~~/]lY&5_+)1pt-Gx$8$IZ ߾uyC niJCt֚MY]Bh}/tMn?+N9ꢱ_iu_[AqY^W,Uۨ.i$9sZk)pו'CUan>><쌒?p(BiqR_6M/9Uϳc|شݢkjbR|[A}L5wkwZ**+9+y/(] )벓%/ΦW8ijF@XtrZX)&(͛]xjtZ) +zgL|7j֮>-WwPύ[G_LPk莦ĩt`&5y״j<RyΜ-=7[|ǼbP(<-\0Z6ﰪϫ^">C=w7WZE56ij-x{Ln_r*bST)'t?¨w(ʭY*M9j3(+1LB ]O.ҡP0ݻ1t7,gK'I*騻㫵ULisf;,GdgYd>qmwtNTj{ +qgT5w)@\5(s1÷sO[t>Á#4)t;ԖE:KV%!> G[Xԛ#BU#E"@GN\iryQGD9^Ci3kc矵FBkX9qGl 9zRoAR.h:0>%§ 泎 Ph4lxdZ>*Z)HN\ǵ,.D%nVRcY, +LUTWkp4T|+Y.?,i1W3~§IbV. +оQc]Zgr[>bpoKmhyչb Z7-vu{+}zWx\_ +F,@9ht[3^D68 +E}Dx!apXH>6%3OK7jÜ7+KvFӽPnyz1#3i$bVpT4ŗX D8*O9\ns+zva#bckϱn2{0 Un2k0Ok@ ȥK]L t/K %m}ѕVgF՘ȒwKZ.)luLFJ{iG.X9ɗϭzD5W߰V=23n V~3t{Yi[Uԩ0jK>TMs'֎CjzDjSC#~yF?9VFKr)jabF#,g=`mf9Nc\CWp b6IT+?)f$ɡN}81n{ɗVDryYgip[;ٰYm_Vhu1[j3zl3o'*Yѯ$hQlУRkH;5ob|Go97yZX{k 瀩!# \]`U+11 ?> ˢ^ PR |:ȝ8|/ +rAMCI/,\C_ UXIK-Giu5$Is[t.IVP9=;ĴR Z."C1Y:S0ʚގ3e2~2`)\j̢s)m͞j+;Ka +9`Ä/!7]<)QyoDQF+;=(jXa+̲S⊃mm`3/@)$E) @4J{KJFFo@,T"EwYn.S:MD'[Cs᛾iqfb7'{fv̪TyF)*-WI1gɀBz+@7!Mq) w^b8?i'j;ʖ(%R e8'!<1_=Y?2sm|b4SOЮJhB7RmM@˟$ fkwuÜvۼN1U+a r]p WuDsx8Og +kk (n#X0WOZ`v707fit3. +g1}sZ/q6%'žei[0zWW%P!c:WKP~00twf'xr X7z;BO]7c! p47]-F=-UW] t=dt\WNEj494OCb(2@~dy\<\!{v*@j6{0~E4~ Y7HM +z?I[-BtD&&,=u0_ F< +_8U#3F_9_A)I5|1.}wէl)nIY?!s v2Ydz~~Ѳ\"tFf"uih/')U0Yn,^{15sMysW6Fo9:eϫ>{.C.K7gv1⌈W}jMwyx@#j-PO8 D \_VeYE/ߠxɁZ\ńh$Ǔcp[0e` pesCChi$RSަRt~j؏]x6vb:ZokXYcR"44l߅<\[=6hўIZ/aݗ'sZg4?nNIQ#* }GDwZn^M&cXT஝*q(L:?|ϻq.׏IpBjN +o Ey(r 8Z*jjxn-ZrwXMI5Wmr:>ʹ:ʟ-(O..gs(ZNM)Lb#8kCx[+<4Sipzmz[ߓ߯vxd=^Bj0'TRJS6ݗ,F߯7,(g+QɹW\:;,`gkbŰۥn_R#D"7T/ /MמF9}_ɯj:Ys5mePW곍vp(ܝ=p)$ዉ>Cɭ3y͊\TZXَCVm{m;I ^V7oH^̿ +OF +Ó/6eL2m0gSE'PёLkA{J<6-%#^^)>9%1TKy!4V.{]{{uxS–ǩՁZ$*re.LϲJKJl@nGKG^sLs T7[Wup+ Vȭ)]l.bJܢ'uCr2ŀhbI>_SI9/67?'3,Wnӯyݙ*{jXTWD({I~({90fN>̯wt +YUIήz⠉-^LZW 0,E Fq#m8.2#;IԚQvF;_/36mP(PwU\Rjl5L{1e?jS4^BnK.Sߠ8s9UVx3 M%0BFTos<<,*€ܢ?8߇^ckB{=E:2fT(]}|mVrӔ'6Z[ o|H",dZ7 ([u˿]0[rK:KP#[;])SصJ~Jhue͍ҫXVfJ͉|nol[VGDMalE=!B∇ۚ[tW; RG]e%Ef Gu+ͷ͏GCIh /:\| ER/rҒ_;$)vuqVPn+Ozc:/XL>pPn~֖ +Kb%o{nKI&*]{}٭\`Ikn m-'%&)eIj-˘n*Kį:.C>ݪ['I#ȘST:dj_/y"'KF/(Y;ċ#/Z|y&CiPܹ^C89`kiUwx"n W68sn>ͷ/m*MȻAݓ%^KF O$@ĵp+?DijɃݮ{w-(躣~Nx݋jz}o5~%na y|Βlv^LA T.TIM4Q8 + DtmqW8L_ca[@יcD 7zX~ f&x͡Q7>4hG>+| SS*QbE j W\#k3/6kZX;A +r_twJ6[+*O#;,[^YF9sL ):ilC9a\S1څߴK:&/Sv ֝6?گ3%}Z]*&ѰP@7k);7~N(\^yw$mh#f+÷}y9Ӛ7NqKݔN+⒅CE(u|WVeLzr}MxRM"2C54HUj]3?XhS%^NƠC'RUfۯ'\T3kDoe\Ioߠm[E3݄±;,M-Mħ=Вz;iʁbB\fp߇a03?fRfpUR|k}O.n#*78l`1=Ql ;䈊Is$}ܙM]NXv;ЬݬdO  )=@) xtI! +tyL\BAQkvO~aN L'J;c #|/o֖S/סdQ8de)fOW!N3,$ j}3VeFy *L@XKRTi,9##|3݄␀.vsY5g'o׎ ̡%Zc@9IYOMJcPP|Hj>(jBNjC *nNoR}N8JiyƍѸ sH#We3dԙm:_ZkRLGnk@/Ї  -L8FRlѻ4`Ҏ0:Uz0ZLV(zXJ=%yol#&nC{<ShƀLdIߥk3uE\~= X!6Jvn[C`߾ +Zp+)Ò_/7=[(\tN&4j;l-)z:%ؗzxO?g ۂom3$ (!\+nׁ R9p¹r|Vf3;@n+ Ol:&:~SQ9@37HYecDk.Tln+m\YN |AS tF٢nECC+l@~S%qs|O\i~>%@<{" + +\*3bĻ_OljfMvJ%@,FUD!QU2rv=mbΟM u@Kf |u@!H^7]«xwq|hMvUmB~gjB݆[uխF=WA!OPe}#Z#(raXW_1V-i>Iη_|qKDncm*nUR]>Ycb"d_}h\̈Ev2rrx8i x>Q#Mp C'f@C9Uo׺/;\| +ܾÏil_?Sz'6΍*!G}ȍ&ࣅc?C<4?tm6eizFzwiح苴c<`-.jrɱ-2wPN,qO?/mp׵qϞnbdɠYB' jz'mpi9jEw2lY|͉ El<௽vonPs8ǹKH{}鞗n\:Acĵ: ڷ7lezb + }LmsbYFT՗ލB7j'uPVW|~RkՓ%nNiw YPK ,"TȪ]/+R Ɵ}^kqkޭ}X/Rg6*}WTİ~`7t'-mhj|Nvop +8G6P'"b:=rqō.zIj2&m̩3Rl7tkzyR""*98vr\8*ڛٞ\mOK~uV(ylq|V%]8IVŧ7`>5ɥ<)O"%<%de39.G&`bɊoK~V_f3XfnR?;+Pb'+RXe۽Yj3`bo(πִh jav /VQC+:*> RL_ù72DTYl?l|'~,#ЎۖՂYΜEatMya{!緌w{old>~ƒoZZ~j51=BSh͆ȜvZJq: .VQ{$ c>,A5^8Z|u2Zm|J3`@PRґܦ`SCEVH%T.Rv/sQ>͋܍_2׻!R!$qK2Eh +Ϩ sOmOB.D}?W v[1p7[P`r:59`Ff=J"]sWU73QS%s+%hK% lt=*/ބMKi ɑ+V|щsbrǐ5;g9LJ?Ssbs +BϛU[QNg@OfHnJRC&^@ Pi6gГs9UqJc2P35cajPcjyJgi4˵ןlyװV J1\%U4Wi'ރ$!QQi͝y+].wΎUY3S8Կ2A dtcSӬRg9O/2aR4?4胖%l +ar:Y8̠k_ox)uwYԊ ^(dcAPd+mUcj=33&I;^1 } |Tu ‐yP1\.+mX{'!qZi9~ a} b"Bi!m!IgŨ~"9dgOZ>TyKZrO\!kP,Eɿwtqv^I] DY&t>þt`c L{X Eo}찝OP@뎆}لLu*c;cK}!3΂̬'nt.+(qhJ\eZtz-a?0UW[bt8Za'β}/eCSCfhCnSD28eEo\tΧX(i,Qv"J9-ebOmH/@|=jv!v42ImkdtׅQưKBߛ?19g=t<+"Vw=MףHҴBw4}@q#{ #v ȸm{Tc &* P s Ęrk@)@oI9Jvc' 䤃!(M34N_gV.*3JX{\}@u&rPZL+@DnAcS<Ënh]xt3ovg1_l>oWh> jWZ oO_-n _F>0LfsE]# ؎UXCz=`k#W`fU}rmG՗8 GMV1|:Ng#?~>;B5hpwV@~V@Q4P{(rYy[f_ Zn7fcDх@=wgqv4i>Y-6}cXc]Bwȇv1Dn]6-(xU-,1d#%ڌg +zmM5\׿ +7 0=ky a1S`P$5Q ڥ(?@ʹl[kqR#ď̼ 46]b7ag$|v{ߎD݃:}n.+6pƾWm?h"浓!hFG|SWZWOJDO7\]@mOkX=Zߛpf wAXݸt- {I:}Ge[?k+/zedl _u9Q%71/ױl`BeG{ +l]GQs9g1g1kgoKfPFq 8GCNkạn٩RO[:A-꽽=niUN 5f"g4̵sMj[w^;a +8d'b'A˞tK^+AKw=3s^5Q ˲=U⮝DLdumYTZ/`CAN]BkF:â428ѩKkR.uYnII]n`θԣD2͞eFuaP7i1v74hZ]l7"Lz+U?lE#3+')yGq Ƙ3b> +NҘp$.qY57#Z#^e_9Ӕ.y4>R^)- ֔3Q_T`d#auB-߿7YUv^`X:`Wm jUdbSM>Ul8S[ +khA +{;B5B* ^N*QΜJG̒$lzˋK^i 5B9XJ7|EyJww8ٰW5l1scJT| i8y>7\״MYT>(՘'3AI8b, 樦{V*y>d]2Μ-Ƴu<)֬b:ZlVL102R`ހaj1!|h`,/ck±Qbך1SbO@*/ +>ᄲR1*#aZ (y +I:Il@#JM`ʯ!^yW8?RxCCR6m4ya9Ŧu&A?#{]00]h+M(2>)6)Ƴown;Sk+m=PQu4>Uq C `F;<X& [v T^:fO+@8D0R|jp @o'Ndd|c]OM̪ ^+)demk r+0odh/HHaBEֈ3L|(]$$ԴR@l5EH$[HH@r%$6) > I؅ylڮgo +ejg>Zx#*&]8vmZaKK3Krd\E@zwrG\o o6 <}v\&\f$o,2ZT +e_O:ӐθL@T ]^'BYϜy@U2zoP}uS$@3NJbz=@7'@m鿚f. PP}8k#"-%+?·RgOŤ5,aqw#a[@CsQV=VtYnW_=y2}A0X#cy O$Y7 1=.ApK^q{[53p{5dLFtJm!$sCQ=[פ[7VWӋjg7Z@y3,"bx8Y E 3E^+y'&\o3C]Rؽ u>Akg[pHx$2@z4 b.Ŵ[b8@z/u M ŹT|'tx9PLƸvQ׆ӽs8 oW>6K+OWʦ$?˩]84tiYO_j4P]TT(| +)l:ߝ+t\2hfi]cB.юw5u~>:1З!z:8}OO8ЧOldLq၅ڭtZW_b0:}gz6do1sD6HRvݻfI1Vcrr(ݬEEMy̑Ǖ>,r|#ߴNVwJZ蹇t1) 30om+H^f阼2^n9"iE&W!7EKG4BO;ur +D:\:"6ѽS]+/.5g/uozmÏN_9'mc6Y ؎K8#-=0OOCM4 6({GC~С4b[Knڊݐg]>MN߾gE?U\ H;OkqDZos?\+c@ +}GfΧ&!ywݩOQݐh>NguM6j8+A¬?_{\K{;eȨGwC<:Tnq7aKk͞7+ݬ}45O/}- Kujm`Mm)TvvRix<4DZ͂S2ĵ[W}Z r[ͧ5Tkz5s!.{uZV Z8W'b{|içj׊ȓ]7+sى&|fȼ p}?z5ru״6\5J"jPLFٶVyњZr_}&3S֞6F)`#\V[-,4YI!9y#iʊ\3DZm5j3ITmh%mHMC|V{3&;-ʣ6G1JפeW.h>@wGoYʤsOԤm2cQ7M; [oz Pq<͞oN'W(BN89%e[.j(.l(ݣH|s_$V!`X<182 +3"t #Z =w0ؿP8(xyW+LŊ;3Ylϒ^M0hڐ~ފgtd'v$t"Ob.I$6v LI&|%O,F?q pNRnjaftbL%YêasVM^)eg2Pfz?~:DMcQZyZ»z31xT. -:NJ{d|H,U0O_7HoT[Ĵx7Rm ,Fմ; Lx$Rdh Qjg%Ya N^w7j^ȣyãe  8";S8@DjRDK@{ |ʞ>B2  _ٝ)8bW3KjEABb+HecE%iAJcACx[19PkWhjPu@h:|U]6z11 =,-~^;-Ki.}9 vUgT+{ +aӤ$%!pohiq +#"3gmzB[٘fl'y4 +`6`N)`. BZلuL `f$?|\O]hv|d')i dw$xփ i!WDWڂ+VJ뀽] JshuXpa8.@/3/Qp_q Dȹ$+1)2xhh?2,W^lӓRWgn~ @z; Q7;c:jyIcMp*ʟ A{G-[7Z"C&~? +W== {H5|fi!Sl@' XH͗z $xαRXy$s:C_Z\Oe.~ "l?Spnrf?uS@tĆ-ZJJwgYd&dU 0&$o]?.?i ;xqX:u^O}RM9:K^17Zʡ}#<|m}P=/Cɜ3u8:(]xV YTJ(IEbnS7k +;JTp=?nM|w.Ghn5N~*Vy^`PIQ%dUvL7 :l/"0Sj _R?\칉Z4a,">Spp>'+;{û0Ulנt靛~h%O38I_/'v-2zxja>F2ިQpU7̯|`ydyxr+9`>e䥆Z~Pw7W{k{1dXkdh8hU테U{u/I{VX P6TxMD/c+*'CY|}'SJmdװSOJLi !\i,ha56oV`0ZYߏ;uvt5i2lxjԁ*()+,~MtS\nJY:v+GXJkn1hN6WG5ibƶTN0@&^uaX N3!h2Qx7T;}[*rܢ*đ/G~APaJbyԠ(3]b=LE\wO'7_^Vw4W۾N +:{1mLL7m[cDS¡R +2Х2~m>rE'.MJ5V%DǷyU$I(5{~7|6JMh sȝ + c =d-Oek6>a|i 2+죛pM%ռ;ՆrKbxK+."­Wȭ!z8ma뱾Am M’ +|vHTw2]z:= g-ʥgwƊɵz^w;oT/#ڒ[;^`upLk,^63Y!X?.]>S`y ,|+搤?3U`U!}>8yu{sK8jGv_7QJ`B##AG vq\?KTV졉6ރ(W?R:3XphRr)FM<p&dA`QկB&PoAʊ6 0OkG/eV7;LjZ[Tds܃?8<7;v|/ .($):EA'Eu :JƦ^T|ޣMsK9Y8{Wә9_ o:/8N=oCCSc uLWSt2)e@DA?EUz 1]XHQjgCP#[Of^Lp!Ebrxcxԭ] T[ .{t>0 ]dQd9*K\m-@\j#}IrUu@VҾD G +ݯ[c1AO!J:WSGvw;X4W@_<= 4 +(73WO#A6$릨,uŀ:Up@3ŵҋP*r(Q>튡֋QwWbd#\@;[?QwH@3s78T@OBq S(R&qm 0MoP`j0h +3T:)צ(-ǟQgރH1Kp*K"aCA-[eɱ;ɸwߪ{lYcFk pH =C23`GUdoz6yg'MO42z xj|OQ_)\b)=+u~?߼ >w~mEW -A`@_7-RI̫;'?Eqw@ӓRU|X/ʦbp?Y?MN(Rݭ)Uz%mJ@] ԏErXvYdu 4`o]߽-髎s"~'?˨J (Ú 3(hN>xC]O[;O]ildsVYFX/ms]z'nMO__OLt ߨ5/{;% +>׀vo6Pgf^}>,q Kfӫv+]y|ϖs!閎]>`[u1Ƶީ76HLwnJPdD% '~E䬀BlLT.~ʡMes/%uzQwCĽv||:6빭|`ƛrs"?8RQ3cf̘U4]uʯAq\c(> r<^z${ª+ЛnO5^8ߵN%VFpsGKa/ jNM zF#,C5wdιfeyK n +9lluݐFN+n_K-)t=iCCUm8$Z]֙ve7kd}Lӯ7WJ iܿe&R^sGm/1ATŊmU8X4N5HW)=[עyrz){WV[WjI}si_qe]=,+\Pŀ<PF~ͳUCYgNk8ś'+OPFCǸ{_9$?Y:u;9!3{h_mOM~_6vS},_)[^ZLS_`qg_o>.%OzqEhȞfE'G $ZXTR,s.ĝ M7B̧_y[f]34g7Z#jn'?.=Uc[5W/^Ç^_Pz-o/X,|Pؕ5 ,֜Afa>qW[ U^1[V㥯BV5) ʋ:ˎ,ΥZ>J#yI(hјً$#TL1 Aߴ\ ;ٛ38&]~Ur_JI뀽Sh<9%MZ+yj!I𽪉Qo舁 DTXLe&Po6ć̳diͳ VJ:^{Sl()^xʓrڀe7`?ISB)8>̮DE_YZBN?(olb[6_,b)-}3dP+!1^̭إP +ȃ@ i/oÎgю; #WcNmYL'Xy3+LٌvxGl};h 1F5U3ŭF9ڒr>Mrb$QY-o> nz&(`sڒ=ϳKˮX2{dt|΋WgݫeH!jΚ[(HCQ~|!扃HL"7Wp(A}9Xz}F~M9]Rw2>lc_-O=K8a8b"1fg-4gN[ے-5z')7 +rr02qĂjD1uzN{] 3dT1nsY`bs>n2zK\"L,0nc%j7gLƍ9mz=~w@akBʔDD]bq ׮ V2c! 7Zo4TRxQ]:0jFXd·Iݧ1_yt)=#*} +J]w^>'dc!dvX%\J{NzB}/6Z?%TjzH"[ Dt09Qp7Q^]p^k8m,0կ[*6,aS`V3sYIr֔J9jO6A-]1u'5\ $FyĵuEv@䘃ShNk?AƖ@wALZZRG@bA Ol@m/hL8$WG|Z}nϩZgq'Hϐv ^!ǿq+RLAo!g `k`XSM1@e IDyڵm繨+"^@" +5?^ 0ew V5qs.x̄9ǜ;.RS#,SjTmDZy"zpx}3wXt!y8H?޳԰7ښa)nCj^5Sl +DVa49Uɔ9łZH$-Mx|?%"x`18tq94H9VEUubLeBq2ͶI֧*@;D]h x,R.(LzUqbkdFuU5ɮ(4ǣ9,DR.>+s1n* +@9n[L(z +e 7z8=rPd^Nd:\cpT"eXgaEe6#BhfAwbR򶋵S+ٱ^N- rQBFޑFou`qX+ظut& nl2/~1G4f|</V{Y˽/ +Uh +ޱɮ +7ۻk8r&xXNTnVVi h] 2z 0&G^# \2KBV X#o'%#K`~`tbռzEә=~ى@P6xJBM,&Z,o37J^-j%2>RO@(Z +t e=D$ U/ ~޹ͣxTl76QbsJG䎸ihl  K>SO> eA]´@ܶ *4w{Teh xUHE7T%3{IGHf'Hxy|:T~Tŷd1 1W a; u' 5iSKw\Q1u l YhEA2)aS7`шb!'baՌ|)@ +d7}?90om $w$+ܿ0o,H׎k[݃Cw@@b + -% = ݢR3hlW?V&sj!q"QH]5ur:hzOZrX~~m`Q(_:@BA.{\ς [c ;w+/jűܾt]bD'Y#Km{C`~~ㆠl~umfVW^JKPXo-PXv=PhcyP(f oeމȞ0ҥ +$!Zۿ5M^T n? +m7(aʂir%'#Ai'Cht|Pᄎɉ\j6 zQʀB,کu0[0hbK+6gF8 IoCᆜ=I&(RɨT)$.s%o&hx't\'|qׯ\Cͼ#]lᵾ]DÆ%ԛjw}?I$RwYCsJsd%: AGBDQ+v$IC({ 6}CL&纛C/d`ѽJZBjڐʂX5d{d&qJ|wZOv-!Jv0Zsm&>NmfK{IEGi,2X4"\ydC>9)Td$y34 }Wnmd5{Mu~lz_J2Y/d͗cU J#QzQ8ƐClBg[fJYI΋LlK4;rq$h:'V~o +ޑVc`U5(at[tM(ɞ%ǔ^ߓF&9猏mމ9 WO]hk^'eT "1ۇ]ް0G{Q'^ +ồz&b&x~}6={x,Lӗ CFj0P)ʊrQ$rE/.۝WYM᝴WbQ&?j"n<Jy V  +[;n_+a:RNfSn/j| Ղe+EiV M_U5dz}.u߃@=rDkUaЩZ:j W8l5z $O&ZMG*D+S󷒊ǠSP9(J=rR^Nj0W-f7Ku]WcR%.eؕ3s+Kҥ|j]eYd^b)[ uXdzTy:c˖.QHlǭ譲NJ⹹}8%iJ+Q΄Y +Rc\h[ZXL +(Tq!<7XʽtNn]\6G'n[v>K#UyOZZLm؛bgs8 } dƒR EF49e9E1qzVl,*2KazĐHo{>=PdXғHOqz&bÛo2~9E:罥̓^)D͵`o7#:sJU2,,3xf;#$UhzQ$z,haitbG<%exKv隰or2_j.wh%U*r!$9w]ғv\J'FL&!L(}/DF \-5|=#(M9`;ZBݸTv-] +8,(C)QGB>Ns,SbA\/cM+(ȁ!k+P|-U|zZhR9vG%6U,5SBR{E=ŚBnźr cAǬi Xe$}{i3&hfɢb(|]f8G4 MuF¦=es7z14+hV){%rCd"8pZ"r+Fxo9=R><^uQOh4hg#rF6@VVv91H$x""ӿMaHR|DGsI8_gA 09i XjTh{uKC۳"8Iް)Qm71E.hQ;I5O:Qߕ.rA13GJz +{4a@dr$d[g Cecu(@O5_\&@PS+Gr= k&^hovX~ŽhE/5A)Gx:y9P b H`^ +O``rׯdSq(r`j|EUq`XߔV7ށ\h\Nll{wƐq 獌'w3ѺUQ{N)i\b]|w<]NM1w&4ql~g;s-9椰;fH=e;~8rr1`P^/eR<>k7@$ yD9AtpX{m[+]:vOH +Hyը96K&c 6߶(ݏ2?NP"T>-|uѩնf҂E2 5H4VHlTAl>Q#ґ/RV_->()ic4MҘ֊\-9bV7:Ji-e/ ik2H4\4.Y;bv_TKRw6 j[i}eAs, |a8ٛš@a P P@Z-7 k,Z}@w}큿WGWkφ䫁Q#Ж*awt©^Ʀg7yyKJ%z{_yݫIC{7B9~%j!{_ZޣWBx_H]i\~#>zajs1!z~j$I8Ȟgllf&0#͊7K[lqn ΉG8i\Jx&q9<ͥ/Ms |.6K?0ʢ6[?oô[>PAZV87]τ^7U'B(RZȃW D x(Ҍ,&g&K?!B+l^+x;¤T+G'LY̌ +Q ]7{$~߁+feO~&M%f1CN/+l?'we;0CNw'M|BpC7!'ڗx"p gkx?ؗ}#ńW?}Q;WR{V\!>T`1e (\JHqWLe\(AwWO%cھ, iѱahΘkoϨ790ic)A@§YSQ6J_(f[g.pxx,Bܨ蝦jo㜘a(W*~5xBa8+V-</@У.yԇ*o6 +]i{Vkײ/{<~jqWq}pKVb-B1n ^'(.jwV= .ЯYHx8*?6i}.g<@$U{ͻ "̹{V%cUޕf\m.\<.G,s^ ˽5~^R VymTn>m~JS澮\ʝXL엛fu%ެV? 9 WU؝⺴:۬\9a('G 'GiB<}yh.NUB?t7F_B3'!0#ZX[H$y v* ½Ֆ3`r :euzf{6w8!fԶ8ݙ2*tP#W?x+|휸2^116n4zYg-n -FNekiTKt&[U<g^.shIl+23c3Vs-͗ XQ?$ۉ}/nɸzx51#网8$xGfnœ3t[)vd5_|fԟ7ǒ\daLNEUNp/*|x/|qٱzXnJL\,Rjzp+3I2䓼,Zi^ 4JB޾?TR8ZLxUå ?g"K9&34)sPn̂lcv?)p_m!-ȲK]W0^'+e?ЧּJt<\e4nܺ + %7'Fnb֖M}2=읲GiuھfNFٍۺ@oMF`UUpjY8V!_A32wȷ@;0&p+6&%L2pg$>l0}sij0f5?A:ڲUn6V6-C?r8҄"94s܌wW[sI\ҤS%QZ f_7G黴ti,fR"_{$u@P>Wu\SQAR^b@krF<$:sXsJ +=O[L|ʯ@B?)vfff%sc'3Pu"³[EsB <_Үy{KI-SB{:e(}ϭ=)6L9BP! 뚀V9NR~#XJ pỶ`W5#Q::A=JM5S4<) LDAM@ݫk|9imoJǂ'/Yh>ɍV&>BL3 1K+)4ն21y1),";hz2 ?$_u4ʑ>= #{of:7z*OW]DTDMH,YV|?R~s9rT.m@&Nkބ[lAMbg&0T4!(U>xLOL<-ka`!lO/Nc{w=#':N>ۣ{uOs2|/8{e`(Wxv^j韝O ƭ6?.?^{)ljD[={oCɤjE\Ca(_~6|=E3f/]hP:eVuӨ{OMr^ƽ%nRYҸn&ktI׆ в.;GeXҡe`tZӞEz'bɾ&Q\U%?/U"*ެ˾Yh\f Lٷ +鋨ꞹ Bc\wgKaD3 eq:uDž^,8/lޒ͈͎ #kvu0,llSy1XZ0֗S^\ a^ly1}ǑO\MrPy/+I/׃46>.}Jl,őf9<؉k5c4m9 +MʯvQNg +\2*0b׻An/l㡬bI-"e5z)OKř=C9͋v$[%Yܗ,ސQd[$Hnb(y y0XN2we<#y):a(~Re*?EvբUFXl621 xs}tYSީ)2hA]NDg~<9# %Umd,ft?w9clCuezXVxhT3#1f܍r&d"%XxMfOrs +MUrAz!M6V L".u~,v[hSj7f?\h {9,Xfޢ@syR=%%F$9!q8t!IΦF LChbAkWo Mtm]m3SkK*{~fy[]3W˦39;PG-',0Q6ۇo:x>#9twyrtֿKcaa7be\/w7͡[ (BSA!|ԟOLr,n A_!>Ov|ēcē&{%c fble nIslKݞ~Ezx8<'3>"gDYQӨ$ OVS"oG +H; b,Dnc)2t{azr]yҢDf'3CP@Lsue›%- +ɣ +.f+{߲|FfL0F!-e/sgxk>/*/i\KAIňτ2hTq9~4pr~:y?z ѻy1Xr7ZY4nT#.vhD04\Lq>ӻLQIrC'ߢB{} l׭nTAkͧ\>QyOm}!A?"•sbU5N& e3.NvetyAm3j¢,}qBw2UV +)4W:)ڜ>;_-m83T[gfӱYίDor;FPp#gLgcYPoN@OW}$dn8r>#%<:@Gí՗cuznqu[C+'+g4l~^Or)l|'t5/NT,7n֚5|܈ p^ޭr]=Lim|<%j\'}B<5TRp"&d>Ws{0?P˙2_V1Dr <' + +Z)ۮlƝ+[s*mK~hIo.әpd=.΋K̒|Mֽ=S=k_cnFmSC*Ew]bVEP*UXgĩyTa{BG_nDRWX,7绌,C6M> M6j"lT*un|{A]ujF8N2:u-<|<c +}Rs[KҷH^ T&!̿WG-Yu n7hl +FB*m%x^i9a١)R&#Qt-ZXyT^+&¯T"#"Im'WӺK .UVN^㹻Yjt+I= *zFkd+4g]dјaslM6E=$>{lˮUB?|뇳7ͦo:tjIyCtYnfnƶ6]LgZyl|hĐa bGe<*~RPViƹ1ŕYF\/PΆ781c@%}rso]nܻ} +g|]"q;#َ J+e)K߉f7*zb*MͼA# gxuJ]?ier$VIV"Wۀ +Op;\- }I_x?˟K| g`9Mg g/32 +snj}C +d_;3fos19i( 'V;&OΪ\T>j3~tBvՇ܏H8lN^&L@Yb +blI_o{3Jk}=M o⹙*W\/j^pp32~ޤ^0+052W3wmzUkٚ(L&Y _gE+HWMm3c2+x +r~IөF4NT!hֺ{9u yfP^&l^1mU /j\MZ_Tڲ;oq`VuIY`< )O`& bRfDgz}W5pU**LXMOS^mU+Gl[B迮LYW?Ak/:隳O{َo BW$mTպHixW2en\vq5*8+۟H8y9@@wu +1v( .mѷzj'g?sev6uĢӝ(*u;VYTc +0>17CYs1GrH^նqI +3 !={U}fcsrbX?@'~̱o2沞"VM.pD2t<8#l9L/V}['R_0G*~^rT[Z +#:/F]bXm\1%LG߁VpxfU}ˡ\vx':''-ˑ]vh}kAX&]uИp)u#BAyxJ-E'm8ڇid6+! JT {xLڡ,:7{$D};4ۡO^H69 +Bmc:F3{9M~R ! 1Ϟ-ë}/@E<%|meʴobx<,<;"CXΧuu_/Խ߻P&s*! [TAk=!;n3jf$.kj2uPϱ׷"vb`L]薩;oHCeWMRKgRN?$;;ddG^̺PњanP&q'Jplqޣ+`-ӈ-殢?}"Vs./>dXί+uY2f-9@b^s1փ77;}49Ttz!ۭ.Wr5xLИTw]%ڳ#LCB跖~K,&A A&F Sw'QS2WU^zr͋1C喜)tzg[~yAG,=kTO)&/dz z^ru;FtrE8.Cʕv^T٧(r]>0lPoI> Dw=grGO]*:U'BVŭi)vlN9us[.%4Qt楺hw E#r>Ckz뮾)0bꫜ<8SAt)YDk:-uNMWDcǚSYf]/E]«^YOx/?.E1.g7 io>ǟxn2;Ơnt< A]6Hy5u\k\\emą_t9 "S{o'dg*:xj,1X?6Iw{;e%cDzc[\*;iڋV5)TRvH^vaCj:Ddjd&e)7@vނh..Q_ům2{r׌EF/>Dwb^{%~R6 ^UED|LbՓ[Z[mתd%Ɍf)Q5=o KOS샦&-HSaЬL5dѰb{`p_oC2'mMN:,qEOU+?NE C߁}0&>:g}P3AgؑQ,rWL) y C̋ 1-9>xYN&U/۶^2&ֆO/0b7G6pl|IM"le&\7g F2^ O{C1Rջ"wYЗ@B!dG`O/Q뺥AL]۬AvjdetcHֆWK3;QQ{LzGY\Z/l4FWivw/Tt# *Z٬c>u/20|1JEI{؋&'U&H]Z;4J'1~\9=ܣ@!:J,1~e^e`񓭻Ϛ%OZɟTɻfsm{(5rQi!oJǂO Pνg[u R*mF[Tě%ldW/߻nBUBj+ߕNW}INS|\]I > c ({A'X (mbТj'μ7=˶&OL]iĢp$_eut<{nGi|jiƳօK6k`QxyqO#>Z||T/ py,2!)++کrb唢CK!x󔀠(g͏,`GģENK#tNG?i}qXeir!ܫTf_a[h2ڀ~\-T'?Aã^nW:%_t׌;SSC=XazdU\.=>tli{=Uva sĄ,""A2J+{f{^\k򮢨)JBL~o ?:Фz>⭾x~!2,B1.FQvRG[ZE'o+N +oP~rOމU[㯾cPM&"}k]/1XLqd*BK_s#dsO&k4"Ņ[P֝% Ω<\ '֓K_4M>O~aDEᾭ `D8w'Tɲ.:Y{]Q=VBsJiEvUjyTym,nYyV%ÞUu@ +gA4QLbA+re!,1]ŊX'dƢNμA'6W?/tzۯ6>ӂRpiaN`<"5_oYԦU>3jl8+s)t":~Z˥`AP#)i{6~аkUoe2J;zC-ڐI23E]dWqpϧ_tlBQLm +Vxc^֏wPȂ/Dqp%s酸kzU][~/{aD23Ȱg,οQбE:m& uk-1=^n@UAQӁbT!uKՏ4gͩ#쳿%}Y<[t-ޒlrYeY}d0N z!~^!EṬ& !h{FjRy{prvqAk7Er4ncJGg?ZCEY̭OyyɪiJg!uygkg3ǬfvSSi>0{~'e6nI(sFaj'#,rd#r7Lspbљ}&Axst [X_~!cq#ƵM1όi^%j;j iض2v_LJTO/fo^GNup:#+"tneJiQ-Nۣnv8}~:P6`Z,Io'X*zTv*U ׮}j zлXw2N;ɓfsǠkǺkЌgTP?ng\^s!u p ./?>P_,/qۊԾPtCQ˺G^#}ME94'bs,c04?)O?"_?ϣoH?7RO@籷_ ߢPAY%@%2ɋTJXͤ_+/:_M{yF(\A#ot.oꍵ}>mW">7Ty˫V+oK;sһbt7O<ͩ_(Y\:؞x/ڵ-d/ +~_ַF~PVNDz>Y +Εwϕ2Չ`RnV9`oԗ_u_o^j00a͕˗BT|A|D-LgNjgcRJ2%ԣ%|˰K(z0+/Iwo'1/7MEؽ Y}6] UjI]b(1RK&-]yߙ@DGYdZ(;t֒8~(p*MLTP3(fK2UwF85 1coETxUguoʬйDwiK;ÌBRJm(J+<#eBQ:=il_bݗ.p.B59ply[ԔPⴁ# +7]xulUKC&?_z^a k:*f-!aθk'=.7#MQ~fȯ~2D,{^dY|O^?Š ^=WDBV\eYVX 1 M='WmC^DXzpzۯKRh$(lGfH0>lcL=B<hh&f*@]02~.t]_w|Q_„7oyQB=NԮU^#LX{lsvs+|Vzf=W_ta! fTG%xH\T \KUݩꜦ t(.ӷ@{ِkRKReR.￴KPǤI$T?PiK8xvP3@nM}62MxGawR7pʼnQZn,^=) +}k'xr$4.q46dO9\Hr~^wxvT9|3ᅱ la뽽*|vkMk{ Fr'WZD WU'&p%|%Xpk__3P-g)XqF@@bjܪmڙ"Y==f#K8%.ǭMY3a&s(~ /PSBMA[d'6ZX!!~RM.Xbƚ 9{t8Zt}̆i?S,,[n1J3YسrieI=N/ѫ4agF~>VgTWBO'жDZtdaώ21nr>^sJ%_)ku=+W=uKA|yu33Z]P]RJ+0b<:VMhtLcJNQ|}R7Axj-to|; g{8(ï@uQ*}6mOk, @&lҴ]t\˜S%iOÉK[U@&S{AE ɻI;7\N5Xfp۷eP}~Upbv.>t%>.}SGp]S츌ʁ*5Tl]ؑaƢin܎'Kpkع\zÀGA ڡ:F}\;pw(yJ}{),?D9V޹h,Ui.;Lf15I{{ܺ(_NaiU˲ŷlMvYן4a@^Sh~!gRߚXG)92P.5Pҧw+RAWL];/3̹*8Cd"jQ|4,7L+sY'suOx>M7>ӠXo Jd ʫ7ۭ:( 1x%,ebf~Hɴ&/_%Vwbov:ei֩P\}eMA-VO@tJw8vb !pw솨Zxϸjz$AA`RBžL8uq6VFYάF1zx?l(Q6 92Y$cC. E~m_,(dO+b͢tȓYOAAAO~>{uS~ v26# endstream endobj 295 0 obj <>stream +Ⱥރ։#eXcgdp/dn=dVS۠%Ϡ3ШȨbCOÀ@/OrF9)o(/cP,4{>-tRYSycAsǓwj݄8:M?Pv\^O_5?4yjڱeqF󅭝TxZycv46;H\޻l~E)؟:CG&IsG M:BR2'@5?ss(zPXy}{,[A5o3դڹϳ0{[wun}?M$>t/s97Eٕ* +ˮS~dsT^JJ#i=.iUs<~_:ilB8Ժl4H!vPS/[ٽ_iu#*-ߢR,f^x +Tӳ&A/$jXۓ=O͙r{+'PoMQ*P`__t&+TW%Ζ@/J'6hi](*'ӨB.*aMq]td6]<ݑbݟf6.u)ziCf30|:?ͯՍͼ܃YtUh|ߢP 05@3 pw7=8껔s/gsljc^"Al)VY{u6u=rYZa\ZfWZȊ{n! + Egx +ݾ +PWD7_Q5*d\Y"u2*~)ڻ|Oi0cHGIaI_f/1u6y2L| +P2Ԥ5;wovjӏBJ߆v5|N[\#gvHڧ}肎L2Mr{)UꙂLDݞ3'6y3&gAnH2nR=/$1I֮[GnZv|tbȯlֆ hzrؐI$-TvwQEwgT^[#MnLcD;+!'ggk[YTbWU/tZYA[B!rG! a&kʩ!qwGs/TT3dl\- +UZ_i-1gkd9M k+.vwWͥ7j>ۯs Y동S +~ˁCQc|ޢ>:.=ʵNV#'z$?Ƙ4oNc"Ͷ 7S3_Lz.;G `ׄ$*'9P<P4iP +6(jCGӑWXH'޹S0bXQZUEVG_ȲFpE9qK>?ΤLtS:/ZA`|L<,) >k;+4SI$}`@f^wQBj`ҝ=p[O٠pEq%RB? e ]ʙ&s쭐.pR6p,*!SNb@')mJ XQ/c`:KWxlr#ȤcU׷f{\/~ + +2Tch.p%nycfԌI%kwgo~g*5)wؕzѸrGL^p$5@.;l,nBA ijOͻCg{x K4Xp@ -:O;Ӡ(KP\.(& EP\G~vhYU&E3Sۓ/fai^Jh0~ g +gɯ׃_ۦ F}-R#8jPLS~]vXoH?w;L۹q3}2-OCـ|\903(e(]jιP}!EfuqTWmow*n۝=8!N7zg=Dژ汫Q K f%@ 5)P (Q $I/Cuo }燍 E]\Lyo\ t.WN; |vƽ̣oe0N\? %Ct6l7Y[/23^3G<^XIscWCVM^.Ym9(U!t,CQ$AiG N܅8'*z1ŸRرDvbyUNQRM|0{CuUhj *î*Ă@'(͂ɍG *|ܯ3z9v G7>S ig#p:ew橐d0_U$;SA⪻(4Gg?H@Cxn{%P2ʹE *ORCM:DF}.-8kpJpWug6/T3&xɑ;-.q" +n{wҶ͋x/JWڀrd2TB"~l:%6HhdtΙ+2ף=IwYgǐ3]4z+[i /- ùu[H5kC|y|gG=@Y_ls^]V4dC}UPZV-QUriY%ftm{"?9Eacf//%B]:@ٹHp9?C1=5g*M}qCYey<_oRMۤLj=ki3OMN 5mUB4~Oo)hL +qV(UE(z$P-fW< +[AgVzGeK[7z̢Ax<6ǢD,ZJ|\W`mA|q$SPM~zWB_sy\ Oy`)v X];6K1~A̽H$Эy|FgL<peyw%&J۶o^=,oo0>#re9@ٖL );GG=K nJ؟{e(VAy4 T_^k>sS}{ȲT:54%$ۉ|gT'K*/y]E]ldcǐ&Ȑ$'kx+fIPUN=:@hؒ}hV|.o]ܐưD rQ:/I<9~YUq\dVC^Ov PNM}hBQEa>O잛ˠb]_w=*]_%G)~!b|/벎Zrq#Wg*oN/fT_ԲB'Iؚʅ7WraIED`0 ++șKm2:rxrh+`}#g>Xuz.AԬY?r1k~8マ݊11o<yz7{u#NfËwi:a(`MM';Q:=*&<4`XWeqfI|x?W,FRq ckO2L拜dw|!W +Kʯ4Ϯ83l=$s'~o)٘KbxD)%5iveE0bMgkR1*VG~YGuۑ0H0#س]}ؒɌT}:x&՛Ҫ5i:<$v,XaM[@jNވƕM9Q;Jr3dK]8l2XPѷPgi$G+bK,u2o +{k*NaҊųvbdy(a֨iUa~;5p0qzBTp-Puah^Ax4kq~GMXC(]3wmx8HΧVvT*7b\}Q__ȰmaϫG5U(ot3Bzޛ=m_EIo '5c(b^Ԉ _H(6 5u*-O6mcFm4i=6Q$ɩ'd[Ͷu^/dDX8g~]v0A]ty^^^b (›9tD9>B&[r}k[qҸ3q?u7#!Aٱfj׉B' iERyӥnSF^hYPD2 +aΕ5/d^pFzmOHYvj&4E|k(6l8wh?&à<wU:袝/$X6'-Eγ9`y+,\Ћ+x`'[u-G[:nIPMOJ +~> 3 pVFQ}Cvgt|ܜ6"]otAtyv]97R5=\/db'GeZV5oxEsLAxR!M"e%(ZOn2 GԥrņVSK}}vZ&p}zkВ\Cg1:blly†tz^pmrJJh J:s%zw~L/ŕkbɴ/wqy-W,3AeA/?{z>=vwPܬLw'N jtS<"IOmrY2 +KN[ ?94RM璝 objZn|pK7k5rχ].OxQw籬h#tKz(X`K5PEorCaV,! P;POEgY(B%6*f =$iSP~޴Ay&ȢY5//iCqy3aD*N9PM +Tί̓9Or@`N^Wdo۽Uyl +F4B&7%ɂٜ|v% 7('P4-wA>b?-Ey.۷!E2UNvk'シm(ʍycʅ٤;9u2*.[-_p"զݜzLj`8@IX8]A:O?#J>:|5vڞ4,`?#C񤟤 ,lX=VtgޙYMѝ/S/^jMl/jML*9^^qq$']Lߘ22 pm- sqŠC|o`(ӇhsJة`ŧv)F#V FXZ{N%gR^wF41y䙫0t.aU%&xg74 $޿sDz.(UOqJPG> CgNiژlWBwږJy(nj +/jUO˼Ce<N_p[o1>4x΃y̨/ؽTUOPvX{${:߶^@ĉn-+ĵ TJvjq\jY3ʒ6VQ}AǦ&>m{„AI{t!OwOrLdo(1ᑥ/[EiL>ܽiw&i9Œn'xZ^qȭVocrZ ;5|3˹]eF(C\mЩlv5GqB< ǪhJJ1=oX@9,Lh7Rl6Ӓk Ło ea~kW{s-QvwVˬ&Z-٬7o{pEk d^R2[_Lr5HS&6u-nYg9AC "i:ij$)kAG'Zxotg:A7r[}т0.%R9E=psz:dFq&.Zh޹t]"_(<& +˶z&qtuuAL(?͛66{$(Ǩ?kx㒯ebV5C b9__ +8CKV?d4tl]IXsxU7cqr.Zl/#:dwWhS[dBEUadZUj]BSrG䔉d0 +IOjynƣ*щgv :ζeO_΀t&.Tgg ??m@2LE B$rxl-Ps^v`ArGh|:~).{{?u)T:D~X)5)Nqf{:` ar7厀j;izTy;Pm<drE7RD'D<.lqag9Wa5lF5]Œː*Lvנq<G)x#V'sYzzKyeԳkrTU5ٌ`!vM [@1Я Cw[[lũ`u~s᰿*z#NSoЋƄyi>ECnLֈs1`(s\~7 %лV~ԅ츽 f3ǃ.{ݢͫٯ4~Oe~."3fyc hCKiN-NU<UBPk SlxVȣo46E9ٶ/pVxw]sq]j(ڳ)vU/q#6Gf%Ò>%IJ:]2l;8عd;^|q#d\/%1DAMf,7ϼ>kc1޺S5jkUIZR3, vU}?A?'g) ˊ j~x=]EMo]HkM{yaНs)=`&U +l, .ߕѦ퓷w4˃ͮXwWSp}^<m#g|8_9 }{lLM+_v́oh5T kO[uR񀘧MenNBLd5SF˦KJ}rm=A-ީ]-q?"30";9݊)/NgD'P5G2PJcUI>k,սqno2VV$YP +^`6W·ʨ>LԻbpuV/;]Ђ)m~=1mCێ.ڌ%Dk,DR? x&/~MJ_KL+vkiW&nViφ0^{ˉҖ#n5PH=-űݑf84~zl^)Ӝs06l)ҖJܿPDZ}n1z?='EO}:^!-a|12% vw_= +uiLDq@ڢrjpA;4ԜBN#Z+h OP0.{}sVlC~~51w5|%cEʍ=/\UZ(LmRɧ.|9L9zmKajZsR\eZݭVz-gxAi]xIXczϷڲ_GNiIyIŒ`?J)N={|]vs͒# eN(NH}ٞ/x(龞5i3+N+DK/ΐs?]b_(bBQƪ_((0d0 i3\+L5a>ʺ[ߝ +_9ΏleEqgy5NYk,[zWryݶo9wngI|q#s,8wDu]=j m*UTtIpP i_Хb--t eWW=tz|HI+ ŮgmC|>m|9ߡuEeh֐\lzɜz%hy%4"Jk});VWrv kW󃚉k8?[ce_=w@άs4Mu7>keUC{4 C۵қo*^te]Z^qE;_PP _Q][eS#WծTqN'ᑣz,5\^6B 3.P\ΞVw幑3e[)᥵dKk\ ykgH:F*w٬.[˰_WØ{]lcv`>\hdv6\+7J:/nǙU<2z;ۯSR(c(T~8Oiz]1 +e+LJzm!*S pJ'V5:e"Juo$`"+ϵŔD3_ʜ傫ǵ72w^8ledeG?!1 e&RʿY6}s;- *J l6uщ'=_tW`v|hQ-tYPClqnZ^F0r ]Rz+FX X!Wݭ/tTAa`t`Lq +kv|jT{{t" IJFaՎWwmc\Giq_mY`~~ (V?/ 6nM>P& +&,3C5ky%9 bLzyj 'ufhv=~9әhC;/yI@Gբ Lyj"2jxi1t.j/1@)/jW֛zA\XVK`!mh؁vϹ]T6akO,}PF3(V w g"/-a A;b Uřޞ3h/"Xm\{w"`0Hmӏ}غ+s['k@0V]N+{wY ]JPn2A@^ e]bv̡w;yNS$f^$y0,nWg@ΆuҶ|_p/P>u & *a/[@Pȅ}̡P]P-@/EDsU}x/{zg@ <:܍}e3m0כߡYZZC@0~dU@0!d,L rL-YޔdaͰuK[YvSC-(ܴu6- ~ +^C; )}#0u 7҃>^(2բg^>.x Dt@'UOKA/ NstGiA{д{afUz zbP}TVm:`F}0VLUJJN]<|24:4s88ʇr ?t՚cfv jDXD}^šU̒= Aҷ)=Y(|fZ IIrȴN;>IֽyĚhn/0 +FI* +]:  +RʙϔVrҬ1E MrTe&+voH5y]'4]|mh窩xGƢbih~ ~h}/z7'gg6Z\JO;;dWH: 7 #K3J7鰷Z#)Rs29Ֆ[N:=fκ|6<|Ru>W.M\K/Lnӽ%@4eu {>= 0Qˡו'&ϋLZ_wAcQN²FW-B7lh5:N{G uJ`Y+h:F>h6L _e=PLʇAi DuVA39av7dms0̤ȳԛNqf*sq*o0NqzBC;ylw$w®C{S ԃB (^]xNv`+$/˓jR1<R&tSqFQhGF7B z̐{uI"#~48P9 RiѺ"Á1l^pruyn>R^k|3iveD1?|{\j:~З{>O&A;$jg!EW@1 [;p dzGgH0ŞzN/1ǽ<X3T2eV6ƠS:A9)Rc$Qe&}9~ IЗ)8[\eX:oOd8G.r3ʼgBZgp/ |*=Ӓ˗2q'fe{? 9PVpW⿎{Wﳤ' +-z. ;|z4b\!s]C)ڕ~rRs<=oZofKpFW&<>--eXI!ֽ4D.Hlj˴;|$Q_xuR1el[˕.zߦqB}bw#@IsXXր>τe-f.1mQWG% ˈJoiNQ/0gޑxј}lFöWjg|Ii=>(}S[SyHY{{URs2L.5UQ(C u1q46r7=wp^/upwv~ֹ]\$͸mv;6-?{Tezu_S֯)ȤfuU4۩E!Aƺ[xLeB2.aJ +qRw(E>HkԞa<!Azny6,3blϒrx60x=ԁk=CZ$͸qo?`TKg1~nWk]1Su~Y]eJ92XSiwmrznnPcAtqŮJG]1rCDSʞYEDNٖni=XN'7:DVEP,%ejVլ~x^ !9H5nr>4oE(Hɳ&V-v^[b dTfm]J ?V=zzbke?zY]^* 9k+OŻ5wa]Xb?h?Z0&LJ:)vw|Sd˙p9Z({ʒkZ$3juw- '?r Ekt$n qf@o@ 0ȓ2Zmf^"@OP"z}$ ) v]kDҌtTL eEy5x*d0H&ʛ?]1S+fW4kPxtKKPIC3TbyjPTZJ2H÷vT$@C lj_W碏35*TOU7(w2*@5+LiFi6@fz6U n{cIXJ9Єj +8ӊӢJs6A6oh% +1T;hJ + Gs;WK+@#& Ʒa緜 Cׅ +" }c@u c5ݙEe92:Խ s[W|-VP@yqzp\ k`B^Az]w1Tr aP|vx@S,usok%eGb]R\"[vܯRPfFtt]etD 2i 1 6TF_Ӱ##%+z }EdUV"ޓ+Ccyuz-溥wWS ! 3G|ؑg~2K8#o@w9}󹤟YqnyE6[q:ϡ8=]x_yA(|,SKygxt ns@6R^Jf:baܰD_; e^F߽roQLŀ.`kI{ˏ7ms dozWslåz]]a[Km3V_IJur9+,_i2QH BgДP^9Vm+߭$(VKlpN˭Mk+NFLd+cG{󾓐̝u}oN:П#q,.KmZr7nmPm{3QF=ȌuSfpBһpBbFYmK73`u<*Cxl]9I83>jbWs{GleK/ Ɩ.>DyBTFFAF5cƵYjg7Z,?&T2C"RT&3plWnl#Jy-JStX)TT@ԻVSa%c6[mDw1dɀpTs.L=rC]ku™z Awش58^lۗl7Sz^/q#EGbԴTYûw_}~ymSIgO-kEkz]Tϟ[dz:^&fM # _¤Nu\="?=^[ SI?r!\E|uܡd{ǒnuN~UcDzƎ_s1Zv8a,53 @+-cw7t c?+Wvu 3Y, Uq1b]Hl.^w^%W~<ɗ|V.ꥴ4d \ l̯8TvxF7QG'ڝ;2(^XNeXK?•`ٖnHv4;M +58 ԫL]pUo2-vYp6U AJ{+hAMAA^-9 VdP=\; wwO՛ +^|:M8wAd_5V,IM\>ɔ.^΍Z &[&sc)SY.+#R@Lg8ć`WͺI`, +VVjh)t=OFZ]$+ewz\3ϼ\!eoet}f 9iKE +U-i"{צDlBWXMh1vfHHRʻ`φ,G)68Z(͢S9WwUs-dH9:f>ɵ(vpF8ؠXQٝUQOL9w%&BP^կS 0UJ-ޯ &m}^" DJ³| }s) bQorwngD,Y/BY>d Pcf4ZrH*Qi؂ M1UYZ bFA5M#҈neωEt\-{45(t=2V|~7J^`)LӘ=_GS]"T@ L q_x]NwM(.Z-*%ר1|"O C1`תϲ*\W@@}"@]+۷U>@nE8wTn . pϋyD*iFk\U9>$?ldZ֡)PW3gI>y8<: [ FkK#c;9wNbk& `vgl2ٜ63./<@{i[^4?5 .nUɯ>]/45>3_^ :K +{rYNog4~M sNmu^r3v +DŃOq  DRO|f=I]Ni_np9zɷ.Nd%tիXZ̲7޶T?f} +H<||c~D`=I z4li)8RUY`~ͬgOzM6<ŏ|d3v[۽7}w7ljyZ_qj]|$3`^pNЃӀ#'LM@nG'].)3>;7wSa{Am7q)?wS%-;ySĆiutRز腊WPi󱟽M{F%3m\(f޹z'ɞ+{; ^& +7>5y䦎>? +Sznyvֆ\n +.zvέjE*B~FmVNO77G&^S$P в6T;^|I',nmayú5M-EǗQɚe,)7=`R )zؿ&2=ӏCo~BhϠ>,.M:_ѫB=EcN'U=kdieI{|콷/WĦ99g6Zԁn`ްӄL/?lĚ0ob 7{|Wd?T>:+:rt㼛 Wߞ`e fkZi֤;7#c^7zKP팴%-5wcsǥ9A d;;Xhk>ʕ?詭cC2&κW W3Ԭ&_uWF;]OqqC+0rjt?YC0[9~w箾Nf}C7]V&ϗwgsd-=[28b#O܄,Er_T]y^;Ì@8'qΩk6g| g]= A¥.$RH8ԳP/FEs2 ڎ{=m2[d;OT4lg`10ldz4aWTC*L(ڣsG R;wh@פg0J[5K'58IlA;2FaWn2dhC.&y4:Kd>KmTsڲW: -.׭ܭ|mZۗ,_Iɡ_s. +p Ucevc\8=1֬lۤz"[s +:kiRFܥ7>&᤯B9ɭ\玅OɦbgttEty[x;O:}[J|{,rޮn*rskpK+LFM{~Om**}l"Y[I`hym2"qpW:T{%v۟.K.I9qQڊJO{74gOWt}oVf5eL ctz2=^f#^e3r~hJ6޵sԻ6,7VA$E'SIsy}(+qt&ѭ`1zM,\Rb?; +קGUQɯsM]K7?"ltۡ/dIPkfĐ(ϪuO+YA_+B!kT~h5SZi>u*޵{ :d϶w 'WoV횏=}* 5 T\FmC>{_? εD#Zٵ[IQ֊hx[bJ^q ^z\f"jMu.ʼP1RY!5~`K5˟Ңc| Ò`AVGʥҧ'y{}Gzӭ~s4IvpbrFZOVv}z4]R%i<œN4g-~t]Q]k̋lEPDQATlPPX{]ߙOㅚ  0MWݩyгJ:>XUK嚝E+[*ݛUiPO:hdкUzvQ+{heA΢<>\Qi8>z Lxze{ɰz*kctLXQvVn%+oKrN})nBy|WM?ow'+)إ:ˈ!mUD [Dܥ$炼q~Cٸ傑^y66)hzVzS}(>@LS_ Fjw<]UX狚y .W3T_Q\W(w7o6</^jSl] @ 隸_q{l4{0?U u?T.}ݬ1[ą8/1 j,V1Gջkwl?p^uwy8HY0L<|~lxhu|<3c IE~NB~=fWΫTa?f,O{ GƩƞ=R["ߊ;"6irSj1~.adз +A2}9(Dؼ㋯WmPKAaS<L0=s#黢j"Y>aRjY!HjdTh'ՋHox)5(7}#D04R6(v^-RS8QcfgyRZc֡AZTAߒzCt`#D/HU"lғ*k8",VCĊj b@fBtN)cWV6>@m -PHrB@wuSd >2a0I92ؐr GP4}h$D? 7vK0F $H6Xi:z*%Ms0<߃Xs.@) +w+lI|<+$|h87 ឦ )ůn ceia #lpo +ܟ[Ci&-0h0t{]tNH|yEXʘF_!r b;vgy +k3wVe!ߔ>kp8̓+7]".q[ +`<.Z+0" =nФ Mn@ozL6wfMN<$| +yp߼e2 2G \~}F4wxH;H[ ;`kuޗY{M/VГo>a/mSLE׊/fLY_- ӃU<;ma=Q)wVwW'U^b JLW$UL_c= wJ~thy&ܣ>XAרg.|''JRH Xmۜ9 5\qFG|=ބ!Sn[xWnY\wzy|xh Ԁ(xk)- +.Qs1:_UN;TSޮޝdLէf,-" nSTP]7:?cZ~GW +_MM?E?C7ca@xOv=sג1،pl,rIT<8. X}" kx^Фm3@}KO{r)m^}hOG\9[nwgZKre&Mm|2۳a䑬;tD_W>>*:R!^ 3ћ}\mwۃ7Uk׈LW)/,4&ϯKƖ0ʹ5ůcbp̶Iܮ1{xR1{w0Ae@] @L r? +O0_ITs-[֍S2 }r괭xv<,gYy=,#ݚY`t_5{a_aB)\{g+aݯJ՗/~?@ +s# +&Nm㾻o+ז8Vacw[;>Z/zڊp'?ad5Ʃz=ϔ14ʧwNu?c/xq~O1?Vz;|YyC2H + ZlGHNusG/-&E@}sN$S[M[<\(偙ihz)S}w>)*h{V1U|]h $:ڝ9Ň.o[RFX`/R<<p߲RmE'Ay=uSMK9YΠ:b;͵66mUkֿ~^Q$;{ĘO!ϟ  UXgS0|&N-kA?1<ԩhh1KvʫEV߄R %@]97Uj=oqP#1epq }4;:_^)K([boKV>@y3|tO]j@}}]yQ~CDo'TsX.jta>gCbc70Μ54->̚(KC-5ۨf4!4vPq"WVyweNaJzӋqf|Vƴh/F!G({OX_w7 c$Dk61nӣT™1iw QTUӯ轮q#g|.OvvRzLjQ5|BUy|4>e_l~,.9uf2hļ5Rs,7)[\Z !jD&2J\نRŧRLϊZuSH)F|JE9mg=-v˧B.<|s2 7\F?Q h II`ˆ|K.(4Vb%(YDպXW|>|. 䧻Uu%҂RVaEv3Ow΀) `9U}R#x~ $ֈ<2DD "V +:Gj %QȪ/*)<4PZ{wȫUȠeJ>~|&O)@n3Cf|<%\3gPBVJ80{}6ǭLLOܞٿ(}u8~ +0ڱc]ٽ'ֶ/o)8@Z@P\&d\]` @ @/.pi%bԊ;6Oru|ח}ӄ o^X2%@Z,?s|H2m `dl"!Ϝ9K+]`oFT ffh5n2R?]OX<8Șn) ;eѨ0GB|g! U0q+ϳ)FGD^=zxS*3K]+78)=X +tTR[p4w4Yi__0F + %M/cB-?0Ye^ kֺ7 xo{{zՕJ5MkǍs 9Iϧ(և&i;N_g\9qM>0D 54) ?*\} &iK>8sG.ܖW:NI)g9Y80r u#6΃nYhJ/)Skiyg2Y:e掸Tg xϿkMSe'/ 뒻b\Zshn`cvKGVR%fW;ȱ||GN3?4 +w&Lh:ʤݐhU +m~h3KGsK,g@ +19X_>t>_>z.~lG)9wpMLtg=nZK 9l)?fDyO>MonҨ> +UF?D/xfj=u0zdEE S,Hql|ڍUi}(~Iogse-#S5бVMAKL)254,;(aPAO`K걻A!~5u^m5K l0!EZ'Y%Km=nO,{諗V&M1Ydp`aLl?x<*Dg,RթETW~QBC=;YЀIGn/6 A%W/wcV}ƬIMkl:(l>S|ݔW#Z "nڣMbmQi|mwت/L9>!G|2ݓ|Yٮv`/ݴ=ZYf۰`lbxy/}y +{.]6{eU&}7w-+o`٪γUKBkukWUɭ#k<y= V}S(4"yZA[J5_D}K/] +KSD̔|+֛jjM{Yˤ"oXZl7-\Rl߀N諃^ (q#jEIS&F$?㱨^S~ WqoqdS^JUT^7X+@3tyjIwչyۮs LGSˈPt㈾9Ŵ7iGA\b}4vU ?knbFY*>O{p[ {`t՛t[d0p#lj]?C[ ;\8S~nI'&it ŒQ~g߅ZTfZ s; +g[4j}!"\Mlؽhp2yp?rk^^瞽T\Ѷv`䨩Lǣm#'qT?\@B_u9bUUZޗJ[vۨ.Glѝ*Ajrou/`5@m5ZvV=Щ ieygEp,k+1eP_ԧvȗ@id*mxtt4r3q;rViө8 Ù(yYo:;=*E3SVwQ0ɾH%DHhϋ!cYh5i,-K+S~|wf\q(h^-Oɦ<3}&8*#nʳX*_XL:r?-]VضY&U|K>l)%F[6tw9OO6[# +]Raf7e#`:kOcSyȷNKn.wX+S[LuUS?yVwQCd37ɨ\q"ɅOmf1*WBm']/#WٍÈNf~>!R{#u)`*DOHwQĴ+XxUmlbvސ /`c :~?/6EKYaS1bjǬt܋Dr3d'}'cu&jZ̩=Z.paJȌ0Z @!@D|sEJ U؏4" + +"EX_[m8; ۧ2ZM/YsDQȚc?oTȨ“ CDD툨JXf[V2!%"roXk!X#GE.m~< "F8@fP`dOF/&VL'o3C!y +!d@]mx-pT ^K:n֪/64<۩ء/`U;{ywv:ܖO$lHgԃhO Oޗ iryBt;y'!*O I:y[Z?_:xS_D}@+ l܆ @Bk&~&rgА^r'M}1c'$ylq.MKd%CV?{KUg@WWͲ:$ ЉT58_id@lXbplE9ڛP잤$\28Zly6s8pgǦ:vX͸*UHrh͌ǫw۬Bl0cΜ#i/lV~^)z  HɹJ[`.kc鱓+~#(=<^LM*YV%ctfּoGkYqpp\9=$)I}1*(0PJؑ}!qoj֞NT0{Ҩ;TLgknCElTB5dʹuVUg\8PVn9$C|3gt,by5 HSQNjiD0c.3`N3} 4;ON޲mgS޳n :{ 6 em#Jo|.?C2aNy sQ#7țq+O =O|LUJ_qq֗__&ɲ[p0tm}E45vZF|72F4& {t d%}?q?mi~lp?wSBof_btEidǜ \/Ǻx^z{vsdvU}-[{Ӥ8~nMjڎ̰19G\WQWS}}]I1yWp:ߋ_:;1gA x8sŊn3G]i"k{ίĒŏ4]ئ6΅oDQjolS'{GՋ[!tt ]bWvw4` ud5j>RYz$w?&4wwޛkiH?|'}ušZt[&6Cl d<zɮX~ţ%GiՋ-p(+zwXXpN+~roUN(fH~Oc7[<\J]rE`דyF97!:ZDs8hͺң:؜ +g=Ѳ]6 "Fx l&վNE%4eeRS{`#׼2iEeRJaIp\?D0;~:<z7GMњMq6E{4_h&`Id[ +~'ʳ^ ۊY/|#rY=H|Uw**Dd~m^R7uZYgy8`yP*e|OE''Aj7*ԖPjBVM+˟I(dhk>vCSٯW o.zX&qm(bBg>T˺Rx64_Ut2;횒оDH$ڡ,<OmO5!vrq8_<^z&>'!?Ķ2NkqX[C6 j{X|cn^#.aT;,!P[ 37ɊPq$\96B$*Q/^6)ڤ j j,Bt>R/†A+3/Rg7绋_ߦp693GI=}_]V/҂JQ')՘ZMԥCVYVP/#̽UT>B3juقM}e*T T*#$?\Dpr !7wfx<~zA]WgsЙ`GzЖCf˹d7NOM!ġYdzV-e6BaUxWZaBw=j8\oR ];WqqFX5qqEz4%!l |_YekOM?崾4+f>5Śgڂ8* r+ʰ󪮽8}Isz,gDޔ-t.pv_xVsi&=oο?ۉbNd6Ђ)`}emW}`r{;uGe\x嬀r1 +5-t]r̤-^˰d#TvB1MŨ+.Uҩ¼[5vom3T&[w;N\J9s]GJD`}{ilNJkGGH*偐/su_>?җňɥ9?aΘ^썤ѾS,]SR4^d]w#j9CFI'y Ŵyzk<|׭}5խϱS +YY,[ΚK&]߾dZ.uj;2S4H[_[FK=䉗 Z#AD?B3B 3")_F%ՙ٤_Kby>lԺi1.YStH]Dh㑄(Uc Cr+ "Y` _H,TnMjy?f>ү$K3d뮘CHV bI2b!"!Y|K<@}7vh+ [ȟi#:䳿F|&3y&I)|ZDKK@B:[wND  +ѐ0pe+3c#ɇ昙v& +h&*CFcs` :ɖ>ExEskGmwSy\2~x/t@>4@yWHX^^F9Dio/R >\7_=kw}gh;Hc]רY#`\^v(l!7@ZY4 uhgǻO{:ڧ~<nzyFhT+w^;sK{S[Q>]rQThۅurӀ?t V!'Z7,Aה(*j+;|=AƧۇE7ngx\:k쭮9%On>ͯJ~K}g{QuEXw^c@` 7 {^ !!oFۭjIw<՛ޛXg]7P)ޏ<ú[%vfȽAw~=Ο_^H8̮' -,Z%7708<~zb~3Q +{^n._[s(/Z~2Gf]}ouwRsa⦗sGYt{m~7R)M7zӻp%^"r.sK|ekLVnWY/;Gh#Ey nT*+2)L`HߞDp$~،W=u+S^tsduTN^|T]5<\ozcn}fAL[֓ Fi_ӣ>( Bm?^ b_;ϩiN#7⽚eS;#7ag__^SJRJe^-Y_5w3G93̺t*Ykl;tPYO+, Rj꤉D#0v'Jr qW\YEwD@DQwA0GLD48l{7 E)[ +Vs +&2Xo݂ 4yj +W U0řt9"fbCUS@#7֣78[%l=.N>U䛻83YgàŐZׄjQi!hdޛ +c|ۧp6c[kQs.[~#V̶ZL8HٷKnftIńvݘ\b1je2P )'kW+t|]޲n_­y^(0\6sm=cZtsvܕӫ[]0ުiW}w-'gdI }=(??+PKz<*}ߖОPa-O}'"?fbyǜj }Q Y{a2Jv3#۳/V3ۘ Us*LO|Wg&-1&ek`qW,d)T*b`Yb${(放zMǏ{5Jv3L`*T~)I(*xRLcG'(ͦVƧ=xU9]}[^76&MV=RW$p1GoI3êbceDr;q~vV!1;# +:ȓ#u 4V|r +H\9>#N͙{lT~@c>0MEc'>49k4~vxAwr񈕙˼Ԥmcw'@U%V*ń䬞:/Vq8 ?,Q׿1~GN<^?Sԭ=Y}dJA|B bgB:}N},]Xͻ65>e,edE$I!667̗Q)ioWqO&qwÉOӁnךڟL)XbU1[n9vAgn'`/`3Nu7!wbkŻrI#69ϴ'Y n8 @) ('uXqdm0ѹ~R">s;4'&Ԇeh)pFnv{z!BPȩwRJwg&60sjc4h:z#>üdzWv̢WiM'Uh_ܹNǢNT0C Bү9*LmwduuFdx_ubzGC>f<<(NDԄ^]ǝZzwhW)ھdRle8_Du| Ȼ]\nښN* H&` p:iUj1'tޓQ ;H̖~Wq'uծ$k۷a0V}aPwZZ;I"7ˮ>{Sd[K뮏46?pl.6Okrq vl)ך|ToҡD7!zMH5fƍ[Ku+USq٪mՐvPՠ+Zsvוin+;" 5B N Y3U^MP^(SV?nJZԚI;v1P~]NPR&˳-(q>oy3Kô+XPbT%Tc1FN|R]ŭ)ޮ@eA`t~4X;/ + R^i>e\e]\^aE1悒ąy/+TT}9dKW~ JvVN`-OE6 4OI~nwhupzŠƦk窗;- APV(/  m_f^eK4pF9Xg?Hf7O꫌S +/Rl- +}ߡpDO6L^j}da)j vz/'An^\]O%t8!ѭ2X1ccDUZbA(@eFUY wg2/%Z|0"S=Uo{kznN)!_w=p}<%,S/b[Jߜ_ %gt6*wNRuK;%& 5f$\kd|$83&nj=Ne|DglzIT OOpӡ09n|b¤ѷ{8IA$mIruΟHX(1j}$(creʯ$Iv!d,ID*eU 3[+6Iܿ_) +*>,Hl*QAݠIz|E.<d_T&r!cQxeh1H$WЎO5?/_3I>KtabEKesy6p$Eh;y#.!yC/2޻]2wƦ˹zB`;[\F^#@l>6`q6M_ J]k8w%hvpWK%{t6Q6kɇO]}'ɥū[mxzCsGﲍTMD4om_{2c{gx_ϱhC'>R`wݦu_^j3O3ѳIxn5;+ogq5g4Ojy OR=Q}>^ܯ[>V~mA:uJ}n'w#87)nҜܥ|M|Ťڣӭj .@uʝ}A;.:PmB^+jAUmx7ckNV68G[s3@&ޤRyUm[w^gbv-GiW+ 4gn{C#ofB_rz8=n"p?q*{p]a +n~R.??GgSo"٦ye Wi9Aǩ9SClnžA;XUwL/5CqɟO|qOO>>S9uV-.NO8N8>|!pG/0-gA>-.8xx3Jm{UjUQp+- +`0w%{DhZOe{ygwEg 8UOϬٝmhYd>eo:lPW2\y:줣+ !2Fo{HxdRxj%ͅrv0=BGm +ǩm,^uKs;k@YȐ9tBeA_lu/?d^W;֪q&?Rs0Kk&"imf=1eő:D4'!X |x6l֪QUW3uWV[Ev@N \er^LYǤk=V'-zi?IUhikw`b_wEg6NE솓8/ZRIRmq}W=KcH~|YE|r1,'&Ut GN՟ seX[`z9 @0ys 0P3-t*L@$U$Ps%Pն'KֻNV_H šy'e5DsAW.ѴK5˹sԇ[cy,_H4 ]Td}KhJlUFHLqR>i +9r8gr6rmqY}Y~ @th}|v0⑽v3[$1/?kdY8֌,f.* p]U?:G|(}֩ IζU' +7CUvoZx#eZK~YUfsQW'1c1 ]B='?Zϣ8B3>|fdl2b{8Gٿ.x\ECP?ki:%=vwѡE:^~ԴIU,Dlz)LBPšZTn,Oϐ#s(q9FpLX[f3O 6r y{a? $ +!upl36~oG 2*yo~=-bwuU=ԕG4/R0%!|`hNg<=Főujf>BJ'!~ᩈWg9Q{=Dxb#o;Ѳ9is_B妃0t(c]Iʵ_aV)~t8,,ގ_yW|[*<I~Jxk:*9*7aâ7J|`1=8zf.k1m5R!y#Z[F-c#(1l\ +g]`zŠ>*^mX:dBADcOpxM`XwAs 2-dVI6ЁpgLcTq6<Z6uw{6'iT/Ukz1S8ٍh +2Z5f윌M|M䄟&'vU }*ȕGx0*F?l\WIKEcFCk/I?;dh{YNBȉxnC4ꎓu,(LUkq +τ!럼JXqY|:GփE +.?q/En";eGCk`wϘٯyxδL"aǩWDd2¬QƔ⓮ûs4U]C|u) +-񧻳Z8k =prM`;'y#gMxM3W&V5Rt,'* 0훥ߘ}\|\?Һl?*ڋ'Ju?gVZvtSܷOc"Rv]P[y,M +i|$9ӵa7?`@{d\&%-fX{kSQ')} + ܻܷ-~w; cUn-L-y :D$ 漭7QN]ÐuMٚZcq`U+8cV5mne:U: $]W5A\9蟲7Mk?z v'9 ~}ھjIQkJzƭ^/caVʨl5ҡret(RKiu+w”\Kae yҺ+X|\;IѲv㧁'k< @K#]Պe4DhmؿMLY)NT#pSͫ  ȝjC`uݬ?-DVhVQA®%N8f}c3o)=IqYJԀG:KYW8=L3akaRZʦмb3Y o`mp0$X${vn, <3I uEhBIw]3Hyo??n +ʭB5s|q}-F{ ϙ@Sc u +廔X|Pd|Qd[jOF(k*eO?[)~f}#nh^+Op DYO6Mٚtۇ2zwն]ڮ=O.Wף0KC򦶋OuM%$& y%ɐdIBao ZdTe(r)丶)}.52$aL3oY:0w)d߲@,Pљ%3MRag,Fx\ Ne/ ʐߥ$ }fNrߨk^;/^Cʫ/~SS~fa^׿`)JC̢Ų \2I/Y; e3Z2o#q%pW>ǧZuO{ylyx'F?䣷/i?_UY랤ZH'Wh"I+;@ P/vx~Bi_^O#W[a5??s3~r3K9u'nV.YO7U=Rɻq(&b N[y^- }:]Q*(צP?.ί|rv¬HrѦT{nvi=j_dmRYRXzrmc|)U,Jc70:ao)RbGDZC9`פf|Y څe4AU"l.cA8d]t3E^N(<@ˊ a=֪F;%4W4%&iΘ0-]q *ny~[>u\hD`/Q wy>[k7\ftq {V왗3X3ˎ _9+ͥYS㊌~1{&Wyvv7 X*ͣr e^rbp-VkAv~Fl ާlP\/_ݱVVWGSs]ejU4gmYs}:`;9J br~7 Oe~|0x{3,WE!ޙq;'zΖxaڧ:~LT'a6m#;130ڱs4ۢY0;DIxz={lm6={ں)m ̺u̎տh:9=Iս2!.kzO}ښZ؝[j}1U|1яhu.%ukCh=./eer`9=NNL+}D]|0134ɡ7R[^vm*PU/]efKf~1fR,䍿UMeI2iΓs!Zr9ȮH׆"[UAY"bOպ˹.ՊpInK9$*_fX~$EL|9VN^xoeS6En“]]c&bO"џ'q 8+kvD$Z1 Wpu.5rީ +(zv Ԣ EUBE'^g)/{ŏ/iʱʢeƗ9cs}Q(azV ȻSvsVtj=ILޤ@/i}]]*xlUZsÎ"ٜteͰϣ s]"eXlm ܙf L]W~lj_/ +`q?{ɆF\xbqǾ}MuK ֳ$LIc5d?PեXPOy"EV\'}k +al/㾼2el [fK94w=N`& a8{7Tmzַki酽ݻBp=~yE|ijE pfTV)?Lӏ;Tg0<(_d*.c_?\c≺v&p<鱠?pnE0Jc,,H6,6uÚ-Y3Ҏq_m/f4}O5Pa: #084/CKÑd"B^U{+h3~d?Z:)=xs#/~,y#hr®rԴcL =Y~tCpz$[lS%;CTDDX 68_Val +GZ*F-HFijlL*>MI@p[@|xRxSkv WX۞20-|K_D _?k?fύw)SIh*Z|=J9q vNNJ)ǁuȞۈQabޤT{[/ ?cLxVG޳37:0,eU3%HezeVZZ< =HȀ~?kqb?@f!TA{ -ųޠ~ 4u(5zs{8~P4n[jVZ*%L +#dF[*asOE%2S j Tޚnά+GWh|wәdTdX[~t`̤"hR]̟05b @ήSKi㥒([,u0_z >=nz}vcwiAި}t.|.m}D̵۳!nkHﷵF,t,57l}+=tLljvUd9i0T`/ݬwѫȬ!%]–ZE05)=fk\#tӫ3 +W35wk6'cBj v,3SKxz!rcesN{ڗ$mOVr5}[qdpZ4k~,j(rX*Ou ^Y^z#tm3)j!_睉CtRz\9sC6B4ug׫U}z?`FS ?ZsYLHm>5fUbnWmw<˵+O.6kݣ9?*Q^|w,q 揂hבPz&ȵ0#rشK<P?vDZd~+K/gf*͘󹄗+)Ju*C(r/.Nsql4Kű(9`b@ROk11T"!\.r"}G =^L7q/ÝVllxƮ{k.W蟸 i` }O_ԿCnƿG>%AX߁Jm,uƋVឣ*[KO匝$*cyK +l.ÿd\^IBshYE&}Q_ƺS3x;yFo%IE3=}l2NY !տ#W%tи8ÂC*[+M\\H5R}}xW/W^agFry'z$yF(YmX{,Lfq~3N\gS5]O>k3} Osz֭9zᵹI:ַ<'U{PH΢]ٶݩIb\|x} k Ӆ}̧@h)y{#eĸsE~ /r3NfYU:y,+)gqK,d}rM7ͱogg8y<^=0kﶁNmUvkĆ7W1 pd~O@]}nfRaX1J_T7m:g]q6oY|pGszQy㢈A=4/t7dԺl:DoECG\3\eҲLV/*ɧۢ*Լ$?%"G@g"FO--ײhbsx8~ywqMTVD! +4%gPaš,Jlsou՛߰79KHGypz+UAqs:8-'Ov)<ҳp,U5m[_B({˵Vz[Ypta1(B;gIz"ʹb Ӝ$7Igd̩t{- ;zз;5mdĘd@O^z4kiWcy"" +?^nfDQ@B"C}cufWp6pԨ8d]뭦5YR()#B̞E;1a=_h.Zۣ/nXi&Om۹.(r ^sas܂nN3 QiT\|+ /Dup- +nV)l55I)YwN?;>x'j|RZd?~*sgo3n|;en'#IJh1^'F13CiHYUbJuUޗzu,TF,8ħyD 0!]Cc9?S/Z_]>0 nI$'I^^2_^*].rV +ܷq:Z.J$bFKBܝ`py18fg}(~+*afNi2\63kxr={:ID"_\c^u {UvL/;#l -fnJ>6%t#"#9f]SQc|q)JPTFC@(w_LgtT0 {VBl0o8L9dt=I"S?[~Q8}Q9`}iCt16ϝxR*yнpCJU2L1^:,_BiAm6= +;qkdzV9wԩ@FVfы_)ĭBsا$vSelɩ5z ltM9˓r9"$P$#{T^O/}{=bݳ趨EEL] 'XzW@knSGSsQ z͊@AFt8Z!lĦp~UTƥ93YC+=15 +K!ȗv8e*yPW(KۂFoʤl:|ɗLv7 B渾ˣ=213l"1C*_a$ee9[J1x;w߁;hm0M=Q b>}n3|jbW'-g;x&3j2_#˥6IO]zzmNP3lj}$cwƣrGZ|[&COڇi&ܩg/_c\xbߔIE"%'5WzUG./v#E*?Y# Aۣ/^TD^rg}*/“# =2h7UmٻѲteteܲ[&eiՒEN(+55J/CI/^V:wZb'>׹j[?q֓-t)ϛ{uhT hEQ`bzxozЮ 50Sak4$e٣ݼ>ʆn9#v *Z0=`w47 zJܸsm,h$:szik4ԪKZkfqȱ:TP+r +pߚpY_VzlȎG qD6[[^om#9Gj,7[M| zDgF?U6\/`c३e==(ϐkEe@RXl$6o{_ V̰tto$` `y@תWC?\PUYE*b€b?Ih83. +Mv_Lf ꈇrƼ" gY{IPfWuTլoAн3z`pK'ЀFcgpQ:':;_h7HXį:Yq΋PV[N/)&O.h=Ȱk UjHf4Y<}ih X4ɱ#{ؕx+'x5{k,`Y;AZ5ȱ+[V J/g1?Y<0=;?D_d\Qi|-qNO߀u &?ۀ_3o +] | 䀃|tKV/*i+ ~Dx^` p-&{iyCxe:|u=r~x~(Ͼ:g/㤒rq 5tL/qpx7@|r9 XHY~=|pkJd8+e6K'k +u + +:`O˾Zԣ?}IzbH_opżaH9'7!lȘLCȶ] qHU~83ʊ%5y;Xɇ 8dR_.n+`U@%L.g,6,̫BGQDP)6b +DD8ğ\4.7ɱx71ԌsiId4nsJ޴dsv늛[ȴۥ?qQN9O9H>=ۭ_\X^sw<]{@fںwGwNmWfmX=\gv) مtgfhl;[&BbRF"5~4)mYҊ{ t[_<( vW7M;2?ո-ۥ.?#Lo=̣sWpw~\NP{{jzu[;lmndy_~F_tTIUKNI:7m .[[/hs!t쥡![^9)wh@o 6چP/4WĒ>O7'{_p^a\L==KѸW;N-}"U6~rҽ]59 /jW̫'zAVʽ١hctmj~y>TK?K^QnD> U,kj;]47%%, 7q8?I֜x!~y5~">~-G\uG.1 ?gҶAw*' X#5dm9cU"B2T6ϩ{#&aa 3I6叩Q3|tZzt:={ GѓT5~)/[E>}׻5q_~';ht+#np; c)5 ibQxP5@ys9+N6.^\~DtVq5 YE~mE ky'"7IA882:lftrW0M`Zl\:9/`o +ZO&d?Z:cslyKfK6hߗ#RV ݉w( _1wuydtzΖ|7-4ĵ|twPƺ @K}Ƚ:ײ9qlCB_gםM{PFd&:V"Aki1Jq͒m/߄s*mI.v;=3E+yi;Pn&ۯt=pVvLXuot$ |W*M_[g\3mmu#jf\Il̥ nhⶾAqʑӓKq=aߘI%m=Y>vM#W/OA m͑$c,5ITOw[VJJ*UInX7Y8̦cKGT{svA2n^[ɾ+S,8LRGnC񓊶Z:q:ύJڕlO2PVELO1e"?8¹[fJqyDpN9VqbYJg`bi(EWyИcTV[TIH}S_hG!T2ͬ>zۉ9,F.0:~j}3U^eeRGB˫@/ⴴĠQJl1Q'eP8ր묻 Q~Ps̋̋E ; @S`@ +; 3Q<p~k?6ӮR}2횢\amr晝K˅v|!ZV 8+۝-] +otJ0"F! v H#zL#^L#DW?]=#|μݘ#R5 ԮjJ8ddYKB sqCA-Ԋ?gnF;_@)=Lk{4C[rU?$X[{ wN 4abzx:Y}?h ^ClXPê/lRzE}V;)+z;fR^)9ҵ;^RQB6"v[@KqW;Gᗖ/y/9Py *d~Kr]nZ[n7miX`T/WOκM{B-SMaOKDn܎l>kw8CD+5N鴈_u^4(˒p T[(kWQ/~8`A>+0Zݨ* BO-&?U&(%-i[oLzT{Id/cGZU5Peb~JYywy {/lX.fG凞l}%#LI7QRc^.WUmx,,zfn5Yo +9粞Yf.w~j6%l3f 2L8ygna,kyi)19Obj},V rM7NaZXP[&i>= JH̴!:eUBXBFAԮ!j/FP~Z[輜#(Al"Y[>KNAMM:{[ϤGEm"ul\:(v4XE 2TPw. R#~1z8Gˀu@2A +Hi +X _EuOA9R_/uzdˣ`1AȖwqqnrHȑ6l !1څ^ +PE$΀l@g*p|hOJ@Q%g]߁" ߲-sV˽a!4ө.ZG2ڿ`Л. 0 SV7 `.M&EϓW`^âl|*+dTex U:ͷ,$:d5,u` l6jDCO xVY^-A!8H*>=*2\FY|m1>t_r& Om!EOX pvp^n +W~1C@_@|"a 2['W@X &} }ƳM[C{`8]femjjKa_6_~>z_myN _e· vw 1CHkd~8^(Kː'h;qF ߛJ7RBw˿'6Ah;kA_jz APv]/Vq8Eg-Jv|JvTW ַozF\>ѻxrU|bt? (z(kt}ZTwuC91nڥ$1+k؀|էJDy_|Z۩_8wrqFQeVns޲^\WTǺbݾwrޥ,Ft9hzz !|/<紥OKp߳oɿ|A5;o+bsl|':ڍ٩g 6\vjZ="][E-"\ޝ)x6xNv\MS$A"~a?P)~|L*8Ki;rVal5z;DiPuocI/΢y;#z~ꡛsM) + OJ,M4:25 {߈_A[۝d?t:ٮ >UGA/Φ:=GMi#d/ ^_wGǤGKߍY:; xg`X)0?Hf6ܴ?[=~%=Fzy dE.=k||M#xo:=&e Aۨ0VdgV]ꝃi9?H-ىF/"m\>$(x S+M3?ON~cdw%!x,oV$w7-0z}u! wF}T?ͫ:D9n5Z3[us=!n*E,oYe|nz#դi^n/VϖxL B4ʶV,E;Ȉ=ݝs;T{Kr^RɲǭwVT['?!UBxk"AMͮȽM=/*W_ru.?ZNinM h.݇DWKWڏFdunݶVrR9pR}jMH*>#1x_+DWMcO kszh~{R_kx8sc~řlƦ2ȵ3޶v^tOddbmgء*Ϊy..x|E |aTxQdu8_5K~ZB)wnr!Y]d-<%8ݪgx8&|f.z#j{e4#sgN,%۶E]XS3cvO/'t83n'##B^ըrG}Vcy P>2R3ʳd?/E( y\īڼTƧKDŽfhܨkR['-Ϧ Ջ"9c`V& βUXV1RFK܋\m@;!У\mN_ +Pgқ„Hӿ|ZKne MxcYkLfi9-XՋѾ*GW޼Uv@]3z! /'Z1mYz\_EaOti৙o]3brGT%_N&NY d7hEml{\b}b"J耓jP%W5I-HQAB]>2I9Rϊ~~+K=E)P~]j$cyooK'un3tjfTF"gƍlj8~bTK2zx8s[Jk[2[4X`$seZ֭|zN:8cYK n\H5V o$yiZV _|<6zGFT~c%[L c҃Ey/B +*2XT;VX@KW icl: [t^~La-#}Ȝ\4̩5XeQ`ɖ[JF=g,r1Љ=ܭT)TFeI셸si)W 4ot0 YWiY  SҷS0M!WW48S9g7TF3Y K=3xK%um幱FyLWː_AToe-s0X3K;x"˩/Az-Cxgdi-S3a8II]j.Q8ˀ=.~oSMۥ/:r['d̪=WNahPؑw%Ł\)k}#;AP򔁰RD 1KsCcqˀ8oO1 V; C-i | _|h=lo_7d!>6VU"|42= +6Q.&sTLBw*h*RST%eei%P+/@P P%XA9Hf y gJ%cR]'ũ$7v]때oIՓh R4 "T0k ޕ+`\& d2J -#'<`tV)_ٗy*Tkm<5ݐd4;fe PJuR'3t:ͫ +.sy]DZ+yƖ{q;8. ~=ri8Ã~Qe=B vOfԓ#?oGg~x aHʗ-@̡ <b;F .:) !.BG)|h<{o{M/ ?n;,/=h`?n߇}JS w% $a%XwX:ϏVVh _:m_J;XX$h8Ht,.ce ꠧs=_E+_|EFXv? Tyigv]1$t5=9b7󡊬aWU.~W(ſR;|:xs74eu7ո˖݋R8Wt{ǛV Y^9ݔ%d>/snzYЌӟ\&wǿcjiun"1nv)31NMwv Iב_n= ۝ f cl>WrP/Ygfn:t*Õ.O"Z~8͎2d[AJ#%bܐ p@|(=܁Jkcӛkk/{Ю;v`~r?zS ng9>̾g輪rOL/w n׺q 1nmڗgtmwF= wGM` +?Pݮ <{rjLp_^^r8q%O&,]LڙcAyE\ּ*mqR%hDkdg6gmեUV7?H?(W_ܖm(쪣oTZ;ب5~QB~]lH趻g=[ogvv.nMSiWƙ;}]^\ /MwT[5Ie0_0mxcJ?lf+yf)}W;G+UnfIUs+vjiR[`/CUcWΚyƉ5brS^ei5&aܨZ6;t-C.z[M̿8lE"{򯛡*#Ɲ bkfhG> +vVMb+]lG,詨oB4%jiZfAkլjtUm5VCCi}K*ira"Ża]L:аq4W2op=bY!܆7sʼp +PJh8)>*ҽ8@l؏~?=@Fu/h ,-m#TտXeRdKH\z3WB(>ZOvrʱe$UqZ +Z8K8UR8SxS[P S cw1L-ă_`XBE9r~婢99NSf^~P}V_p΀b`?HQ*KcPaKASѪrϙ>ݬ,.wm^V=O`(7si>JOGj%%9тp%4C})ElqVF^|>usEtY/:E)[Fx W3;K2>w +cWt ڗ>z*^7ReI*cZՁYdg(m/(:B鮿,-` RFF|2v>)ƅ#}FeplBY S~(K5Hk( + +_t?:ZUx&t)GN +=P=ݓRg \[.^rv2 +q3 &|5>C 3x>$ob:pjaelJJ4 +D#W2G)FR-3y,{YwJC,8SA+mŠҠ|ʖ,(*(6 Gv &ym(?. P>l|ɇ/* ̶Nzk2(T 86jL/If6Z%ntId^P!izxLMYUIeCף] ?""ii,`f XWrE'w\` 8H(a4HIoEs*BÐa|dP̨Rl&HE8pU endstream endobj 296 0 obj <>stream +t6)s@6B)o 01>a!4D L^~Xۣl47yRS1= { ;6W_'}wQ -/</[HT$}`={3VD_98'a'8VK:7x\l'7%'M` +QBeگW[4&?ad6?3񮯥\WqnQnrw˶uEK5_/=͟>amoWd~PYeF[~Я6&,ʢVr˺ոf+[o8+4sgtc[]̰o+p7NcAo)}u"֧ƢG(կ0qݲݪMUMeZkݓܜ5+{|Svnyy.d墯JKzg%cW7eX4s AnVK/5f#y;jT'zlqIM9E++>% nHlʍÙӹtM%43LzRZK[쉣:#|FՂ=NqZ?/qou]SՍ:^B.Zz֋Sn-o\sJBlR;cb#Gd'{] hAxALze7V L?p/؍ίV1ngIG9/I0sVMAۆyX o8N=o`4|fS%]4ћH]0rw.]{۷ASRz<$_<"rkjVTُOsO7:uau +vMV-lT ]3:[wN쓙%M0yz KUoNRNz8Fc;ru+7d :8IO"5wᓷԖw?>"O^kw8T:smMԫ9ؙ][di/dn57U*vwQyfyTMjr y 5*s>~kNWz&x rGs\h1s%)F I;CCvA/,KSvV)k-l6C޸e]iU=f"Gauq6 +VC{} = pӋ>Ӧ S ;ό'nU e//8ìex?sKU&>>IsAQY9hZ߳=Km V]sLfqZAd+߶󤬱EzKļ}'tP?7Ĕ ~zi qw`!vR㲽l/j萭xaѵלt)tyo~Zɤ07FAtnf`̢P{g7 X`䤈>udFwo~e`fr[k8˙ymNȹ"չ^Giݽ-vw;'nk[igl_ ;lةw͠i;'FiЇZ.by.Rw^3x8tkr{j?K^ 0G;W뽊ְ$l^椿~`ӵ +_zյUm@^`?bUOuʷ=*P +T?Qs +ezsˍ͟\KܰR)Mvv9XܭfTn=Z&RBx `gK#n?p7p9m*A\Ȓ}29\gUӭl>TʹUQ~N%\C%(ԇtf2hoM43;S=k,<3hYWάF(1Ǎ)" )+1=c5:qu~ qhcVVzf&/"w҃gK]QQyW.%țx/Dj:fZ_(rӘ744ڡݦ>z y}Hp+ p3ŽGk 징4`{=nQF)G?^QN=:mm7 5?ث"ܕ˾) +n[d]YwAJqeKɒ܆dF] i`i?d貍tnNdǼkA;ǹ[m>]7&S@DNNjӹqx6FSjOi[E.r\e}eՅ4gb\jp] 3b, 3 Ra0dzxʐaz6ro$N9]}vFil3FV/T*XZ.k! +u'Gr Y_"Wus;܎[;RdVص-R[61YQcF1@+xӓ>=t_dv1)ɤ}}z1JZ?7=W='܉~+>c-xbO?PBw7;(7 5DW*EAIچ+):G y|*=\S7 s\:̴Σ"HQ+3l%!UJ'=^uWtONɸ$f֎('篟 +0X< `z09)V`b̉[ؽs̓ũf08`bb|Qam v=56bɶO QvL0u둫Z zvdnLp/m{y^{8$HHZ9V?q | +&pܒ\./i5>mq; &_ B啁 +"8p.aW{WP{{6|8À1n:tꯞxFh ~6`^o +{g2=v /{:8NsbbGNfZoZ"=Zפ>Y&iWJ~WMopk2m富@< C^Ҩ PXE@qb(JڜŻ3@)D6tIGK1^7O|}|L} -~ݵ ٬*j+_'*P+ɯwo&@k5IdhOh tX:>/kR+-[=ɾ!O1Uks/gJmԷ)C@?mGvO 0umƕ,t0&S}S7v$0uSBߗ?i mS__%W#|ݶQ-Ūg;>BN\Z=F9=Gٻ{@;X~:km}o 3+WOʡ>wa_GeE*+mx,וXdoVua`YO'i 1(-?P4ٷ_?I!|w w6\=zzIJQ]ġOSm{iDNr YY'W@}X蟛fr1rwwy$c0vEۍ=T\⺛+3X:^״[j< u~<}"w&zU"e)p*ޓ2r6(ѣ #q~^ +c -{{^ \Wߗ̪5gu->>c{>^R ;nig,ѡ|ueÈf(*@uK}FNYWIx9:f׍`G3M$&Afy3sįc0:(7P#ߗGB)2{pvt)ي}L͜NvԐ݈ߗ_QCɮmig?w֋x?b|v]nk#`x-cu ?S*y߇/N f3 ao.fҭ4G|kq8r:ןL t2$؂Xł^MnpB9Ot!Wdpik'ߺ4~3'f[-WZ7]ac/xEa8XV<ґwskƵ_S)_gCX !u8}}3W+.~8mO6x3[Y̺LWzʬ99w3g3׎eюI?|/LGDCFmd#""TYcj,={1>pz]O|IUR4k8,asS3N`) ':V]˫W,PXPy fn{_߇KD~fJ4+Ԗ^ uqJJ"B^<7$x诘|S2alE>+vj.Lz֠I,%vxn=L8ÌP L+7KC + fh,:!ºtnߔ~~RX=<`ÇB)q^qKsQ*r>|{` D2mld̈́{FǘՑfk}Yo:jDI׊?ZϏ*$oGGrZ=4غʩ9ϫ|@u6B B9QrY< "ߢݓ&,fN,f)Zd8PIҶY~1{I#RrWɕ;-c*SIx jz{sqk2_6nmJiy)ۏ7Ђ8me"y0_R'$itCԆ6oyp*O[b؛|d~爟;$:&DGp4}.]iMbϕW.랏.=e﨑 }z;m;`Kz41UPnjr~$%Z"|'UHzdKt&[R)xM]< j* 8B;G@vt+.2t=fU՝8̘.C=6{ZoOzR.IYY՞j@%0ϖű/7|.Jt ѹUhTYsԻrhspbskn_Og~jio.ͷ5DkL:ӡz=p>eAԽJsR11_$h-IkP˃_ 4EsjӬF?կ۫~ `hhe.+,.tÄow|դi%S2"Ü:(dN\ kil]Uj{G#t*]iri\Z +ˢwZ IU +ǝXuEZ W5;^̅\63ROEvQ$Wl[gqhmG̀G:BYqtx!}5k׵D!oOa=VCa`B9y0!љz/g'z2Fa>eEϘ~ gPPGʢcl\EӖ)GvYĔqwVȉM2}@v5 {2 D+xfA W:C߽b0i^8ʭUg=_ jK*'pnři2Zpy,T e0K1j>RGP{IPHR\@-@ ګtScJ/*]-ZVE֎3$[.mJkj\|Ϗ#4 م-g=J1> ?%EL.K`b0dfb kM@?e '3h iV.-,{d4ҡҿlVl̑k53Mv` XW[3M)ZH +ؾy6=泃_/rq{l+]CF#uA3֪1u7٤E(mԥ0_nkt:~w\!{C$1W~roX SK2 xS}M3xVJ/(20Xh){N2Pb%+ +|"慾g -;v[ 8. z Fk"(qpt~]䀨x½7K}PQwO,7:Q+Vy YZLŢ0Zz;6wB{Zag$Wqqn`jU2 +?W5_?7+OBۮF׀qH50vDzAH `x6&?sL/-?%>()B|X۸4fq^(-:< 솷qZ~f]~i_@W]1V/d_kZWyG;R]aI/'U֥x "X9px͡O>O}mGj& |]3k_oWOϷW4Oaϡ]^Gzgy2?.6ݲmnBe@\KiƋ]V|O5VӺ.+J63s{NhCI>ˇKeaS~53f?C¥41lϟ77l$~f3(WGO$@xo1QKl\ss}5گa79ho|h3ꦻ^[.nY?g;;Mrg}lCw]UbH.9^?fthoqץz7?\;8E:? @X5x0x:xKѡk ?]d>b|>:Anʷ2 T:iKz"flƹUxU6=[}:Fj\ͦfЃ[KG{PuQ+ؤa':A'Vz-4cuo7φuh;5dj~ݡR7Ta>kCr;ai/@cHϾwP#sE5oKh+ S}E:KS^m5gV2S,0r.gB/O@xeoo'*L|.[d$DnC3H<غը;sHQoqַg!,Z}l96G2&- ;@2xݧ7ڪ?FB?X XI[5sl*98 +"3ߠ_P?/;]w;\fy9Zط%u5I[[%c^:.Yɍr }6"=WJFښwW?j:3*;,散 &aKkKE- EX Iſ$/5PS"&WMMndiߵB֚eNjšf.IVeU=%@*Wk\]4"ZKnObJz%u@҃Q'=n؀ _Om(.*.,[Wa˻jfX(P_\ P*{mo]\|=FڅTnlJ .芘#ZqiHPX~aò!rܰ}w05?Tq@䯞l&:+UokL LVg,E}OEGnD? I< +(_*s|j.pFpPuL#C%:Z6 t4):,}XF J;{1;d+wϹ?vtHw&d4>XH._ Ƃ:W.5eh2s6Uzli+rP(ȁ+}/\>,_8Y*K(r⍻7?Ӄx6p[ZF(:yI.a/qȭG}=v7%,GC+LnшK|V9=f 7iV[e"}!`7hG҇ ` +8"v4Ml%g#b, ءpQ!_ hSo;xZ#錱Գ墟.  ǾG6t;(gs4f[ ۝z +ѹSa:^ouFyD_%" :Gc]Dk(TBn.a3<䱐.;^7ff:3\~ŜbPLiV|Q9k_PQ({87.9xݹO \kˢ u"e Pa%ũ 4M瀖.{@;3t>'=@L;i hoA8J -$9@UЙkXƤ`YN4n'k1OI𐌻lQmx@_"h:j6UO鵢 [Oc`0 +=C +``N`lӀk ˿uAk@"΅{2?Vx &u G166N6o{9G0\iEza/Jn=7Dxpp \N-1P%y-?)_}GTyCK_)yfആ#Ɠ'w K@`&b0e?2] o0j@hs 绩@ϒވں<[<ϕc<\Ⱦ>ַ0 g:)6$= +_p">zz27+t H| AH;dbxңRS c dtV@\Q޵i^؂0Jg!=R`qE3G6+kL?_?73~mk}Ȝg{>~V}p{wwm7:^W2.[=`/H :~CZW''0 +W*eO#P)V0f̠w1?~1:g6>i1tP۹GRXoX\SO]ʂ134̾2E ބ&VCG. #HnfbE2~j^16;?ϴnߟ٧tޮ&ds3{įG>"W|AJ7o_\z9 3^W_Jenlf2fc}s-+ާӎzP.2cn;bs!W};jP"T{έԒny\S}Zo+'i6#,~Ԓ 2j7k^j?=Bdyϊ_v@߹~_@}1h{[26 Dz盷v7GF3N6֡i2yX2v;Q 89[ٶJ#8t ha&r/) &kW|v!smo}G5ciwl>Z.ӏ]WBaW \m:]+{JT>V;e;_<|(?pѡs"?$qF * V\xp_\g=AKcx֬[p^,%%mM]}-GZn.iM$拟y\b-$O R/(K> 4o<)ԜC⟜4Skb2RևGmv7U;-_auv)6Asg^<Ь..k >8GN+9wܲ/al)`k|E93LK]0Эh yزx#F̴,Wja1;4 2 +sȭhE~VoiJRn/*݌ Ko^lô1v}ιXvI[:탶+h + Iyo|A 7p^Ly[ɯy*.e.g|혩; ܱ.=G оepcXв>k\3j2+'K*Sx;V IqEӗ{t ?pg{zi}gξBmJp:VHu: N+):?J9궰IdY> ߛǩ,};k\B7݌zWK2erSu$m(6Ԟ{gY@lD?0?U)?UIBlXIʭS櫵Z20ha;qWlY]3N@#$ەUw6PΡ=i˗嫻E˷#7X4qJDCƝ-SOʐLj[lE#صƮO1>/_P2lx~3\[Χ8N;[O3?kS.iWw7-_~QVFUz$ʶ/Tȵh퓘1!?2\b Jj(.[EJ;f_!۔d6 k=n:}&3Ɣ!*ֹWO6>ԪQR<+b1qW%}zfKbgօI1 +.Y0Ey=͕e7eGg{gxӡ[̊ R-!(fnTf)벑p[+3 ]z^/_閚gs/_7q^9C*LGb񊭞''SSYza}SvD>ki'<1R1bH뤝!ح/܍qWzR}sp+bpdؐX渫34lvDyNGen#4 fz{L-r r}KvGZ >_s?H92|&S#/mus#L?HwPVg_LE銏 KaYVm:Z*](?/8!$͍|$A5xΡ Ɲ2/ܸPfK+Fmy2F[?h$ /gh #|98RdJ/O9e7u)*-_NWyEb&D>o lVv(_ӷ9Km率GyC8WdRN>11rظ1c!gMr.!Ҡ^o$i ml8iu}53 .3H}\>hJLR[I AR]/7PQ1~]T0ھ-=JXbNťzV"&V_-9O?Fy:Y ~`KM(k{)2h~<9x W u *־sFP,朳?s}gk5.颟X ua%~Dȓ8 ZҮRc(- Dƣ`uxm){ING<ޜ.5ȑD8?[Vhq4!XF>S7h*ZꀶXs@ӧXVЎƲqM@g(h-4 *zG$8scGU^z,r k=z% +QVk*6kЇgӧ Z,v<"Oim3}3ˡ%`P70 f#L0:&SMp.`t->lJ\J[)? {߄uVjtx/mlWB+- +-6s}S/+p8c雀Keɫ{S%p5ğfk`/2.^Lv mgHދ. ? ^W렴Jլ\K >Gg3u Xjli҇?[)eY"?3Ŭ6LMЧX3ۧ Ej9vG0 ÓYxKY +/ D|K}=], ~@b % qv$n H$x@$^Ju*]4x3##Aw}[)*'«D'6qH̷I?/@>@A( *J~s\Nq< (n3ESRK2^+Πb "$jB@~@''%r߫y$' ކD h ë+^H<.N9 1Эt;e +􀧁^B}m(tDJ=B$F;}py/NJҀ_t7x_ F_mo j fW  Gh`dXLĿ*ljb mb]MJzd,dKa6o5Lj{v UWcب:a[gee Nb~$ٰ M֝Ǚ&sjx7!Ɉ=t}J[\~)$:T$9歹}*2#Og[h 8Tk]'k**I@30YBCk*rw7써kd.\+9ШFL)gfgGtޖn|a +zy ?_Aͦ&'LcO> uBKLBgmVn=gIg+v mvuV!6ƗA??j8]X2%F1 `rHf̭w9Qm t¼ާܔTzs+8X[ğkcaD{gs)NEyEsD17̇!X :t6_4~^jwcC,fl; R޼VcC5CshIOJZ,΃K{u5:juldm̈́aT8gFwvcw|ksrkWlc +S qk Y\֟ڶn6ʴo5h>K_:3ur eZeZW%+'&]|i̝Sh$ zF-nDͨfPz5{A}3GխwKPCzXɪ, +%S|y]n7vnTڌqZ>s*}:U0P~ o5.]$o3ZOem xڰ΂udVy{Z!E9`jҮڋJy #T:k] "`x\?'O{h:YyhksWj2rkUƬ߻klf7sĿuaVƕFzcBR Iy +֊ʓ  j'<ʰaVKh5b^Q[KUh}fz!,Lj` +DVyqy {P4أu{ q-k0 E nUSnB7+?ϛ@SM0hK4ܪg'zEXBqߟa$mg}ᆭ+&,陭_g$V31\ݚd,ftR[ʪ9h$8`ݝJ./zjY݆,{BzMrǬxUq cO6 U ۓTzl=5W|VPy>|FʩQsy;UErz$$}eE<ۦ^ҥ)qL[j< sm+_smi]Nm^t-MQVREfmB`|ֺ%$xAװc"uDb<ӷcAUfy=R7%aU^|YrH!p|6c1=r Fw.d&?TinQ5QzIAnDfg RV_%cEƵ<Ƶ|[9oγ(8{ +*I۪=ucpp|]3J鹴q7M0i uE(p)tX֣)<85Lx6 wLÙW| z#]_PiYK*!-{ +66ܥ2[n:#-bR$[yy3H:_"rS>t[!wQ9+֑#\p[@oBÁRr#Le*` fBOB,=ڡWƘݾQX $[?dܠ,S?E'묋w~]s[(70jѡrmCIjǧ>Q>e3w~vƛql,fe'>^>̡."4Y;Yltr-f$ni~r4 m_xkR[]n;!VLd_&׺zVY\Wӟt3ڄ⽌ =Pٝ*[ksQYg:|m'ձ Q:y6C4n]Dio3S;j3}k.^|sWNZ6n[,jtX^7wQ^OBw)A:yui=n +65T.l/ȭ4kЬҩzxЯ,Iŧ2=S(U O "SNgQE2ֿ\*2:BtsownMhm{]BqY՟s^uuEvUמ,uLvUuˏ֭SEbУZplvQy­_ P_ϼKSiGss!sp/#"fv]=3f#'0'?p,$߷TxLnݴS+,_?f&+yhsEQ|oe dmٵסgv>upu%x9arTdo36Ȕf?7fֶVJAdAWWvW!w|٦T Ğ:ʹY*J)|F>WYLnVCq?[ԇ=|Ls"%c'zzi&uE8:KG4qUnJ Өoٕ{e,J*IJu"f^\ﲀOZ9;@8WU9m 2Y j} ܹUM3BȗF+6;m{jyHҖ %B'>WϰK+R'm!f0_&Botm ϖq+&^h4#Qx4׃)+OF?%JQFL%$:.E5 XZx+\~6p>:HN $91;d-,!?@Ԇ>U>PCV8u +%0鎍թ8\7;EX1Os1t]$Iۀt^l5!2Z%7>y%h~xh"|q|e^o{R ۀ2s"iaQϢOߛ*mm5]MAQ` ƉY5عT *}6(wm؎V6p2Iǭs(y;W՚)#){Z w)n_ͿӐ{2$U1~2H;xLwTZ}j}t.$3␘&k^/ +sP*T/Gh\yE +c+2_m@.9j&s%Pr46ʷ;}^Ի!Tz T3d)$wub.'|U:"vq_`e{xF􃠵lMFE*"`(zE8v0 .=G1;㖹AsѤ̙פxmG-R΍D1 B `;0.ѣuڅbvB@%7I{c +@MX5'}Nf}p<~Z6,ہ<)A+;měݓX /~'Va2)͡h,TDkE."*6kzF'dN +\Ci 'vFQR%̬g6ʄz*ulw-O:(ywxRU:`h8܅2 lL2f4.d%5Vn +t{" },Wb#Xxh=VYVէ$,Γ&eZL䏭:Vo:{&K3>&=aȏ/k) ,HW̮pcɥcna, &2nemBpgN,u"|;])T;ZWU +M''7 `|T2j!MR$K\&X +ڗf. K֗`7@<~m/{*(ގpJ$ñ^M?yށS9IZ?9; * B C;F +k 7R%lb9< , S%{b3qX>q7~x@\"L&LWJTƥ9*t(L88r^ܻ/Q`@<5ICBʘd$r뀼.QP,R +: (lP۟yq\@n@Nsh"ltGj7 + ,:lRE01[gdаaT ++vx PЀPj]M3&>meBjKb +U+k@k; p^hDy "eN]<ɲ6V:&tS\Kи IFX\ǐmUT@[fSrы`:`` XްE<0O%-ղ?Ti:8M2QhkQ^$m!I皅ńQS_E̵'VoFDBp?\gΆ  x&bcppp \N.(QNI2u| j]Mrr)%ULudQ-fa%\cj7D6ⷤ@/EWzK-oZn|m4fI, {Ի?uXu]{fBT|&x,-!bnٿܶ3rk-`0f|0-xk`2pLjd $d 2|msXQ,o@5,L>\ӫhz(3[n>|;>K'0zXWL~q&2bi:7ٍӻ5qt٩,:9L-֧~>Jtj}{6ehSXb]daRkŅu|aiVdd&WILD=:j)Cge4O,]QݮHprmgloa|$ǣUfhlN}&OƻF%66߷Զ;~W񺮹1I-/5TsΓdJ V.ۻ~>JV@ W Ty|׃T\C,~;VLc#{5n.F@L!$d/s85TWOľukOF:U袣sC6 +=|7i*զѷmFYA Gz0SYF8vIߘ8Ɗh|ϑ9Y>> ++< \A?u?4C4#towԟ ^ 6rJR VU_*-x+Jz\HFpl:Ync:ov!*RcZFn({FUUQVTέy? *</*Q"wV~@E TO6Z#"]禥~:鹨=qzuҏ3SlO{V.$HAs$!bō`]\EK[TK8 6ucy%k߽[OMX #}[rjϭ=n|[c}#Ƕ%$2&!&sRalAбrټ ͸Ͽ(Jv];J]3}mu3D#ᨰNf m~ _,omnQw\~, ڮYK3}="z =:XV_YO*79-oD[0 Nf/WʩXs1?fX2.^2t9c%`5cbBԞA5AV|9m j(f_ +}?y2?;!jqI`Gp5j03[ +eVe_xEmDzXj=@<_OwQ+/!/[N;]00pRUپ'eSo|)J9'6}aPR\uBk7Je - q:[˓7bdQT˱Lm, 2YY9~ 7`Do<֢hѬY?NN\T7r|ojԩ2EB>?$~J_w0. +{H\+M~ KUd7-ꀬŇMD0 +,~9dH1lv;y66'W"KbOA{R*5︤b'.Y1_K(6FSЀRrXꚾ koٻm@ +B| +P컎,)akXK3Uk3R9L!r/u?)t2h\MÓCj+wꤏYL43Lg|L7^RLƧ `$ щxؙZk(U<2amc Z+=U_0(( W_f_p>&ׁ6ng/- p6u9p +};zNTEk۳4Z\D%M<|lTN5 O%%%m9'UbEՒ48I_mě]lF# ,CDVցH gOG@w UP_P +|j3̫㠈x*CﷲImbHN +IjH_:/t~ӳib,mrat\v@vrHa +c Ҡ_Rz7nz>\ -L<_?<9ihMoHHqwմe6|v&6q?F[+Cj8붥pS՝ TJ@yEmhq$ePa?,q' II3m˭_o+/!MRmknK/`70>0.90&Y\750'FFH2bXmX6$Y>RwoCyx\ylcyt(UޮY-#t%~CT2==xu$x7.ք= *cJ7hs[֝$3;XOz[zP=eVjgm"GMtkȸ M@1nڌP[~{:'s& ѱMGkyEq{}t1j,7R΄uăKUec2)1d'++x2:KaTilgfz.5Ν(ؤdթ&ф&1ņo@< +ΡΛeo2%$H1`ܪxΡT=\^ʾwY!9+UF(F|3qu pmV6&6%e&ę&xm$ojϹS]tG; gA}it;Č0Z3Qw~SJ֟u޷gt\8NsU]}uCy!** ?W˗Zi-4ueX KpIi~Jٔƈi"5jN4<w%ʌol10b*xk +ZCը٤ꤣԌ)kHǑg^b2 ⚴ݚRh.%<Cz_bh'U+lfs]tR,U,]̸$[~q ;X޵PtVR\]xTJz^ԋZ8 CBr/Ñv^>7YodgDZ] }ݪGQ y +d(<(:*vpscsxZ8*R\BPMfk3+ U#3,BS-F|qڹ=`n?Jq)/D'8Ka4*ynjnV||5R]ݖ:9y1|>NL\aWT-;dӸ̉n>{p ӽ%7H}o)pJh7 4p)@9(Hf䏞Rt@(8<ڌm^68:{64eq_rbB4'÷o5 N-v+Z{ CM"ɹt΀xퟀx"a$# zdc+@"' [@[k{*˙M$\(|wM ɹ3s?To'u)!:5vkK,08rnTd{s}CI{'nglsDgf-arjٷ¢o(2yQ>p~i/6w&ޛ>5 b_kxY{j6uG8(+(&:ԲԪJ>z-}՛ZH4I^DpfBAq6lQZ)ި%Fv!ylnK'l/Vt0PCROY0obaxM rߦvnDF +Ei|sϞ~%ј|b%Cjt 0=;ջ菉ʆy/HRSk(`y5 ؆Ypm~4fzal16q*K[۷ÚY\ 8:LQNI?IhjoYNPCD!dM[ fKiM2$/ XSaܵ.<'|V\* _ԥ],K$gutLx +cg)i _zrCO +YHi(O֑onsDb%"$ 2nw} 7u(B'f|)toв9+7 +e3L%_"8] ѓN58|݆bǟOmuڭQm;ϫ_F -y;}@n@ FHg}QRYT8(ɳI64c!Pra X˸_u_njۏmT? R偤$A|WTUzĆ[-a-6 ~= 9؟险=m|}vh%W sPԬ6IY"V䏗D~J/D̡)\l/?ؐ^T7~ٙx}dګ2گC14sQ柚[}t@/މSjj"R2wcO;לosSq9Su"q`U-Ϙ֭ҟ}|>΃iTGdFVZ +_r4TkÛân&:eSyOatkyml0vb79\ ^v7F4{ߐ-xO.e띷stMk;k%$*5o-Um4*UW/Pw8}?57DUL@31Hu[GυS:W%hjv?U7$0ֹ4[Ѽ8 ur1$SoחL橯V bk/6C`<KWlP鶉9>W^C:A] ffKNTbWOj_;3Uvb8zRUoP%Ssg})HZկcz4045k5rb +NY+8D 0.UnaQlDۂ;V}Ο&{Ȍu6Es‘z˗5l 2quOݪkO'k?T)U~kdvBH/[-GSɡSLsjB),e=ǩgg&5H~9/v=yTIw|6Id1k'~K4sܝtq P a xDL%P6k[b DpG-N:ŪQzm}ݘ= +LdgARIkIi'ŔZF2grP3Pּ +ϱ!Ƴ# +1V?i{.U45V;u2Vw^PWPe2R54XĮ۹#"-꯬ WIjj-#Zw[-= pE=:G5[@&RLvvgG. xjBxj\$"8)*e^A?mYh2u^Y-~͗XsPeMsc1`X9)7+jBX0*.RYvr岕YKwG-6͹7 +>j A\^R.oS'^wߚb\,Y%h9dAN@Gڶi:_X|"i]6:E8e)}S/"ԓUeˈM#3-C$ ba&taU~V5Mes'MIBN&4w{o) v;(#}avB&xiֲiyHrBӆ:Rݚ +y-ߞ>EYL.QŌأѣ*1GQHnF1YOSbo7-w[ W]9zz8C,@͑D r( ӎV5~>!VlX]ޢ~o5XsQvƦc.ZEYmKqGػZx;΃XH9`T @F Y"˸>NV!ڭ 8E ˾; +C[8%;3f/{&bDȰBdqq#aWǙ`S#jvԈ321'I0`[0K7S3apKh4@ޗYR@b1Ũe.Dlż7K&&!X=m ת1&$ȶ,Bs+?. `]`џXX?>؀ $Liߡ'1*TigxQ7- wq~dم7h9c6`g&S% p 40'T:8^ɼ `:l1ÎJ&auz4c[8G7J.iVL.RqoQZ|Rۇ~=s5"<ΎNIC6A|ٳAc v>$ƆI[h'48֤fc4WvX-& gEKj\?4| vUhek]'_FR5R)9|*diW4){3d?l)$}zlyx(nG ʕDanUؽ,XRsͱ[|#3q&"/\y\e+qi1rš*Omn7~.Y ZNŸ2mXtnCP95OSc2%9YY.an}cDw9rֻv˞v_n0?:䉄Xuk{6>@z|ֆB=+UD4, ¢P +kjm7-Nnwap(ѱsvJ&֔Ҫou0IRrHK ]{b;<^?> +[;ʢhܵt\B|4/1E몒N+N1j6hRtI5V3j|oMPA_c_vfr Bw\ XSa(Zm$!Bi1^EzcMr%s}^jFƀb0ԓx1\JVjjvU[舍EYeIOquDwPw~0i [|x eZ5@K 6 #/2lZFs* YTM?NMl䃇[p2.*YVŸo4AW|%7*>r*=H~rOǘEt$31ֻV*8Rٞ+;ܥ'δ+J 9Oׂ7ȚW9j]][)/s1fdEbb|Ye&mdR=~Km~쒶 +aU]~EvKvRpj3ń6>e,Ѣņ +e=މlR'fd^2xeG m7>Oq rf4U*M$v'W\m6P6{Y\r)sq$GEi0KQ l{G\뱣}`^f a0Y302 v2iCxϩMV;Pdr'ՃǒLE;z\!;aDőmwϱ^ܽEWrE>XRYga|WǂS7C65/vhӳxiQǤM-UN>RdDrΔdQwAߒBͲ&j-ۍ^jV 4E@7 7 N/K *oCnf׏%0"zZ`=p`& b0d[?Cl֌]lD GT}Ty \ل'iѕX?I6Px4lQslygLI BÁ\<NSN}r_8)،qduB>ϰޛ ŚkMވwbp۫!6ryj5X5P-Z=~\c +v!O! 4 +Ok^3o+˱ݔTC>63#k`5Vl4!.nll n&dn 95' @L- 6#M=yLbbv17DY"G},kGT s~|y|doz…SN֓]`q!/J0g$DkqZ8 G3e@Y6 y)dϋ2!a|O%H; Q~r)&sbhY2-9 [ͭ9T\~I'G@ w@o@OQY4یCiAC-4&)jX +M&(|R\Ћ a7ދOX"]!j} V(*U*Hߊ`.@B7t)`*3`29!o9wŽ(y!8r be`|esҿɡNEn%Wyg$tU#-p, ]x;V<<,:%Kh-qovJ\xǩPpZm1QO$+D&d WE o޶-eCWhof ~oAUvAlmmfZ ~eNEpfo|0T=9mC'PJ64iuw$ ڞg.@*ށC:4>նGI[)}RLtJX6iBMg3ǐ{\У4)쩥Vnq=A"S&- p4˧$WyZ/v<>& R甙M'.37a#"4|o>*E`KO$FzzoE8ZD/UܝZҙ*xJ3)jSc\pwp|tk,?!<]zӍɣ"̮Ҧ >Su.WuGF7xzW'<لVp>Te4D{nȘ(k/xJ9 q(|뇠 w6=ig: ;H맛VSlnVvŸ>UDZNs2n>9c8es\0@sȲ] >-]cg{ON{.&`E4 V{{Qzmp=Dsە{M{g=JkuhzotW_wqQ_wq@x"@8f@>@~:9uS_n8nvt6cu 58CXi ;]҄%4#Oć4#oN|Hf& gC7-0!͟^~407sy<#oN߷W'算Oߛ-c<#oN$g?d&gsܖߗ_N3x[ =p{R@,P5-6?+E}Ӭ ezNOҌ+%$oPA!)>~53gxT y|^w/Ϊᯏ mFFgK\TD&Qem.cw#3MifX}c _嘆3rX&.(Zrd:ǝ;09D>LFt(IBiV?jצGviu'ox>]a#xoBU~譱%~547gϼUgelm^.;KǴ.ޝW*ѱt&80N~%-?ʨvxϿY6rOOo7EN_7 P̦bOR/5BN҅#Mft{O5Vi߂D,;۫cCw* /٨Y7t.nco^,^uvUe,)4g\[ }*zվ +L+Y3)ai7FWm6z-]k㥅بPku?BGf&`i}C\?w!ˬއY+mU=˟'0${dlF~--PkFׅKU{ ݫ8(i[S"\L{@ mۺǗ`S-N36]9;[rH-^a|VS&YJ {WC xj'8Cn:lκp^v8kqS2da1Fr)5+R;3Ϡ>$`AfpLn+62{gnG'OsL`ucmtGt bz.Ǩ_O/Ae,UؖB s(o[qZft}&N$v&]Y޺wC 3Gڐֵvck\Zʤ6r+ \B$ _`2mQ*m9[=֋kz/Ok񳽭ꦒrۗѡDQ@OH R>eVѵgo) ZŊPl^JpDɤ\[viff%ϋ#,r5q4o^Nr6Iw1w7W7~m;du,ɐ* W6Υ"wXW +n{(]+yCuC4BJ"o1I?ꨴ9靗6Ӹ-tj&mw\,dfntR b ׳ X3ݧdxC!G?@34o?'5?ޖg͉֖ߜ_s-&7'>oM/o /d&sK[L4el29m(ֺu2%g?mV YZoa״O6iFpo^I5>l_h{#*G!@uQrg=X˸QavRwf n:#DےkiJǸ{};P`?3gzL510qo%W'wS{#Sq '78qdye0}<5Wrm;xRf?f Z40z,z0ɽ]d.?oD^ 3H49UX>vc^Y|Xz됡W#S_|ޤǩ˝'q q~ ]f!rۃk1_[zjB^һ-QgS^:~vܶt.uzufnگtJVViMr+u_W@a_$$ dum[3cgCYg&mܹq"7҂ ɱWQ<*үLqD^E>mDoy~ygg5XZ.D?IW4֎u j؜(5,ME +!?B bjf ׇ[J.vMWѮR7%mKMbFJ_xBg1-l!;RA} *IwoVQmCx9oݠ+_inur9$[3E2{mMdOֻ~EWpA9m_Y../x˕Xi%g-s<}c,+EBLw2!{P|=ژ{4=^72{M;6A+QQ*깠\qP{u|hϯ$.u8tM}hq{P:clr^J|)5^d?H[ZB #GJPnrN\j&/N+mWD) (U\%hlaW}A׬/Wrۦop%;XʚxwrD_o:INrt/VU^wdQpۏ~%?̂xyLv!<PW6"u[#=Vg좯$nj3#Vx;dYH*+Ox4xrm%Ӧ>.w&M%-kԙX,dPo.L|!CR +].`d [\-{@'3d־V9erp- p\sla gNAnfp;2Z-ଛǫ1~BLf3 !HSsHWPy5L8;jlņiZ`;|pKg9I8?y9Npy4/Y +ISm5/Mlh;mUem_a-}"4bC# s}>5V7W^ɘLjfԍyKOj{'x?&xp JZtʫ6_K /З/ h#އ +5IGnO'}!s~:3kyo} v}e"_@K`DToT4!+ єL|{p;Mnuǣ,I< o-kS!|=K\åChʤi=f_WtL+GxCe/L wW!^>/iۼN-JގPoPR/ A8&aZܳ})_MUkf N*:6Kw /sf Wۊ;8Y50Jf}ТJͅD8\ңC¶}_֮~Y.qk0MEVV<~I y[oP:~Uv=]>'g[gј&yk1y:g:ssNOٻUbo)ѽ-液G|BEm!K]!(t;pJL;KD$/tRn>sUmwL9vd*O[rb Y5#qٓyDiNL s<6?\z.INX?$]ӨKV!,Mx?:f$9>YN͞1ƃZ + M/  Zʌn͟C0 ZM)j<Ҡ"0k)J{uUQZcѭ1!yg`=6gzؘFЦiO539Z/oJi7tP6@ Or]øi z k}('KhSȸj= +]@)ӤJS6w$J.Dž?Pېu?17A ܛќ~^36loD"1P;i0r;d'"3~6r9R(ϥ + lC~5JcJ̝Sy~|-ȷ%_\ >#g;B:ReF.]ӳ>L(ˁq:r\GoK ~R5ghg"Bw|qTă$!N/}PWwɎ]Z*n4yTQJ'' M[[j+RrenitO_jTBc8]"߈Œ񹊻1dtVOuM NY9gOr| +Mtzۜy*1 +њY5KE@K%2';QU oCt\b__kt Y8ۆ;J#s-K>&uiʴ -fmLQ5RCOφ|1lj b;74Ɲ&kċī{l\n*ZybȩXz\s~ܧO*\7c6+85ǟg0bBy|1boʼnXN{ +GzN'yM1o*0ʓB]îL?%a_ń!AW+"(^{>YYYW>r> js%U0M5kp_$LD{{iٻߒ?Ag3X-k;MI2K;R+aOԣst݁qΒ3wwwVoY[ytq_h%en3PH.۰Pޔ>wH6I%`~9p9qy MSssw_gi`\a l:2]SYiX9 :Ӷ=jp2q2ĐP2w,  V_hd%HxoYyxM[IImw\% o&:-@Xۿ)8UKpFО鷼9\w*R9UdQsR .jC[Q|8PRn' +(`4Wy9> ^<2#vuA8Lf}pcٻƲ/e"n?4KPt8?>\[&!۬G|/*\a,6_pc԰ZQ&/ +/kyPY+ &X{jsBg4el֫3WĐtJvTgW-͊nVag\Λ8{-"pP;JjFif>+Q2ibPղȣ|EtA5C]zV8^ݒt 7pBHw1ٗHoա@rwgК 9WSM㎜&H0]1do +(TeY>Nk/m`w^齵bR,'Fb=ZYeN"]M #}%RI`_\E'*UA7'T2(HNBq764 |+ ^zHU%;R[7f–(Cz|'{)Ba4ͯVG]악Wm8ˍӻͭNF~\yLdD2<3sÞ%gLWJL68NW }ԩڅ".Gh'cd^1:s/%bs] К0JwyZSfn@u䙷.&R㨤ގ:'sǦB̞~_yd'h Nސw~=̳s15Os=7v^p:$nT˜}lQ{M(C +w3m +#8抓CQ5W{Y6QYtGoʹƩoLLcfx(Y $j(dμuyFlVK YKeЉ_} w}ړ|ρ- +{&ՊWtoumOKL?3J37^޺lvIt=:LWJ-$@`0 *TaIB#,]fպd΋gPwiq-QW_1o+&ߪvE+\|YMX/m<=b @I*4@ُ% +J$1{;@@[Đ?%%Ie(,n%hyJQ0̂%sh3@";M=rg}1_Y,핎pLBޝ ;ڢxLP|b +@%m+P1c*`-*b%p; nOo%[y!{3Y(FR5iX( Z{4~_HA{b5hřE1w'Ipc^5v@ 9!x #a,^=U[R狆BFi+uHYE^$эCvS>֟ `[ RQ|t} ))ejG3!'SLטEvy6OjxH>Dp,IBYtO}0?$ o]޿;Zg G<./dxr +BY ;NpK@ Y6kݣ4}WAƶۍcכ'-0(twߠhRuNJ;5ՇW*lj&1uy}yKύYp:Ju^Fc_Fn5vb=Ck|[b}TA}['89tVJ%Pd +Rh 3(5-Co ʯ <Όr~2=dJvMJaO9{ bǖiDR2lߗS3uDDZ'yMKjyIU2v[b? 6xΒlf3Kc,.8%17~' + PiPg{V|y\&?\r`b(Em90|  j9bZL,d[Bg Jw%^2הS9'jW`Nw,;׻H{$1Ox6ӐtqRZOab>e 1.G\ =3ZtH j ;f?[+3oQތ&W̚L7l-RաVo8ϒ8qA_|mC!s3ȃYYcي^dMLJ37p&fy ЄSQ"^^s:qok 0~M%Hw5)RgNwAB'7av5VGtw (0N=Xax.v,򧗾y4Zf2TOP ddtLU}wڌ Tw3oN[ C~G%sNYet6hՑqa2i"k$bםGpש*c^31lNJdoS=G6FA ;tӏ0}E_7YdG"iuU0H+[FENrE8f#-A( Rb? ;KDa+Lw7Q%Đ?S2N +%P{Qۯm"|"q$uYb떶=ЏwO|_QoK{s:U\KB7}ðδI}Qm|)m>&Ϥ%"GW,uMyjGGЦkFc뺹jej@-,J:1iKizsi + +r +L|0t3?~CbsPX(T7i(aVV2(M*#P3(ŏOLu/F't&֐V\m|Rv[hY?QTqP!6߄O/)ղ3az('懾`'KgVo5|[Qo~zg#;ZX?$?>H?AZ ͂W ی~AGQe,5gkr{OsuW9'IS3fd#UYaoY^Ew%|@A[BPA~ Jl$i\.;B_Ӱ{j-=o wc7ɥ90t1 +mثM{ɔWHt&M lC7hJs?Yq h0ҟ޴ +Ry({NO"Q(x({%x}nW>7vW9O!}ddڦ!(s`^dӸ̚aȿÚ/{o] o /Tԥ"1d>7EVBsQ]mt{[_~.pY75(i 6t%s)Ԭ\I]x!?&OKaz@sZ U]%>=nr?PxJT(.i8_ϛU ˛v{e=$?m:~ý^F쓻ILMoGo*'c\ +=Đ_*@{,8C/z`%Qes xsQ:OQ[si[a"C&ޑz/a=|3,Mk"G.yHoKXa~.ońׇQ{2dU)~Bk"9@B㈬\Jl⣩6jUq(Xl>9ڧ!Y0 +s[|@gjQ}\{y\KFC`zMnCG+g#Ve au} NrY32%,Ѽ22-i+!z= 3 ANΦ}^=W $p&y 'qL}UV*h!d8^+8Rn,Eh~,f|DgQo@_U?( U%K],ajTm=kͶc^䧯ﱼ~?*q<ϙ sd[i8h vfC( vm]L5P{g_gv'*lzQb̤j%mN>8Y= xvJ&V0^x:|WL@lؚrsHػExOTJ bs)OƓ?O@_1T:EE$͒Gۗ/v`TFQ~ACӟOchv`wvL]*ӜHg嵝!lT=0;/-7~te6eOW|a<2D:Qx 6R?o (мҥ3]zL/cɲM xoCZEfKڴ}0`'\9&{fc.8Ї.ÆpڊgKr3LfȣxT(*|âNeN3ԡ㴶Ix9LbmH5tU?RƛD0r3j0a7Q9rN>aNfb9/h6Ef>Yk_RtG[e{*gC*=kuMvDGgL3ߒzD~7ڷqy;6JpGn85|sU<}5Glm=t戮(fdkRLsz̡6]mol-dEtӖ|ρ_-Q&Qr]ޮlS~Ӫ+{d?2I)U!h5m5/cִfYN6sK^ X!- ȯ(LX:U +_h +W%*M3x.stx4pց+KA(1:?bFv;I OAC170c?&_~g7yJdA { 8HH\`mڀ@@^0['&pu,/ؠ޶?мW#2ܖm^C~5% ?;]OPadJ <@o<PpHCb {ш M!~=2~{8;%x/rJ6Ly$wy" іm6("(61D~J]e]ZJAƒM<5;~lv;-g|^\8tv>gf/I/4mO855ڢj[ VxkCZ + 6Ii7*KW9GG[G]z}VYQ1lM;h%U%1W?@Gq(&࠘\H?s2(+4(>'Ps>wԛ%mqrϧܯ Iݝ*nx-}z{/'+Rw%]yqy:kzwNBcneP(Q*((ehx6KQlcw Kڴ{y(uvKGʣK4:0= 'AhO:B*(܃Ry^,}\E 7zE愂wʁsLsJRqrםig87r[Ӯ9O0<)s<7vO8Nӥ4 ?wChuZtJ0|(/Vǯ&!l7Fk"% ൛wLt&ck&3QAv(i+і}Zwq "~\VtȸiEl;sɥtgT)&fb̭U. [G`c5ܓ%OR:{uIdCFXo6VpvX=_X/SPUhW?pH.详;m7i&6h4&ǂf_WEu{g0sǻWMN֎A}`>QUٞmd}Q%<q@\{}.I@i7>_0V>< ,oVZ qTLv J$r~d՗Z\7qqmƏf1g:])W? x"rv1>u!ksvOPw)țyfVl̒mFJ/U5J`gί [$0_o(TО^1icDdӿj +i͚fٶk@7}aa|h$+渗ؼ5&ER\yeznOq.N]OzKb?ZAX0 9@}jxtN!"[9i${|޼oÊ-𶷪_zDs3cN-W2`Z.9%|'j(h$(N#OB~WIɔ0]:xI- l7o^U[Z4hRGpYio&p쓔tpqbIM`dF}y_XZgm႘.6>sX99~N-a=%f̧&9z Qn_^װD߯5:s3MDVWIZ3qc[8,GԀJ7pm߳$jKZ|PD((ǻx>h<֚+M[/1 b̤5E8 +o7I2 f|z3>L[7E& +@7n= V⎴Wr 2m>)la]7Ke6&ḩBQΐHQ /|YwG̴ 9"lgBwnfO^+ ajk:u Ox{ J;E\E yhcjHޑi0ڽ'QQEyFjcEDCqdee gA-;vJ?۽࿒QPR#w}CҹKVz]og %Rg̗9ם|ITz֌q&~e63a0n~Z_"k߼(䥔ArTxYwCd˫ZEsOzDO@WzM4lD@/y 6re,e.yNΛ^+0 +.ȳeYAWoP]Z: ~J.q)}i4{qO%͡%QM_vG_nNپgNO麍Q]m-;v  i˽ɟPFHZ=f譆̗Y46lD16B;'Ů:U:jL>2DkLZس\n + 0:4#Zo4SK=8ܺ0>#]sg{j\C ⩙1f :t +A]e{p sW,o*ﴮTd;7{L\u0N^IR50&¬-ZV`]NBYpY9)|AH +`gA~{|;@T?wzs2Eo29\]7 jbs7g'Z-QwO%<埂~s~?-=d1hR +s²Y!/<ȗ&9O?L \݅Br$ +@o;z8tSrx&lݼvZ`n9@P}F/B_@>@AKM|mA^. ٽe%zm\E͢2KMU1u ZQYv /UvaE4ƶ3mFmgW&yBPohz>gP*|b+[rAx]~|>싔Ku ='l赨vRW[K/k^w C`dgڝkC@a4m85 O[p}?w$K~ 'e˻ubJ Cm ڭfO:_TY#b:!o23֚}֘?)1?cNSyWtσ5R<|&HS[sҾ6Orı='$Esw]hs)6yrF:.G3uVFUmoka)uQC[40-|Z}zO(?(S6Y4+om`7I)*Od/+۝?{ew<;w4皛CqL_ݷ7㲉#Me#xI@QEAT'e nn2Ӥ+/\UД#(tlrivoYB/QDxPzX_з2,Nr}sYZBHXM{ 5CX|ԝaUC_+A+[𝏜VoQC&3w2:SSfoX\Iy^Ric{jiߕc'g?7ƾNO&U5eoժ[#ˮOS[ypq8GIv5y!Q$JBPO]9MϡЎ̃|pkB +_KD$vЯmZ .Hsr8Qx/&ڽsQ>JlSI2T;R-~An] +p@JCF,vxH16Ycr.q*ܙWqoݓYDOhet7#UZf듊kJL @n c@"|?YytNu"RgɣWAkdmzd4mOgQGR/Mzk#>JEb*,Hw(gj"N18>o&c!'/@nJyx~#溣 ɪ|[Rk4`C:RUb|}#Zo+e  ##dۇ_;W+3vֵO:H:,NǓ^-\jk=@`\%am`Zv*$[mVJ1"31Aprs91zz KVTc~Cb_zn>i0_c/׺:K ^#Ddo{Oxi>`\~[A}+Ա/S3<(͐K+ + +i+ʘz-4-F=i8U&l~OA*wT,YZevǭA_` 2׬еkiNo' ZpTAbۄH+]M+g ^?byV}O!2?w}=vP趗p 9(4^>H@|)s^V0`q=%M$D/ՈIL;i59QK^y(1 f1g@B' Kr(MbJP1l|dZ慦ę 0Q%csEOU狛o/< \͠Оp-}rBtN 9ZA'V= 'Pg r%j +PCIjlGqmO+~Y.e#: ?ȿ.Cn!wyq\\ 4Yoـ2@hi~jJPHRAR cjfOnM-g|s>Ξ_errt[@gȭV`c9*$*da_z.Уr4yV-TxW}O}7/VAjm_6e4ДD@n1:0w +1K>AAx|3;,Z@~ćs!\V}vnެӿeWx:۠7 Y-~} + +(>"F +P'Ӭ'Lnj8u~Gt<{O|ڱgü¸4~Inrney!`oro0M$PKvGti'}+Zd<>v{kא%|5_K[f?kqDN^QmT[l}zbޯTqa$@<xB/1|Aޱhj| N뱨O ݷRzrTxpJ)\.uw.n&CXC8[Z=tӋG}svS|Zn4g=qz[ J`7y@>*]@,Yk=6eݿ7.5֛8ׅz[|W7o}-Z<_Zۥi%]#տ rf!.dn9~X,ɱTb~?BsЛE@8޷<:} mpnGzPCh{nY8&;,Oik0HxLd+zkl?x(ZŝۋU"g/~}6? +9wn®s.ok:>W-]|mHK_w$~1V&ZpXfT\7~Vf/}(#Ck%)yN?PNoY(sO +@vyx~Żgvl͉ƹ1 vVp1952âi]½5l]V.w;o4 OC/8~װYFn/jL/_?W2ΠمrʳO8ޙ8űTŭkECWLVO߹ǗNdՂWԂ~L,ᘔ,I=y8d5G(uʏo 0\F#bmqXjV3/rFK^sU&ɚZ*NX? >J,>v,'4]Mp.liVHC{AܿXnrP^նĝnpLC3.I[GtQ7ړNBSc;S12;"$Thqd9W[ѳE> ? +G +r#@ ʭNekvru6q+p.nnku +=t9U: 5kj!jf] tw4*7'u_v(<|K*{S^V6fr;ǻGK|vET(j(vJY)͡)nyjY4t:Aq5]o"?$LN]7Ω2N:jC5p=^9gnD{gt#K&m-PsdF^ Exm y ?> endobj 41 0 obj <> endobj 76 0 obj <> endobj 111 0 obj <> endobj 146 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 243 0 obj [/View/Design] endobj 244 0 obj <>>> endobj 241 0 obj [/View/Design] endobj 242 0 obj <>>> endobj 204 0 obj [/View/Design] endobj 205 0 obj <>>> endobj 202 0 obj [/View/Design] endobj 203 0 obj <>>> endobj 165 0 obj [/View/Design] endobj 166 0 obj <>>> endobj 130 0 obj [/View/Design] endobj 131 0 obj <>>> endobj 95 0 obj [/View/Design] endobj 96 0 obj <>>> endobj 60 0 obj [/View/Design] endobj 61 0 obj <>>> endobj 25 0 obj [/View/Design] endobj 26 0 obj <>>> endobj 261 0 obj [260 0 R 259 0 R] endobj 297 0 obj <> endobj xref 0 298 0000000004 65535 f +0000000016 00000 n +0000000307 00000 n +0000042669 00000 n +0000000006 00000 f +0001091216 00000 n +0000000008 00000 f +0000042720 00000 n +0000000009 00000 f +0000000010 00000 f +0000000011 00000 f +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000015 00000 f +0000000016 00000 f +0000000017 00000 f +0000000018 00000 f +0000000019 00000 f +0000000020 00000 f +0000000021 00000 f +0000000022 00000 f +0000000023 00000 f +0000000024 00000 f +0000000027 00000 f +0001092812 00000 n +0001092843 00000 n +0000000028 00000 f +0000000029 00000 f +0000000030 00000 f +0000000031 00000 f +0000000032 00000 f +0000000033 00000 f +0000000034 00000 f +0000000035 00000 f +0000000036 00000 f +0000000037 00000 f +0000000038 00000 f +0000000039 00000 f +0000000040 00000 f +0000000042 00000 f +0001091286 00000 n +0000000043 00000 f +0000000044 00000 f +0000000045 00000 f +0000000046 00000 f +0000000047 00000 f +0000000048 00000 f +0000000049 00000 f +0000000050 00000 f +0000000051 00000 f +0000000052 00000 f +0000000053 00000 f +0000000054 00000 f +0000000055 00000 f +0000000056 00000 f +0000000057 00000 f +0000000058 00000 f +0000000059 00000 f +0000000062 00000 f +0001092696 00000 n +0001092727 00000 n +0000000063 00000 f +0000000064 00000 f +0000000065 00000 f +0000000066 00000 f +0000000067 00000 f +0000000068 00000 f +0000000069 00000 f +0000000070 00000 f +0000000071 00000 f +0000000072 00000 f +0000000073 00000 f +0000000074 00000 f +0000000075 00000 f +0000000077 00000 f +0001091357 00000 n +0000000078 00000 f +0000000079 00000 f +0000000080 00000 f +0000000081 00000 f +0000000082 00000 f +0000000083 00000 f +0000000084 00000 f +0000000085 00000 f +0000000086 00000 f +0000000087 00000 f +0000000088 00000 f +0000000089 00000 f +0000000090 00000 f +0000000091 00000 f +0000000092 00000 f +0000000093 00000 f +0000000094 00000 f +0000000097 00000 f +0001092580 00000 n +0001092611 00000 n +0000000098 00000 f +0000000099 00000 f +0000000100 00000 f +0000000101 00000 f +0000000102 00000 f +0000000103 00000 f +0000000104 00000 f +0000000105 00000 f +0000000106 00000 f +0000000107 00000 f +0000000108 00000 f +0000000109 00000 f +0000000110 00000 f +0000000112 00000 f +0001091428 00000 n +0000000113 00000 f +0000000114 00000 f +0000000115 00000 f +0000000116 00000 f +0000000117 00000 f +0000000118 00000 f +0000000119 00000 f +0000000120 00000 f +0000000121 00000 f +0000000122 00000 f +0000000123 00000 f +0000000124 00000 f +0000000125 00000 f +0000000126 00000 f +0000000127 00000 f +0000000128 00000 f +0000000129 00000 f +0000000132 00000 f +0001092462 00000 n +0001092494 00000 n +0000000133 00000 f +0000000134 00000 f +0000000135 00000 f +0000000136 00000 f +0000000137 00000 f +0000000138 00000 f +0000000139 00000 f +0000000140 00000 f +0000000141 00000 f +0000000142 00000 f +0000000143 00000 f +0000000144 00000 f +0000000145 00000 f +0000000147 00000 f +0001091502 00000 n +0000000148 00000 f +0000000149 00000 f +0000000150 00000 f +0000000151 00000 f +0000000152 00000 f +0000000153 00000 f +0000000154 00000 f +0000000155 00000 f +0000000156 00000 f +0000000157 00000 f +0000000158 00000 f +0000000159 00000 f +0000000160 00000 f +0000000161 00000 f +0000000162 00000 f +0000000163 00000 f +0000000164 00000 f +0000000167 00000 f +0001092344 00000 n +0001092376 00000 n +0000000168 00000 f +0000000169 00000 f +0000000170 00000 f +0000000171 00000 f +0000000172 00000 f +0000000173 00000 f +0000000174 00000 f +0000000175 00000 f +0000000176 00000 f +0000000177 00000 f +0000000178 00000 f +0000000179 00000 f +0000000180 00000 f +0000000183 00000 f +0001091576 00000 n +0001091650 00000 n +0000000184 00000 f +0000000185 00000 f +0000000186 00000 f +0000000187 00000 f +0000000188 00000 f +0000000189 00000 f +0000000190 00000 f +0000000191 00000 f +0000000192 00000 f +0000000193 00000 f +0000000194 00000 f +0000000195 00000 f +0000000196 00000 f +0000000197 00000 f +0000000198 00000 f +0000000199 00000 f +0000000200 00000 f +0000000201 00000 f +0000000206 00000 f +0001092226 00000 n +0001092258 00000 n +0001092108 00000 n +0001092140 00000 n +0000000207 00000 f +0000000208 00000 f +0000000209 00000 f +0000000210 00000 f +0000000211 00000 f +0000000212 00000 f +0000000213 00000 f +0000000214 00000 f +0000000215 00000 f +0000000216 00000 f +0000000217 00000 f +0000000218 00000 f +0000000219 00000 f +0000000000 00000 f +0001091724 00000 n +0001091798 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0001091990 00000 n +0001092022 00000 n +0001091872 00000 n +0001091904 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000438601 00000 n +0000438675 00000 n +0001092928 00000 n +0000043138 00000 n +0000439085 00000 n +0000048730 00000 n +0000048616 00000 n +0000438985 00000 n +0000044388 00000 n +0000044819 00000 n +0000043391 00000 n +0000043824 00000 n +0000043874 00000 n +0000045077 00000 n +0000045140 00000 n +0000045523 00000 n +0000045586 00000 n +0000045839 00000 n +0000045902 00000 n +0000048552 00000 n +0000048767 00000 n +0000438867 00000 n +0000438899 00000 n +0000438749 00000 n +0000438781 00000 n +0000439161 00000 n +0000439549 00000 n +0000440565 00000 n +0000443748 00000 n +0000509337 00000 n +0000566504 00000 n +0000632093 00000 n +0000697682 00000 n +0000763271 00000 n +0000828860 00000 n +0000894449 00000 n +0000960038 00000 n +0001025627 00000 n +0001092963 00000 n +trailer <]>> startxref 1093160 %%EOF \ No newline at end of file diff --git a/node_modules/materialize-css/res/MaterializeLogo-3.svg b/node_modules/materialize-css/res/MaterializeLogo-3.svg new file mode 100644 index 0000000..bddcff4 --- /dev/null +++ b/node_modules/materialize-css/res/MaterializeLogo-3.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/materialize-css/res/materialize.svg b/node_modules/materialize-css/res/materialize.svg new file mode 100644 index 0000000..903fed5 --- /dev/null +++ b/node_modules/materialize-css/res/materialize.svg @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/materialize-css/robots.txt b/node_modules/materialize-css/robots.txt new file mode 100644 index 0000000..2b08a70 --- /dev/null +++ b/node_modules/materialize-css/robots.txt @@ -0,0 +1,4 @@ +# Allow crawling of all content +User-agent: * +Disallow: +Sitemap: http://materializecss.com/sitemap.xml \ No newline at end of file diff --git a/node_modules/materialize-css/sass.html b/node_modules/materialize-css/sass.html new file mode 100644 index 0000000..6dbfd64 --- /dev/null +++ b/node_modules/materialize-css/sass.html @@ -0,0 +1,340 @@ + + + + + + + + + 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/node_modules/materialize-css/sass/_style.scss b/node_modules/materialize-css/sass/_style.scss new file mode 100644 index 0000000..fa8ad7e --- /dev/null +++ b/node_modules/materialize-css/sass/_style.scss @@ -0,0 +1,979 @@ +/*************** + 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; +} + +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 a:hover, ul li.active { + background-color: color("materialize-red", "lighten-1"); + } +} + +.header { + color: color("materialize-red", "lighten-2"); + 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: 300px; +} +.parallax-demo header, +.parallax-demo main, +.parallax-demo footer { + padding-left: 0; +} +footer.example { + padding-left: 0; +} + +@media #{$medium-and-down} { + header, main, footer { + padding-left: 0; + } + h5 > span { + display: block; + margin: 0 0 15px 0; + } + +} + +/******************** + Index Page Styles +********************/ + +// custom styled sidebar +ul.side-nav.fixed li.logo { + text-align: center; + margin-top: 32px; + margin-bottom: 80px; + + &:hover, + #logo-container:hover { + background-color: transparent; + } +} +ul.side-nav.fixed { + overflow: hidden; + + li { + line-height: 44px; + + &.active { + background-color: rgba(0,0,0,.05); + } + + a { + font-size: 13px; + line-height: 44px; + height: 44px; + padding: 0 30px; + } + } + + 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 + &:hover { + overflow-y: auto; + } +} + +.bold > a { + font-weight: bold; +} + +#logo-container { + height: 57px; + margin-bottom: 32px; +} + +nav.top-nav { + height: 122px; + box-shadow: none; + + 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: 36px; + z-index: 2; + + &.full { + line-height: 122px; + } + + i { + font-size: 32px; + } +} + +@media #{$small-and-down} { + a.button-collapse.top-nav { + left: 5%; + } +} + +@media #{$medium-and-down} { + nav .nav-wrapper { + text-align: center; + + a.page-title { + font-size: 36px; + } + } +} + +@media #{$large-and-up} { + .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; + + &:hover { background-color: #ddd; } + .active { background-color: transparent; } + } + a { + color: #444; + } + } +} + + +#responsive-img { + width: 80%; + display:block; + margin: 0 auto; +} + +#index-banner { + background-color: color("materialize-red", "lighten-2"); + .container { + position: relative; + } + .header { + color: #FFF; + } + h4 { + margin-bottom: 40px; + } + h1 { + margin-top: 16px; + } +} +@media #{$medium-and-down} { + #index-banner { + h1 { + margin-top: 60px; + } + h4 { + margin-bottom: 15px; + } + } +} +@media #{$small-and-down} { + #index-banner { + h4 { + margin-bottom: 0; + } + } +} + +// Latest commit widget +.github-commit { + padding: 14px 0; + height: 64px; + line-height: 36px; + background-color: #5c5757; + color: hsl(0, 0%, 90%); + font-size: .9rem; +} +@media #{$medium-and-down} { + .github-commit { + text-align: center; + } +} + +#github-button { + background-color: #6f6d6d; + transition: .25s ease; + &:hover { + background-color: #797777; + } +} + +.sha { + color: hsl(0, 0%, 94%) ; + margin: 0 6px 0 6px; +} + +#download-button { + background-color: color("materialize-red", "lighten-3"); + width: 260px; + height: 70px; + line-height: 70px; + font-size: 18px; + font-weight: 400; + + &:hover { + background-color: lighten(color("materialize-red", "base"), 30%); + } +} + +.promo{ + width: 100%; + + i { + margin: 40px 0; + color: color("materialize-red", "lighten-2"); + 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; + a { + color: color("materialize-red", "lighten-2"); + } + li { + &:hover { + background-color: color("materialize-red", "lighten-5"); + } + &.active { + background-color: color("materialize-red", "lighten-5"); + } + } + .container { + height: inherit; + } +} + +// Grid doc styles + +.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; + + span { + font-weight: 200; + line-height: 50px; + } +} + +.promo-example { + overflow: hidden; +} + + +/******************* + Flat Site Mockup +*******************/ + +#site-layout-example-left { + background-color: color("blue-grey", "lighten-2"); + height: 300px; +} +#site-layout-example-right { + background-color: color("teal", "lighten-1"); + height: 300px; +} +#site-layout-example-top { + background-color: color("red", "lighten-2"); + height: 42px; +} + +.flat-text-header { + height: 35px; + width: 80%; + background-color: rgba(255,255,255,.15); + display: block; + margin: 27px auto; +} +.flat-text { + height: 25px; + width: 80%; + background-color: rgba(0,0,0,.15); + display: block; + margin: 27px auto; + &.small { + width: 25%; + height: 25px; + background-color: rgba(0,0,0,.15); + } + &.full-width { + width: 100%; + } +} + +/********************** +**********************/ + +/***************** + Chrome Browser +*****************/ +$bottomColor: #E2E2E1; +$topColor: lighten($bottomColor, 2%); + +$border: $bottomColor; + +$width: 100%; +$height: auto; + +.browser-window { + text-align: left; + width: $width; + height: $height; + display: inline-block; + border-radius: 5px 5px 2px 2px; + background-color: #fff; + margin: 20px 0px; + overflow: hidden; + + .top-bar { + height: 30px; + border-radius: 5px 5px 0 0; + border-top: thin solid lighten($topColor, 1%); + border-bottom: thin solid darken($bottomColor, 1%); + background: linear-gradient($topColor, $bottomColor); + } +} + +.browser-window .circle { + height: 10px; + width: 10px; + display: inline-block; + border-radius: 50%; + background-color: lighten($topColor, 10%); + 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%; + // min-height: 100%; + display: inline-block; + border-radius: 0 0 5px 5px; + background-color: #fafafa; +} +.browser-window .row { + margin: 0; +} + +.clear { clear: both; } + +/********************** +**********************/ + + +// Color Wheel +.dynamic-color { + + .red, .pink, .purple, .deep-purple, .indigo, .blue, .light-blue, .cyan, .teal, .green, .light-green, .lime, .yellow, .amber, .orange, .deep-orange, .brown , .grey, .blue-grey, .black, .white, .transparent { + height: 55px; + width: 100%; + padding: 0 15px; + line-height: 55px; + font-weight: 500; + font-size: 12px; + display: block; + box-sizing: border-box; + } + .col { + margin-bottom: 55px; + } +} + +.center { + text-align: center; + vertical-align: middle; +} + +// Icons +.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; + p { + margin: 0 0; + } +} + +// tabs +.tabs-wrapper { + position: relative; + height: 48px; + @extend .hide-on-small-only; + + .row.pinned { + position: fixed; + width: 100%; + top: 0; + z-index: 10; + } +} + + +// Shadow demo styling +.shadow-demo { + background-color: color("teal", "lighten-1"); + width: 100px; + height: 100px; + margin: 20px auto; + + @media only screen and (max-width: $small-screen) { + width: 150px; + height: 150px; + } +} + +// parallax demo +.parallax-container { + + .text-center { + position: absolute; + top: 50%; + left: 0; + right: 0; + margin-top: -27px; + } + +} + +// Table of contents +ul.table-of-contents { + margin-top: 0; + padding-top: 48px; +} + +// Prism Styling +code, pre { + position: relative; + font-size: 1.1rem; +} + +.directory-markup { + font-size: 1rem; + line-height: 1.1rem !important; +} +pre[class*="language-"] { + &:before { + position: absolute; + padding: 1px 5px; + background: hsl(30, 10%, 90%); + 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; + } + padding: 25px 12px 7px 12px; + border: solid 1px rgba(51, 51, 51, 0.12); +} + + +// Carbon Ads styling +.toc-wrapper { + &.pin-bottom { + margin-top: 84px; + } + + position: relative; + margin-top: 42px; +} + +#carbonads { + max-width: 150px; + display: inline-block; + position: relative; + text-align: left; + -webkit-font-smoothing: antialiased; + + & > span, + span.carbon-wrap { + height: 100px; + display: block; + } + a.carbon-img { + height: 100px; + display: inline-block; + margin-right: 10px; + } + a.carbon-text, + input[type="submit"] { + position: relative; + top: 0; + width: 150px; + vertical-align: top; + display: inline-block; + font-size: 13px; + color: color("red", "lighten-2"); + } + a.carbon-poweredby { + position: relative; + left: 28px; + font-size: 11px; + color: color("red", "lighten-3"); + } +} +.buysellads #carbonads { + + & > span, + span.carbon-wrap { height: auto; } + + a.carbon-text { + top: 5px; + left: 0; + width: 130px; + display: block; + font-size: 13px; + -webkit-font-smoothing: antialiased; + color: #E57373; + } + a.carbon-poweredby { + top: 5px; + } +} +.buysellads-header #carbonads { + & > span, + span.carbon-wrap { height: auto; } + a.carbon-text { color: #fff; } + a.carbon-poweredby { color: rgba(255,255,255,.8); } +} + + +.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; + + .bsa_it.one { + width: 130px; + position: absolute; + left: 0; + top: 50px; + + .bsa_it_p { + left: 0; + bottom: -15px; + } + .bsa_it_ad .bsa_it_t { color: color("red", "lighten-2"); } + .bsa_it_ad .bsa_it_d { color: color("red", "lighten-3"); } + } + + .bsa_it_ad a { + display: block; + width: 130px; + } +} + +.buysellads-header { + margin-top: 30px; + + .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_ad { + border: 0; + padding: 0; + background-color: transparent; + + .bsa_it_t { color: #fff; } + .bsa_it_d { color: color("red", "lighten-4"); } + } + + .bsa_it_p { + right: auto; + left: 40px; + bottom: -5px; + + a { color: color("red", "lighten-4"); } + } +} + + + +// Footer styling +footer{ + font-size: .9rem; +} +body.parallax-demo footer { + margin-top: 0; +} + +//About page styling +.image-container { + width: 100%; + img { + max-width: 100%; + } +} + + +// Mobile page styling + +.mobile-image { + @media #{$small-and-down} { + max-width: 100%; + } +} + +// Waves page styling +.waves-color-demo { + .collection-item { + height: 37px; + line-height: 37px; + box-sizing: content-box; + + code { + line-height: 37px; + } + } + .btn { + &:not(.waves-light) { + background-color: color("shades", "white"); + color: #212121; + } + } +} + +// Card Page styling +.card-panel span, .card-content p{ + -webkit-font-smoothing: antialiased; +} + +#images .card-panel .row { + margin-bottom: 0; +} + +// Pushpin Demo styles +.pushpin-demo { + position: relative; + height: 100px; +} +#pushpin-demo-1 { + display: block; + height: inherit; + background-color: #ddd; +} + +// Valign Demo +.valign-demo { + height: 400px; + background-color: #ddd; +} +.talign-demo { + height: 100px; + background-color: #ddd; +} + +// Transitions demos +#staggered-test li, +#image-test { + opacity: 0; + +} + +// Transifex Styling + +#tx-live-lang-container { + background-color: #fcfcfc; + z-index: 999; + + #tx-live-lang-picker { + background-color: #fcfcfc; + + li { + color: $off-black; + &:hover{ + color: inherit; + background-color: color("materialize-red", "lighten-5"); + } + } + + } + + .txlive-langselector-toggle { + border-bottom: 2px solid color("materialize-red", "lighten-2"); + } + + .txlive-langselector-current { + color: $off-black; + } + + .txlive-langselector-marker { + border-bottom: 4px solid rgba(0,0,0,.61); + } + + +} + + +// Thanks for Downloading + +#download-thanks { + display: none; +} + + +// Twitter widget +#twitter-widget-0 { + width: 300px !important; +} + +// Search +#nav-mobile li.search { + &:hover { background-color: #fff; } + + position: absolute; + left: 0; + right: 0; + top: 120px; + 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; } + + display: block; + font-size: 16px; + font-weight: 300; + width: 100%; + height: 45px; + margin: 0; + 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; + } + } +} diff --git a/node_modules/materialize-css/sass/components/_badges.scss b/node_modules/materialize-css/sass/components/_badges.scss new file mode 100644 index 0000000..1c9f951 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_badges.scss @@ -0,0 +1,46 @@ +// 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; +} + +// Line height centering +.collection-item span.badge { + margin-top: calc(#{$collection-line-height / 2} - #{$badge-height / 2}); +} +.collapsible span.badge { + margin-top: calc(#{$collapsible-line-height / 2} - #{$badge-height / 2}); +} +.side-nav span.badge { + margin-top: calc(#{$sidenav-line-height / 2} - #{$badge-height / 2}); +} diff --git a/node_modules/materialize-css/sass/components/_buttons.scss b/node_modules/materialize-css/sass/components/_buttons.scss new file mode 100644 index 0000000..800fab0 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_buttons.scss @@ -0,0 +1,293 @@ +// shared styles +.btn, +.btn-flat { + border: $button-border; + border-radius: $button-radius; + display: inline-block; + height: $button-height; + 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-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-disabled-color !important; + cursor: default; + + &:hover { + background-color: $button-disabled-background !important; + color: $button-disabled-color !important; + } +} + +// Shared icon styles +.btn, +.btn-floating, +.btn-large, +.btn-flat { + + outline: 0; + + i { + font-size: $button-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-raised-color; + background-color: $button-raised-background; + text-align: center; + letter-spacing: .5px; + @extend .z-depth-1; + transition: .2s ease-out; + cursor: pointer; + + &:hover { + 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 { + 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: 0; + transform: translateY(50%); + } + + display: inline-block; + color: $button-floating-color; + position: relative; + overflow: hidden; + z-index: 1; + width: $button-floating-size; + height: $button-floating-size; + line-height: $button-floating-size; + padding: 0; + background-color: $button-floating-background; + border-radius: $button-floating-radius; + @extend .z-depth-1; + transition: .3s; + cursor: pointer; + vertical-align: middle; + + i { + width: inherit; + display: inline-block; + text-align: center; + color: $button-floating-color; + font-size: $button-large-icon-font-size; + line-height: $button-floating-size; + } +} + +// button fix +button.btn-floating { + 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; + + 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; + + ul { + left: 0; + right: 0; + text-align: center; + position: absolute; + bottom: 64px; + margin: 0; + visibility: hidden; + + li { + margin-bottom: 15px; + } + + a.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-flat-color; + cursor: pointer; + transition: background-color .2s; + + &:focus, + &:active { + background-color: transparent; + } + + &:focus, + &:hover { + background-color: rgba(0,0,0,.1); + box-shadow: none; + } + + &:active { + background-color: rgba(0,0,0,.2); + } + + &.disabled { + background-color: transparent !important; + color: $button-flat-disabled-color !important; + cursor: default; + } +} + +// Large button +.btn-large { + @extend .btn; + height: $button-large-height; + line-height: $button-large-height; + + i { + font-size: $button-large-icon-font-size; + } +} + +// Block button +.btn-block { + display: block; +} diff --git a/node_modules/materialize-css/sass/components/_cards.scss b/node_modules/materialize-css/sass/components/_cards.scss new file mode 100644 index 0000000..ad72783 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_cards.scss @@ -0,0 +1,193 @@ + + +.card-panel { + transition: box-shadow .25s; + padding: $card-padding; + margin: $element-top-margin 0 $element-bottom-margin 0; + border-radius: 2px; + @extend .z-depth-1; + background-color: $card-bg-color; +} + +.card { + position: relative; + margin: $element-top-margin 0 $element-bottom-margin 0; + background-color: $card-bg-color; + transition: box-shadow .25s; + border-radius: 2px; + @extend .z-depth-1; + + + .card-title { + font-size: 24px; + font-weight: 300; + &.activator { + cursor: pointer; + } + } + + // Card Sizes + &.small, &.medium, &.large { + 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 { + position: absolute; + bottom: 0; + left: 0; + right: 0; + } + } + + &.small { + height: 300px; + } + + &.medium { + height: 400px; + } + + &.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 { + 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; + } + } + } + + // Sticky Action Section + &.sticky-action { + .card-action { + z-index: 2; + } + + .card-reveal { + z-index: 1; + padding-bottom: 64px; + } + } + + + + + .card-image { + position: relative; + + // Image background for content + img { + display: block; + border-radius: 2px 2px 0 0; + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100%; + } + + .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 { + display: block; + line-height: 32px; + margin-bottom: 8px; + + i { + line-height: 32px; + } + } + } + + .card-action { + position: relative; + background-color: inherit; + border-top: 1px solid rgba(160,160,160,.2); + padding: 16px $card-padding; + + a:not(.btn):not(.btn-large):not(.btn-floating) { + color: $card-link-color; + margin-right: $card-padding; + transition: color .3s ease; + text-transform: uppercase; + + &:hover { color: $card-link-color-light; } + } + } + + .card-reveal { + padding: $card-padding; + position: absolute; + background-color: $card-bg-color; + width: 100%; + overflow-y: auto; + left: 0; + top: 100%; + height: 100%; + z-index: 3; + display: none; + + .card-title { + cursor: pointer; + display: block; + } + } +} diff --git a/node_modules/materialize-css/sass/components/_carousel.scss b/node_modules/materialize-css/sass/components/_carousel.scss new file mode 100644 index 0000000..11e49cc --- /dev/null +++ b/node_modules/materialize-css/sass/components/_carousel.scss @@ -0,0 +1,85 @@ +.carousel { + &.carousel-slider { + top: 0; + left: 0; + height: 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: 400px; + 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: 400px; + perspective: 500px; + transform-style: preserve-3d; + transform-origin: 0% 50%; + + .carousel-item { + display: none; + width: 200px; + height: 200px; + 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%; + } + } +} diff --git a/node_modules/materialize-css/sass/components/_chips.scss b/node_modules/materialize-css/sass/components/_chips.scss new file mode 100644 index 0000000..f774a41 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_chips.scss @@ -0,0 +1,83 @@ +.chip { + display: inline-block; + height: 32px; + font-size: 13px; + font-weight: 500; + color: rgba(0,0,0,.6); + line-height: 32px; + padding: 0 12px; + border-radius: 16px; + background-color: $chip-bg-color; + margin-bottom: $chip-margin; + margin-right: $chip-margin; + + img { + float: left; + margin: 0 8px 0 -12px; + height: 32px; + width: 32px; + border-radius: 50%; + } + + .close { + cursor: pointer; + float: right; + font-size: 16px; + line-height: 32px; + padding-left: 8px; + } +} + +.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; + } +} + +// 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/node_modules/materialize-css/sass/components/_collapsible.scss b/node_modules/materialize-css/sass/components/_collapsible.scss new file mode 100644 index 0000000..31d9d6f --- /dev/null +++ b/node_modules/materialize-css/sass/components/_collapsible.scss @@ -0,0 +1,86 @@ +.collapsible { + border-top: 1px solid $collapsible-border-color; + border-right: 1px solid $collapsible-border-color; + border-left: 1px solid $collapsible-border-color; + margin: $element-top-margin 0 $element-bottom-margin 0; + @extend .z-depth-1; +} + +.collapsible-header { + display: block; + cursor: pointer; + min-height: $collapsible-height; + line-height: $collapsible-line-height; + padding: 0 1rem; + background-color: $collapsible-header-color; + border-bottom: 1px solid $collapsible-border-color; + + i { + width: 2rem; + font-size: 1.6rem; + line-height: $collapsible-line-height; + display: block; + float: left; + text-align: center; + margin-right: 1rem; + } +} + +.collapsible-body { + display: none; + border-bottom: 1px solid $collapsible-border-color; + box-sizing: border-box; + padding: 2rem; +} + +// sideNav collapsible styling +.side-nav, +.side-nav.fixed { + + .collapsible { + border: none; + box-shadow: none; + + li { padding: 0; } + } + + .collapsible-header { + background-color: transparent; + border: none; + line-height: inherit; + height: inherit; + padding: 0 $sidenav-padding; + + &:hover { background-color: rgba(0,0,0,.05); } + i { line-height: inherit; } + } + + .collapsible-body { + border: 0; + background-color: $collapsible-header-color; + + li a { + padding: 0 (7.5px + $sidenav-padding) + 0 (15px + $sidenav-padding); + } + } + +} + +// Popout Collapsible + +.collapsible.popout { + border: none; + box-shadow: none; + > li { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + // transform: scaleX(.92); + margin: 0 24px; + transition: margin .35s cubic-bezier(0.250, 0.460, 0.450, 0.940); + } + > 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; + // transform: scaleX(1); + } +} diff --git a/node_modules/materialize-css/sass/components/_color.scss b/node_modules/materialize-css/sass/components/_color.scss new file mode 100644 index 0000000..ef9d600 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_color.scss @@ -0,0 +1,412 @@ +// Utility Color Classes + +//.success { +// +//} + +// Google Color Palette defined: http://www.google.com/design/spec/style/color.html + + +$materialize-red: ( + "base": #e51c23, + "lighten-5": #fdeaeb, + "lighten-4": #f8c1c3, + "lighten-3": #f3989b, + "lighten-2": #ee6e73, + "lighten-1": #ea454b, + "darken-1": #d0181e, + "darken-2": #b9151b, + "darken-3": #a21318, + "darken-4": #8b1014, +); + +$red: ( + "base": #F44336, + "lighten-5": #FFEBEE, + "lighten-4": #FFCDD2, + "lighten-3": #EF9A9A, + "lighten-2": #E57373, + "lighten-1": #EF5350, + "darken-1": #E53935, + "darken-2": #D32F2F, + "darken-3": #C62828, + "darken-4": #B71C1C, + "accent-1": #FF8A80, + "accent-2": #FF5252, + "accent-3": #FF1744, + "accent-4": #D50000 +); + +$pink: ( + "base": #e91e63, + "lighten-5": #fce4ec, + "lighten-4": #f8bbd0, + "lighten-3": #f48fb1, + "lighten-2": #f06292, + "lighten-1": #ec407a, + "darken-1": #d81b60, + "darken-2": #c2185b, + "darken-3": #ad1457, + "darken-4": #880e4f, + "accent-1": #ff80ab, + "accent-2": #ff4081, + "accent-3": #f50057, + "accent-4": #c51162 +); + +$purple: ( + "base": #9c27b0, + "lighten-5": #f3e5f5, + "lighten-4": #e1bee7, + "lighten-3": #ce93d8, + "lighten-2": #ba68c8, + "lighten-1": #ab47bc, + "darken-1": #8e24aa, + "darken-2": #7b1fa2, + "darken-3": #6a1b9a, + "darken-4": #4a148c, + "accent-1": #ea80fc, + "accent-2": #e040fb, + "accent-3": #d500f9, + "accent-4": #aa00ff +); + +$deep-purple: ( + "base": #673ab7, + "lighten-5": #ede7f6, + "lighten-4": #d1c4e9, + "lighten-3": #b39ddb, + "lighten-2": #9575cd, + "lighten-1": #7e57c2, + "darken-1": #5e35b1, + "darken-2": #512da8, + "darken-3": #4527a0, + "darken-4": #311b92, + "accent-1": #b388ff, + "accent-2": #7c4dff, + "accent-3": #651fff, + "accent-4": #6200ea +); + +$indigo: ( + "base": #3f51b5, + "lighten-5": #e8eaf6, + "lighten-4": #c5cae9, + "lighten-3": #9fa8da, + "lighten-2": #7986cb, + "lighten-1": #5c6bc0, + "darken-1": #3949ab, + "darken-2": #303f9f, + "darken-3": #283593, + "darken-4": #1a237e, + "accent-1": #8c9eff, + "accent-2": #536dfe, + "accent-3": #3d5afe, + "accent-4": #304ffe +); + +$blue: ( + "base": #2196F3, + "lighten-5": #E3F2FD, + "lighten-4": #BBDEFB, + "lighten-3": #90CAF9, + "lighten-2": #64B5F6, + "lighten-1": #42A5F5, + "darken-1": #1E88E5, + "darken-2": #1976D2, + "darken-3": #1565C0, + "darken-4": #0D47A1, + "accent-1": #82B1FF, + "accent-2": #448AFF, + "accent-3": #2979FF, + "accent-4": #2962FF +); + +$light-blue: ( + "base": #03a9f4, + "lighten-5": #e1f5fe, + "lighten-4": #b3e5fc, + "lighten-3": #81d4fa, + "lighten-2": #4fc3f7, + "lighten-1": #29b6f6, + "darken-1": #039be5, + "darken-2": #0288d1, + "darken-3": #0277bd, + "darken-4": #01579b, + "accent-1": #80d8ff, + "accent-2": #40c4ff, + "accent-3": #00b0ff, + "accent-4": #0091ea +); + +$cyan: ( + "base": #00bcd4, + "lighten-5": #e0f7fa, + "lighten-4": #b2ebf2, + "lighten-3": #80deea, + "lighten-2": #4dd0e1, + "lighten-1": #26c6da, + "darken-1": #00acc1, + "darken-2": #0097a7, + "darken-3": #00838f, + "darken-4": #006064, + "accent-1": #84ffff, + "accent-2": #18ffff, + "accent-3": #00e5ff, + "accent-4": #00b8d4 +); + +$teal: ( + "base": #009688, + "lighten-5": #e0f2f1, + "lighten-4": #b2dfdb, + "lighten-3": #80cbc4, + "lighten-2": #4db6ac, + "lighten-1": #26a69a, + "darken-1": #00897b, + "darken-2": #00796b, + "darken-3": #00695c, + "darken-4": #004d40, + "accent-1": #a7ffeb, + "accent-2": #64ffda, + "accent-3": #1de9b6, + "accent-4": #00bfa5 +); + +$green: ( + "base": #4CAF50, + "lighten-5": #E8F5E9, + "lighten-4": #C8E6C9, + "lighten-3": #A5D6A7, + "lighten-2": #81C784, + "lighten-1": #66BB6A, + "darken-1": #43A047, + "darken-2": #388E3C, + "darken-3": #2E7D32, + "darken-4": #1B5E20, + "accent-1": #B9F6CA, + "accent-2": #69F0AE, + "accent-3": #00E676, + "accent-4": #00C853 +); + +$light-green: ( + "base": #8bc34a, + "lighten-5": #f1f8e9, + "lighten-4": #dcedc8, + "lighten-3": #c5e1a5, + "lighten-2": #aed581, + "lighten-1": #9ccc65, + "darken-1": #7cb342, + "darken-2": #689f38, + "darken-3": #558b2f, + "darken-4": #33691e, + "accent-1": #ccff90, + "accent-2": #b2ff59, + "accent-3": #76ff03, + "accent-4": #64dd17 +); + +$lime: ( + "base": #cddc39, + "lighten-5": #f9fbe7, + "lighten-4": #f0f4c3, + "lighten-3": #e6ee9c, + "lighten-2": #dce775, + "lighten-1": #d4e157, + "darken-1": #c0ca33, + "darken-2": #afb42b, + "darken-3": #9e9d24, + "darken-4": #827717, + "accent-1": #f4ff81, + "accent-2": #eeff41, + "accent-3": #c6ff00, + "accent-4": #aeea00 +); + +$yellow: ( + "base": #ffeb3b, + "lighten-5": #fffde7, + "lighten-4": #fff9c4, + "lighten-3": #fff59d, + "lighten-2": #fff176, + "lighten-1": #ffee58, + "darken-1": #fdd835, + "darken-2": #fbc02d, + "darken-3": #f9a825, + "darken-4": #f57f17, + "accent-1": #ffff8d, + "accent-2": #ffff00, + "accent-3": #ffea00, + "accent-4": #ffd600 +); + +$amber: ( + "base": #ffc107, + "lighten-5": #fff8e1, + "lighten-4": #ffecb3, + "lighten-3": #ffe082, + "lighten-2": #ffd54f, + "lighten-1": #ffca28, + "darken-1": #ffb300, + "darken-2": #ffa000, + "darken-3": #ff8f00, + "darken-4": #ff6f00, + "accent-1": #ffe57f, + "accent-2": #ffd740, + "accent-3": #ffc400, + "accent-4": #ffab00 +); + +$orange: ( + "base": #ff9800, + "lighten-5": #fff3e0, + "lighten-4": #ffe0b2, + "lighten-3": #ffcc80, + "lighten-2": #ffb74d, + "lighten-1": #ffa726, + "darken-1": #fb8c00, + "darken-2": #f57c00, + "darken-3": #ef6c00, + "darken-4": #e65100, + "accent-1": #ffd180, + "accent-2": #ffab40, + "accent-3": #ff9100, + "accent-4": #ff6d00 +); + +$deep-orange: ( + "base": #ff5722, + "lighten-5": #fbe9e7, + "lighten-4": #ffccbc, + "lighten-3": #ffab91, + "lighten-2": #ff8a65, + "lighten-1": #ff7043, + "darken-1": #f4511e, + "darken-2": #e64a19, + "darken-3": #d84315, + "darken-4": #bf360c, + "accent-1": #ff9e80, + "accent-2": #ff6e40, + "accent-3": #ff3d00, + "accent-4": #dd2c00 +); + +$brown: ( + "base": #795548, + "lighten-5": #efebe9, + "lighten-4": #d7ccc8, + "lighten-3": #bcaaa4, + "lighten-2": #a1887f, + "lighten-1": #8d6e63, + "darken-1": #6d4c41, + "darken-2": #5d4037, + "darken-3": #4e342e, + "darken-4": #3e2723 +); + +$blue-grey: ( + "base": #607d8b, + "lighten-5": #eceff1, + "lighten-4": #cfd8dc, + "lighten-3": #b0bec5, + "lighten-2": #90a4ae, + "lighten-1": #78909c, + "darken-1": #546e7a, + "darken-2": #455a64, + "darken-3": #37474f, + "darken-4": #263238 +); + +$grey: ( + "base": #9e9e9e, + "lighten-5": #fafafa, + "lighten-4": #f5f5f5, + "lighten-3": #eeeeee, + "lighten-2": #e0e0e0, + "lighten-1": #bdbdbd, + "darken-1": #757575, + "darken-2": #616161, + "darken-3": #424242, + "darken-4": #212121 +); + +$shades: ( + "black": #000000, + "white": #FFFFFF, + "transparent": transparent +); + +$colors: ( + "materialize-red": $materialize-red, + "red": $red, + "pink": $pink, + "purple": $purple, + "deep-purple": $deep-purple, + "indigo": $indigo, + "blue": $blue, + "light-blue": $light-blue, + "cyan": $cyan, + "teal": $teal, + "green": $green, + "light-green": $light-green, + "lime": $lime, + "yellow": $yellow, + "amber": $amber, + "orange": $orange, + "deep-orange": $deep-orange, + "brown": $brown, + "blue-grey": $blue-grey, + "grey": $grey, + "shades": $shades +); + + +// Color Classes + +@each $color_name, $color in $colors { + @each $color_type, $color_value in $color { + @if $color_type == "base" { + .#{$color_name} { + background-color: $color_value !important; + } + .#{$color_name}-text { + color: $color_value !important; + } + } + @else if $color_name != "shades" { + .#{$color_name}.#{$color_type} { + background-color: $color_value !important; + } + .#{$color_name}-text.text-#{$color_type} { + color: $color_value !important; + } + } + } +} + +// Shade classes +@each $color, $color_value in $shades { + .#{$color} { + background-color: $color_value !important; + } + .#{$color}-text { + color: $color_value !important; + } +} + + +// usage: color("name_of_color", "type_of_color") +// to avoid to repeating map-get($colors, ...) + +@function color($color, $type) { + @if map-has-key($colors, $color) { + $curr_color: map-get($colors, $color); + @if map-has-key($curr_color, $type) { + @return map-get($curr_color, $type); + } + } + @warn "Unknown `#{name}` in $colors."; + @return null; +} + diff --git a/node_modules/materialize-css/sass/components/_dropdown.scss b/node_modules/materialize-css/sass/components/_dropdown.scss new file mode 100644 index 0000000..a958112 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_dropdown.scss @@ -0,0 +1,65 @@ +.dropdown-content { + @extend .z-depth-1; + background-color: $dropdown-bg-color; + margin: 0; + display: none; + min-width: 100px; + max-height: 650px; + overflow-y: auto; + opacity: 0; + position: absolute; + z-index: 999; + will-change: width, height; + + li { + 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, &.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: 16px; + color: $dropdown-color; + display: block; + 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; + } + } +} + +// Input field specificity bugfix +.input-field.col .dropdown-content [type="checkbox"] + label { + top: 1px; + left: 0; + height: 18px; +} + diff --git a/node_modules/materialize-css/sass/components/_global.scss b/node_modules/materialize-css/sass/components/_global.scss new file mode 100644 index 0000000..eadb8c2 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_global.scss @@ -0,0 +1,744 @@ +//Default styles + +html { + box-sizing: border-box; +} +*, *:before, *:after { + box-sizing: inherit; +} + +body { + // display: flex; + // min-height: 100vh; + // flex-direction: column; +} + +main { + // flex: 1 0 auto; +} + +ul { + &:not(.browser-default) { + padding-left: 0; + list-style-type: none; + + li { + list-style-type: none; + } + } +} + +a { + color: $link-color; + text-decoration: none; + + // Gets rid of tap active state + -webkit-tap-highlight-color: transparent; +} + + +// Positioning +.valign-wrapper { + display: flex; + align-items: center; + + .valign { + display: block; + } +} + + +// classic clearfix +.clearfix { + clear: both; +} + + +// Z-levels +.z-depth-0 { + box-shadow: none !important; +} +.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 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 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 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 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 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 { + transition: box-shadow .25s; + box-shadow: 0; +} + +.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); +} + +// Dividers + +.divider { + height: 1px; + overflow: hidden; + background-color: color("grey", "lighten-2"); +} + + +// Blockquote + +blockquote { + margin: 20px 0; + padding-left: 1.5rem; + border-left: 5px solid $primary-color; +} + +// Icon Styles + +i { + line-height: inherit; + + &.left { + float: left; + margin-right: 15px; + } + &.right { + float: right; + margin-left: 15px; + } + &.tiny { + font-size: 1rem; + } + &.small { + font-size: 2rem; + } + &.medium { + font-size: 4rem; + } + &.large { + font-size: 6rem; + } +} + +// Images +img.responsive-img, +video.responsive-video { + max-width: 100%; + height: auto; +} + + +// Pagination + +.pagination { + + li { + display: inline-block; + border-radius: 2px; + text-align: center; + 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; } + + &.active { background-color: $primary-color; } + + &.disabled a { + cursor: default; + color: #999; + } + + i { + font-size: 2rem; + } + } + + + li.pages ul li { + display: inline-block; + float: none; + } +} +@media #{$medium-and-down} { + .pagination { + width: 100%; + + li.prev, + li.next { + width: 10%; + } + + li.pages { + width: 80%; + overflow: hidden; + white-space: nowrap; + } + } +} + +// 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; + 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%); + } +} + +// Pushpin +.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 +**********************/ +.hide-on-small-only, .hide-on-small-and-down { + @media #{$small-and-down} { + display: none !important; + } +} +.hide-on-med-and-down { + @media #{$medium-and-down} { + display: none !important; + } +} +.hide-on-med-and-up { + @media #{$medium-and-up} { + display: none !important; + } +} +.hide-on-med-only { + @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { + display: none !important; + } +} +.hide-on-large-only { + @media #{$large-and-up} { + display: none !important; + } +} +.show-on-large { + @media #{$large-and-up} { + display: block !important; + } +} +.show-on-medium { + @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { + display: block !important; + } +} +.show-on-small { + @media #{$small-and-down} { + display: block !important; + } +} +.show-on-medium-and-up { + @media #{$medium-and-up} { + display: block !important; + } +} +.show-on-medium-and-down { + @media #{$medium-and-down} { + display: block !important; + } +} + + +// Center text on mobile +.center-on-small-only { + @media #{$small-and-down} { + text-align: center; + } +} + +// Footer +footer.page-footer { + padding-top: 20px; + background-color: $footer-bg-color; + + .footer-copyright { + overflow: hidden; + min-height: 50px; + display: flex; + align-items: center; + padding: 10px 0px; + color: rgba(255,255,255,.8); + background-color: rgba(51,51,51,.08); + @extend .light; + } +} + +// Tables +table, th, td { + border: none; +} + +table { + width:100%; + display: table; + + &.bordered > thead > tr, + &.bordered > tbody > tr { + border-bottom: 1px solid $table-border-color; + } + + &.striped > tbody { + > tr:nth-child(odd) { + background-color: $table-striped-color; + } + + > tr > td { + border-radius: 0; + } + } + + &.highlight > tbody > tr { + transition: background-color .25s ease; + &:hover { + background-color: $table-striped-color; + } + } + + &.centered { + thead tr th, tbody tr td { + text-align: center; + } + } + +} + +thead { + border-bottom: 1px solid $table-border-color; +} + +td, th{ + padding: 15px 5px; + display: table-cell; + text-align: left; + vertical-align: middle; + border-radius: 2px; +} + +// Responsive Table +@media #{$medium-and-down} { + + table.responsive-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + display: block; + position: relative; + + td:empty:before { + content: '\00a0'; + } + + th, + td { + margin: 0; + vertical-align: top; + } + + th { text-align: left; } + thead { + display: block; + float: left; + + tr { + display: block; + padding: 0 10px 0 0; + + th::before { + content: "\00a0"; + } + } + } + tbody { + display: block; + width: auto; + position: relative; + overflow-x: auto; + white-space: nowrap; + + tr { + display: inline-block; + vertical-align: top; + } + } + th { + display: block; + text-align: right; + } + td { + display: block; + min-height: 1.25em; + text-align: left; + } + tr { padding: 0 10px; } + + /* sort out borders */ + thead { + border: 0; + border-right: 1px solid $table-border-color; + } + + &.bordered { + th { border-bottom: 0; border-left: 0; } + td { border-left: 0; border-right: 0; border-bottom: 0; } + tr { border: 0; } + tbody tr { border-right: 1px solid $table-border-color; } + } + + } + +} + + +// Collections +.collection { + margin: $element-top-margin 0 $element-bottom-margin 0; + border: 1px solid $collection-border-color; + border-radius: 2px; + overflow: hidden; + position: relative; + + .collection-item { + background-color: $collection-bg-color; + line-height: $collection-line-height; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid $collection-border-color; + + // Avatar Collection + &.avatar { + min-height: 84px; + padding-left: 72px; + position: relative; + + .circle { + position: absolute; + width: 42px; + height: 42px; + overflow: hidden; + left: 15px; + display: inline-block; + vertical-align: middle; + } + i.circle { + font-size: 18px; + line-height: 42px; + color: #fff; + background-color: #999; + text-align: center; + } + + + .title { + font-size: 16px; + } + + p { + margin: 0; + } + + .secondary-content { + position: absolute; + top: 16px; + right: 16px; + } + + } + + + &:last-child { + border-bottom: none; + } + + &.active { + background-color: $collection-active-bg-color; + color: $collection-active-color; + + .secondary-content { + color: #fff; + } + } + } + a.collection-item{ + display: block; + transition: .25s; + color: $collection-link-color; + &:not(.active) { + &:hover { + background-color: $collection-hover-bg-color; + } + } + } + + &.with-header { + .collection-header { + background-color: $collection-bg-color; + border-bottom: 1px solid $collection-border-color; + padding: 10px 20px; + } + .collection-item { + padding-left: 30px; + } + .collection-item.avatar { + padding-left: 72px; + } + } + +} +// Made less specific to allow easier overriding +.secondary-content { + float: right; + color: $secondary-color; +} +.collapsible .collection { + margin: 0; + border: none; +} + + + +// Responsive Videos +.video-container { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + + iframe, object, embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +// Progress Bar +.progress { + position: relative; + height: 4px; + display: block; + width: 100%; + background-color: lighten($progress-bar-color, 40%); + border-radius: 2px; + margin: $element-top-margin 0 $element-bottom-margin 0; + overflow: hidden; + .determinate { + position: absolute; + top: 0; + left: 0; + bottom: 0; + background-color: $progress-bar-color; + transition: width .3s linear; + } + .indeterminate { + background-color: $progress-bar-color; + &:before { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left:0; + bottom: 0; + will-change: left, right; + // Custom bezier + animation: indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite; + + } + &:after { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left:0; + bottom: 0; + will-change: left, right; + // Custom bezier + animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite; + animation-delay: 1.15s; + } + } +} +@keyframes indeterminate { + 0% { + left: -35%; + right:100%; + } + 60% { + left: 100%; + right: -90%; + } + 100% { + left: 100%; + right: -90%; + } +} + +@keyframes indeterminate-short { + 0% { + left: -200%; + right: 100%; + } + 60% { + left: 107%; + right: -8%; + } + 100% { + left: 107%; + right: -8%; + } +} + + +/******************* + Utility Classes +*******************/ + +.hide { + display: none !important; +} + +// Text Align +.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 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; +} + +.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; +} diff --git a/node_modules/materialize-css/sass/components/_grid.scss b/node_modules/materialize-css/sass/components/_grid.scss new file mode 100644 index 0000000..4ffc3ed --- /dev/null +++ b/node_modules/materialize-css/sass/components/_grid.scss @@ -0,0 +1,147 @@ +.container { + margin: 0 auto; + max-width: 1280px; + width: 90%; +} +@media #{$medium-and-up} { + .container { + width: 85%; + } +} +@media #{$large-and-up} { + .container { + width: 70%; + } +} +.container .row { + margin-left: (-1 * $gutter-width / 2); + margin-right: (-1 * $gutter-width / 2); +} + +.section { + padding-top: 1rem; + padding-bottom: 1rem; + + &.no-pad { + padding: 0; + } + &.no-pad-bot { + padding-bottom: 0; + } + &.no-pad-top { + padding-top: 0; + } +} + + +.row { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; + + // Clear floating children + &:after { + content: ""; + display: table; + clear: both; + } + + .col { + float: left; + 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: auto; + left: auto; + right: auto; + } + $i: $i + 1; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.offset-s#{$i} { + margin-left: $perc; + } + &.pull-s#{$i} { + right: $perc; + } + &.push-s#{$i} { + left: $perc; + } + $i: $i + 1; + } + + @media #{$medium-and-up} { + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.m#{$i} { + width: $perc; + margin-left: auto; + left: auto; + right: auto; + } + $i: $i + 1 + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.offset-m#{$i} { + margin-left: $perc; + } + &.pull-m#{$i} { + right: $perc; + } + &.push-m#{$i} { + left: $perc; + } + $i: $i + 1; + } + } + + @media #{$large-and-up} { + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.l#{$i} { + width: $perc; + margin-left: auto; + left: auto; + right: auto; + } + $i: $i + 1; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.offset-l#{$i} { + margin-left: $perc; + } + &.pull-l#{$i} { + right: $perc; + } + &.push-l#{$i} { + left: $perc; + } + $i: $i + 1; + } + } + } +} diff --git a/node_modules/materialize-css/sass/components/_icons-material-design.scss b/node_modules/materialize-css/sass/components/_icons-material-design.scss new file mode 100644 index 0000000..d8d91c1 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_icons-material-design.scss @@ -0,0 +1,5 @@ +/* This is needed for some mobile phones to display the Google Icon font properly */ +.material-icons { + text-rendering: optimizeLegibility; + font-feature-settings: 'liga'; +} diff --git a/node_modules/materialize-css/sass/components/_materialbox.scss b/node_modules/materialize-css/sass/components/_materialbox.scss new file mode 100644 index 0000000..0ebd63f --- /dev/null +++ b/node_modules/materialize-css/sass/components/_materialbox.scss @@ -0,0 +1,43 @@ +.materialboxed { + &:hover { + &:not(.active) { + opacity: .8; + } + } + + display: block; + cursor: zoom-in; + position: relative; + transition: opacity .4s; + -webkit-backface-visibility: hidden; + + &.active { + 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; +} \ No newline at end of file diff --git a/node_modules/materialize-css/sass/components/_mixins.scss b/node_modules/materialize-css/sass/components/_mixins.scss new file mode 100644 index 0000000..054f8f6 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_mixins.scss @@ -0,0 +1,5 @@ +// @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/node_modules/materialize-css/sass/components/_modal.scss b/node_modules/materialize-css/sass/components/_modal.scss new file mode 100644 index 0000000..0c540fe --- /dev/null +++ b/node_modules/materialize-css/sass/components/_modal.scss @@ -0,0 +1,90 @@ +.modal { + @extend .z-depth-4; + + 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 #{$medium-and-down} { + width: 80%; + } + + h1,h2,h3,h4 { + margin-top: 0; + } + + .modal-content { + padding: 24px; + } + .modal-close { + cursor: pointer; + } + + .modal-footer { + border-radius: 0 0 2px 2px; + background-color: #fafafa; + padding: 4px 6px; + height: 56px; + width: 100%; + + .btn, .btn-flat { + float: right; + margin: 6px 0; + } + } +} +.modal-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 with fixed action footer +.modal.modal-fixed-footer { + padding: 0; + height: 70%; + + .modal-content { + position: absolute; + height: calc(100% - 56px); + max-height: 100%; + width: 100%; + overflow-y: auto; + } + + .modal-footer { + border-top: 1px solid rgba(0,0,0,.1); + position: absolute; + bottom: 0; + } +} + +// Modal Bottom Sheet Style +.modal.bottom-sheet { + top: auto; + bottom: -100%; + margin: 0; + width: 100%; + max-height: 45%; + border-radius: 0; + will-change: bottom, opacity; +} diff --git a/node_modules/materialize-css/sass/components/_navbar.scss b/node_modules/materialize-css/sass/components/_navbar.scss new file mode 100644 index 0000000..ba6a256 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_navbar.scss @@ -0,0 +1,209 @@ +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-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%; + } + + @media #{$large-and-up} { + a.button-collapse { display: none; } + } + + + // Collapse button + .button-collapse { + float: left; + position: relative; + z-index: 1; + height: $navbar-height-mobile; + margin: 0 18px; + + i { + height: $navbar-height-mobile; + line-height: $navbar-line-height-mobile; + } + } + + + // Logo + .brand-logo { + position: absolute; + color: $navbar-font-color; + display: inline-block; + font-size: $navbar-brand-font-size; + padding: 0; + white-space: nowrap; + + &.center { + left: 50%; + transform: translateX(-50%); + } + + @media #{$medium-and-down} { + left: 50%; + transform: translateX(-50%); + + &.left, &.right { + padding: 0; + transform: none; + } + + &.left { left: 0.5rem; } + &.right { + right: 0.5rem; + left: auto; + } + } + + &.right { + 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; + } + + + // Navbar Links + ul { + margin: 0; + + li { + transition: background-color .3s; + float: left; + padding: 0; + + &.active { + background-color: rgba(0,0,0,.1); + } + } + a { + 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 { + float: left; + } + } + + // Navbar Search Form + form { + height: 100%; + } + + .input-field { + margin: 0; + height: 100%; + + input { + height: 100%; + font-size: 1.2rem; + border: none; + padding-left: 2rem; + + &:focus, &[type=text]:valid, &[type=password]:valid, + &[type=email]:valid, &[type=url]:valid, &[type=date]:valid { + border: none; + box-shadow: none; + } + } + + label { + top: 0; + left: 0; + + i { + color: rgba(255,255,255,.7); + transition: color .3s; + } + &.active i { color: $navbar-font-color; } + } + } +} + +// Fixed Navbar +.navbar-fixed { + position: relative; + height: $navbar-height-mobile; + 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-line-height; + } + .navbar-fixed { + height: $navbar-height; + } +} diff --git a/node_modules/materialize-css/sass/components/_normalize.scss b/node_modules/materialize-css/sass/components/_normalize.scss new file mode 100644 index 0000000..5e5e3c8 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_normalize.scss @@ -0,0 +1,424 @@ +/*! 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; /* 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/10/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 of focused elements when they are also in an + * active/hover state. + */ + +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 { + 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. + */ + +button, +html input[type="button"], /* 1 */ +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. + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ +} + +/** + * 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; +} diff --git a/node_modules/materialize-css/sass/components/_prefixer.scss b/node_modules/materialize-css/sass/components/_prefixer.scss new file mode 100644 index 0000000..13376de --- /dev/null +++ b/node_modules/materialize-css/sass/components/_prefixer.scss @@ -0,0 +1,384 @@ +//--------------------------------------------------- +// 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])* +// perspective($pixels) +// 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); +// } + +// Perspective +@mixin perspective($pixels) { + perspective: $pixels; + -webkit-perspective: $pixels; +} + + +// 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/node_modules/materialize-css/sass/components/_preloader.scss b/node_modules/materialize-css/sass/components/_preloader.scss new file mode 100644 index 0000000..31e1600 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_preloader.scss @@ -0,0 +1,334 @@ +/* + @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; + + &.small { + width: 36px; + height: 36px; + } + + &.big { + width: 64px; + height: 64px; + } + + &.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; + border-color: $spinner-default-color; +} + +.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, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.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, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.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, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.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, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + 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, +.active .spinner-layer.spinner-green-only { + /* durations: 4 * ARCTIME */ + opacity: 1; + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +@-webkit-keyframes fill-unfill-rotate { + 12.5% { -webkit-transform: rotate(135deg); } /* 0.5 * ARCSIZE */ + 25% { -webkit-transform: rotate(270deg); } /* 1 * ARCSIZE */ + 37.5% { -webkit-transform: rotate(405deg); } /* 1.5 * ARCSIZE */ + 50% { -webkit-transform: rotate(540deg); } /* 2 * ARCSIZE */ + 62.5% { -webkit-transform: rotate(675deg); } /* 2.5 * ARCSIZE */ + 75% { -webkit-transform: rotate(810deg); } /* 3 * ARCSIZE */ + 87.5% { -webkit-transform: rotate(945deg); } /* 3.5 * ARCSIZE */ + to { -webkit-transform: rotate(1080deg); } /* 4 * ARCSIZE */ +} + +@keyframes fill-unfill-rotate { + 12.5% { transform: rotate(135deg); } /* 0.5 * ARCSIZE */ + 25% { transform: rotate(270deg); } /* 1 * ARCSIZE */ + 37.5% { transform: rotate(405deg); } /* 1.5 * ARCSIZE */ + 50% { transform: rotate(540deg); } /* 2 * ARCSIZE */ + 62.5% { transform: rotate(675deg); } /* 2.5 * ARCSIZE */ + 75% { transform: rotate(810deg); } /* 3 * ARCSIZE */ + 87.5% { transform: rotate(945deg); } /* 3.5 * ARCSIZE */ + to { transform: rotate(1080deg); } /* 4 * ARCSIZE */ +} + +@-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 { + 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; + } + + &.left .circle { + left: 0; + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + transform: rotate(129deg); + } + &.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, 0.2, 1) infinite both; + animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .circle-clipper.right .circle { + /* duration: ARCTIME */ + -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: right-spin 1333ms cubic-bezier(0.4, 0.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, 0.2, 1); + animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1); +} + +@-webkit-keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} \ No newline at end of file diff --git a/node_modules/materialize-css/sass/components/_roboto.scss b/node_modules/materialize-css/sass/components/_roboto.scss new file mode 100644 index 0000000..741ab5b --- /dev/null +++ b/node_modules/materialize-css/sass/components/_roboto.scss @@ -0,0 +1,49 @@ +@font-face { + font-family: "Roboto"; + src: local(Roboto Thin), url('#{$roboto-font-path}Roboto-Thin.eot'); + src: url("#{$roboto-font-path}Roboto-Thin.eot?#iefix") format('embedded-opentype'), + 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; +} +@font-face { + font-family: "Roboto"; + src: local(Roboto Light), url('#{$roboto-font-path}Roboto-Light.eot'); + src: url("#{$roboto-font-path}Roboto-Light.eot?#iefix") format('embedded-opentype'), + 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"); + font-weight: 300; +} + +@font-face { + font-family: "Roboto"; + src: local(Roboto Regular), url('#{$roboto-font-path}Roboto-Regular.eot'); + src: url("#{$roboto-font-path}Roboto-Regular.eot?#iefix") format('embedded-opentype'), + 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"); + font-weight: 400; +} + +@font-face { + font-family: "Roboto"; + src: url('#{$roboto-font-path}Roboto-Medium.eot'); + src: url("#{$roboto-font-path}Roboto-Medium.eot?#iefix") format('embedded-opentype'), + 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"); + font-weight: 500; +} + +@font-face { + font-family: "Roboto"; + src: url('#{$roboto-font-path}Roboto-Bold.eot'); + src: url("#{$roboto-font-path}Roboto-Bold.eot?#iefix") format('embedded-opentype'), + 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"); + font-weight: 700; +} diff --git a/node_modules/materialize-css/sass/components/_sideNav.scss b/node_modules/materialize-css/sass/components/_sideNav.scss new file mode 100644 index 0000000..9a38ed4 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_sideNav.scss @@ -0,0 +1,208 @@ +.side-nav { + position: fixed; + width: 300px; + left: 0; + top: 0; + margin: 0; + transform: translateX(-100%); + height: 100%; + height: calc(100% + 60px); + height: -moz-calc(100%); //Temporary Firefox Fix + padding-bottom: 60px; + background-color: $sidenav-bg-color; + z-index: 999; + overflow-y: auto; + will-change: transform; + backface-visibility: hidden; + transform: translateX(-105%); + + @extend .z-depth-1; + + // Right Align + &.right-aligned { + right: 0; + transform: translateX(105%); + left: auto; + transform: translateX(100%); + } + + .collapsible { + margin: 0; + } + + + li { + float: none; + line-height: $sidenav-line-height; + + &.active { background-color: rgba(0,0,0,.05); } + } + + a { + color: $sidenav-font-color; + display: block; + 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; } + } + + li > a > i, + li > a > [class^="mdi-"], li > a > [class*="mdi-"], + li > a > 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; + } + + .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; + } + } +} + + +// Touch interaction +.drag-target { + height: 100%; + width: 10px; + position: fixed; + top: 0; + z-index: 998; +} + + +// Fixed side-nav shown +.side-nav.fixed { + left: 0; + transform: translateX(0); + position: fixed; + + // Right Align + &.right-aligned { + right: 0; + left: auto; + } +} + +// Fixed sideNav hide on smaller +@media #{$medium-and-down} { + .side-nav { + &.fixed { + transform: translateX(-105%); + + &.right-aligned { + transform: translateX(105%); + } + } + + a { + padding: 0 $sidenav-padding; + } + + .userView { + padding: $sidenav-padding $sidenav-padding 0; + } + } +} + + +.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; + } +} + + +#sidenav-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + + height: 120vh; + background-color: rgba(0,0,0,.5); + z-index: 997; + + will-change: opacity; +} diff --git a/node_modules/materialize-css/sass/components/_slider.scss b/node_modules/materialize-css/sass/components/_slider.scss new file mode 100644 index 0000000..2265cdb --- /dev/null +++ b/node_modules/materialize-css/sass/components/_slider.scss @@ -0,0 +1,92 @@ +.slider { + position: relative; + height: 400px; + width: 100%; + + // Fullscreen slider + &.fullscreen { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + + ul.slides { + height: 100%; + } + + ul.indicators { + z-index: 2; + bottom: 30px; + } + } + + .slides { + background-color: $slider-bg-color; + margin: 0; + height: 400px; + + li { + opacity: 0; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: inherit; + overflow: hidden; + + img { + height: 100%; + width: 100%; + background-size: cover; + background-position: center; + } + + .caption { + color: #fff; + position: absolute; + top: 15%; + left: 15%; + width: 70%; + opacity: 0; + + p { color: $slider-bg-color-light; } + } + + &.active { + z-index: 2; + } + } + } + + + .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; + + .indicator-item { + display: inline-block; + position: relative; + cursor: pointer; + height: 16px; + width: 16px; + margin: 0 12px; + background-color: $slider-bg-color-light; + + transition: background-color .3s; + border-radius: 50%; + + &.active { + background-color: $slider-indicator-color; + } + } + } + +} \ No newline at end of file diff --git a/node_modules/materialize-css/sass/components/_table_of_contents.scss b/node_modules/materialize-css/sass/components/_table_of_contents.scss new file mode 100644 index 0000000..4c67ee6 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_table_of_contents.scss @@ -0,0 +1,33 @@ +/*************** + Nav List +***************/ +.table-of-contents { + &.fixed { + position: fixed; + } + + li { + padding: 2px 0; + } + 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; + + &:hover { + color: lighten(#757575, 20%); + padding-left: 19px; + border-left: 1px solid $primary-color; + } + &.active { + font-weight: 500; + padding-left: 18px; + border-left: 2px solid $primary-color; + } + } +} diff --git a/node_modules/materialize-css/sass/components/_tabs.scss b/node_modules/materialize-css/sass/components/_tabs.scss new file mode 100644 index 0000000..6d79538 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_tabs.scss @@ -0,0 +1,99 @@ +.tabs { + &.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 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + } + } + + position: relative; + overflow-x: auto; + overflow-y: hidden; + height: 48px; + width: 100%; + background-color: $tabs-bg-color; + margin: 0 auto; + white-space: nowrap; + + .tab { + display: inline-block; + text-align: center; + line-height: 48px; + height: 48px; + padding: 0; + margin: 0; + text-transform: uppercase; + + a { + &:hover, + &.active { + background-color: transparent; + color: $tabs-text-color; + } + + color: rgba($tabs-text-color, .7); + display: block; + width: 100%; + height: 100%; + padding: 0 24px; + font-size: 14px; + text-overflow: ellipsis; + overflow: hidden; + transition: color .28s ease; + } + + &.disabled a, + &.disabled a:hover { + color: rgba($tabs-text-color, .7); + cursor: default; + } + } + .indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: $tabs-underline-color; + will-change: left, right; + } +} + +// Fixed sideNav hide on smaller +@media #{$medium-and-down} { + .tabs { + display: flex; + + .tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + + a { + padding: 0 12px; + } + } + } +} diff --git a/node_modules/materialize-css/sass/components/_toast.scss b/node_modules/materialize-css/sass/components/_toast.scss new file mode 100644 index 0000000..7670cfa --- /dev/null +++ b/node_modules/materialize-css/sass/components/_toast.scss @@ -0,0 +1,65 @@ +#toast-container { + display:block; + position: fixed; + z-index: 10000; + + @media #{$small-and-down} { + min-width: 100%; + bottom: 0%; + } + @media #{$medium-only} { + left: 5%; + bottom: 7%; + max-width: 90%; + } + @media #{$large-and-up} { + top: 10%; + right: 7%; + max-width: 86%; + } +} + +.toast { + @extend .z-depth-1; + border-radius: 2px; + top: 35px; + width: auto; + clear: both; + margin-top: 10px; + position: relative; + max-width:100%; + height: auto; + min-height: $toast-height; + line-height: 1.5em; + word-break: break-all; + background-color: $toast-color; + padding: 10px 25px; + font-size: 1.1rem; + font-weight: 300; + color: $toast-text-color; + + display: flex; + align-items: center; + justify-content: space-between; + + .btn, .btn-flat { + margin: 0; + margin-left: 3rem; + } + + &.rounded{ + border-radius: 24px; + } + + @media #{$small-and-down} { + width:100%; + border-radius: 0; + } + @media #{$medium-only} { + float: left; + } + @media #{$large-and-up} { + float: right; + } + +} diff --git a/node_modules/materialize-css/sass/components/_tooltip.scss b/node_modules/materialize-css/sass/components/_tooltip.scss new file mode 100644 index 0000000..8224a8e --- /dev/null +++ b/node_modules/materialize-css/sass/components/_tooltip.scss @@ -0,0 +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: 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; + transform-origin: 50% 0%; + visibility: hidden; +} diff --git a/node_modules/materialize-css/sass/components/_transitions.scss b/node_modules/materialize-css/sass/components/_transitions.scss new file mode 100644 index 0000000..9c3660a --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/sass/components/_typography.scss b/node_modules/materialize-css/sass/components/_typography.scss new file mode 100644 index 0000000..5301c80 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_typography.scss @@ -0,0 +1,61 @@ + +a { + text-decoration: none; +} + +html{ + line-height: 1.5; + + @media only screen and (min-width: 0) { + font-size: 14px; + } + + @media only screen and (min-width: $medium-screen) { + font-size: 14.5px; + } + + @media only screen and (min-width: $large-screen) { + font-size: 15px; + } + + font-family: "Roboto", sans-serif; + font-weight: normal; + color: $off-black; +} +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.1; +} + +// Header Styles +h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } +h1 { font-size: $h1-fontsize; line-height: 110%; margin: ($h1-fontsize / 2) 0 ($h1-fontsize / 2.5) 0;} +h2 { font-size: $h2-fontsize; line-height: 110%; margin: ($h2-fontsize / 2) 0 ($h2-fontsize / 2.5) 0;} +h3 { font-size: $h3-fontsize; line-height: 110%; margin: ($h3-fontsize / 2) 0 ($h3-fontsize / 2.5) 0;} +h4 { font-size: $h4-fontsize; line-height: 110%; margin: ($h4-fontsize / 2) 0 ($h4-fontsize / 2.5) 0;} +h5 { font-size: $h5-fontsize; line-height: 110%; margin: ($h5-fontsize / 2) 0 ($h5-fontsize / 2.5) 0;} +h6 { font-size: $h6-fontsize; line-height: 110%; margin: ($h6-fontsize / 2) 0 ($h6-fontsize / 2.5) 0;} + +// Text Styles +em { font-style: italic; } +strong { font-weight: 500; } +small { font-size: 75%; } +.light { font-weight: 300; } +.thin { font-weight: 200; } + + +.flow-text{ + font-weight: 300; + $i: 0; + @while $i <= $intervals { + @media only screen and (min-width : 360 + ($i * $interval-size)) { + font-size: 1.2rem * (1 + (.02 * $i)); + } + $i: $i + 1; + } + + // Handle below 360px screen + @media only screen and (max-width: 360px) { + font-size: 1.2rem; + } +} \ No newline at end of file diff --git a/node_modules/materialize-css/sass/components/_variables.scss b/node_modules/materialize-css/sass/components/_variables.scss new file mode 100644 index 0000000..0a706d3 --- /dev/null +++ b/node_modules/materialize-css/sass/components/_variables.scss @@ -0,0 +1,319 @@ +// ========================================================================== +// Materialize variables +// ========================================================================== +// +// Table of Contents: +// +// 1. Colors +// 2. Badges +// 3. Buttons +// 4. Cards +// 5. Collapsible +// 6. Chips +// 7. Date Picker +// 8. Dropdown +// 10. Forms +// 11. Global +// 12. Grid +// 13. Navigation Bar +// 14. Side Navigation +// 15. Photo Slider +// 16. Spinners | Loaders +// 17. Tabs +// 18. Tables +// 19. Toasts +// 20. Typography +// 21. Footer +// 22. Flow Text +// 23. Collections +// 24. 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; + +$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; + + +// 2. Badges +// ========================================================================== + +$badge-bg-color: $secondary-color !default; +$badge-height: 22px !default; + + +// 3. Buttons +// ========================================================================== + +// Shared styles +$button-border: none !default; +$button-background-focus: lighten($secondary-color, 4%) !default; +$button-font-size: 1.3rem !default; +$button-height: 36px !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-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; + + +// 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; + + +// 5. Collapsible +// ========================================================================== + +$collapsible-height: 3rem !default; +$collapsible-line-height: $collapsible-height !default; +$collapsible-header-color: #fff !default; +$collapsible-border-color: #ddd !default; + + +// 6. Chips +// ========================================================================== + +$chip-bg-color: #e4e4e4 !default; +$chip-border-color: #9e9e9e !default; +$chip-selected-color: #26a69a !default; +$chip-margin: 5px !default; + + +// 7. 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; + + +// 8. Dropdown +// ========================================================================== + +$dropdown-bg-color: #fff !default; +$dropdown-hover-bg-color: #eee !default; +$dropdown-color: $secondary-color !default; +$dropdown-item-height: 50px !default; + + +// 9. Fonts +// ========================================================================== + +$roboto-font-path: "../fonts/roboto/" !default; + + +// 10. Forms +// ========================================================================== + +// Text Inputs + Textarea +$input-height: 3rem !default; +$input-border-color: color("grey", "base") !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: 0 0 20px 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-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-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-unchecked-bg: #F1F1F1 !default; +$switch-unchecked-lever-bg: #818181 !default; +$switch-radius: 15px !default; + + +// 11. Global +// ========================================================================== + +// Media Query Ranges +$small-screen-up: 601px !default; +$medium-screen-up: 993px !default; +$large-screen-up: 1201px !default; +$small-screen: 600px !default; +$medium-screen: 992px !default; +$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; +$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; + + +// 12. 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; + + +// 13. 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; + +// 14. Side Navigation +// ========================================================================== + +$sidenav-font-size: 14px !default; +$sidenav-font-color: rgba(0,0,0,.87) !default; +$sidenav-bg-color: #fff !default; +$sidenav-padding: 16px !default; +$sidenav-item-height: 48px !default; +$sidenav-line-height: $sidenav-item-height !default; + + +// 15. 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; + + +// 16. Spinners | Loaders +// ========================================================================== + +$spinner-default-color: $secondary-color !default; + + +// 17. Tabs +// ========================================================================== + +$tabs-underline-color: $primary-color-light !default; +$tabs-text-color: $primary-color !default; +$tabs-bg-color: #fff !default; + + +// 18. Tables +// ========================================================================== + +$table-border-color: #d0d0d0 !default; +$table-striped-color: #f2f2f2 !default; + + +// 19. Toasts +// ========================================================================== + +$toast-height: 48px !default; +$toast-color: #323232 !default; +$toast-text-color: #fff !default; + + +// 20. Typography +// ========================================================================== + +$off-black: rgba(0, 0, 0, 0.87) !default; +// Header Styles +$h1-fontsize: 4.2rem !default; +$h2-fontsize: 3.56rem !default; +$h3-fontsize: 2.92rem !default; +$h4-fontsize: 2.28rem !default; +$h5-fontsize: 1.64rem !default; +$h6-fontsize: 1rem !default; + + +// 21. Footer +// ========================================================================== + +$footer-bg-color: $primary-color !default; + + +// 22. Flow Text +// ========================================================================== + +$range : $large-screen - $small-screen !default; +$intervals: 20 !default; +$interval-size: $range / $intervals !default; + + +// 23. 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; + + +// 24. Progress Bar +// ========================================================================== + +$progress-bar-color: $secondary-color !default; diff --git a/node_modules/materialize-css/sass/components/_waves.scss b/node_modules/materialize-css/sass/components/_waves.scss new file mode 100644 index 0000000..5a3229b --- /dev/null +++ b/node_modules/materialize-css/sass/components/_waves.scss @@ -0,0 +1,114 @@ + +/*! + * 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; + 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; + z-index: -1; + } +} + +.waves-notransition { + transition: none #{"!important"}; +} + +.waves-circle { + 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-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 */ +.waves-effect .waves-ripple { + z-index: -1; +} \ No newline at end of file diff --git a/node_modules/materialize-css/sass/components/date_picker/_default.date.scss b/node_modules/materialize-css/sass/components/date_picker/_default.date.scss new file mode 100644 index 0000000..84e96b5 --- /dev/null +++ b/node_modules/materialize-css/sass/components/date_picker/_default.date.scss @@ -0,0 +1,435 @@ +/* ========================================================================== + $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 { +// font-weight: 500; + 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; +} + +// Modified +.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: $datepicker-focus; +} +/** + * 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; +} +//@media (min-width: 24.5em) { +// .picker__nav--prev, +// .picker__nav--next { +// top: -0.33em; +// } +//} +.picker__nav--prev { + left: -1em; + padding-right: 1.25em; +} +//@media (min-width: 24.5em) { +// .picker__nav--prev { +// padding-right: 1.5em; +// } +//} +.picker__nav--next { + right: -1em; + padding-left: 1.25em; +} +//@media (min-width: 24.5em) { +// .picker__nav--next { +// padding-left: 1.5em; +// } +//} + +.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--today:before { +// content: " "; +// position: absolute; +// top: 2px; +// right: 2px; +// width: 0; +// height: 0; +// border-top: 0.5em solid #0059bc; +// border-left: .5em 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; +// background: #b1dcfb; + font-weight: 500; +} + + +.picker__day--highlighted { +// border-color: #0089ec; +} +.picker__day--highlighted:hover, +.picker--focused .picker__day--highlighted { + cursor: pointer; +// color: #000000; +// background: #b1dcfb; +// font-weight: 500; +} +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { + + +// Circle background + border-radius: 50%; + 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: $datepicker-focus; + 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: $datepicker-date-bg; + color: #fff; + padding-bottom: 15px; + font-weight: 300; +} + +.picker__nav--prev:hover, +.picker__nav--next:hover { + cursor: pointer; + color: #000000; + background: $datepicker-selected-outfocus; +} + +.picker__weekday-display { + background-color: $datepicker-weekday-bg; + 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: $datepicker-year; +} + +.picker__box { + padding: 0; +} +.picker__calendar-container { + padding: 0 1rem; + + thead { + border: none; + } +} + +// Calendar +.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; +} + +//Today style +.picker__day.picker__day--today { + color: $datepicker-selected; +} + +.picker__day.picker__day--today.picker__day--selected { + color: #fff; +} + +// Table Header +.picker__weekday { + font-size: .9rem; +} + + +.picker__day--selected, +.picker__day--selected:hover, +.picker--focused .picker__day--selected { + // Circle background + border-radius: 50%; + transform: scale(.9); + background-color: $datepicker-selected; + &.picker__day--outfocus { + background-color: $datepicker-selected-outfocus; + } + color: #ffffff; +} + +.picker__footer { + text-align: right; + padding: 5px 10px; +} + +// Materialize modified +.picker__close, .picker__today { + font-size: 1.1rem; + padding: 0 1rem; + color: $datepicker-selected; +} + +//month nav buttons +.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: $datepicker-selected-outfocus; +} diff --git a/node_modules/materialize-css/sass/components/date_picker/_default.scss b/node_modules/materialize-css/sass/components/date_picker/_default.scss new file mode 100644 index 0000000..971fbc7 --- /dev/null +++ b/node_modules/materialize-css/sass/components/date_picker/_default.scss @@ -0,0 +1,201 @@ +/* ========================================================================== + $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; + +// picker width + 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: 26.5em) { +// .picker__box { +//// font-size: 1.25em; +// } +//} +@media (min-height: 28.875em) { + .picker__box { + display: block; + +// picker header font-size +// font-size: 1rem; + + 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); + } +} +//@media (min-height: 40.125em) { +// .picker__box { +// font-size: 1.1rem; +// border-bottom-width: 1px; +// -webkit-border-radius: 5px; +// -moz-border-radius: 5px; +// border-radius: 5px; +// } +//} +/** + * 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: auto; + } +} +/** + * For `large` screens, transform into an inline picker. + */ + +/* ========================================================================== + CUSTOM MATERIALIZE STYLES + ========================================================================== */ + +.picker__input.picker__input--active { + border-color: color("blue", "lighten-5"); +} + +.picker__frame { + margin: 0 auto; + max-width: 325px; +} + +@media (min-height: 38.875em) { + .picker--opened .picker__frame { + top: 10%; + bottom: auto; + } +} diff --git a/node_modules/materialize-css/sass/components/date_picker/_default.time.scss b/node_modules/materialize-css/sass/components/date_picker/_default.time.scss new file mode 100644 index 0000000..0b159c8 --- /dev/null +++ b/node_modules/materialize-css/sass/components/date_picker/_default.time.scss @@ -0,0 +1,125 @@ +/* ========================================================================== + $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/node_modules/materialize-css/sass/components/forms/_checkboxes.scss b/node_modules/materialize-css/sass/components/forms/_checkboxes.scss new file mode 100644 index 0000000..a8743c1 --- /dev/null +++ b/node_modules/materialize-css/sass/components/forms/_checkboxes.scss @@ -0,0 +1,220 @@ +/* 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; + opacity: 0; +} + +// 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, + &: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; + + -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-background; + border-bottom: 2px solid $input-background; + -webkit-transform: rotateZ(37deg); + transform: rotateZ(37deg); + + -webkit-transform-origin: 100% 100%; + 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/node_modules/materialize-css/sass/components/forms/_file-input.scss b/node_modules/materialize-css/sass/components/forms/_file-input.scss new file mode 100644 index 0000000..3b3fe55 --- /dev/null +++ b/node_modules/materialize-css/sass/components/forms/_file-input.scss @@ -0,0 +1,38 @@ +/* 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] { + 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/node_modules/materialize-css/sass/components/forms/_forms.scss b/node_modules/materialize-css/sass/components/forms/_forms.scss new file mode 100644 index 0000000..e9b65b4 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/sass/components/forms/_input-fields.scss b/node_modules/materialize-css/sass/components/forms/_input-fields.scss new file mode 100644 index 0000000..94e62c4 --- /dev/null +++ b/node_modules/materialize-css/sass/components/forms/_input-fields.scss @@ -0,0 +1,286 @@ +/* Text Inputs + Textarea + ========================================================================== */ + +/* Style Placeholders */ + +::-webkit-input-placeholder { + color: $placeholder-text-color; +} + +:-moz-placeholder { /* Firefox 18- */ + color: $placeholder-text-color; +} + +::-moz-placeholder { /* Firefox 19+ */ + color: $placeholder-text-color; +} + +:-ms-input-placeholder { + color: $placeholder-text-color; +} + +/* Text inputs */ + +input:not([type]), +input[type=text], +input[type=password], +input[type=email], +input[type=url], +input[type=time], +input[type=date], +input[type=datetime], +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: $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 { + 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: $input-invalid-border; + 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; + } + + // Full width label when using validate for error messages + &.validate + label { + width: 100%; + pointer-events: none; + } + + // Form Message Shared Styles + & + label:after { + display: block; + content: ""; + position: absolute; + top: 60px; + 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.8rem; + left: 0; + font-size: 1rem; + cursor: text; + transition: .2s ease-out; + + &:not(.label-icon).active { + font-size: $label-font-size; + transform: translateY(-140%); + } + } + + // 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; + padding-left: 4rem; + width: calc(100% - 4rem); + + &: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 { + 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 */ +} + + +/* Autocomplete */ +.autocomplete-content { + margin-top: -15px; + 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/node_modules/materialize-css/sass/components/forms/_radio-buttons.scss b/node_modules/materialize-css/sass/components/forms/_radio-buttons.scss new file mode 100644 index 0000000..b59dbfb --- /dev/null +++ b/node_modules/materialize-css/sass/components/forms/_radio-buttons.scss @@ -0,0 +1,117 @@ +/* Radio Buttons + ========================================================================== */ + +// Remove default Radio Buttons +[type="radio"]:not(:checked), +[type="radio"]:checked { + position: absolute; + left: -9999px; + opacity: 0; +} + +[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; + + -khtml-user-select: none; /* webkit (konqueror) browsers */ + 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/node_modules/materialize-css/sass/components/forms/_range.scss b/node_modules/materialize-css/sass/components/forms/_range.scss new file mode 100644 index 0000000..7947375 --- /dev/null +++ b/node_modules/materialize-css/sass/components/forms/_range.scss @@ -0,0 +1,159 @@ +/* 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; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: $radio-fill-color; + top: 10px; + margin-left: -6px; + + 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/node_modules/materialize-css/sass/components/forms/_select.scss b/node_modules/materialize-css/sass/components/forms/_select.scss new file mode 100644 index 0000000..687d497 --- /dev/null +++ b/node_modules/materialize-css/sass/components/forms/_select.scss @@ -0,0 +1,121 @@ +/* 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; +} + +.select-label { + position: absolute; +} + +.select-wrapper { + 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; + } + + span.caret { + color: initial; + position: absolute; + right: 0; + top: 0; + bottom: 0; + height: 10px; + margin: auto 0; + font-size: 10px; + line-height: 10px; + + &.disabled { + color: $input-disabled-color; + } + } + + & + label { + position: absolute; + top: -14px; + font-size: $label-font-size; + } +} + +// 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: $select-disabled-color; +} + +.select-dropdown li.disabled, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { + color: $select-disabled-color; + background-color: transparent; +} + +// 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/node_modules/materialize-css/sass/components/forms/_switches.scss b/node_modules/materialize-css/sass/components/forms/_switches.scss new file mode 100644 index 0000000..2c6655a --- /dev/null +++ b/node_modules/materialize-css/sass/components/forms/_switches.scss @@ -0,0 +1,78 @@ +/* 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; + + &:checked + .lever { + background-color: $switch-checked-lever-bg; + + &:after { + background-color: $switch-bg-color; + left: 24px; + } + } +} + +.switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 40px; + height: 15px; + background-color: $switch-unchecked-lever-bg; + border-radius: $switch-radius; + margin-right: 10px; + transition: background 0.3s ease; + vertical-align: middle; + margin: 0 16px; + + &: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, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::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, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::after { + box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px rgba(0, 0, 0, .08); +} + +// 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; +} diff --git a/node_modules/materialize-css/sass/ghpages-materialize.scss b/node_modules/materialize-css/sass/ghpages-materialize.scss new file mode 100644 index 0000000..b7ac59f --- /dev/null +++ b/node_modules/materialize-css/sass/ghpages-materialize.scss @@ -0,0 +1,7 @@ +@charset "UTF-8"; + +// import materialize +@import "materialize"; + +// Custom style +@import "style"; diff --git a/node_modules/materialize-css/sass/materialize.scss b/node_modules/materialize-css/sass/materialize.scss new file mode 100644 index 0000000..9f5ce84 --- /dev/null +++ b/node_modules/materialize-css/sass/materialize.scss @@ -0,0 +1,42 @@ +@charset "UTF-8"; + +// Mixins +// @import "components/prefixer"; +@import "components/mixins"; +@import "components/color"; + +// Variables; +@import "components/variables"; + +// Reset +@import "components/normalize"; + +// 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"; +@import "components/tooltip"; +@import "components/buttons"; +@import "components/dropdown"; +@import "components/waves"; +@import "components/modal"; +@import "components/collapsible"; +@import "components/chips"; +@import "components/materialbox"; +@import "components/forms/forms"; +@import "components/table_of_contents"; +@import "components/sideNav"; +@import "components/preloader"; +@import "components/slider"; +@import "components/carousel"; +@import "components/date_picker/default"; +@import "components/date_picker/default.date"; +@import "components/date_picker/default.time"; diff --git a/node_modules/materialize-css/scrollfire.html b/node_modules/materialize-css/scrollfire.html new file mode 100644 index 0000000..fa313ee --- /dev/null +++ b/node_modules/materialize-css/scrollfire.html @@ -0,0 +1,326 @@ + + + + + + + + + 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: customCallbackFunc } },
                +    {selector: '.other-class', offset: 200, callback: function() {
                +      customCallbackFunc();
                +    } },
                +  ];
                +  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.
                callbackExecute 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);
                +        
                + + + +
                + + + +
                + +
                +
                +
                + + +
                + +
                +
                + +
                +
                + + + + +
                +
                +
                +
                +
                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/node_modules/materialize-css/scrollspy.html b/node_modules/materialize-css/scrollspy.html new file mode 100644 index 0000000..fd03a95 --- /dev/null +++ b/node_modules/materialize-css/scrollspy.html @@ -0,0 +1,273 @@ + + + + + + + + + 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();
                +  });
                +        
                +
                + + +
                +

                jQuery Plugin Options

                + + + + + + + + + + + + + + +
                Option NameDescription
                scrollOffsetOffset for centering element when scrolled to. Default: 200
                +
                + +
                + + +
                +
                +
                + + +
                + +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                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/node_modules/materialize-css/shadow.html b/node_modules/materialize-css/shadow.html new file mode 100644 index 0000000..2307d8f --- /dev/null +++ b/node_modules/materialize-css/shadow.html @@ -0,0 +1,244 @@ + + + + + + + + + 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/node_modules/materialize-css/showcase.html b/node_modules/materialize-css/showcase.html new file mode 100644 index 0000000..b0ee4df --- /dev/null +++ b/node_modules/materialize-css/showcase.html @@ -0,0 +1,299 @@ + + + + + + + + + Showcase - Materialize + + + + + + + + + + + + + + + + +
                + + + +
                +
                +
                +
                +

                + Submit your site +

                + + +
                +
                + +
                + + +
                + +
                + +
                Emerald
                +
                +
                + +
                Caliber
                +
                +
                + +
                +
                + +
                Close Heat
                +
                +
                + +
                Stamplay
                +
                +
                + +
                RDX Sports
                +
                +
                + +
                + +
                + +
                Mako
                +
                +
                + +
                Straphq
                +
                +
                + +
                + + +
                + +
                Adbeus
                +
                +
                + +
                +
                + +
                Roboterwelt
                +
                +
                + +
                Joel Cox
                +
                + +
                + +
                +
                + +
                eadBox
                +
                +
                + +
                Webonise
                +
                +
                + +
                Kenya Apps
                +
                + +
                + +
                + +
                + + +
                + + + + + +
                +
                +
                +
                +
                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/node_modules/materialize-css/side-nav.html b/node_modules/materialize-css/side-nav.html new file mode 100644 index 0000000..b3d6de4 --- /dev/null +++ b/node_modules/materialize-css/side-nav.html @@ -0,0 +1,365 @@ + + + + + + + + + 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.

                + + Side nav demo + + + +

                HTML Structure

                +
                
                +  <ul id="slide-out" class="side-nav">
                +    <li><div class="userView">
                +      <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="material-icons">menu</i></a>
                +        
                +
                + +
                +

                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 300
                +      edge: 'right', // Choose the horizontal origin
                +      closeOnClick: true, // Closes side-nav on <a> clicks, useful for Angular/Meteor
                +      draggable: true // Choose whether you can drag to open on touch screens
                +    }
                +  );
                +        
                +
                + +
                +

                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

                +

                + 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>
                +    </ul>
                +    <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.

                + +
                
                +    <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: 300px;
                +    }
                +
                +    @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/node_modules/materialize-css/sitemap.xml b/node_modules/materialize-css/sitemap.xml new file mode 100644 index 0000000..4371dc7 --- /dev/null +++ b/node_modules/materialize-css/sitemap.xml @@ -0,0 +1,43 @@ + + + + http://materializecss.com/about.html + 2014-11-27 + + + http://materializecss.com/badges.html + 2014-11-27 + + + http://materializecss.com/index.html + 2014-11-27 + + + http://materializecss.com/ + 2014-11-27 + + + http://materializecss.com/getting-started.html + 2014-11-27 + + + http://materializecss.com/collapsible.html + 2014-11-27 + + + http://materializecss.com/bin/materialize-sass_v0.82.zip + 2014-11-27 + + + http://materializecss.com/bin/materialize_v0.82.zip + 2014-11-27 + + + http://materializecss.com/parallax.html + 2014-11-27 + + + http://materializecss.com/sass.html + 2014-11-27 + + diff --git a/node_modules/materialize-css/table.html b/node_modules/materialize-css/table.html new file mode 100644 index 0000000..c066f1b --- /dev/null +++ b/node_modules/materialize-css/table.html @@ -0,0 +1,488 @@ + + + + + + + + + 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/node_modules/materialize-css/tabs.html b/node_modules/materialize-css/tabs.html new file mode 100644 index 0000000..f3b1631 --- /dev/null +++ b/node_modules/materialize-css/tabs.html @@ -0,0 +1,391 @@ + + + + + + + + + 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.

                + +
                +
                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

                +
                + + +
                +

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

                jQuery Plugin Options

                + + + + + + + + + + + + + + + + + + + + + + +
                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

                +

                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>
                +        
                +
                + + +
                +

                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>
                +        
                +
                + +
                + + + + +
                +
                + + +
                +
                +
                +
                +
                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/node_modules/materialize-css/templates/masonry-template/LICENSE b/node_modules/materialize-css/templates/masonry-template/LICENSE new file mode 100644 index 0000000..c795dcc --- /dev/null +++ b/node_modules/materialize-css/templates/masonry-template/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 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 +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/node_modules/materialize-css/templates/masonry-template/background1.jpg b/node_modules/materialize-css/templates/masonry-template/background1.jpg new file mode 100644 index 0000000..e8b388e Binary files /dev/null and b/node_modules/materialize-css/templates/masonry-template/background1.jpg differ diff --git a/node_modules/materialize-css/templates/masonry-template/background2.jpg b/node_modules/materialize-css/templates/masonry-template/background2.jpg new file mode 100644 index 0000000..cc0a11c Binary files /dev/null and b/node_modules/materialize-css/templates/masonry-template/background2.jpg differ diff --git a/node_modules/materialize-css/templates/masonry-template/background3.jpg b/node_modules/materialize-css/templates/masonry-template/background3.jpg new file mode 100644 index 0000000..0bc540d Binary files /dev/null and b/node_modules/materialize-css/templates/masonry-template/background3.jpg differ diff --git a/node_modules/materialize-css/templates/masonry-template/css/style.css b/node_modules/materialize-css/templates/masonry-template/css/style.css new file mode 100644 index 0000000..d894cbd --- /dev/null +++ b/node_modules/materialize-css/templates/masonry-template/css/style.css @@ -0,0 +1,55 @@ +/* Custom Stylesheet */ +/** + * Use this file to override Materialize files so you can update + * the core Materialize files in the future + * + * Made By MaterializeCSS.com + */ + +nav ul a, +nav .brand-logo { + color: #444; +} + +p { + line-height: 2rem; +} + +.button-collapse { + color: #26a69a; +} + +.parallax-container { + min-height: 380px; + line-height: 0; + height: auto; + color: rgba(255,255,255,.9); +} + .parallax-container .section { + width: 100%; + } + +@media only screen and (max-width : 992px) { + .parallax-container .section { + position: absolute; + top: 40%; + } + #index-banner .section { + top: 10%; + } +} + +@media only screen and (max-width : 600px) { + #index-banner .section { + top: 0; + } +} + + +.icon-block { + padding: 0 15px; +} + +footer.page-footer { + margin: 0; +} \ No newline at end of file diff --git a/node_modules/materialize-css/templates/masonry-template/index.html b/node_modules/materialize-css/templates/masonry-template/index.html new file mode 100644 index 0000000..8ae4e49 --- /dev/null +++ b/node_modules/materialize-css/templates/masonry-template/index.html @@ -0,0 +1,163 @@ + + + + + + Parallax Template - Materialize + + + + + + + + +
                +
                +
                +

                +

                Parallax Template

                +
                +
                A modern responsive front-end framework based on Material Design
                +
                + +

                + +
                +
                +
                Unsplashed background img 2
                +
                + + +
                +
                + + +
                +
                +
                +

                +
                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.

                +
                +
                + +
                +
                +

                +
                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.

                +
                +
                + +
                +
                +

                +
                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.

                +
                +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                A modern responsive front-end framework based on Material Design
                +
                +
                +
                +
                Unsplashed background img 2
                +
                + +
                +
                + +
                +
                +

                +

                Contact Us

                +

                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam scelerisque id nunc nec volutpat. Etiam pellentesque tristique arcu, non consequat magna fermentum ac. Cras ut ultricies eros. Maecenas eros justo, ullamcorper a sapien id, viverra ultrices eros. Morbi sem neque, posuere et pretium eget, bibendum sollicitudin lacus. Aliquam eleifend sollicitudin diam, eu mattis nisl maximus sed. Nulla imperdiet semper molestie. Morbi massa odio, condimentum sed ipsum ac, gravida ultrices erat. Nullam eget dignissim mauris, non tristique erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;

                +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                A modern responsive front-end framework based on Material Design
                +
                +
                +
                +
                Unsplashed background img 3
                +
                + +
                +
                +
                +
                +
                Company Bio
                +

                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.

                + + +
                +
                +
                Settings
                + +
                +
                +
                Connect
                + +
                +
                +
                + +
                + + + + + + + + + diff --git a/node_modules/materialize-css/templates/masonry-template/js/init.js b/node_modules/materialize-css/templates/masonry-template/js/init.js new file mode 100644 index 0000000..dbc6473 --- /dev/null +++ b/node_modules/materialize-css/templates/masonry-template/js/init.js @@ -0,0 +1,16 @@ +(function($){ + $(function(){ + + $('.button-collapse').sideNav(); + + + var $container = $('#masonry-grid'); + // initialize + $container.masonry({ + columnWidth: '.col', + itemSelector: '.col', + }); + + + }); // end of document ready +})(jQuery); // end of jQuery name space \ No newline at end of file diff --git a/node_modules/materialize-css/templates/masonry-template/js/masonry.pkgd.min.js b/node_modules/materialize-css/templates/masonry-template/js/masonry.pkgd.min.js new file mode 100644 index 0000000..628bb12 --- /dev/null +++ b/node_modules/materialize-css/templates/masonry-template/js/masonry.pkgd.min.js @@ -0,0 +1,9 @@ +/*! + * Masonry PACKAGED v3.2.2 + * Cascading grid layout library + * http://masonry.desandro.com + * MIT License + * by David DeSandro + */ + +!function(a){function b(){}function c(a){function c(b){b.prototype.option||(b.prototype.option=function(b){a.isPlainObject(b)&&(this.options=a.extend(!0,this.options,b))})}function e(b,c){a.fn[b]=function(e){if("string"==typeof e){for(var g=d.call(arguments,1),h=0,i=this.length;i>h;h++){var j=this[h],k=a.data(j,b);if(k)if(a.isFunction(k[e])&&"_"!==e.charAt(0)){var l=k[e].apply(k,g);if(void 0!==l)return l}else f("no such method '"+e+"' for "+b+" instance");else f("cannot call methods on "+b+" prior to initialization; attempted to call '"+e+"'")}return this}return this.each(function(){var d=a.data(this,b);d?(d.option(e),d._init()):(d=new c(this,e),a.data(this,b,d))})}}if(a){var f="undefined"==typeof console?b:function(a){console.error(a)};return a.bridget=function(a,b){c(b),e(a,b)},a.bridget}}var d=Array.prototype.slice;"function"==typeof define&&define.amd?define("jquery-bridget/jquery.bridget",["jquery"],c):c("object"==typeof exports?require("jquery"):a.jQuery)}(window),function(a){function b(b){var c=a.event;return c.target=c.target||c.srcElement||b,c}var c=document.documentElement,d=function(){};c.addEventListener?d=function(a,b,c){a.addEventListener(b,c,!1)}:c.attachEvent&&(d=function(a,c,d){a[c+d]=d.handleEvent?function(){var c=b(a);d.handleEvent.call(d,c)}:function(){var c=b(a);d.call(a,c)},a.attachEvent("on"+c,a[c+d])});var e=function(){};c.removeEventListener?e=function(a,b,c){a.removeEventListener(b,c,!1)}:c.detachEvent&&(e=function(a,b,c){a.detachEvent("on"+b,a[b+c]);try{delete a[b+c]}catch(d){a[b+c]=void 0}});var f={bind:d,unbind:e};"function"==typeof define&&define.amd?define("eventie/eventie",f):"object"==typeof exports?module.exports=f:a.eventie=f}(this),function(a){function b(a){"function"==typeof a&&(b.isReady?a():g.push(a))}function c(a){var c="readystatechange"===a.type&&"complete"!==f.readyState;b.isReady||c||d()}function d(){b.isReady=!0;for(var a=0,c=g.length;c>a;a++){var d=g[a];d()}}function e(e){return"complete"===f.readyState?d():(e.bind(f,"DOMContentLoaded",c),e.bind(f,"readystatechange",c),e.bind(a,"load",c)),b}var f=a.document,g=[];b.isReady=!1,"function"==typeof define&&define.amd?define("doc-ready/doc-ready",["eventie/eventie"],e):"object"==typeof exports?module.exports=e(require("eventie")):a.docReady=e(a.eventie)}(window),function(){function a(){}function b(a,b){for(var c=a.length;c--;)if(a[c].listener===b)return c;return-1}function c(a){return function(){return this[a].apply(this,arguments)}}var d=a.prototype,e=this,f=e.EventEmitter;d.getListeners=function(a){var b,c,d=this._getEvents();if(a instanceof RegExp){b={};for(c in d)d.hasOwnProperty(c)&&a.test(c)&&(b[c]=d[c])}else b=d[a]||(d[a]=[]);return b},d.flattenListeners=function(a){var b,c=[];for(b=0;be;e++)if(b=c[e]+a,"string"==typeof d[b])return b}}var c="Webkit Moz ms Ms O".split(" "),d=document.documentElement.style;"function"==typeof define&&define.amd?define("get-style-property/get-style-property",[],function(){return b}):"object"==typeof exports?module.exports=b:a.getStyleProperty=b}(window),function(a){function b(a){var b=parseFloat(a),c=-1===a.indexOf("%")&&!isNaN(b);return c&&b}function c(){}function d(){for(var a={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},b=0,c=g.length;c>b;b++){var d=g[b];a[d]=0}return a}function e(c){function e(){if(!m){m=!0;var d=a.getComputedStyle;if(j=function(){var a=d?function(a){return d(a,null)}:function(a){return a.currentStyle};return function(b){var c=a(b);return c||f("Style returned "+c+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),c}}(),k=c("boxSizing")){var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style[k]="border-box";var g=document.body||document.documentElement;g.appendChild(e);var h=j(e);l=200===b(h.width),g.removeChild(e)}}}function h(a){if(e(),"string"==typeof a&&(a=document.querySelector(a)),a&&"object"==typeof a&&a.nodeType){var c=j(a);if("none"===c.display)return d();var f={};f.width=a.offsetWidth,f.height=a.offsetHeight;for(var h=f.isBorderBox=!(!k||!c[k]||"border-box"!==c[k]),m=0,n=g.length;n>m;m++){var o=g[m],p=c[o];p=i(a,p);var q=parseFloat(p);f[o]=isNaN(q)?0:q}var r=f.paddingLeft+f.paddingRight,s=f.paddingTop+f.paddingBottom,t=f.marginLeft+f.marginRight,u=f.marginTop+f.marginBottom,v=f.borderLeftWidth+f.borderRightWidth,w=f.borderTopWidth+f.borderBottomWidth,x=h&&l,y=b(c.width);y!==!1&&(f.width=y+(x?0:r+v));var z=b(c.height);return z!==!1&&(f.height=z+(x?0:s+w)),f.innerWidth=f.width-(r+v),f.innerHeight=f.height-(s+w),f.outerWidth=f.width+t,f.outerHeight=f.height+u,f}}function i(b,c){if(a.getComputedStyle||-1===c.indexOf("%"))return c;var d=b.style,e=d.left,f=b.runtimeStyle,g=f&&f.left;return g&&(f.left=b.currentStyle.left),d.left=c,c=d.pixelLeft,d.left=e,g&&(f.left=g),c}var j,k,l,m=!1;return h}var f="undefined"==typeof console?c:function(a){console.error(a)},g=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"];"function"==typeof define&&define.amd?define("get-size/get-size",["get-style-property/get-style-property"],e):"object"==typeof exports?module.exports=e(require("desandro-get-style-property")):a.getSize=e(a.getStyleProperty)}(window),function(a){function b(a,b){return a[g](b)}function c(a){if(!a.parentNode){var b=document.createDocumentFragment();b.appendChild(a)}}function d(a,b){c(a);for(var d=a.parentNode.querySelectorAll(b),e=0,f=d.length;f>e;e++)if(d[e]===a)return!0;return!1}function e(a,d){return c(a),b(a,d)}var f,g=function(){if(a.matchesSelector)return"matchesSelector";for(var b=["webkit","moz","ms","o"],c=0,d=b.length;d>c;c++){var e=b[c],f=e+"MatchesSelector";if(a[f])return f}}();if(g){var h=document.createElement("div"),i=b(h,"div");f=i?b:e}else f=d;"function"==typeof define&&define.amd?define("matches-selector/matches-selector",[],function(){return f}):"object"==typeof exports?module.exports=f:window.matchesSelector=f}(Element.prototype),function(a){function b(a,b){for(var c in b)a[c]=b[c];return a}function c(a){for(var b in a)return!1;return b=null,!0}function d(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function e(a,e,f){function h(a,b){a&&(this.element=a,this.layout=b,this.position={x:0,y:0},this._create())}var i=f("transition"),j=f("transform"),k=i&&j,l=!!f("perspective"),m={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend",transition:"transitionend"}[i],n=["transform","transition","transitionDuration","transitionProperty"],o=function(){for(var a={},b=0,c=n.length;c>b;b++){var d=n[b],e=f(d);e&&e!==d&&(a[d]=e)}return a}();b(h.prototype,a.prototype),h.prototype._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},h.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},h.prototype.getSize=function(){this.size=e(this.element)},h.prototype.css=function(a){var b=this.element.style;for(var c in a){var d=o[c]||c;b[d]=a[c]}},h.prototype.getPosition=function(){var a=g(this.element),b=this.layout.options,c=b.isOriginLeft,d=b.isOriginTop,e=parseInt(a[c?"left":"right"],10),f=parseInt(a[d?"top":"bottom"],10);e=isNaN(e)?0:e,f=isNaN(f)?0:f;var h=this.layout.size;e-=c?h.paddingLeft:h.paddingRight,f-=d?h.paddingTop:h.paddingBottom,this.position.x=e,this.position.y=f},h.prototype.layoutPosition=function(){var a=this.layout.size,b=this.layout.options,c={};b.isOriginLeft?(c.left=this.position.x+a.paddingLeft+"px",c.right=""):(c.right=this.position.x+a.paddingRight+"px",c.left=""),b.isOriginTop?(c.top=this.position.y+a.paddingTop+"px",c.bottom=""):(c.bottom=this.position.y+a.paddingBottom+"px",c.top=""),this.css(c),this.emitEvent("layout",[this])};var p=l?function(a,b){return"translate3d("+a+"px, "+b+"px, 0)"}:function(a,b){return"translate("+a+"px, "+b+"px)"};h.prototype._transitionTo=function(a,b){this.getPosition();var c=this.position.x,d=this.position.y,e=parseInt(a,10),f=parseInt(b,10),g=e===this.position.x&&f===this.position.y;if(this.setPosition(a,b),g&&!this.isTransitioning)return void this.layoutPosition();var h=a-c,i=b-d,j={},k=this.layout.options;h=k.isOriginLeft?h:-h,i=k.isOriginTop?i:-i,j.transform=p(h,i),this.transition({to:j,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},h.prototype.goTo=function(a,b){this.setPosition(a,b),this.layoutPosition()},h.prototype.moveTo=k?h.prototype._transitionTo:h.prototype.goTo,h.prototype.setPosition=function(a,b){this.position.x=parseInt(a,10),this.position.y=parseInt(b,10)},h.prototype._nonTransition=function(a){this.css(a.to),a.isCleaning&&this._removeStyles(a.to);for(var b in a.onTransitionEnd)a.onTransitionEnd[b].call(this)},h.prototype._transition=function(a){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(a);var b=this._transn;for(var c in a.onTransitionEnd)b.onEnd[c]=a.onTransitionEnd[c];for(c in a.to)b.ingProperties[c]=!0,a.isCleaning&&(b.clean[c]=!0);if(a.from){this.css(a.from);var d=this.element.offsetHeight;d=null}this.enableTransition(a.to),this.css(a.to),this.isTransitioning=!0};var q=j&&d(j)+",opacity";h.prototype.enableTransition=function(){this.isTransitioning||(this.css({transitionProperty:q,transitionDuration:this.layout.options.transitionDuration}),this.element.addEventListener(m,this,!1))},h.prototype.transition=h.prototype[i?"_transition":"_nonTransition"],h.prototype.onwebkitTransitionEnd=function(a){this.ontransitionend(a)},h.prototype.onotransitionend=function(a){this.ontransitionend(a)};var r={"-webkit-transform":"transform","-moz-transform":"transform","-o-transform":"transform"};h.prototype.ontransitionend=function(a){if(a.target===this.element){var b=this._transn,d=r[a.propertyName]||a.propertyName;if(delete b.ingProperties[d],c(b.ingProperties)&&this.disableTransition(),d in b.clean&&(this.element.style[a.propertyName]="",delete b.clean[d]),d in b.onEnd){var e=b.onEnd[d];e.call(this),delete b.onEnd[d]}this.emitEvent("transitionEnd",[this])}},h.prototype.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(m,this,!1),this.isTransitioning=!1},h.prototype._removeStyles=function(a){var b={};for(var c in a)b[c]="";this.css(b)};var s={transitionProperty:"",transitionDuration:""};return h.prototype.removeTransitionStyles=function(){this.css(s)},h.prototype.removeElem=function(){this.element.parentNode.removeChild(this.element),this.emitEvent("remove",[this])},h.prototype.remove=function(){if(!i||!parseFloat(this.layout.options.transitionDuration))return void this.removeElem();var a=this;this.on("transitionEnd",function(){return a.removeElem(),!0}),this.hide()},h.prototype.reveal=function(){delete this.isHidden,this.css({display:""});var a=this.layout.options;this.transition({from:a.hiddenStyle,to:a.visibleStyle,isCleaning:!0})},h.prototype.hide=function(){this.isHidden=!0,this.css({display:""});var a=this.layout.options;this.transition({from:a.visibleStyle,to:a.hiddenStyle,isCleaning:!0,onTransitionEnd:{opacity:function(){this.isHidden&&this.css({display:"none"})}}})},h.prototype.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},h}var f=a.getComputedStyle,g=f?function(a){return f(a,null)}:function(a){return a.currentStyle};"function"==typeof define&&define.amd?define("outlayer/item",["eventEmitter/EventEmitter","get-size/get-size","get-style-property/get-style-property"],e):"object"==typeof exports?module.exports=e(require("wolfy87-eventemitter"),require("get-size"),require("desandro-get-style-property")):(a.Outlayer={},a.Outlayer.Item=e(a.EventEmitter,a.getSize,a.getStyleProperty))}(window),function(a){function b(a,b){for(var c in b)a[c]=b[c];return a}function c(a){return"[object Array]"===l.call(a)}function d(a){var b=[];if(c(a))b=a;else if(a&&"number"==typeof a.length)for(var d=0,e=a.length;e>d;d++)b.push(a[d]);else b.push(a);return b}function e(a,b){var c=n(b,a);-1!==c&&b.splice(c,1)}function f(a){return a.replace(/(.)([A-Z])/g,function(a,b,c){return b+"-"+c}).toLowerCase()}function g(c,g,l,n,o,p){function q(a,c){if("string"==typeof a&&(a=h.querySelector(a)),!a||!m(a))return void(i&&i.error("Bad "+this.constructor.namespace+" element: "+a));this.element=a,this.options=b({},this.constructor.defaults),this.option(c);var d=++r;this.element.outlayerGUID=d,s[d]=this,this._create(),this.options.isInitLayout&&this.layout()}var r=0,s={};return q.namespace="outlayer",q.Item=p,q.defaults={containerStyle:{position:"relative"},isInitLayout:!0,isOriginLeft:!0,isOriginTop:!0,isResizeBound:!0,isResizingContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}},b(q.prototype,l.prototype),q.prototype.option=function(a){b(this.options,a)},q.prototype._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),b(this.element.style,this.options.containerStyle),this.options.isResizeBound&&this.bindResize()},q.prototype.reloadItems=function(){this.items=this._itemize(this.element.children)},q.prototype._itemize=function(a){for(var b=this._filterFindItemElements(a),c=this.constructor.Item,d=[],e=0,f=b.length;f>e;e++){var g=b[e],h=new c(g,this);d.push(h)}return d},q.prototype._filterFindItemElements=function(a){a=d(a);for(var b=this.options.itemSelector,c=[],e=0,f=a.length;f>e;e++){var g=a[e];if(m(g))if(b){o(g,b)&&c.push(g);for(var h=g.querySelectorAll(b),i=0,j=h.length;j>i;i++)c.push(h[i])}else c.push(g)}return c},q.prototype.getItemElements=function(){for(var a=[],b=0,c=this.items.length;c>b;b++)a.push(this.items[b].element);return a},q.prototype.layout=function(){this._resetLayout(),this._manageStamps();var a=void 0!==this.options.isLayoutInstant?this.options.isLayoutInstant:!this._isLayoutInited;this.layoutItems(this.items,a),this._isLayoutInited=!0},q.prototype._init=q.prototype.layout,q.prototype._resetLayout=function(){this.getSize()},q.prototype.getSize=function(){this.size=n(this.element)},q.prototype._getMeasurement=function(a,b){var c,d=this.options[a];d?("string"==typeof d?c=this.element.querySelector(d):m(d)&&(c=d),this[a]=c?n(c)[b]:d):this[a]=0},q.prototype.layoutItems=function(a,b){a=this._getItemsForLayout(a),this._layoutItems(a,b),this._postLayout()},q.prototype._getItemsForLayout=function(a){for(var b=[],c=0,d=a.length;d>c;c++){var e=a[c];e.isIgnored||b.push(e)}return b},q.prototype._layoutItems=function(a,b){function c(){d.emitEvent("layoutComplete",[d,a])}var d=this;if(!a||!a.length)return void c();this._itemsOn(a,"layout",c);for(var e=[],f=0,g=a.length;g>f;f++){var h=a[f],i=this._getItemLayoutPosition(h);i.item=h,i.isInstant=b||h.isLayoutInstant,e.push(i)}this._processLayoutQueue(e)},q.prototype._getItemLayoutPosition=function(){return{x:0,y:0}},q.prototype._processLayoutQueue=function(a){for(var b=0,c=a.length;c>b;b++){var d=a[b];this._positionItem(d.item,d.x,d.y,d.isInstant)}},q.prototype._positionItem=function(a,b,c,d){d?a.goTo(b,c):a.moveTo(b,c)},q.prototype._postLayout=function(){this.resizeContainer()},q.prototype.resizeContainer=function(){if(this.options.isResizingContainer){var a=this._getContainerSize();a&&(this._setContainerMeasure(a.width,!0),this._setContainerMeasure(a.height,!1))}},q.prototype._getContainerSize=k,q.prototype._setContainerMeasure=function(a,b){if(void 0!==a){var c=this.size;c.isBorderBox&&(a+=b?c.paddingLeft+c.paddingRight+c.borderLeftWidth+c.borderRightWidth:c.paddingBottom+c.paddingTop+c.borderTopWidth+c.borderBottomWidth),a=Math.max(a,0),this.element.style[b?"width":"height"]=a+"px"}},q.prototype._itemsOn=function(a,b,c){function d(){return e++,e===f&&c.call(g),!0}for(var e=0,f=a.length,g=this,h=0,i=a.length;i>h;h++){var j=a[h];j.on(b,d)}},q.prototype.ignore=function(a){var b=this.getItem(a);b&&(b.isIgnored=!0)},q.prototype.unignore=function(a){var b=this.getItem(a);b&&delete b.isIgnored},q.prototype.stamp=function(a){if(a=this._find(a)){this.stamps=this.stamps.concat(a);for(var b=0,c=a.length;c>b;b++){var d=a[b];this.ignore(d)}}},q.prototype.unstamp=function(a){if(a=this._find(a))for(var b=0,c=a.length;c>b;b++){var d=a[b];e(d,this.stamps),this.unignore(d)}},q.prototype._find=function(a){return a?("string"==typeof a&&(a=this.element.querySelectorAll(a)),a=d(a)):void 0},q.prototype._manageStamps=function(){if(this.stamps&&this.stamps.length){this._getBoundingRect();for(var a=0,b=this.stamps.length;b>a;a++){var c=this.stamps[a];this._manageStamp(c)}}},q.prototype._getBoundingRect=function(){var a=this.element.getBoundingClientRect(),b=this.size;this._boundingRect={left:a.left+b.paddingLeft+b.borderLeftWidth,top:a.top+b.paddingTop+b.borderTopWidth,right:a.right-(b.paddingRight+b.borderRightWidth),bottom:a.bottom-(b.paddingBottom+b.borderBottomWidth)}},q.prototype._manageStamp=k,q.prototype._getElementOffset=function(a){var b=a.getBoundingClientRect(),c=this._boundingRect,d=n(a),e={left:b.left-c.left-d.marginLeft,top:b.top-c.top-d.marginTop,right:c.right-b.right-d.marginRight,bottom:c.bottom-b.bottom-d.marginBottom};return e},q.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},q.prototype.bindResize=function(){this.isResizeBound||(c.bind(a,"resize",this),this.isResizeBound=!0)},q.prototype.unbindResize=function(){this.isResizeBound&&c.unbind(a,"resize",this),this.isResizeBound=!1},q.prototype.onresize=function(){function a(){b.resize(),delete b.resizeTimeout}this.resizeTimeout&&clearTimeout(this.resizeTimeout);var b=this;this.resizeTimeout=setTimeout(a,100)},q.prototype.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},q.prototype.needsResizeLayout=function(){var a=n(this.element),b=this.size&&a;return b&&a.innerWidth!==this.size.innerWidth},q.prototype.addItems=function(a){var b=this._itemize(a);return b.length&&(this.items=this.items.concat(b)),b},q.prototype.appended=function(a){var b=this.addItems(a);b.length&&(this.layoutItems(b,!0),this.reveal(b))},q.prototype.prepended=function(a){var b=this._itemize(a);if(b.length){var c=this.items.slice(0);this.items=b.concat(c),this._resetLayout(),this._manageStamps(),this.layoutItems(b,!0),this.reveal(b),this.layoutItems(c)}},q.prototype.reveal=function(a){var b=a&&a.length;if(b)for(var c=0;b>c;c++){var d=a[c];d.reveal()}},q.prototype.hide=function(a){var b=a&&a.length;if(b)for(var c=0;b>c;c++){var d=a[c];d.hide()}},q.prototype.getItem=function(a){for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];if(d.element===a)return d}},q.prototype.getItems=function(a){if(a&&a.length){for(var b=[],c=0,d=a.length;d>c;c++){var e=a[c],f=this.getItem(e);f&&b.push(f)}return b}},q.prototype.remove=function(a){a=d(a);var b=this.getItems(a);if(b&&b.length){this._itemsOn(b,"remove",function(){this.emitEvent("removeComplete",[this,b])});for(var c=0,f=b.length;f>c;c++){var g=b[c];g.remove(),e(g,this.items)}}},q.prototype.destroy=function(){var a=this.element.style;a.height="",a.position="",a.width="";for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];d.destroy()}this.unbindResize();var e=this.element.outlayerGUID;delete s[e],delete this.element.outlayerGUID,j&&j.removeData(this.element,this.constructor.namespace)},q.data=function(a){var b=a&&a.outlayerGUID;return b&&s[b]},q.create=function(a,c){function d(){q.apply(this,arguments)}return Object.create?d.prototype=Object.create(q.prototype):b(d.prototype,q.prototype),d.prototype.constructor=d,d.defaults=b({},q.defaults),b(d.defaults,c),d.prototype.settings={},d.namespace=a,d.data=q.data,d.Item=function(){p.apply(this,arguments)},d.Item.prototype=new p,g(function(){for(var b=f(a),c=h.querySelectorAll(".js-"+b),e="data-"+b+"-options",g=0,k=c.length;k>g;g++){var l,m=c[g],n=m.getAttribute(e);try{l=n&&JSON.parse(n)}catch(o){i&&i.error("Error parsing "+e+" on "+m.nodeName.toLowerCase()+(m.id?"#"+m.id:"")+": "+o);continue}var p=new d(m,l);j&&j.data(m,a,p)}}),j&&j.bridget&&j.bridget(a,d),d},q.Item=p,q}var h=a.document,i=a.console,j=a.jQuery,k=function(){},l=Object.prototype.toString,m="function"==typeof HTMLElement||"object"==typeof HTMLElement?function(a){return a instanceof HTMLElement}:function(a){return a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName},n=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1};"function"==typeof define&&define.amd?define("outlayer/outlayer",["eventie/eventie","doc-ready/doc-ready","eventEmitter/EventEmitter","get-size/get-size","matches-selector/matches-selector","./item"],g):"object"==typeof exports?module.exports=g(require("eventie"),require("doc-ready"),require("wolfy87-eventemitter"),require("get-size"),require("desandro-matches-selector"),require("./item")):a.Outlayer=g(a.eventie,a.docReady,a.EventEmitter,a.getSize,a.matchesSelector,a.Outlayer.Item)}(window),function(a){function b(a,b){var d=a.create("masonry");return d.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns();var a=this.cols;for(this.colYs=[];a--;)this.colYs.push(0);this.maxY=0},d.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var a=this.items[0],c=a&&a.element;this.columnWidth=c&&b(c).outerWidth||this.containerWidth}this.columnWidth+=this.gutter,this.cols=Math.floor((this.containerWidth+this.gutter)/this.columnWidth),this.cols=Math.max(this.cols,1)},d.prototype.getContainerWidth=function(){var a=this.options.isFitWidth?this.element.parentNode:this.element,c=b(a);this.containerWidth=c&&c.innerWidth},d.prototype._getItemLayoutPosition=function(a){a.getSize();var b=a.size.outerWidth%this.columnWidth,d=b&&1>b?"round":"ceil",e=Math[d](a.size.outerWidth/this.columnWidth);e=Math.min(e,this.cols);for(var f=this._getColGroup(e),g=Math.min.apply(Math,f),h=c(f,g),i={x:this.columnWidth*h,y:g},j=g+a.size.outerHeight,k=this.cols+1-f.length,l=0;k>l;l++)this.colYs[h+l]=j;return i},d.prototype._getColGroup=function(a){if(2>a)return this.colYs;for(var b=[],c=this.cols+1-a,d=0;c>d;d++){var e=this.colYs.slice(d,d+a);b[d]=Math.max.apply(Math,e)}return b},d.prototype._manageStamp=function(a){var c=b(a),d=this._getElementOffset(a),e=this.options.isOriginLeft?d.left:d.right,f=e+c.outerWidth,g=Math.floor(e/this.columnWidth);g=Math.max(0,g);var h=Math.floor(f/this.columnWidth);h-=f%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var i=(this.options.isOriginTop?d.top:d.bottom)+c.outerHeight,j=g;h>=j;j++)this.colYs[j]=Math.max(i,this.colYs[j])},d.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var a={height:this.maxY};return this.options.isFitWidth&&(a.width=this._getContainerFitWidth()),a},d.prototype._getContainerFitWidth=function(){for(var a=0,b=this.cols;--b&&0===this.colYs[b];)a++;return(this.cols-a)*this.columnWidth-this.gutter},d.prototype.needsResizeLayout=function(){var a=this.containerWidth;return this.getContainerWidth(),a!==this.containerWidth},d}var c=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;c++){var e=a[c];if(e===b)return c}return-1};"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size"],b):"object"==typeof exports?module.exports=b(require("outlayer"),require("get-size")):a.Masonry=b(a.Outlayer,a.getSize)}(window); \ No newline at end of file diff --git a/node_modules/materialize-css/templates/masonry-template/preview.html b/node_modules/materialize-css/templates/masonry-template/preview.html new file mode 100644 index 0000000..127c87e --- /dev/null +++ b/node_modules/materialize-css/templates/masonry-template/preview.html @@ -0,0 +1,182 @@ + + + + + + Parallax Template - Materialize + + + + + + + + +
                +
                +

                +

                Parallax Template

                +
                +
                A modern responsive front-end framework based on Material Design
                +
                + +

                + + +
                +
                +
                +
                + + 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.

                +
                + +
                +
                +
                +
                +
                +

                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 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.

                +
                + +
                +
                +
                +
                +
                + + 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.

                +
                + +
                +
                +
                +
                +
                + + + +
                +
                +
                +
                +
                Company Bio
                +

                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.

                + + +
                +
                +
                Settings
                + +
                +
                +
                Connect
                + +
                +
                +
                + +
                + + + + + + + + + + diff --git a/node_modules/materialize-css/templates/parallax-template.zip b/node_modules/materialize-css/templates/parallax-template.zip new file mode 100644 index 0000000..c33fab2 Binary files /dev/null and b/node_modules/materialize-css/templates/parallax-template.zip differ diff --git a/node_modules/materialize-css/templates/parallax-template/LICENSE b/node_modules/materialize-css/templates/parallax-template/LICENSE new file mode 100644 index 0000000..c795dcc --- /dev/null +++ b/node_modules/materialize-css/templates/parallax-template/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 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 +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/node_modules/materialize-css/templates/parallax-template/background1.jpg b/node_modules/materialize-css/templates/parallax-template/background1.jpg new file mode 100644 index 0000000..e8b388e Binary files /dev/null and b/node_modules/materialize-css/templates/parallax-template/background1.jpg differ diff --git a/node_modules/materialize-css/templates/parallax-template/background2.jpg b/node_modules/materialize-css/templates/parallax-template/background2.jpg new file mode 100644 index 0000000..0bc540d Binary files /dev/null and b/node_modules/materialize-css/templates/parallax-template/background2.jpg differ diff --git a/node_modules/materialize-css/templates/parallax-template/background3.jpg b/node_modules/materialize-css/templates/parallax-template/background3.jpg new file mode 100644 index 0000000..cc0a11c Binary files /dev/null and b/node_modules/materialize-css/templates/parallax-template/background3.jpg differ diff --git a/node_modules/materialize-css/templates/parallax-template/css/style.css b/node_modules/materialize-css/templates/parallax-template/css/style.css new file mode 100644 index 0000000..4fa3c90 --- /dev/null +++ b/node_modules/materialize-css/templates/parallax-template/css/style.css @@ -0,0 +1,57 @@ +/* Custom Stylesheet */ +/** + * Use this file to override Materialize files so you can update + * the core Materialize files in the future + * + * Made By MaterializeCSS.com + */ + +nav ul a, +nav .brand-logo { + color: #444; +} + +p { + line-height: 2rem; +} + +.button-collapse { + color: #26a69a; +} + +.parallax-container { + min-height: 380px; + line-height: 0; + height: auto; + color: rgba(255,255,255,.9); +} + .parallax-container .section { + width: 100%; + } + +@media only screen and (max-width : 992px) { + .parallax-container .section { + position: absolute; + top: 40%; + } + #index-banner .section { + top: 10%; + } +} + +@media only screen and (max-width : 600px) { + #index-banner .section { + top: 0; + } +} + +.icon-block { + padding: 0 15px; +} +.icon-block .material-icons { + font-size: inherit; +} + +footer.page-footer { + margin: 0; +} \ No newline at end of file diff --git a/node_modules/materialize-css/templates/parallax-template/index.html b/node_modules/materialize-css/templates/parallax-template/index.html new file mode 100644 index 0000000..97ee74d --- /dev/null +++ b/node_modules/materialize-css/templates/parallax-template/index.html @@ -0,0 +1,164 @@ + + + + + + Parallax Template - Materialize + + + + + + + + + +
                +
                +
                +

                +

                Parallax Template

                +
                +
                A modern responsive front-end framework based on Material Design
                +
                + +

                + +
                +
                +
                Unsplashed background img 1
                +
                + + +
                +
                + + +
                +
                +
                +

                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.

                +
                +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                A modern responsive front-end framework based on Material Design
                +
                +
                +
                +
                Unsplashed background img 2
                +
                + +
                +
                + +
                +
                +

                +

                Contact Us

                +

                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam scelerisque id nunc nec volutpat. Etiam pellentesque tristique arcu, non consequat magna fermentum ac. Cras ut ultricies eros. Maecenas eros justo, ullamcorper a sapien id, viverra ultrices eros. Morbi sem neque, posuere et pretium eget, bibendum sollicitudin lacus. Aliquam eleifend sollicitudin diam, eu mattis nisl maximus sed. Nulla imperdiet semper molestie. Morbi massa odio, condimentum sed ipsum ac, gravida ultrices erat. Nullam eget dignissim mauris, non tristique erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;

                +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                A modern responsive front-end framework based on Material Design
                +
                +
                +
                +
                Unsplashed background img 3
                +
                + +
                +
                +
                +
                +
                Company Bio
                +

                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.

                + + +
                +
                +
                Settings
                + +
                +
                +
                Connect
                + +
                +
                +
                + +
                + + + + + + + + + diff --git a/node_modules/materialize-css/templates/parallax-template/js/init.js b/node_modules/materialize-css/templates/parallax-template/js/init.js new file mode 100644 index 0000000..d9e58b7 --- /dev/null +++ b/node_modules/materialize-css/templates/parallax-template/js/init.js @@ -0,0 +1,8 @@ +(function($){ + $(function(){ + + $('.button-collapse').sideNav(); + $('.parallax').parallax(); + + }); // end of document ready +})(jQuery); // end of jQuery name space \ No newline at end of file diff --git a/node_modules/materialize-css/templates/parallax-template/preview.html b/node_modules/materialize-css/templates/parallax-template/preview.html new file mode 100644 index 0000000..1d64209 --- /dev/null +++ b/node_modules/materialize-css/templates/parallax-template/preview.html @@ -0,0 +1,164 @@ + + + + + + Parallax Template - Materialize + + + + + + + + + +
                +
                +
                +

                +

                Parallax Template

                +
                +
                A modern responsive front-end framework based on Material Design
                +
                + +

                + +
                +
                +
                Unsplashed background img 1
                +
                + + +
                +
                + + +
                +
                +
                +

                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.

                +
                +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                A modern responsive front-end framework based on Material Design
                +
                +
                +
                +
                Unsplashed background img 2
                +
                + +
                +
                + +
                +
                +

                +

                Contact Us

                +

                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam scelerisque id nunc nec volutpat. Etiam pellentesque tristique arcu, non consequat magna fermentum ac. Cras ut ultricies eros. Maecenas eros justo, ullamcorper a sapien id, viverra ultrices eros. Morbi sem neque, posuere et pretium eget, bibendum sollicitudin lacus. Aliquam eleifend sollicitudin diam, eu mattis nisl maximus sed. Nulla imperdiet semper molestie. Morbi massa odio, condimentum sed ipsum ac, gravida ultrices erat. Nullam eget dignissim mauris, non tristique erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;

                +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                A modern responsive front-end framework based on Material Design
                +
                +
                +
                +
                Unsplashed background img 3
                +
                + +
                +
                +
                +
                +
                Company Bio
                +

                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.

                + + +
                +
                +
                Settings
                + +
                +
                +
                Connect
                + +
                +
                +
                + +
                + + + + + + + + + diff --git a/node_modules/materialize-css/templates/starter-template.zip b/node_modules/materialize-css/templates/starter-template.zip new file mode 100644 index 0000000..b04490e Binary files /dev/null and b/node_modules/materialize-css/templates/starter-template.zip differ diff --git a/node_modules/materialize-css/templates/starter-template/LICENSE b/node_modules/materialize-css/templates/starter-template/LICENSE new file mode 100644 index 0000000..c795dcc --- /dev/null +++ b/node_modules/materialize-css/templates/starter-template/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 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 +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/node_modules/materialize-css/templates/starter-template/css/style.css b/node_modules/materialize-css/templates/starter-template/css/style.css new file mode 100644 index 0000000..2e8db1f --- /dev/null +++ b/node_modules/materialize-css/templates/starter-template/css/style.css @@ -0,0 +1,14 @@ +/* Custom Stylesheet */ +/** + * Use this file to override Materialize files so you can update + * the core Materialize files in the future + * + * Made By MaterializeCSS.com + */ + +.icon-block { + padding: 0 15px; +} +.icon-block .material-icons { + font-size: inherit; +} \ No newline at end of file diff --git a/node_modules/materialize-css/templates/starter-template/index.html b/node_modules/materialize-css/templates/starter-template/index.html new file mode 100644 index 0000000..d71383b --- /dev/null +++ b/node_modules/materialize-css/templates/starter-template/index.html @@ -0,0 +1,126 @@ + + + + + + Starter Template - Materialize + + + + + + + + +
                +
                +

                +

                Starter Template

                +
                +
                A modern responsive front-end framework based on Material Design
                +
                + +

                + +
                +
                + + +
                +
                + + +
                +
                +
                +

                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.

                +
                +
                +
                + +
                +

                + +
                + +
                +
                + +
                +
                +
                +
                +
                Company Bio
                +

                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.

                + + +
                +
                +
                Settings
                + +
                +
                +
                Connect
                + +
                +
                +
                + +
                + + + + + + + + + diff --git a/node_modules/materialize-css/templates/starter-template/js/init.js b/node_modules/materialize-css/templates/starter-template/js/init.js new file mode 100644 index 0000000..01938d5 --- /dev/null +++ b/node_modules/materialize-css/templates/starter-template/js/init.js @@ -0,0 +1,7 @@ +(function($){ + $(function(){ + + $('.button-collapse').sideNav(); + + }); // end of document ready +})(jQuery); // end of jQuery name space \ No newline at end of file diff --git a/node_modules/materialize-css/templates/starter-template/preview.html b/node_modules/materialize-css/templates/starter-template/preview.html new file mode 100644 index 0000000..d4852c5 --- /dev/null +++ b/node_modules/materialize-css/templates/starter-template/preview.html @@ -0,0 +1,126 @@ + + + + + + Starter Template - Materialize + + + + + + + + +
                +
                +

                +

                Starter Template

                +
                +
                A modern responsive front-end framework based on Material Design
                +
                + +

                + +
                +
                + + +
                +
                + + +
                +
                +
                +

                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.

                +
                +
                +
                + +
                +

                + +
                + +
                +
                + +
                +
                +
                +
                +
                Company Bio
                +

                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.

                + + +
                +
                +
                Settings
                + +
                +
                +
                Connect
                + +
                +
                +
                + +
                + + + + + + + + + diff --git a/node_modules/materialize-css/test.html b/node_modules/materialize-css/test.html new file mode 100644 index 0000000..12fe9ec --- /dev/null +++ b/node_modules/materialize-css/test.html @@ -0,0 +1,223 @@ + + + + + + Documentation - Materialize + + + + + + + + + + + + + + + +

                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. + +

                + + + +
                  +
                • +
                • +
                • +
                • +
                +
                + +

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                + + Modal + + + + + + + + + + + + + + + + + +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                +

                yo

                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/badges.html b/node_modules/materialize-css/test/html/badges.html new file mode 100644 index 0000000..3fea59e --- /dev/null +++ b/node_modules/materialize-css/test/html/badges.html @@ -0,0 +1,142 @@ + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + +
                +

                Badges

                + +

                Collection

                + + +

                Dropdown

                + + +

                Nav

                + +
                + + + +

                Collapsible

                +
                +
                +
                  +
                • +
                  4filter_dramaVery long title Very long title Very long title Very long title Very long title
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  4filter_dramaVery long title Very long title Very long title Very long title Very long title
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  4filter_dramaVery long title Very long title Very long title Very long title Very long title
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  1placeVery long title Very long title Very long title Very long title Very long title
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  whatshotThird
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                +
                +
                + + + + + + + + + + + + + diff --git a/node_modules/materialize-css/test/html/buttons.html b/node_modules/materialize-css/test/html/buttons.html new file mode 100644 index 0000000..87fa995 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/test/html/cards.html b/node_modules/materialize-css/test/html/cards.html new file mode 100644 index 0000000..3e1a6f8 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/test/html/carousel.html b/node_modules/materialize-css/test/html/carousel.html new file mode 100644 index 0000000..10b4b72 --- /dev/null +++ b/node_modules/materialize-css/test/html/carousel.html @@ -0,0 +1,66 @@ + + + + + + Documentation - Materialize + + + + + + +

                Carousel within collapsible

                +
                  +
                • +
                  filter_dramaFirst
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  placeSecond
                  +
                  + +
                  +
                • +
                • +
                  whatshotThird
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/chips.html b/node_modules/materialize-css/test/html/chips.html new file mode 100644 index 0000000..3cba819 --- /dev/null +++ b/node_modules/materialize-css/test/html/chips.html @@ -0,0 +1,122 @@ + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + + + +
                +
                + +
                +
                +
                Default:
                +
                +
                +
                + + +
                +
                +
                + +
                +
                +
                +
                +
                +
                Modified proposal:
                +
                +
                +
                + phone + + +
                +
                + bookmark +
                + +
                +
                + bookmark +
                + +
                +
                +
                +
                + + + + + + + + + + + diff --git a/node_modules/materialize-css/test/html/collapsible.html b/node_modules/materialize-css/test/html/collapsible.html new file mode 100644 index 0000000..cfd458c --- /dev/null +++ b/node_modules/materialize-css/test/html/collapsible.html @@ -0,0 +1,191 @@ + + + + + + Documentation - Materialize + + + + +
                +
                +

                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.

                  +
                • +
                +
                +
                + + +

                Nested Collapsible

                + +
                  +
                • +
                  First
                  +
                  +
                    +
                  • +
                    First
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Second
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Third
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  +
                  +
                • +
                • +
                  Second
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  Third
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                + + + +
                  +
                • +
                  First
                  +
                  +
                    +
                  • +
                    First
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Second
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Third
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  +
                  +
                • +
                • +
                  Second
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  Third
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                +
                +

                Collapsible Callbacks

                +
                  +
                • +
                  onOpen
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  onClose
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/dropdown.html b/node_modules/materialize-css/test/html/dropdown.html new file mode 100644 index 0000000..5881715 --- /dev/null +++ b/node_modules/materialize-css/test/html/dropdown.html @@ -0,0 +1,601 @@ + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                + +Align left: ++ + + +

                + +Align right: -------------------------------- ++ + + + + +
                +
                + + + + + +
                + +
                +

                Scrolling in absolute container

                + + +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                s +
                + + + + + + + + + + + + +

                asdf

                +

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                asdf

                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/materialize-css/test/html/fixed_navbar.html b/node_modules/materialize-css/test/html/fixed_navbar.html new file mode 100644 index 0000000..0eb16a4 --- /dev/null +++ b/node_modules/materialize-css/test/html/fixed_navbar.html @@ -0,0 +1,139 @@ + + + + + + Documentation - Materialize + + + + + + + + +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                +

                Testing

                +
                + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/forms.html b/node_modules/materialize-css/test/html/forms.html new file mode 100644 index 0000000..bcd5ee8 --- /dev/null +++ b/node_modules/materialize-css/test/html/forms.html @@ -0,0 +1,295 @@ + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + + + + +
                +
                +
                +
                + account_circle + + +
                +
                + + +
                +
                + + +
                +
                +
                +
                + + +
                +
                +
                +
                + + +
                +
                +
                +
                + email + + +
                +
                +
                +

                Make sure these textareas are aligned correctly.

                +
                + mode_edit + + +
                +
                + + +
                +
                +
                +

                Make sure error message and label don't overlap.

                +
                + + +
                +
                + + +
                +
                +
                +
                + + +
                +
                + +

                Select

                + +
                +
                + + +
                + + + +
                + + +
                + + + +
                + + +
                +
                + + + +
                +
                + + +
                + + +
                + + +
                +
                + + +
                +
                + + +
                + +
                + + +
                +
                + +
                +
                + This is an inline select: +
                + + +
                +
                +
                + +
                +

                Select Icons

                +
                + + +
                + +
                + + +
                +
                + + +
                +

                + +

                +
                + + + + + + + + + + + + diff --git a/node_modules/materialize-css/test/html/materialbox.html b/node_modules/materialize-css/test/html/materialbox.html new file mode 100644 index 0000000..1e94872 --- /dev/null +++ b/node_modules/materialize-css/test/html/materialbox.html @@ -0,0 +1,87 @@ + + + + + + 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 inside fixed navbar +
                + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/multiple_modals.html b/node_modules/materialize-css/test/html/multiple_modals.html new file mode 100644 index 0000000..f45ce4f --- /dev/null +++ b/node_modules/materialize-css/test/html/multiple_modals.html @@ -0,0 +1,120 @@ + + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + + + Regular Modals + + + + + + + + + Fixed Footer Modals + + + + + + + + + + Bottom Sheet Modals + + + + + + + + + + + + + + + + + + diff --git a/node_modules/materialize-css/test/html/multiple_sidenav.html b/node_modules/materialize-css/test/html/multiple_sidenav.html new file mode 100644 index 0000000..079e3dc --- /dev/null +++ b/node_modules/materialize-css/test/html/multiple_sidenav.html @@ -0,0 +1,61 @@ + + + + + + + Materialize - Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/overlayZindex.html b/node_modules/materialize-css/test/html/overlayZindex.html new file mode 100644 index 0000000..f88c362 --- /dev/null +++ b/node_modules/materialize-css/test/html/overlayZindex.html @@ -0,0 +1,70 @@ + + + + + + Documentation - Materialize + + + + + + + + + + + menu + + + Modal + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/pushpin.html b/node_modules/materialize-css/test/html/pushpin.html new file mode 100644 index 0000000..784cfe7 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/test/html/scrollfire.html b/node_modules/materialize-css/test/html/scrollfire.html new file mode 100644 index 0000000..0a8d36f --- /dev/null +++ b/node_modules/materialize-css/test/html/scrollfire.html @@ -0,0 +1,99 @@ + + + + + + Documentation - Materialize + + + + + + +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + + +
                + scrollTop: 0 +
                + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/scrollspy.html b/node_modules/materialize-css/test/html/scrollspy.html new file mode 100644 index 0000000..16a466a --- /dev/null +++ b/node_modules/materialize-css/test/html/scrollspy.html @@ -0,0 +1,60 @@ + + + + + + Documentation - Materialize + + + + + + +
                +
                +
                +
                + + +
                + scrollTop: 0 +
                + + + + + + + + + \ No newline at end of file diff --git a/node_modules/materialize-css/test/html/tabs.html b/node_modules/materialize-css/test/html/tabs.html new file mode 100644 index 0000000..7c1b4a6 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/test/html/waves.html b/node_modules/materialize-css/test/html/waves.html new file mode 100644 index 0000000..e7db2f4 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/test2.html b/node_modules/materialize-css/test2.html new file mode 100644 index 0000000..5ccb800 --- /dev/null +++ b/node_modules/materialize-css/test2.html @@ -0,0 +1,108 @@ + + + + + + Documentation - Materialize + + + + + + + + +
                  +
                • +
                  First
                  +
                  +
                    +
                  • +
                    First
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Second
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Third
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  +
                  +
                • +
                • +
                  Second
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                • +
                  Third
                  +

                  Lorem ipsum dolor sit amet.

                  +
                • +
                + + + +
                  +
                • +
                  First
                  +
                  +
                    +
                  • +
                    First
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Second
                    +

                    Lorem ipsum dolor sit amet.

                    +
                  • +
                  • +
                    Third
                    +

                    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/node_modules/materialize-css/tests/spec/autocomplete/autocompleteFixture.html b/node_modules/materialize-css/tests/spec/autocomplete/autocompleteFixture.html new file mode 100644 index 0000000..7b9ec83 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/autocomplete/autocompleteFixture.html @@ -0,0 +1,18 @@ +
                +
                +
                +
                + + +
                +
                +
                +
                +
                +
                + + +
                +
                +
                +
                \ No newline at end of file diff --git a/node_modules/materialize-css/tests/spec/autocomplete/autocompleteSpec.js b/node_modules/materialize-css/tests/spec/autocomplete/autocompleteSpec.js new file mode 100644 index 0000000..d49ac5a --- /dev/null +++ b/node_modules/materialize-css/tests/spec/autocomplete/autocompleteSpec.js @@ -0,0 +1,70 @@ +describe("Autocomplete Plugin", function () { + beforeEach(function() { + loadFixtures('autocomplete/autocompleteFixture.html'); + $('input.autocomplete').autocomplete({ + data: { + "Apple": null, + "Microsoft": null, + "Google": 'http://placehold.it/250x250' + } + }); + }); + + describe("Autocomplete", function () { + // var browserSelect, normalInput, normalDropdown; + + // beforeEach(function() { + // browserSelect = $('select.normal'); + // }); + + it("should work with multiple initializations", function () { + var $normal = $('#normal-autocomplete'); + var $parent = $normal.parent(); + $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'); + // setTimeout(function() { + // 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); + + }); + }); + +}); diff --git a/node_modules/materialize-css/tests/spec/cards/cardsFixture.html b/node_modules/materialize-css/tests/spec/cards/cardsFixture.html new file mode 100644 index 0000000..dac4f78 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/cards/cardsSpec.js b/node_modules/materialize-css/tests/spec/cards/cardsSpec.js new file mode 100644 index 0000000..ffd2da3 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/cards/cardsSpec.js @@ -0,0 +1,100 @@ +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'); + + 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); + + }); + }); + + 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/node_modules/materialize-css/tests/spec/chips/chipsFixture.html b/node_modules/materialize-css/tests/spec/chips/chipsFixture.html new file mode 100644 index 0000000..61d00f3 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/chips/chipsFixture.html @@ -0,0 +1,4 @@ +
                +
                +
                +
                \ No newline at end of file diff --git a/node_modules/materialize-css/tests/spec/chips/chipsSpec.js b/node_modules/materialize-css/tests/spec/chips/chipsSpec.js new file mode 100644 index 0000000..f72162b --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/collapsible/collapsible.html b/node_modules/materialize-css/tests/spec/collapsible/collapsible.html new file mode 100644 index 0000000..69c47c2 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/collapsible/collapsible.html @@ -0,0 +1,44 @@ + + +
                  +
                • +
                  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/node_modules/materialize-css/tests/spec/collapsible/collapsibleSpec.js b/node_modules/materialize-css/tests/spec/collapsible/collapsibleSpec.js new file mode 100644 index 0000000..bdfd265 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/collapsible/collapsibleSpec.js @@ -0,0 +1,92 @@ +describe( "Collapsible Plugin", function () { + var collapsible, accordion; + + beforeEach(function() { + loadFixtures('collapsible/collapsible.html'); + collapsible = $('.collapsible'); + accordion = $('.accordion'); + popout = $('.popout'); + collapsible.collapsible(); + }); + + describe( "collapsible", function () { + + it("should open all items, keeping all open", function () { + // Collapsible body height should be 0 on start when hidden. + var headers = collapsible.find('.collapsible-header'); + var bodies = collapsible.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(); + }); + bodies.each(function() { + expect($(this)).toBeVisible('because collapsible bodies not visible after being opened.'); + }); + }); + }); + + 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/node_modules/materialize-css/tests/spec/dropdown/dropdownFixture.html b/node_modules/materialize-css/tests/spec/dropdown/dropdownFixture.html new file mode 100644 index 0000000..a72edc3 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/dropdown/dropdownFixture.html @@ -0,0 +1,14 @@ +
                +
                + + Drop Me! + + + +
                +
                \ No newline at end of file diff --git a/node_modules/materialize-css/tests/spec/dropdown/dropdownSpec.js b/node_modules/materialize-css/tests/spec/dropdown/dropdownSpec.js new file mode 100644 index 0000000..568a610 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/dropdown/dropdownSpec.js @@ -0,0 +1,51 @@ +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); + }); + }); +}); diff --git a/node_modules/materialize-css/tests/spec/helper.js b/node_modules/materialize-css/tests/spec/helper.js new file mode 100644 index 0000000..08cc019 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/helper.js @@ -0,0 +1 @@ +jasmine.getFixtures().fixturesPath = 'tests/spec'; \ No newline at end of file diff --git a/node_modules/materialize-css/tests/spec/materialbox/materialboxFixture.html b/node_modules/materialize-css/tests/spec/materialbox/materialboxFixture.html new file mode 100644 index 0000000..ab4d933 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/materialbox/materialboxFixture.html @@ -0,0 +1,3 @@ +
                + +
                \ No newline at end of file diff --git a/node_modules/materialize-css/tests/spec/materialbox/materialboxSpec.js b/node_modules/materialize-css/tests/spec/materialbox/materialboxSpec.js new file mode 100644 index 0000000..0c6c1cf --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/scrollFire/scrollFireFixture.html b/node_modules/materialize-css/tests/spec/scrollFire/scrollFireFixture.html new file mode 100644 index 0000000..900d4f2 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/scrollFire/scrollFireSpec.js b/node_modules/materialize-css/tests/spec/scrollFire/scrollFireSpec.js new file mode 100644 index 0000000..6b42d12 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/select/selectFixture.html b/node_modules/materialize-css/tests/spec/select/selectFixture.html new file mode 100644 index 0000000..7a974fb --- /dev/null +++ b/node_modules/materialize-css/tests/spec/select/selectFixture.html @@ -0,0 +1,40 @@ +
                +
                + + +
                +
                + +
                +
                + + +
                +
                + +
                +
                + + +
                +
                diff --git a/node_modules/materialize-css/tests/spec/select/selectSpec.js b/node_modules/materialize-css/tests/spec/select/selectSpec.js new file mode 100644 index 0000000..c76555c --- /dev/null +++ b/node_modules/materialize-css/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(null, '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/node_modules/materialize-css/tests/spec/sideNav/sideNavFixture.html b/node_modules/materialize-css/tests/spec/sideNav/sideNavFixture.html new file mode 100644 index 0000000..2db6560 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/sideNav/sideNavFixture.html @@ -0,0 +1,16 @@ + +menu \ No newline at end of file diff --git a/node_modules/materialize-css/tests/spec/sideNav/sideNavSpec.js b/node_modules/materialize-css/tests/spec/sideNav/sideNavSpec.js new file mode 100644 index 0000000..b90ce89 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/tabs/tabsFixture.html b/node_modules/materialize-css/tests/spec/tabs/tabsFixture.html new file mode 100644 index 0000000..49dae37 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/tabs/tabsSpec.js b/node_modules/materialize-css/tests/spec/tabs/tabsSpec.js new file mode 100644 index 0000000..ed330d8 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/tabs/tabsSpec.js @@ -0,0 +1,87 @@ +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 () { + var tabsScrollWidth = 0; + normalTabs.parent().css('width', '400px'); + normalTabs.find('.tab').each(function() { + tabsScrollWidth += $(this).width(); + }); + + expect(tabsScrollWidth).toBeGreaterThan(normalTabs.width(), 'Scroll width should exceed tabs width'); + }); + + }); +}); \ No newline at end of file diff --git a/node_modules/materialize-css/tests/spec/toast/toastSpec.js b/node_modules/materialize-css/tests/spec/toast/toastSpec.js new file mode 100644 index 0000000..be9e0d8 --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/tests/spec/tooltip/tooltipFixture.html b/node_modules/materialize-css/tests/spec/tooltip/tooltipFixture.html new file mode 100644 index 0000000..87bc871 --- /dev/null +++ b/node_modules/materialize-css/tests/spec/tooltip/tooltipFixture.html @@ -0,0 +1,17 @@ + + Hover me! + + + + Hover me! + diff --git a/node_modules/materialize-css/tests/spec/tooltip/tooltipSpec.js b/node_modules/materialize-css/tests/spec/tooltip/tooltipSpec.js new file mode 100644 index 0000000..ff7f31d --- /dev/null +++ b/node_modules/materialize-css/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/node_modules/materialize-css/transitions.html b/node_modules/materialize-css/transitions.html new file mode 100644 index 0000000..f6e2acd --- /dev/null +++ b/node_modules/materialize-css/transitions.html @@ -0,0 +1,284 @@ + + + + + + + + + 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.

                + + + + + + + + + + + + + + + +
                Option NameDescription
                selectorOrElThe selector or element that the transition targets.
                +
                + + 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.

                + + + + + + + + + + + + + + + +
                Option NameDescription
                selectorOrElThe selector or element that the transition targets.
                +
                + + 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/node_modules/materialize-css/typography.html b/node_modules/materialize-css/typography.html new file mode 100644 index 0000000..81a40a7 --- /dev/null +++ b/node_modules/materialize-css/typography.html @@ -0,0 +1,275 @@ + + + + + + + + + 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/node_modules/materialize-css/waves.html b/node_modules/materialize-css/waves.html new file mode 100644 index 0000000..bd0db0e --- /dev/null +++ b/node_modules/materialize-css/waves.html @@ -0,0 +1,291 @@ + + + + + + + + + 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